diff --git a/Makefile b/Makefile index 11c32ad..398fee3 100644 --- a/Makefile +++ b/Makefile @@ -46,6 +46,7 @@ distribute-templates: cp -p templates/Dockerfile.j2 src/playbooks/roles/nkf/molecule/default/ cp -p templates/Dockerfile.j2 src/playbooks/roles/prompt/molecule/default/ cp -p templates/Dockerfile.j2 src/playbooks/roles/python/molecule/default/ + cp -p templates/Dockerfile.j2 src/playbooks/roles/qsv/molecule/default/ cp -p templates/Dockerfile.j2 src/playbooks/roles/rust/molecule/default/ cp -p templates/Dockerfile.j2 src/playbooks/roles/shellcheck/molecule/default/ cp -p templates/Dockerfile.j2 src/playbooks/roles/zip/molecule/default/ diff --git a/src/playbooks/roles/qsv/molecule/default/Dockerfile.j2 b/src/playbooks/roles/qsv/molecule/default/Dockerfile.j2 new file mode 100644 index 0000000..f6f68fb --- /dev/null +++ b/src/playbooks/roles/qsv/molecule/default/Dockerfile.j2 @@ -0,0 +1,11 @@ +FROM {{ item.image }} + +RUN apt-get update \ + && apt-get install -y \ + ca-certificates \ + python3 \ + software-properties-common \ + sudo \ + && adduser molecule \ + && adduser molecule sudo \ + && echo 'Defaults exempt_group=sudo' >> /etc/sudoers diff --git a/src/playbooks/roles/qsv/molecule/default/converge.yml b/src/playbooks/roles/qsv/molecule/default/converge.yml new file mode 100644 index 0000000..64129f4 --- /dev/null +++ b/src/playbooks/roles/qsv/molecule/default/converge.yml @@ -0,0 +1,5 @@ +--- +- name: Converge + hosts: all + roles: + - role: qsv diff --git a/src/playbooks/roles/qsv/molecule/default/molecule.yml b/src/playbooks/roles/qsv/molecule/default/molecule.yml new file mode 100644 index 0000000..4aa7e64 --- /dev/null +++ b/src/playbooks/roles/qsv/molecule/default/molecule.yml @@ -0,0 +1,14 @@ +--- +dependency: + name: galaxy +driver: + name: docker +platforms: + - name: qsv-noble + image: ubuntu:24.04 +provisioner: + name: ansible + options: + user: molecule +verifier: + name: ansible diff --git a/src/playbooks/roles/qsv/molecule/default/verify.yml b/src/playbooks/roles/qsv/molecule/default/verify.yml new file mode 100644 index 0000000..857cb8d --- /dev/null +++ b/src/playbooks/roles/qsv/molecule/default/verify.yml @@ -0,0 +1,21 @@ +--- +- name: verify + hosts: all + tasks: + - name: assert test environment + block: + - name: determine remote user + ansible.builtin.command: whoami + register: result + changed_when: False + - name: assert remote user + assert: + that: + - result.stdout == "molecule" + fail_msg: "actual result is {{ result.stdout }}" + - name: test command existence + ansible.builtin.command: bash -c "type {{ item }}" + register: result + changed_when: False + with_items: + - qsv diff --git a/src/playbooks/roles/qsv/tasks/main.yml b/src/playbooks/roles/qsv/tasks/main.yml new file mode 100644 index 0000000..deeb4ac --- /dev/null +++ b/src/playbooks/roles/qsv/tasks/main.yml @@ -0,0 +1,53 @@ +--- +- name: Apply dependent roles + ansible.builtin.include_role: + name: "{{ item }}" + with_items: + - zip + +- name: Check whether already installed qsv + ansible.builtin.command: |- + which qsv + register: checked_result + changed_when: False + failed_when: checked_result.rc not in [0, 1] + +- name: Install qsv + when: checked_result.rc == 1 + block: + - name: Install requirements + become: yes + ansible.builtin.apt: + name: + - stow + - name: Create temporary working directory + ansible.builtin.tempfile: + state: directory + register: tmpdir + - name: Download and unarchive prebuilt binaries + ansible.builtin.unarchive: + src: "https://github.com/dathere/qsv/releases/download/{{ qsv_version }}/qsv-{{ qsv_version }}-x86_64-unknown-linux-gnu.zip" + dest: "{{ tmpdir.path }}" + remote_src: yes + - name: Create directory to put executable + become: yes + ansible.builtin.file: + path: "/usr/local/stow/qsv-{{ qsv_version }}/bin" + state: directory + mode: "0755" + - name: Put executable + become: yes + # noqa no-changed-when + ansible.builtin.command: "cp -p {{ tmpdir.path }}/qsv /usr/local/stow/qsv-{{ qsv_version }}/bin/qsv" + - name: Stow package + become: yes + args: + chdir: /usr/local/stow + # noqa no-changed-when + ansible.builtin.shell: |- + ls | grep 'qsv-*' | xargs -n1 stow -D + stow -R qsv-{{ qsv_version }} + - name: Remove temporary working directory + ansible.builtin.file: + path: "{{ tmpdir.path }}" + state: absent diff --git a/src/playbooks/roles/qsv/vars/main.yml b/src/playbooks/roles/qsv/vars/main.yml new file mode 100644 index 0000000..6dd6018 --- /dev/null +++ b/src/playbooks/roles/qsv/vars/main.yml @@ -0,0 +1,2 @@ +--- +qsv_version: "4.0.0" diff --git a/src/playbooks/roles/rust/molecule/default/verify.yml b/src/playbooks/roles/rust/molecule/default/verify.yml index 6c9390f..d8577f2 100644 --- a/src/playbooks/roles/rust/molecule/default/verify.yml +++ b/src/playbooks/roles/rust/molecule/default/verify.yml @@ -23,4 +23,3 @@ - riff - rustc - rustup - - xsv diff --git a/src/playbooks/roles/rust/tasks/main.yml b/src/playbooks/roles/rust/tasks/main.yml index f655fc3..c9ec36f 100644 --- a/src/playbooks/roles/rust/tasks/main.yml +++ b/src/playbooks/roles/rust/tasks/main.yml @@ -47,5 +47,3 @@ ansible.builtin.import_tasks: csview.yml - name: Include task riff ansible.builtin.import_tasks: riff.yml -- name: Include task xsv - ansible.builtin.import_tasks: xsv.yml diff --git a/src/playbooks/roles/rust/tasks/xsv.yml b/src/playbooks/roles/rust/tasks/xsv.yml deleted file mode 100644 index 2904c08..0000000 --- a/src/playbooks/roles/rust/tasks/xsv.yml +++ /dev/null @@ -1,18 +0,0 @@ ---- -- name: Check whether already installed xsv - ansible.builtin.command: bash -cl "which xsv" - register: checked_result - changed_when: False - failed_when: checked_result.rc not in [0, 1] - -- name: Install xsv - when: checked_result.rc == 1 - block: - - name: Install requirements - become: yes - ansible.builtin.apt: - name: - - gcc - - name: Install xsv - # noqa no-changed-when - ansible.builtin.command: bash -cl "cargo install xsv" diff --git a/src/playbooks/well_tested.yml b/src/playbooks/well_tested.yml index a32038a..f928d99 100644 --- a/src/playbooks/well_tested.yml +++ b/src/playbooks/well_tested.yml @@ -9,6 +9,7 @@ - nkf - prompt - python + - qsv - rust - shellcheck - zip