diff --git a/roles/tripleo_overcloud_image_upload/README.md b/roles/tripleo_overcloud_image_upload/README.md new file mode 100644 index 0000000..c6dae47 --- /dev/null +++ b/roles/tripleo_overcloud_image_upload/README.md @@ -0,0 +1,66 @@ +tripleo_overcloud_image_upload +======================== + +A role to run an overcloud image upload. + +Requirements +------------ + +None. + +Role Variables +-------------- + +* `tripleo_overcloud_image_upload_architecture`: (String) Architecture type for the images being uploaded. +* `tripleo_overcloud_image_upload_debug`: (Boolean) Flag to print out the command that is run. Default: False +* `tripleo_overcloud_image_upload_http_boot`: (String) Root directory for the ironic-pytho-agent-image +* `tripleo_overcloud_image_upload_home_dir`: (String) Home directory for the undercloud user. Default: "{{ ansible_env.HOME }}" +* `tripleo_overcloud_image_upload_image_path`: (String) Path to directory overcloud images. By default the command will use the images in `tripleo_overcloud_image_upload_home_dir` if this is not specified. +* `tripleo_overcloud_image_upload_image_type`: (String) If specified, restrict the image type to upload. Should be one of {os,ironic-python-agent} +* `tripleo_overcloud_image_upload_ironic_python_agent_name`: (String) OpenStack ironic-python-agent image filename +* `tripleo_overcloud_image_upload_log_combine`: (Boolean) Flag to combine stdout and stderr in the logfile. Default: true +* `tripleo_overcloud_image_upload_log_output`: (Boolean) Flag to log the output to a file rather than show it in the ansible output. Default: true +* `tripleo_overcloud_image_upload_os_cloud`: (String) (String) OS_CLOUD value to use when running the command. If `tripleo_os_cloud` is defined, it will be the default. Otherwise the default is ''. This variable takes precedence over `tripleo_overcloud_image_upload_rc_file`. +* `tripleo_overcloud_image_upload_os_image_name`: (String) OpenStack disk image filename +* `tripleo_overcloud_image_upload_platform`: (String) Platform type for the images being uploaded. +* `tripleo_overcloud_image_upload_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_image_upload_update_existing`: (Boolean) Update the images if they already exist. Default: false +* `tripleo_overcloud_image_upload_whole_disk`: (Boolean) Overcloud iamge bneing uploaded is considered a whole disk image. Default: false +* `tripleo_overcloud_image_upload_log`: (String) Install log file path. Default: "{{ tripleo_overcloud_image_upload_home_dir }}/overcloud_image_upload.log" + +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_image_upload_output`: (String) The command standard output when `tripleo_overcloud_image_upload_log_output` is set to false. +* `tripleo_overcloud_image_upload_result`: Ansible shell execution results + +Dependencies +------------ + +None. + +Example Playbook +---------------- + +Example container list execution playbook + +```yaml +- hosts: undercloud + gather_facts: true + tasks: + - name: Get overcloud image_upload + import_role: + name: tripleo_overcloud_image_upload + vars: + tripleo_overcloud_image_upload_update_existing: true +``` + +License +------- + +Apache-2.0 diff --git a/roles/tripleo_overcloud_image_upload/defaults/main.yml b/roles/tripleo_overcloud_image_upload/defaults/main.yml new file mode 100644 index 0000000..25e8150 --- /dev/null +++ b/roles/tripleo_overcloud_image_upload/defaults/main.yml @@ -0,0 +1,21 @@ +--- +# defaults file for tripleo_overcloud_image_upload +openstack_bin: openstack +tripleo_overcloud_image_upload_architecture: +tripleo_overcloud_image_upload_debug: false +tripleo_overcloud_image_upload_http_boot: +tripleo_overcloud_image_upload_home_dir: "{{ ansible_env.HOME }}" +tripleo_overcloud_image_upload_image_path: +tripleo_overcloud_image_upload_image_type: +tripleo_overcloud_image_upload_ironic_python_agent_name: +tripleo_overcloud_image_upload_log_combine: false +tripleo_overcloud_image_upload_log_output: true +tripleo_overcloud_image_upload_os_cloud: "{{ tripleo_os_cloud | default('') }}" +tripleo_overcloud_image_upload_os_image_name: +tripleo_overcloud_image_upload_poll: 10 +tripleo_overcloud_image_upload_platform: +tripleo_overcloud_image_upload_rc_file: "{{ tripleo_rc_file | default(ansible_env.HOME ~ '/stackrc') }}" +tripleo_overcloud_image_upload_timeout: 600 +tripleo_overcloud_image_upload_update_existing: false +tripleo_overcloud_image_upload_whole_disk: false +tripleo_overcloud_image_upload_log: "{{ tripleo_overcloud_image_upload_home_dir }}/overcloud_image_upload.log" diff --git a/roles/tripleo_overcloud_image_upload/meta/main.yml b/roles/tripleo_overcloud_image_upload/meta/main.yml new file mode 100644 index 0000000..be6891f --- /dev/null +++ b/roles/tripleo_overcloud_image_upload/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_export + 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_image_upload/molecule/default/converge.yml b/roles/tripleo_overcloud_image_upload/molecule/default/converge.yml new file mode 100644 index 0000000..c94c367 --- /dev/null +++ b/roles/tripleo_overcloud_image_upload/molecule/default/converge.yml @@ -0,0 +1,121 @@ +--- +- name: Converge + hosts: all + collections: + - tripleo.operator + vars: + openstack_bin: echo + tripleo_os_cloud: undercloud + tripleo_overcloud_image_upload_debug: true + tripleo_overcloud_image_upload_log_output: false + tripleo_overcloud_image_upload_log_combine: false + tripleo_overcloud_image_upload_poll: 1 + tasks: + + - name: "Include tripleo_overcloud_image_upload" + include_role: + name: "tripleo_overcloud_image_upload" + + - name: Check role + assert: + that: + - tripleo_overcloud_image_upload_result.stdout == "overcloud image upload" + + - name: Check parameter "tripleo_overcloud_image_upload_image_path" + include_role: + name: "tripleo_overcloud_image_upload" + vars: + tripleo_overcloud_image_upload_image_path: /foo + + - name: Assert "tripleo_overcloud_image_upload_image_path" + assert: + that: + - tripleo_overcloud_image_upload_result.stdout == "overcloud image upload --image-path /foo" + + - name: Check parameter "tripleo_overcloud_image_upload_os_image_name" + include_role: + name: "tripleo_overcloud_image_upload" + vars: + tripleo_overcloud_image_upload_os_image_name: foo + + - name: Assert "tripleo_overcloud_image_upload_os_image_name" + assert: + that: + - tripleo_overcloud_image_upload_result.stdout == "overcloud image upload --os-image-name foo" + + - name: Check parameter "tripleo_overcloud_image_upload_ironic_python_agent_name" + include_role: + name: "tripleo_overcloud_image_upload" + vars: + tripleo_overcloud_image_upload_ironic_python_agent_name: foo + + - name: Assert "tripleo_overcloud_image_upload_ironic_python_agent_name" + assert: + that: + - tripleo_overcloud_image_upload_result.stdout == "overcloud image upload --ironic-python-agent-name foo" + + - name: Check parameter "tripleo_overcloud_image_upload_http_boot" + include_role: + name: "tripleo_overcloud_image_upload" + vars: + tripleo_overcloud_image_upload_http_boot: /foo + + - name: Assert "tripleo_overcloud_image_upload_http_boot" + assert: + that: + - tripleo_overcloud_image_upload_result.stdout == "overcloud image upload --http-boot /foo" + + - name: Check parameter "tripleo_overcloud_image_upload_update_existing" + include_role: + name: "tripleo_overcloud_image_upload" + vars: + tripleo_overcloud_image_upload_update_existing: true + + - name: Assert "tripleo_overcloud_image_upload_update_existing" + assert: + that: + - tripleo_overcloud_image_upload_result.stdout == "overcloud image upload --update-existing" + + - name: Check parameter "tripleo_overcloud_image_upload_whole_disk" + include_role: + name: "tripleo_overcloud_image_upload" + vars: + tripleo_overcloud_image_upload_whole_disk: true + + - name: Assert "tripleo_overcloud_image_upload_whole_disk" + assert: + that: + - tripleo_overcloud_image_upload_result.stdout == "overcloud image upload --whole-disk" + + - name: Check parameter "tripleo_overcloud_image_upload_architecture" + include_role: + name: "tripleo_overcloud_image_upload" + vars: + tripleo_overcloud_image_upload_architecture: i386 + + - name: Assert "tripleo_overcloud_image_upload_architecture" + assert: + that: + - tripleo_overcloud_image_upload_result.stdout == "overcloud image upload --architecture i386" + + - name: Check parameter "tripleo_overcloud_image_upload_platform" + include_role: + name: "tripleo_overcloud_image_upload" + vars: + tripleo_overcloud_image_upload_platform: abc + + - name: Assert "tripleo_overcloud_image_upload_platform" + assert: + that: + - tripleo_overcloud_image_upload_result.stdout == "overcloud image upload --platform abc" + + - name: Check parameter "tripleo_overcloud_image_upload_image_type" + include_role: + name: "tripleo_overcloud_image_upload" + vars: + tripleo_overcloud_image_upload_image_type: os + + - name: Assert "tripleo_overcloud_image_upload_image_type" + assert: + that: + - tripleo_overcloud_image_upload_result.stdout == "overcloud image upload --image-type os" diff --git a/roles/tripleo_overcloud_image_upload/molecule/default/molecule.yml b/roles/tripleo_overcloud_image_upload/molecule/default/molecule.yml new file mode 100644 index 0000000..2841806 --- /dev/null +++ b/roles/tripleo_overcloud_image_upload/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_image_upload/molecule/default/prepare.yml b/roles/tripleo_overcloud_image_upload/molecule/default/prepare.yml new file mode 100644 index 0000000..63bb6ab --- /dev/null +++ b/roles/tripleo_overcloud_image_upload/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_image_upload/tasks/main.yml b/roles/tripleo_overcloud_image_upload/tasks/main.yml new file mode 100644 index 0000000..a201b35 --- /dev/null +++ b/roles/tripleo_overcloud_image_upload/tasks/main.yml @@ -0,0 +1,48 @@ +--- +# tasks file for tripleo_overcloud_image_upload +- name: Setup overcloud image upload facts + set_fact: + _image_upload_cmd: >- + {{ tripleo_overcloud_image_upload_os_cloud | ternary('', "source " ~ tripleo_overcloud_image_upload_rc_file ~ "; ") }} + {{ openstack_bin }} overcloud image upload + {{ tripleo_overcloud_image_upload_image_path | ternary('--image-path $UPLOAD_IMAGE_PATH', '') }} + {{ tripleo_overcloud_image_upload_os_image_name | ternary('--os-image-name $UPLOAD_OS_IMAGE_NAME', '') }} + {{ tripleo_overcloud_image_upload_ironic_python_agent_name | ternary('--ironic-python-agent-name $UPLOAD_IPA_NAME', '') }} + {{ tripleo_overcloud_image_upload_http_boot | ternary('--http-boot $UPLOAD_HTTP_BOOT', '') }} + {{ tripleo_overcloud_image_upload_update_existing | ternary('--update-existing', '') }} + {{ tripleo_overcloud_image_upload_whole_disk | ternary('--whole-disk', '') }} + {{ tripleo_overcloud_image_upload_architecture | ternary('--architecture $UPLOAD_ARCHITECTURE', '') }} + {{ tripleo_overcloud_image_upload_platform | ternary('--platform $UPLOAD_PLATFORM', '') }} + {{ tripleo_overcloud_image_upload_image_type | ternary('--image-type $UPLOAD_IMAGE_TYPE', '') }} + {{ tripleo_overcloud_image_upload_log_output | ternary((">$UPLOAD_LOG"), '') }} + {{ tripleo_overcloud_image_upload_log_combine | ternary("2>&1", '') }} + +- name: Preserve existing log file if exists + timestamp_file: + path: "{{ tripleo_overcloud_image_upload_log }}" + when: tripleo_overcloud_image_upload_log_output|bool + +- name: Show the overcloud image_upload command + debug: + var: _image_upload_cmd + when: tripleo_overcloud_image_upload_debug|bool + +- name: Overcloud image upload + shell: "{{ _image_upload_cmd }}" # noqa 305 + environment: + OS_CLOUD: "{{ tripleo_overcloud_image_upload_os_cloud }}" + UPLOAD_IMAGE_PATH: "{{ tripleo_overcloud_image_upload_image_path }}" + UPLOAD_OS_IMAGE_NAME: "{{ tripleo_overcloud_image_upload_os_image_name }}" + UPLOAD_IPA_NAME: "{{ tripleo_overcloud_image_upload_ironic_python_agent_name }}" + UPLOAD_HTTP_BOOT: "{{ tripleo_overcloud_image_upload_http_boot }}" + UPLOAD_ARCHITECTURE: "{{ tripleo_overcloud_image_upload_architecture }}" + UPLOAD_PLATFORM: "{{ tripleo_overcloud_image_upload_platform }}" + UPLOAD_IMAGE_TYPE: "{{ tripleo_overcloud_image_upload_image_type }}" + UPLOAD_LOG: "{{ tripleo_overcloud_image_upload_log }}" + args: + chdir: "{{ tripleo_overcloud_image_upload_home_dir }}" + warn: false + async: "{{ tripleo_overcloud_image_upload_timeout }}" + register: tripleo_overcloud_image_upload_result + poll: "{{ tripleo_overcloud_image_upload_poll }}" + changed_when: false diff --git a/roles/tripleo_overcloud_image_upload/tests/inventory b/roles/tripleo_overcloud_image_upload/tests/inventory new file mode 100644 index 0000000..2fbb50c --- /dev/null +++ b/roles/tripleo_overcloud_image_upload/tests/inventory @@ -0,0 +1 @@ +localhost diff --git a/roles/tripleo_overcloud_image_upload/tests/test.yml b/roles/tripleo_overcloud_image_upload/tests/test.yml new file mode 100644 index 0000000..50abb93 --- /dev/null +++ b/roles/tripleo_overcloud_image_upload/tests/test.yml @@ -0,0 +1,4 @@ +--- +- hosts: localhost + roles: + - tripleo_overcloud_image_upload diff --git a/zuul.d/molecule.yaml b/zuul.d/molecule.yaml index aae2f81..d6d3047 100644 --- a/zuul.d/molecule.yaml +++ b/zuul.d/molecule.yaml @@ -10,6 +10,7 @@ - tripleo-operator-molecule-tripleo_container_image_prepare_default - tripleo-operator-molecule-tripleo_container_image_push - tripleo-operator-molecule-tripleo_container_image_show + - tripleo-operator-molecule-tripleo_overcloud_image_upload - tripleo-operator-molecule-tripleo_deploy - tripleo-operator-molecule-tripleo_overcloud_deploy - tripleo-operator-molecule-tripleo_overcloud_export @@ -33,6 +34,7 @@ - tripleo-operator-molecule-tripleo_container_image_prepare_default - tripleo-operator-molecule-tripleo_container_image_push - tripleo-operator-molecule-tripleo_container_image_show + - tripleo-operator-molecule-tripleo_overcloud_image_upload - tripleo-operator-molecule-tripleo_deploy - tripleo-operator-molecule-tripleo_overcloud_deploy - tripleo-operator-molecule-tripleo_overcloud_export @@ -103,6 +105,14 @@ vars: tox_extra_args: tripleo_container_image_show +- job: + files: + - ^roles/tripleo_overcloud_image_upload/.* + name: tripleo-operator-molecule-tripleo_overcloud_image_upload + parent: tripleo-operator-molecule-base + vars: + tox_extra_args: tripleo_overcloud_image_upload + - job: files: - ^roles/tripleo_deploy/.*