From 8cc746fbfae96553d0800fc5b089cd0ddef5bfee Mon Sep 17 00:00:00 2001 From: Alexander Gorelyshev Date: Mon, 8 Dec 2025 12:20:01 +0400 Subject: [PATCH] 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 @@ +---