From 612b60766eb2f398b3cb650c4c64bfcfeb6c6162 Mon Sep 17 00:00:00 2001
From: Rafael Guterres Jeffman <rjeffman@redhat.com>
Date: Tue, 10 Aug 2021 10:54:51 -0300
Subject: [PATCH] CI: Test modules against different Ansible versions.

Currently, upstream CI test documentation against different Ansible
versions, but playbook tests are only executed with Ansible 2.9 series.
This patch add support for running playbook tests against Ansible 2.9,
ansible-core 2.11, and against latest version of Ansible.

As running all the tests for every PR would take too long, the tests
for every PR use only Anisble 2.9, and are executed on Fedora-latest
and CentOS 7 and 8.

A new pipeline for nightly tests was added, which runs the tests in the
same distros, using Ansible 2.9, latest and Ansible-core 2.11.
---
 .../resources/playbooks/prepare-common.yml    |   8 +-
 molecule/resources/playbooks/prepare.yml      |   4 +-
 requirements-tests.txt                        |   1 -
 tests/azure/azure-pipelines.yml               |  34 +++---
 tests/azure/nightly.yml                       | 102 ++++++++++++++++++
 tests/azure/templates/group_tests.yml         |   6 ++
 tests/azure/templates/playbook_tests.yml      |   6 +-
 tests/azure/templates/pytest_tests.yml        |  24 ++---
 8 files changed, 145 insertions(+), 40 deletions(-)
 create mode 100644 tests/azure/nightly.yml

diff --git a/molecule/resources/playbooks/prepare-common.yml b/molecule/resources/playbooks/prepare-common.yml
index 2292e4c9..1e1a6022 100644
--- a/molecule/resources/playbooks/prepare-common.yml
+++ b/molecule/resources/playbooks/prepare-common.yml
@@ -1,7 +1,7 @@
 ---
 # IPA depends on IPv6 and without it dirsrv service won't start.
 - name: Ensure IPv6 is ENABLED
-  sysctl:
+  ansible.posix.sysctl:
     name: "{{ item.name }}"
     value: "{{ item.value }}"
     sysctl_set: yes
@@ -19,14 +19,14 @@
 #   This is needed in some IPA versions in order to get KRA enabled.
 #   See https://pagure.io/freeipa/issue/7906 for more information.
 - name: stat protected_regular
-  stat:
+  ansible.builtin.stat:
     path: /proc/sys/fs/protected_regular
   register: result
 
 - name: Ensure fs.protected_regular is disabled
-  sysctl:
+  ansible.posix.sysctl:
     name: fs.protected_regular
-    value: '0'
+    value: 0
     sysctl_set: yes
     state: present
     reload: yes
diff --git a/molecule/resources/playbooks/prepare.yml b/molecule/resources/playbooks/prepare.yml
index 761d4a95..87c34860 100644
--- a/molecule/resources/playbooks/prepare.yml
+++ b/molecule/resources/playbooks/prepare.yml
@@ -11,7 +11,7 @@
   #
   # To avoid this problem we create the directories before starting IPA.
   - name: Ensure lock dirs for DS exists
-    file:
+    ansible.builtin.file:
       state: directory
       owner: dirsrv
       group: dirsrv
@@ -22,6 +22,6 @@
       - /var/lock/dirsrv/slapd-TEST-LOCAL/
 
   - name: Ensure IPA server is up an running
-    service:
+    ansible.builtin.service:
       name: ipa
       state: started
diff --git a/requirements-tests.txt b/requirements-tests.txt
index 11273882..4e75ad60 100644
--- a/requirements-tests.txt
+++ b/requirements-tests.txt
@@ -3,5 +3,4 @@ pytest>=2.7
 pytest-sourceorder>=0.5
 pytest-split-tests>=1.0.3
 pytest-testinfra>=5.0
-jmespath>=0.9  # needed for the `json_query` filter
 pyyaml>=3
