1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22 """spawn a local manager and worker"""
23
24 import gettext
25 import os
26 import shutil
27 import tempfile
28
29 from twisted.internet import reactor
30 from twisted.internet.defer import Deferred
31 from twisted.internet.error import ProcessDone
32 from twisted.internet.protocol import ProcessProtocol
33
34 from flumotion.common.signals import SignalMixin
35 from flumotion.configure import configure
36
37 __version__ = "$Rev: 6964 $"
38 _ = gettext.gettext
39
40
43
44 self.deferred = Deferred()
45
47 if failure.check(ProcessDone):
48 self.deferred.callback(None)
49 else:
50 self.deferred.callback(failure)
51
52
54 """I am a class which can start a local manager and a worker which
55 connects to it.
56 It's mainly used by the greeter in a debug mode and by the testsuite
57 """
58 __signals__ = ['description-changed',
59 'error',
60 'finished',
61 ]
62
64 self._path = tempfile.mkdtemp(suffix='.flumotion')
65 self._confDir = os.path.join(self._path, 'etc')
66 self._logDir = os.path.join(self._path, 'var', 'log')
67 self._runDir = os.path.join(self._path, 'var', 'run')
68 self._port = port
69
70
71
74
77
80
83
85
86 d = Deferred()
87
88 def chain(args, description, failMessage):
89 d.addCallback(self._spawnProcess, args, description, failMessage)
90
91 for serviceName in [_('manager'), _('worker')]:
92 chain(["flumotion",
93 "-C", self._confDir,
94 "-L", self._logDir,
95 "-R", self._runDir,
96 "create", serviceName,
97 "admin", str(self._port)],
98 _('Creating %s ...') % serviceName,
99 _("Could not create %s." % serviceName))
100 chain(["flumotion",
101 "-C", self._confDir,
102 "-L", self._logDir,
103 "-R", self._runDir,
104 "start", serviceName, "admin"],
105 _('Starting %s ...' % serviceName),
106 _("Could not start %s." % serviceName))
107
108 d.addErrback(lambda f: None)
109
110 def done(result):
111 self._finished()
112 d.addCallback(done)
113
114
115 d.callback(None)
116
117 return d
118
119 - def stop(self, cleanUp=False):
120 d = Deferred()
121
122 def chain(args, description, failMessage):
123 d.addCallback(self._spawnProcess, args, description, failMessage)
124
125 for serviceName in [_('manager'), _('worker')]:
126 chain(["flumotion",
127 "-C", self._confDir,
128 "-L", self._logDir,
129 "-R", self._runDir,
130 "stop", serviceName, "admin"], '', '')
131
132 def done(result):
133 if cleanUp:
134 self._cleanUp()
135 d.addCallback(done)
136
137
138 d.callback(None)
139 return d
140
141
142
144 self.emit('finished')
145
146 - def _error(self, failure, failMessage, args):
147 self.emit('error', failure, failMessage, args)
148
151
152 - def _spawnProcess(self, result, args, description, failMessage):
165 protocol.deferred.addErrback(error, failMessage)
166 return protocol.deferred
167
169 shutil.rmtree(self._path)
170