embedded2external.yml 5.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172
  1. ---
  2. - name: Pre-migrate checks
  3. hosts: localhost
  4. tasks:
  5. # Check there is only one etcd host
  6. - assert:
  7. that: groups.oo_etcd_to_config | default([]) | length == 1
  8. msg: "[etcd] group must contain only one host"
  9. # Check there is only one master
  10. - assert:
  11. that: groups.oo_masters_to_config | default([]) | length == 1
  12. msg: "[master] group must contain only one host"
  13. # 1. stop a master
  14. - name: Prepare masters for etcd data migration
  15. hosts: oo_first_master
  16. roles:
  17. - role: openshift_facts
  18. tasks:
  19. - name: Check the master API is ready
  20. include_role:
  21. name: openshift_master
  22. tasks_from: check_master_api_is_ready
  23. - set_fact:
  24. master_service: "{{ openshift.common.service_type + '-master' }}"
  25. embedded_etcd_backup_suffix: "{{ lookup('pipe', 'date +%Y%m%d%H%M%S') }}"
  26. - debug:
  27. msg: "master service name: {{ master_service }}"
  28. - name: Stop master
  29. service:
  30. name: "{{ master_service }}"
  31. state: stopped
  32. # 2. backup embedded etcd
  33. # Can't use with_items with include_role: https://github.com/ansible/ansible/issues/21285
  34. - include_role:
  35. name: etcd
  36. tasks_from: backup
  37. vars:
  38. r_etcd_common_etcd_runtime: "{{ openshift.common.etcd_runtime }}"
  39. r_etcd_common_backup_tag: pre-migrate
  40. r_etcd_common_embedded_etcd: "{{ true }}"
  41. r_etcd_common_backup_sufix_name: "{{ embedded_etcd_backup_suffix }}"
  42. - include_role:
  43. name: etcd
  44. tasks_from: backup.archive
  45. vars:
  46. r_etcd_common_etcd_runtime: "{{ openshift.common.etcd_runtime }}"
  47. r_etcd_common_backup_tag: pre-migrate
  48. r_etcd_common_embedded_etcd: "{{ true }}"
  49. r_etcd_common_backup_sufix_name: "{{ embedded_etcd_backup_suffix }}"
  50. # 3. deploy certificates (for etcd and master)
  51. - include: ca.yml
  52. - include: server_certificates.yml
  53. - name: Backup etcd client certificates for master host
  54. hosts: oo_first_master
  55. tasks:
  56. - include_role:
  57. name: etcd
  58. tasks_from: backup_master_etcd_certificates
  59. - name: Redeploy master etcd certificates
  60. include: master_etcd_certificates.yml
  61. vars:
  62. etcd_certificates_redeploy: "{{ true }}"
  63. # 4. deploy external etcd
  64. - include: ../openshift-etcd/config.yml
  65. # 5. stop external etcd
  66. - name: Cleanse etcd
  67. hosts: oo_etcd_to_config[0]
  68. gather_facts: no
  69. pre_tasks:
  70. - include_role:
  71. name: etcd
  72. tasks_from: disable_etcd
  73. vars:
  74. r_etcd_common_etcd_runtime: "{{ openshift.common.etcd_runtime }}"
  75. - include_role:
  76. name: etcd
  77. tasks_from: clean_data
  78. vars:
  79. r_etcd_common_etcd_runtime: "{{ openshift.common.etcd_runtime }}"
  80. # 6. copy the embedded etcd backup to the external host
  81. # TODO(jchaloup): if the etcd and first master are on the same host, just copy the directory
  82. - name: Copy embedded etcd backup to the external host
  83. hosts: localhost
  84. tasks:
  85. - name: Create local temp directory for syncing etcd backup
  86. local_action: command mktemp -d /tmp/etcd_backup-XXXXXXX
  87. register: g_etcd_client_mktemp
  88. changed_when: False
  89. become: no
  90. - include_role:
  91. name: etcd
  92. tasks_from: backup.fetch
  93. vars:
  94. r_etcd_common_etcd_runtime: "{{ hostvars[groups.oo_first_master.0].openshift.common.etcd_runtime }}"
  95. etcd_backup_sync_directory: "{{ g_etcd_client_mktemp.stdout }}"
  96. r_etcd_common_backup_tag: pre-migrate
  97. r_etcd_common_embedded_etcd: "{{ true }}"
  98. r_etcd_common_backup_sufix_name: "{{ hostvars[groups.oo_first_master.0].embedded_etcd_backup_suffix }}"
  99. delegate_to: "{{ groups.oo_first_master[0] }}"
  100. - include_role:
  101. name: etcd
  102. tasks_from: backup.copy
  103. vars:
  104. r_etcd_common_etcd_runtime: "{{ hostvars[groups.oo_etcd_to_config.0].openshift.common.etcd_runtime }}"
  105. etcd_backup_sync_directory: "{{ g_etcd_client_mktemp.stdout }}"
  106. r_etcd_common_backup_tag: pre-migrate
  107. r_etcd_common_backup_sufix_name: "{{ hostvars[groups.oo_first_master.0].embedded_etcd_backup_suffix }}"
  108. delegate_to: "{{ groups.oo_etcd_to_config[0] }}"
  109. - debug:
  110. msg: "etcd_backup_dest_directory: {{ g_etcd_client_mktemp.stdout }}"
  111. - name: Delete temporary directory
  112. local_action: file path="{{ g_etcd_client_mktemp.stdout }}" state=absent
  113. changed_when: False
  114. become: no
  115. # 7. force new cluster from the backup
  116. - name: Force new etcd cluster
  117. hosts: oo_etcd_to_config[0]
  118. tasks:
  119. - include_role:
  120. name: etcd
  121. tasks_from: backup.unarchive
  122. vars:
  123. r_etcd_common_etcd_runtime: "{{ openshift.common.etcd_runtime }}"
  124. r_etcd_common_backup_tag: pre-migrate
  125. r_etcd_common_backup_sufix_name: "{{ hostvars[groups.oo_first_master.0].embedded_etcd_backup_suffix }}"
  126. - include_role:
  127. name: etcd
  128. tasks_from: backup.force_new_cluster
  129. vars:
  130. r_etcd_common_etcd_runtime: "{{ openshift.common.etcd_runtime }}"
  131. r_etcd_common_backup_tag: pre-migrate
  132. r_etcd_common_backup_sufix_name: "{{ hostvars[groups.oo_first_master.0].embedded_etcd_backup_suffix }}"
  133. etcd_peer: "{{ openshift.common.ip }}"
  134. etcd_url_scheme: "https"
  135. etcd_peer_url_scheme: "https"
  136. # 8. re-configure master to use the external etcd
  137. - name: Configure master to use external etcd
  138. hosts: oo_first_master
  139. tasks:
  140. - include_role:
  141. name: openshift_master
  142. tasks_from: configure_external_etcd
  143. vars:
  144. etcd_peer_url_scheme: "https"
  145. etcd_ip: "{{ hostvars[groups.oo_etcd_to_config.0].openshift.common.ip }}"
  146. etcd_peer_port: 2379
  147. # 9. start the master
  148. - name: Start master
  149. service:
  150. name: "{{ master_service }}"
  151. state: started
  152. register: service_status
  153. until: service_status.state is defined and service_status.state == "started"
  154. retries: 5
  155. delay: 10