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
|