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
This commit is contained in:
Corey Bryant 2016-06-16 14:48:14 +00:00
parent 6ee7c2fc17
commit 9ad5cf9637
5 changed files with 55 additions and 109 deletions

View File

@ -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. 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 # 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. 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.

View File

@ -16,19 +16,44 @@ options:
default: default:
type: string type: string
description: | description: |
Specifies a YAML-formatted dictionary listing the git Specifies a default OpenStack release name, or a YAML dictionary
repositories and branches from which to install OpenStack and listing the git repositories to install from.
its dependencies.
When openstack-origin-git is specified, openstack-specific When openstack-origin-git is specified, openstack-specific
packages will be installed from source rather than from the packages will be installed from source rather than from the
the nova-compute charm's openstack-origin repository. 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 Note that the installed config files will be determined based on
the OpenStack release of the nova-compute charm's openstack-origin the OpenStack release of the nova-compute charm's openstack-origin
option. option.
For more details see README.md.
rabbit-user: rabbit-user:
default: neutron default: neutron
type: string type: string

View File

@ -725,14 +725,15 @@ def git_install_requested():
requirements_dir = None 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. Returns default repos if a default openstack-origin-git value is specified.
""" """
service = service_name() service = service_name()
core_project = service
for default, branch in GIT_DEFAULT_BRANCHES.iteritems(): for default, branch in GIT_DEFAULT_BRANCHES.iteritems():
if projects == default: if projects_yaml == default:
# add the requirements repo first # add the requirements repo first
repo = { repo = {
@ -742,34 +743,41 @@ def git_default_repos(projects):
} }
repos = [repo] repos = [repo]
# neutron and nova charms require some additional repos # neutron-* and nova-* charms require some additional repos
if service == 'neutron': if service in ['neutron-api', 'neutron-gateway',
for svc in ['neutron-fwaas', 'neutron-lbaas', 'neutron-vpnaas']: 'neutron-openvswitch']:
core_project = 'neutron'
for project in ['neutron-fwaas', 'neutron-lbaas',
'neutron-vpnaas']:
repo = { repo = {
'name': svc, 'name': project,
'repository': GIT_DEFAULT_REPOS[svc], 'repository': GIT_DEFAULT_REPOS[project],
'branch': branch, 'branch': branch,
} }
repos.append(repo) repos.append(repo)
elif service == 'nova':
elif service in ['nova-cloud-controller', 'nova-compute']:
core_project = 'nova'
repo = { repo = {
'name': 'neutron', 'name': 'neutron',
'repository': GIT_DEFAULT_REPOS['neutron'], 'repository': GIT_DEFAULT_REPOS['neutron'],
'branch': branch, 'branch': branch,
} }
repos.append(repo) 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 = { repo = {
'name': service, 'name': core_project,
'repository': GIT_DEFAULT_REPOS[service], 'repository': GIT_DEFAULT_REPOS[core_project],
'branch': branch, 'branch': branch,
} }
repos.append(repo) repos.append(repo)
return yaml.dump(dict(repositories=repos)) return yaml.dump(dict(repositories=repos))
return projects return projects_yaml
def _git_yaml_load(projects_yaml): def _git_yaml_load(projects_yaml):

View File

@ -10,6 +10,7 @@ from charmhelpers.contrib.openstack import context, templating
from charmhelpers.contrib.openstack.utils import ( from charmhelpers.contrib.openstack.utils import (
git_install_requested, git_install_requested,
git_clone_and_install, git_clone_and_install,
git_default_repos,
git_src_dir, git_src_dir,
git_pip_venv_dir, git_pip_venv_dir,
pause_unit, pause_unit,
@ -429,6 +430,7 @@ def git_install(projects_yaml):
status_set('maintenance', 'running git install') status_set('maintenance', 'running git install')
if git_install_requested(): if git_install_requested():
git_pre_install() git_pre_install()
projects_yaml = git_default_repos(projects_yaml)
git_clone_and_install(projects_yaml, core_project='neutron') git_clone_and_install(projects_yaml, core_project='neutron')
git_post_install(projects_yaml) git_post_install(projects_yaml)

View File

@ -373,14 +373,16 @@ class TestNeutronOVSUtils(CharmTestCase):
DummyContext(return_value={'shared_secret': 'supersecret'}) DummyContext(return_value={'shared_secret': 'supersecret'})
self.assertEqual(nutils.get_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_install_requested')
@patch.object(nutils, 'git_clone_and_install') @patch.object(nutils, 'git_clone_and_install')
@patch.object(nutils, 'git_post_install') @patch.object(nutils, 'git_post_install')
@patch.object(nutils, 'git_pre_install') @patch.object(nutils, 'git_pre_install')
def test_git_install(self, git_pre, git_post, git_clone_and_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 projects_yaml = openstack_origin_git
git_requested.return_value = True git_requested.return_value = True
git_default_repos.return_value = projects_yaml
nutils.git_install(projects_yaml) nutils.git_install(projects_yaml)
self.assertTrue(git_pre.called) self.assertTrue(git_pre.called)
git_clone_and_install.assert_called_with(openstack_origin_git, git_clone_and_install.assert_called_with(openstack_origin_git,