From 1b93165288341659c956cdf71fa1903d62d61d7e Mon Sep 17 00:00:00 2001 From: Rabi Mishra Date: Fri, 28 Aug 2020 14:15:06 +0530 Subject: [PATCH] Expose tripleo_container_manage_clean_orphans var This exposes new var for tripleo_container_manage. Also, removes the check to force set clean_orphans=True in needs_delete filter, when there is one or no item in the startup config. There is a possibility when disabling services, there would be one or zero container_startup_configs for a step. Partial-Bug: #1893335 Change-Id: I9d08168015487c48d8b380a9575ba236b7fb7d0d --- .../roles/role-tripleo_container_manage.rst | 8 ++++++++ tripleo_ansible/ansible_plugins/filter/helpers.py | 15 +-------------- .../tripleo_container_manage/defaults/main.yml | 1 + .../molecule/default/converge.yml | 2 ++ .../molecule/default/molecule.yml | 2 ++ .../tasks/delete_orphan.yml | 3 ++- .../roles/tripleo_container_manage/tasks/main.yml | 2 ++ .../tasks/podman/create.yml | 2 +- .../tests/plugins/filter/test_helpers.py | 6 ++++-- 9 files changed, 23 insertions(+), 18 deletions(-) diff --git a/doc/source/roles/role-tripleo_container_manage.rst b/doc/source/roles/role-tripleo_container_manage.rst index 62c23609d..08d99e591 100644 --- a/doc/source/roles/role-tripleo_container_manage.rst +++ b/doc/source/roles/role-tripleo_container_manage.rst @@ -111,6 +111,8 @@ Roles variables | tripleo_container_manage_config_overrides | {} | Allows to override any | | | | container configuration | +------------------------------------------------+-----------------------------+----------------------------+ +| tripleo_container_manage_clean_orphans | true | Option to clean orphans | ++------------------------------------------------+-----------------------------+----------------------------+ | tripleo_container_manage_valid_exit_code | [] | Allow to check if a | | | | container returned the | | | | exit code in parameter. | @@ -188,6 +190,7 @@ overrides the image setting in one-off. tripleo_container_manage_config_patterns: 'haproxy.json' tripleo_container_manage_config: "/var/lib/tripleo-config/container-startup-config/step_1" tripleo_container_manage_config_id: "tripleo_step1" + tripleo_container_manage_clean_orphans: false tripleo_container_manage_config_overrides: haproxy: image: docker.io/tripleomaster/centos-binary-haproxy:hotfix @@ -209,6 +212,11 @@ containers by Ansible. $ ansible-playbook haproxy.yaml --check --diff +The ``tripleo_container_manage_clean_orphans`` parameter is optional +and can be set to `false` to not clean orphaned containers for a +config_id. It can be used to manage a single container without +impacting other running containers with same config_id. + The ``tripleo_container_manage_config_overrides`` parameter is optional and can be used to override a specific container attribute like the image or the container user. The parameter takes a dictionary where each key is the diff --git a/tripleo_ansible/ansible_plugins/filter/helpers.py b/tripleo_ansible/ansible_plugins/filter/helpers.py index b444fdd88..d810e21cc 100644 --- a/tripleo_ansible/ansible_plugins/filter/helpers.py +++ b/tripleo_ansible/ansible_plugins/filter/helpers.py @@ -19,10 +19,6 @@ import json import re import six -from collections import OrderedDict -from operator import itemgetter - - # cmp() doesn't exist on python3 if six.PY3: def cmp(a, b): @@ -98,7 +94,7 @@ class FilterModule(object): return return_dict def needs_delete(self, container_infos, config, config_id, - clean_orphans=True, check_config=True): + clean_orphans=False, check_config=True): """Returns a list of containers which need to be removed. This filter will check which containers need to be removed for these @@ -116,15 +112,6 @@ class FilterModule(object): to_skip = [] installed_containers = [] - # If config has no item, it's probably due to a user error where - # the given pattern match no container. - # If config has one item, it's because we want to manage only one - # container. - # In both cases, we don't want to remove the others in the same - # config_id. - if len(config) <= 1: - clean_orphans = False - for c in container_infos: c_name = c['Name'] installed_containers.append(c_name) diff --git a/tripleo_ansible/roles/tripleo_container_manage/defaults/main.yml b/tripleo_ansible/roles/tripleo_container_manage/defaults/main.yml index 7abe0a8f7..20c460430 100644 --- a/tripleo_ansible/roles/tripleo_container_manage/defaults/main.yml +++ b/tripleo_ansible/roles/tripleo_container_manage/defaults/main.yml @@ -18,6 +18,7 @@ # All variables intended for modification should place placed in this file. tripleo_container_manage_hide_sensitive_logs: "{{ hide_sensitive_logs | default(true) }}" tripleo_container_manage_debug: "{{ ((ansible_verbosity | int) >= 2) | bool }}" +tripleo_container_manage_clean_orphans: true # All variables within this role should have a prefix of "tripleo_container_manage" tripleo_container_manage_check_puppet_config: false diff --git a/tripleo_ansible/roles/tripleo_container_manage/molecule/default/converge.yml b/tripleo_ansible/roles/tripleo_container_manage/molecule/default/converge.yml index 5cce927fd..cd51a2629 100644 --- a/tripleo_ansible/roles/tripleo_container_manage/molecule/default/converge.yml +++ b/tripleo_ansible/roles/tripleo_container_manage/molecule/default/converge.yml @@ -207,6 +207,7 @@ tripleo_container_manage_config: '/tmp/container-configs' tripleo_container_manage_debug: true tripleo_container_manage_config_patterns: 'fedora.json' + tripleo_container_manage_clean_orphans: false tripleo_container_manage_config_overrides: fedora: image: fedora:rawhide @@ -258,6 +259,7 @@ tripleo_container_manage_config: '/tmp/container-configs' tripleo_container_manage_debug: true tripleo_container_manage_config_patterns: 'feduraaa.json' + tripleo_container_manage_clean_orphans: false tasks: - include_role: name: tripleo_container_manage diff --git a/tripleo_ansible/roles/tripleo_container_manage/molecule/default/molecule.yml b/tripleo_ansible/roles/tripleo_container_manage/molecule/default/molecule.yml index 330d0097e..c13915ae9 100644 --- a/tripleo_ansible/roles/tripleo_container_manage/molecule/default/molecule.yml +++ b/tripleo_ansible/roles/tripleo_container_manage/molecule/default/molecule.yml @@ -33,6 +33,8 @@ provisioner: hosts: instance: ansible_host: localhost + ansible_connection: local + ansible_distribution: centos8 log: true env: ANSIBLE_STDOUT_CALLBACK: yaml diff --git a/tripleo_ansible/roles/tripleo_container_manage/tasks/delete_orphan.yml b/tripleo_ansible/roles/tripleo_container_manage/tasks/delete_orphan.yml index d630ab21c..21edc802a 100644 --- a/tripleo_ansible/roles/tripleo_container_manage/tasks/delete_orphan.yml +++ b/tripleo_ansible/roles/tripleo_container_manage/tasks/delete_orphan.yml @@ -30,4 +30,5 @@ tripleo_container_cli: "{{ tripleo_container_manage_cli }}" tripleo_containers_to_rm: >- {{ podman_containers.containers | needs_delete(config=all_containers_hash, - config_id=tripleo_container_manage_config_id, check_config=False) }} + config_id=tripleo_container_manage_config_id, check_config=False, + clean_orphans=True) }} diff --git a/tripleo_ansible/roles/tripleo_container_manage/tasks/main.yml b/tripleo_ansible/roles/tripleo_container_manage/tasks/main.yml index 289b1d5c8..ab0c4426f 100644 --- a/tripleo_ansible/roles/tripleo_container_manage/tasks/main.yml +++ b/tripleo_ansible/roles/tripleo_container_manage/tasks/main.yml @@ -71,5 +71,7 @@ - tripleo_container_manage_check_puppet_config|bool - name: "Delete orphan containers from {{ tripleo_container_manage_config }}" include_tasks: delete_orphan.yml + when: + - tripleo_container_manage_clean_orphans|bool - name: "Create containers from {{ tripleo_container_manage_config }}" include_tasks: create.yml diff --git a/tripleo_ansible/roles/tripleo_container_manage/tasks/podman/create.yml b/tripleo_ansible/roles/tripleo_container_manage/tasks/podman/create.yml index 08a3e54a0..d34722ae3 100644 --- a/tripleo_ansible/roles/tripleo_container_manage/tasks/podman/create.yml +++ b/tripleo_ansible/roles/tripleo_container_manage/tasks/podman/create.yml @@ -24,7 +24,7 @@ tripleo_containers_to_rm: >- {{ podman_containers.containers | needs_delete(config=batched_container_data| haskey(attribute='action', reverse=True)|singledict, - config_id=tripleo_container_manage_config_id, clean_orphans=False) }} + config_id=tripleo_container_manage_config_id) }} - name: "Async container create/run" async: "{{ (not ansible_check_mode | bool) | ternary('600', omit) }}" diff --git a/tripleo_ansible/tests/plugins/filter/test_helpers.py b/tripleo_ansible/tests/plugins/filter/test_helpers.py index 0ba61c40c..9e942c324 100644 --- a/tripleo_ansible/tests/plugins/filter/test_helpers.py +++ b/tripleo_ansible/tests/plugins/filter/test_helpers.py @@ -488,7 +488,8 @@ class TestHelperFilters(tests_base.TestCase): expected_list = ['rabbitmq', 'haproxy', 'heat', 'test1', 'old_tripleo'] result = self.filters.needs_delete(container_infos=data, config=config, - config_id='tripleo_step1') + config_id='tripleo_step1', + clean_orphans=True) self.assertEqual(result, expected_list) def test_needs_delete_no_config_check(self): @@ -610,7 +611,8 @@ class TestHelperFilters(tests_base.TestCase): result = self.filters.needs_delete(container_infos=data, config=config, config_id='tripleo_step1', - check_config=False) + check_config=False, + clean_orphans=True) self.assertEqual(result, expected_list) def test_needs_delete_single_config(self):