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