From 8cc746fbfae96553d0800fc5b089cd0ddef5bfee Mon Sep 17 00:00:00 2001 From: Alexander Gorelyshev Date: Mon, 8 Dec 2025 12:20:01 +0400 Subject: [PATCH 1/4] Migrate the `genlab.mkfs` role --- roles/mkfs/README.md | 40 ++++++++++++++++++++++++ roles/mkfs/defaults/main.yml | 5 +++ roles/mkfs/handlers/main.yml | 1 + roles/mkfs/meta/main.yml | 17 ++++++++++ roles/mkfs/molecule/default/converge.yml | 22 +++++++++++++ roles/mkfs/molecule/default/molecule.yml | 27 ++++++++++++++++ roles/mkfs/molecule/default/verify.yml | 25 +++++++++++++++ roles/mkfs/tasks/main.yml | 8 +++++ roles/mkfs/vars/main.yml | 1 + 9 files changed, 146 insertions(+) create mode 100644 roles/mkfs/README.md create mode 100644 roles/mkfs/defaults/main.yml create mode 100644 roles/mkfs/handlers/main.yml create mode 100644 roles/mkfs/meta/main.yml create mode 100644 roles/mkfs/molecule/default/converge.yml create mode 100644 roles/mkfs/molecule/default/molecule.yml create mode 100644 roles/mkfs/molecule/default/verify.yml create mode 100644 roles/mkfs/tasks/main.yml create mode 100644 roles/mkfs/vars/main.yml diff --git a/roles/mkfs/README.md b/roles/mkfs/README.md new file mode 100644 index 0000000..cfa7a9b --- /dev/null +++ b/roles/mkfs/README.md @@ -0,0 +1,40 @@ +Role Name +========= + +Create a filesystem on the target device (thinly wraps `community.general.filesystem` module). + +Requirements +------------ + +Uses specific tools related to the fstype for creating or resizing a filesystem (`e2fsprogs`, `xfsprogs`, etc.). + +Uses generic tools mostly related to the OS, like `blkid`. + +Role Variables +-------------- + +- `mkfs_device`: (string) device that the filesystem should be created on +- `mkfs_type`: (string) type of the filesystem to be created +- `mkfs_opts`: (string) a list of options to be passed to `mkfs` (*not* a YAML array) +- `mkfs_state`: (string) `absent` or `present` +- `mkfs_force`: (boolean) overwrite an existing fs if there is one (default: `false`) + +Dependencies +------------ + +None + +Example Playbook +---------------- + +See: [converge.yml](molecule/default/converge.yml) + +License +------- + +BSD + +Author Information +------------------ + +corvus-migratorius@proton.me diff --git a/roles/mkfs/defaults/main.yml b/roles/mkfs/defaults/main.yml new file mode 100644 index 0000000..3525a8d --- /dev/null +++ b/roles/mkfs/defaults/main.yml @@ -0,0 +1,5 @@ +--- +# defaults file for mkfs +mkfs_opts: "" +mkfs_state: present +mkfs_force: false diff --git a/roles/mkfs/handlers/main.yml b/roles/mkfs/handlers/main.yml new file mode 100644 index 0000000..ed97d53 --- /dev/null +++ b/roles/mkfs/handlers/main.yml @@ -0,0 +1 @@ +--- diff --git a/roles/mkfs/meta/main.yml b/roles/mkfs/meta/main.yml new file mode 100644 index 0000000..002fbb6 --- /dev/null +++ b/roles/mkfs/meta/main.yml @@ -0,0 +1,17 @@ +--- +galaxy_info: + role_name: "mkfs" + author: "Alexander Gorelyshev" + company: "Genlab, LLC" + namespace: genlab + description: "Create a filesystem on a target device" + license: "GPL-2.0-or-later" + min_ansible_version: "2.1" + + platforms: + - name: "Ubuntu" + versions: [ "jammy", "noble" ] + + galaxy_tags: [] + +dependencies: [] diff --git a/roles/mkfs/molecule/default/converge.yml b/roles/mkfs/molecule/default/converge.yml new file mode 100644 index 0000000..aeadc57 --- /dev/null +++ b/roles/mkfs/molecule/default/converge.yml @@ -0,0 +1,22 @@ +--- +- name: Converge + hosts: all + + pre_tasks: + + - name: "Check if the disk file already exists" + ansible.builtin.stat: + path: /tmp/test_file + register: disk_file + + - name: "Create a file to act as a disk if it doesn't exist" + ansible.builtin.command: dd if=/dev/zero of=/tmp/test_file bs=1000000 count=100 + when: not disk_file.stat.exists + register: dd_output + changed_when: dd_output.rc != 0 + + roles: + - role: genlab.mkfs + mkfs_device: "/tmp/test_file" + mkfs_type: ext3 + mkfs_state: present diff --git a/roles/mkfs/molecule/default/molecule.yml b/roles/mkfs/molecule/default/molecule.yml new file mode 100644 index 0000000..d82158e --- /dev/null +++ b/roles/mkfs/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/mkfs/molecule/default/verify.yml b/roles/mkfs/molecule/default/verify.yml new file mode 100644 index 0000000..000a70d --- /dev/null +++ b/roles/mkfs/molecule/default/verify.yml @@ -0,0 +1,25 @@ +--- +- name: Verify + hosts: all + gather_facts: false + any_errors_fatal: true + + tasks: + - name: "Attach the file to a loop device" + ansible.builtin.command: losetup /dev/loop3 /tmp/test_file + register: loop_device + changed_when: loop_device.rc != 0 + + - name: "Verify the filesystem type" + ansible.builtin.command: blkid /dev/loop3 + register: blkid_output + changed_when: blkid_output.rc != 0 + + - name: "Ensure filesystem is ext3" + ansible.builtin.assert: + that: + - "'TYPE=\"ext3\"' in blkid_output.stdout" + + - name: "Explore stdout" + ansible.builtin.debug: + var: blkid_output.stdout diff --git a/roles/mkfs/tasks/main.yml b/roles/mkfs/tasks/main.yml new file mode 100644 index 0000000..d3c468f --- /dev/null +++ b/roles/mkfs/tasks/main.yml @@ -0,0 +1,8 @@ +--- +- name: "Create a filesystem on the given device" + community.general.filesystem: + fstype: "{{ mkfs_type }}" + dev: "{{ mkfs_device }}" + state: "{{ mkfs_state }}" + opts: "{{ mkfs_opts }}" + force: "{{ mkfs_force }}" diff --git a/roles/mkfs/vars/main.yml b/roles/mkfs/vars/main.yml new file mode 100644 index 0000000..ed97d53 --- /dev/null +++ b/roles/mkfs/vars/main.yml @@ -0,0 +1 @@ +--- From 60569899490e83dacc9e2dc7b61145ca558aea22 Mon Sep 17 00:00:00 2001 From: Alexander Gorelyshev Date: Mon, 8 Dec 2025 12:24:35 +0400 Subject: [PATCH 2/4] Touch another role to test Molecule workflow behavior with multiple roles --- roles/mount_device/requirements.yml | 3 --- 1 file changed, 3 deletions(-) delete mode 100644 roles/mount_device/requirements.yml diff --git a/roles/mount_device/requirements.yml b/roles/mount_device/requirements.yml deleted file mode 100644 index 3d5f1cd..0000000 --- a/roles/mount_device/requirements.yml +++ /dev/null @@ -1,3 +0,0 @@ -# requirements file ---- -collections: [] From cb482a66350e3ea72e71a6b1d8547a6ea9ccf0f0 Mon Sep 17 00:00:00 2001 From: Sergey Malyuk Date: Thu, 18 Dec 2025 10:41:25 +0300 Subject: [PATCH 3/4] fix ansible-lint errors --- roles/mkfs/meta/main.yml | 2 +- roles/mkfs/molecule/default/converge.yml | 10 +++++----- roles/mkfs/molecule/default/verify.yml | 12 ++++++------ 3 files changed, 12 insertions(+), 12 deletions(-) diff --git a/roles/mkfs/meta/main.yml b/roles/mkfs/meta/main.yml index 002fbb6..1fff67d 100644 --- a/roles/mkfs/meta/main.yml +++ b/roles/mkfs/meta/main.yml @@ -10,7 +10,7 @@ galaxy_info: platforms: - name: "Ubuntu" - versions: [ "jammy", "noble" ] + versions: ["jammy", "noble"] galaxy_tags: [] diff --git a/roles/mkfs/molecule/default/converge.yml b/roles/mkfs/molecule/default/converge.yml index aeadc57..93e2908 100644 --- a/roles/mkfs/molecule/default/converge.yml +++ b/roles/mkfs/molecule/default/converge.yml @@ -7,16 +7,16 @@ - name: "Check if the disk file already exists" ansible.builtin.stat: path: /tmp/test_file - register: disk_file + register: mkfs_disk_file - name: "Create a file to act as a disk if it doesn't exist" ansible.builtin.command: dd if=/dev/zero of=/tmp/test_file bs=1000000 count=100 - when: not disk_file.stat.exists - register: dd_output - changed_when: dd_output.rc != 0 + when: not mkfs_disk_file.stat.exists + register: mkfs_dd_output + changed_when: mkfs_dd_output.rc != 0 roles: - - role: genlab.mkfs + - role: genlab.common.mkfs mkfs_device: "/tmp/test_file" mkfs_type: ext3 mkfs_state: present diff --git a/roles/mkfs/molecule/default/verify.yml b/roles/mkfs/molecule/default/verify.yml index 000a70d..b9498c4 100644 --- a/roles/mkfs/molecule/default/verify.yml +++ b/roles/mkfs/molecule/default/verify.yml @@ -7,19 +7,19 @@ tasks: - name: "Attach the file to a loop device" ansible.builtin.command: losetup /dev/loop3 /tmp/test_file - register: loop_device - changed_when: loop_device.rc != 0 + register: mkfs_loop_device + changed_when: mkfs_loop_device.rc != 0 - name: "Verify the filesystem type" ansible.builtin.command: blkid /dev/loop3 - register: blkid_output - changed_when: blkid_output.rc != 0 + register: mkfs_blkid_output + changed_when: mkfs_blkid_output.rc != 0 - name: "Ensure filesystem is ext3" ansible.builtin.assert: that: - - "'TYPE=\"ext3\"' in blkid_output.stdout" + - "'TYPE=\"ext3\"' in mkfs_blkid_output.stdout" - name: "Explore stdout" ansible.builtin.debug: - var: blkid_output.stdout + var: mkfs_blkid_output.stdout From 3662d2a4bf44bf44cc7b073c245c744bdb7dde1d Mon Sep 17 00:00:00 2001 From: Sergey Malyuk Date: Thu, 18 Dec 2025 10:42:57 +0300 Subject: [PATCH 4/4] update meta --- README.md | 1 + galaxy.yml | 2 +- 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/README.md b/README.md index 7217749..e0e7812 100644 --- a/README.md +++ b/README.md @@ -13,6 +13,7 @@ - [ipmi_exporter](roles/ipmi_exporter/README.md) - [karma](roles/karma/README.md) - [loki](roles/loki/README.md) +- [mkfs](roles/mkfs/README.md) - [mount_device](roles/mount_device/README.md) - [nginx](roles/nginx/README.md) - [node_exporter](roles/node_exporter/README.md) diff --git a/galaxy.yml b/galaxy.yml index e8ba3ce..ce5ff52 100644 --- a/galaxy.yml +++ b/galaxy.yml @@ -1,7 +1,7 @@ --- namespace: genlab name: common -version: 0.20.0 +version: 0.21.0 readme: README.md authors: - Alexander Gorelyshev (corvus-migratorius@proton.me)