~openstack-charm-sync/charms/trusty/cinder-ceph/next

« back to all changes in this revision

Viewing changes to hooks/cinder_hooks.py

  • Committer: Edward Hope-Morley
  • Date: 2015-09-16 01:07:56 UTC
  • mfrom: (40.1.7 trunk)
  • Revision ID: edward.hope-morley@canonical.com-20150916010756-6hqtjf3ogftq55p8
[gnuoy,r=hopem]

Update cinder-ceph broker code to scale-out bug.

Closes-Bug: #1453940

Show diffs side-by-side

added added

removed removed

Lines of Context:
17
17
    UnregisteredHookError,
18
18
    config,
19
19
    service_name,
20
 
    relation_get,
21
20
    relation_set,
22
21
    relation_ids,
23
22
    log,
24
 
    INFO,
25
 
    ERROR,
26
23
)
27
24
from charmhelpers.fetch import apt_install, apt_update
28
25
from charmhelpers.core.host import (
30
27
    service_restart,
31
28
)
32
29
from charmhelpers.contrib.storage.linux.ceph import (
 
30
    send_request_if_needed,
 
31
    is_request_complete,
33
32
    ensure_ceph_keyring,
34
33
    CephBrokerRq,
35
 
    CephBrokerRsp,
36
34
    delete_keyring,
37
35
)
38
36
from charmhelpers.payload.execd import execd_preinstall
55
53
        os.mkdir('/etc/ceph')
56
54
 
57
55
 
 
56
def get_ceph_request():
 
57
    service = service_name()
 
58
    rq = CephBrokerRq()
 
59
    replicas = config('ceph-osd-replication-count')
 
60
    rq.add_op_create_pool(name=service, replica_count=replicas)
 
61
    return rq
 
62
 
 
63
 
58
64
@hooks.hook('ceph-relation-changed')
59
65
@restart_on_change(restart_map())
60
66
def ceph_changed():
68
74
        log('Could not create ceph keyring: peer not ready?')
69
75
        return
70
76
 
71
 
    settings = relation_get()
72
 
    if settings and 'broker_rsp' in settings:
73
 
        rsp = CephBrokerRsp(settings['broker_rsp'])
74
 
        # Non-zero return code implies failure
75
 
        if rsp.exit_code:
76
 
            log("Ceph broker request failed (rc=%s, msg=%s)" %
77
 
                (rsp.exit_code, rsp.exit_msg), level=ERROR)
78
 
            return
79
 
 
80
 
        log("Ceph broker request succeeded (rc=%s, msg=%s)" %
81
 
            (rsp.exit_code, rsp.exit_msg), level=INFO)
 
77
    if is_request_complete(get_ceph_request()):
 
78
        log('Request complete')
82
79
        CONFIGS.write_all()
83
80
        set_ceph_env_variables(service=service)
84
81
        for rid in relation_ids('storage-backend'):
85
82
            storage_backend(rid)
86
 
 
87
83
        # Ensure that cinder-volume is restarted since only now can we
88
84
        # guarantee that ceph resources are ready.
89
85
        service_restart('cinder-volume')
90
86
    else:
91
 
        rq = CephBrokerRq()
92
 
        replicas = config('ceph-osd-replication-count')
93
 
        rq.add_op_create_pool(name=service, replica_count=replicas)
94
 
        for rid in relation_ids('ceph'):
95
 
            relation_set(relation_id=rid, broker_req=rq.request)
96
 
            log("Request(s) sent to Ceph broker (rid=%s)" % (rid))
 
87
        send_request_if_needed(get_ceph_request())
97
88
 
98
89
 
99
90
@hooks.hook('ceph-relation-broken')