ソースを参照

Merge pull request #5829 from sosiouxme/20171020-registry-console-bz1497310

reconcile registry-console and docker_image_availability
Scott Dodson 7 年 前
コミット
52d2eb56e3

ファイルの差分が大きいため隠しています
+ 4 - 3
inventory/byo/hosts.example


+ 0 - 1
roles/cockpit-ui/tasks/main.yml

@@ -37,7 +37,6 @@
       cp {{ openshift_master_config_dir }}/admin.kubeconfig {{ openshift_hosted_kubeconfig }}
     changed_when: False
 
-  # TODO: Need to fix the origin and enterprise templates so that they both respect IMAGE_PREFIX
   - name: Deploy registry-console
     command: >
       {{ openshift.common.client_binary }} new-app --template=registry-console

+ 26 - 6
roles/openshift_health_checker/openshift_checks/docker_image_availability.py

@@ -1,5 +1,6 @@
 """Check that required Docker images are available."""
 
+import re
 from pipes import quote
 from ansible.module_utils import six
 from openshift_checks import OpenShiftCheck
@@ -11,12 +12,16 @@ DEPLOYMENT_IMAGE_INFO = {
     "origin": {
         "namespace": "openshift",
         "name": "origin",
-        "registry_console_image": "cockpit/kubernetes",
+        "registry_console_template": "${prefix}kubernetes:${version}",
+        "registry_console_prefix": "cockpit/",
+        "registry_console_default_version": "latest",
     },
     "openshift-enterprise": {
         "namespace": "openshift3",
         "name": "ose",
-        "registry_console_image": "registry.access.redhat.com/openshift3/registry-console",
+        "registry_console_template": "${prefix}registry-console:${version}",
+        "registry_console_prefix": "registry.access.redhat.com/openshift3/",
+        "registry_console_default_version": "${short_version}",
     },
 }
 
@@ -151,10 +156,7 @@ class DockerImageAvailability(DockerHostMixin, OpenShiftCheck):
         if 'oo_nodes_to_config' in host_groups:
             for suffix in NODE_IMAGE_SUFFIXES:
                 required.add(image_url.replace("${component}", suffix).replace("${version}", image_tag))
-            # The registry-console is for some reason not prefixed with ose- like the other components.
-            # Nor is it versioned the same, so just look for latest.
-            # Also a completely different name is used for Origin.
-            required.add(image_info["registry_console_image"])
+            required.add(self._registry_console_image(image_tag, image_info))
 
         # images for containerized components
         if self.get_var("openshift", "common", "is_containerized"):
@@ -170,6 +172,24 @@ class DockerImageAvailability(DockerHostMixin, OpenShiftCheck):
 
         return required
 
+    def _registry_console_image(self, image_tag, image_info):
+        """Returns image with logic to parallel what happens with the registry-console template."""
+        # The registry-console is for some reason not prefixed with ose- like the other components.
+        # Nor is it versioned the same. Also a completely different name is used for Origin.
+        prefix = self.get_var(
+            "openshift_cockpit_deployer_prefix",
+            default=image_info["registry_console_prefix"],
+        )
+
+        # enterprise template just uses v3.6, v3.7, etc
+        match = re.match(r'v\d+\.\d+', image_tag)
+        short_version = match.group() if match else image_tag
+        version = image_info["registry_console_default_version"].replace("${short_version}", short_version)
+        version = self.get_var("openshift_cockpit_deployer_version", default=version)
+
+        template = image_info["registry_console_template"]
+        return template.replace('${prefix}', prefix).replace('${version}', version)
+
     def local_images(self, images):
         """Filter a list of images and return those available locally."""
         found_images = []

+ 41 - 5
roles/openshift_health_checker/test/docker_image_availability_test.py

@@ -1,6 +1,6 @@
 import pytest
 
-from openshift_checks.docker_image_availability import DockerImageAvailability
+from openshift_checks.docker_image_availability import DockerImageAvailability, DEPLOYMENT_IMAGE_INFO
 
 
 @pytest.fixture()
