|
139 | 139 | ansible.builtin.set_fact: |
140 | 140 | pacemaker_is_running: "{{ ansible_facts.services['pacemaker.service'].state | default('') == 'running' }}" |
141 | 141 |
|
142 | | -- name: Collect pacemaker diagnostics on failure |
143 | | - ansible.builtin.command: "{{ item }}" # noqa command-instead-of-module |
144 | | - loop: |
145 | | - - systemctl status pacemaker.service --no-pager -l |
146 | | - - journalctl --no-pager -u pacemaker --lines=50 |
147 | | - register: pacemaker_diag |
| 142 | +- name: Collect cluster diagnostics on failure |
| 143 | + ansible.builtin.command: "{{ item.1 | format(item.0) }}" # noqa command-instead-of-module |
| 144 | + loop: "{{ services | product(diag_commands) | list }}" |
| 145 | + loop_control: |
| 146 | + label: "{{ item.1 | format(item.0) }}" |
| 147 | + vars: |
| 148 | + services: |
| 149 | + - pacemaker |
| 150 | + - corosync |
| 151 | + diag_commands: |
| 152 | + - "systemctl status %s.service --no-pager -l" |
| 153 | + - "systemctl list-dependencies %s.service" |
| 154 | + - "journalctl --no-pager -u %s --lines=50" |
| 155 | + register: cluster_diag |
148 | 156 | failed_when: false |
149 | 157 | changed_when: false |
150 | 158 | when: not pacemaker_is_running | bool |
151 | 159 |
|
152 | | -- name: Display pacemaker diagnostics |
| 160 | +- name: Display cluster diagnostics |
153 | 161 | ansible.builtin.debug: |
154 | | - msg: "{{ item.item }}:\n{{ item.stdout }}" |
155 | | - loop: "{{ pacemaker_diag.results }}" |
| 162 | + msg: "{{ item.item.1 | format(item.item.0) }}:\n{{ item.stdout }}" |
| 163 | + loop: "{{ cluster_diag.results }}" |
156 | 164 | loop_control: |
157 | | - label: "{{ item.item }}" |
| 165 | + label: "{{ item.item.1 | format(item.item.0) }}" |
158 | 166 | when: not pacemaker_is_running | bool |
159 | 167 |
|
160 | 168 | - name: Fail if pacemaker is not running |
|
247 | 255 | migration_threshold: "{{ (crm_rsc_options_show.stdout | regex_search('migration-threshold=([0-9]*)', '\\1'))[0] | default('false') }}" |
248 | 256 | op_default_timeout: "{{ (crm_op_options_show.stdout | regex_search('timeout=([0-9]*)', '\\1'))[0] | default('false') }}" |
249 | 257 |
|
| 258 | +# GCP native fencing requires per-node stonith primitives (fence_gce), |
| 259 | +# each referencing a specific hostname and zone. |
| 260 | +# AWS uses a single tag-based stonith resource (external/ec2) that |
| 261 | +# discovers instances automatically, so it does not need these variables. |
250 | 262 | - name: Set primary and secondary hostnames |
251 | 263 | ansible.builtin.set_fact: |
252 | 264 | primary_hostname: "{{ groups['hana'][0] }}" |
|
257 | 269 | - name: Enable SBD [sbd] |
258 | 270 | ansible.builtin.command: |
259 | 271 | cmd: crm configure primitive rsc_iscsi_sbd stonith:external/sbd |
260 | | - register: reg_iscsi |
261 | | - changed_when: reg_iscsi.rc == 0 |
| 272 | + register: enable_sbd_result |
| 273 | + changed_when: enable_sbd_result.rc == 0 |
262 | 274 | when: |
263 | 275 | - sbd_stonith | string | lower == 'false' |
264 | 276 | - use_sbd | default(false) | bool |
|
348 | 360 | crm configure property |
349 | 361 | $id="cib-bootstrap-options" |
350 | 362 | stonith-timeout=300s |
351 | | - register: reg_st |
352 | | - changed_when: reg_st.rc == 0 |
| 363 | + register: set_stonith_timeout_native_result |
| 364 | + changed_when: set_stonith_timeout_native_result.rc == 0 |
353 | 365 | when: |
354 | 366 | - stonith_timeout != '300s' |
355 | 367 | - is_primary |
|
361 | 373 | crm configure property |
362 | 374 | $id="cib-bootstrap-options" |
363 | 375 | stonith-enabled=true |
364 | | - register: reg_se |
365 | | - changed_when: reg_se.rc == 0 |
| 376 | + register: enable_stonith_result |
| 377 | + changed_when: enable_stonith_result.rc == 0 |
366 | 378 | when: |
367 | 379 | - stonith_enabled | string | lower != 'true' |
368 | 380 | - is_primary |
|
388 | 400 | crm configure rsc_defaults |
389 | 401 | $id="rsc-options" |
390 | 402 | migration-threshold=5000 |
391 | | - register: reg_mig_t |
392 | | - changed_when: reg_mig_t.rc == 0 |
| 403 | + register: set_migration_threshold_result |
| 404 | + changed_when: set_migration_threshold_result.rc == 0 |
393 | 405 | when: |
394 | 406 | - migration_threshold != '5000' |
395 | 407 | - is_primary |
396 | 408 |
|
397 | 409 | - name: Set op_defaults timeout |
398 | 410 | ansible.builtin.command: |
399 | 411 | cmd: crm configure op_defaults timeout=600 |
400 | | - register: reg_op_tim |
401 | | - changed_when: reg_op_tim.rc == 0 |
| 412 | + register: set_op_defaults_timeout_result |
| 413 | + changed_when: set_op_defaults_timeout_result.rc == 0 |
402 | 414 | when: |
403 | 415 | - op_default_timeout != '600' |
404 | 416 | - is_primary |
|
0 commit comments