Browse Source

Merge pull request #2211 from dgoodwin/33-upgrade-playbook

1.3 / 3.3 Upgrades
Scott Dodson 8 years ago
parent
commit
2594364683
38 changed files with 308 additions and 85 deletions
  1. 19 11
      library/modify_yaml.py
  2. 4 2
      playbooks/byo/openshift-cluster/upgrades/v3_2/README.md
  3. 11 3
      playbooks/byo/openshift-cluster/upgrades/v3_2/upgrade.yml
  4. 18 0
      playbooks/byo/openshift-cluster/upgrades/v3_3/README.md
  5. 67 0
      playbooks/byo/openshift-cluster/upgrades/v3_3/upgrade.yml
  6. 3 1
      playbooks/common/openshift-cluster/enable_dnsmasq.yml
  7. 1 0
      playbooks/common/openshift-cluster/upgrades/atomic-openshift-master.j2
  8. 2 2
      playbooks/common/openshift-cluster/upgrades/v3_1_to_v3_2/containerized_node_upgrade.yml
  9. 1 0
      playbooks/common/openshift-cluster/upgrades/docker-cluster
  10. 1 0
      playbooks/common/openshift-cluster/upgrades/master_docker
  11. 1 0
      playbooks/common/openshift-cluster/upgrades/native-cluster
  12. 1 0
      playbooks/common/openshift-cluster/upgrades/openshift.docker.node.dep.service
  13. 1 0
      playbooks/common/openshift-cluster/upgrades/openshift.docker.node.service
  14. 1 0
      playbooks/common/openshift-cluster/upgrades/openvswitch.docker.service
  15. 1 0
      playbooks/common/openshift-cluster/upgrades/openvswitch.sysconfig.j2
  16. 0 1
      playbooks/common/openshift-cluster/upgrades/v3_1_to_v3_2/post.yml
  17. 15 43
      playbooks/common/openshift-cluster/upgrades/v3_1_to_v3_2/pre.yml
  18. 0 0
      playbooks/common/openshift-cluster/upgrades/rpm_upgrade.yml
  19. 38 6
      playbooks/common/openshift-cluster/upgrades/v3_1_to_v3_2/upgrade.yml
  20. 0 1
      playbooks/common/openshift-cluster/upgrades/v3_1_to_v3_2/atomic-openshift-master.j2
  21. 0 1
      playbooks/common/openshift-cluster/upgrades/v3_1_to_v3_2/docker
  22. 0 1
      playbooks/common/openshift-cluster/upgrades/v3_1_to_v3_2/docker-cluster
  23. 0 1
      playbooks/common/openshift-cluster/upgrades/v3_1_to_v3_2/filter_plugins
  24. 0 1
      playbooks/common/openshift-cluster/upgrades/v3_1_to_v3_2/library
  25. 0 1
      playbooks/common/openshift-cluster/upgrades/v3_1_to_v3_2/lookup_plugins
  26. 0 1
      playbooks/common/openshift-cluster/upgrades/v3_1_to_v3_2/native-cluster
  27. 0 1
      playbooks/common/openshift-cluster/upgrades/v3_1_to_v3_2/openshift.docker.node.dep.service
  28. 0 1
      playbooks/common/openshift-cluster/upgrades/v3_1_to_v3_2/openshift.docker.node.service
  29. 0 1
      playbooks/common/openshift-cluster/upgrades/v3_1_to_v3_2/openvswitch.docker.service
  30. 0 1
      playbooks/common/openshift-cluster/upgrades/v3_1_to_v3_2/openvswitch.sysconfig.j2
  31. 0 1
      playbooks/common/openshift-cluster/upgrades/v3_1_to_v3_2/roles
  32. 40 0
      playbooks/common/openshift-cluster/upgrades/v3_3/master_config_upgrade.yml
  33. 21 0
      playbooks/common/openshift-cluster/upgrades/v3_3/node_config_upgrade.yml
  34. 4 4
      roles/openshift_master/tasks/systemd_units.yml
  35. 14 0
      roles/openshift_master/templates/master.yaml.v1.j2
  36. 0 0
      roles/openshift_master/templates/master_docker/master.docker.service.j2
  37. 7 0
      roles/openshift_node/templates/node.yaml.v1.j2
  38. 37 0
      test/modify_yaml_tests.py

+ 19 - 11
library/modify_yaml.py

