5
from twisted.internet import reactor
6
from twisted.internet import defer
7
from twisted.internet.defer import inlineCallbacks, Deferred, returnValue
8
from twisted.python.failure import Failure
10
from juju.errors import JujuError
11
from juju.errors import ProviderError
12
from juju.environment.config import EnvironmentsConfig
13
from juju.environment.errors import EnvironmentsConfigError
14
from juju.state.errors import UnitRelationStateNotFound
15
from juju.state.service import ServiceStateManager
16
from juju.unit.workflow import WorkflowStateClient
18
#class ServiceStateWatcher:
21
env_config = EnvironmentsConfig()
22
env_config.load_or_write_sample()
23
environment = env_config.get_default()
24
return environment.get_machine_provider()
27
def get_service(client,service_name):
28
service_manager = ServiceStateManager(client)
29
services = yield service_manager.get_all_service_states() # service_manager.get_service_state(service_name) hung on nonexistent service
30
for service in services:
31
if service_name == service.service_name:
35
def get_service_state(client,service_name):
36
service = yield get_service(client,service_name)
38
units = yield service.get_all_unit_states()
40
unit_workflow_client = WorkflowStateClient(client, unit)
41
state = yield unit_workflow_client.get_state()
45
def get_service_status(service_name):
47
client = yield get_provider().connect()
48
service = yield get_service(client,service_name)
49
status = yield get_service_state(client,service_name)
56
def wait_for_service_to_start(service_name, retry_count, result):
57
interval = 10 # seconds
58
status = yield get_service_status(service_name)
60
if status == "started":
68
print "service not started... will continue to check for %s seconds" % retry_count
69
#sys.stderr.write("service not started... will continue to check for %s seconds" % retry_count)
71
retry_count -= interval
72
reactor.callLater(interval, wait_for_service_to_start, service_name, retry_count, result)
76
print "Usage: juju-environment <environment_name>"
79
if __name__ == "__main__":
81
len(sys.argv) == 2 or usage()
82
environment_name=sys.argv[1]
86
reactor.callWhenRunning(wait_for_service_to_start, service_name, retry_count, result)
89
except JujuError, error:
90
sys.exit("error: %s" % (error,))