summaryrefslogtreecommitdiff
path: root/src/caas/services/bmcservice.py
blob: 43fdb51ba2c7695217e671f80f3ed2a9dd0a1c94 (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
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