1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22 """
23 main for flumotion-command
24 """
25
26 import sys
27
28 from twisted.internet import reactor, defer
29
30 from flumotion.common import errors, log
31 from flumotion.admin import connections, admin
32
33 from flumotion.monitor.nagios import util
34
35 from flumotion.admin.command import component, manager, worker, common
36
37 from flumotion.common.common import version
38
39 __version__ = "$Rev: 6562 $"
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
58 usage = "%prog %command"
59 description = "Run commands on Flumotion manager."
60
61 loginDeferred = None
62 medium = None
63
64 subCommandClasses = [component.Component, manager.Manager, worker.Worker]
65
67 self.parser.add_option('-v', '--version',
68 action="store_true", dest="version",
69 help="show version information")
70 default = "user:test@localhost:7531"
71 self.parser.add_option('-m', '--manager',
72 action="store", type="string", dest="manager",
73 help="the manager connection string, " \
74 "in the form [username[:password]@]host:port " \
75 "(defaults to %s)" % default,
76 default=default)
77 self.parser.add_option('-T', '--transport',
78 action="store", type="string", dest="transport",
79 help="transport protocol to use (tcp/ssl) [default ssl]",
80 default="ssl")
81
87
89
90 self.loginDeferred = defer.Deferred()
91
92 self.debug('parse: chain up')
93
94
95 ret = util.LogCommand.parse(self, argv)
96
97 if ret is None:
98 self.debug('parse returned None, help/usage printed')
99 return ret
100
101 if ret:
102 self.debug('parse returned %r' % ret)
103 return ret
104
105 if self.parser.help_printed or self.parser.usage_printed:
106 return 0
107
108
109 self.debug('parse: connect')
110 self.connect(self.options)
111
112
113
114 def cb(result):
115 self.debug('parse: cb: done')
116 reactor.callLater(0, reactor.stop)
117
118 def eb(failure):
119 self.debug('parse: eb: failure %s' %
120 log.getFailureMessage(failure))
121 if failure.check(common.Exited):
122 sys.stderr.write(failure.value.msg + '\n')
123 reactor.exitStatus = failure.value.code
124 else:
125 sys.stderr.write(log.getFailureMessage(failure) + '\n')
126 reactor.exitStatus = 1
127
128 reactor.callLater(0, reactor.stop)
129 return
130
131 self.loginDeferred.addCallback(cb)
132 self.loginDeferred.addErrback(eb)
133
134
135 self.debug('parse: run the reactor')
136 self.run()
137 self.debug('parse: ran the reactor')
138
139 return reactor.exitStatus
140
142 """
143 Run the reactor.
144
145 Resets .exitStatus, and returns its value after running the reactor.
146 """
147
148
149 self.debug('running reactor')
150
151 reactor.exitStatus = 0
152 reactor.run()
153 self.debug('ran reactor')
154
155 return reactor.exitStatus
156
181
185
192
193
195 c = Command()
196 try:
197 ret = c.parse(args[1:])
198 except common.Exited, e:
199 ret = e.code
200 if ret == 0:
201 sys.stdout.write(e.msg + '\n')
202 else:
203 sys.stderr.write(e.msg + '\n')
204
205 return ret
206