upgrade.yml 8.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201
  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: Backup etcd
  10. hosts: masters
  11. vars:
  12. embedded_etcd: "{{ openshift.master.embedded_etcd }}"
  13. timestamp: "{{ lookup('pipe', 'date +%Y%m%d%H%M%S') }}"
  14. roles:
  15. - openshift_facts
  16. tasks:
  17. - stat: path=/var/lib/openshift
  18. register: var_lib_openshift
  19. - name: Create origin symlink if necessary
  20. file: src=/var/lib/openshift/ dest=/var/lib/origin state=link
  21. when: var_lib_openshift.stat.exists == True
  22. - name: Check available disk space for etcd backup
  23. # We assume to be using the data dir for all backups.
  24. shell: >
  25. df --output=avail -k {{ openshift.common.data_dir }} | tail -n 1
  26. register: avail_disk
  27. - name: Check current embedded etcd disk usage
  28. shell: >
  29. du -k {{ openshift.master.etcd_data_dir }} | tail -n 1 | cut -f1
  30. register: etcd_disk_usage
  31. when: embedded_etcd | bool
  32. - name: Abort if insufficient disk space for etcd backup
  33. fail: msg="{{ etcd_disk_usage.stdout }} Kb disk space required for etcd backup, {{ avail_disk.stdout }} Kb available."
  34. when: (embedded_etcd | bool) and (etcd_disk_usage.stdout|int > avail_disk.stdout|int)
  35. - name: Install etcd (for etcdctl)
  36. yum: pkg=etcd state=latest
  37. - name: Generate etcd backup
  38. command: etcdctl backup --data-dir={{ openshift.master.etcd_data_dir }} --backup-dir={{ openshift.common.data_dir }}/etcd-backup-{{ timestamp }}
  39. - name: Upgrade base package on masters
  40. hosts: masters
  41. roles:
  42. - openshift_facts
  43. vars:
  44. openshift_version: "{{ openshift_pkg_version | default('') }}"
  45. tasks:
  46. - name: Upgrade base package
  47. yum: pkg={{ openshift.common.service_type }}{{ openshift_version }} state=latest
  48. #- name: Re-Run cluster configuration to apply latest configuration changes
  49. # include: ../../common/openshift-cluster/config.yml
  50. # vars:
  51. # g_etcd_group: "{{ 'etcd' }}"
  52. # g_masters_group: "{{ 'masters' }}"
  53. # g_nodes_group: "{{ 'nodes' }}"
  54. # openshift_cluster_id: "{{ cluster_id | default('default') }}"
  55. # openshift_deployment_type: "{{ deployment_type }}"
  56. - name: Upgrade masters
  57. hosts: masters
  58. vars:
  59. openshift_version: "{{ openshift_pkg_version | default('') }}"
  60. tasks:
  61. - name: Upgrade to latest available kernel
  62. yum: pkg=kernel state=latest
  63. - name: Upgrade master packages
  64. yum: pkg={{ openshift.common.service_type }}-master{{ openshift_version }} state=latest
  65. - name: Upgrade master configuration.
  66. openshift_upgrade_config: from_version=3.0 to_version=3.1 role=master
  67. - name: Restart master services
  68. service: name="{{ openshift.common.service_type}}-master" state=restarted
  69. - name: Upgrade nodes
  70. hosts: nodes
  71. vars:
  72. openshift_version: "{{ openshift_pkg_version | default('') }}"
  73. roles:
  74. - openshift_facts
  75. tasks:
  76. - name: Upgrade node packages
  77. yum: pkg={{ openshift.common.service_type }}-node{{ openshift_version }} state=latest
  78. - name: Restart node services
  79. service: name="{{ openshift.common.service_type }}-node" state=restarted
  80. - name: Evaluate oo_first_master
  81. hosts: localhost
  82. vars:
  83. g_masters_group: "{{ 'masters' }}"
  84. tasks:
  85. - name: display all variables set for the current host
  86. debug:
  87. var: hostvars[inventory_hostname]
  88. - name: Evaluate oo_first_master
  89. add_host:
  90. name: "{{ groups[g_masters_group][0] }}"
  91. groups: oo_first_master
  92. ansible_ssh_user: "{{ g_ssh_user | default(omit) }}"
  93. ansible_sudo: "{{ g_sudo | default(omit) }}"
  94. when: g_masters_group in groups and (groups[g_masters_group] | length) > 0
  95. - name: Determine new master version
  96. hosts: oo_first_master
  97. tasks:
  98. - name: Determine new version
  99. command: >
  100. rpm -q --queryformat '%{version}' {{ openshift.common.service_type }}-master
  101. register: _new_version
  102. - name: Ensure AOS 3.0.2 or Origin 1.0.6
  103. hosts: oo_first_master
  104. tasks:
  105. fail: This playbook requires Origin 1.0.6 or Atomic OpenShift 3.0.2 or later
  106. 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','<') )
  107. - name: Update cluster policy
  108. hosts: oo_first_master
  109. tasks:
  110. - name: oadm policy reconcile-cluster-roles --confirm
  111. command: >
  112. {{ openshift.common.admin_binary}} --config={{ openshift.common.config_base }}/master/admin.kubeconfig
  113. policy reconcile-cluster-roles --confirm
  114. - name: Update cluster policy bindings
  115. hosts: oo_first_master
  116. tasks:
  117. - name: oadm policy reconcile-cluster-role-bindings --confirm
  118. command: >
  119. {{ openshift.common.admin_binary}} --config={{ openshift.common.config_base }}/master/admin.kubeconfig
  120. policy reconcile-cluster-role-bindings
  121. --exclude-groups=system:authenticated
  122. --exclude-groups=system:unauthenticated
  123. --exclude-users=system:anonymous
  124. --additive-only=true --confirm
  125. 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','>')
  126. - name: Upgrade default router
  127. hosts: oo_first_master
  128. vars:
  129. - router_image: "{{ openshift.master.registry_url | replace( '${component}', 'haproxy-router' ) | replace ( '${version}', 'v' + _new_version.stdout ) }}"
  130. - oc_cmd: "{{ openshift.common.client_binary }} --config={{ openshift.common.config_base }}/master/admin.kubeconfig"
  131. tasks:
  132. - name: Check for default router
  133. command: >
  134. {{ oc_cmd }} get -n default dc/router
  135. register: _default_router
  136. failed_when: false
  137. changed_when: false
  138. - name: Check for allowHostNetwork and allowHostPorts
  139. when: _default_router.rc == 0
  140. shell: >
  141. {{ oc_cmd }} get -o yaml scc/privileged | /usr/bin/grep -e allowHostPorts -e allowHostNetwork
  142. register: _scc
  143. - name: Grant allowHostNetwork and allowHostPorts
  144. when:
  145. - _default_router.rc == 0
  146. - "'false' in _scc.stdout"
  147. command: >
  148. {{ oc_cmd }} patch scc/privileged -p '{"allowHostPorts":true,"allowHostNetwork":true}' --loglevel=9
  149. - name: Update deployment config to 1.0.4/3.0.1 spec
  150. when: _default_router.rc == 0
  151. command: >
  152. {{ oc_cmd }} patch dc/router -p
  153. '{"spec":{"strategy":{"rollingParams":{"updatePercent":-10},"spec":{"serviceAccount":"router","serviceAccountName":"router"}}}}'
  154. - name: Switch to hostNetwork=true
  155. when: _default_router.rc == 0
  156. command: >
  157. {{ oc_cmd }} patch dc/router -p '{"spec":{"template":{"spec":{"hostNetwork":true}}}}'
  158. - name: Update router image to current version
  159. when: _default_router.rc == 0
  160. command: >
  161. {{ oc_cmd }} patch dc/router -p
  162. '{"spec":{"template":{"spec":{"containers":[{"name":"router","image":"{{ router_image }}"}]}}}}'
  163. - name: Upgrade default
  164. hosts: oo_first_master
  165. vars:
  166. - registry_image: "{{ openshift.master.registry_url | replace( '${component}', 'docker-registry' ) | replace ( '${version}', 'v' + _new_version.stdout ) }}"
  167. - oc_cmd: "{{ openshift.common.client_binary }} --config={{ openshift.common.config_base }}/master/admin.kubeconfig"
  168. tasks:
  169. - name: Check for default registry
  170. command: >
  171. {{ oc_cmd }} get -n default dc/docker-registry
  172. register: _default_registry
  173. failed_when: false
  174. changed_when: false
  175. - name: Update registry image to current version
  176. when: _default_registry.rc == 0
  177. command: >
  178. {{ oc_cmd }} patch dc/docker-registry -p
  179. '{"spec":{"template":{"spec":{"containers":[{"name":"registry","image":"{{ registry_image }}"}]}}}}'
  180. - name: Update image streams and templates
  181. hosts: oo_first_master
  182. vars:
  183. openshift_examples_import_command: "update"
  184. openshift_deployment_type: "{{ deployment_type }}"
  185. roles:
  186. - openshift_examples