def test_config_changed_with_openstack_upgrade(self, configure_https,
                                                   identity_changed,
                                                   configs,
                                                   cluster_joined,
                                                   admin_relation_changed,
                                                   mock_log,
                                                   mock_is_db_initialised,
                                                   mock_run_in_apache,
                                                   update,
                                                   mock_update_domains):
        def fake_relation_ids(relation):
            rids = {'identity-service': ['identity-service:0']}
            return rids.get(relation, [])

        self.os_release.return_value = 'mitaka'
        self.enable_memcache.return_value = False
        self.relation_ids.side_effect = fake_relation_ids

        mock_run_in_apache.return_value = False
        self.is_db_ready.return_value = True
        mock_is_db_initialised.return_value = True
        self.openstack_upgrade_available.return_value = True
        self.related_units.return_value = ['unit/0']

        hooks.config_changed()

        self.assertTrue(self.do_openstack_upgrade_reexec.called)

        self.save_script_rc.assert_called_with()
        configure_https.assert_called_with()
        self.assertTrue(configs.write_all.called)

        self.assertTrue(update.called)
        self.assertTrue(mock_update_domains.called)
    def test_config_changed_no_upgrade_not_leader(self, configure_https,
                                                  identity_changed,
                                                  configs, get_homedir,
                                                  ensure_user, cluster_joined,
                                                  mock_is_ssl_cert_master,
                                                  mock_peer_units,
                                                  mock_ensure_ssl_dir,
                                                  mock_ensure_permissions,
                                                  mock_ensure_pki_cert_paths,
                                                  mock_ensure_pki_permissions,
                                                  mock_update_all_id_rel_units,
                                                  ensure_ssl_dirs,
                                                  mock_ensure_ssl_cert_master,
                                                  mock_log, git_requested):
        git_requested.return_value = False
        mock_is_ssl_cert_master.return_value = True
        mock_peer_units.return_value = []
        self.openstack_upgrade_available.return_value = False
        self.is_elected_leader.return_value = False
        mock_ensure_ssl_cert_master.return_value = False

        hooks.config_changed()
        ensure_user.assert_called_with(user=self.ssh_user, group='keystone')
        get_homedir.assert_called_with(self.ssh_user)

        self.save_script_rc.assert_called_with()
        configure_https.assert_called_with()
        self.assertTrue(configs.write_all.called)

        self.assertFalse(self.migrate_database.called)
        self.assertFalse(self.ensure_initial_admin.called)
        self.assertFalse(identity_changed.called)
    def test_config_changed_no_upgrade_not_leader(self, configure_https,
                                                  identity_changed,
                                                  configs,
                                                  mock_cluster_joined,
                                                  mock_log,
                                                  mock_run_in_apache, update,
                                                  mock_update_domains,
                                                  mock_is_db_initialised):

        def fake_relation_ids(relation):
            rids = {}
            return rids.get(relation, [])

        self.enable_memcache.return_value = False
        self.os_release.return_value = 'mitaka'
        self.relation_ids.side_effect = fake_relation_ids

        mock_run_in_apache.return_value = False
        self.openstack_upgrade_available.return_value = False
        mock_is_db_initialised.return_value = True

        hooks.config_changed()

        self.assertFalse(mock_cluster_joined.called)
        self.save_script_rc.assert_called_with()
        configure_https.assert_called_with()
        self.assertTrue(configs.write_all.called)

        self.assertFalse(self.migrate_database.called)
        self.assertTrue(update.called)
        self.assertTrue(mock_update_domains.called)
    def test_config_changed_no_upgrade_not_leader(self, configure_https,
                                                  identity_changed,
                                                  configs,
                                                  mock_cluster_joined,
                                                  mock_log,
                                                  mock_run_in_apache, update,
                                                  mock_update_domains,
                                                  mock_is_db_initialised):

        def fake_relation_ids(relation):
            rids = {}
            return rids.get(relation, [])

        self.enable_memcache.return_value = False
        self.os_release.return_value = 'mitaka'
        self.relation_ids.side_effect = fake_relation_ids

        mock_run_in_apache.return_value = False
        self.openstack_upgrade_available.return_value = False
        mock_is_db_initialised.return_value = True

        hooks.config_changed()

        self.assertFalse(mock_cluster_joined.called)
        self.save_script_rc.assert_called_with()
        configure_https.assert_called_with()
        self.assertTrue(configs.write_all.called)

        self.assertFalse(self.migrate_database.called)
        self.assertTrue(update.called)
        self.assertTrue(mock_update_domains.called)
    def test_config_changed_no_upgrade_leader(
            self, configure_https, identity_changed, configs, get_homedir,
            ensure_user, cluster_joined, admin_relation_changed,
            mock_peer_units, mock_send_ssl_sync_request,
            mock_is_ssl_cert_master, mock_ensure_ssl_dir,
            mock_ensure_pki_cert_paths, mock_ensure_permissions,
            mock_ensure_pki_dir_permissions, mock_ensure_ssl_dirs,
            mock_ensure_ssl_cert_master, mock_log, git_requested,
            mock_is_db_initialised):
        git_requested.return_value = False
        mock_is_ssl_cert_master.return_value = True
        mock_is_db_initialised.return_value = True
        self.is_db_ready.return_value = True
        self.openstack_upgrade_available.return_value = False
        self.is_elected_leader.return_value = True
        # avoid having to mock syncer
        mock_ensure_ssl_cert_master.return_value = False
        mock_peer_units.return_value = []
        self.relation_ids.return_value = ['identity-service:0']
        self.related_units.return_value = ['unit/0']

        hooks.config_changed()
        ensure_user.assert_called_with(user=self.ssh_user, group='keystone')
        get_homedir.assert_called_with(self.ssh_user)

        self.save_script_rc.assert_called_with()
        configure_https.assert_called_with()
        self.assertTrue(configs.write_all.called)

        self.assertTrue(self.ensure_initial_admin.called)
        self.log.assert_called_with(
            'Firing identity_changed hook for all related services.')
        identity_changed.assert_called_with(relation_id='identity-service:0',
                                            remote_unit='unit/0')
        admin_relation_changed.assert_called_with('identity-service:0')
    def test_config_changed_no_upgrade_not_leader(self, configure_https,
                                                  identity_changed,
                                                  configs, get_homedir,
                                                  ensure_user, cluster_joined,
                                                  mock_is_ssl_cert_master,
                                                  mock_peer_units,
                                                  mock_is_pki_enabled,
                                                  mock_ensure_ssl_dir,
                                                  mock_ensure_permissions,
                                                  mock_ensure_pki_permissions,
                                                  mock_update_all_id_rel_units,
                                                  ensure_ssl_dirs,
                                                  mock_ensure_ssl_cert_master,
                                                  mock_log, git_requested):
        git_requested.return_value = False
        mock_is_pki_enabled.return_value = True
        mock_is_ssl_cert_master.return_value = True
        mock_peer_units.return_value = []
        self.openstack_upgrade_available.return_value = False
        self.is_elected_leader.return_value = False
        mock_ensure_ssl_cert_master.return_value = False

        hooks.config_changed()
        ensure_user.assert_called_with(user=self.ssh_user, group='keystone')
        get_homedir.assert_called_with(self.ssh_user)

        self.save_script_rc.assert_called_with()
        configure_https.assert_called_with()
        self.assertTrue(configs.write_all.called)

        self.assertFalse(self.migrate_database.called)
        self.assertFalse(self.ensure_initial_admin.called)
        self.assertFalse(identity_changed.called)
    def test_config_changed_with_openstack_upgrade(self, configure_https,
                                                   identity_changed,
                                                   configs,
                                                   cluster_joined,
                                                   admin_relation_changed,
                                                   mock_log,
                                                   mock_is_db_initialised,
                                                   mock_run_in_apache,
                                                   update,
                                                   mock_update_domains):
        def fake_relation_ids(relation):
            rids = {'identity-service': ['identity-service:0']}
            return rids.get(relation, [])

        self.os_release.return_value = 'mitaka'
        self.enable_memcache.return_value = False
        self.relation_ids.side_effect = fake_relation_ids

        mock_run_in_apache.return_value = False
        self.is_db_ready.return_value = True
        mock_is_db_initialised.return_value = True
        self.openstack_upgrade_available.return_value = True
        self.related_units.return_value = ['unit/0']

        hooks.config_changed()

        self.assertTrue(self.do_openstack_upgrade_reexec.called)

        self.save_script_rc.assert_called_with()
        configure_https.assert_called_with()
        self.assertTrue(configs.write_all.called)

        self.assertTrue(update.called)
        self.assertTrue(mock_update_domains.called)
    def test_config_changed_with_openstack_upgrade_action(
            self, config_https, mock_db_init, mock_run_in_apache, os_release):
        os_release.return_value = 'ocata'
        self.enable_memcache.return_value = False
        mock_run_in_apache.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_reexec.called)
