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