Merge "Add operator for tripleo container image build"

This commit is contained in:
Zuul 2020-06-05 13:22:44 +00:00 committed by Gerrit Code Review
commit 9a18b3b36d
11 changed files with 507 additions and 0 deletions

View File

@ -0,0 +1,37 @@
---
###############################################################################
# Container Image Build playbook
#
# Description:
# This is a basic playbook to perform the basic container image build actions
# for TripleO containers.
#
###############################################################################
- hosts: undercloud
collections:
- tripleo.operator
vars:
build_debug: true
registry: quay.io/tripleomaster
tag: current-tripleo
tasks:
- name: Gather the rpm package facts
package_facts:
- name: Check if tripleoclient is installed
fail:
msg: >-
TripleO Client is not installed. Please make sure that the client
has been installed and the repositories are properly configured.
when: (ansible_facts.distribution_major_version|int <= 7 and not 'python2-tripleoclient' in ansible_facts.packages) or
(ansible_facts.distribution_major_version|int >= 8 and not 'python3-tripleoclient' in ansible_facts.packages)
- name: Run container image build
include_role:
name: tripleo_container_image_build
vars:
tripleo_container_image_build_debug: "{{ build_debug }}"
tripleo_container_image_build_registry: "{{ registry }}"
tripleo_container_image_build_tag: "{{ tag }}"
tripleo_container_image_build_push: true

View File

@ -0,0 +1,69 @@
tripleo_container_image_build
=============================
A role to perform the container image build process.
Requirements
------------
None.
Role Variables
--------------
* `tripleo_container_image_build_authfile`: (String) Path of the authentication file. Default: ''
* `tripleo_container_image_build_base`: (String) Name of the base image. Can also specify a tag , e.g. ubi8:latest. Default: ''
* `tripleo_container_image_build_config_file`: (String) YAML Config file specifying the images to build. Default: ''
* `tripleo_container_image_build_config_path`: (String) YAML Config path where image configs are stored. Default: ''
* `tripleo_container_image_build_debug`: (Boolean) Flag to print out the delete command. Default: False
* `tripleo_container_image_build_distro`: (String) Ability to override the distro name; e.g. rhel. Default: ''
* `tripleo_container_image_build_excludes`: (List) Name of containers to exclude from the build. Default: []
* `tripleo_container_image_build_extra_config`: (String) YAML Config file specifying the extra metadata to override; e.g. labels. Default: ''
* `tripleo_container_image_build_generate_scripts_only`: (Boolean) Do not run the actual command - to be used in conjonction with `tripleo_container_image_build_generate_scripts`. By default uses the value of `tripleo_generate_scripts_only` or False if `tripleo_generate_scripts_only` is not defined.
* `tripleo_container_image_build_generate_scripts`: (Boolean) Write out a shell script that can be used to reproduce the command being executed. By default uses the value of `tripleo_generate_scripts` or False if `tripleo_generate_scripts` is not defined.
* `tripleo_container_image_build_home_dir` (String): Path to the home directory. Default: {{ ansible_env.HOME }}
* `tripleo_container_image_build_log` (String): Path to the log file. Default to {{ tripleo_container_image_build_home_dir }}/container_image_build.log
* `tripleo_container_image_build_log_combine`: (Boolean) Whether or not we combine the logs. Default: True
* `tripleo_container_image_build_log_output`: (Boolean) Whether or not we output the logs. Default: True
* `tripleo_container_image_build_namespace`: (String) Namespace for the container images. Default: ''
* `tripleo_container_image_build_poll`: (Integer) Number of seconds to wait between each checks to see if the command has completed. Default: 10
* `tripleo_container_image_build_prefix`: (String) Prefix for the container images names. Default: ''
* `tripleo_container_image_build_push`: (Boolean) Whether or not we push the container images to the registry. Default: False
* `tripleo_container_image_build_registry`: (String) URL of the container image registry. Default: ''
* `tripleo_container_image_build_skip_build`: (Boolean) Whether or not we skip the container image build and just generate configs. Default: False
* `tripleo_container_image_build_tag`: (String) Tag for the container images. Default: ''
* `tripleo_container_image_build_timeout`: (Integer) Number in seconds to wait for the ansible execution of the build command to finish. Default: 5700
* `tripleo_container_image_build_volumes`: (List) Volume to bind mount during the container image builds. Default: []
* `tripleo_container_image_build_work_dir`: (String) Tripleo container builds directory.
Output Variables
----------------
* `tripleo_container_image_build_output`: (String) The command standard output.
* `tripleo_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_container_image_build
var:
tripleo_container_image_build_debug: true
```
License
-------
Apache-2.0

