Browse Source

Bug 1324728 - Ansible should not downgrade docker when installing 3.2 containerized env

Brenton Leanhardt 9 years ago
parent
commit
0879620498

+ 14 - 0
playbooks/common/openshift-cluster/upgrades/v3_1_to_v3_2/upgrade.yml

@@ -11,6 +11,20 @@
   - include: docker_upgrade.yml
     when: not openshift.common.is_atomic | bool
 
+# The cli image is used by openshift_facts to determine the currently installed
+# version.  We need to explicitly pull the latest image to handle cases where
+# the locally cached 'latest' tag is older the g_new_version.
+- name: Download cli image
+  hosts: oo_masters_to_config:oo_nodes_to_config
+  roles:
+  - openshift_facts
+  tasks:
+  - name: Pull Images
+    command: >
+      docker pull {{ item }}:latest
+    with_items:
+    - "{{ openshift.common.cli_image }}"
+
 ###############################################################################
 # Upgrade Masters
 ###############################################################################

+ 11 - 8
roles/openshift_facts/library/openshift_facts.py

@@ -1080,13 +1080,9 @@ def get_openshift_version(facts, cli_image=None):
         elif 'node' in facts:
             container = facts['common']['service_type'] + '-node'
 
-        if container is not None:
-            exit_code, output, _ = module.run_command(['docker', 'exec', container, 'openshift', 'version'])
-            # if for some reason the container is installed but not running
-            # we'll fall back to using docker run later in this method.
-            if exit_code == 0:
-                version = parse_openshift_version(output)
-
+	# Try to get the version fromthe available cli image _before_ resorting
+	# to exec'ing in to the running container.  This is to be more fault
+	# tolerant in environments where the container is not running.
         if version is None and cli_image is not None:
             # Assume we haven't installed the environment yet and we need
             # to query the latest image, but only if docker is installed
@@ -1094,6 +1090,13 @@ def get_openshift_version(facts, cli_image=None):
                 exit_code, output, _ = module.run_command(['docker', 'run', '--rm', cli_image, 'version'])
                 version = parse_openshift_version(output)
 
+        if version is None and container is not None:
+            exit_code, output, _ = module.run_command(['docker', 'exec', container, 'openshift', 'version'])
+            # if for some reason the container is installed but not running
+            # we'll fall back to using docker run later in this method.
+            if exit_code == 0:
+                version = parse_openshift_version(output)
+
     return version
 
 def parse_openshift_version(output):
@@ -1351,7 +1354,7 @@ def set_container_facts_if_unset(facts):
         facts['common']['admin_binary'] = '/usr/local/bin/oadm'
         facts['common']['client_binary'] = '/usr/local/bin/oc'
         openshift_version = get_openshift_version(facts, cli_image)
-        if openshift_version is not None:
+        if openshift_version is not None and openshift_version is not "":
             base_version = openshift_version.split('-')[0]
             facts['common']['image_tag'] = "v" + base_version