[coreycb,r=james-page] Fixup amulet tests.
This commit is contained in:
commit
9767b68746
3
Makefile
3
Makefile
|
@ -10,7 +10,8 @@ test:
|
|||
# coreycb note: The -v should only be temporary until Amulet sends
|
||||
# raise_status() messages to stderr:
|
||||
# https://bugs.launchpad.net/amulet/+bug/1320357
|
||||
@juju test -v -p AMULET_HTTP_PROXY
|
||||
@juju test -v -p AMULET_HTTP_PROXY --timeout 900 \
|
||||
00-setup 14-basic-precise-icehouse 15-basic-trusty-icehouse
|
||||
|
||||
bin/charm_helpers_sync.py:
|
||||
@mkdir -p bin
|
||||
|
|
|
@ -57,6 +57,8 @@ def get_address_in_network(network, fallback=None, fatal=False):
|
|||
else:
|
||||
if fatal:
|
||||
not_found_error_out()
|
||||
else:
|
||||
return None
|
||||
|
||||
_validate_cidr(network)
|
||||
network = netaddr.IPNetwork(network)
|
||||
|
|
|
@ -4,5 +4,7 @@ set -ex
|
|||
|
||||
sudo add-apt-repository --yes ppa:juju/stable
|
||||
sudo apt-get update --yes
|
||||
sudo apt-get install --yes python-amulet
|
||||
sudo apt-get install --yes python-keystoneclient
|
||||
sudo apt-get install --yes python-amulet \
|
||||
python-keystoneclient \
|
||||
python-glanceclient \
|
||||
python-novaclient
|
||||
|
|
|
@ -1,6 +1,12 @@
|
|||
This directory provides Amulet tests that focus on verification of ceph
|
||||
deployments.
|
||||
|
||||
In order to run tests, you'll need charm-tools installed (in addition to
|
||||
juju, of course):
|
||||
sudo add-apt-repository ppa:juju/stable
|
||||
sudo apt-get update
|
||||
sudo apt-get install charm-tools
|
||||
|
||||
If you use a web proxy server to access the web, you'll need to set the
|
||||
AMULET_HTTP_PROXY environment variable to the http URL of the proxy server.
|
||||
|
||||
|
|
|
@ -17,9 +17,10 @@ u = OpenStackAmuletUtils(ERROR)
|
|||
class CephBasicDeployment(OpenStackAmuletDeployment):
|
||||
"""Amulet tests on a basic ceph deployment."""
|
||||
|
||||
def __init__(self, series=None, openstack=None, source=None):
|
||||
def __init__(self, series=None, openstack=None, source=None, stable=False):
|
||||
"""Deploy the entire test environment."""
|
||||
super(CephBasicDeployment, self).__init__(series, openstack, source)
|
||||
super(CephBasicDeployment, self).__init__(series, openstack, source,
|
||||
stable)
|
||||
self._add_services()
|
||||
self._add_relations()
|
||||
self._configure_services()
|
||||
|
@ -29,14 +30,15 @@ class CephBasicDeployment(OpenStackAmuletDeployment):
|
|||
def _add_services(self):
|
||||
"""Add services
|
||||
|
||||
Add the services that we're testing, including the number of units,
|
||||
where ceph is local, and mysql and cinder are from the charm
|
||||
store.
|
||||
Add the services that we're testing, where ceph is local,
|
||||
and the rest of the service are from lp branches that are
|
||||
compatible with the local charm (e.g. stable or next).
|
||||
"""
|
||||
this_service = ('ceph', 3)
|
||||
other_services = [('mysql', 1), ('keystone', 1),
|
||||
('rabbitmq-server', 1), ('nova-compute', 1),
|
||||
('glance', 1), ('cinder', 1)]
|
||||
this_service = {'name': 'ceph', 'units': 3}
|
||||
other_services = [{'name': 'mysql'}, {'name': 'keystone'},
|
||||
{'name': 'rabbitmq-server'},
|
||||
{'name': 'nova-compute'},
|
||||
{'name': 'glance'}, {'name': 'cinder'}]
|
||||
super(CephBasicDeployment, self)._add_services(this_service,
|
||||
other_services)
|
||||
|
||||
|
|
|
@ -25,25 +25,30 @@ class AmuletDeployment(object):
|
|||
|
||||
Add services to the deployment where this_service is the local charm
|
||||
that we're testing and other_services are the other services that
|
||||
are being used in the amulet tests.
|
||||
are being used in the local amulet tests.
|
||||
"""
|
||||
name, units, location = range(3)
|
||||
|
||||
if this_service[name] != os.path.basename(os.getcwd()):
|
||||
s = this_service[name]
|
||||
if this_service['name'] != os.path.basename(os.getcwd()):
|
||||
s = this_service['name']
|
||||
msg = "The charm's root directory name needs to be {}".format(s)
|
||||
amulet.raise_status(amulet.FAIL, msg=msg)
|
||||
|
||||
self.d.add(this_service[name], units=this_service[units])
|
||||
if 'units' not in this_service:
|
||||
this_service['units'] = 1
|
||||
|
||||
self.d.add(this_service['name'], units=this_service['units'])
|
||||
|
||||
for svc in other_services:
|
||||
if len(svc) > 2:
|
||||
branch_location = svc[location]
|
||||
if 'location' in svc:
|
||||
branch_location = svc['location']
|
||||
elif self.series:
|
||||
branch_location = 'cs:{}/{}'.format(self.series, svc[name]),
|
||||
branch_location = 'cs:{}/{}'.format(self.series, svc['name']),
|
||||
else:
|
||||
branch_location = None
|
||||
self.d.add(svc[name], charm=branch_location, units=svc[units])
|
||||
|
||||
if 'units' not in svc:
|
||||
svc['units'] = 1
|
||||
|
||||
self.d.add(svc['name'], charm=branch_location, units=svc['units'])
|
||||
|
||||
def _add_relations(self, relations):
|
||||
"""Add all of the relations for the services."""
|
||||
|
|
|
@ -1,6 +1,3 @@
|
|||
from bzrlib.branch import Branch
|
||||
import os
|
||||
import re
|
||||
from charmhelpers.contrib.amulet.deployment import (
|
||||
AmuletDeployment
|
||||
)
|
||||
|
@ -13,62 +10,62 @@ class OpenStackAmuletDeployment(AmuletDeployment):
|
|||
that is specifically for use by OpenStack charms.
|
||||
"""
|
||||
|
||||
def __init__(self, series=None, openstack=None, source=None):
|
||||
def __init__(self, series=None, openstack=None, source=None, stable=True):
|
||||
"""Initialize the deployment environment."""
|
||||
super(OpenStackAmuletDeployment, self).__init__(series)
|
||||
self.openstack = openstack
|
||||
self.source = source
|
||||
|
||||
def _is_dev_branch(self):
|
||||
"""Determine if branch being tested is a dev (i.e. next) branch."""
|
||||
branch = Branch.open(os.getcwd())
|
||||
parent = branch.get_parent()
|
||||
pattern = re.compile("^.*/next/$")
|
||||
if (pattern.match(parent)):
|
||||
return True
|
||||
else:
|
||||
return False
|
||||
self.stable = stable
|
||||
# Note(coreycb): this needs to be changed when new next branches come
|
||||
# out.
|
||||
self.current_next = "trusty"
|
||||
|
||||
def _determine_branch_locations(self, other_services):
|
||||
"""Determine the branch locations for the other services.
|
||||
|
||||
If the branch being tested is a dev branch, then determine the
|
||||
development branch locations for the other services. Otherwise,
|
||||
the default charm store branches will be used."""
|
||||
name = 0
|
||||
if self._is_dev_branch():
|
||||
updated_services = []
|
||||
Determine if the local branch being tested is derived from its
|
||||
stable or next (dev) branch, and based on this, use the corresonding
|
||||
stable or next branches for the other_services."""
|
||||
base_charms = ['mysql', 'mongodb', 'rabbitmq-server']
|
||||
|
||||
if self.stable:
|
||||
for svc in other_services:
|
||||
if svc[name] in ['mysql', 'mongodb', 'rabbitmq-server']:
|
||||
location = 'lp:charms/{}'.format(svc[name])
|
||||
temp = 'lp:charms/{}'
|
||||
svc['location'] = temp.format(svc['name'])
|
||||
else:
|
||||
for svc in other_services:
|
||||
if svc['name'] in base_charms:
|
||||
temp = 'lp:charms/{}'
|
||||
svc['location'] = temp.format(svc['name'])
|
||||
else:
|
||||
temp = 'lp:~openstack-charmers/charms/trusty/{}/next'
|
||||
location = temp.format(svc[name])
|
||||
updated_services.append(svc + (location,))
|
||||
other_services = updated_services
|
||||
temp = 'lp:~openstack-charmers/charms/{}/{}/next'
|
||||
svc['location'] = temp.format(self.current_next,
|
||||
svc['name'])
|
||||
return other_services
|
||||
|
||||
def _add_services(self, this_service, other_services):
|
||||
"""Add services to the deployment and set openstack-origin/source."""
|
||||
name = 0
|
||||
other_services = self._determine_branch_locations(other_services)
|
||||
|
||||
super(OpenStackAmuletDeployment, self)._add_services(this_service,
|
||||
other_services)
|
||||
|
||||
services = other_services
|
||||
services.append(this_service)
|
||||
use_source = ['mysql', 'mongodb', 'rabbitmq-server', 'ceph']
|
||||
use_source = ['mysql', 'mongodb', 'rabbitmq-server', 'ceph',
|
||||
'ceph-osd', 'ceph-radosgw']
|
||||
|
||||
if self.openstack:
|
||||
for svc in services:
|
||||
if svc[name] not in use_source:
|
||||
if svc['name'] not in use_source:
|
||||
config = {'openstack-origin': self.openstack}
|
||||
self.d.configure(svc[name], config)
|
||||
self.d.configure(svc['name'], config)
|
||||
|
||||
if self.source:
|
||||
for svc in services:
|
||||
if svc[name] in use_source:
|
||||
if svc['name'] in use_source:
|
||||
config = {'source': self.source}
|
||||
self.d.configure(svc[name], config)
|
||||
self.d.configure(svc['name'], config)
|
||||
|
||||
def _configure_services(self, configs):
|
||||
"""Configure all of the services."""
|
||||
|
|
Loading…
Reference in New Issue