From 70d42736498a27311b29f6b05e66112ba0c70b8a Mon Sep 17 00:00:00 2001 From: Alex Schultz Date: Tue, 17 Mar 2020 15:49:01 -0600 Subject: [PATCH] Add overcloud external upgrade run Adds tripleo_overcloud_external_upgrade_run to run the external upgrade process. Change-Id: Ia905d8ad948a5b034f7e28e66b1ce9ca3b5b8892 --- .../README.md | 62 +++++++++++++ .../defaults/main.yml | 19 ++++ .../meta/main.yml | 42 +++++++++ .../molecule/default/converge.yml | 91 +++++++++++++++++++ .../molecule/default/molecule.yml | 19 ++++ .../molecule/default/prepare.yml | 8 ++ .../tasks/main.yml | 54 +++++++++++ .../tests/inventory | 1 + .../tests/test.yml | 4 + zuul.d/molecule.yaml | 16 ++++ 10 files changed, 316 insertions(+) create mode 100644 roles/tripleo_overcloud_external_upgrade_run/README.md create mode 100644 roles/tripleo_overcloud_external_upgrade_run/defaults/main.yml create mode 100644 roles/tripleo_overcloud_external_upgrade_run/meta/main.yml create mode 100644 roles/tripleo_overcloud_external_upgrade_run/molecule/default/converge.yml create mode 100644 roles/tripleo_overcloud_external_upgrade_run/molecule/default/molecule.yml create mode 100644 roles/tripleo_overcloud_external_upgrade_run/molecule/default/prepare.yml create mode 100644 roles/tripleo_overcloud_external_upgrade_run/tasks/main.yml create mode 100644 roles/tripleo_overcloud_external_upgrade_run/tests/inventory create mode 100644 roles/tripleo_overcloud_external_upgrade_run/tests/test.yml diff --git a/roles/tripleo_overcloud_external_upgrade_run/README.md b/roles/tripleo_overcloud_external_upgrade_run/README.md new file mode 100644 index 0000000..28e148b --- /dev/null +++ b/roles/tripleo_overcloud_external_upgrade_run/README.md @@ -0,0 +1,62 @@ +tripleo_overcloud_external_upgrade_run +====================================== + +A role to execute an overcloud external upgrade. + +Requirements +------------ + +None. + +Role Variables +-------------- + +* `tripleo_overcloud_external_upgrade_run_debug`: (Boolean) Flag to print out the command that is run. Default: false +* `tripleo_overcloud_external_upgrade_run_extra_vars`: (List) List of key=value or yaml/json file ansible refernce. Default: [] +* `tripleo_overcloud_external_upgrade_run_home_dir`: (String) Home directory to where the command is run from. Default: "{{ ansible_env.HOME }}" +* `tripleo_overcloud_external_upgrade_run_log_combine`: (Boolean) Flag to enable captching stderr with stdout. Default: true +* `tripleo_overcloud_external_upgrade_run_log_output`: (Boolean) Flag to enable logging to a file. Since the output of this command can be large, it is not recommended to disable this. Default: true +* `tripleo_overcloud_external_upgrade_run_log`: (String) Path to a log file for the command output. Default: "{{ tripleo_overcloud_external_upgrade_run_home_dir }}/overcloud_external_upgrade_run.log" +* `tripleo_overcloud_external_upgrade_run_poll`: (Integer) Number of seconds to wait between each checks to see if the deployment command has completed. Default: 10 +* `tripleo_overcloud_external_upgrade_run_rc_file`: (String) (String) Path to the credential file to use. If `tripleo_rc_file` is defined, it will be the default. Default: "{{ ansible_env.HOME }}/stackrc" +* `tripleo_overcloud_external_upgrade_run_skip_tags`: (String) A string specifying the tag or a comma seperated list of tags to be passed as --skip-tags to the playbook. +* `tripleo_overcloud_external_upgrade_run_ssh_user`: (String) Username of user to be used as the ssh user. +* `tripleo_overcloud_external_upgrade_run_stack`: (String) Name of the stack to deploy. +* `tripleo_overcloud_external_upgrade_run_static_inventory`: (String) Path to an existing ansible inventory to use. +* `tripleo_overcloud_external_upgrade_run_tags`: (String) A string specifying the tag or comma sperate list of tags to be passed as --tags to the playbook. +* `tripleo_overcloud_external_upgrade_run_timeout`: (Integer) Number in seconds to wait for the ansible execution of the deployment command to finish. Default: 5700 + +NOTE: Please note that this command should be run against the undercloud so the +OS_CLOUD or rc file variables should be set to use the 'undercloud' when +calling this role. If you are not defining `tripleo_os_cloud` or `tripleo_rc_file`, +stackrc will be used by default. + +Output Variables +---------------- + +* `tripleo_overcloud_external_upgrade_run_output`: (String) The command standard output. +* `tripleo_overcloud_external_upgrade_run_result`: Ansible shell execution results + +Dependencies +------------ + +None. + +Example Playbook +---------------- + +Example overcloud external upgrade run execution playbook + +```yaml +- hosts: undercloud + gather_facts: true + tasks: + - name: Run overcloud external upgrade run + import_role: + name: tripleo_overcloud_external_upgrade_run +``` + +License +------- + +Apache-2.0 diff --git a/roles/tripleo_overcloud_external_upgrade_run/defaults/main.yml b/roles/tripleo_overcloud_external_upgrade_run/defaults/main.yml new file mode 100644 index 0000000..c627a4b --- /dev/null +++ b/roles/tripleo_overcloud_external_upgrade_run/defaults/main.yml @@ -0,0 +1,19 @@ +--- +# defaults file for tripleo_overcloud_external_upgrade_run +openstack_bin: openstack +tripleo_overcloud_external_upgrade_run_debug: false +tripleo_overcloud_external_upgrade_run_extra_vars: [] +tripleo_overcloud_external_upgrade_run_home_dir: "{{ ansible_env.HOME }}" +tripleo_overcloud_external_upgrade_run_log: "{{ tripleo_overcloud_external_upgrade_run_home_dir }}/overcloud_external_upgrade_run.log" +tripleo_overcloud_external_upgrade_run_log_combine: true +tripleo_overcloud_external_upgrade_run_log_output: true +tripleo_overcloud_external_upgrade_run_os_cloud: "{{ tripleo_os_cloud | default('') }}" +tripleo_overcloud_external_upgrade_run_playbook: [] +tripleo_overcloud_external_upgrade_run_poll: 10 +tripleo_overcloud_external_upgrade_run_rc_file: "{{ tripleo_rc_file | default(ansible_env.HOME ~ '/stackrc') }}" +tripleo_overcloud_external_upgrade_run_skip_tags: +tripleo_overcloud_external_upgrade_run_ssh_user: +tripleo_overcloud_external_upgrade_run_stack: +tripleo_overcloud_external_upgrade_run_static_inventory: +tripleo_overcloud_external_upgrade_run_tags: +tripleo_overcloud_external_upgrade_run_timeout: 5700 diff --git a/roles/tripleo_overcloud_external_upgrade_run/meta/main.yml b/roles/tripleo_overcloud_external_upgrade_run/meta/main.yml new file mode 100644 index 0000000..afff951 --- /dev/null +++ b/roles/tripleo_overcloud_external_upgrade_run/meta/main.yml @@ -0,0 +1,42 @@ +--- +# Copyright 2019 Red Hat, Inc. +# All Rights Reserved. +# +# Licensed under the Apache License, Version 2.0 (the "License"); you may +# not use this file except in compliance with the License. You may obtain +# a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT +# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the +# License for the specific language governing permissions and limitations +# under the License. + + +galaxy_info: + author: OpenStack + description: TripleO Operator Role -- tripleo_overcloud_external_upgrade_prepare + company: Red Hat + license: Apache-2.0 + min_ansible_version: 2.8 + # + # Provide a list of supported platforms, and for each platform a list of versions. + # If you don't wish to enumerate all versions for a particular platform, use 'all'. + # To view available platforms and versions (or releases), visit: + # https://galaxy.ansible.com/api/v1/platforms/ + # + platforms: + - name: CentOS + versions: + - 7 + - 8 + + galaxy_tags: + - tripleo + + +# List your role dependencies here, one per line. Be sure to remove the '[]' above, +# if you add dependencies to this list. +dependencies: [] diff --git a/roles/tripleo_overcloud_external_upgrade_run/molecule/default/converge.yml b/roles/tripleo_overcloud_external_upgrade_run/molecule/default/converge.yml new file mode 100644 index 0000000..8a6aef8 --- /dev/null +++ b/roles/tripleo_overcloud_external_upgrade_run/molecule/default/converge.yml @@ -0,0 +1,91 @@ +--- +- name: Converge + hosts: all + collections: + - tripleo.operator + vars: + openstack_bin: echo + tripleo_os_cloud: undercloud + tripleo_overcloud_external_upgrade_run_debug: true + tripleo_overcloud_external_upgrade_run_log_output: false + tripleo_overcloud_external_upgrade_run_log_combine: false + tripleo_overcloud_external_upgrade_run_poll: 1 + tasks: + + - name: "Include tripleo_overcloud_external_upgrade_run" + include_role: + name: "tripleo_overcloud_external_upgrade_run" + + - name: Check role + assert: + that: + - tripleo_overcloud_external_upgrade_run_output == "overcloud external-upgrade run" + + - name: Check parameter "tripleo_overcloud_external_upgrade_run_extra_vars" + include_role: + name: "tripleo_overcloud_external_upgrade_run" + vars: + tripleo_overcloud_external_upgrade_run_extra_vars: + - 'foo=bar' + - '@foobar.yaml' + + - name: Assert "tripleo_overcloud_external_upgrade_run_extra_vars" + assert: + that: + - tripleo_overcloud_external_upgrade_run_output == + "overcloud external-upgrade run --extra-vars foo=bar --extra-vars @foobar.yaml" + + - name: Check parameter "tripleo_overcloud_external_upgrade_run_stack" + include_role: + name: "tripleo_overcloud_external_upgrade_run" + vars: + tripleo_overcloud_external_upgrade_run_stack: test + + - name: Assert "tripleo_overcloud_external_upgrade_run_stack" + assert: + that: + - tripleo_overcloud_external_upgrade_run_output == "overcloud external-upgrade run --stack test" + + - name: Check parameter "tripleo_overcloud_external_upgrade_run_tags" + include_role: + name: "tripleo_overcloud_external_upgrade_run" + vars: + tripleo_overcloud_external_upgrade_run_tags: test + + - name: Assert "tripleo_overcloud_external_upgrade_run_tags" + assert: + that: + - tripleo_overcloud_external_upgrade_run_output == "overcloud external-upgrade run --tags test" + + - name: Check parameter "tripleo_overcloud_external_upgrade_run_skip_tags" + include_role: + name: "tripleo_overcloud_external_upgrade_run" + vars: + tripleo_overcloud_external_upgrade_run_skip_tags: test + + - name: Assert "tripleo_overcloud_external_upgrade_run_skip_tags" + assert: + that: + - tripleo_overcloud_external_upgrade_run_output == "overcloud external-upgrade run --skip-tags test" + + - name: Check parameter "tripleo_overcloud_external_upgrade_run_ssh_user" + include_role: + name: "tripleo_overcloud_external_upgrade_run" + vars: + tripleo_overcloud_external_upgrade_run_ssh_user: username + + - name: Assert "tripleo_overcloud_external_upgrade_run_ssh_user" + assert: + that: + - tripleo_overcloud_external_upgrade_run_output == "overcloud external-upgrade run --ssh-user username" + + - name: Check parameter "tripleo_overcloud_external_upgrade_run_static_inventory" + include_role: + name: "tripleo_overcloud_external_upgrade_run" + vars: + tripleo_overcloud_external_upgrade_run_static_inventory: /home/foo/inventory.yml + + - name: Assert "tripleo_overcloud_external_upgrade_run_static_inventory" + assert: + that: + - tripleo_overcloud_external_upgrade_run_output == "overcloud external-upgrade run --static-inventory /home/foo/inventory.yml" diff --git a/roles/tripleo_overcloud_external_upgrade_run/molecule/default/molecule.yml b/roles/tripleo_overcloud_external_upgrade_run/molecule/default/molecule.yml new file mode 100644 index 0000000..2841806 --- /dev/null +++ b/roles/tripleo_overcloud_external_upgrade_run/molecule/default/molecule.yml @@ -0,0 +1,19 @@ +--- +driver: + name: delegated + options: + managed: false + ansible_connection_options: + ansible_connection: local +log: true +platforms: + - name: instance +provisioner: + name: ansible +scenario: + name: default + test_sequence: + - prepare + - syntax + - converge + - verify diff --git a/roles/tripleo_overcloud_external_upgrade_run/molecule/default/prepare.yml b/roles/tripleo_overcloud_external_upgrade_run/molecule/default/prepare.yml new file mode 100644 index 0000000..63bb6ab --- /dev/null +++ b/roles/tripleo_overcloud_external_upgrade_run/molecule/default/prepare.yml @@ -0,0 +1,8 @@ +--- +- name: Prepare + hosts: all + tasks: + + - name: Include molecule prep + include_role: + name: test_molecule_prep diff --git a/roles/tripleo_overcloud_external_upgrade_run/tasks/main.yml b/roles/tripleo_overcloud_external_upgrade_run/tasks/main.yml new file mode 100644 index 0000000..504b99d --- /dev/null +++ b/roles/tripleo_overcloud_external_upgrade_run/tasks/main.yml @@ -0,0 +1,54 @@ +--- +# tasks file for tripleo_overcloud_external_upgrade_run +- name: Setup overcloud external-upgrade run facts + set_fact: + _upgrade_run_cmd: >- + {{ tripleo_overcloud_external_upgrade_run_os_cloud | ternary('', "source " ~ tripleo_overcloud_external_upgrade_run_rc_file ~ "; ") }} + {{ openstack_bin }} overcloud external-upgrade run + {{ tripleo_overcloud_external_upgrade_run_extra_vars | tripleo.operator.shell_arg_list('--extra-vars') }} + {{ tripleo_overcloud_external_upgrade_run_ssh_user | ternary('--ssh-user $UPDATE_SSH_USER', '') }} + {{ tripleo_overcloud_external_upgrade_run_tags | ternary('--tags $UPDATE_TAGS', '') }} + {{ tripleo_overcloud_external_upgrade_run_skip_tags | ternary('--skip-tags $UPDATE_SKIP_TAGS', '') }} + {{ tripleo_overcloud_external_upgrade_run_static_inventory | ternary('--static-inventory $UPDATE_STATIC_INVENTORY', '') }} + {{ tripleo_overcloud_external_upgrade_run_stack | ternary('--stack $UPDATE_STACK', '') }} + {{ tripleo_overcloud_external_upgrade_run_log_output | ternary((">" ~ tripleo_overcloud_external_upgrade_run_log), '') }} + {{ tripleo_overcloud_external_upgrade_run_log_combine | ternary("2>&1", '') }} + _upgrade_run_env: + OS_CLOUD: "{{ tripleo_overcloud_external_upgrade_run_os_cloud }}" + UPDATE_SSH_USER: "{{ tripleo_overcloud_external_upgrade_run_ssh_user }}" + UPDATE_TAGS: "{{ tripleo_overcloud_external_upgrade_run_tags | quote }}" + UPDATE_SKIP_TAGS: "{{ tripleo_overcloud_external_upgrade_run_skip_tags | quote }}" + UPDATE_STATIC_INVENTORY: "{{ tripleo_overcloud_external_upgrade_run_static_inventory }}" + UPDATE_STACK: "{{ tripleo_overcloud_external_upgrade_run_stack }}" + +- name: Preserve existing log file if exists + timestamp_file: + path: "{{ tripleo_overcloud_external_upgrade_run_log }}" + when: tripleo_overcloud_external_upgrade_run_log_output|bool + +- name: Show debug information + when: tripleo_overcloud_external_upgrade_run_debug|bool + block: + - name: Show the overcloud external-upgrade run command + debug: + var: _upgrade_run_cmd + + - name: Show the overcloud external-upgrade run environment + debug: + var: _upgrade_run_env + +- name: Overcloud external-upgrade run + shell: "{{ _upgrade_run_cmd }}" # noqa 305 + environment: "{{ _upgrade_run_env }}" + args: + chdir: "{{ tripleo_overcloud_external_upgrade_run_home_dir }}" + warn: false + register: tripleo_overcloud_external_upgrade_run_result + async: "{{ tripleo_overcloud_external_upgrade_run_timeout }}" + poll: "{{ tripleo_overcloud_external_upgrade_run_poll }}" + changed_when: false + when: not ansible_check_mode|bool + +- name: Set output fact + set_fact: + tripleo_overcloud_external_upgrade_run_output: "{{ tripleo_overcloud_external_upgrade_run_result.stdout }}" diff --git a/roles/tripleo_overcloud_external_upgrade_run/tests/inventory b/roles/tripleo_overcloud_external_upgrade_run/tests/inventory new file mode 100644 index 0000000..2fbb50c --- /dev/null +++ b/roles/tripleo_overcloud_external_upgrade_run/tests/inventory @@ -0,0 +1 @@ +localhost diff --git a/roles/tripleo_overcloud_external_upgrade_run/tests/test.yml b/roles/tripleo_overcloud_external_upgrade_run/tests/test.yml new file mode 100644 index 0000000..10a366f --- /dev/null +++ b/roles/tripleo_overcloud_external_upgrade_run/tests/test.yml @@ -0,0 +1,4 @@ +--- +- hosts: localhost + roles: + - tripleo_overcloud_external_upgrade_prepare diff --git a/zuul.d/molecule.yaml b/zuul.d/molecule.yaml index 8b67622..9a0706d 100644 --- a/zuul.d/molecule.yaml +++ b/zuul.d/molecule.yaml @@ -22,6 +22,7 @@ - tripleo-operator-molecule-tripleo_overcloud_deploy - tripleo-operator-molecule-tripleo_overcloud_export - tripleo-operator-molecule-tripleo_overcloud_external_update_run + - tripleo-operator-molecule-tripleo_overcloud_external_upgrade_run - tripleo-operator-molecule-tripleo_overcloud_failures - tripleo-operator-molecule-tripleo_overcloud_image_build - tripleo-operator-molecule-tripleo_overcloud_netenv_validate @@ -69,6 +70,7 @@ - tripleo-operator-molecule-tripleo_overcloud_deploy - tripleo-operator-molecule-tripleo_overcloud_export - tripleo-operator-molecule-tripleo_overcloud_external_update_run + - tripleo-operator-molecule-tripleo_overcloud_external_upgrade_run - tripleo-operator-molecule-tripleo_overcloud_failures - tripleo-operator-molecule-tripleo_overcloud_image_build - tripleo-operator-molecule-tripleo_overcloud_netenv_validate @@ -355,6 +357,20 @@ vars: tox_extra_args: tripleo_overcloud_external_update_run +- job: + files: + - ^roles/tripleo_overcloud_external_upgrade_run/.* + - ^bindep.txt + - ^galaxy.yml + - ^requirements.txt + - ^setup.cfg + - ^test-requirements.txt + - ^tox.ini + name: tripleo-operator-molecule-tripleo_overcloud_external_upgrade_run + parent: tripleo-operator-molecule-base + vars: + tox_extra_args: tripleo_overcloud_external_upgrade_run + - job: files: - ^roles/tripleo_overcloud_failures/.*