From 4d4a628c626f40e6f567d189c2f46f43cb516f0e Mon Sep 17 00:00:00 2001
From: Luke Meyer <lmeyer@redhat.com>
Date: Thu, 25 Jan 2018 13:43:34 -0500
Subject: docker_image_availability: containerized overrides

Respect container image name override variables.
---
 .../openshift_checks/docker_image_availability.py  | 21 +++++++-----
 .../test/docker_image_availability_test.py         | 39 +++++++++++++++++++---
 2 files changed, 47 insertions(+), 13 deletions(-)

(limited to 'roles/openshift_health_checker')

diff --git a/roles/openshift_health_checker/openshift_checks/docker_image_availability.py b/roles/openshift_health_checker/openshift_checks/docker_image_availability.py
index d298fbab2..145b82491 100644
--- a/roles/openshift_health_checker/openshift_checks/docker_image_availability.py
+++ b/roles/openshift_health_checker/openshift_checks/docker_image_availability.py
@@ -171,16 +171,21 @@ class DockerImageAvailability(DockerHostMixin, OpenShiftCheck):
                 required.add(self._registry_console_image(image_tag, image_info))
 
         # images for containerized components
-        if self.get_var("openshift_is_containerized"):
-            components = set()
+        def add_var_or_default_img(var_name, comp_name):
+            """Returns: default image from comp_name, overridden by var_name in task_vars"""
+            default = "{}/{}:{}".format(image_info["namespace"], comp_name, image_tag)
+            required.add(self.template_var(self.get_var(var_name, default=default)))
+
+        if self.get_var("openshift_is_containerized", convert=bool):
             if 'oo_nodes_to_config' in host_groups:
-                components.update(["node", "openvswitch"])
+                add_var_or_default_img("osn_image", "node")
+                add_var_or_default_img("osn_ovs_image", "openvswitch")
             if 'oo_masters_to_config' in host_groups:  # name is "origin" or "ose"
-                components.add(image_info["name"])
-            for component in components:
-                required.add("{}/{}:{}".format(image_info["namespace"], component, image_tag))
-            if 'oo_etcd_to_config' in host_groups:  # special case, note it is the same for origin/enterprise
-                required.add("registry.access.redhat.com/rhel7/etcd")  # and no image tag
+                add_var_or_default_img("osm_image", image_info["name"])
+            if 'oo_etcd_to_config' in host_groups:
+                # special case, note default is the same for origin/enterprise and has no image tag
+                etcd_img = self.get_var("osm_etcd_image", default="registry.access.redhat.com/rhel7/etcd")
+                required.add(self.template_var(etcd_img))
 
         return required
 
diff --git a/roles/openshift_health_checker/test/docker_image_availability_test.py b/roles/openshift_health_checker/test/docker_image_availability_test.py
index 9fd6e049d..d31f263dd 100644
--- a/roles/openshift_health_checker/test/docker_image_availability_test.py
+++ b/roles/openshift_health_checker/test/docker_image_availability_test.py
@@ -276,11 +276,40 @@ def test_registry_console_image(task_vars, expected):
     assert expected == DockerImageAvailability(task_vars=task_vars)._registry_console_image(tag, info)
 
 
-def test_containerized_etcd():
-    task_vars = dict(
+@pytest.mark.parametrize("task_vars, expected", [
+    (
+        dict(
+            group_names=['oo_nodes_to_config'],
+            osn_ovs_image='spam/ovs',
+            openshift_image_tag="veggs",
+        ),
+        set([
+            'spam/ovs', 'openshift/node:veggs', 'cockpit/kubernetes:latest',
+            'openshift/origin-haproxy-router:veggs', 'openshift/origin-deployer:veggs',
+            'openshift/origin-docker-registry:veggs', 'openshift/origin-pod:veggs',
+        ]),
+    ), (
+        dict(
+            group_names=['oo_masters_to_config'],
+        ),
+        set(['openshift/origin:latest']),
+    ), (
+        dict(
+            group_names=['oo_etcd_to_config'],
+        ),
+        set(['registry.access.redhat.com/rhel7/etcd']),
+    ), (
+        dict(
+            group_names=['oo_etcd_to_config'],
+            osm_etcd_image='spam/etcd',
+        ),
+        set(['spam/etcd']),
+    ),
+])
+def test_containerized(task_vars, expected):
+    task_vars.update(dict(
         openshift_is_containerized=True,
         openshift_deployment_type="origin",
-        group_names=['oo_etcd_to_config'],
-    )
-    expected = set(['registry.access.redhat.com/rhel7/etcd'])
+    ))
+
     assert expected == DockerImageAvailability(task_vars=task_vars).required_images()
-- 
cgit v1.2.3