Esempio n. 9
0
def openstack_upgrade():
    """Perform action-managed OpenStack upgrade.

    Upgrades packages to the configured openstack-origin version and sets
    the corresponding action status as a result.

    If the charm was installed from source we cannot upgrade it.
    For backwards compatibility a config flag (action-managed-upgrade) must
    be set for this code to run, otherwise a full service level upgrade will
    fire on config-changed."""

    if do_action_openstack_upgrade("keystone", do_openstack_upgrade, CONFIGS):
        config_changed()
    def test_config_changed_with_openstack_upgrade_action(
            self, ensure_ssl_cert, ensure_user, get_home, peer_units, is_ssl,
            config_https, ensure_ssl_dir, config_value_changed, git_requested,
            mock_db_init, mock_initialise_pki):
        ensure_ssl_cert.return_value = False
        peer_units.return_value = []

        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_reexec.called)
Esempio n. 11
0
    def test_config_changed_with_openstack_upgrade_action(
            self, config_https, mock_db_init, mock_run_in_apache, os_release,
            mock_maybe_do_policyd_overrides_on_config_changed):
        self.check_api_application_ready.return_value = (True, 'msg')
        os_release.return_value = 'ocata'
        self.enable_memcache.return_value = False
        mock_run_in_apache.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_reexec.called)

        (mock_maybe_do_policyd_overrides_on_config_changed.
         assert_called_once_with(ANY, "keystone", restart_handler=ANY))
    def test_config_changed_with_openstack_upgrade_action(self,
                                                          config_https,
                                                          mock_db_init,
                                                          mock_run_in_apache,
                                                          os_release,
                                                          is_expected_scale):
        os_release.return_value = 'ocata'
        self.enable_memcache.return_value = False
        mock_run_in_apache.return_value = False
        is_expected_scale.return_value = True

        self.openstack_upgrade_available.return_value = True
        self.test_config.set('action-managed-upgrade', True)

        hooks.config_changed()

        self.assertFalse(self.do_openstack_upgrade_reexec.called)
    def test_config_changed_with_openstack_upgrade(self, configure_https,
                                                   identity_changed,
                                                   configs, get_homedir,
                                                   ensure_user, cluster_joined,
                                                   admin_relation_changed,
                                                   mock_peer_units,
                                                   mock_send_ssl_sync_request,
                                                   mock_is_ssl_cert_master,
                                                   mock_ensure_ssl_dir,
                                                   mock_ensure_permissions,
                                                   mock_ensure_pki_cert_paths,
                                                   mock_ensure_pki_permissions,
                                                   mock_ensure_ssl_dirs,
                                                   mock_ensure_ssl_cert_master,
                                                   mock_log, git_requested,
                                                   mock_is_db_initialised):
        git_requested.return_value = False
        mock_is_ssl_cert_master.return_value = True
        self.is_db_ready.return_value = True
        mock_is_db_initialised.return_value = True
        self.openstack_upgrade_available.return_value = True
        self.is_elected_leader.return_value = True
        # avoid having to mock syncer
        mock_ensure_ssl_cert_master.return_value = False
        mock_peer_units.return_value = []
        self.relation_ids.return_value = ['identity-service:0']
        self.related_units.return_value = ['unit/0']

        hooks.config_changed()
        ensure_user.assert_called_with(user=self.ssh_user, group='keystone')
        get_homedir.assert_called_with(self.ssh_user)

        self.assertTrue(self.do_openstack_upgrade_reexec.called)

        self.save_script_rc.assert_called_with()
        configure_https.assert_called_with()
        self.assertTrue(configs.write_all.called)

        self.assertTrue(self.ensure_initial_admin.called)
        self.log.assert_called_with(
            'Firing identity_changed hook for all related services.')
        identity_changed.assert_called_with(
            relation_id='identity-service:0',
            remote_unit='unit/0')
        admin_relation_changed.assert_called_with('identity-service:0')
