Allow specifying ssh key file for compute nodes and network controller
[osm/openvim.git] / charm / openvim / interface-openvim-compute / requires.py
1 ##
2 # Copyright 2016
3 # This file is part of openvim
4 #
5 # Licensed under the Apache License, Version 2.0 (the "License"); you may
6 # not use this file except in compliance with the License. You may obtain
7 # a copy of the License at
8 #
9 # http://www.apache.org/licenses/LICENSE-2.0
10 #
11 # Unless required by applicable law or agreed to in writing, software
12 # distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
13 # WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
14 # License for the specific language governing permissions and limitations
15 # under the License.
16 #
17 ##
18
19 from charms.reactive import hook
20 from charms.reactive import RelationBase
21 from charms.reactive import scopes
22
23
24 class RequiresOpenVIMCompute(RelationBase):
25 scope = scopes.UNIT
26
27 @hook('{requires:openvim-compute}-relation-{joined,changed}')
28 def changed(self):
29 self.set_state('{relation_name}.connected')
30 if self.ready_to_ssh():
31 self.set_state('{relation_name}.available')
32
33 @hook('{requires:openvim-compute}-relation-{broken,departed}')
34 def departed(self):
35 self.remove_state('{relation_name}.connected')
36 self.remove_state('{relation_name}.available')
37
38 def send_ssh_key(self, key):
39 for c in self.conversations():
40 c.set_remote('ssh_key', key)
41
42 def authorized_nodes(self):
43 return [{
44 'user': c.get_remote('user'),
45 'address': c.get_remote('private-address'),
46 } for c in self.conversations() if c.get_remote('ssh_key_installed')]
47
48 def ready_to_ssh(self):
49 return len(self.authorized_nodes()) > 0