Merge lp:~openstack-charmers/charms/precise/cinder/active-active into lp:~openstack-charmers-archive/charms/precise/cinder/trunk
- Precise Pangolin (12.04)
- active-active
- Merge into trunk
Proposed by
Edward Hope-Morley
Status: | Work in progress |
---|---|
Proposed branch: | lp:~openstack-charmers/charms/precise/cinder/active-active |
Merge into: | lp:~openstack-charmers-archive/charms/precise/cinder/trunk |
Diff against target: |
356 lines (+159/-33) 5 files modified
hooks/charmhelpers/contrib/hahelpers/apache.py (+9/-8) hooks/charmhelpers/contrib/openstack/context.py (+68/-21) hooks/charmhelpers/contrib/openstack/neutron.py (+14/-4) hooks/cinder_hooks.py (+8/-0) templates/grizzly/cinder.conf (+60/-0) |
To merge this branch: | bzr merge lp:~openstack-charmers/charms/precise/cinder/active-active |
Related bugs: |
Reviewer | Review Type | Date Requested | Status |
---|---|---|---|
OpenStack Charmers | Pending | ||
Review via email: mp+213043@code.launchpad.net |
Commit message
Description of the change
To post a comment you must log in.
- 48. By Edward Hope-Morley
-
[hopem] set charm-helpers.yaml to point to trunk and synced charm-helpers
Unmerged revisions
- 48. By Edward Hope-Morley
-
[hopem] set charm-helpers.yaml to point to trunk and synced charm-helpers
- 47. By Edward Hope-Morley
-
[hopem] synced charm-helpers
- 46. By Edward Hope-Morley
-
[hopem] updated from trunk
Preview Diff
[H/L] Next/Prev Comment, [J/K] Next/Prev File, [N/P] Next/Prev Hunk
1 | === added symlink 'hooks/amqp-relation-departed' | |||
2 | === target is u'cinder_hooks.py' | |||
3 | === modified file 'hooks/charmhelpers/contrib/hahelpers/apache.py' | |||
4 | --- hooks/charmhelpers/contrib/hahelpers/apache.py 2013-10-17 21:48:08 +0000 | |||
5 | +++ hooks/charmhelpers/contrib/hahelpers/apache.py 2014-03-28 10:00:55 +0000 | |||
6 | @@ -39,14 +39,15 @@ | |||
7 | 39 | 39 | ||
8 | 40 | 40 | ||
9 | 41 | def get_ca_cert(): | 41 | def get_ca_cert(): |
18 | 42 | ca_cert = None | 42 | ca_cert = config_get('ssl_ca') |
19 | 43 | log("Inspecting identity-service relations for CA SSL certificate.", | 43 | if ca_cert is None: |
20 | 44 | level=INFO) | 44 | log("Inspecting identity-service relations for CA SSL certificate.", |
21 | 45 | for r_id in relation_ids('identity-service'): | 45 | level=INFO) |
22 | 46 | for unit in relation_list(r_id): | 46 | for r_id in relation_ids('identity-service'): |
23 | 47 | if not ca_cert: | 47 | for unit in relation_list(r_id): |
24 | 48 | ca_cert = relation_get('ca_cert', | 48 | if ca_cert is None: |
25 | 49 | rid=r_id, unit=unit) | 49 | ca_cert = relation_get('ca_cert', |
26 | 50 | rid=r_id, unit=unit) | ||
27 | 50 | return ca_cert | 51 | return ca_cert |
28 | 51 | 52 | ||
29 | 52 | 53 | ||
30 | 53 | 54 | ||
31 | === modified file 'hooks/charmhelpers/contrib/openstack/context.py' | |||
32 | --- hooks/charmhelpers/contrib/openstack/context.py 2014-03-25 12:26:41 +0000 | |||
33 | +++ hooks/charmhelpers/contrib/openstack/context.py 2014-03-28 10:00:55 +0000 | |||
34 | @@ -1,5 +1,6 @@ | |||
35 | 1 | import json | 1 | import json |
36 | 2 | import os | 2 | import os |
37 | 3 | import time | ||
38 | 3 | 4 | ||
39 | 4 | from base64 import b64decode | 5 | from base64 import b64decode |
40 | 5 | 6 | ||
41 | @@ -113,7 +114,8 @@ | |||
42 | 113 | class SharedDBContext(OSContextGenerator): | 114 | class SharedDBContext(OSContextGenerator): |
43 | 114 | interfaces = ['shared-db'] | 115 | interfaces = ['shared-db'] |
44 | 115 | 116 | ||
46 | 116 | def __init__(self, database=None, user=None, relation_prefix=None): | 117 | def __init__(self, |
47 | 118 | database=None, user=None, relation_prefix=None, ssl_dir=None): | ||
48 | 117 | ''' | 119 | ''' |
49 | 118 | Allows inspecting relation for settings prefixed with relation_prefix. | 120 | Allows inspecting relation for settings prefixed with relation_prefix. |
50 | 119 | This is useful for parsing access for multiple databases returned via | 121 | This is useful for parsing access for multiple databases returned via |
51 | @@ -122,6 +124,7 @@ | |||
52 | 122 | self.relation_prefix = relation_prefix | 124 | self.relation_prefix = relation_prefix |
53 | 123 | self.database = database | 125 | self.database = database |
54 | 124 | self.user = user | 126 | self.user = user |
55 | 127 | self.ssl_dir = ssl_dir | ||
56 | 125 | 128 | ||
57 | 126 | def __call__(self): | 129 | def __call__(self): |
58 | 127 | self.database = self.database or config('database') | 130 | self.database = self.database or config('database') |
59 | @@ -139,19 +142,44 @@ | |||
60 | 139 | 142 | ||
61 | 140 | for rid in relation_ids('shared-db'): | 143 | for rid in relation_ids('shared-db'): |
62 | 141 | for unit in related_units(rid): | 144 | for unit in related_units(rid): |
64 | 142 | passwd = relation_get(password_setting, rid=rid, unit=unit) | 145 | rdata = relation_get(rid=rid, unit=unit) |
65 | 143 | ctxt = { | 146 | ctxt = { |
68 | 144 | 'database_host': relation_get('db_host', rid=rid, | 147 | 'database_host': rdata.get('db_host'), |
67 | 145 | unit=unit), | ||
69 | 146 | 'database': self.database, | 148 | 'database': self.database, |
70 | 147 | 'database_user': self.user, | 149 | 'database_user': self.user, |
72 | 148 | 'database_password': passwd, | 150 | 'database_password': rdata.get(password_setting) |
73 | 149 | } | 151 | } |
74 | 150 | if context_complete(ctxt): | 152 | if context_complete(ctxt): |
75 | 153 | db_ssl(rdata, ctxt, self.ssl_dir) | ||
76 | 151 | return ctxt | 154 | return ctxt |
77 | 152 | return {} | 155 | return {} |
78 | 153 | 156 | ||
79 | 154 | 157 | ||
80 | 158 | def db_ssl(rdata, ctxt, ssl_dir): | ||
81 | 159 | if 'ssl_ca' in rdata and ssl_dir: | ||
82 | 160 | ca_path = os.path.join(ssl_dir, 'db-client.ca') | ||
83 | 161 | with open(ca_path, 'w') as fh: | ||
84 | 162 | fh.write(b64decode(rdata['ssl_ca'])) | ||
85 | 163 | ctxt['database_ssl_ca'] = ca_path | ||
86 | 164 | elif 'ssl_ca' in rdata: | ||
87 | 165 | log("Charm not setup for ssl support but ssl ca found") | ||
88 | 166 | return ctxt | ||
89 | 167 | if 'ssl_cert' in rdata: | ||
90 | 168 | cert_path = os.path.join( | ||
91 | 169 | ssl_dir, 'db-client.cert') | ||
92 | 170 | if not os.path.exists(cert_path): | ||
93 | 171 | log("Waiting 1m for ssl client cert validity") | ||
94 | 172 | time.sleep(60) | ||
95 | 173 | with open(cert_path, 'w') as fh: | ||
96 | 174 | fh.write(b64decode(rdata['ssl_cert'])) | ||
97 | 175 | ctxt['database_ssl_cert'] = cert_path | ||
98 | 176 | key_path = os.path.join(ssl_dir, 'db-client.key') | ||
99 | 177 | with open(key_path, 'w') as fh: | ||
100 | 178 | fh.write(b64decode(rdata['ssl_key'])) | ||
101 | 179 | ctxt['database_ssl_key'] = key_path | ||
102 | 180 | return ctxt | ||
103 | 181 | |||
104 | 182 | |||
105 | 155 | class IdentityServiceContext(OSContextGenerator): | 183 | class IdentityServiceContext(OSContextGenerator): |
106 | 156 | interfaces = ['identity-service'] | 184 | interfaces = ['identity-service'] |
107 | 157 | 185 | ||
108 | @@ -161,22 +189,19 @@ | |||
109 | 161 | 189 | ||
110 | 162 | for rid in relation_ids('identity-service'): | 190 | for rid in relation_ids('identity-service'): |
111 | 163 | for unit in related_units(rid): | 191 | for unit in related_units(rid): |
112 | 192 | rdata = relation_get(rid=rid, unit=unit) | ||
113 | 164 | ctxt = { | 193 | ctxt = { |
129 | 165 | 'service_port': relation_get('service_port', rid=rid, | 194 | 'service_port': rdata.get('service_port'), |
130 | 166 | unit=unit), | 195 | 'service_host': rdata.get('service_host'), |
131 | 167 | 'service_host': relation_get('service_host', rid=rid, | 196 | 'auth_host': rdata.get('auth_host'), |
132 | 168 | unit=unit), | 197 | 'auth_port': rdata.get('auth_port'), |
133 | 169 | 'auth_host': relation_get('auth_host', rid=rid, unit=unit), | 198 | 'admin_tenant_name': rdata.get('service_tenant'), |
134 | 170 | 'auth_port': relation_get('auth_port', rid=rid, unit=unit), | 199 | 'admin_user': rdata.get('service_username'), |
135 | 171 | 'admin_tenant_name': relation_get('service_tenant', | 200 | 'admin_password': rdata.get('service_password'), |
136 | 172 | rid=rid, unit=unit), | 201 | 'service_protocol': |
137 | 173 | 'admin_user': relation_get('service_username', rid=rid, | 202 | rdata.get('service_protocol') or 'http', |
138 | 174 | unit=unit), | 203 | 'auth_protocol': |
139 | 175 | 'admin_password': relation_get('service_password', rid=rid, | 204 | rdata.get('auth_protocol') or 'http', |
125 | 176 | unit=unit), | ||
126 | 177 | # XXX: Hard-coded http. | ||
127 | 178 | 'service_protocol': 'http', | ||
128 | 179 | 'auth_protocol': 'http', | ||
140 | 180 | } | 205 | } |
141 | 181 | if context_complete(ctxt): | 206 | if context_complete(ctxt): |
142 | 182 | return ctxt | 207 | return ctxt |
143 | @@ -186,6 +211,9 @@ | |||
144 | 186 | class AMQPContext(OSContextGenerator): | 211 | class AMQPContext(OSContextGenerator): |
145 | 187 | interfaces = ['amqp'] | 212 | interfaces = ['amqp'] |
146 | 188 | 213 | ||
147 | 214 | def __init__(self, ssl_dir=None): | ||
148 | 215 | self.ssl_dir = ssl_dir | ||
149 | 216 | |||
150 | 189 | def __call__(self): | 217 | def __call__(self): |
151 | 190 | log('Generating template context for amqp') | 218 | log('Generating template context for amqp') |
152 | 191 | conf = config() | 219 | conf = config() |
153 | @@ -196,7 +224,6 @@ | |||
154 | 196 | log('Could not generate shared_db context. ' | 224 | log('Could not generate shared_db context. ' |
155 | 197 | 'Missing required charm config options: %s.' % e) | 225 | 'Missing required charm config options: %s.' % e) |
156 | 198 | raise OSContextError | 226 | raise OSContextError |
157 | 199 | |||
158 | 200 | ctxt = {} | 227 | ctxt = {} |
159 | 201 | for rid in relation_ids('amqp'): | 228 | for rid in relation_ids('amqp'): |
160 | 202 | ha_vip_only = False | 229 | ha_vip_only = False |
161 | @@ -214,6 +241,14 @@ | |||
162 | 214 | unit=unit), | 241 | unit=unit), |
163 | 215 | 'rabbitmq_virtual_host': vhost, | 242 | 'rabbitmq_virtual_host': vhost, |
164 | 216 | }) | 243 | }) |
165 | 244 | |||
166 | 245 | ssl_port = relation_get('ssl_port', rid=rid, unit=unit) | ||
167 | 246 | if ssl_port: | ||
168 | 247 | ctxt['rabbit_ssl_port'] = ssl_port | ||
169 | 248 | ssl_ca = relation_get('ssl_ca', rid=rid, unit=unit) | ||
170 | 249 | if ssl_ca: | ||
171 | 250 | ctxt['rabbit_ssl_ca'] = ssl_ca | ||
172 | 251 | |||
173 | 217 | if relation_get('ha_queues', rid=rid, unit=unit) is not None: | 252 | if relation_get('ha_queues', rid=rid, unit=unit) is not None: |
174 | 218 | ctxt['rabbitmq_ha_queues'] = True | 253 | ctxt['rabbitmq_ha_queues'] = True |
175 | 219 | 254 | ||
176 | @@ -221,6 +256,16 @@ | |||
177 | 221 | rid=rid, unit=unit) is not None | 256 | rid=rid, unit=unit) is not None |
178 | 222 | 257 | ||
179 | 223 | if context_complete(ctxt): | 258 | if context_complete(ctxt): |
180 | 259 | if 'rabbit_ssl_ca' in ctxt: | ||
181 | 260 | if not self.ssl_dir: | ||
182 | 261 | log(("Charm not setup for ssl support " | ||
183 | 262 | "but ssl ca found")) | ||
184 | 263 | break | ||
185 | 264 | ca_path = os.path.join( | ||
186 | 265 | self.ssl_dir, 'rabbit-client-ca.pem') | ||
187 | 266 | with open(ca_path, 'w') as fh: | ||
188 | 267 | fh.write(b64decode(ctxt['rabbit_ssl_ca'])) | ||
189 | 268 | ctxt['rabbit_ssl_ca'] = ca_path | ||
190 | 224 | # Sufficient information found = break out! | 269 | # Sufficient information found = break out! |
191 | 225 | break | 270 | break |
192 | 226 | # Used for active/active rabbitmq >= grizzly | 271 | # Used for active/active rabbitmq >= grizzly |
193 | @@ -391,6 +436,8 @@ | |||
194 | 391 | 'private_address': unit_get('private-address'), | 436 | 'private_address': unit_get('private-address'), |
195 | 392 | 'endpoints': [] | 437 | 'endpoints': [] |
196 | 393 | } | 438 | } |
197 | 439 | if is_clustered(): | ||
198 | 440 | ctxt['private_address'] = config('vip') | ||
199 | 394 | for api_port in self.external_ports: | 441 | for api_port in self.external_ports: |
200 | 395 | ext_port = determine_apache_port(api_port) | 442 | ext_port = determine_apache_port(api_port) |
201 | 396 | int_port = determine_api_port(api_port) | 443 | int_port = determine_api_port(api_port) |
202 | 397 | 444 | ||
203 | === modified file 'hooks/charmhelpers/contrib/openstack/neutron.py' | |||
204 | --- hooks/charmhelpers/contrib/openstack/neutron.py 2014-03-25 12:26:41 +0000 | |||
205 | +++ hooks/charmhelpers/contrib/openstack/neutron.py 2014-03-28 10:00:55 +0000 | |||
206 | @@ -17,6 +17,8 @@ | |||
207 | 17 | kver = check_output(['uname', '-r']).strip() | 17 | kver = check_output(['uname', '-r']).strip() |
208 | 18 | return 'linux-headers-%s' % kver | 18 | return 'linux-headers-%s' % kver |
209 | 19 | 19 | ||
210 | 20 | QUANTUM_CONF_DIR = '/etc/quantum' | ||
211 | 21 | |||
212 | 20 | 22 | ||
213 | 21 | def kernel_version(): | 23 | def kernel_version(): |
214 | 22 | """ Retrieve the current major kernel version as a tuple e.g. (3, 13) """ | 24 | """ Retrieve the current major kernel version as a tuple e.g. (3, 13) """ |
215 | @@ -35,6 +37,8 @@ | |||
216 | 35 | 37 | ||
217 | 36 | 38 | ||
218 | 37 | # legacy | 39 | # legacy |
219 | 40 | |||
220 | 41 | |||
221 | 38 | def quantum_plugins(): | 42 | def quantum_plugins(): |
222 | 39 | from charmhelpers.contrib.openstack import context | 43 | from charmhelpers.contrib.openstack import context |
223 | 40 | return { | 44 | return { |
224 | @@ -46,7 +50,8 @@ | |||
225 | 46 | 'contexts': [ | 50 | 'contexts': [ |
226 | 47 | context.SharedDBContext(user=config('neutron-database-user'), | 51 | context.SharedDBContext(user=config('neutron-database-user'), |
227 | 48 | database=config('neutron-database'), | 52 | database=config('neutron-database'), |
229 | 49 | relation_prefix='neutron')], | 53 | relation_prefix='neutron', |
230 | 54 | ssl_dir=QUANTUM_CONF_DIR)], | ||
231 | 50 | 'services': ['quantum-plugin-openvswitch-agent'], | 55 | 'services': ['quantum-plugin-openvswitch-agent'], |
232 | 51 | 'packages': [[headers_package()] + determine_dkms_package(), | 56 | 'packages': [[headers_package()] + determine_dkms_package(), |
233 | 52 | ['quantum-plugin-openvswitch-agent']], | 57 | ['quantum-plugin-openvswitch-agent']], |
234 | @@ -61,7 +66,8 @@ | |||
235 | 61 | 'contexts': [ | 66 | 'contexts': [ |
236 | 62 | context.SharedDBContext(user=config('neutron-database-user'), | 67 | context.SharedDBContext(user=config('neutron-database-user'), |
237 | 63 | database=config('neutron-database'), | 68 | database=config('neutron-database'), |
239 | 64 | relation_prefix='neutron')], | 69 | relation_prefix='neutron', |
240 | 70 | ssl_dir=QUANTUM_CONF_DIR)], | ||
241 | 65 | 'services': [], | 71 | 'services': [], |
242 | 66 | 'packages': [], | 72 | 'packages': [], |
243 | 67 | 'server_packages': ['quantum-server', | 73 | 'server_packages': ['quantum-server', |
244 | @@ -70,6 +76,8 @@ | |||
245 | 70 | } | 76 | } |
246 | 71 | } | 77 | } |
247 | 72 | 78 | ||
248 | 79 | NEUTRON_CONF_DIR = '/etc/neutron' | ||
249 | 80 | |||
250 | 73 | 81 | ||
251 | 74 | def neutron_plugins(): | 82 | def neutron_plugins(): |
252 | 75 | from charmhelpers.contrib.openstack import context | 83 | from charmhelpers.contrib.openstack import context |
253 | @@ -83,7 +91,8 @@ | |||
254 | 83 | 'contexts': [ | 91 | 'contexts': [ |
255 | 84 | context.SharedDBContext(user=config('neutron-database-user'), | 92 | context.SharedDBContext(user=config('neutron-database-user'), |
256 | 85 | database=config('neutron-database'), | 93 | database=config('neutron-database'), |
258 | 86 | relation_prefix='neutron')], | 94 | relation_prefix='neutron', |
259 | 95 | ssl_dir=NEUTRON_CONF_DIR)], | ||
260 | 87 | 'services': ['neutron-plugin-openvswitch-agent'], | 96 | 'services': ['neutron-plugin-openvswitch-agent'], |
261 | 88 | 'packages': [[headers_package()] + determine_dkms_package(), | 97 | 'packages': [[headers_package()] + determine_dkms_package(), |
262 | 89 | ['neutron-plugin-openvswitch-agent']], | 98 | ['neutron-plugin-openvswitch-agent']], |
263 | @@ -98,7 +107,8 @@ | |||
264 | 98 | 'contexts': [ | 107 | 'contexts': [ |
265 | 99 | context.SharedDBContext(user=config('neutron-database-user'), | 108 | context.SharedDBContext(user=config('neutron-database-user'), |
266 | 100 | database=config('neutron-database'), | 109 | database=config('neutron-database'), |
268 | 101 | relation_prefix='neutron')], | 110 | relation_prefix='neutron', |
269 | 111 | ssl_dir=NEUTRON_CONF_DIR)], | ||
270 | 102 | 'services': [], | 112 | 'services': [], |
271 | 103 | 'packages': [], | 113 | 'packages': [], |
272 | 104 | 'server_packages': ['neutron-server', | 114 | 'server_packages': ['neutron-server', |
273 | 105 | 115 | ||
274 | === modified file 'hooks/cinder_hooks.py' | |||
275 | --- hooks/cinder_hooks.py 2014-03-13 15:50:49 +0000 | |||
276 | +++ hooks/cinder_hooks.py 2014-03-28 10:00:55 +0000 | |||
277 | @@ -122,6 +122,14 @@ | |||
278 | 122 | return | 122 | return |
279 | 123 | CONFIGS.write(CINDER_CONF) | 123 | CONFIGS.write(CINDER_CONF) |
280 | 124 | 124 | ||
281 | 125 | @hooks.hook('amqp-relation-departed') | ||
282 | 126 | @restart_on_change(restart_map()) | ||
283 | 127 | def amqp_departed(): | ||
284 | 128 | if 'amqp' not in CONFIGS.complete_contexts(): | ||
285 | 129 | juju_log('amqp relation incomplete. Peer not ready?') | ||
286 | 130 | return | ||
287 | 131 | CONFIGS.write(CINDER_CONF) | ||
288 | 132 | |||
289 | 125 | 133 | ||
290 | 126 | @hooks.hook('identity-service-relation-joined') | 134 | @hooks.hook('identity-service-relation-joined') |
291 | 127 | def identity_joined(rid=None): | 135 | def identity_joined(rid=None): |
292 | 128 | 136 | ||
293 | === added file 'templates/grizzly/cinder.conf' | |||
294 | --- templates/grizzly/cinder.conf 1970-01-01 00:00:00 +0000 | |||
295 | +++ templates/grizzly/cinder.conf 2014-03-28 10:00:55 +0000 | |||
296 | @@ -0,0 +1,60 @@ | |||
297 | 1 | ############################################################################### | ||
298 | 2 | # [ WARNING ] | ||
299 | 3 | # cinder configuration file maintained by Juju | ||
300 | 4 | # local changes may be overwritten. | ||
301 | 5 | ############################################################################### | ||
302 | 6 | [DEFAULT] | ||
303 | 7 | rootwrap_config = /etc/cinder/rootwrap.conf | ||
304 | 8 | api_paste_confg = /etc/cinder/api-paste.ini | ||
305 | 9 | iscsi_helper = tgtadm | ||
306 | 10 | volume_name_template = volume-%s | ||
307 | 11 | volume_group = cinder-volumes | ||
308 | 12 | verbose = True | ||
309 | 13 | use_syslog = {{ use_syslog }} | ||
310 | 14 | auth_strategy = keystone | ||
311 | 15 | state_path = /var/lib/cinder | ||
312 | 16 | lock_path = /var/lock/cinder | ||
313 | 17 | volumes_dir = /var/lib/cinder/volumes | ||
314 | 18 | {% if database_host -%} | ||
315 | 19 | sql_connection = mysql://{{ database_user }}:{{ database_password }}@{{ database_host }}/{{ database }} | ||
316 | 20 | {% endif -%} | ||
317 | 21 | {% if rabbitmq_host or rabbitmq_hosts -%} | ||
318 | 22 | notification_driver = cinder.openstack.common.notifier.rabbit_notifier | ||
319 | 23 | control_exchange = cinder | ||
320 | 24 | rabbit_userid = {{ rabbitmq_user }} | ||
321 | 25 | rabbit_password = {{ rabbitmq_password }} | ||
322 | 26 | rabbit_virtual_host = {{ rabbitmq_virtual_host }} | ||
323 | 27 | {% if rabbitmq_hosts -%} | ||
324 | 28 | rabbit_hosts = {{ rabbitmq_hosts }} | ||
325 | 29 | {% if rabbitmq_ha_queues -%} | ||
326 | 30 | rabbit_ha_queues = true | ||
327 | 31 | rabbit_durable_queues = false | ||
328 | 32 | {% endif %} | ||
329 | 33 | {% else %} | ||
330 | 34 | rabbit_host = {{ rabbitmq_host }} | ||
331 | 35 | {% endif -%} | ||
332 | 36 | {% endif -%} | ||
333 | 37 | {% if volume_driver -%} | ||
334 | 38 | volume_driver = {{ volume_driver }} | ||
335 | 39 | {% endif -%} | ||
336 | 40 | {% if rbd_pool -%} | ||
337 | 41 | rbd_pool = {{ rbd_pool }} | ||
338 | 42 | host = {{ host }} | ||
339 | 43 | rbd_user = {{ rbd_user }} | ||
340 | 44 | {% endif -%} | ||
341 | 45 | {% if osapi_volume_listen_port -%} | ||
342 | 46 | osapi_volume_listen_port = {{ osapi_volume_listen_port }} | ||
343 | 47 | {% endif -%} | ||
344 | 48 | {% if glance_api_servers -%} | ||
345 | 49 | glance_api_servers = {{ glance_api_servers }} | ||
346 | 50 | {% endif -%} | ||
347 | 51 | {% if glance_api_version -%} | ||
348 | 52 | glance_api_version = {{ glance_api_version }} | ||
349 | 53 | {% endif -%} | ||
350 | 54 | |||
351 | 55 | {% if user_config_flags -%} | ||
352 | 56 | {% for key, value in user_config_flags.iteritems() -%} | ||
353 | 57 | {{ key }} = {{ value }} | ||
354 | 58 | {% endfor -%} | ||
355 | 59 | {% endif -%} | ||
356 | 60 |