diff options
Diffstat (limited to 'ironic/drivers/modules/agent_client.py')
-rw-r--r-- | ironic/drivers/modules/agent_client.py | 24 |
1 files changed, 22 insertions, 2 deletions
diff --git a/ironic/drivers/modules/agent_client.py b/ironic/drivers/modules/agent_client.py index 090007d8f..4cb349509 100644 --- a/ironic/drivers/modules/agent_client.py +++ b/ironic/drivers/modules/agent_client.py @@ -207,15 +207,35 @@ class AgentClient(object): 'res': result.get('command_result'), 'error': error, 'code': response.status_code}) - if response.status_code >= http_client.BAD_REQUEST: + faultstring = result.get('faultstring') + if 'agent_token' in faultstring and agent_token: + # NOTE(TheJulia) We have an agent that is out of date. + # which means I guess grenade updates the agent image + # for upgrades... :( + if not CONF.require_agent_token: + LOG.warning('Agent command %(method)s for node %(node)s ' + 'failed. Expected 2xx HTTP status code, got ' + '%(code)d. Error suggests an older ramdisk ' + 'which does not support ``agent_token``. ' + 'Removing the token for the next retry.', + {'method': method, 'node': node.uuid, + 'code': response.status_code}) + i_info = node.driver_internal_info + i_info.pop('agent_secret_token') + node.driver_internal_info = i_info + node.save() + msg = ('Node {} does not appear to support ' + 'agent_token and it is not required. Next retry ' + 'will be without the token.').format(node.uuid) + raise exception.AgentConnectionFailed(reason=msg) LOG.error('Agent command %(method)s for node %(node)s failed. ' 'Expected 2xx HTTP status code, got %(code)d.', {'method': method, 'node': node.uuid, 'code': response.status_code}) raise exception.AgentAPIError(node=node.uuid, status=response.status_code, - error=result.get('faultstring')) + error=faultstring) self._raise_if_typeerror(result, node, method) |