1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
|
from charms.reactive import hook
from charms.reactive import RelationBase
from charms.reactive import scopes
class db2Provides(RelationBase):
# Every unit connecting will get the same information
scope = scopes.SERVICE
# convenient way to provide accessor methods
auto_accessors = ['db2_path', 'db2_port']
@hook('{provides:db2}-relation-joined')
def joined(self):
conversation = self.conversation()
conversation.remove_state('{relation_name}.departed')
conversation.set_state('{relation_name}.connected')
@hook('{provides:db2}-relation-changed')
def changed(self):
conversation = self.conversation()
conversation.remove_state('{relation_name}.departed')
conversation.set_state('{relation_name}.connected')
if str(conversation.get_remote('ssh_key')) != "None":
conversation.set_state('{relation_name}.ready')
@hook('{provides:db2}-relation-departed')
def departed(self):
conversation = self.conversation()
conversation.remove_state('{relation_name}.connected')
conversation.remove_state('{relation_name}.ready')
conversation.set_state('{relation_name}.departed')
def dismiss(self, service):
conversation = self.conversation(service)
conversation.remove_state('{relation_name}.departed')
def reset_states(self, service):
conversation = self.conversation(service)
conversation.remove_state('{relation_name}.connected')
conversation.remove_state('{relation_name}.departed')
conversation.remove_state('{relation_name}.ready')
def set_db_details(self, service, db2_path, db2_port, hostname,
dbusername, dbuserpw, db2_instance_name, dbs_created):
conversation = self.conversation(service)
conversation.set_remote(data={
'db2_ready': True,
'db2_path': db2_path,
'db2_port': db2_port,
'hostname': hostname,
'dbusername': dbusername,
'dbuserpw': dbuserpw,
'db2_instance_name': db2_instance_name,
'dbs_created': dbs_created,
})
def set_db_password(self, service, dbuserpw):
conversation = self.conversation(service)
conversation.set_local('dbuserpw', dbuserpw)
def get_db_password(self, service):
conversation = self.conversation(service)
return conversation.get_local('dbuserpw')
def set_sshconfigured(self, service):
conversation = self.conversation(service)
conversation.set_state('{relation_name}.sshconfigured')
def dismiss_sshconfigured(self, service):
conversation = self.conversation(service)
conversation.remove_state('{relation_name}.sshconfigured')
def get_sshkeys(self, service):
conversation = self.conversation(service)
return conversation.get_remote('ssh_key')
def get_dbnames(self, service):
conversation = self.conversation(service)
return conversation.get_remote('db_names')
def services(self):
"""
Return a list of services requesting databases.
"""
service = []
for conversation in self.conversations():
service.append(conversation.scope)
return service
|