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: 8333 $"
38 _ = gettext.gettext
39
40
52
53
55 """I am a class which can start a local manager and a worker which
56 connects to it.
57 It's mainly used by the greeter in a debug mode and by the testsuite
58 """
59 __signals__ = ['description-changed',
60 'error',
61 'finished',
62 ]
63
65 self._path = tempfile.mkdtemp(suffix='.flumotion')
66 self._confDir = os.path.join(self._path, 'etc')
67 self._logDir = os.path.join(self._path, 'var', 'log')
68 self._runDir = os.path.join(self._path, 'var', 'run')
69 self._port = port
70
71
72
75
78
81
84
91
92 for serviceName in ['manager', 'worker']:
93 chain(["flumotion",
94 "-C", self._confDir,
95 "-L", self._logDir,
96 "-R", self._runDir,
97 "create", serviceName,
98 "admin", str(self._port)],
99 _('Creating %s ...') % serviceName,
100 _("Could not create %s." % serviceName))
101 chain(["flumotion",
102 "-C", self._confDir,
103 "-L", self._logDir,
104 "-R", self._runDir,
105 "start", serviceName, "admin"],
106 _('Starting %s ...' % serviceName),
107 _("Could not start %s." % serviceName))
108
109 d.addErrback(lambda f: None)
110
111 def done(result):
112 self._finished()
113 d.addCallback(done)
114
115
116 d.callback(None)
117
118 return d
119
120 - def stop(self, cleanUp=False):
125
126 for serviceName in ['manager', 'worker']:
127 chain(["flumotion",
128 "-C", self._confDir,
129 "-L", self._logDir,
130 "-R", self._runDir,
131 "stop", serviceName, "admin"], '', '')
132
133 def done(result):
134 if cleanUp:
135 self._cleanUp()
136 d.addCallback(done)
137
138
139 d.callback(None)
140 return d
141
142
143
145 self.emit('finished')
146
147 - def _error(self, failure, failMessage, args):
148 self.emit('error', failure, failMessage, args)
149
152
153 - def _spawnProcess(self, result, args, description, failMessage):
167 protocol.deferred.addErrback(error, failMessage)
168 return protocol.deferred
169
171 shutil.rmtree(self._path)
172