upgrade.yml 7.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174
  1. ---
  2. ###############################################################################
  3. # The restart playbook should be run after this playbook completes.
  4. ###############################################################################
  5. ###############################################################################
  6. # Upgrade Masters
  7. ###############################################################################
  8. - name: Upgrade master
  9. hosts: oo_masters_to_config
  10. handlers:
  11. - include: ../../../../roles/openshift_master/handlers/main.yml
  12. static: yes
  13. roles:
  14. - openshift_facts
  15. tasks:
  16. - include: rpm_upgrade.yml component=master
  17. when: not openshift.common.is_containerized | bool
  18. - include: "{{ master_config_hook }}"
  19. when: master_config_hook is defined
  20. - include_vars: ../../../../roles/openshift_master/vars/main.yml
  21. - name: Update systemd units
  22. include: ../../../../roles/openshift_master/tasks/systemd_units.yml
  23. # - name: Upgrade master configuration
  24. # openshift_upgrade_config:
  25. # from_version: '3.1'
  26. # to_version: '3.2'
  27. # role: master
  28. # config_base: "{{ hostvars[inventory_hostname].openshift.common.config_base }}"
  29. - name: Set master update status to complete
  30. hosts: oo_masters_to_config
  31. tasks:
  32. - set_fact:
  33. master_update_complete: True
  34. ##############################################################################
  35. # Gate on master update complete
  36. ##############################################################################
  37. - name: Gate on master update
  38. hosts: localhost
  39. connection: local
  40. become: no
  41. tasks:
  42. - set_fact:
  43. master_update_completed: "{{ hostvars
  44. | oo_select_keys(groups.oo_masters_to_config)
  45. | oo_collect('inventory_hostname', {'master_update_complete': true}) }}"
  46. - set_fact:
  47. master_update_failed: "{{ groups.oo_masters_to_config | difference(master_update_completed) }}"
  48. - fail:
  49. msg: "Upgrade cannot continue. The following masters did not finish updating: {{ master_update_failed | join(',') }}"
  50. when: master_update_failed | length > 0
  51. ###############################################################################
  52. # Upgrade Nodes
  53. ###############################################################################
  54. # Here we handle all tasks that might require a node evac. (upgrading docker, and the node service)
  55. - name: Perform upgrades that may require node evacuation
  56. hosts: oo_masters_to_config:oo_etcd_to_config:oo_nodes_to_config
  57. serial: 1
  58. any_errors_fatal: true
  59. roles:
  60. - openshift_facts
  61. handlers:
  62. - include: ../../../../roles/openshift_node/handlers/main.yml
  63. static: yes
  64. tasks:
  65. # TODO: To better handle re-trying failed upgrades, it would be nice to check if the node
  66. # or docker actually needs an upgrade before proceeding. Perhaps best to save this until
  67. # we merge upgrade functionality into the base roles and a normal config.yml playbook run.
  68. - name: Mark unschedulable if host is a node
  69. command: >
  70. {{ openshift.common.admin_binary }} manage-node {{ openshift.common.hostname | lower }} --schedulable=false
  71. delegate_to: "{{ groups.oo_first_master.0 }}"
  72. when: inventory_hostname in groups.oo_nodes_to_config
  73. - name: Evacuate Node for Kubelet upgrade
  74. command: >
  75. {{ openshift.common.admin_binary }} manage-node {{ openshift.common.hostname | lower }} --evacuate --force
  76. delegate_to: "{{ groups.oo_first_master.0 }}"
  77. when: inventory_hostname in groups.oo_nodes_to_config
  78. # Only check if docker upgrade is required if docker_upgrade is not
  79. # already set to False.
  80. - include: docker/upgrade_check.yml
  81. when: docker_upgrade is not defined or docker_upgrade | bool and not openshift.common.is_atomic | bool
  82. - include: docker/upgrade.yml
  83. when: l_docker_upgrade is defined and l_docker_upgrade | bool and not openshift.common.is_atomic | bool
  84. - include: "{{ node_config_hook }}"
  85. when: node_config_hook is defined
  86. - include: rpm_upgrade.yml
  87. vars:
  88. component: "node"
  89. openshift_version: "{{ openshift_pkg_version | default('') }}"
  90. when: inventory_hostname in groups.oo_nodes_to_config and not openshift.common.is_containerized | bool
  91. - include: containerized_node_upgrade.yml
  92. when: inventory_hostname in groups.oo_nodes_to_config and openshift.common.is_containerized | bool
  93. - name: Set node schedulability
  94. command: >
  95. {{ openshift.common.admin_binary }} manage-node {{ openshift.common.hostname | lower }} --schedulable=true
  96. delegate_to: "{{ groups.oo_first_master.0 }}"
  97. when: inventory_hostname in groups.oo_nodes_to_config and openshift.node.schedulable | bool
  98. ###############################################################################
  99. # Reconcile Cluster Roles, Cluster Role Bindings and Security Context Constraints
  100. ###############################################################################
  101. - name: Reconcile Cluster Roles and Cluster Role Bindings and Security Context Constraints
  102. hosts: oo_masters_to_config
  103. roles:
  104. - { role: openshift_cli }
  105. vars:
  106. origin_reconcile_bindings: "{{ deployment_type == 'origin' and openshift_version | version_compare('1.0.6', '>') }}"
  107. ent_reconcile_bindings: true
  108. openshift_docker_hosted_registry_network: "{{ hostvars[groups.oo_first_master.0].openshift.common.portal_net }}"
  109. tasks:
  110. - name: Verifying the correct commandline tools are available
  111. shell: grep {{ verify_upgrade_version }} {{ openshift.common.admin_binary}}
  112. when: openshift.common.is_containerized | bool and verify_upgrade_version is defined
  113. - name: Reconcile Cluster Roles
  114. command: >
  115. {{ openshift.common.admin_binary}} --config={{ openshift.common.config_base }}/master/admin.kubeconfig
  116. policy reconcile-cluster-roles --additive-only=true --confirm
  117. run_once: true
  118. - name: Reconcile Cluster Role Bindings
  119. command: >
  120. {{ openshift.common.admin_binary}} --config={{ openshift.common.config_base }}/master/admin.kubeconfig
  121. policy reconcile-cluster-role-bindings
  122. --exclude-groups=system:authenticated
  123. --exclude-groups=system:authenticated:oauth
  124. --exclude-groups=system:unauthenticated
  125. --exclude-users=system:anonymous
  126. --additive-only=true --confirm
  127. when: origin_reconcile_bindings | bool or ent_reconcile_bindings | bool
  128. run_once: true
  129. - name: Reconcile Security Context Constraints
  130. command: >
  131. {{ openshift.common.admin_binary}} policy reconcile-sccs --confirm --additive-only=true
  132. run_once: true
  133. - set_fact:
  134. reconcile_complete: True
  135. ##############################################################################
  136. # Gate on reconcile
  137. ##############################################################################
  138. - name: Gate on reconcile
  139. hosts: localhost
  140. connection: local
  141. become: no
  142. tasks:
  143. - set_fact:
  144. reconcile_completed: "{{ hostvars
  145. | oo_select_keys(groups.oo_masters_to_config)
  146. | oo_collect('inventory_hostname', {'reconcile_complete': true}) }}"
  147. - set_fact:
  148. reconcile_failed: "{{ groups.oo_masters_to_config | difference(reconcile_completed) }}"
  149. - fail:
  150. msg: "Upgrade cannot continue. The following masters did not finish reconciling: {{ reconcile_failed | join(',') }}"
  151. when: reconcile_failed | length > 0