View File

@ -0,0 +1,27 @@
# defaults file for tripleo_container_image_build
---
openstack_bin: openstack
tripleo_container_image_build_authfile:
tripleo_container_image_build_base:
tripleo_container_image_build_config_file:
tripleo_container_image_build_config_path:
tripleo_container_image_build_debug: false
tripleo_container_image_build_distro:
tripleo_container_image_build_excludes: []
tripleo_container_image_build_extra_config:
tripleo_container_image_build_generate_scripts_only: "{{ tripleo_generate_scripts_only | default(False) }}"
tripleo_container_image_build_generate_scripts: "{{ tripleo_generate_scripts | default(False) }}"
tripleo_container_image_build_home_dir: "{{ ansible_env.HOME }}"
tripleo_container_image_build_log: "{{ tripleo_container_image_build_home_dir }}/container_image_build.log"
tripleo_container_image_build_log_combine: true
tripleo_container_image_build_log_output: true
tripleo_container_image_build_namespace:
tripleo_container_image_build_poll: 10
tripleo_container_image_build_prefix:
tripleo_container_image_build_push: false
tripleo_container_image_build_registry:
tripleo_container_image_build_skip_build: false
tripleo_container_image_build_tag:
tripleo_container_image_build_timeout: 5700
tripleo_container_image_build_volumes: []
tripleo_container_image_build_work_dir:

View File

@ -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_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: []

View File

