~ibmcharmers/interface-ibm-db2/trunk

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