From 17c89a1d63b9ee0d9b117f49ee09d42212472fee Mon Sep 17 00:00:00 2001 From: James Page Date: Thu, 31 Aug 2017 15:18:43 +0100 Subject: [PATCH] Misc updates Tidy pep8 errors. Add gitreview configuration. Drop registration of default release selector - not required. Use default version of ceilometer charm in testing now that relevant changes have landed. Ensure sane default release is passed to charm superclass. Correct behaviour for disabling services based on any of the required states not being set. Add xenial-pike test target. Change-Id: Iefcdc1d4870572dae00e71e1b855fb1abf68a4e9 --- .gitreview | 4 ++++ src/README.md | 2 +- src/lib/charm/openstack/gnocchi.py | 11 ++++++++++- src/metadata.yaml | 1 - src/reactive/gnocchi_handlers.py | 15 ++++++++------- src/tests/basic_deployment.py | 20 ++++++++++---------- src/tests/gate-basic-xenial-pike | 24 ++++++++++++++++++++++++ 7 files changed, 57 insertions(+), 20 deletions(-) create mode 100644 .gitreview create mode 100755 src/tests/gate-basic-xenial-pike diff --git a/.gitreview b/.gitreview new file mode 100644 index 0000000..f5de3bd --- /dev/null +++ b/.gitreview @@ -0,0 +1,4 @@ +[gerrit] +host=review.openstack.org +port=29418 +project=openstack/charm-gnocchi.git diff --git a/src/README.md b/src/README.md index 989fc9c..6bb9c30 100644 --- a/src/README.md +++ b/src/README.md @@ -21,4 +21,4 @@ existing OpenStack cloud (which includes ceilometer): After re-configuration the Ceilometer API will be disabled - the Gnocchi REST API should be used to query information on resource, metrics and associated -measures. \ No newline at end of file +measures. diff --git a/src/lib/charm/openstack/gnocchi.py b/src/lib/charm/openstack/gnocchi.py index d338966..7d147bb 100644 --- a/src/lib/charm/openstack/gnocchi.py +++ b/src/lib/charm/openstack/gnocchi.py @@ -16,8 +16,8 @@ import os import collections import subprocess +import charmhelpers.contrib.openstack.utils as ch_utils import charmhelpers.contrib.network.ip as ch_ip -import charmhelpers.core.hookenv as hookenv import charmhelpers.core.host as host import charms_openstack.charm @@ -148,6 +148,15 @@ class GnocchiCharm(charms_openstack.charm.HAOpenStackCharm): adapters_class = GnocchiCharmRelationAdapaters + def __init__(self, release=None, **kwargs): + """Custom initialiser for class + If no release is passed, then the charm determines the release from the + ch_utils.os_release() function. + """ + if release is None: + release = ch_utils.os_release('python-keystonemiddleware') + super(GnocchiCharm, self).__init__(release=release, **kwargs) + def install(self): super(GnocchiCharm, self).install() # NOTE(jamespage): always pause gnocchi-api service as we force diff --git a/src/metadata.yaml b/src/metadata.yaml index 5cdaca6..0258466 100644 --- a/src/metadata.yaml +++ b/src/metadata.yaml @@ -12,7 +12,6 @@ tags: series: - xenial - trusty - - yakkety - zesty provides: metric-service: diff --git a/src/reactive/gnocchi_handlers.py b/src/reactive/gnocchi_handlers.py index d8b36a1..36bcb98 100644 --- a/src/reactive/gnocchi_handlers.py +++ b/src/reactive/gnocchi_handlers.py @@ -26,20 +26,21 @@ charm.use_defaults( 'identity-service.connected', 'identity-service.available', # enables SSL support 'config.changed', - 'update-status', - 'charm.default-select-release') + 'update-status') + +required_interfaces = ['coordinator-memcached.available', + 'shared-db.available', + 'identity-service.available', + 'storage-ceph.pools.available'] -@reactive.when_not('config.rendered') +@reactive.when_not_all(*required_interfaces) def disable_services(): with charm.provide_charm_instance() as charm_class: charm_class.disable_services() -@reactive.when('coordinator-memcached.available') -@reactive.when('shared-db.available') -@reactive.when('identity-service.available') -@reactive.when('storage-ceph.pools.available') +@reactive.when(*required_interfaces) def render_config(*args): """Render the configuration for charm when all the interfaces are available. diff --git a/src/tests/basic_deployment.py b/src/tests/basic_deployment.py index a3238c5..b1febe1 100644 --- a/src/tests/basic_deployment.py +++ b/src/tests/basic_deployment.py @@ -23,8 +23,8 @@ import charmhelpers.contrib.openstack.amulet.deployment as amulet_deployment import charmhelpers.contrib.openstack.amulet.utils as os_amulet_utils from gnocchiclient.v1 import client as gnocchi_client -from keystoneclient import session as keystone_session -from keystoneclient.auth import identity as keystone_identity +from keystoneauth1 import session as keystone_session +from keystoneauth1 import identity as keystone_identity # Use DEBUG to turn on debug logging u = os_amulet_utils.OpenStackAmuletUtils(os_amulet_utils.DEBUG) @@ -63,13 +63,10 @@ class GnocchiCharmDeployment(amulet_deployment.OpenStackAmuletDeployment): other_services = [ {'name': 'percona-cluster'}, {'name': 'mongodb'}, - # NOTE(jamespage): Drop when changes land into ceilometer/master - {'name': 'ceilometer', - 'location': 'cs:~james-page/ceilometer'}, + {'name': 'ceilometer'}, {'name': 'keystone'}, {'name': 'rabbitmq-server'}, - {'name': 'memcached', - 'location': 'cs:memcached'}, + {'name': 'memcached', 'location': 'cs:memcached'}, {'name': 'ceph-mon', 'units': 3}, {'name': 'ceph-osd', 'units': 3}, ] @@ -131,10 +128,13 @@ class GnocchiCharmDeployment(amulet_deployment.OpenStackAmuletDeployment): service_type='identity', interface='publicURL') - auth = keystone_identity.V2Token(auth_url=keystone_ep, - token=self.keystone.auth_token) + auth = keystone_identity.V2Password(auth_url=keystone_ep, + username='admin', + password='openstack', + tenant_name='admin') sess = keystone_session.Session(auth=auth) - self.gnocchi = gnocchi_client.Client(session=sess) + self.gnocchi = gnocchi_client.Client(session=sess, + endpoint_override=gnocchi_ep) def check_and_wait(self, check_command, interval=2, max_wait=200, desc=None): diff --git a/src/tests/gate-basic-xenial-pike b/src/tests/gate-basic-xenial-pike new file mode 100755 index 0000000..06db161 --- /dev/null +++ b/src/tests/gate-basic-xenial-pike @@ -0,0 +1,24 @@ +#!/usr/bin/env python +# +# Copyright 2016 Canonical Ltd +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +"""Amulet tests on a basic Gnocchi Charm deployment on xenial-pike.""" + +from basic_deployment import GnocchiCharmDeployment + +if __name__ == '__main__': + deployment = GnocchiCharmDeployment(series='xenial', + openstack='cloud:xenial-pike') + deployment.run_tests()