pre.yml 9.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235
  1. ---
  2. ###############################################################################
  3. # Evaluate host groups and gather facts
  4. ###############################################################################
  5. - name: Load openshift_facts
  6. hosts: oo_masters_to_config:oo_nodes_to_config:oo_etcd_to_config:oo_lb_to_config
  7. roles:
  8. - openshift_facts
  9. - name: Evaluate additional groups for upgrade
  10. hosts: localhost
  11. connection: local
  12. become: no
  13. tasks:
  14. - name: Evaluate etcd_hosts_to_backup
  15. add_host:
  16. name: "{{ item }}"
  17. groups: etcd_hosts_to_backup
  18. with_items: groups.oo_etcd_to_config if groups.oo_etcd_to_config is defined and groups.oo_etcd_to_config | length > 0 else groups.oo_first_master
  19. ###############################################################################
  20. # Pre-upgrade checks
  21. ###############################################################################
  22. - name: Verify upgrade can proceed
  23. hosts: oo_first_master
  24. vars:
  25. openshift_master_ha: "{{ groups.oo_masters_to_config | length > 1 }}"
  26. target_version: "{{ '1.2' if deployment_type == 'origin' else '3.1.1.900' }}"
  27. gather_facts: no
  28. tasks:
  29. - fail:
  30. msg: >
  31. This upgrade is only supported for atomic-enterprise, origin, openshift-enterprise, and online
  32. deployment types
  33. when: deployment_type not in ['atomic-enterprise', 'origin','openshift-enterprise', 'online']
  34. - fail:
  35. msg: >
  36. openshift_pkg_version is {{ openshift_pkg_version }} which is not a
  37. valid version for a {{ target_version }} upgrade
  38. when: openshift_pkg_version is defined and openshift_pkg_version.split('-',1).1 | version_compare(target_version ,'<')
  39. - name: Verify upgrade can proceed
  40. hosts: oo_masters_to_config:oo_nodes_to_config
  41. vars:
  42. target_version: "{{ '1.2' if deployment_type == 'origin' else '3.1.1.900' }}"
  43. roles:
  44. - openshift_cli
  45. tasks:
  46. - name: Clean package cache
  47. command: "{{ ansible_pkg_mgr }} clean all"
  48. - set_fact:
  49. g_new_service_name: "{{ 'origin' if deployment_type =='origin' else 'atomic-openshift' }}"
  50. when: not openshift.common.is_containerized | bool
  51. - name: Determine available versions
  52. script: ../files/rpm_versions.sh {{ g_new_service_name }}
  53. register: g_versions_result
  54. when: not openshift.common.is_containerized | bool
  55. - name: Determine available versions
  56. script: ../files/openshift_container_versions.sh {{ openshift.common.service_type }}
  57. register: g_versions_result
  58. when: openshift.common.is_containerized | bool
  59. - set_fact:
  60. g_aos_versions: "{{ g_versions_result.stdout | from_yaml }}"
  61. - set_fact:
  62. g_new_version: "{{ g_aos_versions.curr_version.split('-', 1).0 if g_aos_versions.avail_version is none else g_aos_versions.avail_version.split('-', 1).0 }}"
  63. when: openshift_pkg_version is not defined
  64. - fail:
  65. msg: Verifying the correct version was found
  66. when: verify_upgrade_version is defined and g_new_version != verify_upgrade_version
  67. - set_fact:
  68. g_new_version: "{{ openshift_pkg_version | replace('-','') }}"
  69. when: openshift_pkg_version is defined
  70. - name: Update systemd units
  71. script: ../files/ensure_system_units_have_version.sh {{ openshift.common.service_type }} {{ openshift.common.deployment_type }} {{ g_aos_versions.curr_version }}
  72. when: openshift.common.is_containerized | bool
  73. # Note: the version number is hardcoded here in hopes of catching potential
  74. # bugs in how g_aos_versions.curr_version is set
  75. - name: Verifying the correct version is installed for upgrade
  76. shell: grep 3.1.1.6 {{ item }}
  77. with_items:
  78. - /etc/sysconfig/openvswitch
  79. - /etc/sysconfig/{{ openshift.common.service_type }}*
  80. when: verify_upgrade_version is defined
  81. - fail:
  82. msg: This playbook requires Origin 1.1 or later
  83. when: deployment_type == 'origin' and g_aos_versions.curr_version | version_compare('1.1','<')
  84. - fail:
  85. msg: This playbook requires Atomic Enterprise Platform/OpenShift Enterprise 3.1 or later
  86. when: deployment_type == 'atomic-openshift' and g_aos_versions.curr_version | version_compare('3.1','<')
  87. # TODO: this may only make sense for RPM installs. We probably need another check for containerized installs.
  88. - fail:
  89. msg: Upgrade packages not found
  90. when: (g_aos_versions.avail_version | default(g_aos_versions.curr_version, true) | version_compare(target_version, '<'))
  91. - name: Determine available Docker
  92. script: ../files/rpm_versions.sh docker
  93. register: g_docker_version_result
  94. when: not openshift.common.is_atomic | bool
  95. - name: Determine available Docker
  96. shell: "rpm -q --queryformat '---\ncurr_version: %{VERSION}\navail_version: \n' docker"
  97. register: g_atomic_docker_version_result
  98. when: openshift.common.is_atomic | bool
  99. - set_fact:
  100. g_docker_version: "{{ g_docker_version_result.stdout | from_yaml }}"
  101. when: not openshift.common.is_atomic | bool
  102. - set_fact:
  103. g_docker_version: "{{ g_atomic_docker_version_result.stdout | from_yaml }}"
  104. when: openshift.common.is_atomic | bool
  105. - fail:
  106. msg: This playbook requires access to Docker 1.9 or later
  107. when: not openshift.common.is_atomic | bool
  108. and (g_docker_version.avail_version | default(g_docker_version.curr_version, true) | version_compare('1.9','<'))
  109. # TODO: add check to upgrade ostree to get latest Docker
  110. - set_fact:
  111. pre_upgrade_complete: True
  112. ##############################################################################
  113. # Gate on pre-upgrade checks
  114. ##############################################################################
  115. - name: Gate on pre-upgrade checks
  116. hosts: localhost
  117. connection: local
  118. become: no
  119. vars:
  120. pre_upgrade_hosts: "{{ groups.oo_masters_to_config | union(groups.oo_nodes_to_config) }}"
  121. tasks:
  122. - set_fact:
  123. pre_upgrade_completed: "{{ hostvars
  124. | oo_select_keys(pre_upgrade_hosts)
  125. | oo_collect('inventory_hostname', {'pre_upgrade_complete': true}) }}"
  126. - set_fact:
  127. pre_upgrade_failed: "{{ pre_upgrade_hosts | difference(pre_upgrade_completed) }}"
  128. - fail:
  129. msg: "Upgrade cannot continue. The following hosts did not complete pre-upgrade checks: {{ pre_upgrade_failed | join(',') }}"
  130. when: pre_upgrade_failed | length > 0
  131. ###############################################################################
  132. # Backup etcd
  133. ###############################################################################
  134. - name: Backup etcd
  135. hosts: etcd_hosts_to_backup
  136. vars:
  137. embedded_etcd: "{{ openshift.master.embedded_etcd }}"
  138. timestamp: "{{ lookup('pipe', 'date +%Y%m%d%H%M%S') }}"
  139. roles:
  140. - openshift_facts
  141. tasks:
  142. # Ensure we persist the etcd role for this host in openshift_facts
  143. - openshift_facts:
  144. role: etcd
  145. local_facts: {}
  146. when: "'etcd' not in openshift"
  147. - stat: path=/var/lib/openshift
  148. register: var_lib_openshift
  149. - stat: path=/var/lib/origin
  150. register: var_lib_origin
  151. - name: Create origin symlink if necessary
  152. file: src=/var/lib/openshift/ dest=/var/lib/origin state=link
  153. when: var_lib_openshift.stat.exists == True and var_lib_origin.stat.exists == False
  154. # TODO: replace shell module with command and update later checks
  155. # We assume to be using the data dir for all backups.
  156. - name: Check available disk space for etcd backup
  157. shell: df --output=avail -k {{ openshift.common.data_dir }} | tail -n 1
  158. register: avail_disk
  159. # TODO: replace shell module with command and update later checks
  160. - name: Check current embedded etcd disk usage
  161. shell: du -k {{ openshift.etcd.etcd_data_dir }} | tail -n 1 | cut -f1
  162. register: etcd_disk_usage
  163. when: embedded_etcd | bool
  164. - name: Abort if insufficient disk space for etcd backup
  165. fail:
  166. msg: >
  167. {{ etcd_disk_usage.stdout }} Kb disk space required for etcd backup,
  168. {{ avail_disk.stdout }} Kb available.
  169. when: (embedded_etcd | bool) and (etcd_disk_usage.stdout|int > avail_disk.stdout|int)
  170. - name: Install etcd (for etcdctl)
  171. action: "{{ ansible_pkg_mgr }} name=etcd state=latest"
  172. - name: Generate etcd backup
  173. command: >
  174. etcdctl backup --data-dir={{ openshift.etcd.etcd_data_dir }}
  175. --backup-dir={{ openshift.common.data_dir }}/etcd-backup-{{ timestamp }}
  176. - set_fact:
  177. etcd_backup_complete: True
  178. - name: Display location of etcd backup
  179. debug:
  180. msg: "Etcd backup created in {{ openshift.common.data_dir }}/etcd-backup-{{ timestamp }}"
  181. ##############################################################################
  182. # Gate on etcd backup
  183. ##############################################################################
  184. - name: Gate on etcd backup
  185. hosts: localhost
  186. connection: local
  187. become: no
  188. tasks:
  189. - set_fact:
  190. etcd_backup_completed: "{{ hostvars
  191. | oo_select_keys(groups.etcd_hosts_to_backup)
  192. | oo_collect('inventory_hostname', {'etcd_backup_complete': true}) }}"
  193. - set_fact:
  194. etcd_backup_failed: "{{ groups.etcd_hosts_to_backup | difference(etcd_backup_completed) }}"
  195. - fail:
  196. msg: "Upgrade cannot continue. The following hosts did not complete etcd backup: {{ etcd_backup_failed | join(',') }}"
  197. when: etcd_backup_failed | length > 0