From 43aaaaa1190d7f5e808c906e82abcf116e0508c9 Mon Sep 17 00:00:00 2001 From: Alex Schultz Date: Tue, 28 Jul 2020 14:02:53 -0600 Subject: [PATCH] Switch 55-heat-config to async If while a task is executing the ssh connection is severed, ansible will automagically rerun the command under the covers. This causes problems for long running 55-heat-config tasks as first process may have written out the deployed json but not the notify.json that we use use to determine if it was successful or not. This can lead to a failure because the process either never runs to completion. This change switches the execution to always be run async to ensure that ssh interruptions won't cause inconsistent failures. We previously saw a similar issue when invoking the NetworkDeployments using this process. We've moved the network configurations to the NetworkConfig task in THT/common/deploy-steps.j2 but this code is still used to invoked with OS::Heat::SoftwareDeploymentGroup Change-Id: Ic911bb6d999caf2dc4afd4cff3d44047c03dc8e4 Related-Bug: #1792343 Closes-Bug: #1887846 --- tripleo_common/templates/deployments.yaml | 32 ++--------------------- 1 file changed, 2 insertions(+), 30 deletions(-) diff --git a/tripleo_common/templates/deployments.yaml b/tripleo_common/templates/deployments.yaml index 3eddbf4c6..10b3c2e5e 100644 --- a/tripleo_common/templates/deployments.yaml +++ b/tripleo_common/templates/deployments.yaml @@ -178,46 +178,18 @@ become: true when: (force | bool) -- name: Set fact for async_deployment - set_fact: - use_async_deployment: "{{ (async_deployment | default(False)) or (item == 'NetworkDeployment') }}" - -- name: "Run deployment {{ item }}" - shell: | - /usr/libexec/os-refresh-config/configure.d/55-heat-config - timeout 20 bash -c -- 'while [ ! -f /var/lib/heat-config/deployed/{{ deployment_uuid }}.notify.json ]; do sleep 1; done' - exit $(jq .deploy_status_code /var/lib/heat-config/deployed/{{ deployment_uuid }}.notify.json) - become: true - environment: - HEAT_SHELL_CONFIG: /var/lib/heat-config/tripleo-config-download/{{ item ~ '-' ~ deployment_uuid }} - register: deployment_sync_result - ignore_errors: yes - when: not use_async_deployment|bool - - name: "Run async deployment {{ item }}" shell: | /usr/libexec/os-refresh-config/configure.d/55-heat-config - timeout 20 bash -c -- 'while [ ! -f /var/lib/heat-config/deployed/{{ deployment_uuid }}.notify.json ]; do sleep 1; done' exit $(jq .deploy_status_code /var/lib/heat-config/deployed/{{ deployment_uuid }}.notify.json) become: true environment: HEAT_SHELL_CONFIG: /var/lib/heat-config/tripleo-config-download/{{ item ~ '-' ~ deployment_uuid }} register: deployment_async_result ignore_errors: yes - when: use_async_deployment|bool - async: "{{ async_timeout | default(300) }}" + async: "{{ async_timeout | default(1800) }}" poll: "{{ async_poll | default(3) }}" -- name: "Output for sync deployment {{ item }}" - debug: - msg: - - stderr: "{{ deployment_sync_result.stderr.split('\n') }}" - - status_code: "{{ deployment_sync_result.rc }}" - tags: - - output - failed_when: deployment_sync_result.rc != 0 - when: not ansible_check_mode|bool and not use_async_deployment|bool - - name: "Output for async deployment {{ item }}" debug: msg: @@ -226,7 +198,7 @@ tags: - output failed_when: deployment_async_result.rc != 0 - when: not ansible_check_mode|bool and use_async_deployment|bool + when: not ansible_check_mode|bool - name: "Check-mode for Run deployment {{ item }} (changed status indicates deployment would run)" stat: