Merge lp:~dmitriis/charms/trusty/neutron-api-contrail/trunk into lp:~sdn-charmers/charms/trusty/neutron-api-contrail/trunk

Proposed by Dmitrii Shcherbakov
Status: Merged
Merged at revision: 16
Proposed branch: lp:~dmitriis/charms/trusty/neutron-api-contrail/trunk
Merge into: lp:~sdn-charmers/charms/trusty/neutron-api-contrail/trunk
Diff against target: 238 lines (+104/-31)
3 files modified
hooks/neutron_api_contrail_hooks.py (+86/-25)
hooks/neutron_api_contrail_utils.py (+12/-5)
templates/ContrailPlugin.ini (+6/-1)
To merge this branch: bzr merge lp:~dmitriis/charms/trusty/neutron-api-contrail/trunk
Reviewer Review Type Date Requested Status
Robert Ayres (community) Approve
Ante Karamatić Pending
Review via email: mp+320153@code.launchpad.net

Description of the change

rbac support (rebased)

To post a comment you must log in.
Revision history for this message
Bernhard Koessler (bkoessler) wrote :

you would also need to add the following to /etc/neutron/api-paste.ini:

[composite:neutronapi_v2_0]
keystone = user_token …

[filter:user_token] paste.filter_factory = neutron_plugin_contrail.plugins.opencontrail.neutron_middleware:token_factory

Revision history for this message
Dmitrii Shcherbakov (dmitriis) wrote :

This is done in the neutron-api charm.

https://review.openstack.org/#/c/439270/

Best Regards,
Dmitrii Shcherbakov

*Dmitrii Shcherbakov * | *Canonical*
Field Software Engineer
<email address hidden>
IRC (freenode): Dmitrii-Sh

On Mon, Mar 27, 2017 at 12:57 PM, Bernhard Koessler <email address hidden>
wrote:

> you would also need to add the following to /etc/neutron/api-paste.ini:
>
> [composite:neutronapi_v2_0]
> keystone = user_token …
>
> [filter:user_token] paste.filter_factory = neutron_plugin_contrail.
> plugins.opencontrail.neutron_middleware:token_factory
>
> --
> https://code.launchpad.net/~dmitriis/charms/trusty/
> neutron-api-contrail/trunk/+merge/320153
> You are the owner of lp:~dmitriis/charms/trusty/
> neutron-api-contrail/trunk.
>

Revision history for this message
Robert Ayres (robert-ayres) wrote :

For this to get merged, please remove all the unnecessary formatting changes.

This diff should only contain the *actual* code changes.

Revision history for this message
Robert Ayres (robert-ayres) wrote :

Looks like r16 is PEP8 changes and r17 the RBAC changes.

To save effort, we can just look at merging r17 here.

Revision history for this message
Robert Ayres (robert-ayres) :
review: Approve

Preview Diff

