From c41103ba702cd6fd85d8e4d4fe86caef81623f44 Mon Sep 17 00:00:00 2001 From: Jesse Pretorius Date: Wed, 31 Jan 2018 15:49:44 +0000 Subject: [PATCH] Improve console install and restart services appropriately The current implementation wipes out the novnc/spice directory every single time the playbook executes. While it does replace it afterwards it does not fire a notifier to make the service restart, resulting in the service failing. This patch makes the install process idempotent - it will only wipe out the directory if it does not look the way it is expected to look. It also fires the notifier to restart services if the git repo changes. This should ensure that novnc/spice restart properly on upgrades and that there are no changes/restarts for the service if the git SHA or software does not change. Closes-Bug: #1746523 Change-Id: Ic39f884016a6ba0498110267027783001a087a1c --- tasks/consoles/nova_console_novnc_install.yml | 32 ++++++++++++++++--- tasks/consoles/nova_console_spice_install.yml | 29 ++++++++++++++--- 2 files changed, 53 insertions(+), 8 deletions(-) diff --git a/tasks/consoles/nova_console_novnc_install.yml b/tasks/consoles/nova_console_novnc_install.yml index 2f2ffb22..ee5b8120 100644 --- a/tasks/consoles/nova_console_novnc_install.yml +++ b/tasks/consoles/nova_console_novnc_install.yml @@ -13,10 +13,28 @@ # See the License for the specific language governing permissions and # limitations under the License. -- name: Remove old git directory - file: - path: "/usr/share/novnc" - state: "absent" +- name: Remove existing directory if it is not a git repo or it is dirty + shell: | + EXIT_CODE=0 + FOLDER_PATH="/usr/share/novnc" + if [[ -e ${FOLDER_PATH} ]]; then + if [[ ! -d "${FOLDER_PATH}/.git" ]]; then + echo "${FOLDER_PATH} is not a git repo, deleting..." + EXIT_CODE=2 + elif test -n "$(cd ${FOLDER_PATH}; git status --porcelain)"; then + echo "${FOLDER_PATH} is a dirty git repo, deleting..." + EXIT_CODE=2 + fi + if [[ "${EXIT_CODE}" == "2" ]]; then + rm -rf ${FOLDER_PATH} + fi + fi + exit ${EXIT_CODE} + args: + executable: /bin/bash + register: existing_dir_cleanup + changed_when: existing_dir_cleanup.rc == 2 + failed_when: existing_dir_cleanup.rc not in [0,2] tags: - nova-novnc-git @@ -33,6 +51,9 @@ until: git_clone|success retries: 5 delay: 2 + notify: + - Manage LB + - Restart nova services tags: - nova-novnc-git @@ -52,6 +73,9 @@ delay: 2 when: - nova_get_venv | failed or nova_get_venv | skipped + notify: + - Manage LB + - Restart nova services tags: - nova-pip-packages diff --git a/tasks/consoles/nova_console_spice_install.yml b/tasks/consoles/nova_console_spice_install.yml index 855fa554..2a1c3a6a 100644 --- a/tasks/consoles/nova_console_spice_install.yml +++ b/tasks/consoles/nova_console_spice_install.yml @@ -13,10 +13,28 @@ # See the License for the specific language governing permissions and # limitations under the License. -- name: Remove old git directory - file: - path: "/usr/share/spice-html5" - state: "absent" +- name: Remove existing directory if it is not a git repo or it is dirty + shell: | + EXIT_CODE=0 + FOLDER_PATH="/usr/share/spice-html5" + if [[ -e ${FOLDER_PATH} ]]; then + if [[ ! -d "${FOLDER_PATH}/.git" ]]; then + echo "${FOLDER_PATH} is not a git repo, deleting..." + EXIT_CODE=2 + elif test -n "$(cd ${FOLDER_PATH}; git status --porcelain)"; then + echo "${FOLDER_PATH} is a dirty git repo, deleting..." + EXIT_CODE=2 + fi + if [[ "${EXIT_CODE}" == "2" ]]; then + rm -rf ${FOLDER_PATH} + fi + fi + exit ${EXIT_CODE} + args: + executable: /bin/bash + register: existing_dir_cleanup + changed_when: existing_dir_cleanup.rc == 2 + failed_when: existing_dir_cleanup.rc not in [0,2] tags: - nova-spice-git @@ -33,5 +51,8 @@ until: git_clone|success retries: 5 delay: 2 + notify: + - Manage LB + - Restart nova services tags: - nova-spice-git