Fix: Docker deps conflits on CentOS 8 22/70522/25
authorAnil Belur <abelur@linuxfoundation.org>
Wed, 13 Dec 2023 09:59:12 +0000 (19:59 +1000)
committerAnil Belur <abelur@linuxfoundation.org>
Sat, 13 Jan 2024 14:44:30 +0000 (00:44 +1000)
Error:
Problem: package containers-common-2:1-57 from appstream
requires runc, but none of the providers can be installed

Problem: problem with installed package podman-3:4.6.1-5

Update pre-commit and molecule dependencies

Add GHA workflow to test ansible roles.

Issue: RELENG-5094
Change-Id: Ib61fc75c8775327e1f52fabd5252c9dd662655d9
Signed-off-by: Anil Belur <abelur@linuxfoundation.org>
.github/workflow/gerrit-verify.yaml [new file with mode: 0644]
.pre-commit-config.yaml
meta/main.yml
molecule/default/molecule.yml
molecule/default/prepare.yml [new file with mode: 0644]
tasks/main.yml
tox.ini

diff --git a/.github/workflow/gerrit-verify.yaml b/.github/workflow/gerrit-verify.yaml
new file mode 100644 (file)
index 0000000..dddfaf7
--- /dev/null
@@ -0,0 +1,165 @@
+---
+name: Gerrit Verify for Ansible roles
+
+# yamllint disable-line rule:truthy
+on:
+  workflow_dispatch:
+    inputs:
+      GERRIT_BRANCH:
+        description: "Branch that change is against"
+        required: true
+        type: string
+      GERRIT_CHANGE_ID:
+        description: "The ID for the change"
+        required: true
+        type: string
+      GERRIT_CHANGE_NUMBER:
+        description: "The Gerrit number"
+        required: true
+        type: string
+      GERRIT_CHANGE_URL:
+        description: "URL to the change"
+        required: true
+        type: string
+      GERRIT_EVENT_TYPE:
+        description: "Type of Gerrit event"
+        required: true
+        type: string
+      GERRIT_PATCHSET_NUMBER:
+        description: "The patch number for the change"
+        required: true
+        type: string
+      GERRIT_PATCHSET_REVISION:
+        description: "The revision sha"
+        required: true
+        type: string
+      GERRIT_PROJECT:
+        description: "Project in Gerrit"
+        required: true
+        type: string
+      GERRIT_REFSPEC:
+        description: "Gerrit refspec of change"
+        required: true
+        type: string
+
+concurrency:
+  group: ${{ github.event.inputs.GERRIT_CHANGE_ID || github.run_id }}
+  cancel-in-progress: true
+
+jobs:
+  prepare:
+    runs-on: ubuntu-latest
+    steps:
+      - name: Clear votes
+        uses: lfit/gerrit-review-action@v0.3
+        with:
+          host: ${{ vars.GERRIT_SERVER }}
+          username: ${{ vars.GERRIT_SSH_USER }}
+          key: ${{ secrets.GERRIT_SSH_PRIVKEY }}
+          known_hosts: ${{ vars.GERRIT_KNOWN_HOSTS }}
+          gerrit-change-number: ${{ inputs.GERRIT_CHANGE_NUMBER }}
+          gerrit-patchset-number: ${{ inputs.GERRIT_PATCHSET_NUMBER }}
+          vote-type: clear
+      - name: Allow replication
+        run: sleep 10s
+
+  actionlint:
+    needs: prepare
+    runs-on: ubuntu-latest
+    steps:
+      - uses: lfit/checkout-gerrit-change-action@v0.4
+        with:
+          gerrit-refspec: ${{ inputs.GERRIT_REFSPEC }}
+          delay: "0s"
+      - name: Download actionlint
+        id: get_actionlint
+        run: bash <(curl https://raw.githubusercontent.com/rhysd/actionlint/main/scripts/download-actionlint.bash)
+        shell: bash
+      - name: Check workflow files
+        run: ${{ steps.get_actionlint.outputs.executable }} -color
+        shell: bash
+
+  # run pre-commit tox env separately to get use of more parallel processing
+  pre-commit:
+    needs: prepare
+    runs-on: ubuntu-latest
+    steps:
+      - uses: lfit/checkout-gerrit-change-action@v0.4
+        with:
+          gerrit-refspec: ${{ inputs.GERRIT_REFSPEC }}
+          delay: "0s"
+      - uses: actions/setup-python@v4
+        with:
+          python-version: "3.8"
+      - name: Run static analysis and format checkers
+        run: pipx run pre-commit run --all-files --show-diff-on-failure
+
+  molecule:
+    needs: prepare
+    name: Molecule
+    runs-on: ubuntu-latest
+    strategy:
+      matrix:
+        distro:
+          - centos7
+          - centos8
+          - ubuntu1804
+          - ubuntu2004
+          - ubuntu2204
+      fail-fast: false
+    steps:
+      - name: Gerrit Checkout
+        # yamllint disable-line rule:line-length
+        uses: lfit/checkout-gerrit-change-action@70360ca2f8bee3e6a15224d8a03f8e017b1ac91f # v0.4
+        with:
+          gerrit-refspec: ${{ inputs.GERRIT_REFSPEC }}
+          delay: "0s"
+      - name: Install test dependencies.
+        run: |
+          python -m pip install --upgrade pip
+          pip3 install ansible ansible-lint molecule-plugins[docker] docker
+      - name: Run Molecule tests.
+        run: molecule test
+        env:
+          PY_COLORS: "1"
+          ANSIBLE_FORCE_COLOR: "1"
+          MOLECULE_DISTRO: ${{ matrix.distro }}
+
+  tox-verify:
+    needs: prepare
+    runs-on: ubuntu-latest
+    steps:
+      - uses: lfit/checkout-gerrit-change-action@v0.4
+        with:
+          gerrit-refspec: ${{ inputs.GERRIT_REFSPEC }}
+          delay: "0s"
+      - uses: actions/setup-python@v4
+        id: setup-python
+        with:
+          python-version: "3.11"
+      - name: Run tox
+        run: >-
+          pipx run tox
+
+  vote:
+    if: ${{ always() }}
+    needs:
+      [
+        prepare,
+        actionlint,
+        pre-commit,
+        tox-verify,
+      ]
+    runs-on: ubuntu-latest
+    steps:
+      - uses: technote-space/workflow-conclusion-action@v3
+      - name: Set vote
+        uses: lfit/gerrit-review-action@v0.3
+        with:
+          host: ${{ vars.GERRIT_SERVER }}
+          username: ${{ vars.GERRIT_SSH_USER }}
+          key: ${{ secrets.GERRIT_SSH_PRIVKEY }}
+          known_hosts: ${{ vars.GERRIT_KNOWN_HOSTS }}
+          gerrit-change-number: ${{ inputs.GERRIT_CHANGE_NUMBER }}
+          gerrit-patchset-number: ${{ inputs.GERRIT_PATCHSET_NUMBER }}
+          vote-type: ${{ env.WORKFLOW_CONCLUSION }}
index c1879a6..b10b09b 100644 (file)
@@ -1,11 +1,11 @@
 ---
 repos:
   - repo: https://github.com/pre-commit/pre-commit-hooks
-    rev: v1.3.0
+    rev: v4.1.0
     hooks:
       - id: trailing-whitespace
 
   - repo: https://github.com/jorisroovers/gitlint
-    rev: v0.11.0
+    rev: v0.17.0
     hooks:
       - id: gitlint
index 65d6949..0ae59e0 100644 (file)
@@ -1,5 +1,7 @@
 ---
 galaxy_info:
+  namespace: lfit
+  role_name: java_install
   author: Linux Foundation Release Engineering
   description: Install Docker CE on Debian and RedHat systems.
   company: The Linux Foundation
@@ -12,9 +14,13 @@ galaxy_info:
     - name: EL
       versions:
         - 7
+        - 8
+        - 9
+
     - name: Ubuntu
       versions:
-        - xenial
+        - bionic
+        - focal
 
   galaxy_tags:
     - containers
index 05b5dcb..c71d938 100644 (file)
@@ -12,15 +12,32 @@ platforms:
     image: centos:7
     groups:
       - centos
+      - centos_version
   - name: centos7-version
     image: centos:7
     groups:
       - centos
       - centos_version
-  - name: ubuntu1604
-    image: ubuntu:16.04
-  - name: ubuntu1604-version
-    image: ubuntu:16.04
+  - name: centos8
+    image: quay.io/centos/centos:stream8
+    groups:
+      - centos
+      - centos_version
+  - name: centos9
+    image: quay.io/centos/centos:stream9
+    groups:
+      - centos
+      - centos_version
+  - name: ubuntu1804
+    image: ubuntu:18.04
+  - name: ubuntu1804-version
+    image: ubuntu:18.04
+    groups:
+      - ubuntu_version
+  - name: ubuntu2004
+    image: ubuntu:20.04
+  - name: ubuntu2004-version
+    image: ubuntu:20.04
     groups:
       - ubuntu_version
 provisioner:
diff --git a/molecule/default/prepare.yml b/molecule/default/prepare.yml
new file mode 100644 (file)
index 0000000..5358b3b
--- /dev/null
@@ -0,0 +1,5 @@
+---
+- name: Prepare
+  hosts: all
+  gather_facts: false
+  tasks: []
index 5137160..2e9698a 100644 (file)
@@ -23,7 +23,7 @@
     - ansible_distribution == 'Ubuntu'
     - ubuntu_docker_version != 'latest'
 
-- name: Install Docker (RedHat)
+- name: Install Docker (RedHat 7)
   block:
     - name: Install Docker requirements
       yum:
         name: '{{ docker_ce_name }}'
         state: present
         update_cache: true
-  when: ansible_os_family == 'RedHat'
+  when: ansible_os_family == 'RedHat' and ansible_distribution_major_version == "7"
+  become: true
+
+- name: Install Docker (RedHat 8)
+  block:
+    - name: Remove confliting packages with Docker-ce
+      yum:
+        name:
+          - atomic-registries
+          - buildah
+          - containers-common
+          - container-tools
+          - docker
+          - podman
+          - runc
+          - skopeo
+        state: absent
+        update_cache: true
+    - name: Add Docker repository
+      get_url:
+        url: https://download.docker.com/linux/centos/docker-ce.repo
+        dest: /etc/yum.repos.d/docker-ce.repo
+        mode: 0644
+    - name: Install Docker requirements
+      yum:
+        name:
+          - docker-ce
+          - docker-ce-cli
+          - containerd.io
+          - containerd.io
+          - docker-buildx-plugin
+          - docker-compose-plugin
+        state: present
+        update_cache: true
+  when: ansible_os_family == 'RedHat' and ansible_distribution_major_version >= "8"
   become: true
 
 - name: Install Docker (Ubuntu)
@@ -51,9 +85,9 @@
         name:
           - apt-transport-https
           - ca-certificates
-          - curl
-          - software-properties-common
+          - gnupg
         state: present
+        update_cache: true
     - name: Add Docker apt-key
       apt_key:
         url: https://download.docker.com/linux/ubuntu/gpg
         state: present
     - name: Install Docker CE
       apt:
-        name: '{{ docker_ce_name }}'
+        name:
+          - docker-ce
+          - docker-ce-cli
+          - containerd.io
+          - containerd.io
+          - docker-buildx-plugin
+          - docker-compose-plugin
         state: present
         update_cache: true
   when: ansible_distribution == 'Ubuntu'
   become: true
 
 - name: Enable Docker service
-  service: name=docker enabled=true
+  systemd:
+    name: docker
+    enabled: true
   ignore_errors: true
+  when: ansible_os_family == 'RedHat'
   become: true
diff --git a/tox.ini b/tox.ini
index a0f2e9b..df67f4f 100644 (file)
--- a/tox.ini
+++ b/tox.ini
@@ -10,16 +10,38 @@ basepython = python3
 deps =
     ansible~=2.9.6
     ansible-lint~=4.2.0
+    detox~=0.18
     docker
-    molecule
-    pytest
+    yamllint
+    molecule~=3.0.8
+    molecule[docker]
+    pytest~=5.4.0
 passenv = *
+allowlist_externals =
+    ./molecule.sh
 commands =
     ./molecule.sh
 
 [testenv:pre-commit]
 basepython = python3
 deps = pre-commit
+allowlist_externals = /bin/sh
 commands =
-    pre-commit install --hook-type commit-msg
-    pre-commit run --all-files
+    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"