Merge lp:~openstack-charmers/charms/trusty/nova-cloud-controller/fix-multi-vips into lp:~openstack-charmers-archive/charms/trusty/nova-cloud-controller/next

Proposed by Edward Hope-Morley
Status: Superseded
Proposed branch: lp:~openstack-charmers/charms/trusty/nova-cloud-controller/fix-multi-vips
Merge into: lp:~openstack-charmers-archive/charms/trusty/nova-cloud-controller/next
Diff against target: 177 lines (+83/-25)
2 files modified
hooks/nova_cc_context.py (+25/-22)
unit_tests/test_nova_cc_contexts.py (+58/-3)
To merge this branch: bzr merge lp:~openstack-charmers/charms/trusty/nova-cloud-controller/fix-multi-vips
Reviewer Review Type Date Requested Status
Ante Karamatić (community) Needs Fixing
OpenStack Charmers Pending
Review via email: mp+246926@code.launchpad.net

This proposal has been superseded by a proposal from 2015-01-20.

To post a comment you must log in.
Revision history for this message
uosci-testing-bot (uosci-testing-bot) wrote :

charm_lint_check #854 nova-cloud-controller-next for hopem mp246926
    LINT OK: passed

Build: http://10.245.162.77:8080/job/charm_lint_check/854/

Revision history for this message
uosci-testing-bot (uosci-testing-bot) wrote :

charm_unit_test #883 nova-cloud-controller-next for hopem mp246926
    UNIT OK: passed

Build: http://10.245.162.77:8080/job/charm_unit_test/883/

Revision history for this message
uosci-testing-bot (uosci-testing-bot) wrote :

charm_amulet_test #1078 nova-cloud-controller-next for hopem mp246926
    AMULET OK: passed

Build: http://10.245.162.77:8080/job/charm_amulet_test/1078/

Revision history for this message
Ante Karamatić (ivoks) :
review: Needs Fixing
Revision history for this message
Edward Hope-Morley (hopem) :
139. By Edward Hope-Morley

removed neutron api version, added more unit tests

Unmerged revisions

Preview Diff

