3
from charmhelpers.core.hookenv import (
12
from charms.reactive import RelationBase
13
from charms.reactive import hook
14
from charms.reactive import scopes
16
from charms.layer.jenkins.credentials import Credentials
17
from charms.layer.jenkins.plugins import Plugins
18
from charms.layer.jenkins.api import Api
21
class JenkinsMaster(RelationBase):
24
@hook("{provides:jenkins-extension}-relation-{joined}")
26
"""Indicate the relation is connected and transmit our credentials."""
27
log("Updating extension interface with up-to-date data.")
29
# Fish out the current zuul address from any relation we have.
31
for rid in relation_ids("zuul"):
32
for unit in related_units(rid):
33
zuul_address = relation_get(
34
rid=rid, unit=unit, attribute="private-address")
37
credentials = Credentials()
38
for rid in relation_ids("extension"):
40
"admin_username": credentials.username(),
41
"admin_password": credentials.password(),
42
"jenkins_url": "http://%s:8080" % unit_get("private-address"),
43
"jenkins-admin-user": credentials.username(),
44
"jenkins-token": credentials.token(),
46
relation_set(relation_id=rid, relation_settings=relation_settings)
48
relation_set(relation_id=rid, zuul_address=zuul_address)
50
self.set_state("{relation_name}.connected")
52
@hook("{provides:jenkins-extension}-relation-{changed}")
54
"""Install optional plugins."""
55
# extension subordinates may request the principle service install
56
# specified jenkins plugins
57
log("Installing required plugins as requested by jenkins-extension "
60
plugins.install(relation_get("required_plugins"))
63
api.wait() # Wait for the service to be fully up