Skip to content

Commit 5b42697

Browse files
committed
Use disks "by-path" instead of random name
Refactor find-node-disks to: - Only access the first node (node_0) instead of looping through 3 nodes - Extract disk devices using lsblk on the first node - Convert /dev/sdX devices to their stable /dev/disk/by-path/... symlinks using udevadm - Store all by-path device paths in common_disks variable for reliable disk identification
1 parent 16ff7a3 commit 5b42697

File tree

1 file changed

+20
-9
lines changed

1 file changed

+20
-9
lines changed
Lines changed: 20 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -1,23 +1,34 @@
11
---
2-
- name: Run lsblk on each node
2+
- name: Run lsblk on first node
33
vars:
4-
ip: "{{ lookup('vars', 'node_' ~ item ~ '_ip') }}"
4+
ip: "{{ lookup('vars', 'node_0_ip') }}"
55
ansible.builtin.shell:
66
cmd: >-
77
ssh core@{{ ip }} "lsblk -J -b -o NAME,TYPE,SIZE,MOUNTPOINT |
88
jq -r '.blockdevices[] | select(.size > 0 and .type == \"disk\") |
99
select((.children // []) | all(.mountpoint != \"/boot\")) | \"/dev/\" + .name'"
10-
register: blk_outputs
11-
loop: "{{ range(0,3) | list }}"
10+
register: blk_output
11+
changed_when: false
1212

13-
- name: Extract device lists
14-
ansible.builtin.set_fact:
15-
node_disks_list: "{{ blk_outputs.results | map(attribute='stdout_lines') | list }}"
13+
- name: Get by-path device paths for each disk
14+
vars:
15+
ip: "{{ lookup('vars', 'node_0_ip') }}"
16+
ansible.builtin.shell:
17+
cmd: >-
18+
ssh -o LogLevel=ERROR core@{{ ip }}
19+
'udevadm info -q symlink -r --name="{{ item }}" |
20+
awk '\''{ for (i = 1; i <= NF; i++) if ($i ~ /disk\/by-path\//) print $i }'\'''
21+
register: by_path_outputs
22+
loop: "{{ blk_output.stdout_lines }}"
23+
changed_when: false
1624

17-
- name: Find common devices across nodes
25+
- name: Extract by-path device list
1826
ansible.builtin.set_fact:
19-
common_disks: "{{ node_disks_list[0] | intersect(node_disks_list[1]) | intersect(node_disks_list[2]) }}"
27+
common_disks: "{{ by_path_outputs.results | selectattr('stdout', 'defined') | selectattr('stdout', 'ne', '') | map(attribute='stdout') | map('trim') | select('ne', '') | list }}"
2028

2129
- name: Display common disks
2230
ansible.builtin.debug:
2331
msg: "{{ common_disks }}"
32+
33+
- name: Stop playbook here
34+
ansible.builtin.meta: end_play

0 commit comments

Comments
 (0)