diff options
Diffstat (limited to 'src/caas/services/dnsservice.py')
| -rw-r--r-- | src/caas/services/dnsservice.py | 60 |
1 files changed, 60 insertions, 0 deletions
diff --git a/src/caas/services/dnsservice.py b/src/caas/services/dnsservice.py new file mode 100644 index 0000000..bd8c388 --- /dev/null +++ b/src/caas/services/dnsservice.py @@ -0,0 +1,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 + |