@@ -180,7 +180,7 @@ def test_registry_availability(image, registries, connection_test_failed, skopeo
             'openshift/origin-deployer:vtest',
             'openshift/origin-docker-registry:vtest',
             'openshift/origin-haproxy-router:vtest',
-            'cockpit/kubernetes',  # origin version of registry-console
+            'cockpit/kubernetes:latest',  # origin version of registry-console
         ])
     ),
     (  # set a different URL for images
@@ -190,7 +190,7 @@ def test_registry_availability(image, registries, connection_test_failed, skopeo
             'foo.io/openshift/origin-deployer:vtest',
             'foo.io/openshift/origin-docker-registry:vtest',
             'foo.io/openshift/origin-haproxy-router:vtest',
-            'cockpit/kubernetes',  # AFAICS this is not built from the URL
+            'cockpit/kubernetes:latest',  # AFAICS this is not built from the URL
         ])
     ),
     (
@@ -201,7 +201,7 @@ def test_registry_availability(image, registries, connection_test_failed, skopeo
             'openshift/origin-deployer:vtest',
             'openshift/origin-docker-registry:vtest',
             'openshift/origin-haproxy-router:vtest',
-            'cockpit/kubernetes',
+            'cockpit/kubernetes:latest',
             # containerized component images
             'openshift/origin:vtest',
             'openshift/node:vtest',
@@ -217,7 +217,7 @@ def test_registry_availability(image, registries, connection_test_failed, skopeo
             'foo.io/openshift3/ose-docker-registry:f13ac45',
             'foo.io/openshift3/ose-haproxy-router:f13ac45',
             # registry-console is not constructed/versioned the same as the others.
-            'registry.access.redhat.com/openshift3/registry-console',
+            'registry.access.redhat.com/openshift3/registry-console:vtest',
             # containerized images aren't built from oreg_url
             'openshift3/node:vtest',
             'openshift3/openvswitch:vtest',
@@ -249,6 +249,42 @@ def test_required_images(deployment_type, is_containerized, groups, oreg_url, ex
     assert expected == DockerImageAvailability(task_vars=task_vars).required_images()
 
 
+@pytest.mark.parametrize("task_vars, expected", [
+    (
+        dict(
+            openshift_deployment_type="origin",
+            openshift_image_tag="vtest",
+        ),
+        "cockpit/kubernetes:latest",
+    ), (
+        dict(
+            openshift_deployment_type="openshift-enterprise",
+            openshift_image_tag="vtest",
+        ),
+        "registry.access.redhat.com/openshift3/registry-console:vtest",
+    ), (
+        dict(
+            openshift_deployment_type="openshift-enterprise",
+            openshift_image_tag="v3.7.0-alpha.0",
+            openshift_cockpit_deployer_prefix="registry.example.com/spam/",
+        ),
+        "registry.example.com/spam/registry-console:v3.7",
+    ), (
+        dict(
+            openshift_deployment_type="origin",
+            openshift_image_tag="v3.7.0-alpha.0",
+            openshift_cockpit_deployer_prefix="registry.example.com/eggs/",
+            openshift_cockpit_deployer_version="spam",
+        ),
+        "registry.example.com/eggs/kubernetes:spam",
+    ),
+])
+def test_registry_console_image(task_vars, expected):
+    info = DEPLOYMENT_IMAGE_INFO[task_vars["openshift_deployment_type"]]
+    tag = task_vars["openshift_image_tag"]
+    assert expected == DockerImageAvailability(task_vars=task_vars)._registry_console_image(tag, info)
+
+
 def test_containerized_etcd():
     task_vars = dict(
         openshift=dict(

+ 5 - 5
roles/openshift_hosted_templates/files/v3.6/origin/registry-console.yaml

@@ -27,7 +27,7 @@ objects:
         spec:
           containers:
             - name: registry-console
-              image: ${IMAGE_NAME}:${IMAGE_VERSION}
+              image: ${IMAGE_PREFIX}kubernetes:${IMAGE_VERSION}
               ports:
                 - containerPort: 9090
                   protocol: TCP
@@ -89,7 +89,7 @@ objects:
         - annotations: null
           from:
             kind: DockerImage
-            name: ${IMAGE_NAME}:${IMAGE_VERSION}
+            name: ${IMAGE_PREFIX}kubernetes:${IMAGE_VERSION}
           name: ${IMAGE_VERSION}
   - kind: OAuthClient
     apiVersion: v1
@@ -100,9 +100,9 @@ objects:
     redirectURIs:
       - "${COCKPIT_KUBE_URL}"
 parameters:
-  - description: "Container image name"
-    name: IMAGE_NAME
-    value: "cockpit/kubernetes"
+  - description: 'Specify "registry/namespace" prefix for container image; e.g. for "registry.example.com/cockpit/kubernetes:latest", set prefix "registry.example.com/cockpit/"'
+    name: IMAGE_PREFIX
+    value: "cockpit/"
   - description: 'Specify image version; e.g. for "cockpit/kubernetes:latest", set version "latest"'
     name: IMAGE_VERSION
     value: latest

+ 5 - 5
roles/openshift_hosted_templates/files/v3.7/origin/registry-console.yaml

@@ -27,7 +27,7 @@ objects:
         spec:
           containers:
             - name: registry-console
-              image: ${IMAGE_NAME}:${IMAGE_VERSION}
+              image: ${IMAGE_PREFIX}kubernetes:${IMAGE_VERSION}
               ports:
                 - containerPort: 9090
                   protocol: TCP
@@ -89,7 +89,7 @@ objects:
         - annotations: null
           from:
             kind: DockerImage
-            name: ${IMAGE_NAME}:${IMAGE_VERSION}
+            name: ${IMAGE_PREFIX}kubernetes:${IMAGE_VERSION}
           name: ${IMAGE_VERSION}
   - kind: OAuthClient
     apiVersion: v1
@@ -100,9 +100,9 @@ objects:
     redirectURIs:
       - "${COCKPIT_KUBE_URL}"
 parameters:
-  - description: "Container image name"
-    name: IMAGE_NAME
-    value: "cockpit/kubernetes"
+  - description: 'Specify "registry/namespace" prefix for container image; e.g. for "registry.example.com/cockpit/kubernetes:latest", set prefix "registry.example.com/cockpit/"'
+    name: IMAGE_PREFIX
+    value: "cockpit/"
   - description: 'Specify image version; e.g. for "cockpit/kubernetes:latest", set version "latest"'
     name: IMAGE_VERSION
     value: latest