diff --git a/doc/source/roles/role-tripleo_overcloud_container_image_prepare.rst b/doc/source/roles/role-tripleo_overcloud_container_image_prepare.rst new file mode 100644 index 0000000..c40bf41 --- /dev/null +++ b/doc/source/roles/role-tripleo_overcloud_container_image_prepare.rst @@ -0,0 +1,6 @@ +================================================ +Role - tripleo_overcloud_container_image_prepare +================================================ + +.. ansibleautoplugin:: + :role: roles/tripleo_overcloud_container_image_prepare diff --git a/roles/tripleo_overcloud_container_image_prepare/README.md b/roles/tripleo_overcloud_container_image_prepare/README.md new file mode 100644 index 0000000..8b9dd25 --- /dev/null +++ b/roles/tripleo_overcloud_container_image_prepare/README.md @@ -0,0 +1,69 @@ +tripleo_overcloud_container_image_prepare +========================================= + +A role to perform the overcloud container image prepare. + +Requirements +------------ + +None. + +Role Variables +-------------- + +* `tripleo_overcloud_container_image_prepare_debug`: (Boolean) Flag to print out the delete command. Default: False +* `tripleo_overcloud_container_image_prepare_environment_directory`: (String) Path to a directory containing the environment files specifying which services are containerized. +* `tripleo_overcloud_container_image_prepare_environment_files`: (List) List of environment files specifying which services are containerized. Default: [] +* `tripleo_overcloud_container_image_prepare_excludes`: (List) List of patterns to match the imagename against to exclude from the output. Default: [] +* `tripleo_overcloud_container_image_prepare_home_dir`: (String) Home directory to where the command is run from. Default: "{{ ansible_env.HOME }}" +* `tripleo_overcloud_container_image_prepare_includes`: (List) List of patterns to match the imagename against to include in the output. Default: [] +* `tripleo_overcloud_container_image_prepare_log_combine`: (Boolean) Flag to enable captching stderr with stdout. Default: true +* `tripleo_overcloud_container_image_prepare_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_container_image_prepare_log`: (String) Path to a log file for the command output. Default: "{{ tripleo_overcloud_container_image_prepare_home_dir }}/overcloud_container_image_prepare.log" +* `tripleo_overcloud_container_image_prepare_modify_role`: (String) Name of ansible role to run between every image pull and push. +* `tripleo_overcloud_container_image_prepare_modify_vars`: (String) Ansible vairables file containing varisables to use when using modify role. +* `tripleo_overcloud_container_image_prepare_namespace`: (String) Override the default namespace substitution +* `tripleo_overcloud_container_image_prepare_output_env_file`: (String) Output heat environment file which specifies all image parameters. +* `tripleo_overcloud_container_image_prepare_output_images_file`: (String) Path to write the output image entries to. +* `tripleo_overcloud_container_image_prepare_poll`: (Integer) Number of seconds to wait between each checks to see if the command has completed. Default: 10 +* `tripleo_overcloud_container_image_prepare_prefix`: (String) Override the default name prefix substitution +* `tripleo_overcloud_container_image_prepare_push_destination`: (String) Location of image registry to push images to +* `tripleo_overcloud_container_image_prepare_roles_file`: (String) Roles file path for the cloud. +* `tripleo_overcloud_container_image_prepare_set`: (List) Set the value of a vaiable in the template even if it has no dedicated argument. Default: [] +* `tripleo_overcloud_container_image_prepare_suffix`: (String) Override the default name suffix substitution +* `tripleo_overcloud_container_image_prepare_tag_from_label`: (String) Use teh value of teh specify label to discover the tag +* `tripleo_overcloud_container_image_prepare_tag`: (String) Overide the default tag substitution +* `tripleo_overcloud_container_image_prepare_template_file`: (String) YAML template file for image config +* `tripleo_overcloud_container_image_prepare_timeout`: (Integer) Number in seconds to wait for the ansible execution of the command to finish. Default: 3600 + +Output Variables +---------------- + +* `tripleo_overcloud_container_image_prepare_output`: (String) The command standard output. +* `tripleo_overcloud_container_image_prepare_result`: Ansible shell execution results + +Dependencies +------------ + +None. + +Example Playbook +---------------- + +Example overcloud container image prepare. + +```yaml +- hosts: undercloud + gather_facts: true + tasks: + - name: Overcloud container image prepare + import_role: + name: tripleo_overcloud_container_image_prepare + var: + tripleo_overcloud_container_image_prepare_debug: true +``` + +License +------- + +Apache-2.0 diff --git a/roles/tripleo_overcloud_container_image_prepare/defaults/main.yml b/roles/tripleo_overcloud_container_image_prepare/defaults/main.yml new file mode 100644 index 0000000..c848849 --- /dev/null +++ b/roles/tripleo_overcloud_container_image_prepare/defaults/main.yml @@ -0,0 +1,27 @@ +--- +# defaults file for tripleo_overcloud_container_image_prepare +openstack_bin: openstack +tripleo_overcloud_container_image_prepare_debug: false +tripleo_overcloud_container_image_prepare_environment_directory: +tripleo_overcloud_container_image_prepare_environment_files: [] +tripleo_overcloud_container_image_prepare_excludes: [] +tripleo_overcloud_container_image_prepare_home_dir: "{{ ansible_env.HOME }}" +tripleo_overcloud_container_image_prepare_includes: [] +tripleo_overcloud_container_image_prepare_log: "{{ tripleo_overcloud_container_image_prepare_home_dir }}/overcloud_container_image_prepare.log" +tripleo_overcloud_container_image_prepare_log_combine: true +tripleo_overcloud_container_image_prepare_log_output: true +tripleo_overcloud_container_image_prepare_modify_role: +tripleo_overcloud_container_image_prepare_modify_vars: +tripleo_overcloud_container_image_prepare_namespace: +tripleo_overcloud_container_image_prepare_output_env_file: +tripleo_overcloud_container_image_prepare_output_images_file: +tripleo_overcloud_container_image_prepare_poll: 10 +tripleo_overcloud_container_image_prepare_prefix: +tripleo_overcloud_container_image_prepare_push_destination: +tripleo_overcloud_container_image_prepare_roles_file: +tripleo_overcloud_container_image_prepare_set: [] +tripleo_overcloud_container_image_prepare_suffix: +tripleo_overcloud_container_image_prepare_tag: +tripleo_overcloud_container_image_prepare_tag_from_label: +tripleo_overcloud_container_image_prepare_template_file: +tripleo_overcloud_container_image_prepare_timeout: 3600 diff --git a/roles/tripleo_overcloud_container_image_prepare/meta/main.yml b/roles/tripleo_overcloud_container_image_prepare/meta/main.yml new file mode 100644 index 0000000..3263821 --- /dev/null +++ b/roles/tripleo_overcloud_container_image_prepare/meta/main.yml @@ -0,0 +1,42 @@ +--- +# Copyright 2020 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_container_image_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_container_image_prepare/molecule/default/converge.yml b/roles/tripleo_overcloud_container_image_prepare/molecule/default/converge.yml new file mode 100644 index 0000000..2bc0d8c --- /dev/null +++ b/roles/tripleo_overcloud_container_image_prepare/molecule/default/converge.yml @@ -0,0 +1,206 @@ +--- +- name: Converge + hosts: all + collections: + - tripleo.operator + vars: + openstack_bin: echo + tripleo_overcloud_container_image_prepare_log_output: false + tripleo_overcloud_container_image_prepare_poll: 1 + tripleo_overcloud_container_image_prepare_debug: true + tasks: + + - name: "Include tripleo_overcloud_container_image_prepare" + include_role: + name: "tripleo_overcloud_container_image_prepare" + + - name: Check role + assert: + that: + - tripleo_overcloud_container_image_prepare_output == "overcloud container image prepare" + + - name: Validate "tripleo_overcloud_container_image_prepare_template_file" + include_role: + name: "tripleo_overcloud_container_image_prepare" + vars: + tripleo_overcloud_container_image_prepare_template_file: foo.yaml.j2 + + - name: Assert tripleo_overcloud_container_image_prepare_template_file + assert: + that: + - tripleo_overcloud_container_image_prepare_output == + "overcloud container image prepare --template-file foo.yaml.j2" + + - name: Validate "tripleo_overcloud_container_image_prepare_push_destination" + include_role: + name: "tripleo_overcloud_container_image_prepare" + vars: + tripleo_overcloud_container_image_prepare_push_destination: "localhost:8787" + + - name: Assert tripleo_overcloud_container_image_prepare_push_destination + assert: + that: + - tripleo_overcloud_container_image_prepare_output == + "overcloud container image prepare --push-destination localhost:8787" + + - name: Validate "tripleo_overcloud_container_image_prepare_tag" + include_role: + name: "tripleo_overcloud_container_image_prepare" + vars: + tripleo_overcloud_container_image_prepare_tag: foo + + - name: Assert tripleo_overcloud_container_image_prepare_tag + assert: + that: + - tripleo_overcloud_container_image_prepare_output == + "overcloud container image prepare --tag foo" + + - name: Validate "tripleo_overcloud_container_image_prepare_tag_from_label" + include_role: + name: "tripleo_overcloud_container_image_prepare" + vars: + tripleo_overcloud_container_image_prepare_tag_from_label: "{version}-123" + + - name: Assert tripleo_overcloud_container_image_prepare_tag_from_label + assert: + that: + - tripleo_overcloud_container_image_prepare_output == + "overcloud container image prepare --tag-from-label '{version}-123'" + + - name: Validate "tripleo_overcloud_container_image_prepare_namespace" + include_role: + name: "tripleo_overcloud_container_image_prepare" + vars: + tripleo_overcloud_container_image_prepare_namespace: foo + + - name: Assert tripleo_overcloud_container_image_prepare_namespace + assert: + that: + - tripleo_overcloud_container_image_prepare_output == + "overcloud container image prepare --namespace foo" + + - name: Validate "tripleo_overcloud_container_image_prepare_prefix" + include_role: + name: "tripleo_overcloud_container_image_prepare" + vars: + tripleo_overcloud_container_image_prepare_prefix: foo + + - name: Assert tripleo_overcloud_container_image_prepare_prefix + assert: + that: + - tripleo_overcloud_container_image_prepare_output == + "overcloud container image prepare --prefix foo" + + - name: Validate "tripleo_overcloud_container_image_prepare_suffix" + include_role: + name: "tripleo_overcloud_container_image_prepare" + vars: + tripleo_overcloud_container_image_prepare_suffix: bar + + - name: Assert tripleo_overcloud_container_image_prepare_suffix + assert: + that: + - tripleo_overcloud_container_image_prepare_output == + "overcloud container image prepare --suffix bar" + + - name: Validate "tripleo_overcloud_container_image_prepare_excludes" + include_role: + name: "tripleo_overcloud_container_image_prepare" + vars: + tripleo_overcloud_container_image_prepare_excludes: + - nova-api + - nova-compute + + - name: Assert tripleo_overcloud_container_image_prepare_excludes + assert: + that: + - tripleo_overcloud_container_image_prepare_output == + "overcloud container image prepare --exclude nova-api --exclude nova-compute" + + - name: Validate "tripleo_overcloud_container_image_prepare_includes" + include_role: + name: "tripleo_overcloud_container_image_prepare" + vars: + tripleo_overcloud_container_image_prepare_includes: + - nova-api + - nova-compute + + - name: Assert tripleo_overcloud_container_image_prepare_includes + assert: + that: + - tripleo_overcloud_container_image_prepare_output == + "overcloud container image prepare --include nova-api --include nova-compute" + + - name: Validate "tripleo_overcloud_container_image_prepare_environment_files" + include_role: + name: "tripleo_overcloud_container_image_prepare" + vars: + tripleo_overcloud_container_image_prepare_environment_files: + - a.yaml + - b.yaml + + - name: Assert tripleo_overcloud_container_image_prepare_environment_files + assert: + that: + - tripleo_overcloud_container_image_prepare_output == + "overcloud container image prepare --environment-file a.yaml --environment-file b.yaml" + + - name: Validate "tripleo_overcloud_container_image_prepare_environment_directory" + include_role: + name: "tripleo_overcloud_container_image_prepare" + vars: + tripleo_overcloud_container_image_prepare_environment_directory: /tmp/a + + - name: Assert tripleo_overcloud_container_image_prepare_environment_directory + assert: + that: + - tripleo_overcloud_container_image_prepare_output == + "overcloud container image prepare --environment-directory /tmp/a" + + - name: Validate "tripleo_overcloud_container_image_prepare_output_env_file" + include_role: + name: "tripleo_overcloud_container_image_prepare" + vars: + tripleo_overcloud_container_image_prepare_output_env_file: env.yaml + + - name: Assert tripleo_overcloud_container_image_prepare_output_env_file + assert: + that: + - tripleo_overcloud_container_image_prepare_output == + "overcloud container image prepare --output-env-file env.yaml" + + - name: Validate "tripleo_overcloud_container_image_prepare_roles_file" + include_role: + name: "tripleo_overcloud_container_image_prepare" + vars: + tripleo_overcloud_container_image_prepare_roles_file: roles.yaml + + - name: Assert tripleo_overcloud_container_image_preparea_roles_file + assert: + that: + - tripleo_overcloud_container_image_prepare_output == + "overcloud container image prepare --roles-file roles.yaml" + + - name: Validate "tripleo_overcloud_container_image_prepare_modify_role" + include_role: + name: "tripleo_overcloud_container_image_prepare" + vars: + tripleo_overcloud_container_image_prepare_modify_role: yum-update + + - name: Assert tripleo_overcloud_container_image_prepare_modify_role + assert: + that: + - tripleo_overcloud_container_image_prepare_output == + "overcloud container image prepare --modify-role yum-update" + + - name: Validate "tripleo_overcloud_container_image_prepare_modify_vars" + include_role: + name: "tripleo_overcloud_container_image_prepare" + vars: + tripleo_overcloud_container_image_prepare_modify_vars: myvars.yaml + + - name: Assert tripleo_overcloud_container_image_prepare_modify_vars + assert: + that: + - tripleo_overcloud_container_image_prepare_output == + "overcloud container image prepare --modify-vars myvars.yaml" diff --git a/roles/tripleo_overcloud_container_image_prepare/molecule/default/molecule.yml b/roles/tripleo_overcloud_container_image_prepare/molecule/default/molecule.yml new file mode 100644 index 0000000..2841806 --- /dev/null +++ b/roles/tripleo_overcloud_container_image_prepare/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_container_image_prepare/molecule/default/prepare.yml b/roles/tripleo_overcloud_container_image_prepare/molecule/default/prepare.yml new file mode 100644 index 0000000..63bb6ab --- /dev/null +++ b/roles/tripleo_overcloud_container_image_prepare/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_container_image_prepare/tasks/main.yml b/roles/tripleo_overcloud_container_image_prepare/tasks/main.yml new file mode 100644 index 0000000..fbc0dac --- /dev/null +++ b/roles/tripleo_overcloud_container_image_prepare/tasks/main.yml @@ -0,0 +1,74 @@ +--- +# tasks file for tripleo_overcloud_container_image_prepare +- name: Set overcloud container image prepare facts + set_fact: + _prepare_cmd: >- + {{ openstack_bin }} overcloud container image prepare + {{ tripleo_overcloud_container_image_prepare_template_file | ternary('--template-file $PREPARE_TEMPLATE_FILE', '') }} + {{ tripleo_overcloud_container_image_prepare_push_destination | ternary('--push-destination $PREPARE_PUSH_DESTINATION', '') }} + {{ tripleo_overcloud_container_image_prepare_tag | ternary('--tag $PREPARE_TAG', '') }} + {{ tripleo_overcloud_container_image_prepare_tag_from_label | ternary('--tag-from-label $PREPARE_TAG_FROM_LABEL', '') }} + {{ tripleo_overcloud_container_image_prepare_namespace | ternary('--namespace $PREPARE_NAMESPACE', '') }} + {{ tripleo_overcloud_container_image_prepare_prefix | ternary('--prefix $PREPARE_PREFIX', '') }} + {{ tripleo_overcloud_container_image_prepare_suffix | ternary('--suffix $PREPARE_SUFFIX', '') }} + {{ tripleo_overcloud_container_image_prepare_set | tripleo.operator.shell_arg_list('--set') }} + {{ tripleo_overcloud_container_image_prepare_excludes | tripleo.operator.shell_arg_list('--exclude') }} + {{ tripleo_overcloud_container_image_prepare_includes | tripleo.operator.shell_arg_list('--include') }} + {{ tripleo_overcloud_container_image_prepare_output_images_file | ternary('--output-images-file $PREPARE_OUTPUT_IMAGES_FILE', '') }} + {{ tripleo_overcloud_container_image_prepare_environment_files | tripleo.operator.shell_arg_list('--environment-file') }} + {{ tripleo_overcloud_container_image_prepare_environment_directory | ternary('--environment-directory $PREPARE_ENVIRONMENT_DIR', '') }} + {{ tripleo_overcloud_container_image_prepare_output_env_file | ternary('--output-env-file $PREPARE_OUTPUT_ENV_FILE', '') }} + {{ tripleo_overcloud_container_image_prepare_roles_file | ternary('--roles-file $PREPARE_ROLES_FILE', '') }} + {{ tripleo_overcloud_container_image_prepare_modify_role | ternary('--modify-role $PREPARE_MODIFY_ROLE', '') }} + {{ tripleo_overcloud_container_image_prepare_modify_vars | ternary('--modify-vars $PREPARE_MODIFY_VARS', '') }} + {{ tripleo_overcloud_container_image_prepare_log_output | ternary((">" ~ tripleo_overcloud_container_image_prepare_log), '') }} + {{ tripleo_overcloud_container_image_prepare_log_combine | ternary("2>&1", '') }} + _prepare_env: + PREPARE_TEMPLATE_FILE: "{{ tripleo_overcloud_container_image_prepare_template_file | quote }}" + PREPARE_PUSH_DESTINATION: "{{ tripleo_overcloud_container_image_prepare_push_destination | quote }}" + PREPARE_TAG: "{{ tripleo_overcloud_container_image_prepare_tag | quote }}" + PREPARE_TAG_FROM_LABEL: "{{ tripleo_overcloud_container_image_prepare_tag_from_label | quote }}" + PREPARE_NAMESPACE: "{{ tripleo_overcloud_container_image_prepare_namespace | quote }}" + PREPARE_PREFIX: "{{ tripleo_overcloud_container_image_prepare_prefix | quote }}" + PREPARE_SUFFIX: "{{ tripleo_overcloud_container_image_prepare_suffix | quote }}" + PREPARE_OUTPUT_IMAGES_FILE: "{{ tripleo_overcloud_container_image_prepare_output_images_file | quote }}" + PREPARE_ENVIRONMENT_DIR: "{{ tripleo_overcloud_container_image_prepare_environment_directory | quote }}" + PREPARE_OUTPUT_ENV_FILE: "{{ tripleo_overcloud_container_image_prepare_output_env_file | quote }}" + PREPARE_ROLES_FILE: "{{ tripleo_overcloud_container_image_prepare_roles_file | quote }}" + PREPARE_MODIFY_ROLE: "{{ tripleo_overcloud_container_image_prepare_modify_role | quote }}" + PREPARE_MODIFY_VARS: "{{ tripleo_overcloud_container_image_prepare_modify_vars | quote }}" + + +- name: Preserve existing log file if exists + timestamp_file: + path: "{{ tripleo_overcloud_container_image_prepare_log }}" + when: tripleo_overcloud_container_image_prepare_log_output|bool + +- name: Show debug information + when: tripleo_overcloud_container_image_prepare_debug|bool + block: + - name: Show the command + debug: + var: _prepare_cmd + + - name: Show the environment + debug: + var: _prepare_env + +- name: Run overcloud container image prepare + shell: "{{ _prepare_cmd }}" # noqa 305 + environment: "{{ _prepare_env }}" + args: + executable: /bin/bash + chdir: "{{ tripleo_overcloud_container_image_prepare_home_dir }}" + warn: false + register: tripleo_overcloud_container_image_prepare_result + async: "{{ tripleo_overcloud_container_image_prepare_timeout }}" + poll: "{{ tripleo_overcloud_container_image_prepare_poll }}" + changed_when: false + when: not ansible_check_mode|bool + + +- name: Set output fact + set_fact: + tripleo_overcloud_container_image_prepare_output: "{{ tripleo_overcloud_container_image_prepare_result.stdout }}" diff --git a/roles/tripleo_overcloud_container_image_prepare/tests/inventory b/roles/tripleo_overcloud_container_image_prepare/tests/inventory new file mode 100644 index 0000000..2fbb50c --- /dev/null +++ b/roles/tripleo_overcloud_container_image_prepare/tests/inventory @@ -0,0 +1 @@ +localhost diff --git a/roles/tripleo_overcloud_container_image_prepare/tests/test.yml b/roles/tripleo_overcloud_container_image_prepare/tests/test.yml new file mode 100644 index 0000000..1d395db --- /dev/null +++ b/roles/tripleo_overcloud_container_image_prepare/tests/test.yml @@ -0,0 +1,5 @@ +--- +- hosts: localhost + remote_user: root + roles: + - tripleo_overcloud_container_image_prepare diff --git a/zuul.d/molecule.yaml b/zuul.d/molecule.yaml index 0fdc8d8..2f9933e 100644 --- a/zuul.d/molecule.yaml +++ b/zuul.d/molecule.yaml @@ -14,6 +14,7 @@ - tripleo-operator-molecule-tripleo_deploy - tripleo-operator-molecule-tripleo_overcloud_admin_authorize - tripleo-operator-molecule-tripleo_overcloud_container_image_build + - tripleo-operator-molecule-tripleo_overcloud_container_image_prepare - tripleo-operator-molecule-tripleo_overcloud_deploy - tripleo-operator-molecule-tripleo_overcloud_export - tripleo-operator-molecule-tripleo_overcloud_failures @@ -54,6 +55,7 @@ - tripleo-operator-molecule-tripleo_deploy - tripleo-operator-molecule-tripleo_overcloud_admin_authorize - tripleo-operator-molecule-tripleo_overcloud_container_image_build + - tripleo-operator-molecule-tripleo_overcloud_container_image_prepare - tripleo-operator-molecule-tripleo_overcloud_deploy - tripleo-operator-molecule-tripleo_overcloud_export - tripleo-operator-molecule-tripleo_overcloud_failures @@ -229,6 +231,20 @@ vars: tox_extra_args: tripleo_overcloud_container_image_build +- job: + files: + - ^roles/tripleo_overcloud_container_image_prepare/.* + - ^bindep.txt + - ^galaxy.yml + - ^requirements.txt + - ^setup.cfg + - ^test-requirements.txt + - ^tox.ini + name: tripleo-operator-molecule-tripleo_overcloud_container_image_prepare + parent: tripleo-operator-molecule-base + vars: + tox_extra_args: tripleo_overcloud_container_image_prepare + - job: files: - ^roles/tripleo_overcloud_deploy/.*