diff --git a/hooks/glance_contexts.py b/hooks/glance_contexts.py index b258021c..65171422 100644 --- a/hooks/glance_contexts.py +++ b/hooks/glance_contexts.py @@ -32,6 +32,21 @@ class CephContext(OSContextGenerator): } +class ObjectStoreContext(OSContextGenerator): + interfaces = ['object-store'] + + def __call__(self): + """ + Used to generate template context to be added to glance-api.conf in + the presence of a 'object-store' relation. + """ + if not relantion_ids('object-store'): + return {} + return { + 'swift_store': True, + } + + class HAProxyContext(OSContextGenerator): interfaces = ['ceph'] diff --git a/hooks/glance_relations.py b/hooks/glance_relations.py index 7487f8ac..31c79887 100755 --- a/hooks/glance_relations.py +++ b/hooks/glance_relations.py @@ -158,33 +158,17 @@ def image_service_joined(relation_id=None): def object_store_joined(): - relids = relation_ids('identity-service') - if not relids: + if 'identity-service' not in CONFIGS.complete_contexts(): juju_log('INFO', 'Deferring swift stora configuration until ' \ 'an identity-service relation exists') return - set_or_update(key='default_store', value='swift', file='api') - set_or_update(key='swift_store_create_container_on_put', value=True, file='api') + if 'object-store' not in CONFIGS.complete_contexts(): + juju_log('INFO', 'swift relation incomplete') + return - for rid in relids: - for unit in relation_list(rid=rid): - svc_tenant = relation_get(attribute='service_tenant', rid=rid, unit=unit) - svc_username = relation_get(attribute='service_username', rid=rid, unit=unit) - svc_password = relation_get(attribute='service_passwod', rid=rid, unit=unit) - auth_host = relation_get(attribute='private-address', rid=rid, unit=unit) - port = relation_get(attribute='service_port', rid=rid, unit=unit) - - if auth_host and port: - auth_url = "http://%s:%s/v2.0" % (auth_host, port) - if svc_tenant and svc_username: - value = "%s:%s" % (svc_tenant, svc_username) - set_or_update(key='swift_store_user', value=value, file='api') - if svc_password: - set_or_update(key='swift_store_key', value=svc_password, file='api') - if auth_url: - set_or_update(key='swift_store_auth_address', value=auth_url, file='api') + CONFIGS.write('/etc/glance/glance-api.conf') restart('glance-api') diff --git a/hooks/glance_utils.py b/hooks/glance_utils.py index 1debb8c5..d952a7a4 100755 --- a/hooks/glance_utils.py +++ b/hooks/glance_utils.py @@ -51,7 +51,8 @@ CONFIG_FILES = OrderedDict([ ('/etc/glance/glance-api.conf', { 'hook_contexts': [context.SharedDBContext(), context.IdentityServiceContext(), - glance_contexts.CephContext()], + glance_contexts.CephContext(), + glance_contexts.ObjectStoreContext()], 'services': ['glance-api'] }), ('/etc/glance/glance-api-paste.ini', { diff --git a/templates/essex/glance-api.conf b/templates/essex/glance-api.conf index bc31874a..af85dff4 100644 --- a/templates/essex/glance-api.conf +++ b/templates/essex/glance-api.conf @@ -3,6 +3,8 @@ verbose = True debug = True {% if rbd_pool %} default_store = rbd +{% elif swift_store %} +default_store = swift {% else %} default_store = file {% endif %} @@ -41,11 +43,18 @@ qpid_protocol = tcp qpid_tcp_nodelay = True filesystem_store_datadir = /var/lib/glance/images/ swift_store_auth_version = 2 +{% if swift_store %} +swift_store_auth_address = http://{{ service_host }}:{{ service_port }}/v2.0/ +swift_store_user = {{ admin_tenant_name }}:{{ admin_user }} +swift_store_key = {{ admin_password }} +swift_store_create_container_on_put = True +{% else %} swift_store_auth_address = 127.0.0.1:35357/v2.0/ swift_store_user = jdoe:jdoe swift_store_key = a86850deb2742ec3cb41518e26aa2d89 -swift_store_container = glance swift_store_create_container_on_put = False +{% endif %} +swift_store_container = glance swift_store_large_object_size = 5120 swift_store_large_object_chunk_size = 200 swift_enable_snet = False diff --git a/templates/folsom/glance-api.conf b/templates/folsom/glance-api.conf index cbebf3fb..8b3ec148 100644 --- a/templates/folsom/glance-api.conf +++ b/templates/folsom/glance-api.conf @@ -3,6 +3,8 @@ verbose = True debug = True {% if rbd_pool %} default_store = rbd +{% elif swift_store %} +default_store = swift {% else %} default_store = file {% endif %} @@ -48,11 +50,18 @@ qpid_protocol = tcp qpid_tcp_nodelay = True filesystem_store_datadir = /var/lib/glance/images/ swift_store_auth_version = 2 +{% if swift_store %} +swift_store_auth_address = http://{{ service_host }}:{{ service_port }}/v2.0/ +swift_store_user = {{ admin_tenant_name }}:{{ admin_user }} +swift_store_key = {{ admin_password }} +swift_store_create_container_on_put = True +{% else %} swift_store_auth_address = 127.0.0.1:5000/v2.0/ swift_store_user = jdoe:jdoe swift_store_key = a86850deb2742ec3cb41518e26aa2d89 -swift_store_container = glance swift_store_create_container_on_put = False +{% endif %} +swift_store_container = glance swift_store_large_object_size = 5120 swift_store_large_object_chunk_size = 200 swift_enable_snet = False