[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)
|
n, update_name=False)
|
||||||
|
|
||||||
if machine is not None:
|
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':
|
if machine.status_name == 'Ready':
|
||||||
msg = "Located node %s in MaaS, starting interface configuration" % (
|
msg = "Located node %s in MaaS, starting interface configuration" % (
|
||||||
n.name)
|
n.name)
|
||||||
|
@ -1327,26 +1345,20 @@ class ApplyNodePlatform(BaseMaasAction):
|
||||||
self.logger.info(
|
self.logger.info(
|
||||||
"Configuring kernel parameters for node %s" % (n.name))
|
"Configuring kernel parameters for node %s" % (n.name))
|
||||||
|
|
||||||
if node_kp_tag is None:
|
if node_kp_tag:
|
||||||
msg = "Creating kernel_params tag for node %s: %s" % (
|
node_kp_tag.delete()
|
||||||
n.name, kp_string)
|
|
||||||
self.logger.debug(msg)
|
msg = "Creating kernel_params tag for node %s: %s" % (
|
||||||
node_kp_tag = maas_tag.Tag(
|
n.name, kp_string)
|
||||||
self.maas_client,
|
self.logger.debug(msg)
|
||||||
name="%s_kp" % (n.name),
|
node_kp_tag = maas_tag.Tag(
|
||||||
kernel_opts=kp_string)
|
self.maas_client,
|
||||||
node_kp_tag = tag_list.add(node_kp_tag)
|
name="%s_kp" % (n.name),
|
||||||
node_kp_tag.apply_to_node(machine.resource_id)
|
kernel_opts=kp_string)
|
||||||
self.task.add_status_msg(
|
node_kp_tag = tag_list.add(node_kp_tag)
|
||||||
msg=msg, error=False, ctx=n.name, ctx_type='node')
|
node_kp_tag.apply_to_node(machine.resource_id)
|
||||||
else:
|
self.task.add_status_msg(
|
||||||
msg = "Updating tag %s for node %s: %s" % (
|
msg=msg, error=False, ctx=n.name, ctx_type='node')
|
||||||
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')
|
|
||||||
|
|
||||||
msg = "Applied kernel parameters to node %s" % n.name
|
msg = "Applied kernel parameters to node %s" % n.name
|
||||||
self.logger.info(msg)
|
self.logger.info(msg)
|
||||||
|
|
|
@ -202,6 +202,24 @@ class Machine(model_base.ResourceBase):
|
||||||
self.logger.error(msg)
|
self.logger.error(msg)
|
||||||
raise errors.DriverError(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):
|
def commission(self, debug=False):
|
||||||
"""Start the MaaS commissioning process.
|
"""Start the MaaS commissioning process.
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue