From 3fac873796b481c02a12c6b02cb1edd893aa389d Mon Sep 17 00:00:00 2001 From: Alex Schultz Date: Mon, 9 Mar 2020 14:47:25 -0600 Subject: [PATCH] Add overcloud container build Adds tripleo_overcloud_container_image_build to do container builds. Change-Id: I3ab4f92e503110d41f1672a5cb60118864d82df8 --- ...ripleo_overcloud_container_image_build.rst | 6 + .../README.md | 59 ++++++++++ .../defaults/main.yml | 17 +++ .../meta/main.yml | 42 +++++++ .../molecule/default/converge.yml | 108 ++++++++++++++++++ .../molecule/default/molecule.yml | 19 +++ .../molecule/default/prepare.yml | 8 ++ .../tasks/main.yml | 49 ++++++++ .../tests/inventory | 1 + .../tests/test.yml | 5 + zuul.d/molecule.yaml | 16 +++ 11 files changed, 330 insertions(+) create mode 100644 doc/source/roles/role-tripleo_overcloud_container_image_build.rst create mode 100644 roles/tripleo_overcloud_container_image_build/README.md create mode 100644 roles/tripleo_overcloud_container_image_build/defaults/main.yml create mode 100644 roles/tripleo_overcloud_container_image_build/meta/main.yml create mode 100644 roles/tripleo_overcloud_container_image_build/molecule/default/converge.yml create mode 100644 roles/tripleo_overcloud_container_image_build/molecule/default/molecule.yml create mode 100644 roles/tripleo_overcloud_container_image_build/molecule/default/prepare.yml create mode 100644 roles/tripleo_overcloud_container_image_build/tasks/main.yml create mode 100644 roles/tripleo_overcloud_container_image_build/tests/inventory create mode 100644 roles/tripleo_overcloud_container_image_build/tests/test.yml diff --git a/doc/source/roles/role-tripleo_overcloud_container_image_build.rst b/doc/source/roles/role-tripleo_overcloud_container_image_build.rst new file mode 100644 index 0000000..44a1b10 --- /dev/null +++ b/doc/source/roles/role-tripleo_overcloud_container_image_build.rst @@ -0,0 +1,6 @@ +============================================== +Role - tripleo_overcloud_container_image_build +============================================== + +.. ansibleautoplugin:: + :role: roles/tripleo_overcloud_container_image_build diff --git a/roles/tripleo_overcloud_container_image_build/README.md b/roles/tripleo_overcloud_container_image_build/README.md new file mode 100644 index 0000000..e29239a --- /dev/null +++ b/roles/tripleo_overcloud_container_image_build/README.md @@ -0,0 +1,59 @@ +tripleo_overcloud_container_image_build +======================================= + +A role to perform the container image build process. + +Requirements +------------ + +None. + +Role Variables +-------------- + +* `tripleo_overcloud_container_image_build_config_files`: (List) YAML COnfig file(s) specifyign the image to build. Default: [] +* `tripleo_overcloud_container_image_build_debug`: (Boolean) Flag to print out the delete command. Default: False +* `tripleo_overcloud_container_image_build_excludes`: (List) Name of containers to exclude from the build. Default: [] +* `tripleo_overcloud_container_image_build_home_dir`: (String) Home directory to where the command is run from. Default: "{{ ansible_env.HOME }}" +* `tripleo_overcloud_container_image_build_kolla_config_file`: (String) Path to Kolla config file. +* `tripleo_overcloud_container_image_build_list_dependencies`: (Boolean) Show the image build dependencies instead of building. Default: false +* `tripleo_overcloud_container_image_build_list_images`: (Boolean) Show the images which would be built rather than building. Default: false +* `tripleo_overcloud_container_image_build_log_combine`: (Boolean) Flag to enable captching stderr with stdout. Default: true +* `tripleo_overcloud_container_image_build_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_build_log`: (String) Path to a log file for the command output. Default: "{{ tripleo_overcloud_container_image_build_home_dir }}/overcloud_container_image_build.log" +* `tripleo_overcloud_container_image_build_poll`: (Integer) Number of seconds to wait between each checks to see if the command has completed. Default: 10 +* `tripleo_overcloud_container_image_build_timeout`: (Integer) Number in seconds to wait for the ansible execution of the command to finish. Default: 3600 +* `tripleo_overcloud_container_image_build_use_buildah`: (Boolean) Use Buildah instead of Docker to build. Default: false +* `tripleo_overcloud_container_image_build_work_dir`: (String) Tripleo container builds directory. + +Output Variables +---------------- + +* `tripleo_overcloud_container_image_build_output`: (String) The command standard output. +* `tripleo_overcloud_container_image_build_result`: Ansible shell execution results + +Dependencies +------------ + +None. + +Example Playbook +---------------- + +Example container images build. + +```yaml +- hosts: undercloud + gather_facts: true + tasks: + - name: Build containers + import_role: + name: tripleo_overcloud_container_image_build + var: + tripleo_overcloud_container_image_build_debug: true +``` + +License +------- + +Apache-2.0 diff --git a/roles/tripleo_overcloud_container_image_build/defaults/main.yml b/roles/tripleo_overcloud_container_image_build/defaults/main.yml new file mode 100644 index 0000000..22cceb3 --- /dev/null +++ b/roles/tripleo_overcloud_container_image_build/defaults/main.yml @@ -0,0 +1,17 @@ +--- +# defaults file for tripleo_overcloud_container_image_build +openstack_bin: openstack +tripleo_overcloud_container_image_build_config_files: [] +tripleo_overcloud_container_image_build_debug: false +tripleo_overcloud_container_image_build_excludes: [] +tripleo_overcloud_container_image_build_home_dir: "{{ ansible_env.HOME }}" +tripleo_overcloud_container_image_build_kolla_config_file: +tripleo_overcloud_container_image_build_list_dependencies: false +tripleo_overcloud_container_image_build_list_images: false +tripleo_overcloud_container_image_build_log: "{{ tripleo_overcloud_container_image_build_home_dir }}/overcloud_container_image_build.log" +tripleo_overcloud_container_image_build_log_combine: true +tripleo_overcloud_container_image_build_log_output: true +tripleo_overcloud_container_image_build_poll: 10 +tripleo_overcloud_container_image_build_timeout: 3600 +tripleo_overcloud_container_image_build_use_buildah: false +tripleo_overcloud_container_image_build_work_dir: diff --git a/roles/tripleo_overcloud_container_image_build/meta/main.yml b/roles/tripleo_overcloud_container_image_build/meta/main.yml new file mode 100644 index 0000000..b049c40 --- /dev/null +++ b/roles/tripleo_overcloud_container_image_build/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_build + 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_build/molecule/default/converge.yml b/roles/tripleo_overcloud_container_image_build/molecule/default/converge.yml new file mode 100644 index 0000000..4c05189 --- /dev/null +++ b/roles/tripleo_overcloud_container_image_build/molecule/default/converge.yml @@ -0,0 +1,108 @@ +--- +- name: Converge + hosts: all + collections: + - tripleo.operator + vars: + openstack_bin: echo + tripleo_overcloud_container_image_build_log_output: false + tripleo_overcloud_container_image_build_poll: 1 + tripleo_overcloud_container_image_build_debug: true + tasks: + + - name: "Include tripleo_overcloud_container_image_build" + include_role: + name: "tripleo_overcloud_container_image_build" + + - name: Check role + assert: + that: + - tripleo_overcloud_container_image_build_output == "overcloud container image build" + + - name: Check paramter "tripleo_overcloud_container_image_build_config_files" + include_role: + name: "tripleo_overcloud_container_image_build" + vars: + tripleo_overcloud_container_image_build_config_files: + - foo.yaml + - bar.yaml + + - name: Assert "tripleo_overcloud_container_image_build_config_files" + assert: + that: + - tripleo_overcloud_container_image_build_output == + "overcloud container image build --config-file foo.yaml --config-file bar.yaml" + + - name: Check paramter "tripleo_overcloud_container_image_build_kolla_config_file" + include_role: + name: "tripleo_overcloud_container_image_build" + vars: + tripleo_overcloud_container_image_build_kolla_config_file: foo.conf + + - name: Assert "tripleo_overcloud_container_image_build_kolla_config_file" + assert: + that: + - tripleo_overcloud_container_image_build_output == + "overcloud container image build --kolla-config-file foo.conf" + + - name: Check paramter "tripleo_overcloud_container_image_build_list_images" + include_role: + name: "tripleo_overcloud_container_image_build" + vars: + tripleo_overcloud_container_image_build_list_images: true + + - name: Assert "tripleo_overcloud_container_image_build_list_images" + assert: + that: + - tripleo_overcloud_container_image_build_output == + "overcloud container image build --list-images" + + - name: Check paramter "tripleo_overcloud_container_image_build_list_dependencies" + include_role: + name: "tripleo_overcloud_container_image_build" + vars: + tripleo_overcloud_container_image_build_list_dependencies: true + + - name: Assert "tripleo_overcloud_container_image_build_list_dependencies" + assert: + that: + - tripleo_overcloud_container_image_build_output == + "overcloud container image build --list-dependencies" + + - name: Check paramter "tripleo_overcloud_container_image_build_excludes" + include_role: + name: "tripleo_overcloud_container_image_build" + vars: + tripleo_overcloud_container_image_build_excludes: + - nova-api + - nova-compute + + - name: Assert "tripleo_overcloud_container_image_build_excludes" + assert: + that: + - tripleo_overcloud_container_image_build_output == + "overcloud container image build --exclude nova-api --exclude nova-compute" + + - name: Check paramter "tripleo_overcloud_container_image_build_use_buildah" + include_role: + name: "tripleo_overcloud_container_image_build" + vars: + tripleo_overcloud_container_image_build_use_buildah: true + + - name: Assert "tripleo_overcloud_container_image_build_use_buildah" + assert: + that: + - tripleo_overcloud_container_image_build_output == + "overcloud container image build --use-buildah" + + - name: Check paramter "tripleo_overcloud_container_image_build_work_dir" + include_role: + name: "tripleo_overcloud_container_image_build" + vars: + tripleo_overcloud_container_image_build_work_dir: /tmp/foo + + - name: Assert "tripleo_overcloud_container_image_build_work_dir" + assert: + that: + - tripleo_overcloud_container_image_build_output == + "overcloud container image build --work-dir /tmp/foo" diff --git a/roles/tripleo_overcloud_container_image_build/molecule/default/molecule.yml b/roles/tripleo_overcloud_container_image_build/molecule/default/molecule.yml new file mode 100644 index 0000000..2841806 --- /dev/null +++ b/roles/tripleo_overcloud_container_image_build/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_build/molecule/default/prepare.yml b/roles/tripleo_overcloud_container_image_build/molecule/default/prepare.yml new file mode 100644 index 0000000..63bb6ab --- /dev/null +++ b/roles/tripleo_overcloud_container_image_build/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_build/tasks/main.yml b/roles/tripleo_overcloud_container_image_build/tasks/main.yml new file mode 100644 index 0000000..28f29bf --- /dev/null +++ b/roles/tripleo_overcloud_container_image_build/tasks/main.yml @@ -0,0 +1,49 @@ +--- +# tasks file for tripleo_overcloud_container_image_build +- name: Set facts for overcloud container image build + set_fact: + _build_cmd: >- + {{ openstack_bin }} overcloud container image build + {{ tripleo_overcloud_container_image_build_config_files | tripleo.operator.shell_arg_list('--config-file') }} + {{ tripleo_overcloud_container_image_build_kolla_config_file | tripleo.operator.shell_arg_list('--kolla-config-file') }} + {{ tripleo_overcloud_container_image_build_list_images | ternary('--list-images', '') }} + {{ tripleo_overcloud_container_image_build_list_dependencies | ternary('--list-dependencies', '') }} + {{ tripleo_overcloud_container_image_build_excludes | tripleo.operator.shell_arg_list('--exclude') }} + {{ tripleo_overcloud_container_image_build_use_buildah | ternary('--use-buildah', '') }} + {{ tripleo_overcloud_container_image_build_work_dir | tripleo.operator.shell_arg_list('--work-dir') }} + {{ tripleo_overcloud_container_image_build_log_output | ternary((">" ~ tripleo_overcloud_container_image_build_log), '') }} + {{ tripleo_overcloud_container_image_build_log_combine | ternary("2>&1", '') }} + _build_env: {} + +- name: Preserve existing log file if exists + timestamp_file: + path: "{{ tripleo_overcloud_container_image_build_log }}" + when: tripleo_overcloud_container_image_build_log_output|bool + +- name: Show debug information + when: tripleo_overcloud_container_image_build_debug|bool + block: + - name: Show the command + debug: + var: _build_cmd + + - name: Show the environment + debug: + var: _build_env + +- name: Run container image build + shell: "{{ _build_cmd }}" # noqa 305 + environment: "{{ _build_env }}" + args: + executable: /bin/bash + chdir: "{{ tripleo_overcloud_container_image_build_home_dir }}" + warn: false + register: tripleo_overcloud_container_image_build_result + async: "{{ tripleo_overcloud_container_image_build_timeout }}" + poll: "{{ tripleo_overcloud_container_image_build_poll }}" + changed_when: false + when: not ansible_check_mode|bool + +- name: Set output fact + set_fact: + tripleo_overcloud_container_image_build_output: "{{ tripleo_overcloud_container_image_build_result.stdout }}" diff --git a/roles/tripleo_overcloud_container_image_build/tests/inventory b/roles/tripleo_overcloud_container_image_build/tests/inventory new file mode 100644 index 0000000..2fbb50c --- /dev/null +++ b/roles/tripleo_overcloud_container_image_build/tests/inventory @@ -0,0 +1 @@ +localhost diff --git a/roles/tripleo_overcloud_container_image_build/tests/test.yml b/roles/tripleo_overcloud_container_image_build/tests/test.yml new file mode 100644 index 0000000..7beea08 --- /dev/null +++ b/roles/tripleo_overcloud_container_image_build/tests/test.yml @@ -0,0 +1,5 @@ +--- +- hosts: localhost + remote_user: root + roles: + - tripleo_overcloud_container_image_build diff --git a/zuul.d/molecule.yaml b/zuul.d/molecule.yaml index 1c6851f..79abbd3 100644 --- a/zuul.d/molecule.yaml +++ b/zuul.d/molecule.yaml @@ -13,6 +13,7 @@ - tripleo-operator-molecule-tripleo_overcloud_image_upload - 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_deploy - tripleo-operator-molecule-tripleo_overcloud_export - tripleo-operator-molecule-tripleo_overcloud_failures @@ -46,6 +47,7 @@ - tripleo-operator-molecule-tripleo_overcloud_image_upload - 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_deploy - tripleo-operator-molecule-tripleo_overcloud_export - tripleo-operator-molecule-tripleo_overcloud_failures @@ -201,6 +203,20 @@ vars: tox_extra_args: tripleo_overcloud_admin_authorize +- job: + files: + - ^roles/tripleo_overcloud_container_image_build/.* + - ^bindep.txt + - ^galaxy.yml + - ^requirements.txt + - ^setup.cfg + - ^test-requirements.txt + - ^tox.ini + name: tripleo-operator-molecule-tripleo_overcloud_container_image_build + parent: tripleo-operator-molecule-base + vars: + tox_extra_args: tripleo_overcloud_container_image_build + - job: files: - ^roles/tripleo_overcloud_deploy/.*