Merge lp:~fnordahl/charm-helpers/keystone_configure_api_version into lp:charm-helpers

Proposed by Frode Nordahl
Status: Merged
Merged at revision: 687
Proposed branch: lp:~fnordahl/charm-helpers/keystone_configure_api_version
Merge into: lp:charm-helpers
Diff against target: 58 lines (+41/-0)
1 file modified
charmhelpers/contrib/openstack/amulet/utils.py (+41/-0)
To merge this branch: bzr merge lp:~fnordahl/charm-helpers/keystone_configure_api_version
Reviewer Review Type Date Requested Status
James Page Approve
Review via email: mp+316875@code.launchpad.net

Description of the change

Charms need a way to change preferred-api-version of Keystone in a deployment to perform their tests for a Keystone v3 enabled deployment.

Example usage:
    def test_42_dummy(self):
        se_rels = [
            (self.keystone_sentry, 'ceph-radosgw:identity-service'),
        ]
        u.keystone_configure_api_version(se_rels, self, 3)
        client = u.authenticate_keystone(
            self.keystone_sentry.info['public-address'],
            'admin', 'password', api_version=3,
            user_domain_name='admin_domain',
            domain_name='admin_domain'
        )
        u.log.debug('Keystone domains: {}'.format(client.domains.list()))
        u.log.debug('OK')

Note: The use of @retry_on_exception decorator requires addition of 'core' to include-list in charm-helpers-tests.yaml on sync of charm-helpers.

To post a comment you must log in.
Revision history for this message
James Page (james-page) :
review: Approve

Preview Diff

[H/L] Next/Prev Comment, [J/K] Next/Prev File, [N/P] Next/Prev Hunk
1=== modified file 'charmhelpers/contrib/openstack/amulet/utils.py'
2--- charmhelpers/contrib/openstack/amulet/utils.py 2017-02-06 17:34:50 +0000
3+++ charmhelpers/contrib/openstack/amulet/utils.py 2017-02-09 16:31:22 +0000
4@@ -38,6 +38,7 @@
5 from charmhelpers.contrib.amulet.utils import (
6 AmuletUtils
7 )
8+from charmhelpers.core.decorators import retry_on_exception
9
10 DEBUG = logging.DEBUG
11 ERROR = logging.ERROR
12@@ -304,6 +305,46 @@
13 self.log.debug('Checking if tenant exists ({})...'.format(tenant))
14 return tenant in [t.name for t in keystone.tenants.list()]
15
16+ @retry_on_exception(5, base_delay=10)
17+ def keystone_wait_for_propagation(self, sentry_relation_pairs,
18+ api_version):
19+ """Iterate over list of sentry and relation tuples and verify that
20+ api_version has the expected value.
21+
22+ :param sentry_relation_pairs: list of sentry, relation name tuples used
23+ for monitoring propagation of relation
24+ data
25+ :param api_version: api_version to expect in relation data
26+ :returns: None if successful. Raise on error.
27+ """
28+ for (sentry, relation_name) in sentry_relation_pairs:
29+ rel = sentry.relation('identity-service',
30+ relation_name)
31+ self.log.debug('keystone relation data: {}'.format(rel))
32+ if rel['api_version'] != str(api_version):
33+ raise Exception("api_version not propagated through relation"
34+ " data yet ('{}' != '{}')."
35+ "".format(rel['api_version'], api_version))
36+
37+ def keystone_configure_api_version(self, sentry_relation_pairs, deployment,
38+ api_version):
39+ """Configure preferred-api-version of keystone in deployment and
40+ monitor provided list of relation objects for propagation
41+ before returning to caller.
42+
43+ :param sentry_relation_pairs: list of sentry, relation tuples used for
44+ monitoring propagation of relation data
45+ :param deployment: deployment to configure
46+ :param api_version: value preferred-api-version will be set to
47+ :returns: None if successful. Raise on error.
48+ """
49+ self.log.debug("Setting keystone preferred-api-version: '{}'"
50+ "".format(api_version))
51+
52+ config = {'preferred-api-version': api_version}
53+ deployment.d.configure('keystone', config)
54+ self.keystone_wait_for_propagation(sentry_relation_pairs, api_version)
55+
56 def authenticate_cinder_admin(self, keystone_sentry, username,
57 password, tenant):
58 """Authenticates admin user with cinder."""

Subscribers

People subscribed via source and target branches