--- - name: Install sfdisk package: name: util-linux state: present changed_when: false - name: Install hdparm package: name: hdparm state: present changed_when: false - name: Load expected layout from file (controller side) set_fact: expected_layout: "{{ lookup('file', item.layout_file) }}" changed_when: false - name: Get current layout from remote command: "sfdisk --dump {{ item.device }}" register: current_layout changed_when: false - name: Compare expected vs current layout vars: current_clean: "{{ current_layout.stdout | trim | regex_replace('\\s+', ' ') }}" expected_clean: "{{ expected_layout | trim | regex_replace('\\s+', ' ') }}" set_fact: layout_differs: "{{ current_clean != expected_clean }}" changed_when: false - name: Copy layout file to remote (only if different) copy: content: "{{ expected_layout }}" dest: "/tmp/expected-{{ item.device | basename }}.sfdisk" mode: "0644" when: layout_differs - name: Apply partition table using sfdisk command: > sfdisk {{ item.device }} < {{ item.layout_file }} when: layout_differs