From 60459d34d928d36daaa1c85b8b4c3dd6648858a6 Mon Sep 17 00:00:00 2001 From: Sergey Malyuk Date: Wed, 18 Mar 2026 17:26:51 +0300 Subject: [PATCH 1/9] add .DS_Store in .gitignore --- .gitignore | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/.gitignore b/.gitignore index 54fdf5c..2fa75ae 100644 --- a/.gitignore +++ b/.gitignore @@ -1,3 +1,4 @@ .ansible .vscode -server64_with_all_clients_8_3_26_1540.zip \ No newline at end of file +server64_with_all_clients_8_3_26_1540.zip +.DS_Store \ No newline at end of file From e9802e7c354b7d63f8f97fd2392eca9bf39e9f06 Mon Sep 17 00:00:00 2001 From: Sergey Malyuk Date: Wed, 18 Mar 2026 17:35:08 +0300 Subject: [PATCH 2/9] add hostname role --- roles/hostname/README.md | 39 ++++++++++++++++++++++++++++++++ roles/hostname/defaults/main.yml | 2 ++ roles/hostname/handlers/main.yml | 2 ++ roles/hostname/meta/main.yml | 14 ++++++++++++ roles/hostname/tasks/main.yml | 6 +++++ roles/hostname/vars/main.yml | 2 ++ 6 files changed, 65 insertions(+) create mode 100644 roles/hostname/README.md create mode 100644 roles/hostname/defaults/main.yml create mode 100644 roles/hostname/handlers/main.yml create mode 100644 roles/hostname/meta/main.yml create mode 100644 roles/hostname/tasks/main.yml create mode 100644 roles/hostname/vars/main.yml diff --git a/roles/hostname/README.md b/roles/hostname/README.md new file mode 100644 index 0000000..410dc96 --- /dev/null +++ b/roles/hostname/README.md @@ -0,0 +1,39 @@ +Role Name +========= + +Set the node's hostname. + +Requirements +------------ + +None + +Role Variables +-------------- + +`hostname` + +Dependencies +------------ + +Example Playbook +---------------- + +Including an example of how to use your role (for instance, with variables passed in as parameters) is always nice for users too: + +```yaml + +- hosts: servers + roles: + - { role: username.rolename, x: 42 } +``` + +License +------- + +BSD + +Author Information +------------------ + +corvus-migratorius@proton.me diff --git a/roles/hostname/defaults/main.yml b/roles/hostname/defaults/main.yml new file mode 100644 index 0000000..0453846 --- /dev/null +++ b/roles/hostname/defaults/main.yml @@ -0,0 +1,2 @@ +--- +# defaults file for roles/hostname diff --git a/roles/hostname/handlers/main.yml b/roles/hostname/handlers/main.yml new file mode 100644 index 0000000..69f09d0 --- /dev/null +++ b/roles/hostname/handlers/main.yml @@ -0,0 +1,2 @@ +--- +# handlers file for roles/hostname diff --git a/roles/hostname/meta/main.yml b/roles/hostname/meta/main.yml new file mode 100644 index 0000000..03e4bde --- /dev/null +++ b/roles/hostname/meta/main.yml @@ -0,0 +1,14 @@ +galaxy_info: + author: "Alexander Gorelyhsev" + description: "Set the hostname of the node" + company: "GenLab LLC" + license: "BSD" + min_ansible_version: "2.1" + + platforms: + - name: "Ubuntu" + versions: ["focal", "jammy", "noble"] + + galaxy_tags: [] + +dependencies: [] diff --git a/roles/hostname/tasks/main.yml b/roles/hostname/tasks/main.yml new file mode 100644 index 0000000..9ae6ff9 --- /dev/null +++ b/roles/hostname/tasks/main.yml @@ -0,0 +1,6 @@ +--- +# tasks file for roles/hostname +- name: "Set the hostname to '{{ hostname }}'" + tags: [ hostname ] + ansible.builtin.hostname: + name: "{{ hostname }}" diff --git a/roles/hostname/vars/main.yml b/roles/hostname/vars/main.yml new file mode 100644 index 0000000..b09fe3f --- /dev/null +++ b/roles/hostname/vars/main.yml @@ -0,0 +1,2 @@ +--- +# vars file for roles/hostname From 7c40ab6934700c8b70d29718aa742e87f850e786 Mon Sep 17 00:00:00 2001 From: Sergey Malyuk Date: Wed, 18 Mar 2026 17:44:22 +0300 Subject: [PATCH 3/9] update meta --- roles/hostname/README.md | 5 ++--- roles/hostname/meta/main.yml | 2 ++ 2 files changed, 4 insertions(+), 3 deletions(-) diff --git a/roles/hostname/README.md b/roles/hostname/README.md index 410dc96..ccf3218 100644 --- a/roles/hostname/README.md +++ b/roles/hostname/README.md @@ -22,10 +22,9 @@ Example Playbook Including an example of how to use your role (for instance, with variables passed in as parameters) is always nice for users too: ```yaml - -- hosts: servers roles: - - { role: username.rolename, x: 42 } + - role: genlab.common.hostname + hostname: server-hostname ``` License diff --git a/roles/hostname/meta/main.yml b/roles/hostname/meta/main.yml index 03e4bde..b76888f 100644 --- a/roles/hostname/meta/main.yml +++ b/roles/hostname/meta/main.yml @@ -1,4 +1,6 @@ galaxy_info: + role_name: "hostname" + namespace: genlab author: "Alexander Gorelyhsev" description: "Set the hostname of the node" company: "GenLab LLC" From b65edeb26344212346b9b13e2003be102080dfa7 Mon Sep 17 00:00:00 2001 From: Sergey Malyuk Date: Wed, 18 Mar 2026 17:44:32 +0300 Subject: [PATCH 4/9] fix ansible-lint erros --- roles/hostname/tasks/main.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/roles/hostname/tasks/main.yml b/roles/hostname/tasks/main.yml index 9ae6ff9..07e2159 100644 --- a/roles/hostname/tasks/main.yml +++ b/roles/hostname/tasks/main.yml @@ -1,6 +1,6 @@ --- # tasks file for roles/hostname - name: "Set the hostname to '{{ hostname }}'" - tags: [ hostname ] + tags: [hostname] ansible.builtin.hostname: name: "{{ hostname }}" From d43475193ec13a03f034acb293f0abf0014d14c4 Mon Sep 17 00:00:00 2001 From: Sergey Malyuk Date: Wed, 18 Mar 2026 17:46:51 +0300 Subject: [PATCH 5/9] update meta --- README.md | 1 + galaxy.yml | 2 +- 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/README.md b/README.md index e1fce21..ebb79cd 100644 --- a/README.md +++ b/README.md @@ -12,6 +12,7 @@ - [dnsmasq](roles/dnsmasq/README.md) - [docker_ubuntu](roles/docker_ubuntu/README.md) - [grafana](roles/grafana/README.md) +- [hostname](roles/hostname/README.md) - [ipmi_exporter](roles/ipmi_exporter/README.md) - [karma](roles/karma/README.md) - [loki](roles/loki/README.md) diff --git a/galaxy.yml b/galaxy.yml index 2d76ce6..11d2987 100644 --- a/galaxy.yml +++ b/galaxy.yml @@ -1,7 +1,7 @@ --- namespace: genlab name: common -version: 0.33.0 +version: 0.34.0 readme: README.md authors: - Alexander Gorelyshev (corvus-migratorius@proton.me) From 03d183536a0ee12d593c9fe7278732598f762202 Mon Sep 17 00:00:00 2001 From: Sergey Malyuk Date: Wed, 18 Mar 2026 17:52:10 +0300 Subject: [PATCH 6/9] add molecule skip --- roles/hostname/molecule/default/converge.yml | 9 ++++++++ roles/hostname/molecule/default/molecule.yml | 22 ++++++++++++++++++++ roles/hostname/molecule/default/verify.yml | 11 ++++++++++ 3 files changed, 42 insertions(+) create mode 100644 roles/hostname/molecule/default/converge.yml create mode 100644 roles/hostname/molecule/default/molecule.yml create mode 100644 roles/hostname/molecule/default/verify.yml diff --git a/roles/hostname/molecule/default/converge.yml b/roles/hostname/molecule/default/converge.yml new file mode 100644 index 0000000..8449ec6 --- /dev/null +++ b/roles/hostname/molecule/default/converge.yml @@ -0,0 +1,9 @@ +--- +- name: Converge + hosts: all + pre_tasks: + # Blank task for ignoring CI testing, because you can't change hostname in container + # This role was tested manually + - name: Blank + ansible.builtin.command: echo + changed_when: false diff --git a/roles/hostname/molecule/default/molecule.yml b/roles/hostname/molecule/default/molecule.yml new file mode 100644 index 0000000..de54042 --- /dev/null +++ b/roles/hostname/molecule/default/molecule.yml @@ -0,0 +1,22 @@ +--- +dependency: + name: galaxy +driver: + name: docker +platforms: + - name: ubuntu + image: geerlingguy/docker-ubuntu2204-ansible:latest + pre_build_image: true + command: ${MOLECULE_DOCKER_COMMAND:-""} + volumes: + - /sys/fs/cgroup:/sys/fs/cgroup:rw + cgroupns_mode: host + privileged: true +provisioner: + name: ansible +verifier: + name: ansible +lint: | + set -e + yamllint . + ansible-lint . diff --git a/roles/hostname/molecule/default/verify.yml b/roles/hostname/molecule/default/verify.yml new file mode 100644 index 0000000..f78f05e --- /dev/null +++ b/roles/hostname/molecule/default/verify.yml @@ -0,0 +1,11 @@ +--- + +- name: Verify + hosts: all + gather_facts: false + tasks: + # Blank task for ignoring CI testing, because you can't change hostname in container + # This role was tested manually + - name: Blank + ansible.builtin.command: echo + changed_when: false From b4272efaca50a155279b05432e037d9992fe2361 Mon Sep 17 00:00:00 2001 From: Sergey Malyuk Date: Thu, 19 Mar 2026 12:16:48 +0300 Subject: [PATCH 7/9] add make_lv role --- roles/make_lv/README.md | 68 +++++++++++++ roles/make_lv/defaults/main.yml | 8 ++ roles/make_lv/handlers/main.yml | 1 + roles/make_lv/meta/main.yml | 17 ++++ roles/make_lv/molecule/default/converge.yml | 60 ++++++++++++ roles/make_lv/molecule/default/molecule.yml | 27 ++++++ roles/make_lv/molecule/default/verify.yml | 65 +++++++++++++ roles/make_lv/tasks/main.yml | 102 ++++++++++++++++++++ roles/make_lv/vars/main.yml | 1 + 9 files changed, 349 insertions(+) create mode 100644 roles/make_lv/README.md create mode 100644 roles/make_lv/defaults/main.yml create mode 100644 roles/make_lv/handlers/main.yml create mode 100644 roles/make_lv/meta/main.yml create mode 100644 roles/make_lv/molecule/default/converge.yml create mode 100644 roles/make_lv/molecule/default/molecule.yml create mode 100644 roles/make_lv/molecule/default/verify.yml create mode 100644 roles/make_lv/tasks/main.yml create mode 100644 roles/make_lv/vars/main.yml diff --git a/roles/make_lv/README.md b/roles/make_lv/README.md new file mode 100644 index 0000000..28af76a --- /dev/null +++ b/roles/make_lv/README.md @@ -0,0 +1,68 @@ +ansible-make-lv +========= + +Role for creating simple lv disks with 1 group and 1 volume + +Requirements +------------ + +None + +Role Variables +-------------- + +None + +Dependencies +------------ + +None + +Example Playbook +---------------- + +All variables +```yaml +roles: + - role: genlab.ansible_make_lv + virtual_group: "group" + logical_volume: "volume" + lvm_dev: "/dev/sda" + size: 100%FREE + fs_type: ext4 + storage_mountpoint: "/mnt" + storage_mountpoint_mode: "0775" + mountpoint_owner: root + mountpoint_group: root + is_container: false # disables udev in LVM if true +``` + +Minimal variables +```yaml +roles: + - role: genlab.ansible_make_lv + virtual_group: "group" + logical_volume: "volume" + lvm_dev: "/dev/sda" +``` + +Defaults +```yaml +size: 100%FREE +fs_type: ext4 +storage_mountpoint: "/mnt" +storage_mountpoint_mode: "0775" +mountpoint_owner: root +mountpoint_group: root +is_container: false # disables udev in LVM if true +``` + +License +------- + +BSD + +Author Information +------------------ + +malyuk.ss@genlab.llc diff --git a/roles/make_lv/defaults/main.yml b/roles/make_lv/defaults/main.yml new file mode 100644 index 0000000..46d48fb --- /dev/null +++ b/roles/make_lv/defaults/main.yml @@ -0,0 +1,8 @@ +--- +size: 100%FREE +fs_type: ext4 +storage_mountpoint: "/mnt" +storage_mountpoint_mode: "0775" +mountpoint_owner: root +mountpoint_group: root +is_container: false diff --git a/roles/make_lv/handlers/main.yml b/roles/make_lv/handlers/main.yml new file mode 100644 index 0000000..ed97d53 --- /dev/null +++ b/roles/make_lv/handlers/main.yml @@ -0,0 +1 @@ +--- diff --git a/roles/make_lv/meta/main.yml b/roles/make_lv/meta/main.yml new file mode 100644 index 0000000..52c881b --- /dev/null +++ b/roles/make_lv/meta/main.yml @@ -0,0 +1,17 @@ +--- +galaxy_info: + role_name: "make_lv" + namespace: genlab + author: "Sergey Malyuk" + company: "Genlab, LLC" + description: "" + license: "MIT" + min_ansible_version: "2.1" + + platforms: + - name: "Ubuntu" + versions: ["focal", "jammy", "noble"] + + galaxy_tags: [] + +dependencies: [] diff --git a/roles/make_lv/molecule/default/converge.yml b/roles/make_lv/molecule/default/converge.yml new file mode 100644 index 0000000..ee8c9aa --- /dev/null +++ b/roles/make_lv/molecule/default/converge.yml @@ -0,0 +1,60 @@ +--- +- name: Converge + hosts: all + pre_tasks: + - name: Get /root/image.img stats + ansible.builtin.stat: + path: /root/image.img + register: img_stat + + - name: Create image file + when: not img_stat.stat.exists + ansible.builtin.command: dd if=/dev/zero of=/root/image.img bs=1M count=128 + register: dd_result + changed_when: dd_result.rc == 0 + + - name: Get linked loop devices + ansible.builtin.command: losetup -a + changed_when: false + register: loop_devs + + - name: Link image to loop device + when: "'/root/image.img' not in loop_devs.stdout" + ansible.builtin.command: losetup --find --show -P /root/image.img + register: loop_device + changed_when: "'/dev/loop' in loop_device.stdout" + + - name: Get all loop devices + ansible.builtin.command: losetup -a + register: losetup_out + changed_when: false + + - name: Find line with /root/image.img + ansible.builtin.set_fact: + matched_line: "{{ losetup_out.stdout_lines + | select('search', '/root/image.img') + | list + | first + | default('') }}" + + - name: Extract loop device name (/dev/loopN) + ansible.builtin.set_fact: + loop_dev: "{{ matched_line | regex_search('(/dev/loop[0-9]+)', '\\1') | default('') }}" + + - name: Debug result + ansible.builtin.debug: + msg: "/root/image.img is linked to {{ loop_dev[0] }}" + when: loop_dev != '' + + roles: + - role: genlab.make_lv + virtual_group: "group" + logical_volume: "volume" + lvm_dev: "{{ loop_dev[0] }}" + size: 100%FREE + fs_type: ext4 + storage_mountpoint: "/mnt" + storage_mountpoint_mode: "0755" + mountpoint_owner: root + mountpoint_group: root + is_container: true diff --git a/roles/make_lv/molecule/default/molecule.yml b/roles/make_lv/molecule/default/molecule.yml new file mode 100644 index 0000000..d82158e --- /dev/null +++ b/roles/make_lv/molecule/default/molecule.yml @@ -0,0 +1,27 @@ +--- +dependency: + name: galaxy + +driver: + name: docker + +platforms: + - name: ubuntu + image: geerlingguy/docker-${MOLECULE_DISTRO:-ubuntu2404}-ansible:latest + pre_build_image: true + command: ${MOLECULE_DOCKER_COMMAND:-""} + volumes: + - /sys/fs/cgroup:/sys/fs/cgroup:rw + cgroupns_mode: host + privileged: true + +provisioner: + name: ansible + +verifier: + name: ansible + +lint: | + set -e + yamllint . + ansible-lint . diff --git a/roles/make_lv/molecule/default/verify.yml b/roles/make_lv/molecule/default/verify.yml new file mode 100644 index 0000000..ab99d42 --- /dev/null +++ b/roles/make_lv/molecule/default/verify.yml @@ -0,0 +1,65 @@ +--- +- name: Verify + hosts: all + gather_facts: false + any_errors_fatal: true + vars: + virtual_group: "group" + logical_volume: "volume" + lvm_dev: "/dev/loop0" + fs_type: ext4 + storage_mountpoint: "/mnt" + + tasks: + - name: Get volume group list + ansible.builtin.shell: + cmd: "set -o pipefail ; pvs | grep {{ lvm_dev }}" + executable: /bin/bash + changed_when: false + failed_when: false + register: vg_list + + - name: Assert that volume group exists + ansible.builtin.assert: + that: virtual_group in vg_list.stdout + success_msg: "{{ lvm_dev }} has {{ virtual_group }} group" + fail_msg: "{{ lvm_dev }} DOES NOT have {{ virtual_group }} group" + + - name: Get logical volume list + ansible.builtin.shell: + cmd: "set -o pipefail ; lvs | grep {{ virtual_group }} | grep {{ logical_volume }}" + executable: /bin/bash + changed_when: false + failed_when: false + register: lv_list + + - name: Assert that logical volume exists + ansible.builtin.assert: + that: logical_volume in lv_list.stdout + success_msg: "{{ virtual_group }} has {{ logical_volume }} volume" + fail_msg: "{{ virtual_group }} DOES NOT have {{ logical_volume }} volume" + + - name: Get filesystem type + ansible.builtin.command: "blkid /dev/mapper/{{ virtual_group }}-{{ logical_volume }} -o value -s TYPE" + changed_when: false + failed_when: false + register: current_fs + + - name: Assert that current filesystem is the required one + ansible.builtin.assert: + that: current_fs.stdout == fs_type + success_msg: "{{ virtual_group }} - {{ logical_volume }} has {{ fs_type }} filesystem" + fail_msg: "{{ virtual_group }} - {{ logical_volume }} DOES NOT have {{ fs_type }} filesystem" + + - name: Get logical volume mount info # noqa: command-instead-of-module — tells ansible-lint to ignore the error, because you can't actually + # do it with ansible.builtin.mount as the linter begs me to do + ansible.builtin.shell: "mount | grep -w '{{ virtual_group }}-{{ logical_volume }}'" + register: mount_check + ignore_errors: true + changed_when: false + + - name: Assert that volume is mounted + ansible.builtin.assert: + that: mount_check.rc == 0 + success_msg: "{{ virtual_group }}-{{ logical_volume }} is mounted at {{ storage_mountpoint }}" + fail_msg: "{{ virtual_group }}-{{ logical_volume }} IS NOT mounted at {{ storage_mountpoint }}" diff --git a/roles/make_lv/tasks/main.yml b/roles/make_lv/tasks/main.yml new file mode 100644 index 0000000..ac2537b --- /dev/null +++ b/roles/make_lv/tasks/main.yml @@ -0,0 +1,102 @@ +--- +- name: Install LVM tools + ansible.builtin.apt: + name: lvm2 + state: present + update_cache: true + cache_valid_time: 3600 +- name: Check lvm storage exists + block: + - name: Get volume group list + ansible.builtin.shell: + cmd: "set -o pipefail ; pvs | grep {{ lvm_dev }}" + executable: /bin/bash + changed_when: false + failed_when: false + register: vg_list + + - name: Assert that volume group exists + ansible.builtin.assert: + that: virtual_group in vg_list.stdout + success_msg: "{{ lvm_dev }} has {{ virtual_group }} group" + fail_msg: "{{ lvm_dev }} DOES NOT have {{ virtual_group }} group" + + - name: Get logical volume list + ansible.builtin.shell: + cmd: "set -o pipefail ; lvs | grep {{ virtual_group }} | grep {{ logical_volume }}" + executable: /bin/bash + changed_when: false + failed_when: false + register: lv_list + + - name: Assert that logical volume exists + ansible.builtin.assert: + that: logical_volume in lv_list.stdout + success_msg: "{{ virtual_group }} has {{ logical_volume }} volume" + fail_msg: "{{ virtual_group }} DOES NOT have {{ logical_volume }} volume" + + - name: Get filesystem type + ansible.builtin.command: "blkid /dev/mapper/{{ virtual_group }}-{{ logical_volume }} -o value -s TYPE" + changed_when: false + failed_when: false + register: current_fs + + - name: Assert that current filesystem is the required one + ansible.builtin.assert: + that: current_fs.stdout == fs_type + success_msg: "{{ virtual_group }} - {{ logical_volume }} has {{ fs_type }} filesystem" + fail_msg: "{{ virtual_group }} - {{ logical_volume }} DOES NOT have {{ fs_type }} filesystem" + + rescue: + - name: Unmount the main storage + ansible.posix.mount: + src: "/dev/{{ virtual_group }}/{{ logical_volume }}" + path: "{{ storage_mountpoint }}" + state: absent + + - name: Wipe disk signatures + ansible.builtin.command: "wipefs -af {{ lvm_dev }}" + register: wipefs_result + changed_when: wipefs_result.rc == 0 + + - name: Create a volume group for the storage + community.general.lvg: + pvs: "{{ lvm_dev }}" + vg: "{{ virtual_group }}" + force: true + + - name: Create a logical volume for the storage + when: is_container + community.general.lvol: + vg: "{{ virtual_group }}" + lv: "{{ logical_volume }}" + size: "{{ size }}" + opts: "--config 'activation/udev_rules=0'" + + - name: Create a logical volume for the storage + when: not is_container + community.general.lvol: + vg: "{{ virtual_group }}" + lv: "{{ logical_volume }}" + size: "{{ size }}" + opts: "--config 'activation/udev_rules=1'" + + - name: Create a filesystem for the storage + community.general.filesystem: + dev: "/dev/{{ virtual_group }}/{{ logical_volume }}" + fstype: "{{ fs_type }}" + +- name: Create a mountpoint for the storage + ansible.builtin.file: + path: "{{ storage_mountpoint }}" + state: directory + owner: "{{ mountpoint_owner }}" + group: "{{ mountpoint_group }}" + mode: "{{ storage_mountpoint_mode }}" + +- name: Mount the main storage + ansible.posix.mount: + src: "/dev/{{ virtual_group }}/{{ logical_volume }}" + path: "{{ storage_mountpoint }}" + fstype: "{{ fs_type }}" + state: mounted diff --git a/roles/make_lv/vars/main.yml b/roles/make_lv/vars/main.yml new file mode 100644 index 0000000..ed97d53 --- /dev/null +++ b/roles/make_lv/vars/main.yml @@ -0,0 +1 @@ +--- From 984f385a8b4cf68f8ee46f29be365691f17910c3 Mon Sep 17 00:00:00 2001 From: Sergey Malyuk Date: Thu, 19 Mar 2026 12:21:39 +0300 Subject: [PATCH 8/9] update meta --- README.md | 1 + galaxy.yml | 2 +- 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/README.md b/README.md index ebb79cd..4eef694 100644 --- a/README.md +++ b/README.md @@ -16,6 +16,7 @@ - [ipmi_exporter](roles/ipmi_exporter/README.md) - [karma](roles/karma/README.md) - [loki](roles/loki/README.md) +- [make_lv](roles/make_lv/README.md) - [metr1c](roles/metr1c/README.md) - [mkfs](roles/mkfs/README.md) - [mount_device](roles/mount_device/README.md) diff --git a/galaxy.yml b/galaxy.yml index 11d2987..829ea86 100644 --- a/galaxy.yml +++ b/galaxy.yml @@ -1,7 +1,7 @@ --- namespace: genlab name: common -version: 0.34.0 +version: 0.35.0 readme: README.md authors: - Alexander Gorelyshev (corvus-migratorius@proton.me) From 24a471b654b8b0faf55630223862896385113cf7 Mon Sep 17 00:00:00 2001 From: Sergey Malyuk Date: Thu, 19 Mar 2026 12:39:54 +0300 Subject: [PATCH 9/9] fix ansible-lint errors --- roles/make_lv/README.md | 28 ++++++------- roles/make_lv/defaults/main.yml | 14 +++---- roles/make_lv/molecule/default/converge.yml | 44 ++++++++++----------- roles/make_lv/molecule/default/verify.yml | 28 ++++++------- roles/make_lv/tasks/main.yml | 44 ++++++++++----------- 5 files changed, 79 insertions(+), 79 deletions(-) diff --git a/roles/make_lv/README.md b/roles/make_lv/README.md index 28af76a..a27ff0c 100644 --- a/roles/make_lv/README.md +++ b/roles/make_lv/README.md @@ -28,13 +28,13 @@ roles: virtual_group: "group" logical_volume: "volume" lvm_dev: "/dev/sda" - size: 100%FREE - fs_type: ext4 - storage_mountpoint: "/mnt" - storage_mountpoint_mode: "0775" - mountpoint_owner: root - mountpoint_group: root - is_container: false # disables udev in LVM if true + make_lv_size: 100%FREE + make_lv_fs_type: ext4 + make_lv_storage_mountpoint: "/mnt" + make_lv_storage_mountpoint_mode: "0775" + make_lv_mountpoint_owner: root + make_lv_mountpoint_group: root + make_lv_is_container: false # disables udev in LVM if true ``` Minimal variables @@ -48,13 +48,13 @@ roles: Defaults ```yaml -size: 100%FREE -fs_type: ext4 -storage_mountpoint: "/mnt" -storage_mountpoint_mode: "0775" -mountpoint_owner: root -mountpoint_group: root -is_container: false # disables udev in LVM if true +make_lv_size: 100%FREE +make_lv_fs_type: ext4 +make_lv_storage_mountpoint: "/mnt" +make_lv_storage_mountpoint_mode: "0775" +make_lv_mountpoint_owner: root +make_lv_mountpoint_group: root +make_lv_is_container: false # disables udev in LVM if true ``` License diff --git a/roles/make_lv/defaults/main.yml b/roles/make_lv/defaults/main.yml index 46d48fb..9c69621 100644 --- a/roles/make_lv/defaults/main.yml +++ b/roles/make_lv/defaults/main.yml @@ -1,8 +1,8 @@ --- -size: 100%FREE -fs_type: ext4 -storage_mountpoint: "/mnt" -storage_mountpoint_mode: "0775" -mountpoint_owner: root -mountpoint_group: root -is_container: false +make_lv_size: 100%FREE +make_lv_fs_type: ext4 +make_lv_storage_mountpoint: "/mnt" +make_lv_storage_mountpoint_mode: "0775" +make_lv_mountpoint_owner: root +make_lv_mountpoint_group: root +make_lv_is_container: false diff --git a/roles/make_lv/molecule/default/converge.yml b/roles/make_lv/molecule/default/converge.yml index ee8c9aa..e6bd8ad 100644 --- a/roles/make_lv/molecule/default/converge.yml +++ b/roles/make_lv/molecule/default/converge.yml @@ -5,33 +5,33 @@ - name: Get /root/image.img stats ansible.builtin.stat: path: /root/image.img - register: img_stat + register: make_lv_img_stat - name: Create image file - when: not img_stat.stat.exists + when: not make_lv_img_stat.stat.exists ansible.builtin.command: dd if=/dev/zero of=/root/image.img bs=1M count=128 - register: dd_result - changed_when: dd_result.rc == 0 + register: make_lv_dd_result + changed_when: make_lv_dd_result.rc == 0 - name: Get linked loop devices ansible.builtin.command: losetup -a changed_when: false - register: loop_devs + register: make_lv_loop_devs - name: Link image to loop device - when: "'/root/image.img' not in loop_devs.stdout" + when: "'/root/image.img' not in make_lv_loop_devs.stdout" ansible.builtin.command: losetup --find --show -P /root/image.img - register: loop_device - changed_when: "'/dev/loop' in loop_device.stdout" + register: make_lv_loop_device + changed_when: "'/dev/loop' in make_lv_loop_device.stdout" - name: Get all loop devices ansible.builtin.command: losetup -a - register: losetup_out + register: make_lv_losetup_out changed_when: false - name: Find line with /root/image.img ansible.builtin.set_fact: - matched_line: "{{ losetup_out.stdout_lines + make_lv_matched_line: "{{ make_lv_losetup_out.stdout_lines | select('search', '/root/image.img') | list | first @@ -39,22 +39,22 @@ - name: Extract loop device name (/dev/loopN) ansible.builtin.set_fact: - loop_dev: "{{ matched_line | regex_search('(/dev/loop[0-9]+)', '\\1') | default('') }}" + make_lv_loop_dev: "{{ make_lv_matched_line | regex_search('(/dev/loop[0-9]+)', '\\1') | default('') }}" - name: Debug result ansible.builtin.debug: - msg: "/root/image.img is linked to {{ loop_dev[0] }}" - when: loop_dev != '' + msg: "/root/image.img is linked to {{ make_lv_loop_dev[0] }}" + when: make_lv_loop_dev != '' roles: - - role: genlab.make_lv + - role: genlab.common.make_lv virtual_group: "group" logical_volume: "volume" - lvm_dev: "{{ loop_dev[0] }}" - size: 100%FREE - fs_type: ext4 - storage_mountpoint: "/mnt" - storage_mountpoint_mode: "0755" - mountpoint_owner: root - mountpoint_group: root - is_container: true + lvm_dev: "{{ make_lv_loop_dev[0] }}" + make_lv_size: 100%FREE + make_lv_fs_type: ext4 + make_lv_storage_mountpoint: "/mnt" + make_lv_storage_mountpoint_mode: "0755" + make_lv_mountpoint_owner: root + make_lv_mountpoint_group: root + make_lv_is_container: true diff --git a/roles/make_lv/molecule/default/verify.yml b/roles/make_lv/molecule/default/verify.yml index ab99d42..0d1f210 100644 --- a/roles/make_lv/molecule/default/verify.yml +++ b/roles/make_lv/molecule/default/verify.yml @@ -7,8 +7,8 @@ virtual_group: "group" logical_volume: "volume" lvm_dev: "/dev/loop0" - fs_type: ext4 - storage_mountpoint: "/mnt" + make_lv_fs_type: ext4 + make_lv_storage_mountpoint: "/mnt" tasks: - name: Get volume group list @@ -17,11 +17,11 @@ executable: /bin/bash changed_when: false failed_when: false - register: vg_list + register: make_lv_vg_list - name: Assert that volume group exists ansible.builtin.assert: - that: virtual_group in vg_list.stdout + that: virtual_group in make_lv_vg_list.stdout success_msg: "{{ lvm_dev }} has {{ virtual_group }} group" fail_msg: "{{ lvm_dev }} DOES NOT have {{ virtual_group }} group" @@ -31,11 +31,11 @@ executable: /bin/bash changed_when: false failed_when: false - register: lv_list + register: make_lv_lv_list - name: Assert that logical volume exists ansible.builtin.assert: - that: logical_volume in lv_list.stdout + that: logical_volume in make_lv_lv_list.stdout success_msg: "{{ virtual_group }} has {{ logical_volume }} volume" fail_msg: "{{ virtual_group }} DOES NOT have {{ logical_volume }} volume" @@ -43,23 +43,23 @@ ansible.builtin.command: "blkid /dev/mapper/{{ virtual_group }}-{{ logical_volume }} -o value -s TYPE" changed_when: false failed_when: false - register: current_fs + register: make_lv_current_fs - name: Assert that current filesystem is the required one ansible.builtin.assert: - that: current_fs.stdout == fs_type - success_msg: "{{ virtual_group }} - {{ logical_volume }} has {{ fs_type }} filesystem" - fail_msg: "{{ virtual_group }} - {{ logical_volume }} DOES NOT have {{ fs_type }} filesystem" + that: make_lv_current_fs.stdout == make_lv_fs_type + success_msg: "{{ virtual_group }} - {{ logical_volume }} has {{ make_lv_fs_type }} filesystem" + fail_msg: "{{ virtual_group }} - {{ logical_volume }} DOES NOT have {{ make_lv_fs_type }} filesystem" - name: Get logical volume mount info # noqa: command-instead-of-module — tells ansible-lint to ignore the error, because you can't actually # do it with ansible.builtin.mount as the linter begs me to do ansible.builtin.shell: "mount | grep -w '{{ virtual_group }}-{{ logical_volume }}'" - register: mount_check + register: make_lv_mount_check ignore_errors: true changed_when: false - name: Assert that volume is mounted ansible.builtin.assert: - that: mount_check.rc == 0 - success_msg: "{{ virtual_group }}-{{ logical_volume }} is mounted at {{ storage_mountpoint }}" - fail_msg: "{{ virtual_group }}-{{ logical_volume }} IS NOT mounted at {{ storage_mountpoint }}" + that: make_lv_mount_check.rc == 0 + success_msg: "{{ virtual_group }}-{{ logical_volume }} is mounted at {{ make_lv_storage_mountpoint }}" + fail_msg: "{{ virtual_group }}-{{ logical_volume }} IS NOT mounted at {{ make_lv_storage_mountpoint }}" diff --git a/roles/make_lv/tasks/main.yml b/roles/make_lv/tasks/main.yml index ac2537b..4be1026 100644 --- a/roles/make_lv/tasks/main.yml +++ b/roles/make_lv/tasks/main.yml @@ -13,11 +13,11 @@ executable: /bin/bash changed_when: false failed_when: false - register: vg_list + register: make_lv_vg_list - name: Assert that volume group exists ansible.builtin.assert: - that: virtual_group in vg_list.stdout + that: virtual_group in make_lv_vg_list.stdout success_msg: "{{ lvm_dev }} has {{ virtual_group }} group" fail_msg: "{{ lvm_dev }} DOES NOT have {{ virtual_group }} group" @@ -27,11 +27,11 @@ executable: /bin/bash changed_when: false failed_when: false - register: lv_list + register: make_lv_lv_list - name: Assert that logical volume exists ansible.builtin.assert: - that: logical_volume in lv_list.stdout + that: logical_volume in make_lv_lv_list.stdout success_msg: "{{ virtual_group }} has {{ logical_volume }} volume" fail_msg: "{{ virtual_group }} DOES NOT have {{ logical_volume }} volume" @@ -39,25 +39,25 @@ ansible.builtin.command: "blkid /dev/mapper/{{ virtual_group }}-{{ logical_volume }} -o value -s TYPE" changed_when: false failed_when: false - register: current_fs + register: make_lv_current_fs - name: Assert that current filesystem is the required one ansible.builtin.assert: - that: current_fs.stdout == fs_type - success_msg: "{{ virtual_group }} - {{ logical_volume }} has {{ fs_type }} filesystem" - fail_msg: "{{ virtual_group }} - {{ logical_volume }} DOES NOT have {{ fs_type }} filesystem" + that: make_lv_current_fs.stdout == make_lv_fs_type + success_msg: "{{ virtual_group }} - {{ logical_volume }} has {{ make_lv_fs_type }} filesystem" + fail_msg: "{{ virtual_group }} - {{ logical_volume }} DOES NOT have {{ make_lv_fs_type }} filesystem" rescue: - name: Unmount the main storage ansible.posix.mount: src: "/dev/{{ virtual_group }}/{{ logical_volume }}" - path: "{{ storage_mountpoint }}" + path: "{{ make_lv_storage_mountpoint }}" state: absent - name: Wipe disk signatures ansible.builtin.command: "wipefs -af {{ lvm_dev }}" - register: wipefs_result - changed_when: wipefs_result.rc == 0 + register: make_lv_wipefs_result + changed_when: make_lv_wipefs_result.rc == 0 - name: Create a volume group for the storage community.general.lvg: @@ -66,37 +66,37 @@ force: true - name: Create a logical volume for the storage - when: is_container + when: make_lv_is_container community.general.lvol: vg: "{{ virtual_group }}" lv: "{{ logical_volume }}" - size: "{{ size }}" + size: "{{ make_lv_size }}" opts: "--config 'activation/udev_rules=0'" - name: Create a logical volume for the storage - when: not is_container + when: not make_lv_is_container community.general.lvol: vg: "{{ virtual_group }}" lv: "{{ logical_volume }}" - size: "{{ size }}" + size: "{{ make_lv_size }}" opts: "--config 'activation/udev_rules=1'" - name: Create a filesystem for the storage community.general.filesystem: dev: "/dev/{{ virtual_group }}/{{ logical_volume }}" - fstype: "{{ fs_type }}" + fstype: "{{ make_lv_fs_type }}" - name: Create a mountpoint for the storage ansible.builtin.file: - path: "{{ storage_mountpoint }}" + path: "{{ make_lv_storage_mountpoint }}" state: directory - owner: "{{ mountpoint_owner }}" - group: "{{ mountpoint_group }}" - mode: "{{ storage_mountpoint_mode }}" + owner: "{{ make_lv_mountpoint_owner }}" + group: "{{ make_lv_mountpoint_group }}" + mode: "{{ make_lv_storage_mountpoint_mode }}" - name: Mount the main storage ansible.posix.mount: src: "/dev/{{ virtual_group }}/{{ logical_volume }}" - path: "{{ storage_mountpoint }}" - fstype: "{{ fs_type }}" + path: "{{ make_lv_storage_mountpoint }}" + fstype: "{{ make_lv_fs_type }}" state: mounted