From 8d2973081da7eeb35775cd4dca012091248f9cc7 Mon Sep 17 00:00:00 2001 From: Scott Hussey Date: Thu, 15 Mar 2018 09:48:54 -0500 Subject: [PATCH] [Fix] Fix two issues with redeploy - The second time a server deployment is attempted, the tag providing kernel parameters wasn't applied. Change the logic so that the tag is recreated. - If a node is found in 'Failed deployment' status, release it such that it can be retried. Change-Id: I145f77458741caa0358887829c1209e25db5d9b1 --- .../drivers/node/maasdriver/actions/node.py | 52 ++++++++++++------- .../drivers/node/maasdriver/models/machine.py | 18 +++++++ 2 files changed, 50 insertions(+), 20 deletions(-) diff --git a/drydock_provisioner/drivers/node/maasdriver/actions/node.py b/drydock_provisioner/drivers/node/maasdriver/actions/node.py index edb3725f..1442ae1d 100644 --- a/drydock_provisioner/drivers/node/maasdriver/actions/node.py +++ b/drydock_provisioner/drivers/node/maasdriver/actions/node.py @@ -957,6 +957,24 @@ class ApplyNodeNetworking(BaseMaasAction): n, update_name=False) if machine is not None: + if machine.status_name.startswith('Failed Dep'): + msg = ("Node %s has failed deployment, releasing to try again." % n.name) + self.logger.debug(msg) + try: + machine.release() + machine.refresh() + except errors.DriverError as ex: + msg = ("Node %s could not be released, skipping deployment." % n.name) + self.logger.info(msg) + self.task.add_status_msg( + msg=msg, error=True, ctx=n.name, ctx_type='node') + self.task.failure(focus=n.name) + continue + msg = ("Released failed node %s to retry deployment." % n.name) + self.logger.info(msg) + self.task.add_status_msg( + msg=msg, error=False, ctx=n.name, ctx_type='node') + if machine.status_name == 'Ready': msg = "Located node %s in MaaS, starting interface configuration" % ( n.name) @@ -1327,26 +1345,20 @@ class ApplyNodePlatform(BaseMaasAction): self.logger.info( "Configuring kernel parameters for node %s" % (n.name)) - if node_kp_tag is None: - msg = "Creating kernel_params tag for node %s: %s" % ( - n.name, kp_string) - self.logger.debug(msg) - node_kp_tag = maas_tag.Tag( - self.maas_client, - name="%s_kp" % (n.name), - kernel_opts=kp_string) - node_kp_tag = tag_list.add(node_kp_tag) - node_kp_tag.apply_to_node(machine.resource_id) - self.task.add_status_msg( - msg=msg, error=False, ctx=n.name, ctx_type='node') - else: - msg = "Updating tag %s for node %s: %s" % ( - node_kp_tag.resource_id, n.name, kp_string) - node_kp_tag.kernel_opts = kp_string - node_kp_tag.update() - self.logger.debug(msg) - self.task.add_status_msg( - msg=msg, error=False, ctx=n.name, ctx_type='node') + if node_kp_tag: + node_kp_tag.delete() + + msg = "Creating kernel_params tag for node %s: %s" % ( + n.name, kp_string) + self.logger.debug(msg) + node_kp_tag = maas_tag.Tag( + self.maas_client, + name="%s_kp" % (n.name), + kernel_opts=kp_string) + node_kp_tag = tag_list.add(node_kp_tag) + node_kp_tag.apply_to_node(machine.resource_id) + self.task.add_status_msg( + msg=msg, error=False, ctx=n.name, ctx_type='node') msg = "Applied kernel parameters to node %s" % n.name self.logger.info(msg) diff --git a/drydock_provisioner/drivers/node/maasdriver/models/machine.py b/drydock_provisioner/drivers/node/maasdriver/models/machine.py index c833603d..c00e887a 100644 --- a/drydock_provisioner/drivers/node/maasdriver/models/machine.py +++ b/drydock_provisioner/drivers/node/maasdriver/models/machine.py @@ -202,6 +202,24 @@ class Machine(model_base.ResourceBase): self.logger.error(msg) raise errors.DriverError(msg) + def release(self, erase_disk=False): + """Release a node so it can be redeployed. + + :param erase_disk: If true, the local disks on the machine will be quick wiped + """ + url = self.interpolate_url() + + options = {'erase': erase_disk} + + resp = self.api_client.post(url, op='release', files=options) + + if not resp.ok: + brief_msg = ("Error releasing node, received HTTP %s from MaaS" % + resp.status_code) + self.logger.error(brief_msg) + self.logger.debug("MaaS response: %s" % resp.text) + raise errors.DriverError(brief_msg) + def commission(self, debug=False): """Start the MaaS commissioning process.