prole/infrastructure/roles/iscsi/tasks/iscsi_mount.yml
chrisfu d2295f4c2b ansible: add K3s datastore export/import, improve iSCSI handling, and migrate merlin to MariaDB primary
- Added tasks and playbooks for K3s datastore export/import using MariaDB Tools role, with associated tests and defaults.
- Enhanced iSCSI role to support mkfs-once logic and safer re-initialization of block storage.
- Migrated iSCSI-backed Rancher data from retropie to merlin.prole.org.
- Updated k3s roles/playbooks to relax Rancher storage preflight checks, supporting PARTUUID-based mounts.
- Adjusted Samba AD NetBIOS name derivation to use uppercase short hostname by default.
- Incremented prole DB version to 104, updated generated prole.cfg, inventory, and recovery manifest templates.
2026-03-06 14:25:13 -08:00

97 lines
3.4 KiB
YAML

---
- name: Ensure mountpoint exists
ansible.builtin.file:
path: "{{ m.path }}"
state: directory
mode: "0755"
- name: Ensure marker directory exists (mkfs_once)
ansible.builtin.file:
path: /var/lib/prole/iscsi
state: directory
owner: root
group: root
mode: "0755"
when: m.mkfs_once | default(false) | bool
- name: Compute mkfs marker path (mkfs_once)
ansible.builtin.set_fact:
_iscsi_mkfs_marker: >-
/var/lib/prole/iscsi/mkfs-
{{ (m.src | regex_replace('^UUID=', 'uuid-')
| regex_replace('^LABEL=', 'label-')
| regex_replace('[^A-Za-z0-9_.-]', '_')) }}
.done
when: m.mkfs_once | default(false) | bool
- name: Check mkfs marker presence (mkfs_once)
ansible.builtin.stat:
path: "{{ _iscsi_mkfs_marker }}"
register: _iscsi_mkfs_marker_stat
when: m.mkfs_once | default(false) | bool
- name: Fail if mountpoint is already mounted but mkfs_once requested
ansible.builtin.command: "findmnt -n {{ m.path }}"
register: _iscsi_findmnt_before_mkfs
changed_when: false
failed_when: false
when:
- m.mkfs_once | default(false) | bool
- _iscsi_mkfs_marker_stat.stat.exists is not defined or not _iscsi_mkfs_marker_stat.stat.exists
- name: Refuse to mkfs when mountpoint is mounted
ansible.builtin.fail:
msg: "Refusing to mkfs {{ m.src }} because {{ m.path }} is already mounted ({{ _iscsi_findmnt_before_mkfs.stdout | default('') }})."
when:
- m.mkfs_once | default(false) | bool
- _iscsi_mkfs_marker_stat.stat.exists is not defined or not _iscsi_mkfs_marker_stat.stat.exists
- _iscsi_findmnt_before_mkfs.rc == 0
- name: Resolve block device for mkfs (mkfs_once)
ansible.builtin.command: >-
{{ (m.src | regex_search('^UUID=') )
| ternary('blkid -U ' ~ (m.src | regex_replace('^UUID=', '')),
(m.src | regex_search('^LABEL=') )
| ternary('blkid -L ' ~ (m.src | regex_replace('^LABEL=', '')),
'echo ' ~ (m.src))) }}
register: _iscsi_mkfs_dev
changed_when: false
when:
- m.mkfs_once | default(false) | bool
- _iscsi_mkfs_marker_stat.stat.exists is not defined or not _iscsi_mkfs_marker_stat.stat.exists
- name: Require resolved device to look like /dev/* (mkfs_once)
ansible.builtin.assert:
that:
- (_iscsi_mkfs_dev.stdout | default('') | trim) is match('^/dev/')
fail_msg: "Unable to resolve a /dev/* block device for mkfs from src={{ m.src }} (got: {{ _iscsi_mkfs_dev.stdout | default('') | trim }})."
when:
- m.mkfs_once | default(false) | bool
- _iscsi_mkfs_marker_stat.stat.exists is not defined or not _iscsi_mkfs_marker_stat.stat.exists
- name: Re-initialize filesystem (mkfs.ext4) (mkfs_once)
ansible.builtin.command: "mkfs.ext4 -F {{ _iscsi_mkfs_dev.stdout | trim }}"
changed_when: true
when:
- m.mkfs_once | default(false) | bool
- _iscsi_mkfs_marker_stat.stat.exists is not defined or not _iscsi_mkfs_marker_stat.stat.exists
- name: Write mkfs marker (mkfs_once)
ansible.builtin.file:
path: "{{ _iscsi_mkfs_marker }}"
state: touch
owner: root
group: root
mode: "0644"
when:
- m.mkfs_once | default(false) | bool
- _iscsi_mkfs_marker_stat.stat.exists is not defined or not _iscsi_mkfs_marker_stat.stat.exists
- name: Mount {{ m.path }}
ansible.builtin.mount:
path: "{{ m.path }}"
src: "{{ m.src }}"
fstype: "{{ m.fstype | default('ext4') }}"
opts: "{{ m.opts | default('_netdev,noatime') }}"
state: mounted