From c88b9a904c1b18005a9559258d8cbb3697286565 Mon Sep 17 00:00:00 2001 From: Liam Young Date: Sat, 16 Jan 2016 16:22:51 +0000 Subject: [PATCH] Update --- provides.py | 2 +- requires.py | 52 ++++++++++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 53 insertions(+), 1 deletion(-) create mode 100644 requires.py diff --git a/provides.py b/provides.py index 19558de..f62616d 100644 --- a/provides.py +++ b/provides.py @@ -21,7 +21,7 @@ from charms.reactive.bus import get_states from charmhelpers.core import hookenv -class DNSBackendProvides(RelationBase): +class BindRNDCProvides(RelationBase): scope = scopes.UNIT @hook('{provides:bind-rndc}-relation-joined') diff --git a/requires.py b/requires.py new file mode 100644 index 0000000..040347b --- /dev/null +++ b/requires.py @@ -0,0 +1,52 @@ +#!/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 BindRNDCRequires(RelationBase): + scope = scopes.GLOBAL + + # These remote data fields will be automatically mapped to accessors + # with a basic documentation string provided. + auto_accessors = ['algorithm', 'secret'] + + @hook('{requires:bind-rndc}-relation-joined') + def joined(self): + self.set_state('{relation_name}.connected') + + @hook('{requires:bind-rndc}-relation-changed') + def changed(self): + self.set_state('{relation_name}.connected') + if self.data_complete(): + self.set_state('{relation_name}.available') + + @hook('{requires:bind-rndc}-relation-{broken,departed}') + def departed_or_broken(self): + self.remove_state('{relation_name}.connected') + if not self.data_complete(): + self.remove_state('{relation_name}.available') + + def data_complete(self): + """ + Get the connection string, if available, or None. + """ + data = { + 'algorithm': self.algorithm(), + 'secret': self.secret(), + } + if all(data.values()): + return True + return False