def test_config_changed_with_openstack_upgrade_action(self): self.openstack_upgrade_available.return_value = True self.test_config.set('action-managed-upgrade', True) self.migration_enabled.return_value = False hooks.config_changed() self.assertFalse(self.do_openstack_upgrade.called)
def test_config_changed_no_upgrade_no_migration(self, compute_joined): self.git_install_requested.return_value = False self.openstack_upgrade_available.return_value = False self.migration_enabled.return_value = False hooks.config_changed() self.assertFalse(self.do_openstack_upgrade.called) self.assertFalse(compute_joined.called)
def test_config_changed_with_openstack_upgrade_action(self, git_requested): git_requested.return_value = False self.openstack_upgrade_available.return_value = True self.test_config.set('action-managed-upgrade', True) hooks.config_changed() self.assertFalse(self.do_openstack_upgrade.called)
def test_config_changed_with_sysctl(self, compute_joined): self.migration_enabled.return_value = False self.service_running.return_value = True self.test_config.set('sysctl', '{foo : bar}') hooks.config_changed() self.create_sysctl.assert_called_with( '{foo : bar}', '/etc/sysctl.d/50-nova-compute.conf', ignore=True)
def test_config_changed_with_sysctl_swappy_default(self, compute_joined): self.git_install_requested.return_value = False self.test_config.set('sysctl', '{ kernel.max_pid : "1337" }') hooks.config_changed() self.create_sysctl.assert_called_with( "{kernel.max_pid: '1337', vm.swappiness: 1}\n", '/etc/sysctl.d/50-nova-compute.conf')
def test_config_changed_nrpe(self, compute_joined): self.git_install_requested.return_value = False self.openstack_upgrade_available.return_value = False self.migration_enabled.return_value = False self.is_relation_made.return_value = True hooks.config_changed() self.assertTrue(self.update_nrpe_config.called)
def test_config_changed_use_multipath_false(self, compute_joined): self.service_running.return_value = True self.test_config.set('use-multipath', False) hooks.config_changed() self.assertEqual(self.filter_installed_packages.call_count, 0) self.service_start.assert_not_called()
def test_config_changed_invalid_migration(self, compute_joined): self.migration_enabled.return_value = True self.test_config.set('migration-auth-type', 'none') with self.assertRaises(Exception) as context: hooks.config_changed() self.assertEqual(context.exception.message, 'Invalid migration-auth-type')
def test_config_changed_use_multipath_true(self, compute_joined): self.test_config.set('use-multipath', True) self.filter_installed_packages.return_value = [] hooks.config_changed() self.assertEqual(self.filter_installed_packages.call_count, 1) self.apt_install.assert_called_with(hooks.MULTIPATH_PACKAGES, fatal=True)
def test_config_changed_with_sysctl_in_container(self, compute_joined): self.migration_enabled.return_value = False self.is_container.return_value = True self.service_running.return_value = True self.test_config.set('sysctl', '{foo : bar}') hooks.config_changed() self.create_sysctl.assert_not_called() self.service_start.assert_not_called()
def test_config_changed_nrpe(self, compute_joined): self.openstack_upgrade_available.return_value = False self.migration_enabled.return_value = False self.is_relation_made.return_value = True self.service_running.return_value = True hooks.config_changed() self.assertTrue(self.update_nrpe_config.called) self.service_start.assert_not_called()
def test_config_changed_no_upgrade_no_migration(self, compute_joined): self.openstack_upgrade_available.return_value = False self.migration_enabled.return_value = False self.service_running.return_value = True hooks.config_changed() self.assertFalse(self.do_openstack_upgrade.called) self.assertFalse(compute_joined.called) self.service_start.assert_not_called()
def test_config_changed_with_sysctl(self, compute_joined): self.migration_enabled.return_value = False self.test_config.set( 'sysctl', '{ kernel.max_pid : "1337", vm.swappiness : 10 }') hooks.config_changed() self.create_sysctl.assert_called_with( "{kernel.max_pid: '1337', vm.swappiness: 10}\n", '/etc/sysctl.d/50-nova-compute.conf')
def test_config_changed_with_sysctl_swappy_default(self, compute_joined): self.git_install_requested.return_value = False self.test_config.set( 'sysctl', '{ kernel.max_pid : "1337" }') hooks.config_changed() self.create_sysctl.assert_called_with( "{kernel.max_pid: '1337', vm.swappiness: 1}\n", '/etc/sysctl.d/50-nova-compute.conf')
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)): config_changed()
def test_config_changed_with_upgrade(self, neutron_plugin_joined): self.git_install_requested.return_value = False self.openstack_upgrade_available.return_value = True def rel_ids(x): return {'neutron-plugin': ['rid1']}.get(x, []) self.relation_ids.side_effect = rel_ids hooks.config_changed() self.assertTrue(self.do_openstack_upgrade.called) neutron_plugin_joined.assert_called_with('rid1', remote_restart=True)
def test_config_changed_without_resize(self, compute_joined, neutron_plugin_joined): self.test_config.set('enable-resize', False) self.migration_enabled.return_value = False self.relation_ids.return_value = ['cloud-compute:0', 'cloud-compute:1'] hooks.config_changed() ex = [ call('cloud-compute:0'), call('cloud-compute:1'), ] self.assertEqual(ex, compute_joined.call_args_list) self.disable_shell.assert_called_with(user='******')
def test_config_changed_with_migration(self, compute_joined, neutron_plugin_joined): self.migration_enabled.return_value = True self.test_config.set('migration-auth-type', 'ssh') self.relation_ids.return_value = ['cloud-compute:0', 'cloud-compute:1'] hooks.config_changed() ex = [ call('cloud-compute:0'), call('cloud-compute:1'), ] self.assertEqual(ex, compute_joined.call_args_list) self.assertTrue(self.initialize_ssh_keys.called)
def test_config_changed_instances_path(self, compute_joined, exists): self.service_running.return_value = True self.test_config.set('instances-path', '/srv/instances') exists.return_value = False hooks.config_changed() exists.assert_called_once_with('/srv/instances') self.mkdir.assert_called_once_with(path='/srv/instances', owner='nova', group='nova', perms=0o775) self.service_start.assert_not_called() self.fix_path_ownership.assert_called_once_with('/srv/instances', user='******')
def test_config_changed_with_migration(self, compute_joined): self.migration_enabled.return_value = True self.test_config.set('migration-auth-type', 'ssh') self.relation_ids.return_value = [ 'cloud-compute:0', 'cloud-compute:1' ] hooks.config_changed() ex = [ call('cloud-compute:0'), call('cloud-compute:1'), ] self.assertEquals(ex, compute_joined.call_args_list)
def test_config_changed_with_upgrade(self, neutron_plugin_joined, ceph_changed): self.git_install_requested.return_value = False self.openstack_upgrade_available.return_value = True def rel_ids(x): return {'neutron-plugin': ['rid1'], 'ceph': ['ceph:0']}.get(x, []) self.relation_ids.side_effect = rel_ids self.related_units.return_value = ['ceph/0'] hooks.config_changed() self.assertTrue(self.do_openstack_upgrade.called) neutron_plugin_joined.assert_called_with('rid1', remote_restart=True) ceph_changed.assert_called_with(rid='ceph:0', unit='ceph/0')
def test_config_changed_without_resize(self, compute_joined, neutron_plugin_joined): self.git_install_requested.return_value = False self.test_config.set('enable-resize', False) _zmq_joined = self.patch('zeromq_configuration_relation_joined') self.relation_ids.return_value = ['cloud-compute:0', 'cloud-compute:1'] hooks.config_changed() ex = [ call('cloud-compute:0'), call('cloud-compute:1'), ] self.assertEqual(ex, compute_joined.call_args_list) self.disable_shell.assert_called_with(user='******') self.assertTrue(_zmq_joined.called)
def test_config_changed_with_upgrade(self, neutron_plugin_joined, ceph_changed): self.openstack_upgrade_available.return_value = True def rel_ids(x): return {'neutron-plugin': ['rid1'], 'ceph': ['ceph:0']}.get(x, []) self.relation_ids.side_effect = rel_ids self.related_units.return_value = ['ceph/0'] self.migration_enabled.return_value = False hooks.config_changed() self.assertTrue(self.do_openstack_upgrade.called) neutron_plugin_joined.assert_called_with('rid1', remote_restart=True) ceph_changed.assert_called_with(rid='ceph:0', unit='ceph/0') self.configure_local_ephemeral_storage.assert_called_once_with()
def test_config_changed_with_resize(self, compute_joined, neutron_plugin_joined): self.test_config.set('enable-resize', True) self.migration_enabled.return_value = False self.relation_ids.return_value = ['cloud-compute:0', 'cloud-compute:1'] self.service_running.return_value = True hooks.config_changed() ex = [ call('cloud-compute:0'), call('cloud-compute:1'), ] self.assertEqual(ex, compute_joined.call_args_list) self.initialize_ssh_keys.assert_called_with(user='******') self.enable_shell.assert_called_with(user='******') self.service_start.assert_not_called()
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_without_resize(self, compute_joined): self.git_install_requested.return_value = False self.test_config.set('enable-resize', False) _zmq_joined = self.patch('zeromq_configuration_relation_joined') self.relation_ids.return_value = [ 'cloud-compute:0', 'cloud-compute:1' ] hooks.config_changed() ex = [ call('cloud-compute:0'), call('cloud-compute:1'), ] self.assertEquals(ex, compute_joined.call_args_list) self.disable_shell.assert_called_with(user='******') self.assertTrue(_zmq_joined.called)
def test_config_changed_with_migration(self, compute_joined): self.git_install_requested.return_value = False self.migration_enabled.return_value = True _zmq_joined = self.patch('zeromq_configuration_relation_joined') self.test_config.set('migration-auth-type', 'ssh') self.relation_ids.return_value = [ 'cloud-compute:0', 'cloud-compute:1' ] hooks.config_changed() ex = [ call('cloud-compute:0'), call('cloud-compute:1'), ] self.assertEquals(ex, compute_joined.call_args_list) self.assertTrue(self.initialize_ssh_keys.called) self.assertTrue(_zmq_joined.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)): # we should restart the container scoped (subordinate) plugins after a # managed openstack upgrade see: BUG#1835557 for rid in relation_ids('neutron-plugin'): neutron_plugin_joined(rid, remote_restart=True) for rid in relation_ids('nova-ceilometer'): nova_ceilometer_joined(rid, remote_restart=True) # NOTE(ajkavanagh) - if unit is paused (usually true for managed # upgrade) then the config_changed() function is a no-op config_changed()
def test_config_changed_git(self, config_val_changed): 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_git(self, config_val_changed): 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_iscsid_not_running(self, compute_joined): self.service_running.return_value = False hooks.config_changed() self.service_start.assert_called_once_with('iscsid')
def test_config_changed_with_sysctl(self, compute_joined): self.git_install_requested.return_value = False self.test_config.set('sysctl', '{ kernel.max_pid : "1337" }') hooks.config_changed() self.assertTrue(self.create_sysctl.called)
def test_config_changed_with_upgrade(self): self.git_install_requested.return_value = False self.openstack_upgrade_available.return_value = True hooks.config_changed() self.assertTrue(self.do_openstack_upgrade.called)
def test_config_changed_use_multipath_false(self, compute_joined): self.test_config.set('use-multipath', False) hooks.config_changed() self.assertEqual(self.filter_installed_packages.call_count, 0)