Share values of interest from charm state with plugin
Remove separate relation-changed hook. Change-Id: I9eb5f8a6039b74288a395a584f844507448cdc23 Closes-Bug: #1845212
This commit is contained in:
parent
40b3977d16
commit
831729dc98
|
@ -750,6 +750,19 @@ class NeutronApiSDNContext(context.SubordinateConfigContext):
|
||||||
return None
|
return None
|
||||||
return ctxt.get(templ_key) == self.defaults[interface_key]['value']
|
return ctxt.get(templ_key) == self.defaults[interface_key]['value']
|
||||||
|
|
||||||
|
def is_allowed(self, templ_key):
|
||||||
|
"""Check whether specified key is allowed on the relation.
|
||||||
|
|
||||||
|
:param templ_key: Key to lookup
|
||||||
|
:type templ_key: str
|
||||||
|
:returns: True or False
|
||||||
|
:rtype: bool
|
||||||
|
"""
|
||||||
|
for interface_key in self.defaults:
|
||||||
|
if self.defaults[interface_key]['templ_key'] == templ_key:
|
||||||
|
return True
|
||||||
|
return False
|
||||||
|
|
||||||
def __call__(self):
|
def __call__(self):
|
||||||
ctxt = super(NeutronApiSDNContext, self).__call__()
|
ctxt = super(NeutronApiSDNContext, self).__call__()
|
||||||
for rid in relation_ids('neutron-plugin-api-subordinate'):
|
for rid in relation_ids('neutron-plugin-api-subordinate'):
|
||||||
|
|
|
@ -14,6 +14,7 @@
|
||||||
# See the License for the specific language governing permissions and
|
# See the License for the specific language governing permissions and
|
||||||
# limitations under the License.
|
# limitations under the License.
|
||||||
|
|
||||||
|
import json
|
||||||
import os
|
import os
|
||||||
import sys
|
import sys
|
||||||
import uuid
|
import uuid
|
||||||
|
@ -65,44 +66,46 @@ from charmhelpers.contrib.openstack.utils import (
|
||||||
)
|
)
|
||||||
|
|
||||||
from neutron_api_utils import (
|
from neutron_api_utils import (
|
||||||
additional_install_locations,
|
|
||||||
ADMIN_POLICY,
|
ADMIN_POLICY,
|
||||||
API_PASTE_INI,
|
CLUSTER_RES,
|
||||||
|
NEUTRON_CONF,
|
||||||
|
additional_install_locations,
|
||||||
api_port,
|
api_port,
|
||||||
assess_status,
|
assess_status,
|
||||||
CLUSTER_RES,
|
check_local_db_actions_complete,
|
||||||
determine_packages,
|
determine_packages,
|
||||||
determine_ports,
|
determine_ports,
|
||||||
do_openstack_upgrade,
|
do_openstack_upgrade,
|
||||||
dvr_router_present,
|
dvr_router_present,
|
||||||
force_etcd_restart,
|
force_etcd_restart,
|
||||||
is_api_ready,
|
is_api_ready,
|
||||||
|
is_db_initialised,
|
||||||
l3ha_router_present,
|
l3ha_router_present,
|
||||||
|
manage_plugin,
|
||||||
migrate_neutron_database,
|
migrate_neutron_database,
|
||||||
NEUTRON_CONF,
|
|
||||||
neutron_ready,
|
neutron_ready,
|
||||||
|
pause_unit_helper,
|
||||||
register_configs,
|
register_configs,
|
||||||
|
remove_old_packages,
|
||||||
restart_map,
|
restart_map,
|
||||||
|
resume_unit_helper,
|
||||||
services,
|
services,
|
||||||
setup_ipv6,
|
setup_ipv6,
|
||||||
check_local_db_actions_complete,
|
|
||||||
pause_unit_helper,
|
|
||||||
resume_unit_helper,
|
|
||||||
remove_old_packages,
|
|
||||||
is_db_initialised,
|
|
||||||
)
|
)
|
||||||
from neutron_api_context import (
|
from neutron_api_context import (
|
||||||
|
EtcdContext,
|
||||||
|
IdentityServiceContext,
|
||||||
|
NeutronApiSDNContext,
|
||||||
|
NeutronCCContext,
|
||||||
get_dns_domain,
|
get_dns_domain,
|
||||||
get_dvr,
|
get_dvr,
|
||||||
get_l3ha,
|
|
||||||
get_l2population,
|
get_l2population,
|
||||||
|
get_l3ha,
|
||||||
get_overlay_network_type,
|
get_overlay_network_type,
|
||||||
IdentityServiceContext,
|
|
||||||
is_qos_requested_and_valid,
|
|
||||||
is_vlan_trunking_requested_and_valid,
|
|
||||||
is_nfg_logging_enabled,
|
is_nfg_logging_enabled,
|
||||||
is_nsg_logging_enabled,
|
is_nsg_logging_enabled,
|
||||||
EtcdContext,
|
is_qos_requested_and_valid,
|
||||||
|
is_vlan_trunking_requested_and_valid,
|
||||||
)
|
)
|
||||||
|
|
||||||
from charmhelpers.contrib.hahelpers.cluster import (
|
from charmhelpers.contrib.hahelpers.cluster import (
|
||||||
|
@ -320,6 +323,8 @@ def config_changed():
|
||||||
identity_joined(rid=r_id)
|
identity_joined(rid=r_id)
|
||||||
for r_id in relation_ids('ha'):
|
for r_id in relation_ids('ha'):
|
||||||
ha_joined(relation_id=r_id)
|
ha_joined(relation_id=r_id)
|
||||||
|
for r_id in relation_ids('neutron-plugin-api-subordinate'):
|
||||||
|
neutron_plugin_api_subordinate_relation_joined(relid=r_id)
|
||||||
[cluster_joined(rid) for rid in relation_ids('cluster')]
|
[cluster_joined(rid) for rid in relation_ids('cluster')]
|
||||||
|
|
||||||
|
|
||||||
|
@ -608,17 +613,20 @@ def neutron_plugin_api_subordinate_relation_joined(relid=None):
|
||||||
relation_data = {'neutron-api-ready': 'no'}
|
relation_data = {'neutron-api-ready': 'no'}
|
||||||
if is_api_ready(CONFIGS):
|
if is_api_ready(CONFIGS):
|
||||||
relation_data['neutron-api-ready'] = "yes"
|
relation_data['neutron-api-ready'] = "yes"
|
||||||
|
if not manage_plugin():
|
||||||
|
neutron_cc_ctxt = NeutronCCContext()()
|
||||||
|
plugin_instance = NeutronApiSDNContext()
|
||||||
|
neutron_config_data = {
|
||||||
|
k: v for k, v in neutron_cc_ctxt.items()
|
||||||
|
if plugin_instance.is_allowed(k)}
|
||||||
|
if neutron_config_data:
|
||||||
|
relation_data['neutron_config_data'] = json.dumps(
|
||||||
|
neutron_config_data)
|
||||||
relation_set(relation_id=relid, **relation_data)
|
relation_set(relation_id=relid, **relation_data)
|
||||||
|
|
||||||
# there is no race condition with the neutron service restart
|
# there is no race condition with the neutron service restart
|
||||||
# as juju propagates the changes done in relation_set only after
|
# as juju propagates the changes done in relation_set only after
|
||||||
# the hook exists
|
# the hook exists
|
||||||
CONFIGS.write(API_PASTE_INI)
|
|
||||||
|
|
||||||
|
|
||||||
@hooks.hook('neutron-plugin-api-subordinate-relation-changed')
|
|
||||||
@restart_on_change(restart_map(), stopstart=True)
|
|
||||||
def neutron_plugin_api_relation_changed():
|
|
||||||
CONFIGS.write_all()
|
CONFIGS.write_all()
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -1196,6 +1196,11 @@ class NeutronApiSDNContextTest(CharmTestCase):
|
||||||
{'sections': {}},
|
{'sections': {}},
|
||||||
)
|
)
|
||||||
|
|
||||||
|
def test_is_allowed(self):
|
||||||
|
napisdn_instance = context.NeutronApiSDNContext()
|
||||||
|
self.assertTrue(napisdn_instance.is_allowed('core_plugin'))
|
||||||
|
self.assertFalse(napisdn_instance.is_allowed('non_existent_key'))
|
||||||
|
|
||||||
|
|
||||||
class NeutronApiSDNConfigFileContextTest(CharmTestCase):
|
class NeutronApiSDNConfigFileContextTest(CharmTestCase):
|
||||||
|
|
||||||
|
|
|
@ -12,6 +12,7 @@
|
||||||
# See the License for the specific language governing permissions and
|
# See the License for the specific language governing permissions and
|
||||||
# limitations under the License.
|
# limitations under the License.
|
||||||
|
|
||||||
|
import json
|
||||||
import sys
|
import sys
|
||||||
|
|
||||||
from mock import MagicMock, patch, call
|
from mock import MagicMock, patch, call
|
||||||
|
@ -198,6 +199,8 @@ class NeutronAPIHooksTests(CharmTestCase):
|
||||||
_id_rel_joined = self.patch('identity_joined')
|
_id_rel_joined = self.patch('identity_joined')
|
||||||
_id_cluster_joined = self.patch('cluster_joined')
|
_id_cluster_joined = self.patch('cluster_joined')
|
||||||
_id_ha_joined = self.patch('ha_joined')
|
_id_ha_joined = self.patch('ha_joined')
|
||||||
|
_n_plugin_api_sub_rel_joined = self.patch(
|
||||||
|
'neutron_plugin_api_subordinate_relation_joined')
|
||||||
self._call_hook('config-changed')
|
self._call_hook('config-changed')
|
||||||
self.assertTrue(_n_api_rel_joined.called)
|
self.assertTrue(_n_api_rel_joined.called)
|
||||||
self.assertTrue(_n_plugin_api_rel_joined.called)
|
self.assertTrue(_n_plugin_api_rel_joined.called)
|
||||||
|
@ -208,6 +211,7 @@ class NeutronAPIHooksTests(CharmTestCase):
|
||||||
self.assertTrue(self.CONFIGS.write_all.called)
|
self.assertTrue(self.CONFIGS.write_all.called)
|
||||||
self.assertTrue(self.do_openstack_upgrade.called)
|
self.assertTrue(self.do_openstack_upgrade.called)
|
||||||
self.assertTrue(self.apt_install.called)
|
self.assertTrue(self.apt_install.called)
|
||||||
|
_n_plugin_api_sub_rel_joined.assert_called()
|
||||||
|
|
||||||
def test_config_changed_nodvr_disprouters(self):
|
def test_config_changed_nodvr_disprouters(self):
|
||||||
self.neutron_ready.return_value = True
|
self.neutron_ready.return_value = True
|
||||||
|
@ -934,3 +938,27 @@ class NeutronAPIHooksTests(CharmTestCase):
|
||||||
def test_infoblox_peer_departed(self):
|
def test_infoblox_peer_departed(self):
|
||||||
self._call_hook('infoblox-neutron-relation-departed')
|
self._call_hook('infoblox-neutron-relation-departed')
|
||||||
self.assertTrue(self.CONFIGS.write.called_with(NEUTRON_CONF))
|
self.assertTrue(self.CONFIGS.write.called_with(NEUTRON_CONF))
|
||||||
|
|
||||||
|
@patch.object(hooks, 'NeutronApiSDNContext')
|
||||||
|
@patch.object(hooks, 'NeutronCCContext')
|
||||||
|
@patch.object(hooks, 'manage_plugin')
|
||||||
|
def test_neutron_plugin_api_subordinate_relation(
|
||||||
|
self, _manage_plugin, _NeutronCCContext, _NeutronApiSDNContext):
|
||||||
|
_manage_plugin.return_value = True
|
||||||
|
self._call_hook('neutron-plugin-api-subordinate-relation-joined')
|
||||||
|
self.relation_set.assert_called_once_with(
|
||||||
|
**{'neutron-api-ready': 'no'}, relation_id=None)
|
||||||
|
self.CONFIGS.write_all.assert_called_once_with()
|
||||||
|
self.relation_set.reset_mock()
|
||||||
|
_manage_plugin.return_value = False
|
||||||
|
ncc_instance = _NeutronCCContext.return_value
|
||||||
|
ncc_instance.return_value = {'core_plugin': 'aPlugin'}
|
||||||
|
napisdn_instance = _NeutronApiSDNContext.return_value
|
||||||
|
napisdn_instance.is_allowed.return_value = True
|
||||||
|
self._call_hook('neutron-plugin-api-subordinate-relation-changed')
|
||||||
|
hooks.neutron_plugin_api_subordinate_relation_joined()
|
||||||
|
self.relation_set.assert_called_with(
|
||||||
|
**{'neutron-api-ready': 'no',
|
||||||
|
'neutron_config_data': json.dumps({'core_plugin': 'aPlugin'})},
|
||||||
|
relation_id=None)
|
||||||
|
self.CONFIGS.write_all.assert_called_with()
|
||||||
|
|
Loading…
Reference in New Issue