90c52db21e
In some environment the containers' tag isn't modified (think "latest"). This is already supported during deployment so we re-use the code during update. We also make sure that the same mechanism is available for ovn_controller update. It can be selectively disable if one pass: --skip-tags ovn_image to the external-update run command. We remove the ignore error as it's wrong indication that we are not taking errors into account in those tasks. We also adjust the delay as it's 3 seconds by default making the time we check longer than the async tasks. Eventually, we add a new parameter for controlling the downloading of the image "OVNControllerImageUpdateTimeout" which is set to 10min by default. Note that in order to pass CI, we need to modify the tht syntax test: - ensure containers.podman collection is installed; - ensure custom tripleo-ansible filter are found; - make sure tripleo_role_name is defined in the syntax test playbook. Change-Id: I6d439367816d5f5968b8f890f74b7a2f74715f52
266 lines
10 KiB
YAML
266 lines
10 KiB
YAML
heat_template_version: wallaby
|
|
|
|
description: >
|
|
Configures podman on the host
|
|
|
|
parameters:
|
|
DockerInsecureRegistryAddress:
|
|
description: Optional. The IP Address and Port of an insecure docker
|
|
namespace that will be configured in /etc/sysconfig/docker.
|
|
The value can be multiple addresses separated by commas.
|
|
type: comma_delimited_list
|
|
default: []
|
|
EndpointMap:
|
|
default: {}
|
|
description: Mapping of service endpoint -> protocol. Typically set
|
|
via parameter_defaults in the resource registry.
|
|
type: json
|
|
ServiceData:
|
|
default: {}
|
|
description: Dictionary packing service data
|
|
type: json
|
|
ServiceNetMap:
|
|
default: {}
|
|
description: Mapping of service_name -> network name. Typically set
|
|
via parameter_defaults in the resource registry. Use
|
|
parameter_merge_strategies to merge it with the defaults.
|
|
type: json
|
|
RoleName:
|
|
default: ''
|
|
description: Role name on which the service is applied
|
|
type: string
|
|
RoleParameters:
|
|
default: {}
|
|
description: Parameters specific to the role
|
|
type: json
|
|
ContainerImageRegistryLogin:
|
|
type: boolean
|
|
default: false
|
|
description: Flag to enable container registry login actions during the deployment.
|
|
Setting this to true will cause login calls to be performed during the
|
|
deployment.
|
|
ContainerImageRegistryCredentials:
|
|
type: json
|
|
hidden: true
|
|
default: {}
|
|
description: |
|
|
Mapping of image registry hosts to login credentials. Must be in the following example format
|
|
|
|
docker.io:
|
|
username: pa55word
|
|
'192.0.2.1:8787':
|
|
registry_username: password
|
|
ContainerDefaultPidsLimit:
|
|
type: number
|
|
default: 4096
|
|
description: Setting to configure the default pids_limit in /etc/container/container.conf.
|
|
This is supported starting with podman 2.0.x
|
|
ContainerDefaultEventsLogger:
|
|
type: string
|
|
default: 'journald'
|
|
description: Setting to configure where podman logs its events. Uses journald by default
|
|
as that will rotate data stored in tmpfs.
|
|
constraints:
|
|
- allowed_values: ['journald', 'file', 'none']
|
|
SystemdDropInDependencies:
|
|
default: true
|
|
description: tell the tripleo_container_manage to inject
|
|
additional ordering dependencies for the systemd
|
|
scopes associated to podman containers.
|
|
type: boolean
|
|
deployment_source_hosts:
|
|
default: 'Undercloud'
|
|
type: string
|
|
description: Host or hostgroup that runs the deployment
|
|
|
|
conditions:
|
|
insecure_registry_is_set:
|
|
not: {equals : [{get_param: DockerInsecureRegistryAddress}, []]}
|
|
|
|
outputs:
|
|
role_data:
|
|
description: Role data for the podman service
|
|
value:
|
|
ansible_group_vars:
|
|
tripleo_podman_tls_verify: {if: [insecure_registry_is_set, "false", "true"]}
|
|
service_name: podman
|
|
config_settings: {}
|
|
step_config: ''
|
|
host_prep_tasks:
|
|
- name: Install and configure Podman
|
|
block: &install_and_configure_podman
|
|
- name: Set login facts
|
|
no_log: true
|
|
set_fact:
|
|
tripleo_container_registry_insecure_registries:
|
|
if:
|
|
- insecure_registry_is_set
|
|
- {get_param: DockerInsecureRegistryAddress}
|
|
tripleo_container_registry_login: {get_param: ContainerImageRegistryLogin}
|
|
# default that is overwritten by the heat -> dict conversion
|
|
tripleo_container_registry_logins: {}
|
|
tripleo_container_registry_logins_json: {get_param: ContainerImageRegistryCredentials}
|
|
tripleo_container_default_pids_limit: {get_param: ContainerDefaultPidsLimit}
|
|
tripleo_container_events_logger_mechanism: {get_param: ContainerDefaultEventsLogger}
|
|
|
|
- name: Convert logins json to dict
|
|
no_log: true
|
|
set_fact:
|
|
tripleo_container_registry_logins: "{{ tripleo_container_registry_logins_json | from_json }}"
|
|
when:
|
|
- tripleo_container_registry_logins_json is string
|
|
- tripleo_container_registry_login | bool
|
|
- (tripleo_container_registry_logins_json | length) > 0
|
|
|
|
- name: Set registry logins
|
|
no_log: true
|
|
set_fact:
|
|
tripleo_container_registry_logins: "{{ tripleo_container_registry_logins_json }}"
|
|
when:
|
|
- tripleo_container_registry_logins_json is mapping
|
|
- tripleo_container_registry_login | bool
|
|
- (tripleo_container_registry_logins_json | length) > 0
|
|
|
|
- name: Run podman install
|
|
include_role:
|
|
name: tripleo_podman
|
|
tasks_from: tripleo_podman_install.yml
|
|
|
|
- name: Run podman login
|
|
include_role:
|
|
name: tripleo_podman
|
|
tasks_from: tripleo_podman_login.yml
|
|
|
|
- if:
|
|
- {get_param: SystemdDropInDependencies}
|
|
- - name: Configure tripleo_container_manage to generate systemd drop-in dependencies
|
|
copy:
|
|
dest: /etc/sysconfig/podman_drop_in
|
|
content: |
|
|
This file makes tripleo_container_manage generate additional systemd
|
|
dependencies for containers that have special
|
|
start/stop ordering constraints. It ensures that
|
|
those constraints are enforced on reboot/shutdown.
|
|
- - name: Configure tripleo_container_manage to not generate drop-in dependencies
|
|
file:
|
|
path: /etc/sysconfig/podman_drop_in
|
|
state: absent
|
|
|
|
deploy_steps_tasks:
|
|
- when:
|
|
- (step|int) == 1
|
|
block: &podman_prefetch_images
|
|
# NOTE(mwhahaha): validate_certs is a misnomer because what it
|
|
# actually does is enable the --tls-verify flag which forces
|
|
# registries to only be over HTTPS. By default, podman will only
|
|
# use HTTPS registries but has a way to configure specific insecure
|
|
# and non-HTTPS registries. The --tls-verify flag prevents this
|
|
# fallback from functioning. We rely on this fallback for the
|
|
# undercloud registry.
|
|
- name: Pre-fetch all the containers
|
|
become: true
|
|
containers.podman.podman_image:
|
|
name: "{{ prefetch_image }}"
|
|
validate_certs: false
|
|
force: true
|
|
register: result
|
|
until: result is succeeded
|
|
retries: 5
|
|
delay: 5
|
|
loop_control:
|
|
loop_var: prefetch_image
|
|
loop: "{{ lookup('template', tripleo_role_name + '/docker_config.yaml', errors='ignore') | default('{}', True) | from_yaml | recursive_get_key_from_dict(key='image') | unique }}"
|
|
|
|
- name: Manage tripleo container services
|
|
include_role:
|
|
name: tripleo_container_manage
|
|
tasks_from: shutdown.yml
|
|
when:
|
|
- (step|int) == 1
|
|
|
|
service_config_settings: {}
|
|
|
|
upgrade_tasks:
|
|
- name: Run podman install
|
|
when:
|
|
- step|int == 1
|
|
block:
|
|
- name: Make sure the Undercloud hostname is included in /etc/hosts
|
|
when:
|
|
- undercloud_hosts_entries is defined
|
|
lineinfile:
|
|
dest: /etc/hosts
|
|
line: "{{ undercloud_hosts_entries | join('') }}"
|
|
state: present
|
|
- name: Set container_registry_insecure_registries fact.
|
|
set_fact:
|
|
tripleo_container_registry_insecure_registries:
|
|
if:
|
|
- insecure_registry_is_set
|
|
- {get_param: DockerInsecureRegistryAddress}
|
|
- include_role:
|
|
name: tripleo_podman
|
|
tasks_from: tripleo_podman_install.yml
|
|
|
|
- name: system_upgrade_prepare step 2
|
|
tags:
|
|
- never
|
|
- system_upgrade
|
|
- system_upgrade_prepare
|
|
when:
|
|
- step|int == 2
|
|
block:
|
|
- name: Check if pcs is present
|
|
stat:
|
|
path: /usr/sbin/pcs
|
|
register: pcs_stat
|
|
- name: Stop pacemaker cluster before stopping all docker containers
|
|
# NOTE: We are intentionally not using the community version of
|
|
# pacemaker_cluster here due to variances between the two:
|
|
# https://bugs.launchpad.net/tripleo/+bug/1938967
|
|
pacemaker_cluster: state=offline
|
|
when: pcs_stat.stat.exists
|
|
- name: Destroy pacemaker cluster
|
|
command: /usr/sbin/pcs cluster destroy
|
|
when: pcs_stat.stat.exists
|
|
|
|
update_tasks:
|
|
- name: Force pre-fetch of container images
|
|
when:
|
|
- (step|int) == 5
|
|
block: *podman_prefetch_images
|
|
|
|
post_upgrade_tasks:
|
|
# Podman purge tasks are disabled on the undercloud since the ephemeral
|
|
# Heat images need to be kept. When commit
|
|
# https://github.com/containers/podman/commit/a5ad36c65ea07d839fd9bf55a820c8cb9884eed1
|
|
# is available in the podman version used by TripleO, the ephemeral
|
|
# Heat images could be labeled in a way that they could be kept with
|
|
# --filter, and these tasks could be re-enabled on the undercloud.
|
|
- name: Purge Podman
|
|
when:
|
|
- (step | int) == 3
|
|
- deployment_source_hosts not in group_names
|
|
include_role:
|
|
name: tripleo_podman
|
|
tasks_from: tripleo_podman_purge.yml
|
|
vars:
|
|
deployment_source_hosts: {get_param: deployment_source_hosts}
|
|
|
|
post_update_tasks:
|
|
# Podman purge tasks are disabled on the undercloud since the ephemeral
|
|
# Heat images need to be kept. When commit
|
|
# https://github.com/containers/podman/commit/a5ad36c65ea07d839fd9bf55a820c8cb9884eed1
|
|
# is available in the podman version used by TripleO, the ephemeral
|
|
# Heat images could be labeled in a way that they could be kept with
|
|
# --filter, and these tasks could be re-enabled on the undercloud.
|
|
- name: Purge Podman
|
|
when:
|
|
- (step | int) == 3
|
|
- deployment_source_hosts not in group_names
|
|
include_role:
|
|
name: tripleo_podman
|
|
tasks_from: tripleo_podman_purge.yml
|
|
vars:
|
|
deployment_source_hosts: {get_param: deployment_source_hosts}
|