@ -0,0 +1,216 @@
---
- name: Converge
hosts: all
collections:
- tripleo.operator
vars:
openstack_bin: echo
tripleo_container_image_build_poll: 1
tripleo_container_image_build_log_output: false
tripleo_container_image_build_log_combine: false
tasks:
- name: "Include tripleo_container_image_build"
include_role:
name: "tripleo_container_image_build"
- name: Check role
assert:
that:
- tripleo_container_image_build_output == "tripleo container image build"
- name: Check parameter "tripleo_container_image_build_authfile"
include_role:
name: "tripleo_container_image_build"
vars:
tripleo_container_image_build_authfile: /tmp/secure.json
- name: Assert "tripleo_container_image_build_authfile"
assert:
that:
- tripleo_container_image_build_output ==
"tripleo container image build --authfile /tmp/secure.json"
- name: Check parameter "tripleo_container_image_build_base"
include_role:
name: "tripleo_container_image_build"
vars:
tripleo_container_image_build_base: ubi8:latest
- name: Assert "tripleo_container_image_build_base"
assert:
that:
- tripleo_container_image_build_output ==
"tripleo container image build --base ubi8:latest"
- name: Check parameter "tripleo_container_image_build_config_file"
include_role:
name: "tripleo_container_image_build"
vars:
tripleo_container_image_build_config_file: /tmp/tripleo_containers.yaml
- name: Assert "tripleo_container_image_build_config_file"
assert:
that:
- tripleo_container_image_build_output ==
"tripleo container image build --config-file /tmp/tripleo_containers.yaml"
- name: Check parameter "tripleo_container_image_build_config_path"
include_role:
name: "tripleo_container_image_build"
vars:
tripleo_container_image_build_config_path: /tmp/configs
- name: Assert "tripleo_container_image_build_config_path"
assert:
that:
- tripleo_container_image_build_output ==
"tripleo container image build --config-path /tmp/configs"
- name: Check parameter "tripleo_container_image_build_debug"
include_role:
name: "tripleo_container_image_build"
vars:
tripleo_container_image_build_debug: true
- name: Assert "tripleo_container_image_build_debug"
assert:
that:
- tripleo_container_image_build_output ==
"tripleo container image build --debug"
- name: Check parameter "tripleo_container_image_build_distro"
include_role:
name: "tripleo_container_image_build"
vars:
tripleo_container_image_build_distro: fedora
- name: Assert "tripleo_container_image_build_distro"
assert:
that:
- tripleo_container_image_build_output ==
"tripleo container image build --distro fedora"
- name: Check parameter "tripleo_container_image_build_excludes"
include_role:
name: "tripleo_container_image_build"
vars:
tripleo_container_image_build_excludes:
- keystone
- nova_api
- name: Assert "tripleo_container_image_build_excludes"
assert:
that:
- tripleo_container_image_build_output ==
"tripleo container image build --exclude keystone --exclude nova_api"
- name: Check parameter "tripleo_container_image_build_extra_config"
include_role:
name: "tripleo_container_image_build"
vars:
tripleo_container_image_build_extra_config: my_config.yaml
- name: Assert "tripleo_container_image_build_extra_config"
assert:
that:
- tripleo_container_image_build_output ==
"tripleo container image build --extra-config my_config.yaml"
- name: Check parameter "tripleo_container_image_build_namespace"
include_role:
name: "tripleo_container_image_build"
vars:
tripleo_container_image_build_namespace: masterchef
- name: Assert "tripleo_container_image_build_namespace"
assert:
that:
- tripleo_container_image_build_output ==
"tripleo container image build --namespace masterchef"
- name: Check parameter "tripleo_container_image_build_prefix"
include_role:
name: "tripleo_container_image_build"
vars:
tripleo_container_image_build_prefix: os
- name: Assert "tripleo_container_image_build_prefix"
assert:
that:
- tripleo_container_image_build_output ==
"tripleo container image build --prefix os"
- name: Check parameter "tripleo_container_image_build_push"
include_role:
name: "tripleo_container_image_build"
vars:
tripleo_container_image_build_push: true
- name: Assert "tripleo_container_image_build_push"
assert:
that:
- tripleo_container_image_build_output ==
"tripleo container image build --push"
- name: Check parameter "tripleo_container_image_build_registry"
include_role:
name: "tripleo_container_image_build"
vars:
tripleo_container_image_build_registry: localhost:8787
- name: Assert "tripleo_container_image_build_registry"
assert:
that:
- tripleo_container_image_build_output ==
"tripleo container image build --registry localhost:8787"
- name: Check parameter "tripleo_container_image_build_skip_build"
include_role:
name: "tripleo_container_image_build"
vars:
tripleo_container_image_build_skip_build: true
- name: Assert "tripleo_container_image_build_skip_build"
assert:
that:
- tripleo_container_image_build_output ==
"tripleo container image build --skip-build"
- name: Check parameter "tripleo_container_image_build_tag"
include_role:
name: "tripleo_container_image_build"
vars:
tripleo_container_image_build_tag: current
- name: Assert "tripleo_container_image_build_tag"
assert:
that:
- tripleo_container_image_build_output ==
"tripleo container image build --tag current"
- name: Check parameter "tripleo_container_image_build_volumes"
include_role:
name: "tripleo_container_image_build"
vars:
tripleo_container_image_build_volumes:
- '/etc:/etc'
- '/mydir:/mydir'
- name: Assert "tripleo_container_image_build_volumes"
assert:
that:
- tripleo_container_image_build_output ==
"tripleo container image build --volume /etc:/etc --volume /mydir:/mydir"
- name: Check parameter "tripleo_container_image_build_work_dir"
include_role:
name: "tripleo_container_image_build"
vars:
tripleo_container_image_build_work_dir: /work
- name: Assert "tripleo_container_image_build_work_dir"
assert:
that:
- tripleo_container_image_build_output ==
"tripleo container image build --work-dir /work"

View File

@ -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

View File

@ -0,0 +1,8 @@
---
- name: Prepare
hosts: all
tasks:
- name: Include molecule prep
include_role:
name: test_molecule_prep

View File

