commit 7910b9d7729b0e2a1d8302d693fd4c2a08ca29c7 Author: Alvaro UrĂ­a Date: Tue Mar 8 13:58:25 2016 +0100 requires keystone-admin:identity-admin diff --git a/copyright b/copyright new file mode 100644 index 0000000..5a49dcb --- /dev/null +++ b/copyright @@ -0,0 +1,21 @@ +Format: http://www.debian.org/doc/packaging-manuals/copyright-format/1.0 + +Files: * +Copyright: 2015, Canonical Ltd. +License: Apache-2.0 + +License: Apache-2.0 + 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. + . + On Debian-based systems the full text of the Apache version 2.0 license + can be found in `/usr/share/common-licenses/Apache-2.0'. diff --git a/interface.yaml b/interface.yaml new file mode 100644 index 0000000..2180178 --- /dev/null +++ b/interface.yaml @@ -0,0 +1,3 @@ +name: keystone-admin +summary: Interface for integrating with Keystone identity service +maintainer: Alvaro Uria diff --git a/requires.py b/requires.py new file mode 100644 index 0000000..28205ce --- /dev/null +++ b/requires.py @@ -0,0 +1,64 @@ +#!/usr/bin/python +# 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. + +from charms.reactive import RelationBase +from charms.reactive import hook +from charms.reactive import scopes + + +class KeystoneRequires(RelationBase): + scope = scopes.GLOBAL + + # These remote data fields will be automatically mapped to accessors + # with a basic documentation string provided. + + auto_accessors = ['private-address', 'service_host', 'service_protocol', + 'service_port', 'service_tenant', 'service_username', + 'service_password', 'service_tenant_id', 'auth_host', + 'auth_protocol', 'auth_port', 'admin_token', 'ssl_key', + 'ca_cert', 'ssl_cert', 'https_keystone', + 'ssl_cert_admin', 'ssl_cert_internal', + 'ssl_cert_public', 'ssl_key_admin', 'ssl_key_internal', + 'ssl_key_public'] + + @hook('{requires:keystone}-relation-{joined,changed}') + def changed(self): + conv = self.conversation() + self.kst_data = self.auth_data_complete(conv) + if self.kst_data: + conv.set_state('{relation_name}.available') + else: + conv.remove_state('{relation_name}.available') + + @hook('{requires:keystone}-relation-{broken,departed}') + def departed(self): + conv = self.conversation() + conv.remove_state('{relation_name}.available') + + def auth_data_complete(self, conv): + data = { + 'service_hostname': conv.get_remote('service_hostname'), + 'service_port': conv.get_remote('service_port'), + 'service_username': conv.get_remote('service_username'), + 'service_password': conv.get_remote('service_password'), + 'service_tenant_name': conv.get_remote('service_tenant_name') + } + if all(data.values()): + return data + return False + + def credentials(self): + """ + Returns a dict of keystone admin credentials + """ + return self.kst_data diff --git a/test-requirements.txt b/test-requirements.txt new file mode 100644 index 0000000..10dbed3 --- /dev/null +++ b/test-requirements.txt @@ -0,0 +1,3 @@ +flake8>=2.2.4,<=2.4.1 +os-testr>=0.4.1 +charm-tools diff --git a/tox.ini b/tox.ini new file mode 100644 index 0000000..c035f1a --- /dev/null +++ b/tox.ini @@ -0,0 +1,25 @@ +[tox] +envlist = lint,py27 +skipsdist = True + +[testenv] +setenv = VIRTUAL_ENV={envdir} + PYTHONHASHSEED=0 +install_command = + pip install --allow-unverified python-apt {opts} {packages} +commands = ostestr {posargs} + +[testenv:py27] +basepython = python2.7 +deps = -r{toxinidir}/test-requirements.txt + +[testenv:lint] +basepython = python2.7 +deps = -r{toxinidir}/test-requirements.txt +commands = flake8 {posargs} + +[testenv:venv] +commands = {posargs} + +[flake8] +ignore = E402,E226