|
33 | 33 | retries: 5
|
34 | 34 | delay: 30
|
35 | 35 |
|
36 |
| - # this step is key!!! Don't restart more nodes until we can safely do so. This either requires a green cluster status, or a yellow status with 0 initializing or relocating shards |
37 |
| - # |
38 |
| - # From https://www.elastic.co/guide/en/elastic-stack/8.17/upgrading-elasticsearch.html |
39 |
| - ## During a rolling upgrade, primary shards assigned to a node running the new version cannot have their replicas assigned to a node with the old version. The new version might have a different data format that is not understood by the old version. |
40 |
| - ## |
41 |
| - ## If it is not possible to assign the replica shards to another node (there is only one upgraded node in the cluster), the replica shards remain unassigned and status stays yellow. |
42 |
| - ## |
43 |
| - ## In this case, you can proceed once there are no initializing or relocating shards (check the init and relo columns). |
44 |
| -- name: Wait for cluster health to return to green |
45 |
| - ansible.builtin.uri: |
46 |
| - url: "{{ elasticsearch_http_protocol }}://{{ elasticsearch_api_host }}:{{ elasticstack_elasticsearch_http_port }}/_cluster/health" |
47 |
| - method: GET |
48 |
| - user: elastic |
49 |
| - password: "{{ elasticstack_password.stdout }}" |
50 |
| - validate_certs: no |
51 |
| - register: response |
52 |
| - until: "response.json.status == 'green' or |
53 |
| - ( response.json.status == 'yellow' and |
54 |
| - response.json.relocating_shards == 0 and |
55 |
| - response.json.initializing_shards == 0 |
56 |
| - )" |
57 |
| - retries: 50 |
58 |
| - delay: 30 |
59 | 36 |
|
60 |
| -# Extra safety in case we continune with a yellow cluster |
61 |
| -# Wait a short time, then check cluster status again |
62 |
| -- name: "Attempting to contune with yellow cluster health" |
63 |
| - when: "response.json.status == 'yellow'" |
64 |
| - block: |
65 |
| - - name: "Cluster health yellow: Wait before verifying status" |
66 |
| - ansible.builtin.pause: |
67 |
| - seconds: 10 |
| 37 | +# |
| 38 | +# Start cluster health check |
| 39 | +# |
68 | 40 |
|
69 |
| - - name: "Cluster health yellow: Verify we can safely continue" |
| 41 | +# this step is key!!! Don't restart more nodes until we can safely do so. This either requires a green cluster status, or a yellow status with 0 initializing or relocating shards |
| 42 | +# |
| 43 | +# From https://www.elastic.co/guide/en/elastic-stack/8.17/upgrading-elasticsearch.html |
| 44 | +## During a rolling upgrade, primary shards assigned to a node running the new version cannot have their replicas assigned to a node with the old version. The new version might have a different data format that is not understood by the old version. |
| 45 | +## |
| 46 | +## If it is not possible to assign the replica shards to another node (there is only one upgraded node in the cluster), the replica shards remain unassigned and status stays yellow. |
| 47 | +## |
| 48 | +## In this case, you can proceed once there are no initializing or relocating shards (check the init and relo columns). |
| 49 | + |
| 50 | +- name: Check cluster health |
| 51 | + block: |
| 52 | + - name: Wait for cluster health to return to green |
70 | 53 | ansible.builtin.uri:
|
71 | 54 | url: "{{ elasticsearch_http_protocol }}://{{ elasticsearch_api_host }}:{{ elasticstack_elasticsearch_http_port }}/_cluster/health"
|
72 | 55 | method: GET
|
73 | 56 | user: elastic
|
74 | 57 | password: "{{ elasticstack_password.stdout }}"
|
75 | 58 | validate_certs: no
|
76 |
| - register: response1 |
77 |
| - failed_when: "response1.json.relocating_shards != 0 or response1.json.initializing_shards != 0" |
| 59 | + register: response |
| 60 | + until: "response.json.status == 'green'" |
| 61 | + retries: 50 |
| 62 | + delay: 30 |
| 63 | + |
| 64 | + # Timed out while waiting for green cluster |
| 65 | + # Check if we can continue with a yellow cluster |
| 66 | + rescue: |
| 67 | + - name: "Rescue: Check if cluster health is yellow" |
| 68 | + ansible.builtin.uri: |
| 69 | + url: "{{ elasticsearch_http_protocol }}://{{ elasticsearch_api_host }}:{{ elasticstack_elasticsearch_http_port }}/_cluster/health" |
| 70 | + method: GET |
| 71 | + user: elastic |
| 72 | + password: "{{ elasticstack_password.stdout }}" |
| 73 | + validate_certs: no |
| 74 | + register: response |
| 75 | + failed_when: "response.json.status != 'yellow' or response.json.relocating_shards != 0 or response.json.initializing_shards != 0" |
| 76 | + |
| 77 | + - name: "Rescure: Wait before verifying status" |
| 78 | + ansible.builtin.pause: |
| 79 | + seconds: 10 |
| 80 | + |
| 81 | + - name: "Rescue: Verify we can safely continue with yellow cluster" |
| 82 | + ansible.builtin.uri: |
| 83 | + url: "{{ elasticsearch_http_protocol }}://{{ elasticsearch_api_host }}:{{ elasticstack_elasticsearch_http_port }}/_cluster/health" |
| 84 | + method: GET |
| 85 | + user: elastic |
| 86 | + password: "{{ elasticstack_password.stdout }}" |
| 87 | + validate_certs: no |
| 88 | + register: response |
| 89 | + failed_when: "response.json.status != 'yellow' or response.json.relocating_shards != 0 or response.json.initializing_shards != 0" |
| 90 | + |
| 91 | +# |
| 92 | +# End cluster health check |
| 93 | +# |
| 94 | + |
78 | 95 |
|
79 | 96 | # Disabling shard allocation right after enabling it seems redundant. Please see above for details.
|
80 | 97 | - name: Disable shard allocation for the cluster
|
|
0 commit comments