summaryrefslogtreecommitdiff
path: root/src/caas/services/nicfirmwareupgradenowservice.py
blob: d31fd7482ab8b1f29dfbba73e2bb08d0d6e76b4b (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
61
62
63
64
65
66
67
68
from .helpers import Jinja
from .ansibleservice import AnsibleService
from .firmwareservice import FirmwareService
from .wrinstallnowservice import WrInstallNowService
from ..models import FirmwareBatch, WrBatch, WrInstallSchedule, FirmwareUpgradeSchedule
from django.conf import settings
import logging
import datetime


logger = logging.getLogger("caas")


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

    def deploy(self):
        try:
            firmwarebatch_kwargs = {"ilo_host_address": self.target}
            firmwarebatch = FirmwareBatch.objects.get(**firmwarebatch_kwargs)
        except FirmwareBatch.DoesNotExist:
            errmsg = "FAILED: while checking Intel NIC firmware version: cannot find server with ilo_host_address: %s" % self.target
            logger.error(errmsg)
            return -1
        completed = datetime.datetime.utcnow()
        if firmwarebatch.intel_nic_firmware_version == settings.INTEL_NIC_FIRMWARE_VERSION:
            try:
                wrbatch_kwargs = {"ilo_host_address": firmwarebatch.ilo_host_address}
                wrbatch = WrBatch.objects.get(**wrbatch_kwargs)
            except WrBatch.DoesNotExist:
                logger.error("FAILED: while scheduling Wind River installation: cannot find wrbatch with identifier: %s" % icingabmc.ilo_host_address)
                raise
            try:
                wr_kwargs = {"cluster_id": wrbatch.cluster_id}
                wr = WrInstallSchedule.objects.get(**wr_kwargs)
            except WrInstallSchedule.DoesNotExist:
                return "FAILED: while performing Wind River playbook callback: cannot find WrInstallSchedule associated with the cluster with cluster_id: %s" % cluster.pk
            # never run an installation on top of a finished subcloud
            if wr.kirke_ticket_number is None:
                if wr.kirke_ticket_completed is None:
                    wr.kirke_ticket_completed = completed
                wr.date_completed = None
                wr.kirke_ticket_number = None
                wr.save()
                wrinstallnow = WrInstallNowService("wr",
                                                   firmwarebatch.ilo_host_address,
                                                   settings.ANSIBLE["wr"]["git"],
                                                   settings.ANSIBLE["wr"]["branch"],
                                                   settings.ANSIBLE["wr"]["playbook"],
                                                   settings.ANSIBLE["wr"]["zmq"])
                wrinstallnow.deploy()
        else:
            try:
                nic_kwargs = {"server_id": firmwarebatch.pk}
                nic = FirmwareUpgradeSchedule.objects.get(**nic_kwargs)
            except FirmwareUpgradeSchedule.DoesNotExist:
                logger.error("FAILED: while deploying Wind River installation: cannot find FirmwareUpgradeSchedule with ID: %s" % icingabmc.pk)
                raise
            if nic.kirke_ticket_completed is None:
                nic.kirke_ticket_completed = completed
            nic.date_completed = None
            nic.kirke_ticket_number = None
            nic.save()
            firmwareservice = FirmwareService(firmwarebatch.ilo_host_address, self.git, self.branch, self.playbook, self.zmq)
            firmwareservice.deploy()
            # The playbook callback will trigger the wr install
        return 0