[H/L] Next/Prev Comment, [J/K] Next/Prev File, [N/P] Next/Prev Hunk
=== modified file 'hooks/nova_cc_context.py'
--- hooks/nova_cc_context.py 2014-12-19 10:25:03 +0000
+++ hooks/nova_cc_context.py 2015-01-20 09:33:04 +0000
@@ -4,7 +4,6 @@
4 relation_set,4 relation_set,
5 log,5 log,
6 ERROR,6 ERROR,
7 unit_get,
8 related_units,7 related_units,
9 relations_for_id,8 relations_for_id,
10 relation_get,9 relation_get,
@@ -22,10 +21,9 @@
22 determine_apache_port,21 determine_apache_port,
23 determine_api_port,22 determine_api_port,
24 https,23 https,
25 is_clustered,
26)24)
27from charmhelpers.contrib.network.ip import (25from charmhelpers.contrib.network.ip import (
28 get_ipv6_addr,26 is_ipv6,
29 format_ipv6_addr,27 format_ipv6_addr,
30)28)
31from charmhelpers.contrib.openstack.ip import (29from charmhelpers.contrib.openstack.ip import (
@@ -196,30 +194,32 @@
196 return ctxt194 return ctxt
197195
198196
199def canonical_url(vip_setting='vip'):197def canonical_url():
200 '''198 """Returns the correct HTTP URL to this host given the state of HTTPS
201 Returns the correct HTTP URL to this host given the state of HTTPS
202 configuration and hacluster.199 configuration and hacluster.
203200 """
204 :vip_setting: str: Setting in charm config that specifies
205 VIP address.
206 '''
207 scheme = 'http'201 scheme = 'http'
208 if https():202 if https():
209 scheme = 'https'203 scheme = 'https'
210204
211 if config('prefer-ipv6'):205 address = resolve_address(INTERNAL)
212 if is_clustered():206 if is_ipv6(address):
213 addr = '[%s]' % config(vip_setting)207 address = "[{}]".format(address)
214 else:208
215 addr = '[%s]' % get_ipv6_addr(exc_list=[config('vip')])[0]209 return '%s://%s' % (scheme, address)
216 else:210
217 if is_clustered():211
218 addr = config(vip_setting)212def use_local_neutron_api():
219 else:213 """If no neutron-api relation exists returns True.
220 addr = unit_get('private-address')214
221215 If no neutron-api relation exists we assume that we are going to use
222 return '%s://%s' % (scheme, addr)216 legacy-mode i.e. local neutron server.
217 """
218 for rid in relation_ids('neutron-api'):
219 for unit in related_units(rid):
220 return False
221
222 return True
223223
224224
225class NeutronCCContext(context.NeutronContext):225class NeutronCCContext(context.NeutronContext):
@@ -258,7 +258,10 @@
258 ','.join(_config['nvp-controllers'].split())258 ','.join(_config['nvp-controllers'].split())
259 ctxt['nvp_controllers_list'] = \259 ctxt['nvp_controllers_list'] = \
260 _config['nvp-controllers'].split()260 _config['nvp-controllers'].split()
261
261 ctxt['nova_url'] = "{}:8774/v2".format(canonical_url())262 ctxt['nova_url'] = "{}:8774/v2".format(canonical_url())
263 if use_local_neutron_api():
264 ctxt['neutron_url'] = "{}:9696".format(canonical_url())
262265
263 return ctxt266 return ctxt
264267
265268
=== modified file 'unit_tests/test_nova_cc_contexts.py'
--- unit_tests/test_nova_cc_contexts.py 2014-12-16 14:08:58 +0000
+++ unit_tests/test_nova_cc_contexts.py 2015-01-20 09:33:04 +0000
@@ -30,8 +30,8 @@
30 'related_units',30 'related_units',
31 'config',31 'config',
32 'log',32 'log',
33 'unit_get',
34 'relations_for_id',33 'relations_for_id',
34 'https',
35]35]
3636
3737
@@ -50,7 +50,6 @@
50 @mock.patch.object(utils, 'os_release')50 @mock.patch.object(utils, 'os_release')
51 @mock.patch('charmhelpers.contrib.network.ip.log')51 @mock.patch('charmhelpers.contrib.network.ip.log')
52 def test_instance_console_context_without_memcache(self, os_release, log_):52 def test_instance_console_context_without_memcache(self, os_release, log_):
53 self.unit_get.return_value = '127.0.0.1'
54 self.relation_ids.return_value = 'cache:0'53 self.relation_ids.return_value = 'cache:0'
55 self.related_units.return_value = 'memcached/0'54 self.related_units.return_value = 'memcached/0'
56 instance_console = context.InstanceConsoleContext()55 instance_console = context.InstanceConsoleContext()
@@ -76,7 +75,6 @@
76 formated_ip):75 formated_ip):
77 memcached_servers = [{'private-address': formated_ip,76 memcached_servers = [{'private-address': formated_ip,
78 'port': '11211'}]77 'port': '11211'}]
79 self.unit_get.return_value = ip
80 self.relation_ids.return_value = ['cache:0']78 self.relation_ids.return_value = ['cache:0']
81 self.relations_for_id.return_value = memcached_servers79 self.relations_for_id.return_value = memcached_servers
82 self.related_units.return_value = 'memcached/0'80 self.related_units.return_value = 'memcached/0'
@@ -85,3 +83,60 @@
85 self.maxDiff = None83 self.maxDiff = None
86 self.assertEqual({'memcached_servers': "%s:11211" % (formated_ip, )},84 self.assertEqual({'memcached_servers': "%s:11211" % (formated_ip, )},
87 instance_console())85 instance_console())
86
87 @mock.patch.object(context, 'use_local_neutron_api')
88 @mock.patch('charmhelpers.contrib.openstack.ip.config')
89 @mock.patch('charmhelpers.contrib.openstack.ip.is_clustered')
90 def test_neutron_context_single_vip(self, mock_is_clustered, mock_config,
91 mock_use_local_neutron_api):
92 mock_use_local_neutron_api.return_value = True
93 self.https.return_value = False
94 mock_is_clustered.return_value = True
95 config = {'vip': '10.0.0.1',
96 'os-internal-network': '10.0.0.1/24',
97 'os-admin-network': '10.0.1.0/24',
98 'os-public-network': '10.0.2.0/24'}
99 mock_config.side_effect = lambda key: config[key]
100
101 mock_use_local_neutron_api.return_value = False
102 ctxt = context.NeutronCCContext()()
103 self.assertEqual(ctxt['nova_url'], 'http://10.0.0.1:8774/v2')
104 self.assertFalse('neutron_url' in ctxt)
105
106 mock_use_local_neutron_api.return_value = True
107 ctxt = context.NeutronCCContext()()
108 self.assertEqual(ctxt['nova_url'], 'http://10.0.0.1:8774/v2')
109 self.assertEqual(ctxt['neutron_url'], 'http://10.0.0.1:9696')
110
111 @mock.patch.object(context, 'use_local_neutron_api')
112 @mock.patch('charmhelpers.contrib.openstack.ip.config')
113 @mock.patch('charmhelpers.contrib.openstack.ip.is_clustered')
114 def test_neutron_context_multi_vip(self, mock_is_clustered, mock_config,
115 mock_use_local_neutron_api):
116 self.https.return_value = False
117 mock_is_clustered.return_value = True
118 config = {'vip': '10.0.0.1 10.0.1.1 10.0.2.1',
119 'os-internal-network': '10.0.1.0/24',
120 'os-admin-network': '10.0.0.0/24',
121 'os-public-network': '10.0.2.0/24'}
122 mock_config.side_effect = lambda key: config[key]
123
124 mock_use_local_neutron_api.return_value = False
125 ctxt = context.NeutronCCContext()()
126 self.assertEqual(ctxt['nova_url'], 'http://10.0.1.1:8774/v2')
127 self.assertFalse('neutron_url' in ctxt)
128
129 mock_use_local_neutron_api.return_value = True
130 ctxt = context.NeutronCCContext()()
131 self.assertEqual(ctxt['nova_url'], 'http://10.0.1.1:8774/v2')
132 self.assertEqual(ctxt['neutron_url'], 'http://10.0.1.1:9696')
133
134 def test_use_local_neutron_api(self):
135 self.relation_ids.return_value = []
136 self.related_units.return_value = []
137 self.assertTrue(context.use_local_neutron_api())
138 self.relation_ids.return_value = ['rel:0']
139 self.related_units.return_value = []
140 self.assertTrue(context.use_local_neutron_api())
141 self.related_units.return_value = ['unit/0']
142 self.assertFalse(context.use_local_neutron_api())

Subscribers

People subscribed via source and target branches