diff --git a/roles/perccli/README.md b/roles/perccli/README.md new file mode 100644 index 0000000..5aa2a23 --- /dev/null +++ b/roles/perccli/README.md @@ -0,0 +1,27 @@ +genlab.perccli +========= + +Install perccli tool for Dell HBA and RAID adapters. + +Requirements +------------ + +None + +Role Variables +-------------- + +Example Playbook +---------------- + +See `molecule/default/converge.yml` + +License +------- + +MIT + +Author Information +------------------ + +corvus-migratorius@proton.me diff --git a/roles/perccli/defaults/main.yml b/roles/perccli/defaults/main.yml new file mode 100644 index 0000000..08cef57 --- /dev/null +++ b/roles/perccli/defaults/main.yml @@ -0,0 +1,4 @@ +--- +perccli_deb_name: perccli_007.2616.0000.0000_all.deb +perccli_version: "7.2616.0" +perccli_url: https://dl.dell.com/FOLDER11213122M/1/PERCCLI_{{ perccli_version }}_Linux.tar.gz diff --git a/roles/perccli/handlers/main.yml b/roles/perccli/handlers/main.yml new file mode 100644 index 0000000..ed97d53 --- /dev/null +++ b/roles/perccli/handlers/main.yml @@ -0,0 +1 @@ +--- diff --git a/roles/perccli/meta/main.yml b/roles/perccli/meta/main.yml new file mode 100644 index 0000000..a430261 --- /dev/null +++ b/roles/perccli/meta/main.yml @@ -0,0 +1,15 @@ +--- +galaxy_info: + role_name: perccli + namespace: genlab + author: "Alexander Gorelyshev" + company: "Genlab, LLC" + description: "Install perccli tool for Dell HBA and RAID adapters." + license: "GPL-2.0-or-later" + min_ansible_version: "2.1" + + platforms: + - name: "Ubuntu" + versions: ["jammy", "noble"] + +dependencies: [] diff --git a/roles/perccli/molecule/default/converge.yml b/roles/perccli/molecule/default/converge.yml new file mode 100644 index 0000000..38c90cc --- /dev/null +++ b/roles/perccli/molecule/default/converge.yml @@ -0,0 +1,6 @@ +--- +- name: Converge + hosts: all + roles: + - role: genlab.common.perccli + perccli_versionsion: "7.2616.0" diff --git a/roles/perccli/molecule/default/molecule.yml b/roles/perccli/molecule/default/molecule.yml new file mode 100644 index 0000000..d82158e --- /dev/null +++ b/roles/perccli/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/perccli/molecule/default/verify.yml b/roles/perccli/molecule/default/verify.yml new file mode 100644 index 0000000..c1fdab9 --- /dev/null +++ b/roles/perccli/molecule/default/verify.yml @@ -0,0 +1,23 @@ +--- +- name: Verify + hosts: all + gather_facts: false + tasks: + # https://github.com/ansible/molecule/issues/3587#issuecomment-1158650179 + - name: "Include default vars" + ansible.builtin.include_vars: + dir: "{{ lookup('env', 'MOLECULE_PROJECT_DIRECTORY') }}/defaults/" + extensions: ['yml'] + + - name: "Test perccli output" + register: perccli_version_get + changed_when: false + failed_when: '"PercCli SAS Customization Utility" not in perccli_version_get.stdout | trim' + ansible.builtin.command: + cmd: "perccli help | grep Ver." + + - name: "Assert perccli version correctness" + ansible.builtin.assert: + that: "perccli_version in perccli_version_get.stdout" + success_msg: "Expected perccli version is available: '{{ perccli_version }}'" + fail_msg: "Expected version '{{ perccli_version }}'; version string is '{{ perccli_version_get.stdout | trim }}'" diff --git a/roles/perccli/tasks/main.yml b/roles/perccli/tasks/main.yml new file mode 100644 index 0000000..30cb055 --- /dev/null +++ b/roles/perccli/tasks/main.yml @@ -0,0 +1,51 @@ +--- +- name: "Check prior perccli installation" + block: + - name: "Test perccli output" + register: perccli_version_get + changed_when: false + failed_when: '"PercCli SAS Customization Utility" not in perccli_version_get.stdout | trim' + ansible.builtin.command: + cmd: "perccli help | grep Ver." + + - name: "Assert perccli version correctness" + ansible.builtin.assert: + that: "perccli_version in perccli_version_get.stdout" + success_msg: "Expected perccli version is available: '{{ perccli_version }}'" + fail_msg: "Expected version '{{ perccli_version }}'; version string is '{{ perccli_version_get.stdout | trim }}'" + + + rescue: + - name: "Download and unarchive a perccli tarball" + ansible.builtin.unarchive: + src: "{{ perccli_url }}" + remote_src: true + dest: "/tmp" + group: root + + - name: "Install perccli using dpkg" + changed_when: false + ansible.builtin.command: + cmd: dpkg -i /tmp/{{ perccli_deb_name }} + + - name: "Set perccli executable permissions" + ansible.builtin.file: + path: /opt/MegaRAID/perccli/perccli64 + owner: root + group: root + mode: "0770" + + - name: "Link perccli to /usr/sbin" + ansible.builtin.file: + state: link + src: /opt/MegaRAID/perccli/perccli64 + dest: /usr/sbin/perccli + + # - name: "Install perccli" + # changed_when: false + # ansible.builtin.command: + # cmd: >- + # install /tmp/PERCCLI_{{ perccli_versions }}_Linux/perccli64 /usr/sbin/perccli + # -o root + # -g root + # -m 0770 diff --git a/roles/perccli/vars/main.yml b/roles/perccli/vars/main.yml new file mode 100644 index 0000000..ed97d53 --- /dev/null +++ b/roles/perccli/vars/main.yml @@ -0,0 +1 @@ +---