diff --git a/tests/azure/azure-pipelines.yml b/tests/azure/azure-pipelines.yml
index 997066bd..2feb7fa6 100644
--- a/tests/azure/azure-pipelines.yml
+++ b/tests/azure/azure-pipelines.yml
@@ -1,43 +1,41 @@
-# Using Ansible 2.10.0a1 under Azure there might happen that the output of a
-# task is changed if a module uses no_log = True for an attribute.
-#
-# For example, if the output of the module should contain "changed: True", and
-# an attribute with no_log set contains the value `hang` it might happen that
-# the output is modified to "c******ed: True", and if this output is further
-# processed (registering the result and comparing the value of `changed`),
-# the test might fail, but not because of module code, but because of unexpected
-# output processing.
-#
-# This behavior was, currently, only reproduced with Ansible 2.10.0a1 running
-# under Azure.
 ---
 trigger:
 - master
 
 pool:
-  vmImage: 'ubuntu-20.04'
+  vmImage: 'ubuntu-latest'
 
 stages:
-- stage: Centos7
+
+# Fedora
+
+- stage: FedoraLatest_Ansible_2_9
   dependsOn: []
   jobs:
   - template: templates/group_tests.yml
     parameters:
       build_number: $(Build.BuildNumber)
-      scenario: centos-7
+      scenario: fedora-latest
+      ansible_version: ">=2.9,<2.10"
 
-- stage: Centos8
+# CentOS 8
+
+- stage: CentOS8_Ansible_2_9
   dependsOn: []
   jobs:
   - template: templates/group_tests.yml
     parameters:
       build_number: $(Build.BuildNumber)
       scenario: centos-8
+      ansible_version: ">=2.9,<2.10"
+
+# CentOS 7
 
-- stage: FedoraLatest
+- stage: CentOS7_Ansible_2_9
   dependsOn: []
   jobs:
   - template: templates/group_tests.yml
     parameters:
       build_number: $(Build.BuildNumber)
-      scenario: fedora-latest
+      scenario: centos-7
+      ansible_version: ">=2.9,<2.10"
diff --git a/tests/azure/nightly.yml b/tests/azure/nightly.yml
new file mode 100644
index 00000000..83bce8b5
--- /dev/null
+++ b/tests/azure/nightly.yml
@@ -0,0 +1,102 @@
+---
+schedules:
+- cron: "0 19 * * *"
+  displayName: Nightly Builds
+  branches:
+    include:
+    - master
+  always: true
+
+trigger: none
+
+pool:
+  vmImage: 'ubuntu-latest'
+
+stages:
+
+# Fedora
+
+- stage: FedoraLatest_Ansible_2_9
+  dependsOn: []
+  jobs:
+  - template: templates/group_tests.yml
+    parameters:
+      build_number: $(Build.BuildNumber)
+      scenario: fedora-latest
+      ansible_version: ">=2.9,<2.10"
+
+- stage: FedoraLatest_Ansible_Core_2_11
+  dependsOn: []
+  jobs:
+  - template: templates/group_tests.yml
+    parameters:
+      build_number: $(Build.BuildNumber)
+      scenario: fedora-latest
+      ansible_version: "-core >=2.11,<2.12"
+
+- stage: FedoraLatest_Ansible_latest
+  dependsOn: []
+  jobs:
+  - template: templates/group_tests.yml
+    parameters:
+      build_number: $(Build.BuildNumber)
+      scenario: fedora-latest
+      ansible_version: ""
+
+# CentOS 8
+
+- stage: CentOS8_Ansible_2_9
+  dependsOn: []
+  jobs:
+  - template: templates/group_tests.yml
+    parameters:
+      build_number: $(Build.BuildNumber)
+      scenario: centos-8
+      ansible_version: ">=2.9,<2.10"
+
+- stage: CentOS8_Ansible_Core_2_11
+  dependsOn: []
+  jobs:
+  - template: templates/group_tests.yml
+    parameters:
+      build_number: $(Build.BuildNumber)
+      scenario: centos-8
+      ansible_version: "-core >=2.11,<2.12"
+
+- stage: CentOS8_Ansible_latest
+  dependsOn: []
+  jobs:
+  - template: templates/group_tests.yml
+    parameters:
+      build_number: $(Build.BuildNumber)
+      scenario: centos-8
+      ansible_version: ""
+
+# CentOS 7
+
+- stage: CentOS7_Ansible_2_9
+  dependsOn: []
+  jobs:
+  - template: templates/group_tests.yml
+    parameters:
+      build_number: $(Build.BuildNumber)
+      scenario: centos-7
+      ansible_version: ">=2.9,<2.10"
+
+- stage: CentOS7_Ansible_Core_2_11
+  dependsOn: []
+  jobs:
+  - template: templates/group_tests.yml
+    parameters:
+      build_number: $(Build.BuildNumber)
+      scenario: centos-7
+      ansible_version: "-core >=2.11,<2.12"
+
+- stage: CentOS7_Ansible_latest
+  dependsOn: []
+  jobs:
+  - template: templates/group_tests.yml
+    parameters:
+      build_number: $(Build.BuildNumber)
+      scenario: centos-7
+      ansible_version: ""
diff --git a/tests/azure/templates/group_tests.yml b/tests/azure/templates/group_tests.yml
index 4cabeab1..356a6c81 100644
--- a/tests/azure/templates/group_tests.yml
+++ b/tests/azure/templates/group_tests.yml
@@ -5,6 +5,9 @@ parameters:
     default: centos-8
   - name: build_number
     type: string