Esempio n. 14
0
    def test_config_changed_with_openstack_upgrade_action(
            self, config_https, mock_db_init, mock_run_in_apache, os_release,
            is_expected_scale,
            mock_maybe_do_policyd_overrides_on_config_changed):
        os_release.return_value = 'ocata'
        self.enable_memcache.return_value = False
        mock_run_in_apache.return_value = False
        is_expected_scale.return_value = True

        self.openstack_upgrade_available.return_value = True
        self.test_config.set('action-managed-upgrade', True)

        hooks.config_changed()

        self.assertFalse(self.do_openstack_upgrade_reexec.called)

        (mock_maybe_do_policyd_overrides_on_config_changed.
         assert_called_once_with(ANY, "keystone"))
Esempio n. 15
0
    def test_config_changed_git_updated(self, configure_https,
                                        identity_changed,
                                        configs, get_homedir, ensure_user,
                                        cluster_joined, admin_relation_changed,
                                        mock_peer_units,
                                        mock_is_db_ready,
                                        mock_is_db_initialised,
                                        mock_send_ssl_sync_request,
                                        mock_ensure_ssl_dir,
                                        mock_ensure_ssl_cert_master,
                                        mock_log, config_val_changed,
                                        git_requested,
                                        mock_initialise_pki,
                                        mock_run_in_apache,
                                        update):
        mock_run_in_apache.return_value = False
        git_requested.return_value = True
        mock_ensure_ssl_cert_master.return_value = False
        self.openstack_upgrade_available.return_value = False
        self.is_elected_leader.return_value = True
        mock_peer_units.return_value = []
        self.relation_ids.return_value = ['identity-service:0']
        self.related_units.return_value = ['unit/0']

        repo = 'cloud:trusty-juno'
        openstack_origin_git = {
            'repositories': [
                {'name': 'requirements',
                 'repository': 'git://git.openstack.org/openstack/requirements',  # noqa
                 'branch': 'stable/juno'},
                {'name': 'keystone',
                 'repository': 'git://git.openstack.org/openstack/keystone',
                 '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.openstack_upgrade_available.called)
        self.assertFalse(self.do_openstack_upgrade_reexec.called)
        self.assertTrue(update.called)
Esempio n. 16
0
    def test_config_changed_with_openstack_upgrade(self, configure_https,
                                                   identity_changed,
                                                   configs, get_homedir,
                                                   ensure_user, cluster_joined,
                                                   admin_relation_changed,
                                                   mock_peer_units,
                                                   mock_send_ssl_sync_request,
                                                   mock_is_ssl_cert_master,
                                                   mock_ensure_ssl_dir,
                                                   mock_ensure_permissions,
                                                   mock_ensure_pki_cert_paths,
                                                   mock_ensure_pki_permissions,
                                                   mock_ensure_ssl_dirs,
                                                   mock_ensure_ssl_cert_master,
                                                   mock_log, git_requested,
                                                   mock_is_db_initialised,
                                                   mock_run_in_apache,
                                                   update):
        mock_run_in_apache.return_value = False
        git_requested.return_value = False
        mock_is_ssl_cert_master.return_value = True
        self.is_db_ready.return_value = True
        mock_is_db_initialised.return_value = True
        self.openstack_upgrade_available.return_value = True
        self.is_elected_leader.return_value = True
        # avoid having to mock syncer
        mock_ensure_ssl_cert_master.return_value = False
        mock_peer_units.return_value = []
        self.relation_ids.return_value = ['identity-service:0']
        self.related_units.return_value = ['unit/0']

        hooks.config_changed()
        ensure_user.assert_called_with(user=self.ssh_user, group='keystone')
        get_homedir.assert_called_with(self.ssh_user)

        self.assertTrue(self.do_openstack_upgrade_reexec.called)

        self.save_script_rc.assert_called_with()
        configure_https.assert_called_with()
        self.assertTrue(configs.write_all.called)

        self.assertTrue(update.called)
Esempio n. 17
0
    def test_config_changed_no_upgrade_leader(self, configure_https,
                                              identity_changed,
                                              configs, get_homedir,
                                              ensure_user,
                                              cluster_joined,
                                              admin_relation_changed,
                                              mock_peer_units,
                                              mock_send_ssl_sync_request,
                                              mock_is_ssl_cert_master,
                                              mock_ensure_ssl_dir,
                                              mock_ensure_pki_cert_paths,
                                              mock_ensure_permissions,
                                              mock_ensure_pki_dir_permissions,
                                              mock_ensure_ssl_dirs,
                                              mock_ensure_ssl_cert_master,
                                              mock_log, git_requested,
                                              mock_is_db_initialised,
                                              mock_run_in_apache,
                                              update):
        mock_run_in_apache.return_value = False
        git_requested.return_value = False
        mock_is_ssl_cert_master.return_value = True
        mock_is_db_initialised.return_value = True
        self.is_db_ready.return_value = True
        self.openstack_upgrade_available.return_value = False
        self.is_elected_leader.return_value = True
        # avoid having to mock syncer
        mock_ensure_ssl_cert_master.return_value = False
        mock_peer_units.return_value = []
        self.relation_ids.return_value = ['identity-service:0']
        self.related_units.return_value = ['unit/0']

        hooks.config_changed()
        ensure_user.assert_called_with(user=self.ssh_user, group='keystone')
        get_homedir.assert_called_with(self.ssh_user)

        self.save_script_rc.assert_called_with()
        configure_https.assert_called_with()
        self.assertTrue(configs.write_all.called)
        self.open_port.assert_called_with(5000)

        self.assertTrue(update.called)
Esempio n. 18
0
    def test_config_changed_with_openstack_upgrade_action(self,
                                                          ensure_ssl_cert,
                                                          ensure_user,
                                                          get_home,
                                                          peer_units, is_ssl,
                                                          is_pki, config_https,
                                                          ensure_ssl_dir,
                                                          config_value_changed,
                                                          git_requested):
        ensure_ssl_cert.return_value = False
        is_pki.return_value = False
        peer_units.return_value = []

        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_reexec.called)
Esempio n. 19
0
    def test_config_changed_no_upgrade_leader(
            self, configure_https, identity_changed, configs,
            mock_cluster_joined, admin_relation_changed, mock_log,
            mock_is_db_initialised, mock_run_in_apache, update,
            mock_update_domains, mock_notify_middleware,
            mock_maybe_do_policyd_overrides_on_config_changed):
        def fake_relation_ids(relation):
            rids = {
                'cluster': ['cluster:1'],
                'identity-service': ['identity-service:0']
            }
            return rids.get(relation, [])

        self.enable_memcache.return_value = False
        self.os_release.return_value = 'mitaka'
        self.relation_ids.side_effect = fake_relation_ids

        mock_run_in_apache.return_value = False
        mock_is_db_initialised.return_value = True
        self.is_db_ready.return_value = True
        self.openstack_upgrade_available.return_value = False
        self.related_units.return_value = ['unit/0']

        hooks.config_changed()

        self.save_script_rc.assert_called_with()
        configure_https.assert_called_with()
        self.assertTrue(configs.write_all.called)
        self.open_port.assert_called_with(5000)

        self.assertTrue(mock_cluster_joined.called)
        self.assertTrue(update.called)
        self.assertTrue(mock_update_domains.called)
        self.assertTrue(mock_notify_middleware.called_once)

        (mock_maybe_do_policyd_overrides_on_config_changed.
         assert_called_once_with(ANY, "keystone", restart_handler=ANY))