~mark-mims/charms/precise/juju/trunk

« back to all changes in this revision

Viewing changes to files/old-juju-service-started-script

  • Committer: Mark Mims
  • Date: 2012-05-26 12:13:32 UTC
  • Revision ID: mark.mims@canonical.com-20120526121332-4xov3zq6qx4z2121
trimming the fat for the juju sub

Show diffs side-by-side

added added

removed removed

Lines of Context:
1
 
#!/usr/bin/python
2
 
 
3
 
import sys, os
4
 
 
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
9
 
 
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
17
 
 
18
 
#class ServiceStateWatcher:
19
 
 
20
 
def get_provider():
21
 
    env_config = EnvironmentsConfig()
22
 
    env_config.load_or_write_sample()
23
 
    environment = env_config.get_default()
24
 
    return environment.get_machine_provider()
25
 
 
26
 
@inlineCallbacks
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:
32
 
            returnValue(service)
33
 
 
34
 
@inlineCallbacks
35
 
def get_service_state(client,service_name):
36
 
    service = yield get_service(client,service_name)
37
 
    if service:
38
 
        units = yield service.get_all_unit_states()
39
 
        for unit in units:
40
 
            unit_workflow_client = WorkflowStateClient(client, unit)
41
 
            state = yield unit_workflow_client.get_state()
42
 
            returnValue(state)
43
 
 
44
 
@inlineCallbacks
45
 
def get_service_status(service_name):
46
 
    try:
47
 
        client = yield get_provider().connect()
48
 
        service = yield get_service(client,service_name)
49
 
        status = yield get_service_state(client,service_name)
50
 
        returnValue(status)
51
 
    finally:
52
 
        yield client.close()
53
 
 
54
 
 
55
 
@inlineCallbacks
56
 
def wait_for_service_to_start(service_name, retry_count, result):
57
 
    interval = 10 # seconds
58
 
    status = yield get_service_status(service_name)
59
 
 
60
 
    if status == "started":
61
 
        result[0] = 0
62
 
        reactor.stop()
63
 
    else:
64
 
        if retry_count <= 0:
65
 
            result[0] = 1
66
 
            reactor.stop()
67
 
        else:
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)
70
 
            sys.stdout.flush()
71
 
            retry_count -= interval
72
 
            reactor.callLater(interval, wait_for_service_to_start, service_name, retry_count, result)
73
 
 
74
 
 
75
 
def usage():
76
 
    print "Usage: juju-environment <environment_name>"
77
 
    sys.exit(1)
78
 
 
79
 
if __name__ == "__main__":
80
 
 
81
 
    len(sys.argv) == 2 or usage()
82
 
    environment_name=sys.argv[1]
83
 
 
84
 
    try:
85
 
        result = [1]
86
 
        reactor.callWhenRunning(wait_for_service_to_start, service_name, retry_count, result)
87
 
        reactor.run()
88
 
        sys.exit(result[0]) 
89
 
    except JujuError, error:
90
 
        sys.exit("error: %s" % (error,))
91