diff --git a/.ansible-lint b/.ansible-lint index 890b0fd..1053317 100644 --- a/.ansible-lint +++ b/.ansible-lint @@ -2,6 +2,7 @@ exclude_paths: - molecule/ - .pre-commit-config.yaml + - .github/ parseable: true diff --git a/.github/workflows/molecule.yml b/.github/workflows/molecule.yml index 1cbf3bd..27815b1 100644 --- a/.github/workflows/molecule.yml +++ b/.github/workflows/molecule.yml @@ -8,43 +8,75 @@ on: # yamllint disable-line rule:truthy pull_request: jobs: + setup: + name: Setup scenarios matrix + runs-on: ubuntu-22.04 + outputs: + scenarios: ${{ steps.matrix.outputs.scenarios }} + steps: + - uses: actions/checkout@v3 + - id: matrix + run: | + JSON="[" + + for s in $(find molecule -mindepth 1 -maxdepth 1 -type d -exec basename "{}" \;); do + JSON="${JSON}\"${s}\"," + done + + JSON="${JSON%?}" + JSON="$JSON]" + + echo "::set-output name=scenarios::$(echo $JSON)" + lint: - runs-on: ubuntu-20.04 + name: Lint + needs: + - setup + runs-on: ubuntu-22.04 steps: - name: checkout - uses: actions/checkout@v2 + uses: actions/checkout@v3 with: path: "${{ github.repository }}" - name: molecule - uses: robertdebock/molecule-action@2.6.17 + uses: robertdebock/molecule-action@4.0.9 with: command: lint + scenario: ${{ fromJson(needs.setup.outputs.scenarios)[0] }} test: + name: Scenario "${{ matrix.scenario }}" on ${{ matrix.config.image }}:${{ matrix.config.tag }} needs: - lint - runs-on: ubuntu-20.04 + - setup + runs-on: ubuntu-22.04 strategy: fail-fast: false matrix: + scenario: ${{ fromJson(needs.setup.outputs.scenarios) }} config: - image: "amazonlinux" tag: "latest" - - image: "fedora" - tag: "28" + - name: "redhat" + image: "registry.access.redhat.com/ubi8/ubi" + tag: "latest" - image: "debian" tag: "11" - image: "debian" tag: "10" - image: "ubuntu" - tag: "20.04" + tag: "22.04" + steps: - name: checkout - uses: actions/checkout@v2 + uses: actions/checkout@v3 with: path: "${{ github.repository }}" - name: molecule - uses: robertdebock/molecule-action@2.6.17 + uses: robertdebock/molecule-action@4.0.9 with: image: ${{ matrix.config.image }} tag: ${{ matrix.config.tag }} + scenario: ${{ matrix.scenario }} + env: + name: ${{ matrix.config.name }} diff --git a/README.md b/README.md index df1d670..5953e10 100644 --- a/README.md +++ b/README.md @@ -35,7 +35,7 @@ Ansible: ## :warning: Requirements -Ansible >= 2.9 +Ansible >= 2.10 ## :zap: Installation diff --git a/handlers/main.yml b/handlers/main.yml index 784cf59..439395a 100644 --- a/handlers/main.yml +++ b/handlers/main.yml @@ -1,4 +1,4 @@ - name: Restart sshd - service: + ansible.builtin.service: name: sshd state: restarted diff --git a/meta/main.yml b/meta/main.yml index 67f8c5d..437f06b 100644 --- a/meta/main.yml +++ b/meta/main.yml @@ -7,7 +7,7 @@ galaxy_info: license: "MPL2" - min_ansible_version: 2.9 + min_ansible_version: "2.10" galaxy_tags: ['claranet', 'motd', 'system', 'dynmotd', 'dynamic'] diff --git a/molecule/default/Dockerfile.j2 b/molecule/default/Dockerfile.j2 index 71c58f2..488e358 100644 --- a/molecule/default/Dockerfile.j2 +++ b/molecule/default/Dockerfile.j2 @@ -14,8 +14,11 @@ ENV {{ var }} {{ value }} {% endfor %} {% endif %} -RUN if [ $(command -v apt-get) ]; then apt-get update && apt-get install -y python3 sudo bash ca-certificates iproute2 systemd && apt-get clean; \ - elif [ $(command -v yum) ]; then yum install -y python3 sudo bash iproute systemd firewalld initscripts; \ - elif [ $(command -v zypper) ]; then zypper refresh && zypper install -y python sudo bash python-xml iproute2 && zypper clean -a; \ - elif [ $(command -v apk) ]; then apk update && apk add --no-cache python sudo bash ca-certificates; \ - elif [ $(command -v xbps-install) ]; then xbps-install -Syu && xbps-install -y python sudo bash ca-certificates iproute2 && xbps-remove -O; fi +RUN if [ $(command -v apt-get) ]; then apt-get update && apt-get install -y python3 sudo bash ca-certificates iproute2 systemd wget && apt-get clean; \ + elif [ $(command -v yum) ]; then yum install -y python3 sudo bash iproute systemd initscripts wget; \ + elif [ $(command -v zypper) ]; then zypper refresh && zypper install -y python sudo bash python-xml iproute2 wget && zypper clean -a; \ + elif [ $(command -v apk) ]; then apk update && apk add --no-cache python sudo bash ca-certificates wget; \ + elif [ $(command -v xbps-install) ]; then xbps-install -Syu && xbps-install -y python sudo bash ca-certificates iproute2 wget && xbps-remove -O; fi + +RUN wget -O /usr/bin/systemctl https://raw.githubusercontent.com/gdraheim/docker-systemctl-replacement/master/files/docker/systemctl3.py && \ + chmod +x /usr/bin/systemctl diff --git a/molecule/default/molecule.yml b/molecule/default/molecule.yml index fc6888f..54c4f7a 100644 --- a/molecule/default/molecule.yml +++ b/molecule/default/molecule.yml @@ -6,7 +6,9 @@ driver: name: docker platforms: - - name: claranet_motd_${image:-debian}-${tag:-latest} + # On "${name:-${image:-debian}", the last brace does not miss, it works like that... + # The env var "name" should be used when the image variable refers to a full registry path like registry.access.redhat.com/ubi8/ubi + - name: claranet_motd_${name:-${image:-debian}-${tag:-latest}-${scenario:-default} image: ${image:-debian}:${tag:-latest} privileged: true tty: true diff --git a/tasks/configure_motd.yml b/tasks/configure_motd.yml index db1266d..1e8b8cf 100644 --- a/tasks/configure_motd.yml +++ b/tasks/configure_motd.yml @@ -1,6 +1,6 @@ --- - name: configure_motd | Apply template {{ motd_template }} on {{ _motd_file_path }} - copy: + ansible.builtin.copy: content: "{{ motd_template_prepend + _motd_template_content + motd_template_append }}" dest: "{{ _motd_file_path }}" owner: root @@ -10,7 +10,7 @@ - molecule-idempotence-notest - name: configure_motd | Add pam_exec {{ _motd_file_path }} in pam - lineinfile: + ansible.builtin.lineinfile: path: "{{ item }}" line: session optional pam_exec.so type=open_session stdout {{ _motd_file_path }} loop: diff --git a/tasks/disable_default_motd.yml b/tasks/disable_default_motd.yml index 6e56314..90c8074 100644 --- a/tasks/disable_default_motd.yml +++ b/tasks/disable_default_motd.yml @@ -1,18 +1,18 @@ --- - name: disable_default_motd | Get stats of {{ _motd_sshd_config_file_path }} - stat: + ansible.builtin.stat: path: "{{ _motd_sshd_config_file_path }}" register: _motd_sshd_config_file_stat - name: disable_default_motd | Ensure PrintMotd is set to "no" in {{ _motd_sshd_config_file_path }} - lineinfile: + ansible.builtin.lineinfile: path: "{{ _motd_sshd_config_file_path }}" regexp: "^PrintMotd " line: PrintMotd no when: _motd_sshd_config_file_stat.stat.exists - name: disable_default_motd | Comment out pam_motd in pam - replace: + ansible.builtin.replace: path: "{{ item }}" regexp: '^(session\s+optional\s+pam_motd.so\s+.*)' replace: '# \1' diff --git a/tasks/main.yml b/tasks/main.yml index 8b64681..6fb1c92 100644 --- a/tasks/main.yml +++ b/tasks/main.yml @@ -1,7 +1,8 @@ --- -- name: include_tasks disable_default_motd.yml if motd_disable_default_motd is True - include_tasks: disable_default_motd.yml +- name: Include disable_default_motd.yml if motd_disable_default_motd is True + ansible.builtin.include_tasks: disable_default_motd.yml when: motd_disable_default_motd|bool -- include_tasks: configure_motd.yml +- name: Include configure_motd.yml + ansible.builtin.include_tasks: configure_motd.yml ...