upgrade.yml 8.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199
  1. ---
  2. - name: Verify upgrade can proceed
  3. hosts: masters
  4. tasks:
  5. # Checking the global deployment type rather than host facts, this is about
  6. # what the user is requesting.
  7. - fail: msg="Deployment type enterprise not supported for upgrade"
  8. when: deployment_type == "enterprise"
  9. - name: Update deployment type
  10. hosts: OSEv3
  11. roles:
  12. - openshift_facts
  13. post_tasks: # technically tasks are run after roles, but post_tasks is a bit more explicit.
  14. - openshift_facts:
  15. role: common
  16. local_facts:
  17. deployment_type: "{{ deployment_type }}"
  18. - name: Backup etcd
  19. hosts: masters
  20. vars:
  21. embedded_etcd: "{{ openshift.master.embedded_etcd }}"
  22. timestamp: "{{ lookup('pipe', 'date +%Y%m%d%H%M%S') }}"
  23. roles:
  24. - openshift_facts
  25. tasks:
  26. - stat: path=/var/lib/openshift
  27. register: var_lib_openshift
  28. - name: Create origin symlink if necessary
  29. file: src=/var/lib/openshift/ dest=/var/lib/origin state=link
  30. when: var_lib_openshift.stat.exists == True
  31. - name: Check available disk space for etcd backup
  32. # We assume to be using the data dir for all backups.
  33. shell: >
  34. df --output=avail -k {{ openshift.common.data_dir }} | tail -n 1
  35. register: avail_disk
  36. - name: Check current embedded etcd disk usage
  37. shell: >
  38. du -k {{ openshift.master.etcd_data_dir }} | tail -n 1 | cut -f1
  39. register: etcd_disk_usage
  40. when: embedded_etcd | bool
  41. - name: Abort if insufficient disk space for etcd backup
  42. fail: msg="{{ etcd_disk_usage.stdout }} Kb disk space required for etcd backup, {{ avail_disk.stdout }} Kb available."
  43. when: (embedded_etcd | bool) and (etcd_disk_usage.stdout|int > avail_disk.stdout|int)
  44. - name: Install etcd (for etcdctl)
  45. yum: pkg=etcd state=latest
  46. - name: Generate etcd backup
  47. command: etcdctl backup --data-dir={{ openshift.master.etcd_data_dir }} --backup-dir={{ openshift.common.data_dir }}/etcd-backup-{{ timestamp }}
  48. - name: Display location of etcd backup
  49. debug: msg="Etcd backup created in {{ openshift.common.data_dir }}/etcd-backup-{{ timestamp }}"
  50. - name: Perform upgrade version checking
  51. hosts: masters[0]
  52. tasks:
  53. - name: Determine available version
  54. shell: >
  55. yum list available {{ openshift.common.service_type }} | tail -n 1 | cut -f 2 -d " " | cut -f 1 -d "-"
  56. register: _new_version
  57. - debug: var=_new_version
  58. # The above check will return nothing if the package is already installed,
  59. # and we may be re-running upgrade due to a failure.
  60. - name: Determine installed version
  61. command: >
  62. rpm -q --queryformat '%{version}' {{ openshift.common.service_type }}
  63. register: _new_version
  64. when: _new_version.stdout == ""
  65. # Fail if we still don't know:
  66. - debug: var=_new_version
  67. - name: Verify upgrade version
  68. fail: Unable to determine upgrade version for {{ openshift.common.service_type }}
  69. when: _new_version.stdout == ""
  70. - name: Ensure AOS 3.0.2 or Origin 1.0.6
  71. hosts: masters[0]
  72. tasks:
  73. fail: This playbook requires Origin 1.0.6 or Atomic OpenShift 3.0.2 or later
  74. when: _new_version.stdout | version_compare('1.0.6','<') or ( _new_version.stdout | version_compare('3.0','>=' and _new_version.stdout | version_compare('3.0.2','<') )
  75. - name: Verify upgrade can proceed
  76. hosts: masters[0]
  77. tasks:
  78. # Checking the global deployment type rather than host facts, this is about
  79. # what the user is requesting.
  80. - fail: msg="Deployment type 'enterprise' must be updated to 'openshift-enterprise' for upgrade to proceed"
  81. when: deployment_type == "enterprise" and (_new_version.stdout | version_compare('1.0.7', '>=') or _new_version.stdout | version_compare('3.1', '>='))
  82. - name: Upgrade masters
  83. hosts: masters
  84. vars:
  85. openshift_version: "{{ openshift_pkg_version | default('') }}"
  86. tasks:
  87. - name: Upgrade to latest available kernel
  88. yum: pkg=kernel state=latest
  89. - name: Upgrade master packages
  90. command: yum update -y {{ openshift.common.service_type }}-master{{ openshift_version }}
  91. - name: Upgrade master configuration.
  92. openshift_upgrade_config: from_version=3.0 to_version=3.1 role=master config_base={{ hostvars[inventory_hostname].openshift.common.config_base }}
  93. - name: Restart master services
  94. service: name="{{ openshift.common.service_type}}-master" state=restarted
  95. - name: Upgrade nodes
  96. hosts: nodes
  97. vars:
  98. openshift_version: "{{ openshift_pkg_version | default('') }}"
  99. roles:
  100. - openshift_facts
  101. tasks:
  102. - name: Upgrade node packages
  103. command: yum update -y {{ openshift.common.service_type }}-node{{ openshift_version }}
  104. - name: Restart node services
  105. service: name="{{ openshift.common.service_type }}-node" state=restarted
  106. - name: Update cluster policy
  107. hosts: masters[0]
  108. tasks:
  109. - name: oadm policy reconcile-cluster-roles --confirm
  110. command: >
  111. {{ openshift.common.admin_binary}} --config={{ openshift.common.config_base }}/master/admin.kubeconfig
  112. policy reconcile-cluster-roles --confirm
  113. - name: Update cluster policy bindings
  114. hosts: masters[0]
  115. tasks:
  116. - name: oadm policy reconcile-cluster-role-bindings --confirm
  117. command: >
  118. {{ openshift.common.admin_binary}} --config={{ openshift.common.config_base }}/master/admin.kubeconfig
  119. policy reconcile-cluster-role-bindings
  120. --exclude-groups=system:authenticated
  121. --exclude-groups=system:unauthenticated
  122. --exclude-users=system:anonymous
  123. --additive-only=true --confirm
  124. when: ( _new_version.stdout | version_compare('1.0.6', '>') and _new_version.stdout | version_compare('3.0','<') ) or _new_version.stdout | version_compare('3.0.2','>')
  125. - name: Upgrade default router
  126. hosts: masters[0]
  127. vars:
  128. - router_image: "{{ openshift.master.registry_url | replace( '${component}', 'haproxy-router' ) | replace ( '${version}', 'v' + _new_version.stdout ) }}"
  129. - oc_cmd: "{{ openshift.common.client_binary }} --config={{ openshift.common.config_base }}/master/admin.kubeconfig"
  130. tasks:
  131. - name: Check for default router
  132. command: >
  133. {{ oc_cmd }} get -n default dc/router
  134. register: _default_router
  135. failed_when: false
  136. changed_when: false
  137. - name: Check for allowHostNetwork and allowHostPorts
  138. when: _default_router.rc == 0
  139. shell: >
  140. {{ oc_cmd }} get -o yaml scc/privileged | /usr/bin/grep -e allowHostPorts -e allowHostNetwork
  141. register: _scc
  142. - name: Grant allowHostNetwork and allowHostPorts
  143. when:
  144. - _default_router.rc == 0
  145. - "'false' in _scc.stdout"
  146. command: >
  147. {{ oc_cmd }} patch scc/privileged -p '{"allowHostPorts":true,"allowHostNetwork":true}' --loglevel=9
  148. - name: Update deployment config to 1.0.4/3.0.1 spec
  149. when: _default_router.rc == 0
  150. command: >
  151. {{ oc_cmd }} patch dc/router -p
  152. '{"spec":{"strategy":{"rollingParams":{"updatePercent":-10},"spec":{"serviceAccount":"router","serviceAccountName":"router"}}}}'
  153. - name: Switch to hostNetwork=true
  154. when: _default_router.rc == 0
  155. command: >
  156. {{ oc_cmd }} patch dc/router -p '{"spec":{"template":{"spec":{"hostNetwork":true}}}}'
  157. - name: Update router image to current version
  158. when: _default_router.rc == 0
  159. command: >
  160. {{ oc_cmd }} patch dc/router -p
  161. '{"spec":{"template":{"spec":{"containers":[{"name":"router","image":"{{ router_image }}"}]}}}}'
  162. - name: Upgrade default
  163. hosts: masters[0]
  164. vars:
  165. - registry_image: "{{ openshift.master.registry_url | replace( '${component}', 'docker-registry' ) | replace ( '${version}', 'v' + _new_version.stdout ) }}"
  166. - oc_cmd: "{{ openshift.common.client_binary }} --config={{ openshift.common.config_base }}/master/admin.kubeconfig"
  167. tasks:
  168. - name: Check for default registry
  169. command: >
  170. {{ oc_cmd }} get -n default dc/docker-registry
  171. register: _default_registry
  172. failed_when: false
  173. changed_when: false
  174. - name: Update registry image to current version
  175. when: _default_registry.rc == 0
  176. command: >
  177. {{ oc_cmd }} patch dc/docker-registry -p
  178. '{"spec":{"template":{"spec":{"containers":[{"name":"registry","image":"{{ registry_image }}"}]}}}}'
  179. - name: Update image streams and templates
  180. hosts: masters[0]
  181. vars:
  182. openshift_examples_import_command: "update"
  183. openshift_deployment_type: "{{ deployment_type }}"
  184. roles:
  185. - openshift_examples