def test_config_changed_single_consoleauth(self, mock_config, mock_configure_https, mock_filter_packages): self.config_value_changed.return_value = False self.git_install_requested.return_value = False config.return_value = 'novnc' rids = {'ha': ['ha:1']} def f(r): return rids.get(r, []) self.relation_ids.side_effect = f hooks.config_changed() args = { 'delete_resources': [], 'init_services': {'res_nova_consoleauth': 'nova-consoleauth'}, 'resources': {'res_nova_consoleauth': 'ocf:openstack:nova-consoleauth'}, 'resource_params': { 'res_nova_consoleauth': 'op monitor interval="5s"'}, 'colocations': { 'vip_consoleauth': 'inf: res_nova_consoleauth grp_nova_vips' } } self.relation_set.assert_has_calls([ call(v, **args) for v in rids['ha'] ]) mock_filter_packages.assert_called_with([])
def test_config_changed_with_upgrade( self, conf_https, neutron_api_joined, identity_joined, cluster_joined, mock_filter_packages, db_joined, utils_config, mock_relids, mock_unit_get, mock_service_resume, mock_determine_packages, mock_quantum_joined, mock_is_db_initialised): mock_determine_packages.return_value = [] mock_is_db_initialised.return_value = False self.git_install_requested.return_value = False self.openstack_upgrade_available.return_value = True self.relation_ids.return_value = ['generic_rid'] _zmq_joined = self.patch('zeromq_configuration_relation_joined') utils_config.side_effect = self.test_config.get self.test_config.set('console-access-protocol', 'dummy') mock_relids.return_value = [] mock_unit_get.return_value = '127.0.0.1' self.os_release.return_value = 'diablo' hooks.config_changed() self.assertTrue(self.do_openstack_upgrade.called) self.assertTrue(neutron_api_joined.called) self.assertTrue(identity_joined.called) self.assertTrue(_zmq_joined.called) self.assertTrue(cluster_joined.called) self.assertTrue(db_joined.called) self.assertTrue(self.save_script_rc.called) mock_filter_packages.assert_called_with([]) self.assertTrue(mock_quantum_joined.called)
def test_config_changed_git(self, configure_https, mock_service_resume, mock_is_db_initialised): self.git_install_requested.return_value = True repo = 'cloud:trusty-juno' openstack_origin_git = { 'repositories': [{ 'name': 'requirements', 'repository': 'git://git.openstack.org/openstack/requirements', 'branch': 'stable/juno' }, { 'name': 'nova', 'repository': 'git://git.openstack.org/openstack/nova', 'branch': 'stable/juno' }], 'directory': '/mnt/openstack-git', } projects_yaml = yaml.dump(openstack_origin_git) self.test_config.set('openstack-origin', repo) self.test_config.set('openstack-origin-git', projects_yaml) mock_is_db_initialised.return_value = False self.os_release.return_value = 'diablo' hooks.config_changed() self.git_install.assert_called_with(projects_yaml) self.assertFalse(self.do_openstack_upgrade.called)
def test_config_changed_single_consoleauth(self, mock_config, mock_configure_https, mock_filter_packages, mock_service_pause, mock_determine_packages): mock_determine_packages.return_value = [] self.config_value_changed.return_value = False self.git_install_requested.return_value = False config.return_value = 'novnc' rids = {'ha': ['ha:1']} def f(r): return rids.get(r, []) self.relation_ids.side_effect = f hooks.config_changed() args = { 'delete_resources': [], 'init_services': { 'res_nova_consoleauth': 'nova-consoleauth' }, 'resources': { 'res_nova_consoleauth': 'ocf:openstack:nova-consoleauth' }, 'resource_params': { 'res_nova_consoleauth': 'op monitor interval="5s"' }, 'colocations': { 'vip_consoleauth': 'inf: res_nova_consoleauth grp_nova_vips' } } self.relation_set.assert_has_calls( [call(v, **args) for v in rids['ha']]) mock_filter_packages.assert_called_with([])
def test_config_changed_region_change(self, mock_compute_changed, mock_config_https, mock_filter_packages): self.git_install_requested.return_value = False self.openstack_upgrade_available.return_value = False self.config_value_changed.return_value = True self.related_units.return_value = ['unit/0'] self.relation_ids.side_effect = \ lambda x: ['generic_rid'] if x == 'cloud-compute' else [] hooks.config_changed() mock_compute_changed.assert_has_calls([call('generic_rid', 'unit/0')])
def test_config_changed_no_upgrade(self, conf_https, mock_filter_packages, utils_config, mock_service_resume, mock_determine_packages): mock_determine_packages.return_value = [] utils_config.side_effect = self.test_config.get self.test_config.set('console-access-protocol', 'dummy') self.git_install_requested.return_value = False self.openstack_upgrade_available.return_value = False hooks.config_changed() self.assertTrue(self.save_script_rc.called) mock_filter_packages.assert_called_with([])
def openstack_upgrade(): """Upgrade packages to config-set Openstack version. If the charm was installed from source we cannot upgrade it. For backwards compatibility a config flag must be set for this code to run, otherwise a full service level upgrade will fire on config-changed.""" if (do_action_openstack_upgrade('nova-common', do_openstack_upgrade, CONFIGS)): [neutron_api_relation_joined(rid=rid, remote_restart=True) for rid in relation_ids('neutron-api')] config_changed()
def test_config_changed_with_upgrade(self, conf_https, neutron_api_joined, identity_joined, cluster_joined, mock_filter_packages): self.git_install_requested.return_value = False self.openstack_upgrade_available.return_value = True self.relation_ids.return_value = ['generic_rid'] _zmq_joined = self.patch('zeromq_configuration_relation_joined') hooks.config_changed() self.assertTrue(self.do_openstack_upgrade.called) self.assertTrue(neutron_api_joined.called) self.assertTrue(identity_joined.called) self.assertTrue(_zmq_joined.called) self.assertTrue(cluster_joined.called) self.assertTrue(self.save_script_rc.called) mock_filter_packages.assert_called_with([])
def openstack_upgrade(): """Upgrade packages to config-set Openstack version. If the charm was installed from source we cannot upgrade it. For backwards compatibility a config flag must be set for this code to run, otherwise a full service level upgrade will fire on config-changed.""" if (do_action_openstack_upgrade('nova-common', do_openstack_upgrade, CONFIGS)): [ neutron_api_relation_joined(rid=rid, remote_restart=True) for rid in relation_ids('neutron-api') ] config_changed()
def git_reinstall(): """Reinstall from source and restart services. If the openstack-origin-git config option was used to install openstack from source git repositories, then this action can be used to reinstall from updated git repositories, followed by a restart of services.""" if not git_install_requested(): action_fail('openstack-origin-git is not configured') return try: git_install(config('openstack-origin-git')) config_changed() except: action_set({'traceback': traceback.format_exc()}) action_fail('git-reinstall resulted in an unexpected error')
def test_config_changed_single_consoleauth(self, mock_config, mock_configure_https, mock_filter_packages, mock_service_pause, mock_determine_packages, mock_is_db_initialised, mock_update_aws_compat_svcs): mock_determine_packages.return_value = [] mock_is_db_initialised.return_value = False self.config_value_changed.return_value = False self.os_release.return_value = 'diablo' def cfg(k, v): if k == "single-nova-authconsole": return True return 'novnc' config.side_effect = cfg rids = {'ha': ['ha:1']} def f(r): return rids.get(r, []) self.relation_ids.side_effect = f hooks.config_changed() args = { 'delete_resources': [], 'init_services': {'res_nova_consoleauth': 'nova-consoleauth'}, 'resources': {'res_nova_consoleauth': 'ocf:openstack:nova-consoleauth'}, 'resource_params': { 'res_nova_consoleauth': 'op monitor interval="5s"'}, 'colocations': { 'vip_consoleauth': 'inf: res_nova_consoleauth grp_nova_vips' } } self.relation_set.assert_has_calls([ call(v, **args) for v in rids['ha'] ]) mock_service_pause.assert_has_calls([ call('nova-consoleauth')] ) mock_filter_packages.assert_called_with([]) self.assertTrue(mock_update_aws_compat_svcs.called)
def test_config_changed_no_upgrade(self, conf_https, mock_filter_packages, utils_config, mock_service_resume, mock_determine_packages, mock_is_db_initialised, mock_update_nova_consoleauth_config, mock_update_aws_compat_services): mock_determine_packages.return_value = [] utils_config.side_effect = self.test_config.get self.test_config.set('console-access-protocol', 'dummy') self.openstack_upgrade_available.return_value = False mock_is_db_initialised.return_value = False self.os_release.return_value = 'diablo' hooks.config_changed() self.assertTrue(self.save_script_rc.called) mock_filter_packages.assert_called_with([]) self.assertTrue(mock_update_nova_consoleauth_config.called) self.assertTrue(mock_update_aws_compat_services.called)
def openstack_upgrade(): """Upgrade packages to config-set Openstack version. If the charm was installed from source we cannot upgrade it. For backwards compatibility a config flag must be set for this code to run, otherwise a full service level upgrade will fire on config-changed.""" if (do_action_openstack_upgrade('nova-common', do_openstack_upgrade, CONFIGS)): [ neutron_api_relation_joined(rid=rid, remote_restart=True) for rid in relation_ids('neutron-api') ] # NOTE(thedac): Force re-fire of shared-db joined hook # to ensure that nova_api database is setup if required. [db_joined(relation_id=r_id) for r_id in relation_ids('shared-db')] config_changed()
def test_config_changed_region_change(self, mock_compute_changed, mock_config_https, mock_filter_packages, mock_service_resume, mock_is_db_initialised, mock_update_nova_consoleauth_config, mock_update_aws_compat_services): self.openstack_upgrade_available.return_value = False self.config_value_changed.return_value = True self.related_units.return_value = ['unit/0'] self.relation_ids.side_effect = \ lambda x: ['generic_rid'] if x == 'cloud-compute' else [] mock_is_db_initialised.return_value = False self.os_release.return_value = 'diablo' hooks.config_changed() mock_compute_changed.assert_has_calls([call('generic_rid', 'unit/0')]) self.assertTrue(mock_update_nova_consoleauth_config.called) self.assertTrue(mock_update_aws_compat_services.called)
def test_config_changed_git(self, configure_https): self.git_install_requested.return_value = True repo = 'cloud:trusty-juno' openstack_origin_git = { 'repositories': [ {'name': 'requirements', 'repository': 'git://git.openstack.org/openstack/requirements', 'branch': 'stable/juno'}, {'name': 'nova', 'repository': 'git://git.openstack.org/openstack/nova', 'branch': 'stable/juno'} ], 'directory': '/mnt/openstack-git', } projects_yaml = yaml.dump(openstack_origin_git) self.test_config.set('openstack-origin', repo) self.test_config.set('openstack-origin-git', projects_yaml) hooks.config_changed() self.git_install.assert_called_with(projects_yaml) self.assertFalse(self.do_openstack_upgrade.called)
def test_config_changed_no_upgrade(self, conf_https, mock_filter_packages): self.git_install_requested.return_value = False self.openstack_upgrade_available.return_value = False hooks.config_changed() self.assertTrue(self.save_script_rc.called) mock_filter_packages.assert_called_with([])
def test_config_changed_with_upgrade(self, conf_https): self.openstack_upgrade_available.return_value = True hooks.config_changed() self.assertTrue(self.do_openstack_upgrade.called) self.assertTrue(self.save_script_rc.called)