From a1f78497daad5c5bf22a5828118da724a3f1af66 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 (cherry picked from commit 1b93165288341659c956cdf71fa1903d62d61d7e) --- .../roles/role-tripleo-container-manage.rst | 8 ++++++++ tripleo_ansible/ansible_plugins/filter/helpers.py | 15 +-------------- .../tripleo-container-manage/defaults/main.yml | 1 + .../molecule/default/playbook.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 ++++-- 8 files changed, 21 insertions(+), 18 deletions(-) diff --git a/doc/source/roles/role-tripleo-container-manage.rst b/doc/source/roles/role-tripleo-container-manage.rst index 9ba8ec0dd..921f418bd 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. | @@ -151,6 +153,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 @@ -172,6 +175,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 3e3361eb9..efb245243 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): @@ -92,7 +88,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 @@ -110,15 +106,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 8c1e2b281..98cb970ff 100644 --- a/tripleo_ansible/roles/tripleo-container-manage/defaults/main.yml +++ b/tripleo_ansible/roles/tripleo-container-manage/defaults/main.yml @@ -16,6 +16,7 @@ # All variables intended for modification should place placed in this file. +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/playbook.yml b/tripleo_ansible/roles/tripleo-container-manage/molecule/default/playbook.yml index 4a10de44f..517c7137a 100644 --- a/tripleo_ansible/roles/tripleo-container-manage/molecule/default/playbook.yml +++ b/tripleo_ansible/roles/tripleo-container-manage/molecule/default/playbook.yml @@ -243,6 +243,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 @@ -297,6 +298,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/tasks/delete_orphan.yml b/tripleo_ansible/roles/tripleo-container-manage/tasks/delete_orphan.yml index 61c3f2aa1..cffa37f2d 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 4be02d043..ac6174037 100644 --- a/tripleo_ansible/roles/tripleo-container-manage/tasks/main.yml +++ b/tripleo_ansible/roles/tripleo-container-manage/tasks/main.yml @@ -79,5 +79,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 a853e781a..b9f91e46d 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 9e57bad03..67a60c7e7 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):