summaryrefslogtreecommitdiff
path: root/src/caas/services/dnsservice.py
blob: bd8c3887261f8c6aafb78120f9472bdbcaf959ff (plain)
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
from django.conf import settings
from .helpers import Jinja, Hostname
from .ansibleservice import AnsibleService
from ..models import Server, Cluster
import logging


logger = logging.getLogger("caas")


class DnsService(AnsibleService):
    def __init__(self, target, git, branch, playbook, zmq):
        super().__init__("dns", target, git, branch, playbook, zmq)

    def deploy(self):
        logger.debug("%s Enter" % self.target)
        try:
            server_kwargs = {"ilo_host_address": self.target}
            server = Server.objects.get(**server_kwargs)
        except Server.DoesNotExist:
            errmsg = "%s FAILED: while running DNS playbook: failed to look up server" % self.target
            logger.error(errmsg)
            return -1
        try:
            cluster_kwargs = {"id": server.cluster.pk}
            cluster = Cluster.objects.get(**cluster_kwargs)
        except Cluster.DoesNotExist:
            errmsg = "%s FAILED: while running DNS playbook: failed to look up cluster" % self.target
            logger.error(errmsg)
            return -1
        server.oam_hostname = Hostname.make_oam_hostname(server.ilo_hostname)
        if cluster.oam_vip_hostname is None:
            cluster.oam_vip_hostname = Hostname.make_vip_hostname(server.ilo_hostname, cluster.cluster_name)
        cluster.save()
        server.save()
        # The ansible target is the ilo hostname, but until now we only had the ilo IP.
        self.target = server.ilo_hostname
        # host_vars file
        hostvars_config = {"ilo_hostname": server.ilo_hostname,
                           "ilo_host_address": server.ilo_host_address,
                           "oam_hostname": server.oam_hostname,
                           "oam_host_address": server.oam_host_address,
                           "oam_vip_hostname": cluster.oam_vip_hostname,
                           "oam_vip_address": cluster.oam_vip_address,
                           "cluster_name": cluster.cluster_name,
                           "dns_admin_endpoint": settings.DNS_ADMIN_ENDPOINT,
                           "dns_domain": settings.DNS_DOMAIN,
                           "infoblox_username": settings.INFOBLOX_USERNAME,
                           "infoblox_password": settings.INFOBLOX_PASSWORD}
        hostvars_content = Jinja.render("dns_host_vars.j2", **hostvars_config)
        hostvars = server.ilo_hostname
        # inventory file
        inventory_config = {"target": self.target}
        inventory_content = Jinja.render("dns_inventory.j2", **inventory_config)
        inventory = "%s.yaml" % self.target
        logger.debug("%s Sending playbook to queue" % self.target)
        self.run_playbook(inventory, inventory_content, hostvars, hostvars_content)
        logger.debug("%s Sent playbook to queue" % self.target)
        return 0