From: Anil Belur Date: Mon, 29 Jan 2024 11:17:08 +0000 (+1000) Subject: Fix: Update protobuf-install molecule role X-Git-Url: https://gerrit.linuxfoundation.org/infra/gitweb?a=commitdiff_plain;h=refs%2Fchanges%2F79%2F72579%2F22;p=ansible%2Froles%2Fprotobuf-install.git Fix: Update protobuf-install molecule role Modernize the molecule test formats and update the role. Update tox and pre-commit dependencies. Ref: https://github.com/ansible/molecule/issues/1042 Change-Id: Iff5078c54ddc5768b6d2540129df17275c83d77b Signed-off-by: Anil Belur --- diff --git a/.pre-commit-config.yaml b/.pre-commit-config.yaml index c1879a6..1af1238 100644 --- a/.pre-commit-config.yaml +++ b/.pre-commit-config.yaml @@ -1,11 +1,11 @@ --- repos: - repo: https://github.com/pre-commit/pre-commit-hooks - rev: v1.3.0 + rev: v4.5.0 hooks: - id: trailing-whitespace - repo: https://github.com/jorisroovers/gitlint - rev: v0.11.0 + rev: v0.19.1 hooks: - id: gitlint diff --git a/.yamllint b/.yamllint index 3a2255e..894450c 100644 --- a/.yamllint +++ b/.yamllint @@ -1,3 +1,4 @@ +--- extends: default rules: @@ -8,6 +9,7 @@ rules: max-spaces-inside: 1 level: error line-length: disable - # NOTE(retr0h): Templates no longer fail this lint rule. - # Uncomment if running old Molecule templates. - # truthy: disable + truthy: disable + +ignore: | + .tox/ diff --git a/defaults/main.yml b/defaults/main.yml index 8880f76..8d25686 100644 --- a/defaults/main.yml +++ b/defaults/main.yml @@ -1,3 +1,3 @@ --- -protobuf_version: 3.5.1 -protoc_checksum: sha256:cd40f10bcdaff36429ec4652210f2bb8d6c7349e7b78f3a38ef42168401d7285 +protobuf_version: 25.2 +protoc_checksum: sha256:78ab9c3288919bdaa6cfcec6127a04813cf8a0ce406afa625e48e816abee2878 diff --git a/meta/main.yml b/meta/main.yml index 21363a2..92fae32 100644 --- a/meta/main.yml +++ b/meta/main.yml @@ -1,5 +1,7 @@ --- galaxy_info: + namespace: lfit + role_name: protobuf_install author: Linux Foundation Release Engineering description: Install Google Protocol Buffers compiler company: The Linux Foundation. @@ -13,9 +15,13 @@ galaxy_info: - name: EL versions: - 7 + - 8 + - 9 + - name: Ubuntu versions: - - xenial + - bionic + - focal galaxy_tags: - compiler diff --git a/molecule/default/Dockerfile.j2 b/molecule/default/Dockerfile.j2 deleted file mode 100644 index f8b4e75..0000000 --- a/molecule/default/Dockerfile.j2 +++ /dev/null @@ -1,9 +0,0 @@ -# Molecule managed - -FROM {{ item.image }} - -RUN if [ $(command -v apt-get) ]; then apt-get update && apt-get upgrade -y && apt-get install -y python sudo bash ca-certificates && apt-get clean; \ - elif [ $(command -v dnf) ]; then dnf makecache && dnf --assumeyes install python sudo python-devel python2-dnf bash && dnf clean all; \ - elif [ $(command -v yum) ]; then yum makecache fast && yum update -y && yum install -y python sudo yum-plugin-ovl bash && sed -i 's/plugins=0/plugins=1/g' /etc/yum.conf && yum clean all; \ - elif [ $(command -v zypper) ]; then zypper refresh && zypper update -y && zypper install -y python sudo bash python-xml && zypper clean -a; \ - elif [ $(command -v apk) ]; then apk update && apk add --no-cache python sudo bash ca-certificates; fi diff --git a/molecule/default/INSTALL.rst b/molecule/default/INSTALL.rst deleted file mode 100644 index 43a584f..0000000 --- a/molecule/default/INSTALL.rst +++ /dev/null @@ -1,16 +0,0 @@ -******* -Install -******* - -Requirements -============ - -* Docker Engine -* docker-py - -Install -======= - -.. code-block:: bash - - $ sudo pip install docker-py diff --git a/molecule/default/converge.yml b/molecule/default/converge.yml new file mode 100644 index 0000000..1e30adc --- /dev/null +++ b/molecule/default/converge.yml @@ -0,0 +1,5 @@ +--- +- name: Converge + hosts: all + roles: + - role: "{{ lookup('env', 'MOLECULE_PROJECT_DIRECTORY') | basename }}" diff --git a/molecule/default/create.yml b/molecule/default/create.yml deleted file mode 100644 index bfb2149..0000000 --- a/molecule/default/create.yml +++ /dev/null @@ -1,59 +0,0 @@ ---- -- name: Create - hosts: localhost - connection: local - gather_facts: false - no_log: "{{ not lookup('env', 'MOLECULE_DEBUG') | bool }}" - vars: - molecule_file: "{{ lookup('env', 'MOLECULE_FILE') }}" - molecule_ephemeral_directory: "{{ lookup('env', 'MOLECULE_EPHEMERAL_DIRECTORY') }}" - molecule_scenario_directory: "{{ lookup('env', 'MOLECULE_SCENARIO_DIRECTORY') }}" - molecule_yml: "{{ lookup('file', molecule_file) | molecule_from_yaml }}" - tasks: - - name: Create Dockerfiles from image names - template: - src: "{{ molecule_scenario_directory }}/Dockerfile.j2" - dest: "{{ molecule_ephemeral_directory }}/Dockerfile_{{ item.image | regex_replace('[^a-zA-Z0-9_]', '_') }}" - with_items: "{{ molecule_yml.platforms }}" - register: platforms - - - name: Discover local Docker images - docker_image_facts: - name: "molecule_local/{{ item.item.name }}" - with_items: "{{ platforms.results }}" - register: docker_images - - - name: Build an Ansible compatible image - docker_image: - path: "{{ molecule_ephemeral_directory }}" - name: "molecule_local/{{ item.item.image }}" - dockerfile: "{{ item.item.dockerfile | default(item.invocation.module_args.dest) }}" - force: "{{ item.item.force | default(true) }}" - with_items: "{{ platforms.results }}" - when: platforms.changed or docker_images.results | map(attribute='images') | select('equalto', []) | list | count >= 0 - - - name: Create molecule instance(s) - docker_container: - name: "{{ item.name }}" - hostname: "{{ item.name }}" - image: "molecule_local/{{ item.image }}" - state: started - recreate: false - log_driver: syslog - command: "{{ item.command | default('bash -c \"while true; do sleep 10000; done\"') }}" - privileged: "{{ item.privileged | default(omit) }}" - volumes: "{{ item.volumes | default(omit) }}" - capabilities: "{{ item.capabilities | default(omit) }}" - ports: "{{ item.exposed_ports | default(omit) }}" - register: server - with_items: "{{ molecule_yml.platforms }}" - async: 7200 - poll: 0 - - - name: Wait for instance(s) creation to complete - async_status: - jid: "{{ item.ansible_job_id }}" - register: docker_jobs - until: docker_jobs.finished - retries: 300 - with_items: "{{ server.results }}" diff --git a/molecule/default/destroy.yml b/molecule/default/destroy.yml deleted file mode 100644 index 3ce7478..0000000 --- a/molecule/default/destroy.yml +++ /dev/null @@ -1,27 +0,0 @@ ---- -- name: Destroy - hosts: localhost - connection: local - gather_facts: false - no_log: "{{ not lookup('env', 'MOLECULE_DEBUG') | bool }}" - vars: - molecule_file: "{{ lookup('env', 'MOLECULE_FILE') }}" - molecule_yml: "{{ lookup('file', molecule_file) | molecule_from_yaml }}" - tasks: - - name: Destroy molecule instance(s) - docker_container: - name: "{{ item.name }}" - state: absent - force_kill: "{{ item.force_kill | default(true) }}" - register: server - with_items: "{{ molecule_yml.platforms }}" - async: 7200 - poll: 0 - - - name: Wait for instance(s) deletion to complete - async_status: - jid: "{{ item.ansible_job_id }}" - register: docker_jobs - until: docker_jobs.finished - retries: 300 - with_items: "{{ server.results }}" diff --git a/molecule/default/molecule.yml b/molecule/default/molecule.yml index 02ec84c..2e2b224 100644 --- a/molecule/default/molecule.yml +++ b/molecule/default/molecule.yml @@ -3,29 +3,18 @@ dependency: name: galaxy driver: name: docker -lint: - name: yamllint platforms: - - name: instance + - name: centos7 image: centos:7 + - name: centos8 + image: quay.io/centos/centos:stream8 + - name: ubuntu1804 + image: ubuntu:18.04 + - name: ubuntu2004 + image: ubuntu:20.04 provisioner: name: ansible - lint: - name: ansible-lint scenario: name: default - test_sequence: - - lint - - destroy - - dependency - - syntax - - create - - prepare - - converge - - side_effect - - verify - - destroy verifier: name: testinfra - lint: - name: flake8 diff --git a/molecule/default/playbook.yml b/molecule/default/playbook.yml deleted file mode 100644 index b837cd7..0000000 --- a/molecule/default/playbook.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -- name: Converge - hosts: all - roles: - - role: protobuf-install diff --git a/molecule/default/prepare.yml b/molecule/default/prepare.yml index 42e1b8c..0ae381f 100644 --- a/molecule/default/prepare.yml +++ b/molecule/default/prepare.yml @@ -1,7 +1,26 @@ --- - name: Prepare hosts: all - gather_facts: false + gather_facts: true + tasks: - - name: Install Unzip - package: name=unzip state=present + - name: Update APT cache + apt: + update_cache: yes + when: ansible_distribution == 'Ubuntu' + become: true + + - name: Install cron + yum: + name: cronie + state: present + when: ansible_os_family == 'RedHat' + become: true + + - name: Install packages + package: + name: + - zip + - unzip + state: present + become: yes diff --git a/molecule/default/tests/test_default.py b/molecule/default/tests/test_default.py deleted file mode 100644 index eedd64a..0000000 --- a/molecule/default/tests/test_default.py +++ /dev/null @@ -1,14 +0,0 @@ -import os - -import testinfra.utils.ansible_runner - -testinfra_hosts = testinfra.utils.ansible_runner.AnsibleRunner( - os.environ['MOLECULE_INVENTORY_FILE']).get_hosts('all') - - -def test_hosts_file(host): - f = host.file('/etc/hosts') - - assert f.exists - assert f.user == 'root' - assert f.group == 'root' diff --git a/tasks/main.yml b/tasks/main.yml index a7a3b92..2aa7cb2 100644 --- a/tasks/main.yml +++ b/tasks/main.yml @@ -1,23 +1,25 @@ --- - name: 'Download protoc binary {{ protobuf_version }}' - get_url: + ansible.builtin.get_url: url: https://github.com/google/protobuf/releases/download/v{{ protobuf_version }}/protoc-{{ protobuf_version }}-linux-x86_64.zip dest: /tmp/protobuf-{{ protobuf_version }}-linux-x86_64.zip checksum: '{{ protoc_checksum }}' + mode: '0644' - name: Ensure protoc unpack directory exists - file: + ansible.builtin.file: path: /tmp/protoc state: directory + mode: '0755' -- name: 'Unarchive protoc {{ protobuf_version }} binary' - unarchive: +- name: 'Unarchive protoc binary: {{ protobuf_version }}' + ansible.builtin.unarchive: src: /tmp/protobuf-{{ protobuf_version }}-linux-x86_64.zip dest: /tmp/protoc remote_src: true - name: Copy Protoc binary to /usr/local/bin - copy: + ansible.builtin.copy: src: /tmp/protoc/bin/protoc dest: /usr/local/bin/protoc mode: 0755 @@ -26,12 +28,14 @@ become: true - name: Copy Protoc includes to /usr/local/include - command: cp -r /tmp/protoc/include/google /usr/local/include + ansible.builtin.command: cp -r /tmp/protoc/include/google /usr/local/include when: true become: true + args: + creates: "/usr/local/include/google/*" - name: Set permissions on /usr/local/include/google - file: + ansible.builtin.file: path: /usr/local/include/google mode: 0755 owner: root diff --git a/tox.ini b/tox.ini index c486b78..5ad109a 100644 --- a/tox.ini +++ b/tox.ini @@ -2,7 +2,8 @@ minversion = 1.6 envlist = molecule, - pre-commit + pre-commit, + lint skipsdist=true [testenv:molecule] @@ -11,13 +12,46 @@ deps = ansible docker molecule + molecule-docker passenv = * commands = ./molecule.sh +allowlist_externals = + ./molecule.sh [testenv:pre-commit] -basepython = python3 +allowlist_externals = + /bin/sh deps = pre-commit +passenv = HOME +commands = + pre-commit run --all-files --show-diff-on-failure + /bin/sh -c 'if ! git config --get user.name > /dev/null; then \ + git config --global --add user.name "CI"; \ + touch .git/REMOVE_USERNAME; fi' + /bin/sh -c 'if ! git config --get user.email > /dev/null; then \ + git config --global --add user.email "ci@example.org"; \ + touch .git/REMOVE_USEREMAIL; fi' + /bin/sh -c "if [ -f .git/COMMIT_EDITMSG ]; then \ + cp .git/COMMIT_EDITMSG .git/COMMIT_MSGTOX; else \ + git log HEAD -n1 | tail -n +5 | cut -c 5- > .git/COMMIT_MSGTOX; fi" + pre-commit run gitlint --hook-stage commit-msg --commit-msg-filename .git/COMMIT_MSGTOX + /bin/sh -c "rm -f .git/COMMIT_MSGTOX" + /bin/sh -c "if [ -f .git/REMOVE_USERNAME ]; then \ + git config --global --unset user.name; \ + rm -f .git/REMOVE_USERNAME; fi" + /bin/sh -c "if [ -f .git/REMOVE_USEREMAIL ]; then \ + git config --global --unset user.email; \ + rm -f .git/REMOVE_USEREMAIL; fi" + +[testenv:lint] +basepython = python310 +deps = + ansible-lint + yamllint commands = - pre-commit install --hook-type commit-msg - pre-commit run --all-files + /bin/bash -c "ansible-lint tasks/*.yml" + yamllint . +allowlist_externals = + /bin/bash + yamllint