@@ -20,6 +20,24 @@ EXAMPLES = '''
     yaml_value: 2
     yaml_value: 2
 '''
 '''
 
 
+
+# pylint: disable=missing-docstring
+def set_key(yaml_data, yaml_key, yaml_value):
+    changes = []
+    ptr = yaml_data
+    for key in yaml_key.split('.'):
+        if key not in ptr and key != yaml_key.split('.')[-1]:
+            ptr[key] = {}
+            ptr = ptr[key]
+        elif key == yaml_key.split('.')[-1]:
+            if (key in ptr and module.safe_eval(ptr[key]) != yaml_value) or (key not in ptr):
+                ptr[key] = yaml_value
+                changes.append((yaml_key, yaml_value))
+        else:
+            ptr = ptr[key]
+    return changes
+
+
 def main():
 def main():
     ''' Modify key (supplied in jinja2 dot notation) in yaml file, setting
     ''' Modify key (supplied in jinja2 dot notation) in yaml file, setting
         the key to the desired value.
         the key to the desired value.
@@ -53,22 +71,12 @@ def main():
     yaml.add_representer(type(None), none_representer)
     yaml.add_representer(type(None), none_representer)
 
 
     try:
     try:
-        changes = []
 
 
         yaml_file = open(dest)
         yaml_file = open(dest)
         yaml_data = yaml.safe_load(yaml_file.read())
         yaml_data = yaml.safe_load(yaml_file.read())
         yaml_file.close()
         yaml_file.close()
 
 
-        ptr = yaml_data
-        for key in yaml_key.split('.'):
-            if key not in ptr and key != yaml_key.split('.')[-1]:
-                ptr[key] = {}
-            elif key == yaml_key.split('.')[-1]:
-                if (key in ptr and module.safe_eval(ptr[key]) != yaml_value) or (key not in ptr):
-                    ptr[key] = yaml_value
-                    changes.append((yaml_key, yaml_value))
-            else:
-                ptr = ptr[key]
+        changes = set_key(yaml_data, yaml_key, yaml_value)
 
 
         if len(changes) > 0:
         if len(changes) > 0:
             if backup:
             if backup:

+ 4 - 2
playbooks/byo/openshift-cluster/upgrades/v3_2/README.md

@@ -1,10 +1,12 @@
-# v3.1 to v3.2 upgrade playbook
+# v3.2 Major and Minor Upgrade Playbook
 
 
 ## Overview
 ## Overview
 This playbook currently performs the
 This playbook currently performs the
 following steps.
 following steps.
 
 
  * Upgrade and restart master services
  * Upgrade and restart master services
+ * Unschedule node.
+ * Upgrade and restart docker
  * Upgrade and restart node services
  * Upgrade and restart node services
  * Modifies the subset of the configuration necessary
  * Modifies the subset of the configuration necessary
  * Applies the latest cluster policies
  * Applies the latest cluster policies
@@ -13,4 +15,4 @@ following steps.
  * Updates image streams and quickstarts
  * Updates image streams and quickstarts
 
 
 ## Usage
 ## Usage
-ansible-playbook -i ~/ansible-inventory openshift-ansible/playbooks/byo/openshift-cluster/upgrades/v3_1_to_v3_2/upgrade.yml
+ansible-playbook -i ~/ansible-inventory openshift-ansible/playbooks/byo/openshift-cluster/upgrades/v3_2/upgrade.yml

+ 11 - 3
playbooks/byo/openshift-cluster/upgrades/v3_2/upgrade.yml

@@ -47,11 +47,19 @@
       openshift_docker_log_options: "{{ lookup('oo_option', 'docker_log_options') }}"
       openshift_docker_log_options: "{{ lookup('oo_option', 'docker_log_options') }}"
     when: openshift_docker_log_options is not defined
     when: openshift_docker_log_options is not defined
 
 
-- include: ../../../../common/openshift-cluster/upgrades/v3_1_to_v3_2/pre.yml
+
+# Configure the upgrade target for the common upgrade tasks:
+- hosts: l_oo_all_hosts
+  tasks:
+  - set_fact:
+      openshift_upgrade_target: "{{ '1.2' if deployment_type == 'origin' else '3.2' }}"
+      openshift_upgrade_min: "{{ '1.1' if deployment_type == 'origin' else '3.1' }}"
+
+- include: ../../../../common/openshift-cluster/upgrades/pre.yml
   vars:
   vars:
     openshift_deployment_type: "{{ deployment_type }}"
     openshift_deployment_type: "{{ deployment_type }}"
-- include: ../../../../common/openshift-cluster/upgrades/v3_1_to_v3_2/upgrade.yml
+- include: ../../../../common/openshift-cluster/upgrades/upgrade.yml
   vars:
   vars:
     openshift_deployment_type: "{{ deployment_type }}"
     openshift_deployment_type: "{{ deployment_type }}"
 - include: ../../../openshift-master/restart.yml
 - include: ../../../openshift-master/restart.yml
-- include: ../../../../common/openshift-cluster/upgrades/v3_1_to_v3_2/post.yml
+- include: ../../../../common/openshift-cluster/upgrades/post.yml

+ 18 - 0
playbooks/byo/openshift-cluster/upgrades/v3_3/README.md

@@ -0,0 +1,18 @@
+# v3.3 Major and Minor Upgrade Playbook
+
+## Overview
+This playbook currently performs the
+following steps.
+
+ * Upgrade and restart master services
+ * Unschedule node.
+ * Upgrade and restart docker
+ * Upgrade and restart node services
+ * Modifies the subset of the configuration necessary
+ * Applies the latest cluster policies
+ * Updates the default router if one exists
+ * Updates the default registry if one exists
+ * Updates image streams and quickstarts
+
+## Usage
+ansible-playbook -i ~/ansible-inventory openshift-ansible/playbooks/byo/openshift-cluster/upgrades/v3_3/upgrade.yml

+ 67 - 0
playbooks/byo/openshift-cluster/upgrades/v3_3/upgrade.yml

@@ -0,0 +1,67 @@
+---
+- include: ../../../../common/openshift-cluster/verify_ansible_version.yml
+
+- hosts: localhost
+  connection: local
+  become: no
+  gather_facts: no
+  tasks:
+  - include_vars: ../../../../byo/openshift-cluster/cluster_hosts.yml
+  - add_host:
+      name: "{{ item }}"
+      groups: l_oo_all_hosts
+    with_items: g_all_hosts | default([])
+
+- hosts: l_oo_all_hosts
+  gather_facts: no
+  tasks:
+  - include_vars: ../../../../byo/openshift-cluster/cluster_hosts.yml
+
+- include: ../../../../common/openshift-cluster/evaluate_groups.yml
+  vars:
+    # Do not allow adding hosts during upgrade.
+    g_new_master_hosts: []
+    g_new_node_hosts: []
+    openshift_cluster_id: "{{ cluster_id | default('default') }}"
+    openshift_deployment_type: "{{ deployment_type }}"
+
+- name: Set oo_options
+  hosts: oo_all_hosts
+  tasks:
+  - set_fact:
+      openshift_docker_additional_registries: "{{ lookup('oo_option', 'docker_additional_registries') }}"
+    when: openshift_docker_additional_registries is not defined
+  - set_fact:
+      openshift_docker_insecure_registries: "{{ lookup('oo_option',  'docker_insecure_registries') }}"
+    when: openshift_docker_insecure_registries is not defined
+  - set_fact:
+      openshift_docker_blocked_registries: "{{ lookup('oo_option', 'docker_blocked_registries') }}"
+    when: openshift_docker_blocked_registries is not defined
+  - set_fact:
+      openshift_docker_options: "{{ lookup('oo_option', 'docker_options') }}"
+    when: openshift_docker_options is not defined
+  - set_fact:
+      openshift_docker_log_driver: "{{ lookup('oo_option', 'docker_log_driver') }}"
+    when: openshift_docker_log_driver is not defined
+  - set_fact:
+      openshift_docker_log_options: "{{ lookup('oo_option', 'docker_log_options') }}"
+    when: openshift_docker_log_options is not defined
+
+
+# Configure the upgrade target for the common upgrade tasks:
+- hosts: l_oo_all_hosts
+  tasks:
+  - set_fact:
+      openshift_upgrade_target: "{{ '1.3' if deployment_type == 'origin' else '3.3' }}"
+      openshift_upgrade_min: "{{ '1.2' if deployment_type == 'origin' else '3.2' }}"
+
+- include: ../../../../common/openshift-cluster/upgrades/pre.yml
+  vars:
+    openshift_deployment_type: "{{ deployment_type }}"
+- include: ../../../../common/openshift-cluster/upgrades/upgrade.yml
+  vars:
+    openshift_deployment_type: "{{ deployment_type }}"
+    master_config_hook: "v3_3/master_config_upgrade.yml"
+    node_config_hook: "v3_3/node_config_upgrade.yml"
+- include: ../../../openshift-master/restart.yml
+- include: ../../../../common/openshift-cluster/upgrades/post.yml

+ 3 - 1
playbooks/common/openshift-cluster/enable_dnsmasq.yml

@@ -8,11 +8,12 @@
   post_tasks:
   post_tasks:
   - fail: msg="This playbook requires a master version of at least Origin 1.1 or OSE 3.1"
   - fail: msg="This playbook requires a master version of at least Origin 1.1 or OSE 3.1"
     when: not openshift.common.version_gte_3_1_1_or_1_1_1 | bool
     when: not openshift.common.version_gte_3_1_1_or_1_1_1 | bool
-  
+
 - name: Reconfigure masters to listen on our new dns_port
 - name: Reconfigure masters to listen on our new dns_port
   hosts: oo_masters_to_config
   hosts: oo_masters_to_config
   handlers:
   handlers:
   - include: ../../../roles/openshift_master/handlers/main.yml
   - include: ../../../roles/openshift_master/handlers/main.yml
+    static: yes
   vars:
   vars:
     os_firewall_allow:
     os_firewall_allow:
     - service: skydns tcp
     - service: skydns tcp
@@ -43,6 +44,7 @@
   hosts: oo_nodes_to_config
   hosts: oo_nodes_to_config
   handlers:
   handlers:
   - include: ../../../roles/openshift_node/handlers/main.yml
   - include: ../../../roles/openshift_node/handlers/main.yml
+    static: yes
   pre_tasks:
   pre_tasks:
   - openshift_facts:
   - openshift_facts:
       role: "{{ item.role }}"
       role: "{{ item.role }}"

+ 1 - 0
playbooks/common/openshift-cluster/upgrades/atomic-openshift-master.j2

@@ -0,0 +1 @@
+../../../../roles/openshift_master/templates/atomic-openshift-master.j2

+ 2 - 2
playbooks/common/openshift-cluster/upgrades/v3_1_to_v3_2/containerized_node_upgrade.yml

@@ -1,7 +1,7 @@
-- include_vars: ../../../../../roles/openshift_node/vars/main.yml
+- include_vars: ../../../../roles/openshift_node/vars/main.yml
 
 
 - name: Update systemd units
 - name: Update systemd units
-  include: ../../../../../roles/openshift_node/tasks/systemd_units.yml openshift_version={{ openshift_image_tag }}
+  include: ../../../../roles/openshift_node/tasks/systemd_units.yml openshift_version={{ openshift_image_tag }}
 
 
 - name: Verifying the correct version was configured
 - name: Verifying the correct version was configured
   shell: grep {{ verify_upgrade_version }} {{ item }}
   shell: grep {{ verify_upgrade_version }} {{ item }}

+ 1 - 0
playbooks/common/openshift-cluster/upgrades/docker-cluster

@@ -0,0 +1 @@
+../../../../roles/openshift_master/templates/docker-cluster

+ 1 - 0
playbooks/common/openshift-cluster/upgrades/master_docker

@@ -0,0 +1 @@
+../../../../roles/openshift_master/templates/master_docker

+ 1 - 0
playbooks/common/openshift-cluster/upgrades/native-cluster

@@ -0,0 +1 @@
+../../../../roles/openshift_master/templates/native-cluster

+ 1 - 0
playbooks/common/openshift-cluster/upgrades/openshift.docker.node.dep.service

@@ -0,0 +1 @@
+../../../../roles/openshift_node/templates/openshift.docker.node.dep.service

+ 1 - 0
playbooks/common/openshift-cluster/upgrades/openshift.docker.node.service

@@ -0,0 +1 @@
+../../../../roles/openshift_node/templates/openshift.docker.node.service

+ 1 - 0
playbooks/common/openshift-cluster/upgrades/openvswitch.docker.service

@@ -0,0 +1 @@
+../../../../roles/openshift_node/templates/openvswitch.docker.service

+ 1 - 0
playbooks/common/openshift-cluster/upgrades/openvswitch.sysconfig.j2

@@ -0,0 +1 @@
+../../../../roles/openshift_node/templates/openvswitch.sysconfig.j2

+ 0 - 1
playbooks/common/openshift-cluster/upgrades/v3_1_to_v3_2/post.yml

@@ -56,4 +56,3 @@
       {{ oc_cmd }} patch dc/docker-registry -n default -p
       {{ oc_cmd }} patch dc/docker-registry -n default -p
       '{"spec":{"template":{"spec":{"containers":[{"name":"registry","image":"{{ registry_image }}"}]}}}}'
       '{"spec":{"template":{"spec":{"containers":[{"name":"registry","image":"{{ registry_image }}"}]}}}}'
       --api-version=v1
       --api-version=v1
-

+ 15 - 43
playbooks/common/openshift-cluster/upgrades/v3_1_to_v3_2/pre.yml

@@ -3,7 +3,7 @@
 # Evaluate host groups and gather facts
 # Evaluate host groups and gather facts
 ###############################################################################
 ###############################################################################
 
 
-- include: ../../initialize_facts.yml
+- include: ../initialize_facts.yml
 
 
 - name: Update repos and initialize facts on all hosts
 - name: Update repos and initialize facts on all hosts
   hosts: oo_masters_to_config:oo_nodes_to_config:oo_etcd_to_config:oo_lb_to_config
   hosts: oo_masters_to_config:oo_nodes_to_config:oo_etcd_to_config:oo_lb_to_config
@@ -39,7 +39,6 @@
 - name: Verify upgrade can proceed on first master
 - name: Verify upgrade can proceed on first master
   hosts: oo_first_master
   hosts: oo_first_master
   vars:
   vars:
-    target_version: "{{ '1.2' if deployment_type == 'origin' else '3.2' }}"
     g_pacemaker_upgrade_url_segment: "{{ 'org/latest' if deployment_type =='origin' else '.com/enterprise/3.1' }}"
     g_pacemaker_upgrade_url_segment: "{{ 'org/latest' if deployment_type =='origin' else '.com/enterprise/3.1' }}"
   gather_facts: no
   gather_facts: no
   tasks:
   tasks:
@@ -63,14 +62,14 @@
   - fail:
   - fail:
       msg: >
       msg: >
         openshift_pkg_version is {{ openshift_pkg_version }} which is not a
         openshift_pkg_version is {{ openshift_pkg_version }} which is not a
-        valid version for a {{ target_version }} upgrade
-    when: openshift_pkg_version is defined and openshift_pkg_version.split('-',1).1 | version_compare(target_version ,'<')
+        valid version for a {{ openshift_upgrade_target }} upgrade
+    when: openshift_pkg_version is defined and openshift_pkg_version.split('-',1).1 | version_compare(openshift_upgrade_target ,'<')
 
 
   - fail:
   - fail:
       msg: >
       msg: >
         openshift_image_tag is {{ openshift_image_tag }} which is not a
         openshift_image_tag is {{ openshift_image_tag }} which is not a
-        valid version for a {{ target_version }} upgrade
-    when: openshift_image_tag is defined and openshift_image_tag.split('v',1).1 | version_compare(target_version ,'<')
+        valid version for a {{ openshift_upgrade_target }} upgrade
+    when: openshift_image_tag is defined and openshift_image_tag.split('v',1).1 | version_compare(openshift_upgrade_target ,'<')
 
 
   - set_fact:
   - set_fact:
       openshift_release: "{{ openshift_release[1:] }}"
       openshift_release: "{{ openshift_release[1:] }}"
@@ -79,15 +78,15 @@
   - fail:
   - fail:
       msg: >
       msg: >
         openshift_release is {{ openshift_release }} which is not a
         openshift_release is {{ openshift_release }} which is not a
-        valid release for a {{ target_version }} upgrade
-    when: openshift_release is defined and not openshift_release | version_compare(target_version ,'=')
+        valid release for a {{ openshift_upgrade_target }} upgrade
+    when: openshift_release is defined and not openshift_release | version_compare(openshift_upgrade_target ,'=')
 
 
-- include: ../../../../common/openshift-cluster/initialize_openshift_version.yml
+- include: ../../../common/openshift-cluster/initialize_openshift_version.yml
   vars:
   vars:
-    # Request openshift_release 3.2 and let the openshift_version role handle converting this
+    # Request specific openshift_release and let the openshift_version role handle converting this
     # to a more specific version, respecting openshift_image_tag and openshift_pkg_version if
     # to a more specific version, respecting openshift_image_tag and openshift_pkg_version if
     # defined, and overriding the normal behavior of protecting the installed version
     # defined, and overriding the normal behavior of protecting the installed version
-    openshift_release: "{{ '1.2' if deployment_type == 'origin' else '3.2' }}"
+    openshift_release: "{{ openshift_upgrade_target }}"
     openshift_protect_installed_version: False
     openshift_protect_installed_version: False
     # Docker role (a dependency) should be told not to do anything to installed version
     # Docker role (a dependency) should be told not to do anything to installed version
     # of docker, we handle this separately during upgrade. (the inventory may have a
     # of docker, we handle this separately during upgrade. (the inventory may have a
@@ -141,7 +140,6 @@
 - name: Verify upgrade targets
 - name: Verify upgrade targets
   hosts: oo_masters_to_config:oo_nodes_to_config
   hosts: oo_masters_to_config:oo_nodes_to_config
   vars:
   vars:
-    target_version: "{{ '1.2' if deployment_type == 'origin' else '3.2' }}"
     openshift_docker_hosted_registry_network: "{{ hostvars[groups.oo_first_master.0].openshift.common.portal_net }}"
     openshift_docker_hosted_registry_network: "{{ hostvars[groups.oo_first_master.0].openshift.common.portal_net }}"
   pre_tasks:
   pre_tasks:
   - fail:
   - fail:
@@ -175,40 +173,14 @@
     register: avail_openshift_version
     register: avail_openshift_version
     when: not openshift.common.is_containerized | bool
     when: not openshift.common.is_containerized | bool
 
 
-  - name: Verify OpenShift 3.2 RPMs are available for upgrade
+  - name: Verify OpenShift RPMs are available for upgrade
     fail:
     fail:
-      msg: "OpenShift {{ avail_openshift_version.stdout }} is available, but 3.2 or greater is required"
-    when: deployment_type != 'origin' and not openshift.common.is_containerized | bool and not avail_openshift_version | skipped and avail_openshift_version.stdout | default('0.0', True) | version_compare(openshift_release, '<')
-
-  - name: Verify Origin 1.2 RPMs are available for upgrade
-    fail:
-      msg: "OpenShift {{ avail_openshift_version.stdout }} is available, but 1.2 or greater is required"
-    when: deployment_type == 'origin' and not openshift.common.is_containerized | bool and not avail_openshift_version | skipped and avail_openshift_version.stdout | default('0.0', True) | version_compare(openshift_release, '<')
-
-  # TODO: Are these two grep checks necessary anymore?
-  # Note: the version number is hardcoded here in hopes of catching potential
-  # bugs in how g_aos_versions.curr_version is set
-  - name: Verifying the correct version is installed for upgrade
-    shell: grep 3.1.1.6 {{ item }}
-    with_items:
-      - /etc/sysconfig/openvswitch
-      - /etc/sysconfig/{{ openshift.common.service_type }}*
-    when: verify_upgrade_version is defined
-
-  - name: Verifying the image version is used in the systemd unit
-    shell: grep IMAGE_VERSION {{ item }}
-    with_items:
-      - /etc/systemd/system/openvswitch.service
-      - /etc/systemd/system/{{ openshift.common.service_type }}*.service
-    when: openshift.common.is_containerized | bool and verify_upgrade_version is defined
-
-  - fail:
-      msg: This upgrade playbook must be run on Origin 1.1 or later
-    when: deployment_type == 'origin' and openshift.common.version | version_compare('1.1','<')
+      msg: "OpenShift {{ avail_openshift_version.stdout }} is available, but {{ openshift_upgrade_target }} or greater is required"
+    when: not openshift.common.is_containerized | bool and not avail_openshift_version | skipped and avail_openshift_version.stdout | default('0.0', True) | version_compare(openshift_release, '<')
 
 
   - fail:
   - fail:
-      msg: This upgrade playbook must be run on OpenShift Enterprise 3.1 or later
-    when: deployment_type == 'atomic-openshift' and openshift.common.version | version_compare('3.1','<')
+      msg: "This upgrade playbook must be run against OpenShift {{ openshift_upgrade_min }} or later"
+    when: deployment_type == 'origin' and openshift.common.version | version_compare(openshift_upgrade_min,'<')
 
 
 - name: Verify docker upgrade targets
 - name: Verify docker upgrade targets
   hosts: oo_masters_to_config:oo_nodes_to_config:oo_etcd_to_config
   hosts: oo_masters_to_config:oo_nodes_to_config:oo_etcd_to_config

playbooks/common/openshift-cluster/upgrades/v3_1_to_v3_2/rpm_upgrade.yml → playbooks/common/openshift-cluster/upgrades/rpm_upgrade.yml


+ 38 - 6
playbooks/common/openshift-cluster/upgrades/v3_1_to_v3_2/upgrade.yml

@@ -9,17 +9,21 @@
 - name: Upgrade master
 - name: Upgrade master
   hosts: oo_masters_to_config
   hosts: oo_masters_to_config
   handlers:
   handlers:
-  - include: ../../../../../roles/openshift_master/handlers/main.yml
+  - include: ../../../../roles/openshift_master/handlers/main.yml
+    static: yes
   roles:
   roles:
   - openshift_facts
   - openshift_facts
   tasks:
   tasks:
   - include: rpm_upgrade.yml component=master
   - include: rpm_upgrade.yml component=master
     when: not openshift.common.is_containerized | bool
     when: not openshift.common.is_containerized | bool
 
 
-  - include_vars: ../../../../../roles/openshift_master/vars/main.yml
+  - include: "{{ master_config_hook }}"
+    when: master_config_hook is defined
+
+  - include_vars: ../../../../roles/openshift_master/vars/main.yml
 
 
   - name: Update systemd units
   - name: Update systemd units
-    include: ../../../../../roles/openshift_master/tasks/systemd_units.yml
+    include: ../../../../roles/openshift_master/tasks/systemd_units.yml
 
 
 #  - name: Upgrade master configuration
 #  - name: Upgrade master configuration
 #    openshift_upgrade_config:
 #    openshift_upgrade_config:
@@ -28,6 +32,31 @@
 #      role: master
 #      role: master
 #      config_base: "{{ hostvars[inventory_hostname].openshift.common.config_base }}"
 #      config_base: "{{ hostvars[inventory_hostname].openshift.common.config_base }}"
 
 
+  - name: Check for ca-bundle.crt
+    stat:
+      path: "{{ openshift.common.config_base }}/master/ca-bundle.crt"
+    register: ca_bundle_stat
+    failed_when: false
+
+  - name: Check for ca.crt
+    stat:
+      path: "{{ openshift.common.config_base }}/master/ca.crt"
+    register: ca_crt_stat
+    failed_when: false
+
+  - name: Migrate ca.crt to ca-bundle.crt
+    command: mv ca.crt ca-bundle.crt
+    args:
+      chdir: "{{ openshift.common.config_base }}/master"
+    when: ca_crt_stat.stat.isreg and not ca_bundle_stat.stat.exists
+
+  - name: Link ca.crt to ca-bundle.crt
+    file:
+      src: "{{ openshift.common.config_base }}/master/ca-bundle.crt"
+      path: "{{ openshift.common.config_base }}/master/ca.crt"
+      state: link
+    when: ca_crt_stat.stat.isreg and not ca_bundle_stat.stat.exists
+
 - name: Set master update status to complete
 - name: Set master update status to complete
   hosts: oo_masters_to_config
   hosts: oo_masters_to_config
   tasks:
   tasks:
@@ -64,7 +93,8 @@
   roles:
   roles:
   - openshift_facts
   - openshift_facts
   handlers:
   handlers:
-  - include: ../../../../../roles/openshift_node/handlers/main.yml
+  - include: ../../../../roles/openshift_node/handlers/main.yml
+    static: yes
   tasks:
   tasks:
   # TODO: To better handle re-trying failed upgrades, it would be nice to check if the node
   # TODO: To better handle re-trying failed upgrades, it would be nice to check if the node
   # or docker actually needs an upgrade before proceeding. Perhaps best to save this until
   # or docker actually needs an upgrade before proceeding. Perhaps best to save this until
@@ -83,11 +113,13 @@
 
 
   # Only check if docker upgrade is required if docker_upgrade is not
   # Only check if docker upgrade is required if docker_upgrade is not
   # already set to False.
   # already set to False.
-  - include: ../docker/upgrade_check.yml
+  - include: docker/upgrade_check.yml
     when: docker_upgrade is not defined or docker_upgrade | bool and not openshift.common.is_atomic | bool
     when: docker_upgrade is not defined or docker_upgrade | bool and not openshift.common.is_atomic | bool
 
 
-  - include: ../docker/upgrade.yml
+  - include: docker/upgrade.yml
     when: l_docker_upgrade is defined and l_docker_upgrade | bool and not openshift.common.is_atomic | bool
     when: l_docker_upgrade is defined and l_docker_upgrade | bool and not openshift.common.is_atomic | bool
+  - include: "{{ node_config_hook }}"
+    when: node_config_hook is defined
 
 
   - include: rpm_upgrade.yml
   - include: rpm_upgrade.yml
     vars:
     vars:

+ 0 - 1
playbooks/common/openshift-cluster/upgrades/v3_1_to_v3_2/atomic-openshift-master.j2

@@ -1 +0,0 @@
-../../../../../roles/openshift_master/templates/atomic-openshift-master.j2

+ 0 - 1
playbooks/common/openshift-cluster/upgrades/v3_1_to_v3_2/docker

@@ -1 +0,0 @@
-../../../../../roles/openshift_master/templates/docker

+ 0 - 1
playbooks/common/openshift-cluster/upgrades/v3_1_to_v3_2/docker-cluster

@@ -1 +0,0 @@
-../../../../../roles/openshift_master/templates/docker-cluster

+ 0 - 1
playbooks/common/openshift-cluster/upgrades/v3_1_to_v3_2/filter_plugins

@@ -1 +0,0 @@
-../../../../../filter_plugins

+ 0 - 1
playbooks/common/openshift-cluster/upgrades/v3_1_to_v3_2/library

@@ -1 +0,0 @@
-../library

+ 0 - 1
playbooks/common/openshift-cluster/upgrades/v3_1_to_v3_2/lookup_plugins

@@ -1 +0,0 @@
-../../../../../lookup_plugins

+ 0 - 1
playbooks/common/openshift-cluster/upgrades/v3_1_to_v3_2/native-cluster

@@ -1 +0,0 @@
-../../../../../roles/openshift_master/templates/native-cluster

+ 0 - 1
playbooks/common/openshift-cluster/upgrades/v3_1_to_v3_2/openshift.docker.node.dep.service

@@ -1 +0,0 @@
-../../../../../roles/openshift_node/templates/openshift.docker.node.dep.service

+ 0 - 1
playbooks/common/openshift-cluster/upgrades/v3_1_to_v3_2/openshift.docker.node.service

@@ -1 +0,0 @@
-../../../../../roles/openshift_node/templates/openshift.docker.node.service

+ 0 - 1
playbooks/common/openshift-cluster/upgrades/v3_1_to_v3_2/openvswitch.docker.service

@@ -1 +0,0 @@
-../../../../../roles/openshift_node/templates/openvswitch.docker.service

+ 0 - 1
playbooks/common/openshift-cluster/upgrades/v3_1_to_v3_2/openvswitch.sysconfig.j2

@@ -1 +0,0 @@
-../../../../../roles/openshift_node/templates/openvswitch.sysconfig.j2

+ 0 - 1
playbooks/common/openshift-cluster/upgrades/v3_1_to_v3_2/roles

@@ -1 +0,0 @@
-../../../../../roles

+ 40 - 0
playbooks/common/openshift-cluster/upgrades/v3_3/master_config_upgrade.yml

@@ -0,0 +1,40 @@
+---
+- modify_yaml:
+    dest: "{{ openshift.common.config_base}}/master/master-config.yaml"
+    yaml_key: 'masterClients.externalKubernetesClientConnectionOverrides.acceptContentTypes'
+    yaml_value: 'application/vnd.kubernetes.protobuf,application/json'
+
+- modify_yaml:
+    dest: "{{ openshift.common.config_base}}/master/master-config.yaml"
+    yaml_key: 'masterClients.externalKubernetesClientConnectionOverrides.contentType'
+    yaml_value: 'application/vnd.kubernetes.protobuf'
+
+- modify_yaml:
+    dest: "{{ openshift.common.config_base}}/master/master-config.yaml"
+    yaml_key: 'masterClients.externalKubernetesClientConnectionOverrides.burst'
+    yaml_value: 400
+
+- modify_yaml:
+    dest: "{{ openshift.common.config_base}}/master/master-config.yaml"
+    yaml_key: 'masterClients.externalKubernetesClientConnectionOverrides.ops'
+    yaml_value: 200
+
+- modify_yaml:
+    dest: "{{ openshift.common.config_base}}/master/master-config.yaml"
+    yaml_key: 'masterClients.openshiftLoopbackClientConnectionOverrides.acceptContentTypes'
+    yaml_value: 'application/vnd.kubernetes.protobuf,application/json'
+
+- modify_yaml:
+    dest: "{{ openshift.common.config_base}}/master/master-config.yaml"
+    yaml_key: 'masterClients.openshiftLoopbackClientConnectionOverrides.contentType'
+    yaml_value: 'application/vnd.kubernetes.protobuf'
+
+- modify_yaml:
+    dest: "{{ openshift.common.config_base}}/master/master-config.yaml"
+    yaml_key: 'masterClients.openshiftLoopbackClientConnectionOverrides.burst'
+    yaml_value: 600
+
+- modify_yaml:
+    dest: "{{ openshift.common.config_base}}/master/master-config.yaml"
+    yaml_key: 'masterClients.openshiftLoopbackClientConnectionOverrides.ops'
+    yaml_value: 300

+ 21 - 0
playbooks/common/openshift-cluster/upgrades/v3_3/node_config_upgrade.yml

@@ -0,0 +1,21 @@
+---
+- modify_yaml:
+    dest: "{{ openshift.common.config_base}}/node/node-config.yaml"
+    yaml_key: 'masterClientConnectionOverrides.acceptContentTypes'
+    yaml_value: 'application/vnd.kubernetes.protobuf,application/json'
+
+- modify_yaml:
+    dest: "{{ openshift.common.config_base}}/node/node-config.yaml"
+    yaml_key: 'masterClientConnectionOverrides.contentType'
+    yaml_value: 'application/vnd.kubernetes.protobuf'
+
+- modify_yaml:
+    dest: "{{ openshift.common.config_base}}/node/node-config.yaml"
+    yaml_key: 'masterClientConnectionOverrides.burst'
+    yaml_value: 40
+
+- modify_yaml:
+    dest: "{{ openshift.common.config_base}}/node/node-config.yaml"
+    yaml_key: 'masterClientConnectionOverrides.ops'
+    yaml_value: 20
+

+ 4 - 4
roles/openshift_master/tasks/systemd_units.yml

@@ -16,7 +16,7 @@
 # workaround for missing systemd unit files
 # workaround for missing systemd unit files
 - name: Create the systemd unit files
 - name: Create the systemd unit files
   template:
   template:
-    src: "docker/master.docker.service.j2"
+    src: "master_docker/master.docker.service.j2"
     dest: "{{ containerized_svc_dir }}/{{ openshift.common.service_type }}-master.service"
     dest: "{{ containerized_svc_dir }}/{{ openshift.common.service_type }}-master.service"
   when: openshift.common.is_containerized | bool and (openshift.master.ha is not defined or not openshift.master.ha | bool)
   when: openshift.common.is_containerized | bool and (openshift.master.ha is not defined or not openshift.master.ha | bool)
   register: create_master_unit_file
   register: create_master_unit_file
@@ -84,12 +84,12 @@
     line: "{{ item }}"
     line: "{{ item }}"
   with_items: "{{ master_controllers_proxy.stdout_lines | default([]) }}"
   with_items: "{{ master_controllers_proxy.stdout_lines | default([]) }}"
   when: openshift.master.ha is defined and openshift.master.ha | bool and openshift_master_cluster_method == "native"
   when: openshift.master.ha is defined and openshift.master.ha | bool and openshift_master_cluster_method == "native"
-        and master_controllers_proxy.rc == 0 and 'http_proxy' not in openshift.common and 'https_proxy' not in openshift.common 
+        and master_controllers_proxy.rc == 0 and 'http_proxy' not in openshift.common and 'https_proxy' not in openshift.common
 
 
 - name: Install Master docker service file
 - name: Install Master docker service file
   template:
   template:
     dest: "/etc/systemd/system/{{ openshift.common.service_type }}-master.service"
     dest: "/etc/systemd/system/{{ openshift.common.service_type }}-master.service"
-    src: docker/master.docker.service.j2
+    src: master_docker/master.docker.service.j2
   register: install_result
   register: install_result
   when: openshift.common.is_containerized | bool and openshift.master.ha is defined and not openshift.master.ha | bool
   when: openshift.common.is_containerized | bool and openshift.master.ha is defined and not openshift.master.ha | bool
 
 
@@ -112,4 +112,4 @@
     dest: /etc/sysconfig/{{ openshift.common.service_type }}-master
     dest: /etc/sysconfig/{{ openshift.common.service_type }}-master
     line: "{{ item }}"
     line: "{{ item }}"
   with_items: "{{ master_proxy.stdout_lines | default([]) }}"
   with_items: "{{ master_proxy.stdout_lines | default([]) }}"
-  when: master_proxy.rc == 0 and 'http_proxy' not in openshift.common and 'https_proxy' not in openshift.common
+  when: master_proxy.rc == 0 and 'http_proxy' not in openshift.common and 'https_proxy' not in openshift.common

+ 14 - 0
roles/openshift_master/templates/master.yaml.v1.j2

@@ -131,7 +131,21 @@ kubernetesMasterConfig:
 {% endif %}
 {% endif %}
 masterClients:
 masterClients:
 {# TODO: allow user to set externalKubernetesKubeConfig #}
 {# TODO: allow user to set externalKubernetesKubeConfig #}
+{% if openshift.common.version_gte_3_3_or_1_3 | bool %}
+  externalKubernetesClientConnectionOverrides:
+    acceptContentTypes: application/vnd.kubernetes.protobuf,application/json
+    contentType: application/vnd.kubernetes.protobuf
+    burst: 400
+    ops: 200
+{% endif %}
   externalKubernetesKubeConfig: ""
   externalKubernetesKubeConfig: ""
+{% if openshift.common.version_gte_3_3_or_1_3 | bool %}
+  openshiftLoopbackClientConnectionOverrides:
+    acceptContentTypes: application/vnd.kubernetes.protobuf,application/json
+    contentType: application/vnd.kubernetes.protobuf
+    burst: 600
+    ops: 300
+{% endif %}
   openshiftLoopbackKubeConfig: openshift-master.kubeconfig
   openshiftLoopbackKubeConfig: openshift-master.kubeconfig
 masterPublicURL: {{ openshift.master.public_api_url }}
 masterPublicURL: {{ openshift.master.public_api_url }}
 networkConfig:
 networkConfig:

roles/openshift_master/templates/docker/master.docker.service.j2 → roles/openshift_master/templates/master_docker/master.docker.service.j2


+ 7 - 0
roles/openshift_node/templates/node.yaml.v1.j2

@@ -12,6 +12,13 @@ imageConfig:
   latest: false
   latest: false
 kind: NodeConfig
 kind: NodeConfig
 kubeletArguments: {{ openshift.node.kubelet_args | default(None) | to_padded_yaml(level=1) }}
 kubeletArguments: {{ openshift.node.kubelet_args | default(None) | to_padded_yaml(level=1) }}
+{% if openshift.common.version_gte_3_3_or_1_3 | bool %}
+masterClientConnectionOverrides:
+  acceptContentTypes: application/vnd.kubernetes.protobuf,application/json
+  contentType: application/vnd.kubernetes.protobuf
+  burst: 40
+  ops: 20
+{% endif %}
 masterKubeConfig: system:node:{{ openshift.common.hostname }}.kubeconfig
 masterKubeConfig: system:node:{{ openshift.common.hostname }}.kubeconfig
 {% if openshift.common.use_openshift_sdn | bool and not openshift.common.version_gte_3_3_or_1_3 | bool %}
 {% if openshift.common.use_openshift_sdn | bool and not openshift.common.version_gte_3_3_or_1_3 | bool %}
 networkPluginName: {{ openshift.common.sdn_network_plugin_name }}
 networkPluginName: {{ openshift.common.sdn_network_plugin_name }}

+ 37 - 0
test/modify_yaml_tests.py

@@ -0,0 +1,37 @@
+""" Tests for the modify_yaml Ansible module. """
+# pylint: disable=missing-docstring,invalid-name
+
+import os
+import sys
+import unittest
+
+sys.path = [os.path.abspath(os.path.dirname(__file__) + "/../library/")] + sys.path
+
+# pylint: disable=import-error
+from modify_yaml import set_key
+
+class ModifyYamlTests(unittest.TestCase):
+
+    def test_simple_nested_value(self):
+        cfg = {"section": {"a": 1, "b": 2}}
+        changes = set_key(cfg, 'section.c', 3)
+        self.assertEquals(1, len(changes))
+        self.assertEquals(3, cfg['section']['c'])
+
+    # Tests a previous bug where property would land in section above where it should,
+    # if the destination section did not yet exist:
+    def test_nested_property_in_new_section(self):
+        cfg = {
+            "masterClients": {
+                "externalKubernetesKubeConfig": "",
+                "openshiftLoopbackKubeConfig": "openshift-master.kubeconfig",
+            },
+        }
+
+        yaml_key = 'masterClients.externalKubernetesClientConnectionOverrides.acceptContentTypes'
+        yaml_value = 'application/vnd.kubernetes.protobuf,application/json'
+        set_key(cfg, yaml_key, yaml_value)
+        self.assertEquals(yaml_value, cfg['masterClients']
+                          ['externalKubernetesClientConnectionOverrides']
+                          ['acceptContentTypes'])
+