From 9ad5cf963791a29b104f64ef0f2b202453475915 Mon Sep 17 00:00:00 2001 From: Corey Bryant Date: Thu, 16 Jun 2016 14:48:14 +0000 Subject: [PATCH] Add defaults for openstack-origin-git config option openstack-origin-git currently only supports YAML that specifies the git repositories to deploy from. This adds support for default openstack-origin-git values. The default values supported are: icehouse, kilo, liberty, mitaka, and master. For example: openstack-origin-git=master. Change-Id: I032cb58283d54a9ccfcc268a7fd70b460a03aa58 --- README.md | 91 ------------------- config.yaml | 35 ++++++- hooks/charmhelpers/contrib/openstack/utils.py | 32 ++++--- hooks/neutron_ovs_utils.py | 2 + unit_tests/test_neutron_ovs_utils.py | 4 +- 5 files changed, 55 insertions(+), 109 deletions(-) diff --git a/README.md b/README.md index 42260923..6c402723 100644 --- a/README.md +++ b/README.md @@ -42,97 +42,6 @@ This charm has a configuration option to allow users to disable any per-instance These compute nodes could then be accessed by cloud users via use of host aggregates with specific flavors to target instances to hypervisors with no per-instance security. -# Deploying from source - -The minimum openstack-origin-git config required to deploy from source is: - - openstack-origin-git: include-file://neutron-juno.yaml - - neutron-juno.yaml - repositories: - - {name: requirements, - repository: 'git://github.com/openstack/requirements', - branch: stable/juno} - - {name: neutron, - repository: 'git://github.com/openstack/neutron', - branch: stable/juno} - -Note that there are only two 'name' values the charm knows about: 'requirements' -and 'neutron'. These repositories must correspond to these 'name' values. -Additionally, the requirements repository must be specified first and the -neutron repository must be specified last. All other repostories are installed -in the order in which they are specified. - -The following is a full list of current tip repos (may not be up-to-date): - - openstack-origin-git: include-file://neutron-master.yaml - - neutron-master.yaml - repositories: - - {name: requirements, - repository: 'git://github.com/openstack/requirements', - branch: master} - - {name: oslo-concurrency, - repository: 'git://github.com/openstack/oslo.concurrency', - branch: master} - - {name: oslo-config, - repository: 'git://github.com/openstack/oslo.config', - branch: master} - - {name: oslo-context, - repository: 'git://github.com/openstack/oslo.context', - branch: master} - - {name: oslo-db, - repository: 'git://github.com/openstack/oslo.db', - branch: master} - - {name: oslo-i18n, - repository: 'git://github.com/openstack/oslo.i18n', - branch: master} - - {name: oslo-messaging, - repository: 'git://github.com/openstack/oslo.messaging', - branch: master} - - {name: oslo-middleware, - repository': 'git://github.com/openstack/oslo.middleware', - branch: master} - - {name: oslo-rootwrap', - repository: 'git://github.com/openstack/oslo.rootwrap', - branch: master} - - {name: oslo-serialization, - repository: 'git://github.com/openstack/oslo.serialization', - branch: master} - - {name: oslo-utils, - repository: 'git://github.com/openstack/oslo.utils', - branch: master} - - {name: pbr, - repository: 'git://github.com/openstack-dev/pbr', - branch: master} - - {name: stevedore, - repository: 'git://github.com/openstack/stevedore', - branch: 'master'} - - {name: python-keystoneclient, - repository: 'git://github.com/openstack/python-keystoneclient', - branch: master} - - {name: python-neutronclient, - repository: 'git://github.com/openstack/python-neutronclient', - branch: master} - - {name: python-novaclient, - repository': 'git://github.com/openstack/python-novaclient', - branch: master} - - {name: keystonemiddleware, - repository: 'git://github.com/openstack/keystonemiddleware', - branch: master} - - {name: neutron-fwaas, - repository': 'git://github.com/openstack/neutron-fwaas', - branch: master} - - {name: neutron-lbaas, - repository: 'git://github.com/openstack/neutron-lbaas', - branch: master} - - {name: neutron-vpnaas, - repository: 'git://github.com/openstack/neutron-vpnaas', - branch: master} - - {name: neutron, - repository: 'git://github.com/openstack/neutron', - branch: master} - # Network Spaces support This charm supports the use of Juju Network Spaces, allowing the charm to be bound to network space configurations managed directly by Juju. This is only supported with Juju 2.0 and above. diff --git a/config.yaml b/config.yaml index d8e1e62f..46c34327 100644 --- a/config.yaml +++ b/config.yaml @@ -16,19 +16,44 @@ options: default: type: string description: | - Specifies a YAML-formatted dictionary listing the git - repositories and branches from which to install OpenStack and - its dependencies. + Specifies a default OpenStack release name, or a YAML dictionary + listing the git repositories to install from. When openstack-origin-git is specified, openstack-specific packages will be installed from source rather than from the the nova-compute charm's openstack-origin repository. + The default Openstack release name may be one of the following, where + the corresponding OpenStack github branch will be used: + * icehouse + * kilo + * liberty + * mitaka + * master + + The YAML must minimally include requirements, neutron-fwaas, + neutron-lbaas, neutron-vpnaas, and neutron repositories, and may + also include repositories for other dependencies: + repositories: + - {name: requirements, + repository: 'git://github.com/openstack/requirements', + branch: master} + - {name: neutron-fwaas, + repository: 'git://github.com/openstack/neutron-fwaas', + branch: master} + - {name: neutron-lbaas, + repository: 'git://github.com/openstack/neutron-lbaas', + branch: master} + - {name: neutron-vpnaas, + repository: 'git://github.com/openstack/neutron-vpnaas', + branch: master} + - {name: neutron, + repository: 'git://github.com/openstack/neutron', + branch: master} + Note that the installed config files will be determined based on the OpenStack release of the nova-compute charm's openstack-origin option. - - For more details see README.md. rabbit-user: default: neutron type: string diff --git a/hooks/charmhelpers/contrib/openstack/utils.py b/hooks/charmhelpers/contrib/openstack/utils.py index 53e58424..8da5c5ed 100644 --- a/hooks/charmhelpers/contrib/openstack/utils.py +++ b/hooks/charmhelpers/contrib/openstack/utils.py @@ -725,14 +725,15 @@ def git_install_requested(): requirements_dir = None -def git_default_repos(projects): +def git_default_repos(projects_yaml): """ Returns default repos if a default openstack-origin-git value is specified. """ service = service_name() + core_project = service for default, branch in GIT_DEFAULT_BRANCHES.iteritems(): - if projects == default: + if projects_yaml == default: # add the requirements repo first repo = { @@ -742,34 +743,41 @@ def git_default_repos(projects): } repos = [repo] - # neutron and nova charms require some additional repos - if service == 'neutron': - for svc in ['neutron-fwaas', 'neutron-lbaas', 'neutron-vpnaas']: + # neutron-* and nova-* charms require some additional repos + if service in ['neutron-api', 'neutron-gateway', + 'neutron-openvswitch']: + core_project = 'neutron' + for project in ['neutron-fwaas', 'neutron-lbaas', + 'neutron-vpnaas']: repo = { - 'name': svc, - 'repository': GIT_DEFAULT_REPOS[svc], + 'name': project, + 'repository': GIT_DEFAULT_REPOS[project], 'branch': branch, } repos.append(repo) - elif service == 'nova': + + elif service in ['nova-cloud-controller', 'nova-compute']: + core_project = 'nova' repo = { 'name': 'neutron', 'repository': GIT_DEFAULT_REPOS['neutron'], 'branch': branch, } repos.append(repo) + elif service == 'openstack-dashboard': + core_project = 'horizon' - # finally add the current service's repo + # finally add the current service's core project repo repo = { - 'name': service, - 'repository': GIT_DEFAULT_REPOS[service], + 'name': core_project, + 'repository': GIT_DEFAULT_REPOS[core_project], 'branch': branch, } repos.append(repo) return yaml.dump(dict(repositories=repos)) - return projects + return projects_yaml def _git_yaml_load(projects_yaml): diff --git a/hooks/neutron_ovs_utils.py b/hooks/neutron_ovs_utils.py index c0381ff6..d43a8b18 100644 --- a/hooks/neutron_ovs_utils.py +++ b/hooks/neutron_ovs_utils.py @@ -10,6 +10,7 @@ from charmhelpers.contrib.openstack import context, templating from charmhelpers.contrib.openstack.utils import ( git_install_requested, git_clone_and_install, + git_default_repos, git_src_dir, git_pip_venv_dir, pause_unit, @@ -429,6 +430,7 @@ def git_install(projects_yaml): status_set('maintenance', 'running git install') if git_install_requested(): git_pre_install() + projects_yaml = git_default_repos(projects_yaml) git_clone_and_install(projects_yaml, core_project='neutron') git_post_install(projects_yaml) diff --git a/unit_tests/test_neutron_ovs_utils.py b/unit_tests/test_neutron_ovs_utils.py index 5c1cb3a0..5fd9d35c 100644 --- a/unit_tests/test_neutron_ovs_utils.py +++ b/unit_tests/test_neutron_ovs_utils.py @@ -373,14 +373,16 @@ class TestNeutronOVSUtils(CharmTestCase): DummyContext(return_value={'shared_secret': 'supersecret'}) self.assertEqual(nutils.get_shared_secret(), 'supersecret') + @patch.object(nutils, 'git_default_repos') @patch.object(nutils, 'git_install_requested') @patch.object(nutils, 'git_clone_and_install') @patch.object(nutils, 'git_post_install') @patch.object(nutils, 'git_pre_install') def test_git_install(self, git_pre, git_post, git_clone_and_install, - git_requested): + git_requested, git_default_repos): projects_yaml = openstack_origin_git git_requested.return_value = True + git_default_repos.return_value = projects_yaml nutils.git_install(projects_yaml) self.assertTrue(git_pre.called) git_clone_and_install.assert_called_with(openstack_origin_git,