mirror of
https://github.com/dredx/prole.git
synced 2026-09-27 11:54:30 +00:00
- 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.
97 lines
3.4 KiB
YAML
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
|