| # Copyright 2020 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. |
| from charms.reactive import Endpoint |
| from charms.reactive import when |
| from charms.reactive import set_flag, clear_flag |
| |
| |
| class KeystoneRequires(Endpoint): |
| @when("endpoint.{endpoint_name}.joined") |
| def _joined(self): |
| set_flag(self.expand_name("{endpoint_name}.joined")) |
| |
| @when("endpoint.{endpoint_name}.changed") |
| def _changed(self): |
| if len(self.keystones()) > 0: |
| set_flag(self.expand_name("{endpoint_name}.ready")) |
| else: |
| clear_flag(self.expand_name("{endpoint_name}.ready")) |
| |
| @when("endpoint.{endpoint_name}.departed") |
| def _departed(self): |
| set_flag(self.expand_name("{endpoint_name}.departed")) |
| clear_flag(self.expand_name("{endpoint_name}.joined")) |
| clear_flag(self.expand_name("{endpoint_name}.ready")) |
| |
| def keystones(self): |
| """ |
| Return Keystone Data: |
| [{ |
| 'host': <host>, |
| 'port': <port>, |
| 'keystone_db_password: <keystone_db_password>, |
| 'region_id: <region_id>, |
| 'admin_username: <admin_username>, |
| 'admin_password: <admin_password>, |
| 'admin_project_name: <admin_project_name>, |
| 'username: <username>, |
| 'password: <password>, |
| 'service: <service> |
| }] |
| """ |
| keystones = [] |
| for relation in self.relations: |
| for unit in relation.units: |
| data = { |
| "host": unit.received["host"], |
| "port": unit.received["port"], |
| "keystone_db_password": unit.received["keystone_db_password"], |
| "region_id": unit.received["region_id"], |
| "user_domain_name": unit.received["user_domain_name"], |
| "project_domain_name": unit.received["project_domain_name"], |
| "admin_username": unit.received["admin_username"], |
| "admin_password": unit.received["admin_password"], |
| "admin_project_name": unit.received["admin_project_name"], |
| "username": unit.received["username"], |
| "password": unit.received["password"], |
| "service": unit.received["service"], |
| } |
| if all(data.values()): |
| keystones.append(data) |
| return keystones |