From fb2f9f9d2be747a631e9ab13cb7c7898987d509d Mon Sep 17 00:00:00 2001
From: Devan Goodwin <dgoodwin@redhat.com>
Date: Fri, 24 Jun 2016 10:59:11 -0300
Subject: Allow skipping Docker upgrade during OpenShift upgrade.

---
 inventory/byo/hosts.aep.example                             |  7 +++++++
 inventory/byo/hosts.origin.example                          |  7 +++++++
 inventory/byo/hosts.ose.example                             |  7 +++++++
 .../openshift-cluster/upgrades/docker/upgrade_check.yml     | 13 +++++++++++++
 .../openshift-cluster/upgrades/v3_1_to_v3_2/upgrade.yml     |  3 +++
 5 files changed, 37 insertions(+)

diff --git a/inventory/byo/hosts.aep.example b/inventory/byo/hosts.aep.example
index ffed3c042..0f7998008 100644
--- a/inventory/byo/hosts.aep.example
+++ b/inventory/byo/hosts.aep.example
@@ -92,6 +92,13 @@ openshift_release=v3.2
 # Default value: "--log-driver=json-file --log-opt max-size=50m"
 #openshift_docker_options="-l warn --ipv6=false"
 
+# Specify exact version of Docker to configure or upgrade to.
+# Downgrades are not supported and will error out. Be careful when upgrading docker from < 1.10 to > 1.10.
+# docker_version="1.10.3"
+
+# Skip upgrading Docker during an OpenShift upgrade, leaves the current Docker version alone.
+# docker_upgrade=False
+
 # Alternate image format string. If you're not modifying the format string and
 # only need to inject your own registry you may want to consider
 # openshift_docker_additional_registries instead
diff --git a/inventory/byo/hosts.origin.example b/inventory/byo/hosts.origin.example
index d3d1e3994..27dd5a575 100644
--- a/inventory/byo/hosts.origin.example
+++ b/inventory/byo/hosts.origin.example
@@ -93,6 +93,13 @@ openshift_release=v1.2
 # Default value: "--log-driver=json-file --log-opt max-size=50m"
 #openshift_docker_options="-l warn --ipv6=false"
 
+# Specify exact version of Docker to configure or upgrade to.
+# Downgrades are not supported and will error out. Be careful when upgrading docker from < 1.10 to > 1.10.
+# docker_version="1.10.3"
+
+# Skip upgrading Docker during an OpenShift upgrade, leaves the current Docker version alone.
+# docker_upgrade=False
+
 # Alternate image format string. If you're not modifying the format string and
 # only need to inject your own registry you may want to consider
 # openshift_docker_additional_registries instead
diff --git a/inventory/byo/hosts.ose.example b/inventory/byo/hosts.ose.example
index 2514fcc96..1831b0bae 100644
--- a/inventory/byo/hosts.ose.example
+++ b/inventory/byo/hosts.ose.example
@@ -92,6 +92,13 @@ openshift_release=v3.2
 # Default value: "--log-driver=json-file --log-opt max-size=50m"
 #openshift_docker_options="-l warn --ipv6=false"
 
+# Specify exact version of Docker to configure or upgrade to.
+# Downgrades are not supported and will error out. Be careful when upgrading docker from < 1.10 to > 1.10.
+# docker_version="1.10.3"
+
+# Skip upgrading Docker during an OpenShift upgrade, leaves the current Docker version alone.
+# docker_upgrade=False
+
 # Alternate image format string. If you're not modifying the format string and
 # only need to inject your own registry you may want to consider
 # openshift_docker_additional_registries instead
diff --git a/playbooks/common/openshift-cluster/upgrades/docker/upgrade_check.yml b/playbooks/common/openshift-cluster/upgrades/docker/upgrade_check.yml
index 928913ef3..caf8d1de5 100644
--- a/playbooks/common/openshift-cluster/upgrades/docker/upgrade_check.yml
+++ b/playbooks/common/openshift-cluster/upgrades/docker/upgrade_check.yml
@@ -1,4 +1,10 @@
 ---
+
+# This snippet determines if docker_upgrade should be set for the host. If it's already
+# set via the inventory we will respect it. Otherwise we check if the current version
+# is equal to the either the latest, or the requested docker_version, and set
+# docker_upgrade accordingly.
+
 - name: Determine available Docker version
   script: ../../../../common/openshift-cluster/upgrades/files/rpm_versions.sh docker
   register: g_docker_version_result
@@ -26,6 +32,13 @@
   # Disable the 1.10 requirement if the user set a specific Docker version
   when: avail_docker_version.stdout | version_compare('1.10','<') and docker_version is not defined
 
+# We respect docker_upgrade=False in the inventory, but True is the default and
+# if set in inventory, we still flip it to False here and only set to true if
+# they're not already running the required version.
+- set_fact:
+    docker_upgrade: False
+  when: docker_upgrade is not defined or docker_upgrade | bool
+
 - name: Flag for upgrade if Docker version does not equal latest
   set_fact:
     docker_upgrade: true
diff --git a/playbooks/common/openshift-cluster/upgrades/v3_1_to_v3_2/upgrade.yml b/playbooks/common/openshift-cluster/upgrades/v3_1_to_v3_2/upgrade.yml
index 8eeb652a7..f2e408ad4 100644
--- a/playbooks/common/openshift-cluster/upgrades/v3_1_to_v3_2/upgrade.yml
+++ b/playbooks/common/openshift-cluster/upgrades/v3_1_to_v3_2/upgrade.yml
@@ -80,7 +80,10 @@
     delegate_to: "{{ groups.oo_first_master.0 }}"
     when: inventory_hostname in groups.oo_nodes_to_config
 
+  # Only check if docker upgrade is required if docker_upgrade is not
+  # already set to False.
   - include: ../docker/upgrade_check.yml
+    when: docker_upgrade is not defined or docker_upgrade | bool
 
   - include: ../docker/upgrade.yml
     when: docker_upgrade is defined and docker_upgrade | bool
-- 
cgit v1.2.3