Initial openvim v0.4.6 upload
[osm/openvim.git] / charm / openvim / interface-openvim-compute / requires.py
diff --git a/charm/openvim/interface-openvim-compute/requires.py b/charm/openvim/interface-openvim-compute/requires.py
new file mode 100644 (file)
index 0000000..86dd6e1
--- /dev/null
@@ -0,0 +1,31 @@
+from charms.reactive import hook
+from charms.reactive import RelationBase
+from charms.reactive import scopes
+
+
+class RequiresOpenVIMCompute(RelationBase):
+    scope = scopes.UNIT
+
+    @hook('{requires:openvim-compute}-relation-{joined,changed}')
+    def changed(self):
+        self.set_state('{relation_name}.connected')
+        if self.ready_to_ssh():
+            self.set_state('{relation_name}.available')
+
+    @hook('{requires:openvim-compute}-relation-{broken,departed}')
+    def departed(self):
+        self.remove_state('{relation_name}.connected')
+        self.remove_state('{relation_name}.available')
+
+    def send_ssh_key(self, key):
+        for c in self.conversations():
+            c.set_remote('ssh_key', key)
+
+    def authorized_nodes(self):
+        return [{
+            'user': c.get_remote('user'),
+            'address': c.get_remote('private-address'),
+        } for c in self.conversations() if c.get_remote('ssh_key_installed')]
+
+    def ready_to_ssh(self):
+        return len(self.authorized_nodes()) > 0