Rename charm to neutron-gateway including code
This commit is contained in:
parent
43cc55e0c5
commit
9d2711ac86
@ -3,4 +3,4 @@
|
|||||||
exclude_lines =
|
exclude_lines =
|
||||||
if __name__ == .__main__.:
|
if __name__ == .__main__.:
|
||||||
include=
|
include=
|
||||||
hooks/quantum_*
|
hooks/neutron_*
|
||||||
|
4
Makefile
4
Makefile
@ -26,5 +26,5 @@ test:
|
|||||||
@juju test -v -p AMULET_HTTP_PROXY,AMULET_OS_VIP --timeout 2700
|
@juju test -v -p AMULET_HTTP_PROXY,AMULET_OS_VIP --timeout 2700
|
||||||
|
|
||||||
publish: lint unit_test
|
publish: lint unit_test
|
||||||
bzr push lp:charms/quantum-gateway
|
bzr push lp:charms/neutron-gateway
|
||||||
bzr push lp:charms/trusty/quantum-gateway
|
bzr push lp:charms/trusty/neutron-gateway
|
||||||
|
50
README.md
50
README.md
@ -14,13 +14,9 @@ be suitable for all.
|
|||||||
Neutron supports a rich plugin/extension framework for propriety networking
|
Neutron supports a rich plugin/extension framework for propriety networking
|
||||||
solutions and supports (in core) Nicira NVP, NEC, Cisco and others...
|
solutions and supports (in core) Nicira NVP, NEC, Cisco and others...
|
||||||
|
|
||||||
The Openstack charms currently only support the fully free OpenvSwitch plugin
|
|
||||||
and implements the 'Provider Router with Private Networks' use case.
|
|
||||||
|
|
||||||
See the upstream [Neutron documentation](http://docs.openstack.org/trunk/openstack-network/admin/content/use_cases_single_router.html)
|
See the upstream [Neutron documentation](http://docs.openstack.org/trunk/openstack-network/admin/content/use_cases_single_router.html)
|
||||||
for more details.
|
for more details.
|
||||||
|
|
||||||
|
|
||||||
Usage
|
Usage
|
||||||
-----
|
-----
|
||||||
|
|
||||||
@ -40,10 +36,10 @@ Neutron is deployed baked into these charms from install onwards:
|
|||||||
|
|
||||||
The Neutron Gateway can then be added to the deploying:
|
The Neutron Gateway can then be added to the deploying:
|
||||||
|
|
||||||
juju deploy quantum-gateway
|
juju deploy neutron-gateway
|
||||||
juju add-relation quantum-gateway mysql
|
juju add-relation neutron-gateway mysql
|
||||||
juju add-relation quantum-gateway rabbitmq-server
|
juju add-relation neutron-gateway rabbitmq-server
|
||||||
juju add-relation quantum-gateway nova-cloud-controller
|
juju add-relation neutron-gateway nova-cloud-controller
|
||||||
|
|
||||||
The gateway provides two key services; L3 network routing and DHCP services.
|
The gateway provides two key services; L3 network routing and DHCP services.
|
||||||
|
|
||||||
@ -60,13 +56,13 @@ External Port Configuration
|
|||||||
If the port to be used for external traffic is consistent accross all physical
|
If the port to be used for external traffic is consistent accross all physical
|
||||||
servers then is can be specified by simply setting ext-port to the nic id:
|
servers then is can be specified by simply setting ext-port to the nic id:
|
||||||
|
|
||||||
quantum-gateway:
|
neutron-gateway:
|
||||||
ext-port: eth2
|
ext-port: eth2
|
||||||
|
|
||||||
However, if it varies between hosts then the mac addresses of the external
|
However, if it varies between hosts then the mac addresses of the external
|
||||||
nics for each host can be passed as a space seperated list:
|
nics for each host can be passed as a space seperated list:
|
||||||
|
|
||||||
quantum-gateway:
|
neutron-gateway:
|
||||||
ext-port: <MAC ext port host 1> <MAC ext port host 2> <MAC ext port host 3>
|
ext-port: <MAC ext port host 1> <MAC ext port host 2> <MAC ext port host 3>
|
||||||
|
|
||||||
|
|
||||||
@ -74,25 +70,25 @@ Multiple Floating Pools
|
|||||||
=======================
|
=======================
|
||||||
|
|
||||||
If multiple floating pools are needed then an L3 agent (which corresponds to
|
If multiple floating pools are needed then an L3 agent (which corresponds to
|
||||||
a quantum-gateway for the sake of this charm) is needed for each one. Each
|
a neutron-gateway for the sake of this charm) is needed for each one. Each
|
||||||
gateway needs to be deployed as a seperate service so that the external
|
gateway needs to be deployed as a seperate service so that the external
|
||||||
network id can be set differently for each gateway e.g.
|
network id can be set differently for each gateway e.g.
|
||||||
|
|
||||||
juju deploy quantum-gateway quantum-gateway-extnet1
|
juju deploy neutron-gateway neutron-gateway-extnet1
|
||||||
juju add-relation quantum-gateway-extnet1 mysql
|
juju add-relation neutron-gateway-extnet1 mysql
|
||||||
juju add-relation quantum-gateway-extnet1 rabbitmq-server
|
juju add-relation neutron-gateway-extnet1 rabbitmq-server
|
||||||
juju add-relation quantum-gateway-extnet1 nova-cloud-controller
|
juju add-relation neutron-gateway-extnet1 nova-cloud-controller
|
||||||
juju deploy quantum-gateway quantum-gateway-extnet2
|
juju deploy neutron-gateway neutron-gateway-extnet2
|
||||||
juju add-relation quantum-gateway-extnet2 mysql
|
juju add-relation neutron-gateway-extnet2 mysql
|
||||||
juju add-relation quantum-gateway-extnet2 rabbitmq-server
|
juju add-relation neutron-gateway-extnet2 rabbitmq-server
|
||||||
juju add-relation quantum-gateway-extnet2 nova-cloud-controller
|
juju add-relation neutron-gateway-extnet2 nova-cloud-controller
|
||||||
|
|
||||||
Create extnet1 and extnet2 via neutron client and take a note of their ids
|
Create extnet1 and extnet2 via neutron client and take a note of their ids
|
||||||
|
|
||||||
juju set quantum-gateway-extnet1 "run-internal-router=leader"
|
juju set neutron-gateway-extnet1 "run-internal-router=leader"
|
||||||
juju set quantum-gateway-extnet2 "run-internal-router=none"
|
juju set neutron-gateway-extnet2 "run-internal-router=none"
|
||||||
juju set quantum-gateway-extnet1 "external-network-id=<extnet1 id>"
|
juju set neutron-gateway-extnet1 "external-network-id=<extnet1 id>"
|
||||||
juju set quantum-gateway-extnet2 "external-network-id=<extnet2 id>"
|
juju set neutron-gateway-extnet2 "external-network-id=<extnet2 id>"
|
||||||
|
|
||||||
Instance MTU
|
Instance MTU
|
||||||
============
|
============
|
||||||
@ -102,7 +98,7 @@ packet fragmentation due to GRE overhead. One solution is to increase the MTU on
|
|||||||
physical hosts and network equipment. When this is not possible or practical the
|
physical hosts and network equipment. When this is not possible or practical the
|
||||||
charm's instance-mtu option can be used to reduce instance MTU via DHCP.
|
charm's instance-mtu option can be used to reduce instance MTU via DHCP.
|
||||||
|
|
||||||
juju set quantum-gateway instance-mtu=1400
|
juju set neutron-gateway instance-mtu=1400
|
||||||
|
|
||||||
OpenStack upstream documentation recomments a MTU value of 1400:
|
OpenStack upstream documentation recomments a MTU value of 1400:
|
||||||
[Openstack documentation](http://docs.openstack.org/admin-guide-cloud/content/openvswitch_plugin.html)
|
[Openstack documentation](http://docs.openstack.org/admin-guide-cloud/content/openvswitch_plugin.html)
|
||||||
@ -202,9 +198,3 @@ The following is a full list of current tip repos (may not be up-to-date):
|
|||||||
- {name: neutron,
|
- {name: neutron,
|
||||||
repository: 'git://github.com/openstack/neutron',
|
repository: 'git://github.com/openstack/neutron',
|
||||||
branch: master}
|
branch: master}
|
||||||
|
|
||||||
TODO
|
|
||||||
----
|
|
||||||
|
|
||||||
* Provide more network configuration use cases.
|
|
||||||
* Support VLAN in addition to GRE+OpenFlow for L2 separation.
|
|
||||||
|
@ -14,11 +14,11 @@ from charmhelpers.core.hookenv import (
|
|||||||
config,
|
config,
|
||||||
)
|
)
|
||||||
|
|
||||||
from quantum_utils import (
|
from neutron_utils import (
|
||||||
git_install,
|
git_install,
|
||||||
)
|
)
|
||||||
|
|
||||||
from quantum_hooks import (
|
from neutron_hooks import (
|
||||||
config_changed,
|
config_changed,
|
||||||
)
|
)
|
||||||
|
|
||||||
|
@ -1 +1 @@
|
|||||||
quantum_hooks.py
|
neutron_hooks.py
|
@ -1 +1 @@
|
|||||||
quantum_hooks.py
|
neutron_hooks.py
|
@ -1 +1 @@
|
|||||||
quantum_hooks.py
|
neutron_hooks.py
|
@ -1 +1 @@
|
|||||||
quantum_hooks.py
|
neutron_hooks.py
|
@ -1 +1 @@
|
|||||||
quantum_hooks.py
|
neutron_hooks.py
|
@ -1 +1 @@
|
|||||||
quantum_hooks.py
|
neutron_hooks.py
|
@ -1 +1 @@
|
|||||||
quantum_hooks.py
|
neutron_hooks.py
|
@ -1 +1 @@
|
|||||||
quantum_hooks.py
|
neutron_hooks.py
|
@ -1 +1 @@
|
|||||||
quantum_hooks.py
|
neutron_hooks.py
|
@ -1 +1 @@
|
|||||||
quantum_hooks.py
|
neutron_hooks.py
|
@ -1 +1 @@
|
|||||||
quantum_hooks.py
|
neutron_hooks.py
|
@ -1 +1 @@
|
|||||||
quantum_hooks.py
|
neutron_hooks.py
|
@ -1 +1 @@
|
|||||||
quantum_hooks.py
|
neutron_hooks.py
|
@ -1 +1 @@
|
|||||||
quantum_hooks.py
|
neutron_hooks.py
|
@ -1 +1 @@
|
|||||||
quantum_hooks.py
|
neutron_hooks.py
|
@ -1 +1 @@
|
|||||||
quantum_hooks.py
|
neutron_hooks.py
|
@ -41,7 +41,7 @@ from charmhelpers.core.sysctl import create as create_sysctl
|
|||||||
from charmhelpers.contrib.charmsupport import nrpe
|
from charmhelpers.contrib.charmsupport import nrpe
|
||||||
|
|
||||||
import sys
|
import sys
|
||||||
from quantum_utils import (
|
from neutron_utils import (
|
||||||
L3HA_PACKAGES,
|
L3HA_PACKAGES,
|
||||||
register_configs,
|
register_configs,
|
||||||
restart_map,
|
restart_map,
|
@ -60,7 +60,7 @@ from charmhelpers.contrib.openstack.context import (
|
|||||||
)
|
)
|
||||||
import charmhelpers.contrib.openstack.templating as templating
|
import charmhelpers.contrib.openstack.templating as templating
|
||||||
from charmhelpers.contrib.openstack.neutron import headers_package
|
from charmhelpers.contrib.openstack.neutron import headers_package
|
||||||
from quantum_contexts import (
|
from neutron_contexts import (
|
||||||
CORE_PLUGIN, OVS, NVP, NSX, N1KV,
|
CORE_PLUGIN, OVS, NVP, NSX, N1KV,
|
||||||
NEUTRON, QUANTUM,
|
NEUTRON, QUANTUM,
|
||||||
networking_name,
|
networking_name,
|
@ -1 +1 @@
|
|||||||
quantum_hooks.py
|
neutron_hooks.py
|
@ -1 +1 @@
|
|||||||
quantum_hooks.py
|
neutron_hooks.py
|
@ -1 +1 @@
|
|||||||
quantum_hooks.py
|
neutron_hooks.py
|
@ -1 +1 @@
|
|||||||
quantum_hooks.py
|
neutron_hooks.py
|
@ -1 +1 @@
|
|||||||
quantum_hooks.py
|
neutron_hooks.py
|
@ -1 +1 @@
|
|||||||
quantum_hooks.py
|
neutron_hooks.py
|
@ -1 +1 @@
|
|||||||
quantum_hooks.py
|
neutron_hooks.py
|
@ -1 +1 @@
|
|||||||
quantum_hooks.py
|
neutron_hooks.py
|
@ -1 +1 @@
|
|||||||
quantum_hooks.py
|
neutron_hooks.py
|
@ -1 +1 @@
|
|||||||
quantum_hooks.py
|
neutron_hooks.py
|
@ -1 +1 @@
|
|||||||
quantum_hooks.py
|
neutron_hooks.py
|
@ -1 +1 @@
|
|||||||
quantum_hooks.py
|
neutron_hooks.py
|
@ -1,4 +1,4 @@
|
|||||||
name: quantum-gateway
|
name: neutron-gateway
|
||||||
summary: Virtual Networking for OpenStack - Neutron Gateway
|
summary: Virtual Networking for OpenStack - Neutron Gateway
|
||||||
maintainer: James Page <james.page@ubuntu.com>
|
maintainer: James Page <james.page@ubuntu.com>
|
||||||
description: |
|
description: |
|
||||||
|
@ -2,7 +2,7 @@ from mock import patch, MagicMock
|
|||||||
|
|
||||||
with patch('charmhelpers.core.hookenv.config') as config:
|
with patch('charmhelpers.core.hookenv.config') as config:
|
||||||
config.return_value = 'neutron'
|
config.return_value = 'neutron'
|
||||||
import quantum_utils as utils # noqa
|
import neutron_utils as utils # noqa
|
||||||
|
|
||||||
# Need to do some early patching to get the module loaded.
|
# Need to do some early patching to get the module loaded.
|
||||||
_register_configs = utils.register_configs
|
_register_configs = utils.register_configs
|
||||||
|
@ -3,7 +3,7 @@ from mock import (
|
|||||||
MagicMock,
|
MagicMock,
|
||||||
patch
|
patch
|
||||||
)
|
)
|
||||||
import quantum_contexts
|
import neutron_contexts
|
||||||
import sys
|
import sys
|
||||||
from contextlib import contextmanager
|
from contextlib import contextmanager
|
||||||
|
|
||||||
@ -50,60 +50,60 @@ class DummyNeutronAPIContext():
|
|||||||
class TestL3AgentContext(CharmTestCase):
|
class TestL3AgentContext(CharmTestCase):
|
||||||
|
|
||||||
def setUp(self):
|
def setUp(self):
|
||||||
super(TestL3AgentContext, self).setUp(quantum_contexts,
|
super(TestL3AgentContext, self).setUp(neutron_contexts,
|
||||||
TO_PATCH)
|
TO_PATCH)
|
||||||
self.config.side_effect = self.test_config.get
|
self.config.side_effect = self.test_config.get
|
||||||
|
|
||||||
@patch('quantum_contexts.NeutronAPIContext')
|
@patch('neutron_contexts.NeutronAPIContext')
|
||||||
def test_no_ext_netid(self, _NeutronAPIContext):
|
def test_no_ext_netid(self, _NeutronAPIContext):
|
||||||
_NeutronAPIContext.return_value = \
|
_NeutronAPIContext.return_value = \
|
||||||
DummyNeutronAPIContext(return_value={'enable_dvr': False})
|
DummyNeutronAPIContext(return_value={'enable_dvr': False})
|
||||||
self.test_config.set('run-internal-router', 'none')
|
self.test_config.set('run-internal-router', 'none')
|
||||||
self.test_config.set('external-network-id', '')
|
self.test_config.set('external-network-id', '')
|
||||||
self.eligible_leader.return_value = False
|
self.eligible_leader.return_value = False
|
||||||
self.assertEquals(quantum_contexts.L3AgentContext()(),
|
self.assertEquals(neutron_contexts.L3AgentContext()(),
|
||||||
{'agent_mode': 'legacy',
|
{'agent_mode': 'legacy',
|
||||||
'handle_internal_only_router': False,
|
'handle_internal_only_router': False,
|
||||||
'plugin': 'ovs'})
|
'plugin': 'ovs'})
|
||||||
|
|
||||||
@patch('quantum_contexts.NeutronAPIContext')
|
@patch('neutron_contexts.NeutronAPIContext')
|
||||||
def test_hior_leader(self, _NeutronAPIContext):
|
def test_hior_leader(self, _NeutronAPIContext):
|
||||||
_NeutronAPIContext.return_value = \
|
_NeutronAPIContext.return_value = \
|
||||||
DummyNeutronAPIContext(return_value={'enable_dvr': False})
|
DummyNeutronAPIContext(return_value={'enable_dvr': False})
|
||||||
self.test_config.set('run-internal-router', 'leader')
|
self.test_config.set('run-internal-router', 'leader')
|
||||||
self.test_config.set('external-network-id', 'netid')
|
self.test_config.set('external-network-id', 'netid')
|
||||||
self.eligible_leader.return_value = True
|
self.eligible_leader.return_value = True
|
||||||
self.assertEquals(quantum_contexts.L3AgentContext()(),
|
self.assertEquals(neutron_contexts.L3AgentContext()(),
|
||||||
{'agent_mode': 'legacy',
|
{'agent_mode': 'legacy',
|
||||||
'handle_internal_only_router': True,
|
'handle_internal_only_router': True,
|
||||||
'ext_net_id': 'netid',
|
'ext_net_id': 'netid',
|
||||||
'plugin': 'ovs'})
|
'plugin': 'ovs'})
|
||||||
|
|
||||||
@patch('quantum_contexts.NeutronAPIContext')
|
@patch('neutron_contexts.NeutronAPIContext')
|
||||||
def test_hior_all(self, _NeutronAPIContext):
|
def test_hior_all(self, _NeutronAPIContext):
|
||||||
_NeutronAPIContext.return_value = \
|
_NeutronAPIContext.return_value = \
|
||||||
DummyNeutronAPIContext(return_value={'enable_dvr': False})
|
DummyNeutronAPIContext(return_value={'enable_dvr': False})
|
||||||
self.test_config.set('run-internal-router', 'all')
|
self.test_config.set('run-internal-router', 'all')
|
||||||
self.test_config.set('external-network-id', 'netid')
|
self.test_config.set('external-network-id', 'netid')
|
||||||
self.eligible_leader.return_value = True
|
self.eligible_leader.return_value = True
|
||||||
self.assertEquals(quantum_contexts.L3AgentContext()(),
|
self.assertEquals(neutron_contexts.L3AgentContext()(),
|
||||||
{'agent_mode': 'legacy',
|
{'agent_mode': 'legacy',
|
||||||
'handle_internal_only_router': True,
|
'handle_internal_only_router': True,
|
||||||
'ext_net_id': 'netid',
|
'ext_net_id': 'netid',
|
||||||
'plugin': 'ovs'})
|
'plugin': 'ovs'})
|
||||||
|
|
||||||
@patch('quantum_contexts.NeutronAPIContext')
|
@patch('neutron_contexts.NeutronAPIContext')
|
||||||
def test_dvr(self, _NeutronAPIContext):
|
def test_dvr(self, _NeutronAPIContext):
|
||||||
_NeutronAPIContext.return_value = \
|
_NeutronAPIContext.return_value = \
|
||||||
DummyNeutronAPIContext(return_value={'enable_dvr': True})
|
DummyNeutronAPIContext(return_value={'enable_dvr': True})
|
||||||
self.assertEquals(quantum_contexts.L3AgentContext()()['agent_mode'],
|
self.assertEquals(neutron_contexts.L3AgentContext()()['agent_mode'],
|
||||||
'dvr_snat')
|
'dvr_snat')
|
||||||
|
|
||||||
|
|
||||||
class TestQuantumGatewayContext(CharmTestCase):
|
class TestQuantumGatewayContext(CharmTestCase):
|
||||||
|
|
||||||
def setUp(self):
|
def setUp(self):
|
||||||
super(TestQuantumGatewayContext, self).setUp(quantum_contexts,
|
super(TestQuantumGatewayContext, self).setUp(neutron_contexts,
|
||||||
TO_PATCH)
|
TO_PATCH)
|
||||||
self.config.side_effect = self.test_config.get
|
self.config.side_effect = self.test_config.get
|
||||||
self.maxDiff = None
|
self.maxDiff = None
|
||||||
@ -111,8 +111,8 @@ class TestQuantumGatewayContext(CharmTestCase):
|
|||||||
@patch('charmhelpers.contrib.openstack.context.relation_get')
|
@patch('charmhelpers.contrib.openstack.context.relation_get')
|
||||||
@patch('charmhelpers.contrib.openstack.context.related_units')
|
@patch('charmhelpers.contrib.openstack.context.related_units')
|
||||||
@patch('charmhelpers.contrib.openstack.context.relation_ids')
|
@patch('charmhelpers.contrib.openstack.context.relation_ids')
|
||||||
@patch.object(quantum_contexts, 'get_shared_secret')
|
@patch.object(neutron_contexts, 'get_shared_secret')
|
||||||
@patch.object(quantum_contexts, 'get_host_ip')
|
@patch.object(neutron_contexts, 'get_host_ip')
|
||||||
def test_all(self, _host_ip, _secret, _rids, _runits, _rget):
|
def test_all(self, _host_ip, _secret, _rids, _runits, _rget):
|
||||||
rdata = {'l2-population': 'True',
|
rdata = {'l2-population': 'True',
|
||||||
'enable-dvr': 'True',
|
'enable-dvr': 'True',
|
||||||
@ -133,7 +133,7 @@ class TestQuantumGatewayContext(CharmTestCase):
|
|||||||
self.get_os_codename_install_source.return_value = 'folsom'
|
self.get_os_codename_install_source.return_value = 'folsom'
|
||||||
_host_ip.return_value = '10.5.0.1'
|
_host_ip.return_value = '10.5.0.1'
|
||||||
_secret.return_value = 'testsecret'
|
_secret.return_value = 'testsecret'
|
||||||
ctxt = quantum_contexts.QuantumGatewayContext()()
|
ctxt = neutron_contexts.QuantumGatewayContext()()
|
||||||
self.assertEquals(ctxt, {
|
self.assertEquals(ctxt, {
|
||||||
'shared_secret': 'testsecret',
|
'shared_secret': 'testsecret',
|
||||||
'enable_dvr': True,
|
'enable_dvr': True,
|
||||||
@ -158,7 +158,7 @@ class TestQuantumGatewayContext(CharmTestCase):
|
|||||||
class TestSharedSecret(CharmTestCase):
|
class TestSharedSecret(CharmTestCase):
|
||||||
|
|
||||||
def setUp(self):
|
def setUp(self):
|
||||||
super(TestSharedSecret, self).setUp(quantum_contexts,
|
super(TestSharedSecret, self).setUp(neutron_contexts,
|
||||||
TO_PATCH)
|
TO_PATCH)
|
||||||
self.config.side_effect = self.test_config.get
|
self.config.side_effect = self.test_config.get
|
||||||
|
|
||||||
@ -168,10 +168,10 @@ class TestSharedSecret(CharmTestCase):
|
|||||||
_path.exists.return_value = False
|
_path.exists.return_value = False
|
||||||
_uuid4.return_value = 'secret_thing'
|
_uuid4.return_value = 'secret_thing'
|
||||||
with patch_open() as (_open, _file):
|
with patch_open() as (_open, _file):
|
||||||
self.assertEquals(quantum_contexts.get_shared_secret(),
|
self.assertEquals(neutron_contexts.get_shared_secret(),
|
||||||
'secret_thing')
|
'secret_thing')
|
||||||
_open.assert_called_with(
|
_open.assert_called_with(
|
||||||
quantum_contexts.SHARED_SECRET.format('quantum'), 'w')
|
neutron_contexts.SHARED_SECRET.format('quantum'), 'w')
|
||||||
_file.write.assert_called_with('secret_thing')
|
_file.write.assert_called_with('secret_thing')
|
||||||
|
|
||||||
@patch('os.path')
|
@patch('os.path')
|
||||||
@ -179,16 +179,16 @@ class TestSharedSecret(CharmTestCase):
|
|||||||
_path.exists.return_value = True
|
_path.exists.return_value = True
|
||||||
with patch_open() as (_open, _file):
|
with patch_open() as (_open, _file):
|
||||||
_file.read.return_value = 'secret_thing\n'
|
_file.read.return_value = 'secret_thing\n'
|
||||||
self.assertEquals(quantum_contexts.get_shared_secret(),
|
self.assertEquals(neutron_contexts.get_shared_secret(),
|
||||||
'secret_thing')
|
'secret_thing')
|
||||||
_open.assert_called_with(
|
_open.assert_called_with(
|
||||||
quantum_contexts.SHARED_SECRET.format('quantum'), 'r')
|
neutron_contexts.SHARED_SECRET.format('quantum'), 'r')
|
||||||
|
|
||||||
|
|
||||||
class TestHostIP(CharmTestCase):
|
class TestHostIP(CharmTestCase):
|
||||||
|
|
||||||
def setUp(self):
|
def setUp(self):
|
||||||
super(TestHostIP, self).setUp(quantum_contexts,
|
super(TestHostIP, self).setUp(neutron_contexts,
|
||||||
TO_PATCH)
|
TO_PATCH)
|
||||||
self.config.side_effect = self.test_config.get
|
self.config.side_effect = self.test_config.get
|
||||||
# Save and inject
|
# Save and inject
|
||||||
@ -206,12 +206,12 @@ class TestHostIP(CharmTestCase):
|
|||||||
del sys.modules[mod]
|
del sys.modules[mod]
|
||||||
|
|
||||||
def test_get_host_ip_already_ip(self):
|
def test_get_host_ip_already_ip(self):
|
||||||
self.assertEquals(quantum_contexts.get_host_ip('10.5.0.1'),
|
self.assertEquals(neutron_contexts.get_host_ip('10.5.0.1'),
|
||||||
'10.5.0.1')
|
'10.5.0.1')
|
||||||
|
|
||||||
def test_get_host_ip_noarg(self):
|
def test_get_host_ip_noarg(self):
|
||||||
self.unit_get.return_value = "10.5.0.1"
|
self.unit_get.return_value = "10.5.0.1"
|
||||||
self.assertEquals(quantum_contexts.get_host_ip(),
|
self.assertEquals(neutron_contexts.get_host_ip(),
|
||||||
'10.5.0.1')
|
'10.5.0.1')
|
||||||
|
|
||||||
@patch('dns.resolver.query')
|
@patch('dns.resolver.query')
|
||||||
@ -219,7 +219,7 @@ class TestHostIP(CharmTestCase):
|
|||||||
class NXDOMAIN(Exception):
|
class NXDOMAIN(Exception):
|
||||||
pass
|
pass
|
||||||
_query.side_effect = NXDOMAIN()
|
_query.side_effect = NXDOMAIN()
|
||||||
self.assertRaises(NXDOMAIN, quantum_contexts.get_host_ip,
|
self.assertRaises(NXDOMAIN, neutron_contexts.get_host_ip,
|
||||||
'missing.example.com')
|
'missing.example.com')
|
||||||
|
|
||||||
@patch('dns.resolver.query')
|
@patch('dns.resolver.query')
|
||||||
@ -227,7 +227,7 @@ class TestHostIP(CharmTestCase):
|
|||||||
data = MagicMock()
|
data = MagicMock()
|
||||||
data.address = '10.5.0.1'
|
data.address = '10.5.0.1'
|
||||||
_query.return_value = [data]
|
_query.return_value = [data]
|
||||||
self.assertEquals(quantum_contexts.get_host_ip('myhost.example.com'),
|
self.assertEquals(neutron_contexts.get_host_ip('myhost.example.com'),
|
||||||
'10.5.0.1')
|
'10.5.0.1')
|
||||||
_query.assert_called_with('myhost.example.com', 'A')
|
_query.assert_called_with('myhost.example.com', 'A')
|
||||||
|
|
||||||
@ -236,39 +236,39 @@ class TestMisc(CharmTestCase):
|
|||||||
|
|
||||||
def setUp(self):
|
def setUp(self):
|
||||||
super(TestMisc,
|
super(TestMisc,
|
||||||
self).setUp(quantum_contexts,
|
self).setUp(neutron_contexts,
|
||||||
TO_PATCH)
|
TO_PATCH)
|
||||||
|
|
||||||
def test_lt_havana(self):
|
def test_lt_havana(self):
|
||||||
self.get_os_codename_install_source.return_value = 'folsom'
|
self.get_os_codename_install_source.return_value = 'folsom'
|
||||||
self.assertEquals(quantum_contexts.networking_name(), 'quantum')
|
self.assertEquals(neutron_contexts.networking_name(), 'quantum')
|
||||||
|
|
||||||
def test_ge_havana(self):
|
def test_ge_havana(self):
|
||||||
self.get_os_codename_install_source.return_value = 'havana'
|
self.get_os_codename_install_source.return_value = 'havana'
|
||||||
self.assertEquals(quantum_contexts.networking_name(), 'neutron')
|
self.assertEquals(neutron_contexts.networking_name(), 'neutron')
|
||||||
|
|
||||||
def test_remap_plugin(self):
|
def test_remap_plugin(self):
|
||||||
self.get_os_codename_install_source.return_value = 'havana'
|
self.get_os_codename_install_source.return_value = 'havana'
|
||||||
self.assertEquals(quantum_contexts.remap_plugin('nvp'), 'nvp')
|
self.assertEquals(neutron_contexts.remap_plugin('nvp'), 'nvp')
|
||||||
self.assertEquals(quantum_contexts.remap_plugin('nsx'), 'nvp')
|
self.assertEquals(neutron_contexts.remap_plugin('nsx'), 'nvp')
|
||||||
|
|
||||||
def test_remap_plugin_icehouse(self):
|
def test_remap_plugin_icehouse(self):
|
||||||
self.get_os_codename_install_source.return_value = 'icehouse'
|
self.get_os_codename_install_source.return_value = 'icehouse'
|
||||||
self.assertEquals(quantum_contexts.remap_plugin('nvp'), 'nsx')
|
self.assertEquals(neutron_contexts.remap_plugin('nvp'), 'nsx')
|
||||||
self.assertEquals(quantum_contexts.remap_plugin('nsx'), 'nsx')
|
self.assertEquals(neutron_contexts.remap_plugin('nsx'), 'nsx')
|
||||||
|
|
||||||
def test_remap_plugin_noop(self):
|
def test_remap_plugin_noop(self):
|
||||||
self.get_os_codename_install_source.return_value = 'icehouse'
|
self.get_os_codename_install_source.return_value = 'icehouse'
|
||||||
self.assertEquals(quantum_contexts.remap_plugin('ovs'), 'ovs')
|
self.assertEquals(neutron_contexts.remap_plugin('ovs'), 'ovs')
|
||||||
|
|
||||||
def test_core_plugin(self):
|
def test_core_plugin(self):
|
||||||
self.get_os_codename_install_source.return_value = 'havana'
|
self.get_os_codename_install_source.return_value = 'havana'
|
||||||
self.config.return_value = 'ovs'
|
self.config.return_value = 'ovs'
|
||||||
self.assertEquals(quantum_contexts.core_plugin(),
|
self.assertEquals(neutron_contexts.core_plugin(),
|
||||||
quantum_contexts.NEUTRON_OVS_PLUGIN)
|
neutron_contexts.NEUTRON_OVS_PLUGIN)
|
||||||
|
|
||||||
def test_core_plugin_ml2(self):
|
def test_core_plugin_ml2(self):
|
||||||
self.get_os_codename_install_source.return_value = 'icehouse'
|
self.get_os_codename_install_source.return_value = 'icehouse'
|
||||||
self.config.return_value = 'ovs'
|
self.config.return_value = 'ovs'
|
||||||
self.assertEquals(quantum_contexts.core_plugin(),
|
self.assertEquals(neutron_contexts.core_plugin(),
|
||||||
quantum_contexts.NEUTRON_ML2_PLUGIN)
|
neutron_contexts.NEUTRON_ML2_PLUGIN)
|
@ -2,12 +2,12 @@ from mock import MagicMock, patch, call
|
|||||||
import yaml
|
import yaml
|
||||||
import charmhelpers.core.hookenv as hookenv
|
import charmhelpers.core.hookenv as hookenv
|
||||||
hookenv.config = MagicMock()
|
hookenv.config = MagicMock()
|
||||||
import quantum_utils as utils
|
import neutron_utils as utils
|
||||||
_register_configs = utils.register_configs
|
_register_configs = utils.register_configs
|
||||||
_restart_map = utils.restart_map
|
_restart_map = utils.restart_map
|
||||||
utils.register_configs = MagicMock()
|
utils.register_configs = MagicMock()
|
||||||
utils.restart_map = MagicMock()
|
utils.restart_map = MagicMock()
|
||||||
import quantum_hooks as hooks
|
import neutron_hooks as hooks
|
||||||
utils.register_configs = _register_configs
|
utils.register_configs = _register_configs
|
||||||
utils.restart_map = _restart_map
|
utils.restart_map = _restart_map
|
||||||
|
|
@ -4,7 +4,7 @@ import charmhelpers.contrib.openstack.templating as templating
|
|||||||
|
|
||||||
templating.OSConfigRenderer = MagicMock()
|
templating.OSConfigRenderer = MagicMock()
|
||||||
|
|
||||||
import quantum_utils
|
import neutron_utils
|
||||||
|
|
||||||
|
|
||||||
try:
|
try:
|
||||||
@ -72,7 +72,7 @@ class TestQuantumUtils(CharmTestCase):
|
|||||||
self.assertEqual(v1, v2, msg)
|
self.assertEqual(v1, v2, msg)
|
||||||
|
|
||||||
def setUp(self):
|
def setUp(self):
|
||||||
super(TestQuantumUtils, self).setUp(quantum_utils, TO_PATCH)
|
super(TestQuantumUtils, self).setUp(neutron_utils, TO_PATCH)
|
||||||
self.networking_name.return_value = 'neutron'
|
self.networking_name.return_value = 'neutron'
|
||||||
self.headers_package.return_value = 'linux-headers-2.6.18'
|
self.headers_package.return_value = 'linux-headers-2.6.18'
|
||||||
self._set_distrib_codename('trusty')
|
self._set_distrib_codename('trusty')
|
||||||
@ -90,92 +90,92 @@ class TestQuantumUtils(CharmTestCase):
|
|||||||
|
|
||||||
def test_valid_plugin(self):
|
def test_valid_plugin(self):
|
||||||
self.config.return_value = 'ovs'
|
self.config.return_value = 'ovs'
|
||||||
self.assertTrue(quantum_utils.valid_plugin())
|
self.assertTrue(neutron_utils.valid_plugin())
|
||||||
self.config.return_value = 'nvp'
|
self.config.return_value = 'nvp'
|
||||||
self.assertTrue(quantum_utils.valid_plugin())
|
self.assertTrue(neutron_utils.valid_plugin())
|
||||||
self.config.return_value = 'nsx'
|
self.config.return_value = 'nsx'
|
||||||
self.assertTrue(quantum_utils.valid_plugin())
|
self.assertTrue(neutron_utils.valid_plugin())
|
||||||
|
|
||||||
def test_invalid_plugin(self):
|
def test_invalid_plugin(self):
|
||||||
self.config.return_value = 'invalid'
|
self.config.return_value = 'invalid'
|
||||||
self.assertFalse(quantum_utils.valid_plugin())
|
self.assertFalse(neutron_utils.valid_plugin())
|
||||||
|
|
||||||
def test_get_early_packages_ovs(self):
|
def test_get_early_packages_ovs(self):
|
||||||
self.config.return_value = 'ovs'
|
self.config.return_value = 'ovs'
|
||||||
self.determine_dkms_package.return_value = [
|
self.determine_dkms_package.return_value = [
|
||||||
'openvswitch-datapath-dkms']
|
'openvswitch-datapath-dkms']
|
||||||
self.assertEquals(
|
self.assertEquals(
|
||||||
quantum_utils.get_early_packages(),
|
neutron_utils.get_early_packages(),
|
||||||
['openvswitch-datapath-dkms', 'linux-headers-2.6.18'])
|
['openvswitch-datapath-dkms', 'linux-headers-2.6.18'])
|
||||||
|
|
||||||
def test_get_early_packages_nvp(self):
|
def test_get_early_packages_nvp(self):
|
||||||
self.config.return_value = 'nvp'
|
self.config.return_value = 'nvp'
|
||||||
self.assertEquals(
|
self.assertEquals(
|
||||||
quantum_utils.get_early_packages(),
|
neutron_utils.get_early_packages(),
|
||||||
[])
|
[])
|
||||||
|
|
||||||
def test_get_early_packages_empty(self):
|
def test_get_early_packages_empty(self):
|
||||||
self.config.return_value = 'noop'
|
self.config.return_value = 'noop'
|
||||||
self.assertEquals(quantum_utils.get_early_packages(),
|
self.assertEquals(neutron_utils.get_early_packages(),
|
||||||
[])
|
[])
|
||||||
|
|
||||||
@patch.object(quantum_utils, 'git_install_requested')
|
@patch.object(neutron_utils, 'git_install_requested')
|
||||||
def test_get_packages_ovs(self, git_requested):
|
def test_get_packages_ovs(self, git_requested):
|
||||||
git_requested.return_value = False
|
git_requested.return_value = False
|
||||||
self.config.return_value = 'ovs'
|
self.config.return_value = 'ovs'
|
||||||
self.get_os_codename_install_source.return_value = 'havana'
|
self.get_os_codename_install_source.return_value = 'havana'
|
||||||
self.assertNotEqual(quantum_utils.get_packages(), [])
|
self.assertNotEqual(neutron_utils.get_packages(), [])
|
||||||
|
|
||||||
@patch.object(quantum_utils, 'git_install_requested')
|
@patch.object(neutron_utils, 'git_install_requested')
|
||||||
def test_get_packages_ovs_icehouse(self, git_requested):
|
def test_get_packages_ovs_icehouse(self, git_requested):
|
||||||
git_requested.return_value = False
|
git_requested.return_value = False
|
||||||
self.config.return_value = 'ovs'
|
self.config.return_value = 'ovs'
|
||||||
self.get_os_codename_install_source.return_value = 'icehouse'
|
self.get_os_codename_install_source.return_value = 'icehouse'
|
||||||
self.assertTrue('neutron-vpn-agent' in quantum_utils.get_packages())
|
self.assertTrue('neutron-vpn-agent' in neutron_utils.get_packages())
|
||||||
self.assertFalse('neutron-l3-agent' in quantum_utils.get_packages())
|
self.assertFalse('neutron-l3-agent' in neutron_utils.get_packages())
|
||||||
|
|
||||||
@patch.object(quantum_utils, 'git_install_requested')
|
@patch.object(neutron_utils, 'git_install_requested')
|
||||||
def test_get_packages_ovs_juno_utopic(self, git_requested):
|
def test_get_packages_ovs_juno_utopic(self, git_requested):
|
||||||
git_requested.return_value = False
|
git_requested.return_value = False
|
||||||
self.config.return_value = 'ovs'
|
self.config.return_value = 'ovs'
|
||||||
self.get_os_codename_install_source.return_value = 'juno'
|
self.get_os_codename_install_source.return_value = 'juno'
|
||||||
self._set_distrib_codename('utopic')
|
self._set_distrib_codename('utopic')
|
||||||
self.assertFalse('neutron-vpn-agent' in quantum_utils.get_packages())
|
self.assertFalse('neutron-vpn-agent' in neutron_utils.get_packages())
|
||||||
self.assertTrue('neutron-l3-agent' in quantum_utils.get_packages())
|
self.assertTrue('neutron-l3-agent' in neutron_utils.get_packages())
|
||||||
|
|
||||||
@patch.object(quantum_utils, 'git_install_requested')
|
@patch.object(neutron_utils, 'git_install_requested')
|
||||||
def test_get_packages_ovs_juno_trusty(self, git_requested):
|
def test_get_packages_ovs_juno_trusty(self, git_requested):
|
||||||
git_requested.return_value = False
|
git_requested.return_value = False
|
||||||
self.config.return_value = 'ovs'
|
self.config.return_value = 'ovs'
|
||||||
self.get_os_codename_install_source.return_value = 'juno'
|
self.get_os_codename_install_source.return_value = 'juno'
|
||||||
self.assertTrue('neutron-vpn-agent' in quantum_utils.get_packages())
|
self.assertTrue('neutron-vpn-agent' in neutron_utils.get_packages())
|
||||||
self.assertFalse('neutron-l3-agent' in quantum_utils.get_packages())
|
self.assertFalse('neutron-l3-agent' in neutron_utils.get_packages())
|
||||||
|
|
||||||
@patch.object(quantum_utils, 'git_install_requested')
|
@patch.object(neutron_utils, 'git_install_requested')
|
||||||
def test_get_packages_ovs_kilo(self, git_requested):
|
def test_get_packages_ovs_kilo(self, git_requested):
|
||||||
git_requested.return_value = False
|
git_requested.return_value = False
|
||||||
self.config.return_value = 'ovs'
|
self.config.return_value = 'ovs'
|
||||||
self.get_os_codename_install_source.return_value = 'kilo'
|
self.get_os_codename_install_source.return_value = 'kilo'
|
||||||
self.assertTrue('python-neutron-fwaas' in quantum_utils.get_packages())
|
self.assertTrue('python-neutron-fwaas' in neutron_utils.get_packages())
|
||||||
|
|
||||||
@patch.object(quantum_utils, 'git_install_requested')
|
@patch.object(neutron_utils, 'git_install_requested')
|
||||||
def test_get_packages_l3ha(self, git_requested):
|
def test_get_packages_l3ha(self, git_requested):
|
||||||
git_requested.return_value = False
|
git_requested.return_value = False
|
||||||
self.config.return_value = 'ovs'
|
self.config.return_value = 'ovs'
|
||||||
self.get_os_codename_install_source.return_value = 'juno'
|
self.get_os_codename_install_source.return_value = 'juno'
|
||||||
self.assertTrue('keepalived' in quantum_utils.get_packages())
|
self.assertTrue('keepalived' in neutron_utils.get_packages())
|
||||||
|
|
||||||
@patch('charmhelpers.contrib.openstack.context.config')
|
@patch('charmhelpers.contrib.openstack.context.config')
|
||||||
def test_configure_ovs_starts_service_if_required(self, mock_config):
|
def test_configure_ovs_starts_service_if_required(self, mock_config):
|
||||||
mock_config.side_effect = self.test_config.get
|
mock_config.side_effect = self.test_config.get
|
||||||
self.config.return_value = 'ovs'
|
self.config.return_value = 'ovs'
|
||||||
self.service_running.return_value = False
|
self.service_running.return_value = False
|
||||||
quantum_utils.configure_ovs()
|
neutron_utils.configure_ovs()
|
||||||
self.assertTrue(self.full_restart.called)
|
self.assertTrue(self.full_restart.called)
|
||||||
|
|
||||||
def test_configure_ovs_doesnt_restart_service(self):
|
def test_configure_ovs_doesnt_restart_service(self):
|
||||||
self.service_running.return_value = True
|
self.service_running.return_value = True
|
||||||
quantum_utils.configure_ovs()
|
neutron_utils.configure_ovs()
|
||||||
self.assertFalse(self.full_restart.called)
|
self.assertFalse(self.full_restart.called)
|
||||||
|
|
||||||
@patch('charmhelpers.contrib.openstack.context.config')
|
@patch('charmhelpers.contrib.openstack.context.config')
|
||||||
@ -186,7 +186,7 @@ class TestQuantumUtils(CharmTestCase):
|
|||||||
self.test_config.set('ext-port', 'eth0')
|
self.test_config.set('ext-port', 'eth0')
|
||||||
self.ExternalPortContext.return_value = \
|
self.ExternalPortContext.return_value = \
|
||||||
DummyExternalPortContext(return_value={'ext_port': 'eth0'})
|
DummyExternalPortContext(return_value={'ext_port': 'eth0'})
|
||||||
quantum_utils.configure_ovs()
|
neutron_utils.configure_ovs()
|
||||||
self.add_bridge.assert_has_calls([
|
self.add_bridge.assert_has_calls([
|
||||||
call('br-int'),
|
call('br-int'),
|
||||||
call('br-ex'),
|
call('br-ex'),
|
||||||
@ -204,7 +204,7 @@ class TestQuantumUtils(CharmTestCase):
|
|||||||
# Test back-compatibility i.e. port but no bridge (so br-data is
|
# Test back-compatibility i.e. port but no bridge (so br-data is
|
||||||
# assumed)
|
# assumed)
|
||||||
self.test_config.set('data-port', 'eth0')
|
self.test_config.set('data-port', 'eth0')
|
||||||
quantum_utils.configure_ovs()
|
neutron_utils.configure_ovs()
|
||||||
self.add_bridge.assert_has_calls([
|
self.add_bridge.assert_has_calls([
|
||||||
call('br-int'),
|
call('br-int'),
|
||||||
call('br-ex'),
|
call('br-ex'),
|
||||||
@ -216,7 +216,7 @@ class TestQuantumUtils(CharmTestCase):
|
|||||||
self.test_config.set('data-port', 'br-foo:eth0')
|
self.test_config.set('data-port', 'br-foo:eth0')
|
||||||
self.add_bridge.reset_mock()
|
self.add_bridge.reset_mock()
|
||||||
self.add_bridge_port.reset_mock()
|
self.add_bridge_port.reset_mock()
|
||||||
quantum_utils.configure_ovs()
|
neutron_utils.configure_ovs()
|
||||||
self.add_bridge.assert_has_calls([
|
self.add_bridge.assert_has_calls([
|
||||||
call('br-int'),
|
call('br-int'),
|
||||||
call('br-ex'),
|
call('br-ex'),
|
||||||
@ -225,7 +225,7 @@ class TestQuantumUtils(CharmTestCase):
|
|||||||
# Not called since we have a bogus bridge in data-ports
|
# Not called since we have a bogus bridge in data-ports
|
||||||
self.assertFalse(self.add_bridge_port.called)
|
self.assertFalse(self.add_bridge_port.called)
|
||||||
|
|
||||||
@patch.object(quantum_utils, 'git_install_requested')
|
@patch.object(neutron_utils, 'git_install_requested')
|
||||||
def test_do_openstack_upgrade(self, git_requested):
|
def test_do_openstack_upgrade(self, git_requested):
|
||||||
git_requested.return_value = False
|
git_requested.return_value = False
|
||||||
self.config.side_effect = self.test_config.get
|
self.config.side_effect = self.test_config.get
|
||||||
@ -233,7 +233,7 @@ class TestQuantumUtils(CharmTestCase):
|
|||||||
self.test_config.set('openstack-origin', 'cloud:precise-havana')
|
self.test_config.set('openstack-origin', 'cloud:precise-havana')
|
||||||
self.test_config.set('plugin', 'ovs')
|
self.test_config.set('plugin', 'ovs')
|
||||||
self.get_os_codename_install_source.return_value = 'havana'
|
self.get_os_codename_install_source.return_value = 'havana'
|
||||||
quantum_utils.do_openstack_upgrade()
|
neutron_utils.do_openstack_upgrade()
|
||||||
self.assertTrue(self.log.called)
|
self.assertTrue(self.log.called)
|
||||||
self.apt_update.assert_called_with(fatal=True)
|
self.apt_update.assert_called_with(fatal=True)
|
||||||
dpkg_opts = [
|
dpkg_opts = [
|
||||||
@ -250,36 +250,36 @@ class TestQuantumUtils(CharmTestCase):
|
|||||||
def test_register_configs_ovs(self):
|
def test_register_configs_ovs(self):
|
||||||
self.config.return_value = 'ovs'
|
self.config.return_value = 'ovs'
|
||||||
self.is_relation_made.return_value = False
|
self.is_relation_made.return_value = False
|
||||||
configs = quantum_utils.register_configs()
|
configs = neutron_utils.register_configs()
|
||||||
confs = [quantum_utils.NEUTRON_DHCP_AGENT_CONF,
|
confs = [neutron_utils.NEUTRON_DHCP_AGENT_CONF,
|
||||||
quantum_utils.NEUTRON_METADATA_AGENT_CONF,
|
neutron_utils.NEUTRON_METADATA_AGENT_CONF,
|
||||||
quantum_utils.NOVA_CONF,
|
neutron_utils.NOVA_CONF,
|
||||||
quantum_utils.NEUTRON_CONF,
|
neutron_utils.NEUTRON_CONF,
|
||||||
quantum_utils.NEUTRON_L3_AGENT_CONF,
|
neutron_utils.NEUTRON_L3_AGENT_CONF,
|
||||||
quantum_utils.NEUTRON_OVS_PLUGIN_CONF,
|
neutron_utils.NEUTRON_OVS_PLUGIN_CONF,
|
||||||
quantum_utils.EXT_PORT_CONF]
|
neutron_utils.EXT_PORT_CONF]
|
||||||
for conf in confs:
|
for conf in confs:
|
||||||
configs.register.assert_any_call(
|
configs.register.assert_any_call(
|
||||||
conf,
|
conf,
|
||||||
quantum_utils.CONFIG_FILES['neutron'][quantum_utils.OVS][conf]
|
neutron_utils.CONFIG_FILES['neutron'][neutron_utils.OVS][conf]
|
||||||
['hook_contexts']
|
['hook_contexts']
|
||||||
)
|
)
|
||||||
|
|
||||||
def test_register_configs_amqp_nova(self):
|
def test_register_configs_amqp_nova(self):
|
||||||
self.config.return_value = 'ovs'
|
self.config.return_value = 'ovs'
|
||||||
self.is_relation_made.return_value = True
|
self.is_relation_made.return_value = True
|
||||||
configs = quantum_utils.register_configs()
|
configs = neutron_utils.register_configs()
|
||||||
confs = [quantum_utils.NEUTRON_DHCP_AGENT_CONF,
|
confs = [neutron_utils.NEUTRON_DHCP_AGENT_CONF,
|
||||||
quantum_utils.NEUTRON_METADATA_AGENT_CONF,
|
neutron_utils.NEUTRON_METADATA_AGENT_CONF,
|
||||||
quantum_utils.NOVA_CONF,
|
neutron_utils.NOVA_CONF,
|
||||||
quantum_utils.NEUTRON_CONF,
|
neutron_utils.NEUTRON_CONF,
|
||||||
quantum_utils.NEUTRON_L3_AGENT_CONF,
|
neutron_utils.NEUTRON_L3_AGENT_CONF,
|
||||||
quantum_utils.NEUTRON_OVS_PLUGIN_CONF,
|
neutron_utils.NEUTRON_OVS_PLUGIN_CONF,
|
||||||
quantum_utils.EXT_PORT_CONF]
|
neutron_utils.EXT_PORT_CONF]
|
||||||
for conf in confs:
|
for conf in confs:
|
||||||
configs.register.assert_any_call(
|
configs.register.assert_any_call(
|
||||||
conf,
|
conf,
|
||||||
quantum_utils.CONFIG_FILES['neutron'][quantum_utils.OVS][conf]
|
neutron_utils.CONFIG_FILES['neutron'][neutron_utils.OVS][conf]
|
||||||
['hook_contexts']
|
['hook_contexts']
|
||||||
)
|
)
|
||||||
|
|
||||||
@ -287,7 +287,7 @@ class TestQuantumUtils(CharmTestCase):
|
|||||||
self.config.return_value = 'ovs'
|
self.config.return_value = 'ovs'
|
||||||
self.get_os_codename_install_source.return_value = 'havana'
|
self.get_os_codename_install_source.return_value = 'havana'
|
||||||
ex_map = {
|
ex_map = {
|
||||||
quantum_utils.NEUTRON_CONF: ['neutron-l3-agent',
|
neutron_utils.NEUTRON_CONF: ['neutron-l3-agent',
|
||||||
'neutron-dhcp-agent',
|
'neutron-dhcp-agent',
|
||||||
'neutron-metadata-agent',
|
'neutron-metadata-agent',
|
||||||
'neutron-plugin-openvswitch-agent',
|
'neutron-plugin-openvswitch-agent',
|
||||||
@ -296,62 +296,62 @@ class TestQuantumUtils(CharmTestCase):
|
|||||||
'neutron-lbaas-agent',
|
'neutron-lbaas-agent',
|
||||||
'neutron-plugin-vpn-agent',
|
'neutron-plugin-vpn-agent',
|
||||||
'neutron-vpn-agent'],
|
'neutron-vpn-agent'],
|
||||||
quantum_utils.NEUTRON_DNSMASQ_CONF: ['neutron-dhcp-agent'],
|
neutron_utils.NEUTRON_DNSMASQ_CONF: ['neutron-dhcp-agent'],
|
||||||
quantum_utils.NEUTRON_LBAAS_AGENT_CONF:
|
neutron_utils.NEUTRON_LBAAS_AGENT_CONF:
|
||||||
['neutron-lbaas-agent'],
|
['neutron-lbaas-agent'],
|
||||||
quantum_utils.NEUTRON_OVS_PLUGIN_CONF:
|
neutron_utils.NEUTRON_OVS_PLUGIN_CONF:
|
||||||
['neutron-plugin-openvswitch-agent'],
|
['neutron-plugin-openvswitch-agent'],
|
||||||
quantum_utils.NEUTRON_METADATA_AGENT_CONF:
|
neutron_utils.NEUTRON_METADATA_AGENT_CONF:
|
||||||
['neutron-metadata-agent'],
|
['neutron-metadata-agent'],
|
||||||
quantum_utils.NEUTRON_VPNAAS_AGENT_CONF: [
|
neutron_utils.NEUTRON_VPNAAS_AGENT_CONF: [
|
||||||
'neutron-plugin-vpn-agent',
|
'neutron-plugin-vpn-agent',
|
||||||
'neutron-vpn-agent'],
|
'neutron-vpn-agent'],
|
||||||
quantum_utils.NEUTRON_L3_AGENT_CONF: ['neutron-l3-agent',
|
neutron_utils.NEUTRON_L3_AGENT_CONF: ['neutron-l3-agent',
|
||||||
'neutron-vpn-agent'],
|
'neutron-vpn-agent'],
|
||||||
quantum_utils.NEUTRON_DHCP_AGENT_CONF: ['neutron-dhcp-agent'],
|
neutron_utils.NEUTRON_DHCP_AGENT_CONF: ['neutron-dhcp-agent'],
|
||||||
quantum_utils.NEUTRON_FWAAS_CONF: ['neutron-l3-agent',
|
neutron_utils.NEUTRON_FWAAS_CONF: ['neutron-l3-agent',
|
||||||
'neutron-vpn-agent'],
|
'neutron-vpn-agent'],
|
||||||
quantum_utils.NEUTRON_METERING_AGENT_CONF:
|
neutron_utils.NEUTRON_METERING_AGENT_CONF:
|
||||||
['neutron-metering-agent', 'neutron-plugin-metering-agent'],
|
['neutron-metering-agent', 'neutron-plugin-metering-agent'],
|
||||||
quantum_utils.NOVA_CONF: ['nova-api-metadata'],
|
neutron_utils.NOVA_CONF: ['nova-api-metadata'],
|
||||||
quantum_utils.EXT_PORT_CONF: ['ext-port'],
|
neutron_utils.EXT_PORT_CONF: ['ext-port'],
|
||||||
quantum_utils.PHY_NIC_MTU_CONF: ['os-charm-phy-nic-mtu'],
|
neutron_utils.PHY_NIC_MTU_CONF: ['os-charm-phy-nic-mtu'],
|
||||||
}
|
}
|
||||||
|
|
||||||
self.assertDictEqual(quantum_utils.restart_map(), ex_map)
|
self.assertDictEqual(neutron_utils.restart_map(), ex_map)
|
||||||
|
|
||||||
def test_register_configs_nvp(self):
|
def test_register_configs_nvp(self):
|
||||||
self.config.return_value = 'nvp'
|
self.config.return_value = 'nvp'
|
||||||
self.is_relation_made.return_value = False
|
self.is_relation_made.return_value = False
|
||||||
configs = quantum_utils.register_configs()
|
configs = neutron_utils.register_configs()
|
||||||
confs = [quantum_utils.NEUTRON_DHCP_AGENT_CONF,
|
confs = [neutron_utils.NEUTRON_DHCP_AGENT_CONF,
|
||||||
quantum_utils.NEUTRON_METADATA_AGENT_CONF,
|
neutron_utils.NEUTRON_METADATA_AGENT_CONF,
|
||||||
quantum_utils.NOVA_CONF,
|
neutron_utils.NOVA_CONF,
|
||||||
quantum_utils.NEUTRON_CONF]
|
neutron_utils.NEUTRON_CONF]
|
||||||
for conf in confs:
|
for conf in confs:
|
||||||
configs.register.assert_any_call(
|
configs.register.assert_any_call(
|
||||||
conf,
|
conf,
|
||||||
quantum_utils.CONFIG_FILES['neutron'][quantum_utils.NVP][conf]
|
neutron_utils.CONFIG_FILES['neutron'][neutron_utils.NVP][conf]
|
||||||
['hook_contexts']
|
['hook_contexts']
|
||||||
)
|
)
|
||||||
|
|
||||||
def test_register_configs_nsx(self):
|
def test_register_configs_nsx(self):
|
||||||
self.config.return_value = 'nsx'
|
self.config.return_value = 'nsx'
|
||||||
configs = quantum_utils.register_configs()
|
configs = neutron_utils.register_configs()
|
||||||
confs = [quantum_utils.NEUTRON_DHCP_AGENT_CONF,
|
confs = [neutron_utils.NEUTRON_DHCP_AGENT_CONF,
|
||||||
quantum_utils.NEUTRON_METADATA_AGENT_CONF,
|
neutron_utils.NEUTRON_METADATA_AGENT_CONF,
|
||||||
quantum_utils.NOVA_CONF,
|
neutron_utils.NOVA_CONF,
|
||||||
quantum_utils.NEUTRON_CONF]
|
neutron_utils.NEUTRON_CONF]
|
||||||
for conf in confs:
|
for conf in confs:
|
||||||
configs.register.assert_any_call(
|
configs.register.assert_any_call(
|
||||||
conf,
|
conf,
|
||||||
quantum_utils.CONFIG_FILES['neutron'][quantum_utils.NSX][conf]
|
neutron_utils.CONFIG_FILES['neutron'][neutron_utils.NSX][conf]
|
||||||
['hook_contexts']
|
['hook_contexts']
|
||||||
)
|
)
|
||||||
|
|
||||||
def test_stop_services_nvp(self):
|
def test_stop_services_nvp(self):
|
||||||
self.config.return_value = 'nvp'
|
self.config.return_value = 'nvp'
|
||||||
quantum_utils.stop_services()
|
neutron_utils.stop_services()
|
||||||
calls = [
|
calls = [
|
||||||
call('neutron-dhcp-agent'),
|
call('neutron-dhcp-agent'),
|
||||||
call('nova-api-metadata'),
|
call('nova-api-metadata'),
|
||||||
@ -364,7 +364,7 @@ class TestQuantumUtils(CharmTestCase):
|
|||||||
|
|
||||||
def test_stop_services_ovs(self):
|
def test_stop_services_ovs(self):
|
||||||
self.config.return_value = 'ovs'
|
self.config.return_value = 'ovs'
|
||||||
quantum_utils.stop_services()
|
neutron_utils.stop_services()
|
||||||
calls = [call('neutron-dhcp-agent'),
|
calls = [call('neutron-dhcp-agent'),
|
||||||
call('neutron-plugin-openvswitch-agent'),
|
call('neutron-plugin-openvswitch-agent'),
|
||||||
call('nova-api-metadata'),
|
call('nova-api-metadata'),
|
||||||
@ -378,75 +378,75 @@ class TestQuantumUtils(CharmTestCase):
|
|||||||
def test_restart_map_nvp(self):
|
def test_restart_map_nvp(self):
|
||||||
self.config.return_value = 'nvp'
|
self.config.return_value = 'nvp'
|
||||||
ex_map = {
|
ex_map = {
|
||||||
quantum_utils.NEUTRON_DHCP_AGENT_CONF: ['neutron-dhcp-agent'],
|
neutron_utils.NEUTRON_DHCP_AGENT_CONF: ['neutron-dhcp-agent'],
|
||||||
quantum_utils.NEUTRON_DNSMASQ_CONF: ['neutron-dhcp-agent'],
|
neutron_utils.NEUTRON_DNSMASQ_CONF: ['neutron-dhcp-agent'],
|
||||||
quantum_utils.NOVA_CONF: ['nova-api-metadata'],
|
neutron_utils.NOVA_CONF: ['nova-api-metadata'],
|
||||||
quantum_utils.NEUTRON_CONF: ['neutron-dhcp-agent',
|
neutron_utils.NEUTRON_CONF: ['neutron-dhcp-agent',
|
||||||
'neutron-metadata-agent'],
|
'neutron-metadata-agent'],
|
||||||
quantum_utils.NEUTRON_METADATA_AGENT_CONF:
|
neutron_utils.NEUTRON_METADATA_AGENT_CONF:
|
||||||
['neutron-metadata-agent'],
|
['neutron-metadata-agent'],
|
||||||
}
|
}
|
||||||
self.assertEquals(quantum_utils.restart_map(), ex_map)
|
self.assertEquals(neutron_utils.restart_map(), ex_map)
|
||||||
|
|
||||||
def test_register_configs_pre_install(self):
|
def test_register_configs_pre_install(self):
|
||||||
self.config.return_value = 'ovs'
|
self.config.return_value = 'ovs'
|
||||||
self.is_relation_made.return_value = False
|
self.is_relation_made.return_value = False
|
||||||
self.networking_name.return_value = 'quantum'
|
self.networking_name.return_value = 'quantum'
|
||||||
configs = quantum_utils.register_configs()
|
configs = neutron_utils.register_configs()
|
||||||
confs = [quantum_utils.QUANTUM_DHCP_AGENT_CONF,
|
confs = [neutron_utils.QUANTUM_DHCP_AGENT_CONF,
|
||||||
quantum_utils.QUANTUM_METADATA_AGENT_CONF,
|
neutron_utils.QUANTUM_METADATA_AGENT_CONF,
|
||||||
quantum_utils.NOVA_CONF,
|
neutron_utils.NOVA_CONF,
|
||||||
quantum_utils.QUANTUM_CONF,
|
neutron_utils.QUANTUM_CONF,
|
||||||
quantum_utils.QUANTUM_L3_AGENT_CONF,
|
neutron_utils.QUANTUM_L3_AGENT_CONF,
|
||||||
quantum_utils.QUANTUM_OVS_PLUGIN_CONF,
|
neutron_utils.QUANTUM_OVS_PLUGIN_CONF,
|
||||||
quantum_utils.EXT_PORT_CONF]
|
neutron_utils.EXT_PORT_CONF]
|
||||||
print configs.register.mock_calls
|
print configs.register.mock_calls
|
||||||
for conf in confs:
|
for conf in confs:
|
||||||
configs.register.assert_any_call(
|
configs.register.assert_any_call(
|
||||||
conf,
|
conf,
|
||||||
quantum_utils.CONFIG_FILES['quantum'][quantum_utils.OVS][conf]
|
neutron_utils.CONFIG_FILES['quantum'][neutron_utils.OVS][conf]
|
||||||
['hook_contexts']
|
['hook_contexts']
|
||||||
)
|
)
|
||||||
|
|
||||||
def test_get_common_package_quantum(self):
|
def test_get_common_package_quantum(self):
|
||||||
self.get_os_codename_package.return_value = 'folsom'
|
self.get_os_codename_package.return_value = 'folsom'
|
||||||
self.assertEquals(quantum_utils.get_common_package(), 'quantum-common')
|
self.assertEquals(neutron_utils.get_common_package(), 'quantum-common')
|
||||||
|
|
||||||
def test_get_common_package_neutron(self):
|
def test_get_common_package_neutron(self):
|
||||||
self.get_os_codename_package.return_value = None
|
self.get_os_codename_package.return_value = None
|
||||||
self.assertEquals(quantum_utils.get_common_package(), 'neutron-common')
|
self.assertEquals(neutron_utils.get_common_package(), 'neutron-common')
|
||||||
|
|
||||||
def test_copy_file_without_update(self):
|
def test_copy_file_without_update(self):
|
||||||
src = 'dummy_source_dir/dummy_file'
|
src = 'dummy_source_dir/dummy_file'
|
||||||
dst = 'dummy_des_dir'
|
dst = 'dummy_des_dir'
|
||||||
quantum_utils.copy_file(src, dst)
|
neutron_utils.copy_file(src, dst)
|
||||||
self.assertTrue(self.mkdir.called)
|
self.assertTrue(self.mkdir.called)
|
||||||
self.assertTrue(self.copy2.called)
|
self.assertTrue(self.copy2.called)
|
||||||
|
|
||||||
@patch('quantum_utils.os.path.isfile')
|
@patch('neutron_utils.os.path.isfile')
|
||||||
def test_copy_file_with_update(self, _isfile):
|
def test_copy_file_with_update(self, _isfile):
|
||||||
src = 'dummy_source_dir/dummy_file'
|
src = 'dummy_source_dir/dummy_file'
|
||||||
dst = 'dummy_des_dir'
|
dst = 'dummy_des_dir'
|
||||||
_isfile.return_value = False
|
_isfile.return_value = False
|
||||||
quantum_utils.copy_file(src, dst, force=True)
|
neutron_utils.copy_file(src, dst, force=True)
|
||||||
self.assertTrue(self.mkdir.called)
|
self.assertTrue(self.mkdir.called)
|
||||||
self.assertTrue(self.copy2.called)
|
self.assertTrue(self.copy2.called)
|
||||||
|
|
||||||
@patch('quantum_utils.os.remove')
|
@patch('neutron_utils.os.remove')
|
||||||
@patch('quantum_utils.os.path.isfile')
|
@patch('neutron_utils.os.path.isfile')
|
||||||
def test_remove_file_exists(self, _isfile, _remove):
|
def test_remove_file_exists(self, _isfile, _remove):
|
||||||
path = 'dummy_des_dir/dummy_file'
|
path = 'dummy_des_dir/dummy_file'
|
||||||
_isfile.return_value = True
|
_isfile.return_value = True
|
||||||
quantum_utils.remove_file(path)
|
neutron_utils.remove_file(path)
|
||||||
self.assertTrue(_remove.called)
|
self.assertTrue(_remove.called)
|
||||||
self.assertFalse(self.log.called)
|
self.assertFalse(self.log.called)
|
||||||
|
|
||||||
@patch('quantum_utils.os.remove')
|
@patch('neutron_utils.os.remove')
|
||||||
@patch('quantum_utils.os.path.isfile')
|
@patch('neutron_utils.os.path.isfile')
|
||||||
def test_remove_file_non_exists(self, _isfile, _remove):
|
def test_remove_file_non_exists(self, _isfile, _remove):
|
||||||
path = 'dummy_des_dir/dummy_file'
|
path = 'dummy_des_dir/dummy_file'
|
||||||
_isfile.return_value = False
|
_isfile.return_value = False
|
||||||
quantum_utils.remove_file(path)
|
neutron_utils.remove_file(path)
|
||||||
self.assertFalse(_remove.called)
|
self.assertFalse(_remove.called)
|
||||||
self.assertTrue(self.log.called)
|
self.assertTrue(self.log.called)
|
||||||
|
|
||||||
@ -608,7 +608,7 @@ class TestQuantumAgentReallocation(CharmTestCase):
|
|||||||
def setUp(self):
|
def setUp(self):
|
||||||
if not neutronclient:
|
if not neutronclient:
|
||||||
raise self.skipTest('Skipping, no neutronclient installed')
|
raise self.skipTest('Skipping, no neutronclient installed')
|
||||||
super(TestQuantumAgentReallocation, self).setUp(quantum_utils,
|
super(TestQuantumAgentReallocation, self).setUp(neutron_utils,
|
||||||
TO_PATCH)
|
TO_PATCH)
|
||||||
|
|
||||||
def tearDown(self):
|
def tearDown(self):
|
||||||
@ -618,7 +618,7 @@ class TestQuantumAgentReallocation(CharmTestCase):
|
|||||||
def test_no_network_context(self):
|
def test_no_network_context(self):
|
||||||
self.NetworkServiceContext.return_value = \
|
self.NetworkServiceContext.return_value = \
|
||||||
DummyNetworkServiceContext(return_value=None)
|
DummyNetworkServiceContext(return_value=None)
|
||||||
quantum_utils.reassign_agent_resources()
|
neutron_utils.reassign_agent_resources()
|
||||||
self.assertTrue(self.log.called)
|
self.assertTrue(self.log.called)
|
||||||
|
|
||||||
@patch('neutronclient.v2_0.client.Client')
|
@patch('neutronclient.v2_0.client.Client')
|
||||||
@ -628,7 +628,7 @@ class TestQuantumAgentReallocation(CharmTestCase):
|
|||||||
dummy_client = MagicMock()
|
dummy_client = MagicMock()
|
||||||
dummy_client.list_agents.side_effect = agents_all_alive.itervalues()
|
dummy_client.list_agents.side_effect = agents_all_alive.itervalues()
|
||||||
_client.return_value = dummy_client
|
_client.return_value = dummy_client
|
||||||
quantum_utils.reassign_agent_resources()
|
neutron_utils.reassign_agent_resources()
|
||||||
dummy_client.add_router_to_l3_agent.assert_not_called()
|
dummy_client.add_router_to_l3_agent.assert_not_called()
|
||||||
dummy_client.remove_router_from_l3_agent.assert_not_called()
|
dummy_client.remove_router_from_l3_agent.assert_not_called()
|
||||||
dummy_client.add_network_to_dhcp_agent.assert_not_called()
|
dummy_client.add_network_to_dhcp_agent.assert_not_called()
|
||||||
@ -649,7 +649,7 @@ class TestQuantumAgentReallocation(CharmTestCase):
|
|||||||
self.unit_private_ip.return_value = 'cluster2-machine1.internal'
|
self.unit_private_ip.return_value = 'cluster2-machine1.internal'
|
||||||
self.relations_of_type.return_value = \
|
self.relations_of_type.return_value = \
|
||||||
[{'private-address': 'cluster2-machine3.internal'}]
|
[{'private-address': 'cluster2-machine3.internal'}]
|
||||||
quantum_utils.reassign_agent_resources()
|
neutron_utils.reassign_agent_resources()
|
||||||
|
|
||||||
# Ensure routers removed from dead l3 agent
|
# Ensure routers removed from dead l3 agent
|
||||||
dummy_client.remove_router_from_l3_agent.assert_has_calls(
|
dummy_client.remove_router_from_l3_agent.assert_has_calls(
|
||||||
@ -690,33 +690,33 @@ class TestQuantumAgentReallocation(CharmTestCase):
|
|||||||
_client.return_value = dummy_client
|
_client.return_value = dummy_client
|
||||||
self.unit_private_ip.return_value = 'cluster1-machine1.internal'
|
self.unit_private_ip.return_value = 'cluster1-machine1.internal'
|
||||||
self.relations_of_type.return_value = []
|
self.relations_of_type.return_value = []
|
||||||
quantum_utils.reassign_agent_resources()
|
neutron_utils.reassign_agent_resources()
|
||||||
self.assertTrue(self.log.called)
|
self.assertTrue(self.log.called)
|
||||||
assert not dummy_client.remove_router_from_l3_agent.called
|
assert not dummy_client.remove_router_from_l3_agent.called
|
||||||
assert not dummy_client.remove_network_from_dhcp_agent.called
|
assert not dummy_client.remove_network_from_dhcp_agent.called
|
||||||
|
|
||||||
@patch.object(quantum_utils, 'git_install_requested')
|
@patch.object(neutron_utils, 'git_install_requested')
|
||||||
@patch.object(quantum_utils, 'git_clone_and_install')
|
@patch.object(neutron_utils, 'git_clone_and_install')
|
||||||
@patch.object(quantum_utils, 'git_post_install')
|
@patch.object(neutron_utils, 'git_post_install')
|
||||||
@patch.object(quantum_utils, 'git_pre_install')
|
@patch.object(neutron_utils, 'git_pre_install')
|
||||||
def test_git_install(self, git_pre, git_post, git_clone_and_install,
|
def test_git_install(self, git_pre, git_post, git_clone_and_install,
|
||||||
git_requested):
|
git_requested):
|
||||||
projects_yaml = openstack_origin_git
|
projects_yaml = openstack_origin_git
|
||||||
git_requested.return_value = True
|
git_requested.return_value = True
|
||||||
quantum_utils.git_install(projects_yaml)
|
neutron_utils.git_install(projects_yaml)
|
||||||
self.assertTrue(git_pre.called)
|
self.assertTrue(git_pre.called)
|
||||||
git_clone_and_install.assert_called_with(openstack_origin_git,
|
git_clone_and_install.assert_called_with(openstack_origin_git,
|
||||||
core_project='neutron')
|
core_project='neutron')
|
||||||
self.assertTrue(git_post.called)
|
self.assertTrue(git_post.called)
|
||||||
|
|
||||||
@patch.object(quantum_utils, 'mkdir')
|
@patch.object(neutron_utils, 'mkdir')
|
||||||
@patch.object(quantum_utils, 'write_file')
|
@patch.object(neutron_utils, 'write_file')
|
||||||
@patch.object(quantum_utils, 'add_user_to_group')
|
@patch.object(neutron_utils, 'add_user_to_group')
|
||||||
@patch.object(quantum_utils, 'add_group')
|
@patch.object(neutron_utils, 'add_group')
|
||||||
@patch.object(quantum_utils, 'adduser')
|
@patch.object(neutron_utils, 'adduser')
|
||||||
def test_git_pre_install(self, adduser, add_group, add_user_to_group,
|
def test_git_pre_install(self, adduser, add_group, add_user_to_group,
|
||||||
write_file, mkdir):
|
write_file, mkdir):
|
||||||
quantum_utils.git_pre_install()
|
neutron_utils.git_pre_install()
|
||||||
adduser.assert_called_with('neutron', shell='/bin/bash',
|
adduser.assert_called_with('neutron', shell='/bin/bash',
|
||||||
system_user=True)
|
system_user=True)
|
||||||
add_group.assert_called_with('neutron', system_group=True)
|
add_group.assert_called_with('neutron', system_group=True)
|
||||||
@ -779,8 +779,8 @@ class TestQuantumAgentReallocation(CharmTestCase):
|
|||||||
self.assertEquals(write_file.call_args_list, expected)
|
self.assertEquals(write_file.call_args_list, expected)
|
||||||
|
|
||||||
@patch('os.remove')
|
@patch('os.remove')
|
||||||
@patch.object(quantum_utils, 'git_src_dir')
|
@patch.object(neutron_utils, 'git_src_dir')
|
||||||
@patch.object(quantum_utils, 'render')
|
@patch.object(neutron_utils, 'render')
|
||||||
@patch('os.path.join')
|
@patch('os.path.join')
|
||||||
@patch('os.path.exists')
|
@patch('os.path.exists')
|
||||||
@patch('os.symlink')
|
@patch('os.symlink')
|
||||||
@ -791,7 +791,7 @@ class TestQuantumAgentReallocation(CharmTestCase):
|
|||||||
exists, join, render, git_src_dir, remove):
|
exists, join, render, git_src_dir, remove):
|
||||||
projects_yaml = openstack_origin_git
|
projects_yaml = openstack_origin_git
|
||||||
join.return_value = 'joined-string'
|
join.return_value = 'joined-string'
|
||||||
quantum_utils.git_post_install(projects_yaml)
|
neutron_utils.git_post_install(projects_yaml)
|
||||||
expected = [
|
expected = [
|
||||||
call('joined-string', '/etc/neutron'),
|
call('joined-string', '/etc/neutron'),
|
||||||
call('joined-string', '/etc/neutron/plugins'),
|
call('joined-string', '/etc/neutron/plugins'),
|
Loading…
Reference in New Issue
Block a user