Overall refresh to current install from source approach
This commit is contained in:
parent
c2aa14e89d
commit
d5e9cebd14
7
Makefile
7
Makefile
@ -2,7 +2,7 @@
|
|||||||
PYTHON := /usr/bin/env python
|
PYTHON := /usr/bin/env python
|
||||||
|
|
||||||
lint:
|
lint:
|
||||||
@flake8 --exclude hooks/charmhelpers hooks unit_tests tests
|
@flake8 --exclude hooks/charmhelpers actions hooks unit_tests tests
|
||||||
@charm proof
|
@charm proof
|
||||||
|
|
||||||
unit_test:
|
unit_test:
|
||||||
@ -15,7 +15,7 @@ bin/charm_helpers_sync.py:
|
|||||||
> bin/charm_helpers_sync.py
|
> bin/charm_helpers_sync.py
|
||||||
|
|
||||||
sync: bin/charm_helpers_sync.py
|
sync: bin/charm_helpers_sync.py
|
||||||
@$(PYTHON) bin/charm_helpers_sync.py -c charm-helpers-sync.yaml
|
@$(PYTHON) bin/charm_helpers_sync.py -c charm-helpers-hooks.yaml
|
||||||
@$(PYTHON) bin/charm_helpers_sync.py -c charm-helpers-tests.yaml
|
@$(PYTHON) bin/charm_helpers_sync.py -c charm-helpers-tests.yaml
|
||||||
|
|
||||||
test:
|
test:
|
||||||
@ -25,7 +25,8 @@ test:
|
|||||||
# https://bugs.launchpad.net/amulet/+bug/1320357
|
# https://bugs.launchpad.net/amulet/+bug/1320357
|
||||||
@juju test -v -p AMULET_HTTP_PROXY --timeout 900 \
|
@juju test -v -p AMULET_HTTP_PROXY --timeout 900 \
|
||||||
00-setup 14-basic-precise-icehouse 15-basic-trusty-icehouse \
|
00-setup 14-basic-precise-icehouse 15-basic-trusty-icehouse \
|
||||||
16-basic-trusty-juno
|
16-basic-trusty-icehouse-git 17-basic-trusty-juno \
|
||||||
|
18-basic-trusty-juno-git
|
||||||
|
|
||||||
publish: lint unit_test
|
publish: lint unit_test
|
||||||
bzr push lp:charms/neutron-openvswitch
|
bzr push lp:charms/neutron-openvswitch
|
||||||
|
166
README.md
166
README.md
@ -44,95 +44,87 @@ These compute nodes could then be accessed by cloud users via use of host aggreg
|
|||||||
|
|
||||||
# Deploying from source
|
# Deploying from source
|
||||||
|
|
||||||
The minimal openstack-origin-git config required to deploy from source is:
|
The minimum openstack-origin-git config required to deploy from source is:
|
||||||
|
|
||||||
openstack-origin-git:
|
openstack-origin-git:
|
||||||
"{'neutron':
|
"repositories:
|
||||||
{'repository': 'git://git.openstack.org/openstack/neutron.git',
|
- {name: requirements,
|
||||||
'branch': 'stable/icehouse'}}"
|
repository: 'git://git.openstack.org/openstack/requirements',
|
||||||
|
branch: stable/juno}
|
||||||
|
- {name: neutron,
|
||||||
|
repository: 'git://git.openstack.org/openstack/neutron',
|
||||||
|
branch: stable/juno}"
|
||||||
|
|
||||||
If you specify a 'requirements' repository, it will be used to update the
|
Note that there are only two 'name' values the charm knows about: 'requirements'
|
||||||
requirements.txt files of all other git repos that it applies to, before
|
and 'neutron'. These repositories must correspond to these 'name' values.
|
||||||
they are installed:
|
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:
|
openstack-origin-git:
|
||||||
"{'requirements':
|
"repositories:
|
||||||
{'repository': 'git://git.openstack.org/openstack/requirements.git',
|
- {name: requirements,
|
||||||
'branch': 'master'},
|
repository: 'git://git.openstack.org/openstack/requirements',
|
||||||
'neutron':
|
branch: master}
|
||||||
{'repository': 'git://git.openstack.org/openstack/neutron.git',
|
- {name: oslo-concurrency,
|
||||||
'branch': 'master'}}"
|
repository: 'git://git.openstack.org/openstack/oslo.concurrency',
|
||||||
|
branch: master}
|
||||||
Note that there are only two key values the charm knows about for the outermost
|
- {name: oslo-config,
|
||||||
dictionary: 'neutron' and 'requirements'. These repositories must correspond to
|
repository: 'git://git.openstack.org/openstack/oslo.config',
|
||||||
these keys. If the requirements repository is specified, it will be installed
|
branch: master}
|
||||||
first. The neutron repository is always installed last. All other repostories
|
- {name: oslo-context,
|
||||||
will be installed in between.
|
repository: 'git://git.openstack.org/openstack/oslo.context.git',
|
||||||
|
branch: master}
|
||||||
NOTE(coreycb): The following is temporary to keep track of the full list of
|
- {name: oslo-db,
|
||||||
current tip repos (may not be up-to-date).
|
repository: 'git://git.openstack.org/openstack/oslo.db',
|
||||||
|
branch: master}
|
||||||
openstack-origin-git:
|
- {name: oslo-i18n,
|
||||||
"{'requirements':
|
repository: 'git://git.openstack.org/openstack/oslo.i18n',
|
||||||
{'repository': 'git://git.openstack.org/openstack/requirements.git',
|
branch: master}
|
||||||
'branch': 'master'},
|
- {name: oslo-messaging,
|
||||||
'neutron-fwaas':
|
repository: 'git://git.openstack.org/openstack/oslo.messaging.git',
|
||||||
{'repository': 'git://git.openstack.org/openstack/neutron-fwaas.git',
|
branch: master}
|
||||||
'branch': 'master'},
|
- {name: oslo-middleware,
|
||||||
'neutron-lbaas':
|
repository': 'git://git.openstack.org/openstack/oslo.middleware.git',
|
||||||
{'repository: 'git://git.openstack.org/openstack/neutron-lbaas.git',
|
branch: master}
|
||||||
'branch': 'master'},
|
- {name: oslo-rootwrap',
|
||||||
'neutron-vpnaas':
|
repository: 'git://git.openstack.org/openstack/oslo.rootwrap.git',
|
||||||
{'repository: 'git://git.openstack.org/openstack/neutron-vpnaas.git',
|
branch: master}
|
||||||
'branch': 'master'},
|
- {name: oslo-serialization,
|
||||||
'keystonemiddleware:
|
repository: 'git://git.openstack.org/openstack/oslo.serialization',
|
||||||
{'repository': 'git://git.openstack.org/openstack/keystonemiddleware.git',
|
branch: master}
|
||||||
'branch: 'master'},
|
- {name: oslo-utils,
|
||||||
'oslo-concurrency':
|
repository: 'git://git.openstack.org/openstack/oslo.utils',
|
||||||
{'repository': 'git://git.openstack.org/openstack/oslo.concurrency.git',
|
branch: master}
|
||||||
'branch: 'master'},
|
- {name: pbr,
|
||||||
'oslo-config':
|
repository: 'git://git.openstack.org/openstack-dev/pbr',
|
||||||
{'repository': 'git://git.openstack.org/openstack/oslo.config.git',
|
branch: master}
|
||||||
'branch: 'master'},
|
- {name: stevedore,
|
||||||
'oslo-context':
|
repository: 'git://git.openstack.org/openstack/stevedore.git',
|
||||||
{'repository': 'git://git.openstack.org/openstack/oslo.context.git',
|
branch: 'master'}
|
||||||
'branch: 'master'},
|
- {name: python-keystoneclient,
|
||||||
'oslo-db':
|
repository: 'git://git.openstack.org/openstack/python-keystoneclient',
|
||||||
{'repository': 'git://git.openstack.org/openstack/oslo.db.git',
|
branch: master}
|
||||||
'branch: 'master'},
|
- {name: python-neutronclient,
|
||||||
'oslo-i18n':
|
repository: 'git://git.openstack.org/openstack/python-neutronclient.git',
|
||||||
{'repository': 'git://git.openstack.org/openstack/oslo.i18n.git',
|
branch: master}
|
||||||
'branch: 'master'},
|
- {name: python-novaclient,
|
||||||
'oslo-messaging':
|
repository': 'git://git.openstack.org/openstack/python-novaclient.git',
|
||||||
{'repository': 'git://git.openstack.org/openstack/oslo.messaging.git',
|
branch: master}
|
||||||
'branch: 'master'},
|
- {name: keystonemiddleware,
|
||||||
'oslo-middleware:
|
repository: 'git://git.openstack.org/openstack/keystonemiddleware',
|
||||||
{'repository': 'git://git.openstack.org/openstack/oslo.middleware.git',
|
branch: master}
|
||||||
'branch': 'master'},
|
- {name: neutron-fwaas,
|
||||||
'oslo-rootwrap':
|
repository': 'git://git.openstack.org/openstack/neutron-fwaas.git',
|
||||||
{'repository': 'git://git.openstack.org/openstack/oslo.rootwrap.git',
|
branch: master}
|
||||||
'branch: 'master'},
|
- {name: neutron-lbaas,
|
||||||
'oslo-serialization':
|
repository: 'git://git.openstack.org/openstack/neutron-lbaas.git',
|
||||||
{'repository': 'git://git.openstack.org/openstack/oslo.serialization.git',
|
branch: master}
|
||||||
'branch: 'master'},
|
- {name: neutron-vpnaas,
|
||||||
'oslo-utils':
|
repository: 'git://git.openstack.org/openstack/neutron-vpnaas.git',
|
||||||
{'repository': 'git://git.openstack.org/openstack/oslo.utils.git',
|
branch: master}
|
||||||
'branch: 'master'},
|
- {name: neutron,
|
||||||
'pbr':
|
repository: 'git://git.openstack.org/openstack/neutron',
|
||||||
{'repository': 'git://git.openstack.org/openstack-dev/pbr.git',
|
branch: master}"
|
||||||
'branch: 'master'},
|
|
||||||
'python-keystoneclient':
|
|
||||||
{'repository': 'git://git.openstack.org/openstack/python-keystoneclient.git',
|
|
||||||
'branch: 'master'},
|
|
||||||
'python-neutronclient':
|
|
||||||
{'repository': 'git://git.openstack.org/openstack/python-neutronclient.git',
|
|
||||||
'branch: 'master'},
|
|
||||||
'python-novaclient':
|
|
||||||
{'repository': 'git://git.openstack.org/openstack/python-novaclient.git',
|
|
||||||
'branch: 'master'},
|
|
||||||
'stevedore':
|
|
||||||
{'repository': 'git://git.openstack.org/openstack/stevedore.git',
|
|
||||||
'branch: 'master'},
|
|
||||||
'neutron':
|
|
||||||
{'repository': 'git://git.openstack.org/openstack/neutron.git',
|
|
||||||
'branch': 'master'}}"
|
|
||||||
|
2
actions.yaml
Normal file
2
actions.yaml
Normal file
@ -0,0 +1,2 @@
|
|||||||
|
git-reinstall:
|
||||||
|
description: Reinstall neutron-openvswitch from the openstack-origin-git repositories.
|
1
actions/git-reinstall
Symbolic link
1
actions/git-reinstall
Symbolic link
@ -0,0 +1 @@
|
|||||||
|
git_reinstall.py
|
40
actions/git_reinstall.py
Executable file
40
actions/git_reinstall.py
Executable file
@ -0,0 +1,40 @@
|
|||||||
|
#!/usr/bin/python
|
||||||
|
import sys
|
||||||
|
import traceback
|
||||||
|
|
||||||
|
sys.path.append('hooks/')
|
||||||
|
|
||||||
|
from charmhelpers.contrib.openstack.utils import (
|
||||||
|
git_install_requested,
|
||||||
|
)
|
||||||
|
|
||||||
|
from charmhelpers.core.hookenv import (
|
||||||
|
action_set,
|
||||||
|
action_fail,
|
||||||
|
config,
|
||||||
|
)
|
||||||
|
|
||||||
|
from neutron_ovs_utils import (
|
||||||
|
git_install,
|
||||||
|
)
|
||||||
|
|
||||||
|
|
||||||
|
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'))
|
||||||
|
except:
|
||||||
|
action_set({'traceback': traceback.format_exc()})
|
||||||
|
action_fail('git-reinstall resulted in an unexpected error')
|
||||||
|
|
||||||
|
|
||||||
|
if __name__ == '__main__':
|
||||||
|
git_reinstall()
|
@ -1,5 +1,4 @@
|
|||||||
#branch: lp:charm-helpers
|
branch: lp:charm-helpers
|
||||||
branch: /home/corey/src/charms/git/charm-helpers
|
|
||||||
destination: hooks/charmhelpers
|
destination: hooks/charmhelpers
|
||||||
include:
|
include:
|
||||||
- core
|
- core
|
@ -1,5 +1,4 @@
|
|||||||
#branch: lp:charm-helpers
|
branch: lp:charm-helpers
|
||||||
branch: /home/corey/src/charms/git/charm-helpers
|
|
||||||
destination: tests/charmhelpers
|
destination: tests/charmhelpers
|
||||||
include:
|
include:
|
||||||
- contrib.amulet
|
- contrib.amulet
|
||||||
|
12
config.yaml
12
config.yaml
@ -3,20 +3,16 @@ options:
|
|||||||
default: None
|
default: None
|
||||||
type: string
|
type: string
|
||||||
description: |
|
description: |
|
||||||
Specifies a YAML-formatted two-dimensional array listing the git
|
Specifies a YAML-formatted dictionary listing the git
|
||||||
repositories and branches from which to install OpenStack and its
|
repositories and branches from which to install OpenStack and
|
||||||
dependencies.
|
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.
|
||||||
|
|
||||||
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 openstack-origin option.
|
||||||
option.
|
|
||||||
|
|
||||||
Note also that this option is processed for the initial install
|
|
||||||
only. Setting this option after deployment is not supported.
|
|
||||||
|
|
||||||
For more details see README.md.
|
For more details see README.md.
|
||||||
rabbit-user:
|
rabbit-user:
|
||||||
|
@ -2,6 +2,11 @@
|
|||||||
|
|
||||||
import sys
|
import sys
|
||||||
|
|
||||||
|
from charmhelpers.contrib.openstack.utils import (
|
||||||
|
config_value_changed,
|
||||||
|
git_install_requested,
|
||||||
|
)
|
||||||
|
|
||||||
from charmhelpers.core.hookenv import (
|
from charmhelpers.core.hookenv import (
|
||||||
Hooks,
|
Hooks,
|
||||||
UnregisteredHookError,
|
UnregisteredHookError,
|
||||||
@ -51,6 +56,10 @@ def install():
|
|||||||
def config_changed():
|
def config_changed():
|
||||||
CONFIGS.write_all()
|
CONFIGS.write_all()
|
||||||
|
|
||||||
|
if git_install_requested() and
|
||||||
|
config_value_changed('openstack-origin-git'):
|
||||||
|
git_install(config('openstack-origin-git'))
|
||||||
|
|
||||||
|
|
||||||
@hooks.hook('amqp-relation-joined')
|
@hooks.hook('amqp-relation-joined')
|
||||||
def amqp_joined(relation_id=None):
|
def amqp_joined(relation_id=None):
|
||||||
|
@ -6,6 +6,11 @@ from charmhelpers.contrib.openstack.neutron import neutron_plugin_attribute
|
|||||||
from copy import deepcopy
|
from copy import deepcopy
|
||||||
|
|
||||||
from charmhelpers.contrib.openstack import context, templating
|
from charmhelpers.contrib.openstack import context, templating
|
||||||
|
from charmhelpers.contrib.openstack.utils import (
|
||||||
|
git_install_requested,
|
||||||
|
git_clone_and_install,
|
||||||
|
git_src_dir,
|
||||||
|
)
|
||||||
from collections import OrderedDict
|
from collections import OrderedDict
|
||||||
from charmhelpers.contrib.openstack.utils import (
|
from charmhelpers.contrib.openstack.utils import (
|
||||||
os_release,
|
os_release,
|
||||||
@ -87,12 +92,12 @@ def restart_map():
|
|||||||
return {k: v['services'] for k, v in resource_map().iteritems()}
|
return {k: v['services'] for k, v in resource_map().iteritems()}
|
||||||
|
|
||||||
|
|
||||||
def git_install(projects):
|
def git_install(projects_yaml):
|
||||||
"""Perform setup, and install git repos specified in yaml parameter."""
|
"""Perform setup, and install git repos specified in yaml parameter."""
|
||||||
if git_install_requested():
|
if git_install_requested():
|
||||||
git_pre_install()
|
git_pre_install()
|
||||||
git_clone_and_install(yaml.load(projects), core_project='neutron')
|
git_clone_and_install(projects_yaml, core_project='neutron')
|
||||||
git_post_install()
|
git_post_install(projects_yaml)
|
||||||
|
|
||||||
|
|
||||||
def git_pre_install():
|
def git_pre_install():
|
||||||
@ -121,9 +126,9 @@ def git_pre_install():
|
|||||||
write_file(l, '', owner='neutron', group='neutron', perms=0600)
|
write_file(l, '', owner='neutron', group='neutron', perms=0600)
|
||||||
|
|
||||||
|
|
||||||
def git_post_install():
|
def git_post_install(projects_yaml):
|
||||||
"""Perform post-install setup."""
|
"""Perform post-install setup."""
|
||||||
src_etc = os.path.join(charm_dir(), '/mnt/openstack-git/neutron-api.git/etc')
|
src_etc = os.path.join(git_src_dir(projects_yaml, 'neutron'), 'etc')
|
||||||
configs = {
|
configs = {
|
||||||
'debug-filters': {
|
'debug-filters': {
|
||||||
'src': os.path.join(src_etc, 'neutron/rootwrap.d/debug.filters'),
|
'src': os.path.join(src_etc, 'neutron/rootwrap.d/debug.filters'),
|
||||||
@ -175,10 +180,10 @@ def git_post_install():
|
|||||||
'log_file': '/var/log/neutron/ovs-cleanup.log',
|
'log_file': '/var/log/neutron/ovs-cleanup.log',
|
||||||
}
|
}
|
||||||
|
|
||||||
|
# NOTE(coreycb): Needs systemd support
|
||||||
render('upstart/neutron-plugin-openvswitch-agent.upstart',
|
render('upstart/neutron-plugin-openvswitch-agent.upstart',
|
||||||
'/etc/init/neutron-plugin-openvswitch-agent.conf',
|
'/etc/init/neutron-plugin-openvswitch-agent.conf',
|
||||||
neutron_ovs_agent_context, perms=0o644)
|
neutron_ovs_agent_context, perms=0o644)
|
||||||
|
|
||||||
render('upstart/neutron-ovs-cleanup.upstart',
|
render('upstart/neutron-ovs-cleanup.upstart',
|
||||||
'/etc/init/neutron-ovs-cleanup.conf',
|
'/etc/init/neutron-ovs-cleanup.conf',
|
||||||
neutron_ovs_cleanup_context, perms=0o644)
|
neutron_ovs_cleanup_context, perms=0o644)
|
||||||
|
9
tests/16-basic-trusty-icehouse-git
Executable file
9
tests/16-basic-trusty-icehouse-git
Executable file
@ -0,0 +1,9 @@
|
|||||||
|
#!/usr/bin/python
|
||||||
|
|
||||||
|
"""Amulet tests on a basic neutron-openvswitch git deployment on trusty-icehouse."""
|
||||||
|
|
||||||
|
from basic_deployment import NeutronOVSBasicDeployment
|
||||||
|
|
||||||
|
if __name__ == '__main__':
|
||||||
|
deployment = NeutronOVSBasicDeployment(series='trusty', git=True)
|
||||||
|
deployment.run_tests()
|
12
tests/18-basic-trusty-juno-git
Executable file
12
tests/18-basic-trusty-juno-git
Executable file
@ -0,0 +1,12 @@
|
|||||||
|
#!/usr/bin/python
|
||||||
|
|
||||||
|
"""Amulet tests on a basic neutron-openvswitch git deployment on trusty-juno."""
|
||||||
|
|
||||||
|
from basic_deployment import NeutronOVSBasicDeployment
|
||||||
|
|
||||||
|
if __name__ == '__main__':
|
||||||
|
deployment = NeutronOVSBasicDeployment(series='trusty',
|
||||||
|
openstack='cloud:trusty-juno',
|
||||||
|
source='cloud:trusty-updates/juno',
|
||||||
|
git=True)
|
||||||
|
deployment.run_tests()
|
@ -2,6 +2,7 @@
|
|||||||
|
|
||||||
import amulet
|
import amulet
|
||||||
import time
|
import time
|
||||||
|
import yaml
|
||||||
|
|
||||||
from charmhelpers.contrib.openstack.amulet.deployment import (
|
from charmhelpers.contrib.openstack.amulet.deployment import (
|
||||||
OpenStackAmuletDeployment
|
OpenStackAmuletDeployment
|
||||||
@ -24,10 +25,12 @@ u = OpenStackAmuletUtils(ERROR)
|
|||||||
class NeutronOVSBasicDeployment(OpenStackAmuletDeployment):
|
class NeutronOVSBasicDeployment(OpenStackAmuletDeployment):
|
||||||
"""Amulet tests on a basic neutron-openvswtich deployment."""
|
"""Amulet tests on a basic neutron-openvswtich deployment."""
|
||||||
|
|
||||||
def __init__(self, series, openstack=None, source=None, stable=False):
|
def __init__(self, series, openstack=None, source=None, git=False,
|
||||||
|
stable=False):
|
||||||
"""Deploy the entire test environment."""
|
"""Deploy the entire test environment."""
|
||||||
super(NeutronOVSBasicDeployment, self).__init__(series, openstack,
|
super(NeutronOVSBasicDeployment, self).__init__(series, openstack,
|
||||||
source, stable)
|
source, stable)
|
||||||
|
self.git = git
|
||||||
self._add_services()
|
self._add_services()
|
||||||
self._add_relations()
|
self._add_relations()
|
||||||
self._configure_services()
|
self._configure_services()
|
||||||
@ -61,10 +64,21 @@ class NeutronOVSBasicDeployment(OpenStackAmuletDeployment):
|
|||||||
|
|
||||||
def _configure_services(self):
|
def _configure_services(self):
|
||||||
"""Configure all of the services."""
|
"""Configure all of the services."""
|
||||||
neutron_ovs_config = {'openstack-origin-git':
|
neutron_ovs_config = {}
|
||||||
"{'neutron':"
|
if self.git:
|
||||||
" {'repository': 'git://git.openstack.org/openstack/neutron.git',"
|
branch = 'stable/' + self._get_openstack_release_string()
|
||||||
" 'branch': 'stable/icehouse'}}"}
|
openstack_origin_git = {
|
||||||
|
'repositories': [
|
||||||
|
{'name': 'requirements',
|
||||||
|
'repository': 'git://git.openstack.org/openstack/requirements',
|
||||||
|
'branch': branch},
|
||||||
|
{'name': 'neutron',
|
||||||
|
'repository': 'git://git.openstack.org/openstack/neutron',
|
||||||
|
'branch': branch},
|
||||||
|
],
|
||||||
|
'directory': '/mnt/openstack-git',
|
||||||
|
}
|
||||||
|
neutron_api_config['openstack-origin-git'] = yaml.dump(openstack_origin_git)
|
||||||
configs = {'neutron-openvswitch': neutron_ovs_config}
|
configs = {'neutron-openvswitch': neutron_ovs_config}
|
||||||
super(NeutronOVSBasicDeployment, self)._configure_services(configs)
|
super(NeutronOVSBasicDeployment, self)._configure_services(configs)
|
||||||
|
|
||||||
|
@ -1,2 +1,4 @@
|
|||||||
import sys
|
import sys
|
||||||
|
|
||||||
|
sys.path.append('actions/')
|
||||||
sys.path.append('hooks/')
|
sys.path.append('hooks/')
|
||||||
|
85
unit_tests/test_actions_git_reinstall.py
Normal file
85
unit_tests/test_actions_git_reinstall.py
Normal file
@ -0,0 +1,85 @@
|
|||||||
|
from mock import patch
|
||||||
|
|
||||||
|
with patch('charmhelpers.core.hookenv.config') as config:
|
||||||
|
config.return_value = 'neutron'
|
||||||
|
import neutron_ovs_utils as utils # noqa
|
||||||
|
|
||||||
|
import git_reinstall
|
||||||
|
|
||||||
|
from test_utils import (
|
||||||
|
CharmTestCase
|
||||||
|
)
|
||||||
|
|
||||||
|
TO_PATCH = [
|
||||||
|
'config',
|
||||||
|
]
|
||||||
|
|
||||||
|
|
||||||
|
openstack_origin_git = \
|
||||||
|
"""repositories:
|
||||||
|
- {name: requirements,
|
||||||
|
repository: 'git://git.openstack.org/openstack/requirements',
|
||||||
|
branch: stable/juno}
|
||||||
|
- {name: neutron,
|
||||||
|
repository: 'git://git.openstack.org/openstack/neutron',
|
||||||
|
branch: stable/juno}"""
|
||||||
|
|
||||||
|
|
||||||
|
class TestNeutronOVSActions(CharmTestCase):
|
||||||
|
|
||||||
|
def setUp(self):
|
||||||
|
super(TestNeutronOVSActions, self).setUp(git_reinstall, TO_PATCH)
|
||||||
|
self.config.side_effect = self.test_config.get
|
||||||
|
|
||||||
|
@patch.object(git_reinstall, 'action_set')
|
||||||
|
@patch.object(git_reinstall, 'action_fail')
|
||||||
|
@patch.object(git_reinstall, 'git_install')
|
||||||
|
def test_git_reinstall(self, git_install, action_fail, action_set):
|
||||||
|
self.test_config.set('openstack-origin-git', openstack_origin_git)
|
||||||
|
|
||||||
|
git_reinstall.git_reinstall()
|
||||||
|
|
||||||
|
git_install.assert_called_with(openstack_origin_git)
|
||||||
|
self.assertTrue(git_install.called)
|
||||||
|
self.assertFalse(action_set.called)
|
||||||
|
self.assertFalse(action_fail.called)
|
||||||
|
|
||||||
|
@patch.object(git_reinstall, 'action_set')
|
||||||
|
@patch.object(git_reinstall, 'action_fail')
|
||||||
|
@patch.object(git_reinstall, 'git_install')
|
||||||
|
@patch('charmhelpers.contrib.openstack.utils.config')
|
||||||
|
def test_git_reinstall_not_configured(self, _config, git_install,
|
||||||
|
action_fail, action_set):
|
||||||
|
_config.return_value = 'none'
|
||||||
|
|
||||||
|
git_reinstall.git_reinstall()
|
||||||
|
|
||||||
|
msg = 'openstack-origin-git is not configured'
|
||||||
|
action_fail.assert_called_with(msg)
|
||||||
|
self.assertFalse(git_install.called)
|
||||||
|
self.assertFalse(action_set.called)
|
||||||
|
|
||||||
|
@patch.object(git_reinstall, 'action_set')
|
||||||
|
@patch.object(git_reinstall, 'action_fail')
|
||||||
|
@patch.object(git_reinstall, 'git_install')
|
||||||
|
@patch('charmhelpers.contrib.openstack.utils.config')
|
||||||
|
def test_git_reinstall_exception(self, _config, git_install,
|
||||||
|
action_fail, action_set):
|
||||||
|
_config.return_value = openstack_origin_git
|
||||||
|
e = OSError('something bad happened')
|
||||||
|
git_install.side_effect = e
|
||||||
|
traceback = (
|
||||||
|
"Traceback (most recent call last):\n"
|
||||||
|
" File \"actions/git_reinstall.py\", line 33, in git_reinstall\n"
|
||||||
|
" git_install(config(\'openstack-origin-git\'))\n"
|
||||||
|
" File \"/usr/lib/python2.7/dist-packages/mock.py\", line 964, in __call__\n" # noqa
|
||||||
|
" return _mock_self._mock_call(*args, **kwargs)\n"
|
||||||
|
" File \"/usr/lib/python2.7/dist-packages/mock.py\", line 1019, in _mock_call\n" # noqa
|
||||||
|
" raise effect\n"
|
||||||
|
"OSError: something bad happened\n")
|
||||||
|
|
||||||
|
git_reinstall.git_reinstall()
|
||||||
|
|
||||||
|
msg = 'git-reinstall resulted in an unexpected error'
|
||||||
|
action_fail.assert_called_with(msg)
|
||||||
|
action_set.assert_called_with({'traceback': traceback})
|
Loading…
x
Reference in New Issue
Block a user