+  - name: ansible_version
+    type: string
+    default: ""
 
 jobs:
 - template: playbook_tests.yml
@@ -13,6 +16,7 @@ jobs:
     number_of_groups: 3
     build_number: ${{ parameters.build_number }}
     scenario: ${{ parameters.scenario }}
+    ansible_version: ${{ parameters.ansible_version }}
 
 - template: playbook_tests.yml
   parameters:
@@ -20,6 +24,7 @@ jobs:
     number_of_groups: 3
     build_number: ${{ parameters.build_number }}
     scenario: ${{ parameters.scenario }}
+    ansible_version: ${{ parameters.ansible_version }}
 
 - template: playbook_tests.yml
   parameters:
@@ -27,6 +32,7 @@ jobs:
     number_of_groups: 3
     build_number: ${{ parameters.build_number }}
     scenario: ${{ parameters.scenario }}
+    ansible_version: ${{ parameters.ansible_version }}
 
 - template: pytest_tests.yml
   parameters:
diff --git a/tests/azure/templates/playbook_tests.yml b/tests/azure/templates/playbook_tests.yml
index c5f2d160..d2955339 100644
--- a/tests/azure/templates/playbook_tests.yml
+++ b/tests/azure/templates/playbook_tests.yml
@@ -11,7 +11,7 @@ parameters:
     default: centos-8
   - name: ansible_version
     type: string
-    default: ">=2.9,<2.10"
+    default: ""
   - name: python_version
     type: string
     default: 3.6
@@ -34,8 +34,8 @@ jobs:
         "ansible${{ parameters.ansible_version }}"
     displayName: Install molecule and Ansible
 
-  - script: |
-      ansible-galaxy collection install community.docker
+  - script: ansible-galaxy collection install community.docker ansible.posix
+    displayName: Install Ansible collections
 
   - script: pip install -r requirements-tests.txt
     displayName: Install dependencies
diff --git a/tests/azure/templates/pytest_tests.yml b/tests/azure/templates/pytest_tests.yml
index 265a9191..dc495879 100644
--- a/tests/azure/templates/pytest_tests.yml
+++ b/tests/azure/templates/pytest_tests.yml
@@ -1,15 +1,15 @@
 ---
 parameters:
-- name: build_number
-  type: string
-- name: scenario
-  type: string
-- name: ansible_version
-  type: string
-  default: ">=2.9,<2.10"
-- name: python_version
-  type: string
-  default: 3.6
+  - name: build_number
+    type: string
+  - name: scenario
+    type: string
+  - name: ansible_version
+    type: string
+    default: ""
+  - name: python_version
+    type: string
+    default: 3.6
 
 jobs:
 - job: Test_PyTests
@@ -26,8 +26,8 @@ jobs:
         "ansible${{ parameters.ansible_version }}"
     displayName: Install molecule and Ansible
 
-  - script: |
-      ansible-galaxy collection install community.docker
+  - script: ansible-galaxy collection install community.docker ansible.posix
+    displayName: Install Ansible collections
 
   - script: pip install -r requirements-tests.txt
     displayName: Install dependencies
-- 
GitLab