import tempfile import datetime from ..models import Cluster, WrInstallSchedule, WrBatch, Namespace from django.conf import settings from .helpers import Address, Jinja from .ansibleservice import AnsibleService import logging logger = logging.getLogger("caas") class WrInstallNowService(AnsibleService): """ target == ilo_host_address, later becomes cluster_name """ def __init__(self, ansible_queue, target, git, branch, playbook, zmq): super().__init__(ansible_queue, target, git, branch, playbook, zmq) def get_wrbatch(self): if self.ansible_queue == "wr": wrbatch_kwargs = {"ilo_host_address": self.target} elif self.ansible_queue in ("wr_remediate", "wr_wipedisk", "wr_ptp", "wr_ptp_config", "wr_unlock", "wr_wrap"): wrbatch_kwargs = {"cluster_name": self.target} elif self.ansible_queue == "wr_reboot": wrbatch_kwargs = {"namespace_name": self.target} try: wrbatch = WrBatch.objects.get(**wrbatch_kwargs) except WrBatch.DoesNotExist: logger.error("FAILED: while scheduling Wind River installation: cannot find wrbatch with identifier: %s" % self.target) raise return wrbatch def deploy(self): logger.debug("%s Enter" % self.target) wrbatch = self.get_wrbatch() self.do_deploy(wrbatch) def remediate(self): logger.debug("%s Enter" % self.target) wrbatch = self.get_wrbatch() self.do_deploy(wrbatch) def do_deploy(self, wrbatch): try: cluster_kwargs = {"pk": wrbatch.cluster_id} cluster = Cluster.objects.get(**cluster_kwargs) except Cluster.DoesNotExist: logger.error("FAILED: while scheduling Wind River installation: cannot find cluster associated with wrbatch with identifier: %s" % wrbatch.ilo_host_address) raise # one playbook per cluster self.target = cluster.cluster_name self.maint_window_p = wrbatch.maint_window_p # host_vars file hostvars_config = {"wr_vendor_name": wrbatch.vendor_name, "wr_region_name": cluster.cluster_name, "wr_bmc_controller_0_address": wrbatch.ilo_host_address, "wr_mgmt_controller_0_mac": wrbatch.pxe_mac_address, "wr_oam_floating_address": wrbatch.oam_vip_address, "wr_oam_node_0_address": wrbatch.oam_host_address, "wr_oam_gateway_address": wrbatch.oam_default_gateway, "wr_mgmt_start_address": wrbatch.mgmt_address_range_start, "wr_mgmt_end_address": wrbatch.mgmt_address_range_end, "wr_mgmt_gateway_address": wrbatch.mgmt_default_gateway, "wr_mgmt_subnet": Address.gateway_to_subnet(wrbatch.mgmt_subnet, numquads = 4), "wr_central_mgmt_start_address": wrbatch.parent_mgmt_address_range_start, "wr_central_mgmt_default_gateway": wrbatch.parent_mgmt_default_gateway, "wr_central_mgmt_subnet": Address.gateway_to_subnet(wrbatch.parent_mgmt_subnet, numquads = 4), "wr_host_vlan": wrbatch.host_vlan, "wr_oam_vlan": wrbatch.oam_vlan, "wr_mgmt_vlan": wrbatch.mgmt_vlan, "wr_bmc_username": wrbatch.bmc_username, "wr_bmc_password": wrbatch.bmc_password, "wr_dns_servers": settings.DNS_SERVERS, "wr_ntp_servers": settings.NTP_SERVERS, "wr_registry_server": settings.WR_REGISTRY_SERVER, "wr_registry_username": settings.WR_REGISTRY_USERNAME, "wr_registry_password": settings.WR_REGISTRY_PASSWORD, "wr_webdav_server": settings.WR_WEBDAV_SERVER, "wr_webdav_username": settings.WR_WEBDAV_USERNAME, "wr_webdav_password": settings.WR_WEBDAV_PASSWORD, "wr_middleware_endpoint": settings.CAAS_MIDDLEWARE_ENDPOINT, "wr_middleware_username": settings.CAAS_MIDDLEWARE_USERNAME, "wr_middleware_password": settings.CAAS_MIDDLEWARE_PASSWORD, "wr_docker_http_proxy": settings.WR_DOCKER_HTTP_PROXY, "wr_docker_https_proxy": settings.WR_DOCKER_HTTPS_PROXY, "wr_docker_no_proxy": settings.WR_DOCKER_NO_PROXY, "wr_ssl_ca_cert": settings.WR_SSL_CA_CERT} # revisit for NVPA-279 # if len(servers) > 1: # wr_config["wr_bmc_controller_1_address"] = servers[1].ilo_host_address # wr_config["wr_mgmt_controller_1_mac"] = servers[1].pxe_mac_address # wr_config["wr_oam_node_1_address"] = servers[1].oam_host_address hostvars_content = Jinja.render("wr_host_vars.j2", **hostvars_config) hostvars = wrbatch.oam_hostname # inventory file inventory_config = {"central_target": wrbatch.parent_cluster_name, "central_target_ip": wrbatch.parent_oam_vip_address, "remote_target": wrbatch.oam_hostname, "remote_target_ip": wrbatch.oam_vip_address} inventory_content = Jinja.render("wr_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, extra_args = {"clusterName": wrbatch.parent_cluster_name}) logger.debug("%s Sent playbook to queue" % self.target) return 0