From d213435a61072b0a0d559eecb30dcdf1167293ee Mon Sep 17 00:00:00 2001 From: James Slagle Date: Thu, 18 Oct 2018 16:11:32 -0400 Subject: [PATCH] Run NetworkDeployment as async task This commit adds special handling of the NetworkDeployment such that it will be run as an async task with ansible. This should prevent any issues where the network configuration causes the ssh connection to drop and the ansible task to either be unnecessarily retried or failed. Also added are three variables that can be used to control the async behavior: async_deployment: boolean which will toggle running all deployments in async mode. async_timeout: timeout in seconds to wait for async tasks async_poll: interval in seconds to check async task status These variables can only be set if running the config-download process manually, however a future patch could wire them up to Heat parameters. Change-Id: If1f35980a98a9015ca65f2c6a3e4db04725f1c10 Closes-Bug: #1792343 (cherry picked from commit ac4ac838e1a3eda32bbf8e9c0a61a89142688194) --- tripleo_common/templates/deployments.yaml | 40 +++++++++++++++++++---- 1 file changed, 34 insertions(+), 6 deletions(-) diff --git a/tripleo_common/templates/deployments.yaml b/tripleo_common/templates/deployments.yaml index e84336466..1f93a5bd0 100644 --- a/tripleo_common/templates/deployments.yaml +++ b/tripleo_common/templates/deployments.yaml @@ -135,6 +135,10 @@ 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 @@ -142,18 +146,42 @@ become: true environment: HEAT_SHELL_CONFIG: /var/lib/heat-config/tripleo-config-download/{{ item ~ '-' ~ deployment_uuid }} - register: deployment_result + register: deployment_sync_result ignore_errors: yes + when: not use_async_deployment -- name: "Output for {{ item }}" +- name: "Run async deployment {{ item }}" + shell: | + /usr/libexec/os-refresh-config/configure.d/55-heat-config + 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 + async: "{{ async_timeout | default(300) }}" + poll: "{{ async_poll | default(3) }}" + +- name: "Output for sync deployment {{ item }}" debug: msg: - - stderr: "{{ deployment_result.stderr.split('\n') }}" - - status_code: "{{ deployment_result.rc }}" + - stderr: "{{ deployment_sync_result.stderr.split('\n') }}" + - status_code: "{{ deployment_sync_result.rc }}" tags: - output - failed_when: deployment_result.rc != 0 - when: not ansible_check_mode + failed_when: deployment_sync_result.rc != 0 + when: not ansible_check_mode and not use_async_deployment + +- name: "Output for async deployment {{ item }}" + debug: + msg: + - stderr: "{{ deployment_async_result.stderr.split('\n') }}" + - status_code: "{{ deployment_async_result.rc }}" + tags: + - output + failed_when: deployment_async_result.rc != 0 + when: not ansible_check_mode and use_async_deployment - name: "Check-mode for Run deployment {{ item }} (changed status indicates deployment would run)" stat: