migrate.yml 4.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147
  1. ---
  2. - name: Run pre-checks
  3. hosts: oo_etcd_to_migrate
  4. roles:
  5. - role: etcd_migrate
  6. r_etcd_migrate_action: check
  7. r_etcd_common_embedded_etcd: "{{ groups.oo_etcd_to_config | default([]) | length == 0 }}"
  8. etcd_peer: "{{ ansible_default_ipv4.address }}"
  9. # TODO: This will be different for release-3.6 branch
  10. - name: Prepare masters for etcd data migration
  11. hosts: oo_masters_to_config
  12. tasks:
  13. - set_fact:
  14. master_services:
  15. - "{{ openshift.common.service_type + '-master-controllers' }}"
  16. - "{{ openshift.common.service_type + '-master-api' }}"
  17. - debug:
  18. msg: "master service name: {{ master_services }}"
  19. - name: Stop masters
  20. service:
  21. name: "{{ item }}"
  22. state: stopped
  23. with_items: "{{ master_services }}"
  24. - name: Backup v2 data
  25. hosts: oo_etcd_to_migrate
  26. gather_facts: no
  27. roles:
  28. - role: openshift_facts
  29. - role: etcd_common
  30. r_etcd_common_action: backup
  31. r_etcd_common_etcd_runtime: "{{ openshift.common.etcd_runtime }}"
  32. r_etcd_common_backup_tag: pre-migration
  33. r_etcd_common_embedded_etcd: "{{ groups.oo_etcd_to_config | default([]) | length == 0 }}"
  34. r_etcd_common_backup_sufix_name: "{{ lookup('pipe', 'date +%Y%m%d%H%M%S') }}"
  35. - name: Gate on etcd backup
  36. hosts: localhost
  37. connection: local
  38. become: no
  39. tasks:
  40. - set_fact:
  41. etcd_backup_completed: "{{ hostvars
  42. | oo_select_keys(groups.oo_etcd_to_migrate)
  43. | oo_collect('inventory_hostname', {'r_etcd_common_backup_complete': true}) }}"
  44. - set_fact:
  45. etcd_backup_failed: "{{ groups.oo_etcd_to_migrate | difference(etcd_backup_completed) }}"
  46. - fail:
  47. msg: "Migration cannot continue. The following hosts did not complete etcd backup: {{ etcd_backup_failed | join(',') }}"
  48. when:
  49. - etcd_backup_failed | length > 0
  50. - name: Stop etcd
  51. hosts: oo_etcd_to_migrate
  52. gather_facts: no
  53. pre_tasks:
  54. - set_fact:
  55. l_etcd_service: "{{ 'etcd_container' if openshift.common.is_containerized else 'etcd' }}"
  56. - name: Disable etcd members
  57. service:
  58. name: "{{ l_etcd_service }}"
  59. state: stopped
  60. - name: Migrate data on first etcd
  61. hosts: oo_etcd_to_migrate[0]
  62. gather_facts: no
  63. roles:
  64. - role: etcd_migrate
  65. r_etcd_migrate_action: migrate
  66. r_etcd_common_embedded_etcd: "{{ groups.oo_etcd_to_config | default([]) | length == 0 }}"
  67. etcd_peer: "{{ openshift.common.ip }}"
  68. etcd_url_scheme: "https"
  69. etcd_peer_url_scheme: "https"
  70. - name: Clean data stores on remaining etcd hosts
  71. hosts: oo_etcd_to_migrate[1:]
  72. gather_facts: no
  73. roles:
  74. - role: etcd_migrate
  75. r_etcd_migrate_action: clean_data
  76. r_etcd_common_embedded_etcd: "{{ groups.oo_etcd_to_config | default([]) | length == 0 }}"
  77. etcd_peer: "{{ openshift.common.ip }}"
  78. etcd_url_scheme: "https"
  79. etcd_peer_url_scheme: "https"
  80. post_tasks:
  81. - name: Add etcd hosts
  82. delegate_to: localhost
  83. add_host:
  84. name: "{{ item }}"
  85. groups: oo_new_etcd_to_config
  86. ansible_ssh_user: "{{ g_ssh_user | default(omit) }}"
  87. ansible_become: "{{ g_sudo | default(omit) }}"
  88. with_items: "{{ groups.oo_etcd_to_migrate[1:] | default([]) }}"
  89. changed_when: no
  90. - name: Set success
  91. set_fact:
  92. r_etcd_migrate_success: true
  93. - include: ./scaleup.yml
  94. - name: Gate on etcd migration
  95. hosts: oo_masters_to_config
  96. gather_facts: no
  97. tasks:
  98. - set_fact:
  99. etcd_migration_completed: "{{ hostvars
  100. | oo_select_keys(groups.oo_etcd_to_migrate)
  101. | oo_collect('inventory_hostname', {'r_etcd_migrate_success': true}) }}"
  102. - set_fact:
  103. etcd_migration_failed: "{{ groups.oo_etcd_to_migrate | difference(etcd_migration_completed) }}"
  104. - name: Add TTLs on the first master
  105. hosts: oo_first_master[0]
  106. roles:
  107. - role: etcd_migrate
  108. r_etcd_migrate_action: add_ttls
  109. etcd_peer: "{{ hostvars[groups.oo_etcd_to_migrate.0].openshift.common.ip }}"
  110. etcd_url_scheme: "https"
  111. etcd_peer_url_scheme: "https"
  112. when: etcd_migration_failed | length == 0
  113. - name: Configure masters if etcd data migration is succesfull
  114. hosts: oo_masters_to_config
  115. roles:
  116. - role: etcd_migrate
  117. r_etcd_migrate_action: configure
  118. when: etcd_migration_failed | length == 0
  119. tasks:
  120. - debug:
  121. msg: "Skipping master re-configuration since migration failed."
  122. when:
  123. - etcd_migration_failed | length > 0
  124. - name: Start master services
  125. service:
  126. name: "{{ item }}"
  127. state: started
  128. register: service_status
  129. # Sometimes the master-api, resp. master-controllers fails to start for the first time
  130. until: service_status.state is defined and service_status.state == "started"
  131. retries: 5
  132. delay: 10
  133. with_items: "{{ master_services[::-1] }}"
  134. - fail:
  135. msg: "Migration failed. The following hosts were not properly migrated: {{ etcd_migration_failed | join(',') }}"
  136. when:
  137. - etcd_migration_failed | length > 0