3 # This file is part of openvim
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
9 # http://www.apache.org/licenses/LICENSE-2.0
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
19 from charms
.reactive
import hook
20 from charms
.reactive
import RelationBase
21 from charms
.reactive
import scopes
24 class RequiresOpenVIMCompute(RelationBase
):
27 @hook('{requires:openvim-compute}-relation-{joined,changed}')
29 self
.set_state('{relation_name}.connected')
30 if self
.ready_to_ssh():
31 self
.set_state('{relation_name}.available')
33 @hook('{requires:openvim-compute}-relation-{broken,departed}')
35 self
.remove_state('{relation_name}.connected')
36 self
.remove_state('{relation_name}.available')
38 def send_ssh_key(self
, key
):
39 for c
in self
.conversations():
40 c
.set_remote('ssh_key', key
)
42 def authorized_nodes(self
):
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')]
48 def ready_to_ssh(self
):
49 return len(self
.authorized_nodes()) > 0