[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
This commit is contained in:
parent
b628a1bfce
commit
8d2973081d
|
@ -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)
|
||||
|
|
|
@ -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.
|
||||
|
||||
|
|
Loading…
Reference in New Issue