[H/L] Next/Prev Comment, [J/K] Next/Prev File, [N/P] Next/Prev Hunk
1=== modified file 'hooks/neutron_api_contrail_hooks.py'
2--- hooks/neutron_api_contrail_hooks.py 2017-03-10 13:10:57 +0000
3+++ hooks/neutron_api_contrail_hooks.py 2017-03-17 09:27:11 +0000
4@@ -11,7 +11,8 @@
5 config,
6 log,
7 relation_get,
8- relation_set
9+ relation_set,
10+ relation_ids,
11 )
12
13 from charmhelpers.core.host import (
14@@ -31,28 +32,76 @@
15 write_plugin_config
16 )
17
18-PACKAGES = [ "neutron-plugin-contrail" ]
19+PACKAGES = ["neutron-plugin-contrail"]
20
21 hooks = Hooks()
22 config = config()
23
24+
25 @hooks.hook("config-changed")
26 def config_changed():
27 pass
28
29-@hooks.hook("contrail-api-relation-changed")
30+
31+def notify_neutron(rbac=relation_get('rbac')):
32+ '''
33+ Tell neutron to update its keystone middleware configuration
34+ based upon the propagated configuration.
35+ '''
36+ rel = 'neutron-plugin-api-subordinate'
37+
38+ # pass a list of extra middleware with only a single
39+ # item in this particular case
40+ if rbac:
41+ settings = {
42+ 'extra_middleware': [{
43+ 'name': 'user_token',
44+ 'type': 'filter',
45+ 'config': {
46+ 'paste.filter_factory': 'neutron_plugin_contrail.plugins'
47+ '.opencontrail.neutron_middleware:token_factory'
48+ }
49+ }]
50+ }
51+ else:
52+ settings = {
53+ 'extra_middleware': None
54+ }
55+ for rid in relation_ids(rel):
56+ relation_set(relation_id=rid, relation_settings=settings)
57+
58+
59+@hooks.hook("contrail-api-relation-joined",
60+ "contrail-api-relation-changed")
61 def contrail_api_changed():
62- if not relation_get("port"):
63+ required_keys = ['port']
64+ # only need to check for role availability if
65+ # rbac is explicitly set
66+ if relation_get('rbac'):
67+ required_keys.append('cloud-admin-role')
68+
69+ if not all(relation_get(k) for k in required_keys):
70 log("Relation not ready")
71 return
72 contrail_api_relation()
73+ notify_neutron()
74+
75
76 @hooks.hook("contrail-api-relation-departed")
77 @hooks.hook("contrail-api-relation-broken")
78-@restart_on_change({"/etc/neutron/plugins/opencontrail/ContrailPlugin.ini": ["neutron-server"]})
79+def contrail_api_broken():
80+ contrail_api_relation()
81+ # have to signal that we no longer have knowledge
82+ # of rbac availability
83+ notify_neutron(rbac=False)
84+
85+
86+@restart_on_change(
87+ {"/etc/neutron/plugins/opencontrail/ContrailPlugin.ini": ["neutron-server"]})
88 def contrail_api_relation():
89 write_plugin_config()
90
91+
92 @hooks.hook("identity-admin-relation-changed")
93 def identity_admin_changed():
94 if not relation_get("service_hostname"):
95@@ -60,57 +109,69 @@
96 return
97 identity_admin_relation()
98
99+
100 @hooks.hook("identity-admin-relation-departed")
101 @hooks.hook("identity-admin-relation-broken")
102-@restart_on_change({"/etc/neutron/plugins/opencontrail/ContrailPlugin.ini": ["neutron-server"]})
103+@restart_on_change(
104+ {"/etc/neutron/plugins/opencontrail/ContrailPlugin.ini": ["neutron-server"]})
105 def identity_admin_relation():
106 write_plugin_config()
107
108+
109 @hooks.hook()
110 def install():
111 configure_sources(True, "install-sources", "install-keys")
112 apt_upgrade(fatal=True, dist=True)
113 apt_install(PACKAGES, fatal=True)
114
115+
116 def main():
117 try:
118 hooks.execute(sys.argv)
119 except UnregisteredHookError as e:
120 log("Unknown hook {} - skipping.".format(e))
121
122-@hooks.hook("neutron-plugin-api-subordinate-relation-joined")
123-def neutron_plugin_joined():
124+
125+@hooks.hook("neutron-plugin-api-subordinate-relation-changed")
126+def neutron_plugin_changed():
127 # create plugin config
128 plugin = "neutron_plugin_contrail.plugins.opencontrail.contrail_plugin.NeutronPluginContrailCoreV2" \
129 if version_compare(CONTRAIL_VERSION, "1.20~") >= 0 \
130 else "neutron_plugin_contrail.plugins.opencontrail.contrail_plugin_core.NeutronPluginContrailCoreV2"
131 service_plugins = "neutron_plugin_contrail.plugins.opencontrail.loadbalancer.v2.plugin.LoadBalancerPluginV2" \
132 if version_compare(CONTRAIL_VERSION, "3.0.2.0-34") >= 0 \
133- and version_compare(OPENSTACK_VERSION, "2:7.0.0") >= 0 \
134+ and version_compare(OPENSTACK_VERSION, "2:7.0.0") >= 0 \
135 else " "
136- extensions = [ "/usr/lib/python2.7/dist-packages/neutron_plugin_contrail/extensions" ]
137+ extensions = [
138+ "/usr/lib/python2.7/dist-packages/neutron_plugin_contrail/extensions"]
139 if version_compare(CONTRAIL_VERSION, "3.0.2.0-34") >= 0 \
140 and version_compare(OPENSTACK_VERSION, "2:7.0.0") >= 0:
141- extensions.append("/usr/lib/python2.7/dist-packages/neutron_lbaas/extensions")
142+ extensions.append(
143+ "/usr/lib/python2.7/dist-packages/neutron_lbaas/extensions")
144 conf = {
145- "neutron-api": {
146- "/etc/neutron/neutron.conf": {
147- "sections": {
148- "DEFAULT": [
149- ("api_extensions_path", ":".join(extensions))
150- ]
151- }
152+ "neutron-api": {
153+ "/etc/neutron/neutron.conf": {
154+ "sections": {
155+ "DEFAULT": [
156+ ("api_extensions_path", ":".join(extensions))
157+ ]
158+ }
159+ }
160 }
161- }
162 }
163- settings = { "neutron-plugin": "contrail",
164- "core-plugin": plugin,
165- "neutron-plugin-config": "/etc/neutron/plugins/opencontrail/ContrailPlugin.ini",
166- "service-plugins": service_plugins,
167- "quota-driver": "neutron_plugin_contrail.plugins.opencontrail.quota.driver.QuotaDriver",
168- "subordinate_configuration": json.dumps(conf) }
169+ settings = {
170+ "neutron-plugin": "contrail",
171+ "core-plugin": plugin,
172+ "neutron-plugin-config": "/etc/neutron/plugins/opencontrail/ContrailPlugin.ini",
173+ "service-plugins": service_plugins,
174+ "quota-driver": "neutron_plugin_contrail.plugins.opencontrail.quota.driver.QuotaDriver",
175+ "subordinate_configuration": json.dumps(conf)}
176 relation_set(relation_settings=settings)
177
178+ for rid in relation_ids('contrail-api'):
179+ notify_neutron(relation_get(rid=rid, attribute='rbac'))
180+
181+
182 @hooks.hook("upgrade-charm")
183 def upgrade_charm():
184 write_plugin_config()
185
186=== modified file 'hooks/neutron_api_contrail_utils.py'
187--- hooks/neutron_api_contrail_utils.py 2017-03-10 13:10:57 +0000
188+++ hooks/neutron_api_contrail_utils.py 2017-03-17 09:27:11 +0000
189@@ -14,6 +14,7 @@
190
191 apt_pkg.init()
192
193+
194 def dpkg_version(pkg):
195 try:
196 return check_output(["dpkg-query", "-f", "${Version}\\n", "-W", pkg]).rstrip()
197@@ -24,12 +25,18 @@
198 OPENSTACK_VERSION = dpkg_version("neutron-server")
199
200 def contrail_api_ctx():
201- ctxs = [ { "api_server": vip if vip \
202- else gethostbyname(relation_get("private-address", unit, rid)),
203- "api_port": port }
204+ ctxs = [{"api_server": vip if vip
205+ else gethostbyname(relation_get("private-address", unit, rid)),
206+ "api_port": port,
207+ "rbac": rbac,
208+ "cloud_admin_role": adminrole}
209 for rid in relation_ids("contrail-api")
210- for unit, port, vip in
211- ((unit, relation_get("port", unit, rid), relation_get("vip", unit, rid))
212+ for unit, port, vip, rbac, adminrole in
213+ ((unit,
214+ relation_get("port", unit, rid),
215+ relation_get("vip", unit, rid),
216+ relation_get("rbac", unit, rid),
217+ relation_get("cloud-admin-role", unit, rid))
218 for unit in related_units(rid))
219 if port ]
220 return ctxs[0] if ctxs else {}
221
222=== modified file 'templates/ContrailPlugin.ini'
223--- templates/ContrailPlugin.ini 2017-01-31 13:04:53 +0000
224+++ templates/ContrailPlugin.ini 2017-03-17 09:27:11 +0000
225@@ -6,7 +6,12 @@
226 [APISERVER]
227 api_server_ip = {{ api_server }}
228 api_server_port = {{ api_port }}
229-multi_tenancy = True
230+
231+{% if rbac -%}
232+aaa_mode = rbac
233+cloud_admin_role = {{ cloud_admin_role }}
234+
235+{% endif %}
236
237 [KEYSTONE]
238 admin_user = {{ admin_user }}

Subscribers

People subscribed via source and target branches