from .helpers import Jinja from .ansibleservice import AnsibleService from ..models import IcingaBmc from django.conf import settings import logging logger = logging.getLogger("caas") class BmcService(AnsibleService): def __init__(self, target, git, branch, playbook, zmq): super().__init__("bmc", target, git, branch, playbook, zmq) def deploy(self): logger.debug("%s Enter" % self.target) try: bmc_kwargs = {"ilo_host_address": self.target} bmc = IcingaBmc.objects.get(**bmc_kwargs) except IcingaBmc.DoesNotExist: errmsg = "%s FAILED: while running BMC playbook: failed to look up BMC" % self.target logger.error(errmsg) return -1 # The ansible target is the hostname, but until now we only had the ilo IP. self.target = bmc.ilo_hostname # host_vars file hostvars_config = {"bmc_ip": bmc.ilo_host_address, "bmc_password_admin_default": bmc.bmc_password_admin_default, "bmc_password_admin": bmc.bmc_password_admin, "bmc_username": bmc.bmc_username, "bmc_password": bmc.bmc_password, "dns_nameservers": (" ").join(settings.DNS_SERVERS), "syslog_server": settings.SYSLOG_SERVER, "syslog_server_port": settings.SYSLOG_SERVER_PORT, "ntp_servers": (" ").join(settings.NTP_SERVERS), "middleware_endpoint": settings.CAAS_MIDDLEWARE_ENDPOINT, "middleware_username": settings.CAAS_MIDDLEWARE_USERNAME, "middleware_password": settings.CAAS_MIDDLEWARE_PASSWORD} hostvars_content = Jinja.render("bmc_host_vars.j2", **hostvars_config) hostvars = self.target # inventory file inventory_config = {"vendor_name": bmc.vendor_name, "target": self.target} inventory_content = Jinja.render("bmc_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