summaryrefslogtreecommitdiff
path: root/ironic/conductor
diff options
context:
space:
mode:
authorZuul <zuul@review.opendev.org>2020-06-19 13:50:27 +0000
committerGerrit Code Review <review@openstack.org>2020-06-19 13:50:27 +0000
commita2ad31ddef6a3e19f608a5ee0540f8bacc95ec92 (patch)
tree1034f8fa6e74728b48f17ead9a8ccfabd85d8ad9 /ironic/conductor
parentf266971b1301876c75d9400ae8e9ce4cab766998 (diff)
parent59091639249a5b65348c3699fdb79372c33b70fe (diff)
downloadironic-a2ad31ddef6a3e19f608a5ee0540f8bacc95ec92.tar.gz
Merge "Fix agent token and URL handling during fast-track deployment"
Diffstat (limited to 'ironic/conductor')
-rw-r--r--ironic/conductor/cleaning.py25
-rw-r--r--ironic/conductor/deployments.py9
-rw-r--r--ironic/conductor/manager.py4
-rw-r--r--ironic/conductor/utils.py49
4 files changed, 32 insertions, 55 deletions
diff --git a/ironic/conductor/cleaning.py b/ironic/conductor/cleaning.py
index e02abdb36..9a923abf7 100644
--- a/ironic/conductor/cleaning.py
+++ b/ironic/conductor/cleaning.py
@@ -213,19 +213,7 @@ def do_next_clean_step(task, step_index):
# Clear clean_step
node.clean_step = None
- driver_internal_info = node.driver_internal_info
- driver_internal_info['clean_steps'] = None
- driver_internal_info.pop('clean_step_index', None)
- driver_internal_info.pop('cleaning_reboot', None)
- driver_internal_info.pop('cleaning_polling', None)
-
- # Remove agent_url
- if not utils.fast_track_able(task):
- driver_internal_info.pop('agent_url', None)
- driver_internal_info.pop('agent_secret_token', None)
- driver_internal_info.pop('agent_secret_token_pregenerated', None)
-
- node.driver_internal_info = driver_internal_info
+ utils.wipe_cleaning_internal_info(task)
node.save()
try:
task.driver.deploy.tear_down_cleaning(task)
@@ -273,15 +261,6 @@ def do_node_clean_abort(task, step_name=None):
node.last_error = last_error
node.clean_step = None
- info = node.driver_internal_info
- # Clear any leftover metadata about cleaning
- info.pop('clean_step_index', None)
- info.pop('cleaning_reboot', None)
- info.pop('cleaning_polling', None)
- info.pop('skip_current_clean_step', None)
- info.pop('agent_url', None)
- info.pop('agent_secret_token', None)
- info.pop('agent_secret_token_pregenerated', None)
- node.driver_internal_info = info
+ utils.wipe_cleaning_internal_info(task)
node.save()
LOG.info(info_message)
diff --git a/ironic/conductor/deployments.py b/ironic/conductor/deployments.py
index 3bda75b23..75308482d 100644
--- a/ironic/conductor/deployments.py
+++ b/ironic/conductor/deployments.py
@@ -70,10 +70,6 @@ def start_deploy(task, manager, configdrive=None, event='deploy'):
:param event: event to process: deploy or rebuild.
"""
node = task.node
- # Record of any pre-existing agent_url should be removed
- # except when we are in fast track conditions.
- if not utils.is_fast_track(task):
- utils.remove_agent_url(node)
if event == 'rebuild':
# Note(gilliard) Clear these to force the driver to
@@ -127,8 +123,7 @@ def start_deploy(task, manager, configdrive=None, event='deploy'):
def do_node_deploy(task, conductor_id=None, configdrive=None):
"""Prepare the environment and deploy a node."""
node = task.node
- utils.wipe_deploy_internal_info(node)
- utils.del_secret_token(node)
+ utils.wipe_deploy_internal_info(task)
try:
if configdrive:
if isinstance(configdrive, dict):
@@ -308,7 +303,7 @@ def do_next_deploy_step(task, step_index, conductor_id):
# Finished executing the steps. Clear deploy_step.
node.deploy_step = None
- utils.wipe_deploy_internal_info(node)
+ utils.wipe_deploy_internal_info(task)
node.save()
_start_console_in_deploy(task)
diff --git a/ironic/conductor/manager.py b/ironic/conductor/manager.py
index b63d5412e..9cdf25558 100644
--- a/ironic/conductor/manager.py
+++ b/ironic/conductor/manager.py
@@ -1025,11 +1025,9 @@ class ConductorManager(base_manager.BaseConductorManager):
# But we do need to clear the instance-related fields.
node.instance_info = {}
node.instance_uuid = None
+ utils.wipe_deploy_internal_info(task)
driver_internal_info = node.driver_internal_info
- driver_internal_info.pop('agent_secret_token', None)
- driver_internal_info.pop('agent_secret_token_pregenerated', None)
driver_internal_info.pop('instance', None)
- driver_internal_info.pop('clean_steps', None)
driver_internal_info.pop('root_uuid_or_disk_id', None)
driver_internal_info.pop('is_whole_disk_image', None)
driver_internal_info.pop('deploy_boot_mode', None)
diff --git a/ironic/conductor/utils.py b/ironic/conductor/utils.py
index 35e2c94fc..4b994db86 100644
--- a/ironic/conductor/utils.py
+++ b/ironic/conductor/utils.py
@@ -444,11 +444,15 @@ def cleaning_error_handler(task, msg, tear_down_cleaning=True,
task.process_event('fail', target_state=target_state)
-def wipe_deploy_internal_info(node):
+def wipe_deploy_internal_info(task):
"""Remove temporary deployment fields from driver_internal_info."""
- info = node.driver_internal_info
- info.pop('agent_secret_token', None)
- info.pop('agent_secret_token_pregenerated', None)
+ info = task.node.driver_internal_info
+ if not fast_track_able(task):
+ info.pop('agent_secret_token', None)
+ info.pop('agent_secret_token_pregenerated', None)
+ # Remove agent_url since it will be re-asserted
+ # upon the next deployment attempt.
+ info.pop('agent_url', None)
# Clear any leftover metadata about deployment.
info['deploy_steps'] = None
info.pop('agent_cached_deploy_steps', None)
@@ -457,10 +461,24 @@ def wipe_deploy_internal_info(node):
info.pop('deployment_polling', None)
info.pop('skip_current_deploy_step', None)
info.pop('steps_validated', None)
- # Remove agent_url since it will be re-asserted
- # upon the next deployment attempt.
- info.pop('agent_url', None)
- node.driver_internal_info = info
+ task.node.driver_internal_info = info
+
+
+def wipe_cleaning_internal_info(task):
+ """Remove temporary cleaning fields from driver_internal_info."""
+ info = task.node.driver_internal_info
+ if not fast_track_able(task):
+ info.pop('agent_url', None)
+ info.pop('agent_secret_token', None)
+ info.pop('agent_secret_token_pregenerated', None)
+ info['clean_steps'] = None
+ info.pop('agent_cached_clean_steps', None)
+ info.pop('clean_step_index', None)
+ info.pop('cleaning_reboot', None)
+ info.pop('cleaning_polling', None)
+ info.pop('skip_current_clean_step', None)
+ info.pop('steps_validated', None)
+ task.node.driver_internal_info = info
def deploying_error_handler(task, logmsg, errmsg=None, traceback=False,
@@ -503,7 +521,7 @@ def deploying_error_handler(task, logmsg, errmsg=None, traceback=False,
# Clear deploy step; we leave the list of deploy steps
# in node.driver_internal_info for debugging purposes.
node.deploy_step = {}
- wipe_deploy_internal_info(node)
+ wipe_deploy_internal_info(task)
if cleanup_err:
node.last_error = cleanup_err
@@ -1047,19 +1065,6 @@ def add_secret_token(node, pregenerated=False):
node.driver_internal_info = i_info
-def del_secret_token(node):
- """Deletes the IPA agent secret token.
-
- Removes the agent token secret from the driver_internal_info field
- from the Node object.
-
- :param node: Node object
- """
- i_info = node.driver_internal_info
- i_info.pop('agent_secret_token', None)
- node.driver_internal_info = i_info
-
-
def is_agent_token_present(node):
"""Determines if an agent token is present upon a node.