aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorIvan Halomi <ivan.halomi@tietoevry.com>2024-03-06 12:57:00 +0100
committerRoman Krček <roman.krcek@tietoevry.com>2025-02-07 09:40:43 +0000
commit19af5826fc10c7e068e196e68c0d9950e8d13f89 (patch)
tree5a8be5b95e3053482017c272260356173a7940aa
parent401b2b347e54a65c42beab979a82db47be99af0d (diff)
downloadkolla-ansible-19af5826fc10c7e068e196e68c0d9950e8d13f89.tar.gz
kolla-ansible-19af5826fc10c7e068e196e68c0d9950e8d13f89.zip
Move actions to kolla_container_facts
Move actions responsible for info about containers from kolla_container module to kolla_container_facts. Also fixes a bug with inconsistencies between docker and podman in kolla_container_facts. Closes-bug: #2084878 Change-Id: I1db88e28a828ebf073f018b2bae1d9556ec22807 Signed-off-by: Ivan Halomi <ivan.halomi@tietoevry.com> Signed-off-by: Martin Hiner <martin.hiner@tietoevry.com> Signed-off-by: Roman Krček <roman.krcek@tietoevry.com>
-rw-r--r--ansible/library/kolla_container.py6
-rw-r--r--ansible/library/kolla_container_facts.py152
-rw-r--r--ansible/module_utils/kolla_container_worker.py24
-rw-r--r--ansible/roles/aodh/tasks/precheck.yml2
-rw-r--r--ansible/roles/barbican/tasks/precheck.yml2
-rw-r--r--ansible/roles/bifrost/tasks/reconfigure.yml28
-rw-r--r--ansible/roles/bifrost/tasks/stop.yml2
-rw-r--r--ansible/roles/blazar/tasks/precheck.yml2
-rw-r--r--ansible/roles/cinder/tasks/precheck.yml2
-rw-r--r--ansible/roles/cloudkitty/tasks/precheck.yml2
-rw-r--r--ansible/roles/cyborg/tasks/precheck.yml2
-rw-r--r--ansible/roles/designate/tasks/precheck.yml8
-rw-r--r--ansible/roles/etcd/tasks/precheck.yml4
-rw-r--r--ansible/roles/glance/tasks/precheck.yml2
-rw-r--r--ansible/roles/gnocchi/tasks/precheck.yml2
-rw-r--r--ansible/roles/grafana/tasks/precheck.yml2
-rw-r--r--ansible/roles/hacluster/tasks/precheck.yml2
-rw-r--r--ansible/roles/heat/tasks/precheck.yml4
-rw-r--r--ansible/roles/horizon/tasks/precheck.yml2
-rw-r--r--ansible/roles/influxdb/tasks/precheck.yml2
-rw-r--r--ansible/roles/ironic/tasks/precheck.yml8
-rw-r--r--ansible/roles/iscsi/tasks/precheck.yml2
-rw-r--r--ansible/roles/keystone/tasks/bootstrap_service.yml8
-rw-r--r--ansible/roles/keystone/tasks/precheck.yml4
-rw-r--r--ansible/roles/kuryr/tasks/precheck.yml2
-rw-r--r--ansible/roles/letsencrypt/tasks/precheck.yml2
-rw-r--r--ansible/roles/loadbalancer/tasks/precheck.yml18
-rw-r--r--ansible/roles/magnum/tasks/precheck.yml2
-rw-r--r--ansible/roles/manila/tasks/precheck.yml2
-rw-r--r--ansible/roles/mariadb/tasks/backup.yml2
-rw-r--r--ansible/roles/mariadb/tasks/precheck.yml8
-rw-r--r--ansible/roles/masakari/tasks/precheck.yml2
-rw-r--r--ansible/roles/memcached/tasks/precheck.yml2
-rw-r--r--ansible/roles/mistral/tasks/precheck.yml2
-rw-r--r--ansible/roles/neutron/handlers/main.yml2
-rw-r--r--ansible/roles/neutron/tasks/neutron_plugin_agent_check.yml4
-rw-r--r--ansible/roles/neutron/tasks/precheck.yml2
-rw-r--r--ansible/roles/nova-cell/tasks/libvirt-cleanup.yml2
-rw-r--r--ansible/roles/nova-cell/tasks/precheck.yml16
-rw-r--r--ansible/roles/nova/tasks/precheck.yml4
-rw-r--r--ansible/roles/octavia/tasks/precheck.yml4
-rw-r--r--ansible/roles/opensearch/tasks/precheck.yml2
-rw-r--r--ansible/roles/openvswitch/tasks/precheck.yml2
-rw-r--r--ansible/roles/ovn-db/tasks/precheck.yml4
-rw-r--r--ansible/roles/placement/tasks/precheck.yml2
-rw-r--r--ansible/roles/prometheus/tasks/precheck.yml20
-rw-r--r--ansible/roles/rabbitmq/tasks/precheck.yml12
-rw-r--r--ansible/roles/rabbitmq/tasks/remove-ha-all-policy.yml2
-rw-r--r--ansible/roles/rabbitmq/tasks/restart_services.yml2
-rw-r--r--ansible/roles/redis/tasks/precheck.yml2
-rw-r--r--ansible/roles/service-check/tasks/main.yml10
-rw-r--r--ansible/roles/service-config-validate/tasks/validate.yml4
-rw-r--r--ansible/roles/skyline/tasks/precheck.yml4
-rw-r--r--ansible/roles/swift/tasks/precheck.yml16
-rw-r--r--ansible/roles/swift/tasks/reconfigure.yml28
-rw-r--r--ansible/roles/tacker/tasks/precheck.yml2
-rw-r--r--ansible/roles/trove/tasks/precheck.yml2
-rw-r--r--ansible/roles/venus/tasks/precheck.yml2
-rw-r--r--ansible/roles/watcher/tasks/precheck.yml2
-rw-r--r--ansible/roles/zun/tasks/precheck.yml6
-rw-r--r--releasenotes/notes/move-container-facts-1507cec39b2bdbe0.yaml10
-rw-r--r--tests/kolla_container_tests/test_docker_worker.py56
-rw-r--r--tests/kolla_container_tests/test_podman_worker.py57
-rw-r--r--tests/test_kolla_container.py4
-rw-r--r--tests/test_kolla_container_facts.py204
65 files changed, 467 insertions, 338 deletions
diff --git a/ansible/library/kolla_container.py b/ansible/library/kolla_container.py
index a4eaaaedd..c6a0ea5d1 100644
--- a/ansible/library/kolla_container.py
+++ b/ansible/library/kolla_container.py
@@ -47,8 +47,6 @@ options:
- compare_image
- create_volume
- ensure_image
- - get_container_env
- - get_container_state
- pull_image
- remove_container
- remove_image
@@ -276,8 +274,6 @@ def generate_module():
'compare_image',
'create_volume',
'ensure_image',
- 'get_container_env',
- 'get_container_state',
'pull_image',
'recreate_or_restart_container',
'remove_container',
@@ -344,8 +340,6 @@ def generate_module():
['action', 'compare_image', ['name']],
['action', 'create_volume', ['name']],
['action', 'ensure_image', ['image']],
- ['action', 'get_container_env', ['name']],
- ['action', 'get_container_state', ['name']],
['action', 'recreate_or_restart_container', ['name']],
['action', 'remove_container', ['name']],
['action', 'remove_image', ['image']],
diff --git a/ansible/library/kolla_container_facts.py b/ansible/library/kolla_container_facts.py
index 7e2254e51..fcd2afb59 100644
--- a/ansible/library/kolla_container_facts.py
+++ b/ansible/library/kolla_container_facts.py
@@ -12,8 +12,6 @@
# See the License for the specific language governing permissions and
# limitations under the License.
-from abc import ABC
-from abc import abstractmethod
from ansible.module_utils.basic import AnsibleModule
from traceback import format_exc
@@ -63,47 +61,106 @@ EXAMPLES = '''
container_engine: docker
name:
- glance_api
- - glance_registry
container_engine: podman
action: get_containers
+
+ - name: Get Horizon container state
+ kolla_container_facts:
+ container_engine: podman
+ name: horizon
+ action: get_containers_state
+
+ - name: Get Glance container environment
+ kolla_container_facts:
+ container_engine: docker
+ name:
+ - glance_api
+ action: get_containers_env
'''
-class ContainerFactsWorker(ABC):
+class ContainerFactsWorker():
def __init__(self, module):
self.module = module
- self.results = dict(changed=False, _containers=[])
self.params = module.params
+ self.result = dict(changed=False)
+
+ def _get_container_info(self, name: str) -> dict:
+ """Return info about container if it exists."""
+ try:
+ cont = self.client.containers.get(name)
+ return cont.attrs
+ except self.containerError.NotFound:
+ self.module.fail_json(msg="No such container: {}".format(name))
+ return None
+
+ def _remap_envs(self, envs_raw: list) -> dict:
+ """Split list of environment variables separated by '=' to dict.
+
+ Example item in list could be KOLLA_BASE_DISTRO=ubuntu, which
+ would breakdown to {'KOLLA_BASE_DISTRO':'ubuntu'}
+ """
+ envs = dict()
+ for env in envs_raw:
+ if '=' in env:
+ key, value = env.split('=', 1)
+ else:
+ key, value = env, ''
+ envs[key] = value
+ return envs
- @abstractmethod
def get_containers(self):
- pass
+ """Handle when module is called with action get_containers"""
+ names = self.params.get('name')
+ self.result['containers'] = dict()
+
+ containers = self.client.containers.list()
+ for container in containers:
+ container.reload()
+ container_name = container.name
+ if names and container_name not in names:
+ continue
+ self.result['containers'][container_name] = container.attrs
+
+ def get_containers_state(self):
+ """Handle when module is called with action get_containers_state"""
+ # NOTE(r-krcek): This function can be removed when bifrost and swift
+ # roles switch to modern format
+ names = self.params.get('name')
+ self.result['states'] = dict()
+
+ for name in names:
+ cont = self._get_container_info(name)
+ if cont:
+ self.result['states'][name] = cont["State"]["Status"]
+
+ def get_containers_env(self):
+ """Handle when module is called with action get_containers_state"""
+ # NOTE(r-krcek): This function can be removed when bifrost and swift
+ # roles switch to modern format
+ names = self.params.get('name')
+ self.result['envs'] = dict()
+
+ for name in names:
+ cont = self._get_container_info(name)
+ if cont:
+ envs = self._remap_envs(cont['Config']['Env'])
+ self.result['envs'][name] = envs
class DockerFactsWorker(ContainerFactsWorker):
def __init__(self, module):
- super().__init__(module)
try:
import docker
+ import docker.errors as dockerError
except ImportError:
self.module.fail_json(
msg="The docker library could not be imported")
- self.client = docker.APIClient(version=module.params.get(
- 'api_version'))
-
- def get_containers(self):
- containers = self.client.containers()
- names = self.params.get('name')
- if names and not isinstance(names, list):
- names = [names]
- for container in containers:
- for container_name in container['Names']:
- # remove '/' prefix character
- container_name = container_name[1:]
- if names and container_name not in names:
- continue
- self.results['_containers'].append(container)
- self.results[container_name] = container
+ super().__init__(module)
+ self.client = docker.DockerClient(
+ base_url='http+unix:/var/run/docker.sock',
+ version=module.params.get('api_version'))
+ self.containerError = dockerError
class PodmanFactsWorker(ContainerFactsWorker):
@@ -114,29 +171,10 @@ class PodmanFactsWorker(ContainerFactsWorker):
except ImportError:
self.module.fail_json(
msg="The podman library could not be imported")
- self.podmanError = podmanError
super().__init__(module)
self.client = PodmanClient(
base_url="http+unix:/run/podman/podman.sock")
-
- def get_containers(self):
- try:
- containers = self.client.containers.list(
- all=True, ignore_removed=True)
- except self.podmanError.APIError as e:
- self.module.fail_json(failed=True,
- msg=f"Internal error: {e.explanation}")
- names = self.params.get('name')
- if names and not isinstance(names, list):
- names = [names]
-
- for container in containers:
- container.reload()
- container_name = container.attrs['Name']
- if container_name not in names:
- continue
- self.results['_containers'].append(container.attrs)
- self.results[container_name] = container.attrs
+ self.containerError = podmanError
def main():
@@ -145,23 +183,33 @@ def main():
api_version=dict(required=False, type='str', default='auto'),
container_engine=dict(required=True, type='str'),
action=dict(required=True, type='str',
- choices=['get_containers']),
+ choices=['get_containers',
+ 'get_containers_env',
+ 'get_containers_state']),
)
- module = AnsibleModule(argument_spec=argument_spec)
+ required_if = [
+ ['action', 'get_containers_env', ['name']],
+ ['action', 'get_containers_state', ['name']],
+ ]
+ module = AnsibleModule(
+ argument_spec=argument_spec,
+ required_if=required_if,
+ bypass_checks=False
+ )
- cw: ContainerFactsWorker = None
+ cfw: ContainerFactsWorker = None
try:
if module.params.get('container_engine') == 'docker':
- cw = DockerFactsWorker(module)
+ cfw = DockerFactsWorker(module)
else:
- cw = PodmanFactsWorker(module)
+ cfw = PodmanFactsWorker(module)
- result = bool(getattr(cw, module.params.get('action'))())
- module.exit_json(result=result, **cw.results)
+ result = bool(getattr(cfw, module.params.get('action'))())
+ module.exit_json(result=result, **cfw.result)
except Exception:
module.fail_json(changed=True, msg=repr(format_exc()),
- **getattr(cw, 'result', {}))
+ **getattr(cfw, 'result', {}))
if __name__ == "__main__":
diff --git a/ansible/module_utils/kolla_container_worker.py b/ansible/module_utils/kolla_container_worker.py
index bc0f3b471..3e16ac2c9 100644
--- a/ansible/module_utils/kolla_container_worker.py
+++ b/ansible/module_utils/kolla_container_worker.py
@@ -449,30 +449,6 @@ class ContainerWorker(ABC):
def start_container(self):
pass
- def get_container_env(self):
- name = self.params.get('name')
- info = self.get_container_info()
- if not info:
- self.module.fail_json(msg="No such container: {}".format(name))
- else:
- envs = dict()
- for env in info['Config']['Env']:
- if '=' in env:
- key, value = env.split('=', 1)
- else:
- key, value = env, ''
- envs[key] = value
-
- self.module.exit_json(**envs)
-
- def get_container_state(self):
- name = self.params.get('name')
- info = self.get_container_info()
- if not info:
- self.module.fail_json(msg="No such container: {}".format(name))
- else:
- self.module.exit_json(**info['State'])
-
def parse_healthcheck(self, healthcheck):
if not healthcheck:
return None
diff --git a/ansible/roles/aodh/tasks/precheck.yml b/ansible/roles/aodh/tasks/precheck.yml
index 8351e4359..d64bb75ae 100644
--- a/ansible/roles/aodh/tasks/precheck.yml
+++ b/ansible/roles/aodh/tasks/precheck.yml
@@ -23,5 +23,5 @@
timeout: 1
state: stopped
when:
- - container_facts['aodh_api'] is not defined
+ - container_facts.containers['aodh_api'] is not defined
- inventory_hostname in groups['aodh-api']
diff --git a/ansible/roles/barbican/tasks/precheck.yml b/ansible/roles/barbican/tasks/precheck.yml
index b33d06987..1df976153 100644
--- a/ansible/roles/barbican/tasks/precheck.yml
+++ b/ansible/roles/barbican/tasks/precheck.yml
@@ -23,5 +23,5 @@
timeout: 1
state: stopped
when:
- - container_facts['barbican_api'] is not defined
+ - container_facts.containers['barbican_api'] is not defined
- inventory_hostname in groups['barbican-api']
diff --git a/ansible/roles/bifrost/tasks/reconfigure.yml b/ansible/roles/bifrost/tasks/reconfigure.yml
index 63f746e71..5ec184ff9 100644
--- a/ansible/roles/bifrost/tasks/reconfigure.yml
+++ b/ansible/roles/bifrost/tasks/reconfigure.yml
@@ -1,12 +1,12 @@
---
- name: Ensuring the containers up
become: true
- kolla_container:
- common_options: "{{ docker_common_options }}"
+ kolla_container_facts:
name: "{{ item.name }}"
- action: "get_container_state"
+ action: "get_containers_state"
+ container_engine: "{{ kolla_container_engine }}"
register: container_state
- failed_when: not container_state.Running
+ failed_when: container_state.states[item.name] != "running"
when: inventory_hostname in groups[item.group]
with_items:
- { name: bifrost-deploy, group: bifrost-deploy }
@@ -28,10 +28,10 @@
# just remove the container and start again
- name: Containers config strategy
become: true
- kolla_container:
- common_options: "{{ docker_common_options }}"
+ kolla_container_facts:
name: "{{ item.name }}"
- action: "get_container_env"
+ action: "get_containers_env"
+ container_engine: "{{ kolla_container_engine }}"
register: container_envs
when: inventory_hostname in groups[item.group]
with_items:
@@ -39,14 +39,17 @@
- name: Remove the containers
become: true
+ vars:
+ container_name: "{{ item[0]['name'] }}"
+ container_config_strategy: "{{ item[1].envs[container_name] }}"
kolla_container:
common_options: "{{ docker_common_options }}"
- name: "{{ item[0]['name'] }}"
+ name: "{{ container_name }}"
action: "remove_container"
register: remove_containers
when:
- inventory_hostname in groups[item[0]['group']]
- - config_strategy == "COPY_ONCE" or item[1]['KOLLA_CONFIG_STRATEGY'] == 'COPY_ONCE'
+ - config_strategy == "COPY_ONCE" or container_config_strategy == 'COPY_ONCE'
- item[2]['rc'] == 1
with_together:
- [{ name: bifrost-deploy, group: bifrost-deploy }]
@@ -58,14 +61,17 @@
- name: Restart containers
become: true
+ vars:
+ container_name: "{{ item[0]['name'] }}"
+ container_config_strategy: "{{ item[1].envs[container_name] }}"
kolla_container:
common_options: "{{ docker_common_options }}"
- name: "{{ item[0]['name'] }}"
+ name: "{{ container_name }}"
action: "restart_container"
when:
- inventory_hostname in groups[item[0]['group']]
- config_strategy == 'COPY_ALWAYS'
- - item[1]['KOLLA_CONFIG_STRATEGY'] != 'COPY_ONCE'
+ - container_config_strategy != 'COPY_ONCE'
- item[2]['rc'] == 1
with_together:
- [{ name: bifrost-deploy, group: bifrost-deploy }]
diff --git a/ansible/roles/bifrost/tasks/stop.yml b/ansible/roles/bifrost/tasks/stop.yml
index 1c961d243..9d9a3a177 100644
--- a/ansible/roles/bifrost/tasks/stop.yml
+++ b/ansible/roles/bifrost/tasks/stop.yml
@@ -28,7 +28,7 @@
common_options: "{{ docker_common_options }}"
name: "bifrost_deploy"
- when: "'bifrost_deploy' in container_facts"
+ when: "container_facts.containers['bifrost_deploy'] is defined"
when:
- inventory_hostname in groups['bifrost']
diff --git a/ansible/roles/blazar/tasks/precheck.yml b/ansible/roles/blazar/tasks/precheck.yml
index c77486e81..63aff1d87 100644
--- a/ansible/roles/blazar/tasks/precheck.yml
+++ b/ansible/roles/blazar/tasks/precheck.yml
@@ -23,5 +23,5 @@
timeout: 1
state: stopped
when:
- - container_facts['blazar_api'] is not defined
+ - container_facts.containers['blazar_api'] is not defined
- inventory_hostname in groups['blazar-api']
diff --git a/ansible/roles/cinder/tasks/precheck.yml b/ansible/roles/cinder/tasks/precheck.yml
index cd1361e4c..632636ddf 100644
--- a/ansible/roles/cinder/tasks/precheck.yml
+++ b/ansible/roles/cinder/tasks/precheck.yml
@@ -23,7 +23,7 @@
timeout: 1
state: stopped
when:
- - container_facts['cinder_api'] is not defined
+ - container_facts.containers['cinder_api'] is not defined
- inventory_hostname in groups['cinder-api']
- name: Checking at least one valid backend is enabled for Cinder
diff --git a/ansible/roles/cloudkitty/tasks/precheck.yml b/ansible/roles/cloudkitty/tasks/precheck.yml
index 0892ba8e6..a9c758758 100644
--- a/ansible/roles/cloudkitty/tasks/precheck.yml
+++ b/ansible/roles/cloudkitty/tasks/precheck.yml
@@ -23,5 +23,5 @@
timeout: 1
state: stopped
when:
- - container_facts['cloudkitty_api'] is not defined
+ - container_facts.containers['cloudkitty_api'] is not defined
- inventory_hostname in groups['cloudkitty-api']
diff --git a/ansible/roles/cyborg/tasks/precheck.yml b/ansible/roles/cyborg/tasks/precheck.yml
index 6211c5e24..68b7eaa04 100644
--- a/ansible/roles/cyborg/tasks/precheck.yml
+++ b/ansible/roles/cyborg/tasks/precheck.yml
@@ -23,5 +23,5 @@
timeout: 1
state: stopped
when:
- - container_facts['cyborg_api'] is not defined
+ - container_facts.containers['cyborg_api'] is not defined
- inventory_hostname in groups['cyborg-api']
diff --git a/ansible/roles/designate/tasks/precheck.yml b/ansible/roles/designate/tasks/precheck.yml
index 80337a3a1..0943afd6d 100644
--- a/ansible/roles/designate/tasks/precheck.yml
+++ b/ansible/roles/designate/tasks/precheck.yml
@@ -25,7 +25,7 @@
timeout: 1
state: stopped
when:
- - container_facts['designate_api'] is not defined
+ - container_facts.containers['designate_api'] is not defined
- inventory_hostname in groups['designate-api']
- name: Checking free port for designate mdns
@@ -36,7 +36,7 @@
timeout: 1
state: stopped
when:
- - container_facts['designate_mdns'] is not defined
+ - container_facts.containers['designate_mdns'] is not defined
- inventory_hostname in groups['designate-mdns']
- name: Checking free port for designate backend bind9 port
@@ -48,7 +48,7 @@
state: stopped
when:
- designate_backend == 'bind9'
- - container_facts['designate_backend_bind9'] is not defined
+ - container_facts.containers['designate_backend_bind9'] is not defined
- inventory_hostname in groups['designate-backend-bind9']
- name: Checking free port for designate backend rndc port
@@ -60,5 +60,5 @@
state: stopped
when:
- designate_backend == 'bind9'
- - container_facts['designate_backend_bind9'] is not defined
+ - container_facts.containers['designate_backend_bind9'] is not defined
- inventory_hostname in groups['designate-backend-bind9']
diff --git a/ansible/roles/etcd/tasks/precheck.yml b/ansible/roles/etcd/tasks/precheck.yml
index 131f4132b..e2cc9d2f8 100644
--- a/ansible/roles/etcd/tasks/precheck.yml
+++ b/ansible/roles/etcd/tasks/precheck.yml
@@ -23,7 +23,7 @@
timeout: 1
state: stopped
when:
- - container_facts['etcd'] is not defined
+ - container_facts.containers['etcd'] is not defined
- inventory_hostname in groups[etcd_services.etcd.group]
- name: Checking free port for Etcd Client
@@ -34,5 +34,5 @@
timeout: 1
state: stopped
when:
- - container_facts['etcd'] is not defined
+ - container_facts.containers['etcd'] is not defined
- inventory_hostname in groups[etcd_services.etcd.group]
diff --git a/ansible/roles/glance/tasks/precheck.yml b/ansible/roles/glance/tasks/precheck.yml
index 09cff1e9e..7e0e4adfa 100644
--- a/ansible/roles/glance/tasks/precheck.yml
+++ b/ansible/roles/glance/tasks/precheck.yml
@@ -25,7 +25,7 @@
state: stopped
when:
- service | service_enabled_and_mapped_to_host
- - container_facts['glance_api'] is not defined
+ - container_facts.containers['glance_api'] is not defined
- name: Check if S3 configurations are defined
assert:
diff --git a/ansible/roles/gnocchi/tasks/precheck.yml b/ansible/roles/gnocchi/tasks/precheck.yml
index f0ecf557c..0e797cf91 100644
--- a/ansible/roles/gnocchi/tasks/precheck.yml
+++ b/ansible/roles/gnocchi/tasks/precheck.yml
@@ -23,5 +23,5 @@
timeout: 1
state: stopped
when:
- - container_facts['gnocchi_api'] is not defined
+ - container_facts.containers['gnocchi_api'] is not defined
- inventory_hostname in groups['gnocchi-api']
diff --git a/ansible/roles/grafana/tasks/precheck.yml b/ansible/roles/grafana/tasks/precheck.yml
index a95701c49..c2ee76847 100644
--- a/ansible/roles/grafana/tasks/precheck.yml
+++ b/ansible/roles/grafana/tasks/precheck.yml
@@ -23,5 +23,5 @@
timeout: 1
state: stopped
when:
- - container_facts['grafana'] is not defined
+ - container_facts.containers['grafana'] is not defined
- inventory_hostname in groups['grafana']
diff --git a/ansible/roles/hacluster/tasks/precheck.yml b/ansible/roles/hacluster/tasks/precheck.yml
index 80391d046..b05443b4b 100644
--- a/ansible/roles/hacluster/tasks/precheck.yml
+++ b/ansible/roles/hacluster/tasks/precheck.yml
@@ -23,5 +23,5 @@
timeout: 1
state: stopped
when:
- - container_facts['hacluster_pacemaker_remote'] is not defined
+ - container_facts.containers['hacluster_pacemaker_remote'] is not defined
- inventory_hostname in groups['hacluster-remote']
diff --git a/ansible/roles/heat/tasks/precheck.yml b/ansible/roles/heat/tasks/precheck.yml
index d10ba4ae7..0d490d198 100644
--- a/ansible/roles/heat/tasks/precheck.yml
+++ b/ansible/roles/heat/tasks/precheck.yml
@@ -23,7 +23,7 @@
timeout: 1
state: stopped
when:
- - container_facts['heat_api'] is not defined
+ - container_facts.containers['heat_api'] is not defined
- inventory_hostname in groups['heat-api']
- name: Checking free port for Heat API CFN
@@ -34,5 +34,5 @@
timeout: 1
state: stopped
when:
- - container_facts['heat_api_cfn'] is not defined
+ - container_facts.containers['heat_api_cfn'] is not defined
- inventory_hostname in groups['heat-api-cfn']
diff --git a/ansible/roles/horizon/tasks/precheck.yml b/ansible/roles/horizon/tasks/precheck.yml
index 08f0c2163..5fd42c1bd 100644
--- a/ansible/roles/horizon/tasks/precheck.yml
+++ b/ansible/roles/horizon/tasks/precheck.yml
@@ -24,7 +24,7 @@
timeout: 1
state: stopped
when:
- - container_facts['horizon'] is not defined
+ - container_facts.containers['horizon'] is not defined
- inventory_hostname in groups[horizon.group]
# TODO(mgoddard): Remove in the 2025.1 E release.
diff --git a/ansible/roles/influxdb/tasks/precheck.yml b/ansible/roles/influxdb/tasks/precheck.yml
index 4629ccc76..a419af9ca 100644
--- a/ansible/roles/influxdb/tasks/precheck.yml
+++ b/ansible/roles/influxdb/tasks/precheck.yml
@@ -23,5 +23,5 @@
timeout: 1
state: stopped
when:
- - container_facts['influxdb'] is not defined
+ - container_facts.containers['influxdb'] is not defined
- inventory_hostname in groups['influxdb']
diff --git a/ansible/roles/ironic/tasks/precheck.yml b/ansible/roles/ironic/tasks/precheck.yml
index 0ff143079..99394cf6a 100644
--- a/ansible/roles/ironic/tasks/precheck.yml
+++ b/ansible/roles/ironic/tasks/precheck.yml
@@ -26,7 +26,7 @@
timeout: 1
state: stopped
when:
- - container_facts['ironic_api'] is not defined
+ - container_facts.containers['ironic_api'] is not defined
- inventory_hostname in groups['ironic-api']
- name: Checking free port for Ironic Inspector
@@ -37,7 +37,7 @@
timeout: 1
state: stopped
when:
- - container_facts['ironic_inspector'] is not defined
+ - container_facts.containers['ironic_inspector'] is not defined
- inventory_hostname in groups['ironic-inspector']
- name: Checking free port for Ironic HTTP server
@@ -48,7 +48,7 @@
timeout: 1
state: stopped
when:
- - container_facts['ironic_http'] is not defined
+ - container_facts.containers['ironic_http'] is not defined
- inventory_hostname in groups['ironic-http']
- name: Checking free port for Ironic Prometheus Exporter
@@ -60,7 +60,7 @@
state: stopped
when:
- enable_ironic_prometheus_exporter | bool
- - container_facts['ironic_prometheus_exporter'] is not defined
+ - container_facts.containers['ironic_prometheus_exporter'] is not defined
- inventory_hostname in groups['ironic-conductor']
- name: Checking ironic-agent files exist for Ironic Inspector
diff --git a/ansible/roles/iscsi/tasks/precheck.yml b/ansible/roles/iscsi/tasks/precheck.yml
index bd72b1da4..7b43d45ae 100644
--- a/ansible/roles/iscsi/tasks/precheck.yml
+++ b/ansible/roles/iscsi/tasks/precheck.yml
@@ -23,7 +23,7 @@
timeout: 1
state: stopped
when:
- - container_facts['iscsid'] is not defined
+ - container_facts.containers['iscsid'] is not defined
- inventory_hostname in groups[iscsi_services.iscsid.group]
- iscsi_services.iscsid.enabled | bool
diff --git a/ansible/roles/keystone/tasks/bootstrap_service.yml b/ansible/roles/keystone/tasks/bootstrap_service.yml
index daefcfaeb..27e52f790 100644
--- a/ansible/roles/keystone/tasks/bootstrap_service.yml
+++ b/ansible/roles/keystone/tasks/bootstrap_service.yml
@@ -15,7 +15,7 @@
# Probably what we care about is the existence of Fernet key 0.
- name: Group nodes where keystone_fernet is running
group_by:
- key: keystone_fernet_{{ container_facts['keystone_fernet'].State | default('bootstrap') }}
+ key: keystone_fernet_running_{{ container_facts.containers['keystone_fernet'] is defined }}
changed_when: false
# NOTE(mgoddard): If we bootstrap Fernet keys on an existing cluster, this
@@ -23,12 +23,12 @@
- name: Fail if any hosts need bootstrapping and not all hosts targeted
fail:
msg: >
- Some hosts ({{ groups['keystone_fernet_bootstrap'] | join(', ') }}) need
+ Some hosts ({{ groups['keystone_fernet_running_False'] | join(', ') }}) need
Fernet key bootstrapping, but not all Keystone hosts are in the target
list. Stopping as it may be unsafe to proceed. Please run without --limit
or --serial to bootstrap these hosts.
when:
- - groups['keystone_fernet_running'] is not defined
+ - groups['keystone_fernet_running_True'] is not defined
- groups['keystone'] | difference(ansible_play_batch) | list | length > 0
- name: Running Keystone bootstrap container
@@ -73,4 +73,4 @@
run_once: True
delegate_to: "{{ groups['keystone'][0] }}"
when:
- - groups['keystone_fernet_running'] is not defined
+ - groups['keystone_fernet_running_True'] is not defined
diff --git a/ansible/roles/keystone/tasks/precheck.yml b/ansible/roles/keystone/tasks/precheck.yml
index 3a84f8677..d89fe76b7 100644
--- a/ansible/roles/keystone/tasks/precheck.yml
+++ b/ansible/roles/keystone/tasks/precheck.yml
@@ -24,7 +24,7 @@
timeout: 1
state: stopped
when:
- - container_facts['keystone'] is not defined
+ - container_facts.containers['keystone'] is not defined
- inventory_hostname in groups['keystone']
- name: Checking free port for Keystone SSH
@@ -37,7 +37,7 @@
timeout: 1
state: stopped
when:
- - container_facts['keystone_ssh'] is not defined
+ - container_facts.containers['keystone_ssh'] is not defined
- keystone_ssh.enabled | bool
- inventory_hostname in groups['keystone']
diff --git a/ansible/roles/kuryr/tasks/precheck.yml b/ansible/roles/kuryr/tasks/precheck.yml
index 31acfd6c0..b33710b73 100644
--- a/ansible/roles/kuryr/tasks/precheck.yml
+++ b/ansible/roles/kuryr/tasks/precheck.yml
@@ -23,5 +23,5 @@
timeout: 1
state: stopped
when:
- - container_facts['kuryr'] is not defined
+ - container_facts.containers['kuryr'] is not defined
- inventory_hostname in groups['compute']
diff --git a/ansible/roles/letsencrypt/tasks/precheck.yml b/ansible/roles/letsencrypt/tasks/precheck.yml
index f23245710..f0a5ff9d1 100644
--- a/ansible/roles/letsencrypt/tasks/precheck.yml
+++ b/ansible/roles/letsencrypt/tasks/precheck.yml
@@ -18,7 +18,7 @@
timeout: 1
state: stopped
when:
- - container_facts['letsencrypt_webserver'] is not defined
+ - container_facts.containers['letsencrypt_webserver'] is not defined
- service | service_enabled_and_mapped_to_host
- name: Validating letsencrypt email variable
diff --git a/ansible/roles/loadbalancer/tasks/precheck.yml b/ansible/roles/loadbalancer/tasks/precheck.yml
index b499c086b..407a8bc65 100644
--- a/ansible/roles/loadbalancer/tasks/precheck.yml
+++ b/ansible/roles/loadbalancer/tasks/precheck.yml
@@ -19,7 +19,7 @@
- name: Group hosts by whether they are running keepalived
group_by:
- key: "keepalived_running_{{ container_facts['keepalived'] is defined }}"
+ key: "keepalived_running_{{ container_facts.containers['keepalived'] is defined }}"
changed_when: false
check_mode: false
when:
@@ -28,7 +28,7 @@
- name: Group hosts by whether they are running HAProxy
group_by:
- key: "haproxy_running_{{ container_facts['haproxy'] is defined }}"
+ key: "haproxy_running_{{ container_facts.containers['haproxy'] is defined }}"
changed_when: false
check_mode: false
when:
@@ -37,7 +37,7 @@
- name: Group hosts by whether they are running ProxySQL
group_by:
- key: "proxysql_running_{{ container_facts['proxysql'] is defined }}"
+ key: "proxysql_running_{{ container_facts.containers['proxysql'] is defined }}"
changed_when: false
check_mode: false
when:
@@ -131,7 +131,7 @@
state: stopped
when:
- enable_haproxy | bool
- - container_facts['haproxy'] is not defined
+ - container_facts.containers['haproxy'] is not defined
- inventory_hostname in groups['loadbalancer']
- name: Checking free port for HAProxy monitor (api interface)
@@ -143,7 +143,7 @@
state: stopped
when:
- enable_haproxy | bool
- - container_facts['haproxy'] is not defined
+ - container_facts.containers['haproxy'] is not defined
- inventory_hostname in groups['loadbalancer']
- name: Checking free port for HAProxy monitor (vip interface)
@@ -168,7 +168,7 @@
state: stopped
when:
- enable_proxysql | bool
- - container_facts['proxysql'] is not defined
+ - container_facts.containers['proxysql'] is not defined
- inventory_hostname in groups['loadbalancer']
- name: Checking free port for ProxySQL admin (vip interface)
@@ -194,7 +194,7 @@
when:
- enable_proxysql | bool
- enable_prometheus_proxysql_exporter | bool
- - container_facts['proxysql'] is not defined
+ - container_facts.containers['proxysql'] is not defined
- inventory_hostname in groups['loadbalancer']
- name: Checking free port for ProxySQL prometheus exporter (vip interface)
@@ -224,7 +224,7 @@
when:
- enable_haproxy | bool
- enable_keepalived | bool
- - container_facts['keepalived'] is not defined
+ - container_facts.containers['keepalived'] is not defined
- inventory_hostname in groups['loadbalancer']
- name: Getting haproxy stat
@@ -233,7 +233,7 @@
register: haproxy_stat_shell
changed_when: false
check_mode: false
- when: container_facts['haproxy'] is defined
+ when: container_facts.containers['haproxy'] is defined
- name: Setting haproxy stat fact
set_fact:
diff --git a/ansible/roles/magnum/tasks/precheck.yml b/ansible/roles/magnum/tasks/precheck.yml
index d9e83fb00..da22f10e4 100644
--- a/ansible/roles/magnum/tasks/precheck.yml
+++ b/ansible/roles/magnum/tasks/precheck.yml
@@ -23,5 +23,5 @@
timeout: 1
state: stopped
when:
- - container_facts['magnum_api'] is not defined
+ - container_facts.containers['magnum_api'] is not defined
- inventory_hostname in groups['magnum-api']
diff --git a/ansible/roles/manila/tasks/precheck.yml b/ansible/roles/manila/tasks/precheck.yml
index 630b28862..59c9675e3 100644
--- a/ansible/roles/manila/tasks/precheck.yml
+++ b/ansible/roles/manila/tasks/precheck.yml
@@ -23,5 +23,5 @@
timeout: 1
state: stopped
when:
- - container_facts['manila_api'] is not defined
+ - container_facts.containers['manila_api'] is not defined
- inventory_hostname in groups['manila-api']
diff --git a/ansible/roles/mariadb/tasks/backup.yml b/ansible/roles/mariadb/tasks/backup.yml
index 1c25f9bac..0ddd8521d 100644
--- a/ansible/roles/mariadb/tasks/backup.yml
+++ b/ansible/roles/mariadb/tasks/backup.yml
@@ -21,7 +21,7 @@
# NOTE(mgoddard): Try to use the same image as the MariaDB server container
# to avoid compatibility issues. See
# https://bugs.launchpad.net/kolla-ansible/+bug/2058644.
- image: "{{ container_facts.mariadb.Image | default(mariadb_services.mariadb.image) }}"
+ image: "{{ container_facts.containers[mariadb_services.mariadb.container_name].Config.Image | default(mariadb_services.mariadb.image) }}"
name: "mariabackup"
restart_policy: oneshot
remove_on_exit: True
diff --git a/ansible/roles/mariadb/tasks/precheck.yml b/ansible/roles/mariadb/tasks/precheck.yml
index d6337e7de..9c5317041 100644
--- a/ansible/roles/mariadb/tasks/precheck.yml
+++ b/ansible/roles/mariadb/tasks/precheck.yml
@@ -23,7 +23,7 @@
timeout: 1
state: stopped
when:
- - container_facts['mariadb'] is not defined
+ - container_facts.containers['mariadb'] is not defined
- name: Checking free port for MariaDB WSREP
wait_for:
@@ -33,7 +33,7 @@
timeout: 1
state: stopped
when:
- - container_facts['mariadb'] is not defined
+ - container_facts.containers['mariadb'] is not defined
- name: Checking free port for MariaDB IST
wait_for:
@@ -43,7 +43,7 @@
timeout: 1
state: stopped
when:
- - container_facts['mariadb'] is not defined
+ - container_facts.containers['mariadb'] is not defined
- name: Checking free port for MariaDB SST
wait_for:
@@ -53,4 +53,4 @@
timeout: 1
state: stopped
when:
- - container_facts['mariadb'] is not defined
+ - container_facts.containers['mariadb'] is not defined
diff --git a/ansible/roles/masakari/tasks/precheck.yml b/ansible/roles/masakari/tasks/precheck.yml
index 71d9cca21..e3faf0908 100644
--- a/ansible/roles/masakari/tasks/precheck.yml
+++ b/ansible/roles/masakari/tasks/precheck.yml
@@ -23,5 +23,5 @@
timeout: 1
state: stopped
when:
- - container_facts['masakari_api'] is not defined
+ - container_facts.containers['masakari_api'] is not defined
- inventory_hostname in groups['masakari-api']
diff --git a/ansible/roles/memcached/tasks/precheck.yml b/ansible/roles/memcached/tasks/precheck.yml
index c5ab94ce0..189e7dd2b 100644
--- a/ansible/roles/memcached/tasks/precheck.yml
+++ b/ansible/roles/memcached/tasks/precheck.yml
@@ -23,5 +23,5 @@
timeout: 1
state: stopped
when:
- - container_facts['memcached'] is not defined
+ - container_facts.containers['memcached'] is not defined
- inventory_hostname in groups['memcached']
diff --git a/ansible/roles/mistral/tasks/precheck.yml b/ansible/roles/mistral/tasks/precheck.yml
index 307b4376e..5ffb84ae7 100644
--- a/ansible/roles/mistral/tasks/precheck.yml
+++ b/ansible/roles/mistral/tasks/precheck.yml
@@ -23,5 +23,5 @@
timeout: 1
state: stopped
when:
- - container_facts['mistral_api'] is not defined
+ - container_facts.containers['mistral_api'] is not defined
- inventory_hostname in groups['mistral-api']
diff --git a/ansible/roles/neutron/handlers/main.yml b/ansible/roles/neutron/handlers/main.yml
index ffaf8950e..7831fabc6 100644
--- a/ansible/roles/neutron/handlers/main.yml
+++ b/ansible/roles/neutron/handlers/main.yml
@@ -89,7 +89,7 @@
- name: Group hosts
group_by:
- key: neutron_l3_agent_running_{{ container_facts['neutron_l3_agent'] is defined }}
+ key: neutron_l3_agent_running_{{ container_facts.containers['neutron_l3_agent'] is defined }}
listen: Restart neutron-l3-agent container
- name: Start stopped neutron-l3-agent container
diff --git a/ansible/roles/neutron/tasks/neutron_plugin_agent_check.yml b/ansible/roles/neutron/tasks/neutron_plugin_agent_check.yml
index 8fa64093f..76b8e440d 100644
--- a/ansible/roles/neutron/tasks/neutron_plugin_agent_check.yml
+++ b/ansible/roles/neutron/tasks/neutron_plugin_agent_check.yml
@@ -24,7 +24,7 @@
assert:
that: neutron_plugin_agent == 'ovn'
fail_msg: "ML2/OVN agent detected, neutron_plugin_agent is not set to 'ovn', Kolla-Ansible does not support this migration operation."
- when: (container_facts['ovn_controller'] is defined) or (container_volume_facts['ovn_nb_db'] is defined) or (container_volume_facts['ovn_sb_db'] is defined)
+ when: (container_facts.containers['ovn_controller'] is defined) or (container_volume_facts['ovn_nb_db'] is defined) or (container_volume_facts['ovn_sb_db'] is defined)
- name: Check for ML2/OVS presence
assert:
@@ -33,4 +33,4 @@
- container_volume_facts['ovn_nb_db'] is not defined
- container_volume_facts['ovn_sb_db'] is not defined
fail_msg: "ML2/OVS agent detected, neutron_plugin_agent is not set to 'openvswitch', Kolla-Ansible does not support this migration operation."
- when: container_facts['neutron_openvswitch_agent'] is defined
+ when: container_facts.containers['neutron_openvswitch_agent'] is defined
diff --git a/ansible/roles/neutron/tasks/precheck.yml b/ansible/roles/neutron/tasks/precheck.yml
index 74f1eabc2..16f7b0db4 100644
--- a/ansible/roles/neutron/tasks/precheck.yml
+++ b/ansible/roles/neutron/tasks/precheck.yml
@@ -23,7 +23,7 @@
timeout: 1
state: stopped
when:
- - container_facts['neutron_server'] is not defined
+ - container_facts.containers['neutron_server'] is not defined
- inventory_hostname in groups['neutron-server']
- name: Checking number of network agents
diff --git a/ansible/roles/nova-cell/tasks/libvirt-cleanup.yml b/ansible/roles/nova-cell/tasks/libvirt-cleanup.yml
index 2a61585e8..316e2cf4c 100644
--- a/ansible/roles/nova-cell/tasks/libvirt-cleanup.yml
+++ b/ansible/roles/nova-cell/tasks/libvirt-cleanup.yml
@@ -41,7 +41,7 @@
common_options: "{{ docker_common_options }}"
action: "stop_and_remove_container"
name: nova_libvirt
- when: container_facts['nova_libvirt'] is defined
+ when: container_facts.containers['nova_libvirt'] is defined
- name: Remove nova_libvirt Docker volumes
become: true
diff --git a/ansible/roles/nova-cell/tasks/precheck.yml b/ansible/roles/nova-cell/tasks/precheck.yml
index 410debff0..b0b510a5b 100644
--- a/ansible/roles/nova-cell/tasks/precheck.yml
+++ b/ansible/roles/nova-cell/tasks/precheck.yml
@@ -39,7 +39,7 @@
timeout: 1
state: stopped
when:
- - container_facts['nova_novncproxy'] is not defined
+ - container_facts.containers['nova_novncproxy'] is not defined
- service | service_enabled_and_mapped_to_host
- name: Checking free port for Nova Serial Proxy
@@ -52,7 +52,7 @@
timeout: 1
state: stopped
when:
- - container_facts['nova_serialproxy'] is not defined
+ - container_facts.containers['nova_serialproxy'] is not defined
- service | service_enabled_and_mapped_to_host
- name: Checking free port for Nova Spice HTML5 Proxy
@@ -65,7 +65,7 @@
timeout: 1
state: stopped
when:
- - container_facts['nova_spicehtml5proxy'] is not defined
+ - container_facts.containers['nova_spicehtml5proxy'] is not defined
- service | service_enabled_and_mapped_to_host
- name: Checking free port for Nova SSH (API interface)
@@ -78,7 +78,7 @@
timeout: 1
state: stopped
when:
- - container_facts['nova_ssh'] is not defined
+ - container_facts.containers['nova_ssh'] is not defined
- service | service_enabled_and_mapped_to_host
- name: Checking free port for Nova SSH (migration interface)
@@ -92,7 +92,7 @@
state: stopped
when:
- migration_interface_address != api_interface_address
- - container_facts['nova_ssh'] is not defined
+ - container_facts.containers['nova_ssh'] is not defined
- service | service_enabled_and_mapped_to_host
- name: Checking free port for Nova Libvirt
@@ -105,7 +105,7 @@
timeout: 1
state: stopped
when:
- - container_facts['nova_libvirt'] is not defined
+ - container_facts.containers['nova_libvirt'] is not defined
- service | service_enabled_and_mapped_to_host
- name: Checking that host libvirt is not running
@@ -115,7 +115,7 @@
register: result
failed_when: result.stat.exists
when:
- - container_facts['nova_libvirt'] is not defined
+ - container_facts.containers['nova_libvirt'] is not defined
- service | service_enabled_and_mapped_to_host
- name: Checking that nova_libvirt container is not running
@@ -127,6 +127,6 @@
the 'enable_nova_libvirt_container' flag. Stop and remove the container
manually, taking care to migrate any state to the host libvirt daemon.
when:
- - container_facts['nova_libvirt'] is defined
+ - container_facts.containers['nova_libvirt'] is defined
- not nova_libvirt.enabled | bool
- inventory_hostname in groups[nova_libvirt.group]
diff --git a/ansible/roles/nova/tasks/precheck.yml b/ansible/roles/nova/tasks/precheck.yml
index ee68197c3..b2ac09312 100644
--- a/ansible/roles/nova/tasks/precheck.yml
+++ b/ansible/roles/nova/tasks/precheck.yml
@@ -25,7 +25,7 @@
timeout: 1
state: stopped
when:
- - container_facts['nova_api'] is not defined
+ - container_facts.containers['nova_api'] is not defined
- service | service_enabled_and_mapped_to_host
- name: Checking free port for Nova Metadata
@@ -38,5 +38,5 @@
timeout: 1
state: stopped
when:
- - container_facts['nova_api'] is not defined
+ - container_facts.containers['nova_api'] is not defined
- service | service_enabled_and_mapped_to_host
diff --git a/ansible/roles/octavia/tasks/precheck.yml b/ansible/roles/octavia/tasks/precheck.yml
index be672853e..51b4a0be4 100644
--- a/ansible/roles/octavia/tasks/precheck.yml
+++ b/ansible/roles/octavia/tasks/precheck.yml
@@ -24,7 +24,7 @@
timeout: 1
state: stopped
when:
- - container_facts['octavia_api'] is not defined
+ - container_facts.containers['octavia_api'] is not defined
- inventory_hostname in groups['octavia-api']
- name: Checking free port for Octavia Health Manager
@@ -35,7 +35,7 @@
timeout: 1
state: stopped
when:
- - container_facts['octavia_health_manager'] is not defined
+ - container_facts.containers['octavia_health_manager'] is not defined
- inventory_hostname in groups['octavia-health-manager']
- name: Checking certificate files exist for octavia
diff --git a/ansible/roles/opensearch/tasks/precheck.yml b/ansible/roles/opensearch/tasks/precheck.yml
index 47e2dff16..daceb7b4c 100644
--- a/ansible/roles/opensearch/tasks/precheck.yml
+++ b/ansible/roles/opensearch/tasks/precheck.yml
@@ -23,5 +23,5 @@
timeout: 1
state: stopped
when:
- - container_facts['opensearch'] is not defined
+ - container_facts.containers['opensearch'] is not defined
- inventory_hostname in groups['opensearch']
diff --git a/ansible/roles/openvswitch/tasks/precheck.yml b/ansible/roles/openvswitch/tasks/precheck.yml
index f2b152e97..a5717078b 100644
--- a/ansible/roles/openvswitch/tasks/precheck.yml
+++ b/ansible/roles/openvswitch/tasks/precheck.yml
@@ -25,5 +25,5 @@
timeout: 1
state: stopped
when:
- - container_facts['openvswitch_db'] is not defined
+ - container_facts.containers['openvswitch_db'] is not defined
- service | service_enabled_and_mapped_to_host
diff --git a/ansible/roles/ovn-db/tasks/precheck.yml b/ansible/roles/ovn-db/tasks/precheck.yml
index e06baddc5..6b0b6abd5 100644
--- a/ansible/roles/ovn-db/tasks/precheck.yml
+++ b/ansible/roles/ovn-db/tasks/precheck.yml
@@ -18,7 +18,7 @@
timeout: 1
state: stopped
when:
- - container_facts['ovn_nb_db'] is not defined
+ - container_facts.containers['ovn_nb_db'] is not defined
- inventory_hostname in groups['ovn-nb-db']
- name: Checking free port for OVN southbound db
@@ -29,5 +29,5 @@
timeout: 1
state: stopped
when:
- - container_facts['ovn_sb_db'] is not defined
+ - container_facts.containers['ovn_sb_db'] is not defined
- inventory_hostname in groups['ovn-sb-db']
diff --git a/ansible/roles/placement/tasks/precheck.yml b/ansible/roles/placement/tasks/precheck.yml
index 02ff052fb..a91bac3ef 100644
--- a/ansible/roles/placement/tasks/precheck.yml
+++ b/ansible/roles/placement/tasks/precheck.yml
@@ -25,5 +25,5 @@
timeout: 1
state: stopped
when:
- - container_facts['placement_api'] is not defined
+ - container_facts.containers['placement_api'] is not defined
- service | service_enabled_and_mapped_to_host
diff --git a/ansible/roles/prometheus/tasks/precheck.yml b/ansible/roles/prometheus/tasks/precheck.yml
index 8b48dc138..de8ac17b4 100644
--- a/ansible/roles/prometheus/tasks/precheck.yml
+++ b/ansible/roles/prometheus/tasks/precheck.yml
@@ -62,7 +62,7 @@
timeout: 1
state: stopped
when:
- - container_facts['prometheus_server'] is not defined
+ - container_facts.containers['prometheus_server'] is not defined
- inventory_hostname in groups['prometheus']
- enable_prometheus_server | bool
@@ -74,7 +74,7 @@
timeout: 1
state: stopped
when:
- - container_facts['prometheus_node_exporter'] is not defined
+ - container_facts.containers['prometheus_node_exporter'] is not defined
- inventory_hostname in groups['prometheus-node-exporter']
- enable_prometheus_node_exporter | bool
@@ -86,7 +86,7 @@
timeout: 1
state: stopped
when:
- - container_facts['prometheus_mysqld_exporter'] is not defined
+ - container_facts.containers['prometheus_mysqld_exporter'] is not defined
- inventory_hostname in groups['prometheus-mysqld-exporter']
- enable_prometheus_mysqld_exporter | bool
@@ -98,7 +98,7 @@
timeout: 1
state: stopped
when:
- - container_facts['prometheus_memcached_exporter'] is not defined
+ - container_facts.containers['prometheus_memcached_exporter'] is not defined
- inventory_hostname in groups['prometheus-memcached-exporter']
- enable_prometheus_memcached_exporter | bool
@@ -110,7 +110,7 @@
timeout: 1
state: stopped
when:
- - container_facts['prometheus_cadvisor'] is not defined
+ - container_facts.containers['prometheus_cadvisor'] is not defined
- inventory_hostname in groups['prometheus-cadvisor']
- enable_prometheus_cadvisor | bool
@@ -122,7 +122,7 @@
timeout: 1
state: stopped
when:
- - container_facts['prometheus_alertmanager'] is not defined
+ - container_facts.containers['prometheus_alertmanager'] is not defined
- inventory_hostname in groups['prometheus-alertmanager']
- enable_prometheus_alertmanager | bool
with_items:
@@ -137,7 +137,7 @@
timeout: 1
state: stopped
when:
- - container_facts['prometheus_openstack_exporter'] is not defined
+ - container_facts.containers['prometheus_openstack_exporter'] is not defined
- inventory_hostname in groups['prometheus-openstack-exporter']
- enable_prometheus_openstack_exporter | bool
with_items:
@@ -151,7 +151,7 @@
timeout: 1
state: stopped
when:
- - container_facts['prometheus_elasticsearch_exporter'] is not defined
+ - container_facts.containers['prometheus_elasticsearch_exporter'] is not defined
- inventory_hostname in groups['prometheus-elasticsearch-exporter']
- enable_prometheus_elasticsearch_exporter | bool
with_items:
@@ -165,7 +165,7 @@
timeout: 1
state: stopped
when:
- - container_facts['prometheus_blackbox_exporter'] is not defined
+ - container_facts.containers['prometheus_blackbox_exporter'] is not defined
- inventory_hostname in groups['prometheus-blackbox-exporter']
- enable_prometheus_blackbox_exporter | bool
with_items:
@@ -179,7 +179,7 @@
timeout: 1
state: stopped
when:
- - container_facts['prometheus_libvirt_exporter'] is not defined
+ - container_facts.containers['prometheus_libvirt_exporter'] is not defined
- inventory_hostname in groups['prometheus-libvirt-exporter']
- enable_prometheus_libvirt_exporter | bool
with_items:
diff --git a/ansible/roles/rabbitmq/tasks/precheck.yml b/ansible/roles/rabbitmq/tasks/precheck.yml
index 1837c1c1f..ea9f7ee71 100644
--- a/ansible/roles/rabbitmq/tasks/precheck.yml
+++ b/ansible/roles/rabbitmq/tasks/precheck.yml
@@ -23,7 +23,7 @@
timeout: 1
state: stopped
when:
- - container_facts['rabbitmq'] is not defined
+ - container_facts.containers['rabbitmq'] is not defined
- inventory_hostname in groups['rabbitmq']
- name: Checking free port for RabbitMQ Management
@@ -34,7 +34,7 @@
timeout: 1
state: stopped
when:
- - container_facts['rabbitmq'] is not defined
+ - container_facts.containers['rabbitmq'] is not defined
- inventory_hostname in groups['rabbitmq']
- name: Checking free port for RabbitMQ Cluster
@@ -45,7 +45,7 @@
timeout: 1
state: stopped
when:
- - container_facts['rabbitmq'] is not defined
+ - container_facts.containers['rabbitmq'] is not defined
- inventory_hostname in groups['rabbitmq']
- name: Checking free port for RabbitMQ EPMD
@@ -56,7 +56,7 @@
timeout: 1
state: stopped
when:
- - container_facts['rabbitmq'] is not defined
+ - container_facts.containers['rabbitmq'] is not defined
- inventory_hostname in groups['rabbitmq']
- name: Check if all rabbit hostnames are resolvable
@@ -125,7 +125,7 @@
run_once: true
when:
- - container_facts['rabbitmq'] is defined
+ - container_facts.containers['rabbitmq'] is defined
- om_enable_rabbitmq_high_availability | bool
tags: rabbitmq-ha-precheck
@@ -154,6 +154,6 @@
run_once: true
when:
- - container_facts['rabbitmq'] is defined
+ - container_facts.containers['rabbitmq'] is defined
- om_enable_rabbitmq_quorum_queues | bool
tags: rabbitmq-ha-precheck
diff --git a/ansible/roles/rabbitmq/tasks/remove-ha-all-policy.yml b/ansible/roles/rabbitmq/tasks/remove-ha-all-policy.yml
index 574069cb7..71dc2b2a1 100644
--- a/ansible/roles/rabbitmq/tasks/remove-ha-all-policy.yml
+++ b/ansible/roles/rabbitmq/tasks/remove-ha-all-policy.yml
@@ -21,7 +21,7 @@
command: "{{ kolla_container_engine }} exec {{ service.container_name }} rabbitmqctl clear_policy ha-all"
when:
- "'ha-all' in rabbitmq_policies.stdout"
- when: container_facts[service.container_name] is defined
+ when: container_facts.containers[service.container_name] is defined
delegate_to: "{{ groups[role_rabbitmq_groups] | first }}"
run_once: true
diff --git a/ansible/roles/rabbitmq/tasks/restart_services.yml b/ansible/roles/rabbitmq/tasks/restart_services.yml
index 289015e1c..e15a858cf 100644
--- a/ansible/roles/rabbitmq/tasks/restart_services.yml
+++ b/ansible/roles/rabbitmq/tasks/restart_services.yml
@@ -15,7 +15,7 @@
action: "drain"
user: root
become: true
- when: container_info._containers | length > 0
+ when: container_info.containers | length > 0
- name: Restart rabbitmq container
vars:
diff --git a/ansible/roles/redis/tasks/precheck.yml b/ansible/roles/redis/tasks/precheck.yml
index a9225a080..8f6371d0b 100644
--- a/ansible/roles/redis/tasks/precheck.yml
+++ b/ansible/roles/redis/tasks/precheck.yml
@@ -25,5 +25,5 @@
timeout: 1
state: stopped
when:
- - container_facts['redis'] is not defined
+ - container_facts.containers['redis'] is not defined
- service | service_enabled_and_mapped_to_host
diff --git a/ansible/roles/service-check/tasks/main.yml b/ansible/roles/service-check/tasks/main.yml
index 0c0ddf72e..e9af8998b 100644
--- a/ansible/roles/service-check/tasks/main.yml
+++ b/ansible/roles/service-check/tasks/main.yml
@@ -12,19 +12,21 @@
- name: "{{ kolla_role_name | default(project_name) }} | Fail if containers are missing or not running"
vars:
missing_containers: >-
- {{ service_check_enabled_container_names | difference(container_facts) | list }}
+ {{ service_check_enabled_container_names |
+ difference(container_facts.containers) |
+ list }}
fail:
msg: >
The following {{ kolla_role_name | default(project_name) }} containers are missing or not running:
{{ missing_containers | join(', ') }}
when:
- - container_facts is defined
+ - container_facts.containers is defined
- missing_containers | length > 0
- name: "{{ kolla_role_name | default(project_name) }} | Fail if containers are unhealthy"
vars:
unhealthy_containers: >-
- {{ container_facts |
+ {{ container_facts.containers |
dict2items |
selectattr("value.Status", "defined") |
selectattr("value.Status", "search", "unhealthy") |
@@ -34,5 +36,5 @@
The following {{ kolla_role_name | default(project_name) }} containers are unhealthy:
{{ unhealthy_containers | join(', ') }}
when:
- - container_facts is defined
+ - container_facts.containers is defined
- unhealthy_containers | length > 0
diff --git a/ansible/roles/service-config-validate/tasks/validate.yml b/ansible/roles/service-config-validate/tasks/validate.yml
index 025f55b8b..7a522645b 100644
--- a/ansible/roles/service-config-validate/tasks/validate.yml
+++ b/ansible/roles/service-config-validate/tasks/validate.yml
@@ -14,7 +14,7 @@
{{ kolla_container_engine }} exec {{ service.container_name }}
bash -c "[[ -f {{ inner_item['config'] }} ]] && oslo-config-validator --config-file {{ inner_item['generator'] }} --input-file {{ inner_item['config'] }}"
when:
- - container_info._containers | length > 0
+ - container_info.containers | length > 0
register: result
failed_when: result.rc not in [0, 1] # rc 1 is expected when errors are found in the config file, or when the config file doesn't exist
with_items: "{{ service_config_validation }}"
@@ -39,7 +39,7 @@
content: "{{ inner_item.stderr }}"
dest: "{{ output_dir }}/{{ inner_item.inner_item.config | basename }}.err"
when:
- - container_info._containers | length > 0
+ - container_info.containers | length > 0
- inner_item.rc is defined
- inner_item.rc == 1
- inner_item.stderr != ""
diff --git a/ansible/roles/skyline/tasks/precheck.yml b/ansible/roles/skyline/tasks/precheck.yml
index 0a081b204..25fefb1bc 100644
--- a/ansible/roles/skyline/tasks/precheck.yml
+++ b/ansible/roles/skyline/tasks/precheck.yml
@@ -23,7 +23,7 @@
timeout: 1
state: stopped
when:
- - container_facts['skyline_apiserver'] is not defined
+ - container_facts.containers['skyline_apiserver'] is not defined
- inventory_hostname in groups['skyline-apiserver']
- name: Checking free port for Skyline Console
@@ -34,5 +34,5 @@
timeout: 1
state: stopped
when:
- - container_facts['skyline_console'] is not defined
+ - container_facts.containers['skyline_console'] is not defined
- inventory_hostname in groups['skyline-console']
diff --git a/ansible/roles/swift/tasks/precheck.yml b/ansible/roles/swift/tasks/precheck.yml
index 423915afd..5d79c7af6 100644
--- a/ansible/roles/swift/tasks/precheck.yml
+++ b/ansible/roles/swift/tasks/precheck.yml
@@ -26,7 +26,7 @@
timeout: 1
state: stopped
when:
- - container_facts['swift_account_server'] is not defined
+ - container_facts.containers['swift_account_server'] is not defined
- inventory_hostname in groups['swift-account-server']
- name: Checking free port for Swift Container Server
@@ -37,7 +37,7 @@
timeout: 1
state: stopped
when:
- - container_facts['swift_container_server'] is not defined
+ - container_facts.containers['swift_container_server'] is not defined
- inventory_hostname in groups['swift-container-server']
- name: Checking free port for Swift Object Server
@@ -48,7 +48,7 @@
timeout: 1
state: stopped
when:
- - container_facts['swift_object_server'] is not defined
+ - container_facts.containers['swift_object_server'] is not defined
- inventory_hostname in groups['swift-object-server']
- name: Checking free port for Swift Account Replication Server
@@ -59,7 +59,7 @@
timeout: 1
state: stopped
when:
- - container_facts['swift_account_server'] is not defined
+ - container_facts.containers['swift_account_server'] is not defined
- inventory_hostname in groups['swift-account-server']
- name: Checking free port for Swift Container Replication Server
@@ -70,7 +70,7 @@
timeout: 1
state: stopped
when:
- - container_facts['swift_container_server'] is not defined
+ - container_facts.containers['swift_container_server'] is not defined
- inventory_hostname in groups['swift-container-server']
- name: Checking free port for Swift Object Replication Server
@@ -81,7 +81,7 @@
timeout: 1
state: stopped
when:
- - container_facts['swift_object_server'] is not defined
+ - container_facts.containers['swift_object_server'] is not defined
- inventory_hostname in groups['swift-object-server']
- name: Checking free port for Rsync
@@ -92,7 +92,7 @@
timeout: 1
state: stopped
when:
- - container_facts['swift_object_server'] is not defined
+ - container_facts.containers['swift_object_server'] is not defined
- inventory_hostname in groups['swift-object-server']
- name: Checking free port for Swift Proxy Server
@@ -103,7 +103,7 @@
timeout: 1
state: stopped
when:
- - container_facts['swift_proxy_server'] is not defined
+ - container_facts.containers['swift_proxy_server'] is not defined
- inventory_hostname in groups['swift-proxy-server']
- name: Checking Swift ring files
diff --git a/ansible/roles/swift/tasks/reconfigure.yml b/ansible/roles/swift/tasks/reconfigure.yml
index d3c70e83f..f3d31fca3 100644
--- a/ansible/roles/swift/tasks/reconfigure.yml
+++ b/ansible/roles/swift/tasks/reconfigure.yml
@@ -31,12 +31,12 @@
- name: Ensuring the containers up
become: true
- kolla_container:
- common_options: "{{ docker_common_options }}"
+ kolla_container_facts:
name: "{{ item.name }}"
- action: "get_container_state"
+ action: "get_containers_state"
+ container_engine: "{{ kolla_container_engine }}"
register: container_state
- failed_when: not container_state.Running
+ failed_when: container_state.states[item.name] != "running"
when: inventory_hostname in groups[item.group]
with_items:
- "{{ swift_containers }}"
@@ -58,10 +58,10 @@
# just remove the container and start again
- name: Containers config strategy
become: true
- kolla_container:
- common_options: "{{ docker_common_options }}"
+ kolla_container_facts:
name: "{{ item.name }}"
- action: "get_container_env"
+ action: "get_containers_env"
+ container_engine: "{{ kolla_container_engine }}"
register: container_envs
when: inventory_hostname in groups[item.group]
with_items:
@@ -69,14 +69,17 @@
- name: Remove the containers
become: true
+ vars:
+ container_name: "{{ item[0]['name'] }}"
+ container_config_strategy: "{{ item[1].envs[container_name] }}"
kolla_container:
common_options: "{{ docker_common_options }}"
- name: "{{ item[0]['name'] }}"
+ name: "{{ container_name }}"
action: "remove_container"
register: remove_containers
when:
- inventory_hostname in groups[item[0]['group']]
- - config_strategy == "COPY_ONCE" or item[1]['KOLLA_CONFIG_STRATEGY'] == 'COPY_ONCE'
+ - config_strategy == "COPY_ONCE" or container_config_strategy == 'COPY_ONCE'
- item[2]['rc'] == 1
with_together:
- "{{ swift_containers }}"
@@ -90,14 +93,17 @@
- name: Restart containers
become: true
+ vars:
+ container_name: "{{ item[0]['name'] }}"
+ container_config_strategy: "{{ item[1].envs[container_name] }}"
kolla_container:
common_options: "{{ docker_common_options }}"
- name: "{{ item[0]['name'] }}"
+ name: "{{ container_name }}"
action: "restart_container"
when:
- inventory_hostname in groups[item[0]['group']]
- config_strategy == 'COPY_ALWAYS'
- - item[1]['KOLLA_CONFIG_STRATEGY'] != 'COPY_ONCE'
+ - container_config_strategy != 'COPY_ONCE'
- item[2]['rc'] == 1
with_together:
- "{{ swift_containers }}"
diff --git a/ansible/roles/tacker/tasks/precheck.yml b/ansible/roles/tacker/tasks/precheck.yml
index 5bdb592b4..455a97295 100644
--- a/ansible/roles/tacker/tasks/precheck.yml
+++ b/ansible/roles/tacker/tasks/precheck.yml
@@ -23,5 +23,5 @@
timeout: 1
state: stopped
when:
- - container_facts['tacker_server'] is not defined
+ - container_facts.containers['tacker_server'] is not defined
- inventory_hostname in groups['tacker-server']
diff --git a/ansible/roles/trove/tasks/precheck.yml b/ansible/roles/trove/tasks/precheck.yml
index 60aa0a4e7..3ef467eb6 100644
--- a/ansible/roles/trove/tasks/precheck.yml
+++ b/ansible/roles/trove/tasks/precheck.yml
@@ -23,5 +23,5 @@
timeout: 1
state: stopped
when:
- - container_facts['trove_api'] is not defined
+ - container_facts.containers['trove_api'] is not defined
- inventory_hostname in groups['trove-api']
diff --git a/ansible/roles/venus/tasks/precheck.yml b/ansible/roles/venus/tasks/precheck.yml
index b3debf8fd..10408219d 100644
--- a/ansible/roles/venus/tasks/precheck.yml
+++ b/ansible/roles/venus/tasks/precheck.yml
@@ -23,5 +23,5 @@
timeout: 1
state: stopped
when:
- - container_facts['venus_api'] is not defined
+ - container_facts.containers['venus_api'] is not defined
- inventory_hostname in groups['venus-api']
diff --git a/ansible/roles/watcher/tasks/precheck.yml b/ansible/roles/watcher/tasks/precheck.yml
index 3828d011e..9d7465d70 100644
--- a/ansible/roles/watcher/tasks/precheck.yml
+++ b/ansible/roles/watcher/tasks/precheck.yml
@@ -23,5 +23,5 @@
timeout: 1
state: stopped
when:
- - container_facts['watcher_api'] is not defined
+ - container_facts.containers['watcher_api'] is not defined
- inventory_hostname in groups['watcher-api']
diff --git a/ansible/roles/zun/tasks/precheck.yml b/ansible/roles/zun/tasks/precheck.yml
index 244f483b6..780a78aa0 100644
--- a/ansible/roles/zun/tasks/precheck.yml
+++ b/ansible/roles/zun/tasks/precheck.yml
@@ -25,7 +25,7 @@
timeout: 1
state: stopped
when:
- - container_facts['zun_api'] is not defined
+ - container_facts.containers['zun_api'] is not defined
- inventory_hostname in groups['zun-api']
- name: Checking free port for Zun WSproxy
@@ -36,7 +36,7 @@
timeout: 1
state: stopped
when:
- - container_facts['zun_wsproxy'] is not defined
+ - container_facts.containers['zun_wsproxy'] is not defined
- inventory_hostname in groups['zun-wsproxy']
- name: Checking free port for zun-cni-daemon
@@ -47,7 +47,7 @@
timeout: 1
state: stopped
when:
- - container_facts['zun_cni_daemon'] is not defined
+ - container_facts.containers['zun_cni_daemon'] is not defined
- inventory_hostname in groups['zun-cni-daemon']
- name: Ensure kuryr enabled for zun
diff --git a/releasenotes/notes/move-container-facts-1507cec39b2bdbe0.yaml b/releasenotes/notes/move-container-facts-1507cec39b2bdbe0.yaml
new file mode 100644
index 000000000..92017dee6
--- /dev/null
+++ b/releasenotes/notes/move-container-facts-1507cec39b2bdbe0.yaml
@@ -0,0 +1,10 @@
+---
+features:
+ - |
+ Move actions to kolla_container_facts
+ Actions responsible for info about containers were moved
+ from kolla_container module to kolla_container_facts.
+fixes:
+ - |
+ Fixes inconsistencies between docker and podman
+ implementations in kolla_container_facts.
diff --git a/tests/kolla_container_tests/test_docker_worker.py b/tests/kolla_container_tests/test_docker_worker.py
index 564f93a66..1e386d918 100644
--- a/tests/kolla_container_tests/test_docker_worker.py
+++ b/tests/kolla_container_tests/test_docker_worker.py
@@ -682,62 +682,6 @@ class TestContainer(base.BaseTestCase):
force=True
)
- def test_get_container_env(self):
- fake_env = dict(KOLLA_BASE_DISTRO='ubuntu')
- self.dw = get_DockerWorker({'name': 'my_container',
- 'action': 'get_container_env'})
- self.dw.dc.containers.return_value = self.fake_data['containers']
- self.fake_data['container_inspect'].update(
- self.fake_data['containers'][0])
- self.dw.dc.inspect_container.return_value = (
- self.fake_data['container_inspect'])
- self.dw.get_container_env()
-
- self.assertFalse(self.dw.changed)
- self.dw.dc.containers.assert_called_once_with(all=True)
- self.dw.dc.inspect_container.assert_called_once_with('my_container')
- self.dw.module.exit_json.assert_called_once_with(**fake_env)
-
- def test_get_container_env_negative(self):
- self.dw = get_DockerWorker({'name': 'fake_container',
- 'action': 'get_container_env'})
- self.dw.dc.containers.return_value = self.fake_data['containers']
- self.dw.get_container_env()
-
- self.assertFalse(self.dw.changed)
- self.dw.module.fail_json.assert_called_once_with(
- msg="No such container: fake_container")
-
- def test_get_container_state(self):
- State = {'Dead': False,
- 'ExitCode': 0,
- 'Pid': 12475,
- 'StartedAt': '2016-06-07T11:22:37.66876269Z',
- 'Status': 'running'}
- self.fake_data['container_inspect'].update({'State': State})
- self.dw = get_DockerWorker({'name': 'my_container',
- 'action': 'get_container_state'})
- self.dw.dc.containers.return_value = self.fake_data['containers']
- self.dw.dc.inspect_container.return_value = (
- self.fake_data['container_inspect'])
- self.dw.get_container_state()
-
- self.assertFalse(self.dw.changed)
- self.dw.dc.containers.assert_called_once_with(all=True)
- self.dw.dc.inspect_container.assert_called_once_with('my_container')
- self.dw.module.exit_json.assert_called_once_with(**State)
-
- def test_get_container_state_negative(self):
- self.dw = get_DockerWorker({'name': 'fake_container',
- 'action': 'get_container_state'})
- self.dw.dc.containers.return_value = self.fake_data['containers']
- self.dw.get_container_state()
-
- self.assertFalse(self.dw.changed)
- self.dw.dc.containers.assert_called_once_with(all=True)
- self.dw.module.fail_json.assert_called_once_with(
- msg="No such container: fake_container")
-
def test_recreate_or_restart_container_not_container(self):
self.dw = get_DockerWorker({
'environment': dict(KOLLA_CONFIG_STRATEGY='COPY_ALWAYS')})
diff --git a/tests/kolla_container_tests/test_podman_worker.py b/tests/kolla_container_tests/test_podman_worker.py
index 60691b1a2..e225bd653 100644
--- a/tests/kolla_container_tests/test_podman_worker.py
+++ b/tests/kolla_container_tests/test_podman_worker.py
@@ -597,63 +597,6 @@ class TestContainer(base.BaseTestCase):
self.assertTrue(self.pw.changed)
my_container.remove.assert_called_once_with(force=True)
- def test_get_container_env(self):
- fake_env = dict(KOLLA_BASE_DISTRO='ubuntu',
- KOLLA_INSTALL_TYPE='binary',
- KOLLA_INSTALL_METATYPE='rdo')
- self.pw = get_PodmanWorker({'name': 'my_container',
- 'action': 'get_container_env'})
- self.fake_data['containers'][0].update(
- self.fake_data['container_inspect'])
- full_cont_list = get_containers(self.fake_data['containers'])
- self.pw.pc.containers.list.return_value = full_cont_list
- self.pw.get_container_env()
-
- self.assertFalse(self.pw.changed)
- self.pw.pc.containers.list.assert_called_once_with(all=True)
- self.pw.module.exit_json.assert_called_once_with(**fake_env)
-
- def test_get_container_env_negative(self):
- self.pw = get_PodmanWorker({'name': 'fake_container',
- 'action': 'get_container_env'})
- self.pw.pc.containers.list.return_value = get_containers(
- self.fake_data['containers'])
- self.pw.get_container_env()
-
- self.assertFalse(self.pw.changed)
- self.pw.module.fail_json.assert_called_once_with(
- msg="No such container: fake_container")
-
- def test_get_container_state(self):
- State = {'Dead': False,
- 'ExitCode': 0,
- 'Pid': 12475,
- 'StartedAt': '2016-06-07T11:22:37.66876269Z',
- 'Status': 'running'}
- self.fake_data['container_inspect'].update({'State': State})
- self.pw = get_PodmanWorker({'name': 'my_container',
- 'action': 'get_container_state'})
- self.fake_data['containers'][0].update({'State': State})
- self.pw.pc.containers.list.return_value = get_containers(
- self.fake_data['containers'])
- self.pw.get_container_state()
-
- self.assertFalse(self.pw.changed)
- self.pw.pc.containers.list.assert_called_once_with(all=True)
- self.pw.module.exit_json.assert_called_once_with(**State)
-
- def test_get_container_state_negative(self):
- self.pw = get_PodmanWorker({'name': 'fake_container',
- 'action': 'get_container_state'})
- self.pw.pc.containers.list.return_value = get_containers(
- self.fake_data['containers'])
- self.pw.get_container_state()
-
- self.assertFalse(self.pw.changed)
- self.pw.pc.containers.list.assert_called_once_with(all=True)
- self.pw.module.fail_json.assert_called_once_with(
- msg="No such container: fake_container")
-
def test_recreate_or_restart_container_not_container(self):
self.pw = get_PodmanWorker({
'environment': dict(KOLLA_CONFIG_STRATEGY='COPY_ALWAYS')})
diff --git a/tests/test_kolla_container.py b/tests/test_kolla_container.py
index 3c8ee0f09..c1ea866c2 100644
--- a/tests/test_kolla_container.py
+++ b/tests/test_kolla_container.py
@@ -43,8 +43,6 @@ class ModuleArgsTest(base.BaseTestCase):
'compare_image',
'create_volume',
'ensure_image',
- 'get_container_env',
- 'get_container_state',
'pull_image',
'recreate_or_restart_container',
'remove_container',
@@ -111,8 +109,6 @@ class ModuleArgsTest(base.BaseTestCase):
['action', 'compare_image', ['name']],
['action', 'create_volume', ['name']],
['action', 'ensure_image', ['image']],
- ['action', 'get_container_env', ['name']],
- ['action', 'get_container_state', ['name']],
['action', 'recreate_or_restart_container', ['name']],
['action', 'remove_container', ['name']],
['action', 'remove_image', ['image']],
diff --git a/tests/test_kolla_container_facts.py b/tests/test_kolla_container_facts.py
new file mode 100644
index 000000000..81e6a5009
--- /dev/null
+++ b/tests/test_kolla_container_facts.py
@@ -0,0 +1,204 @@
+#!/usr/bin/env python
+
+# Copyright 2016 NEC Corporation
+# 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.
+
+# NOTE(r-krcek): As the format of data from PodmanClient are nearly identical
+# to data returned by DockerClient. The tests can be ran only on one of the
+# clients. (There are certain exceptions but none apply to these tests)
+
+
+import copy
+from importlib.machinery import SourceFileLoader
+import os
+import sys
+from unittest import mock
+
+from docker import errors as docker_error
+from oslotest import base
+
+
+this_dir = os.path.dirname(sys.modules[__name__].__file__)
+ansible_dir = os.path.join(this_dir, '..', 'ansible')
+kolla_container_facts_file = os.path.join(
+ ansible_dir,
+ 'library', 'kolla_container_facts.py')
+kcf = SourceFileLoader('kolla_container_facts',
+ kolla_container_facts_file).load_module()
+
+
+FAKE_DATA = {
+ 'containers': [
+ {'Created': '2022-06-23T14:30:35.595194629Z',
+ 'State': {'Status': 'running'},
+ 'HostConfig': {'NetworkMode': 'host'},
+ 'Id': '1663dfafec3bb59386e4a024416c8b0a872ae0984c9806322751d14b9f794c56', # noqa: E501
+ 'ImageName': 'myregistrydomain.com:5000/ubuntu:16.04',
+ 'Image': '7528a4009573fa8c5dbf4b6f5fad9f5b8d3a0fb90e22bb1b217211b553eb22cf', # noqa: E501
+ 'Labels': {},
+ 'Name': 'my_container'},
+ {'Created': '2022-06-23T14:32:13.17545575Z',
+ 'State': {'Status': 'exited'},
+ 'HostConfig': {'NetworkMode': 'host'},
+ 'Id': '9404fc5f90118ddbbc31bb4c9462ad06aa7163eac1bc6d74c3e978143f10cc0c', # noqa: E501
+ 'ImageName': 'myregistrydomain.com:5000/ubuntu:16.04',
+ 'Image': '15529c81ae4a83084b076a16bc314e1af0b040a937f585311c87863fecc623a3', # noqa: E501
+ 'Labels': {},
+ 'Name': 'exited_container'},
+ ],
+ 'container_inspect': {
+ 'Config': {
+ 'Env': ['KOLLA_BASE_DISTRO=ubuntu',
+ 'KOLLA_INSTALL_TYPE=binary',
+ 'KOLLA_INSTALL_METATYPE=rdo'],
+ 'Hostname': 'node2',
+ 'Volumes': {'/var/lib/kolla/config_files/': {}}},
+ 'Mounts': {},
+ 'NetworkSettings': {}
+ }
+}
+
+
+@mock.patch('docker.DockerClient')
+def get_DockerFactsWorker(mod_param, mock_client):
+ module = mock.MagicMock()
+ module.params = copy.deepcopy(mod_param)
+ dfw = kcf.DockerFactsWorker(module)
+ return dfw
+
+
+def construct_container(cont_dict):
+ container = mock.Mock()
+ container.name = cont_dict['Name']
+ container.attrs = copy.deepcopy(cont_dict)
+ container.status = cont_dict['State']['Status']
+ return container
+
+
+def get_containers(override=None):
+ if override:
+ cont_dicts = override
+ else:
+ cont_dicts = copy.deepcopy(FAKE_DATA['containers'])
+
+ containers = []
+ for c in cont_dicts:
+ # Only running containers should be returned by the container APIs
+ if c['State']['Status'] == 'running':
+ containers.append(construct_container(c))
+
+ return containers
+
+
+class TestContainerFacts(base.BaseTestCase):
+ def setUp(self):
+ super(TestContainerFacts, self).setUp()
+ self.fake_data = copy.deepcopy(FAKE_DATA)
+
+ def test_get_containers_single(self):
+ self.dfw = get_DockerFactsWorker({'name': ['my_container'],
+ 'action': 'get_containers'})
+ running_containers = get_containers(self.fake_data['containers'])
+ self.dfw.client.containers.list.return_value = running_containers
+ self.dfw.get_containers()
+
+ self.assertFalse(self.dfw.result['changed'])
+ self.assertEqual(self.dfw.client.containers.list.call_count, 1)
+ self.assertIn('my_container', self.dfw.result['containers'])
+ self.assertDictEqual(
+ self.fake_data['containers'][0],
+ self.dfw.result['containers']['my_container'])
+
+ def test_get_container_multi(self):
+ self.dfw = get_DockerFactsWorker(
+ {'name': ['my_container', 'exited_container'],
+ 'action': 'get_containers'})
+ running_containers = get_containers(self.fake_data['containers'])
+ self.dfw.client.containers.list.return_value = running_containers
+ self.dfw.get_containers()
+
+ self.assertFalse(self.dfw.result['changed'])
+ self.assertIn('my_container', self.dfw.result['containers'])
+ self.assertNotIn('exited_container', self.dfw.result['containers'])
+
+ def test_get_container_all(self):
+ self.dfw = get_DockerFactsWorker({'name': [],
+ 'action': 'get_containers'})
+ running_containers = get_containers(self.fake_data['containers'])
+ self.dfw.client.containers.list.return_value = running_containers
+ self.dfw.get_containers()
+
+ self.assertFalse(self.dfw.result['changed'])
+ self.assertIn('my_container', self.dfw.result['containers'])
+ self.assertNotIn('exited_container', self.dfw.result['containers'])
+
+ def test_get_containers_env(self):
+ fake_env = dict(KOLLA_BASE_DISTRO='ubuntu',
+ KOLLA_INSTALL_TYPE='binary',
+ KOLLA_INSTALL_METATYPE='rdo')
+ self.dfw = get_DockerFactsWorker({'name': ['my_container'],
+ 'action': 'get_containers_env'})
+ self.fake_data['containers'][0].update(
+ self.fake_data['container_inspect'])
+ self.dfw.client.containers.get.return_value = construct_container(
+ self.fake_data['containers'][0])
+ self.dfw.get_containers_env()
+
+ self.assertFalse(self.dfw.result['changed'])
+ self.dfw.client.containers.get.assert_called_once_with('my_container')
+ self.assertIn('my_container', self.dfw.result['envs'])
+ self.assertEquals(self.dfw.result['envs']['my_container'], fake_env)
+
+ def test_get_containers_env_negative(self):
+ self.dfw = get_DockerFactsWorker({'name': ['fake_container'],
+ 'action': 'get_containers_env'})
+ not_found_exc = docker_error.NotFound("not found")
+ self.dfw.client.containers.get = mock.Mock(side_effect=not_found_exc)
+ self.dfw.get_containers_env()
+
+ self.assertFalse(self.dfw.result['changed'])
+ self.dfw.client.containers.get.assert_called_once_with(
+ 'fake_container')
+ self.dfw.module.fail_json.assert_called_once_with(
+ msg="No such container: fake_container")
+
+ def test_get_containers_state(self):
+ state = {'Dead': False,
+ 'ExitCode': 0,
+ 'Pid': 12475,
+ 'StartedAt': '2016-06-07T11:22:37.66876269Z',
+ 'Status': 'running'}
+ self.fake_data['container_inspect'].update({'State': state})
+ self.dfw = get_DockerFactsWorker({'name': ['my_container'],
+ 'action': 'get_containers_state'})
+ self.fake_data['containers'][0].update({'State': state})
+ self.dfw.client.containers.get.return_value = construct_container(
+ self.fake_data['containers'][0])
+ self.dfw.get_containers_state()
+
+ self.assertFalse(self.dfw.result['changed'])
+ self.dfw.client.containers.get.assert_called_once_with('my_container')
+ self.assertIn('my_container', self.dfw.result['states'])
+
+ def test_get_containers_state_negative(self):
+ self.dfw = get_DockerFactsWorker({'name': ['fake_container'],
+ 'action': 'get_containers_state'})
+ not_found_exc = docker_error.NotFound("not found")
+ self.dfw.client.containers.get = mock.Mock(side_effect=not_found_exc)
+ self.dfw.get_containers_state()
+
+ self.assertFalse(self.dfw.result['changed'])
+ self.dfw.client.containers.get.assert_called_once_with(
+ 'fake_container')
+ self.dfw.module.fail_json.assert_called_once_with(
+ msg="No such container: fake_container")