@ -0,0 +1,67 @@
---
# tasks file for tripleo_container_image_build
- name: Set facts for tripleo container image build
set_fact:
_build_cmd: >-
{{ openstack_bin }} tripleo container image build
{{ tripleo_container_image_build_authfile | ternary('--authfile ' ~ tripleo_container_image_build_authfile, '') }}
{{ tripleo_container_image_build_base | ternary('--base ' ~ tripleo_container_image_build_base, '') }}
{{ tripleo_container_image_build_config_file | ternary('--config-file ' ~ tripleo_container_image_build_config_file, '') }}
{{ tripleo_container_image_build_config_path | ternary('--config-path ' ~ tripleo_container_image_build_config_path, '') }}
{{ tripleo_container_image_build_debug | ternary('--debug', '') }}
{{ tripleo_container_image_build_distro | ternary('--distro ' ~ tripleo_container_image_build_distro, '') }}
{{ tripleo_container_image_build_excludes | tripleo.operator.shell_arg_list('--exclude') }}
{{ tripleo_container_image_build_extra_config | ternary('--extra-config ' ~ tripleo_container_image_build_extra_config, '') }}
{{ tripleo_container_image_build_namespace | ternary('--namespace ' ~ tripleo_container_image_build_namespace, '') }}
{{ tripleo_container_image_build_prefix | ternary('--prefix ' ~ tripleo_container_image_build_prefix, '') }}
{{ tripleo_container_image_build_push | ternary('--push', '') }}
{{ tripleo_container_image_build_registry | ternary('--registry ' ~ tripleo_container_image_build_registry, '') }}
{{ tripleo_container_image_build_skip_build | ternary('--skip-build', '') }}
{{ tripleo_container_image_build_tag | ternary('--tag ' ~ tripleo_container_image_build_tag, '') }}
{{ tripleo_container_image_build_volumes | tripleo.operator.shell_arg_list('--volume') }}
{{ tripleo_container_image_build_work_dir | ternary('--work-dir ' ~ tripleo_container_image_build_work_dir, '') }}
{{ tripleo_container_image_build_log_output | ternary((">" ~ tripleo_container_image_build_log), '') }}
{{ tripleo_container_image_build_log_combine | ternary("2>&1", '') }}
_build_env: {}
- name: Preserve existing log file if exists
timestamp_file:
path: "{{ tripleo_container_image_build_log }}"
when: tripleo_container_image_build_log_output|bool
- name: Show debug information
when: tripleo_container_image_build_debug|bool
block:
- name: Show the command
debug:
var: _build_cmd
- name: Show the environment
debug:
var: _build_env
- name: Write reproducer script
tripleo_shell_script:
dest: "{{ tripleo_container_image_build_home_dir }}/tripleo_container_image_build.sh"
shell_command: "{{ _build_cmd }}"
shell_environment: "{{ _build_env }}"
when: tripleo_container_image_build_generate_scripts|bool
- name: Run tripleo container image build
shell: "{{ _build_cmd }}" # noqa 305
environment: "{{ _build_env }}"
args:
executable: /bin/bash
chdir: "{{ tripleo_container_image_build_home_dir }}"
warn: false
register: tripleo_container_image_build_result
async: "{{ tripleo_container_image_build_timeout }}"
poll: "{{ tripleo_container_image_build_poll }}"
changed_when: false
when:
- not ansible_check_mode|bool
- not tripleo_container_image_build_generate_scripts_only|bool
- name: Set output fact
set_fact:
tripleo_container_image_build_output: "{{ tripleo_container_image_build_result.stdout }}"

View File

@ -0,0 +1 @@
localhost

View File

@ -0,0 +1,5 @@
---
- hosts: localhost
remote_user: root
roles:
- tripleo_container_image_build

View File

@ -4,6 +4,7 @@
jobs:
- tripleo-operator-molecule-test_molecule_prep
- tripleo-operator-molecule-tripleo_config_generate_ansible
- tripleo-operator-molecule-tripleo_container_image_build
- tripleo-operator-molecule-tripleo_container_image_delete
- tripleo-operator-molecule-tripleo_container_image_list
- tripleo-operator-molecule-tripleo_container_image_prepare
@ -67,6 +68,7 @@
jobs:
- tripleo-operator-molecule-test_molecule_prep
- tripleo-operator-molecule-tripleo_config_generate_ansible
- tripleo-operator-molecule-tripleo_container_image_build
- tripleo-operator-molecule-tripleo_container_image_delete
- tripleo-operator-molecule-tripleo_container_image_list
- tripleo-operator-molecule-tripleo_container_image_prepare
@ -163,6 +165,20 @@
vars:
tox_extra_args: tripleo_config_generate_ansible
- job:
files:
- ^roles/tripleo_container_image_build/.*
- ^bindep.txt
- ^galaxy.yml
- ^requirements.txt
- ^setup.cfg
- ^test-requirements.txt
- ^tox.ini
name: tripleo-operator-molecule-tripleo_container_image_build
parent: tripleo-operator-molecule-base
vars:
tox_extra_args: tripleo_container_image_build
- job:
files:
- ^roles/tripleo_container_image_delete/.*