From a06903f33ac7f85284d2fb10f46b0236e80ca9b9 Mon Sep 17 00:00:00 2001 From: Felix Fontein Date: Mon, 21 Feb 2022 21:14:45 +0100 Subject: [PATCH] CI: Add ArchLinux, Debian Bullseye, CentOS Stream 8, and Alpine 3 (#4222) * Add ArchLinux, Debian Bullseye and CentOS Stream 8 to CI. * Add Alpine to CI matrix as well. --- .azure-pipelines/azure-pipelines.yml | 25 ++ .../targets/alternatives/tasks/main.yml | 11 +- .../cloud_init_data_facts/tasks/main.yml | 2 + .../targets/consul/tasks/consul_session.yml | 76 ++-- .../integration/targets/consul/tasks/main.yml | 39 +- .../consul/templates/consul_config.hcl.j2 | 4 - .../targets/cronvar/tasks/main.yml | 189 +++++----- .../targets/django_manage/tasks/main.yaml | 12 + .../targets/filesize/tasks/main.yml | 1 + .../targets/filesystem/tasks/create_fs.yml | 2 +- .../targets/filesystem/tasks/main.yml | 11 + .../targets/filesystem/tasks/setup.yml | 4 +- tests/integration/targets/gem/tasks/main.yml | 332 +++++++++--------- .../targets/homectl/tasks/main.yml | 4 +- .../targets/iso_extract/vars/Alpine.yml | 1 + .../targets/iso_extract/vars/Archlinux.yml | 1 + .../targets/iso_extract/vars/Debian.yml | 1 + .../lookup_passwordstore/vars/Alpine.yml | 2 + .../lookup_passwordstore/vars/Archlinux.yml | 2 + .../integration/targets/monit/vars/Alpine.yml | 1 + .../targets/monit/vars/Archlinux.yml | 1 + .../integration/targets/nomad/tasks/main.yml | 45 ++- tests/integration/targets/npm/tasks/main.yml | 31 +- .../targets/odbc/defaults/main.yml | 7 + tests/integration/targets/odbc/tasks/main.yml | 253 ++++++------- tests/integration/targets/pids/tasks/main.yml | 177 +++++----- .../targets/setup_cron/tasks/main.yml | 119 ++++--- .../targets/setup_cron/vars/alpine.yml | 3 + .../targets/setup_cron/vars/archlinux.yml | 3 + .../setup_flatpak_remote/tasks/main.yaml | 3 + .../setup_java_keytool/vars/Alpine.yml | 2 + .../setup_java_keytool/vars/Archlinux.yml | 2 + .../targets/setup_openssl/tasks/main.yml | 54 ++- .../targets/setup_openssl/vars/Alpine.yml | 6 + .../targets/setup_openssl/vars/Archlinux.yml | 6 + .../targets/setup_openssl/vars/CentOS-8.yml | 4 + .../targets/setup_openssl/vars/Darwin.yml | 1 + .../targets/setup_openssl/vars/Debian.yml | 1 + .../targets/setup_openssl/vars/FreeBSD.yml | 1 + .../targets/setup_openssl/vars/RedHat.yml | 1 + .../targets/setup_openssl/vars/Suse.yml | 1 + .../targets/setup_pkg_mgr/tasks/main.yml | 1 + .../setup_postgresql_db/tasks/main.yml | 8 + .../setup_postgresql_db/vars/Alpine-py3.yml | 6 + .../vars/Archlinux-py3.yml | 6 + .../vars/Debian-11-py3.yml | 8 + .../setup_redis_replication/defaults/main.yml | 9 + .../setup_redis_replication/tasks/main.yml | 2 +- .../tasks/setup_redis_cluster.yml | 39 +- .../targets/setup_rundeck/vars/Alpine.yml | 1 + .../targets/setup_rundeck/vars/Archlinux.yml | 1 + .../targets/setup_rundeck/vars/Debian.yml | 2 +- .../targets/shutdown/tasks/main.yml | 4 +- .../targets/timezone/tasks/main.yml | 10 +- tests/integration/targets/yarn/tasks/main.yml | 4 +- tests/utils/shippable/linux-community.sh | 19 + 56 files changed, 861 insertions(+), 700 deletions(-) create mode 100644 tests/integration/targets/iso_extract/vars/Alpine.yml create mode 100644 tests/integration/targets/iso_extract/vars/Archlinux.yml create mode 100644 tests/integration/targets/iso_extract/vars/Debian.yml create mode 100644 tests/integration/targets/lookup_passwordstore/vars/Alpine.yml create mode 100644 tests/integration/targets/lookup_passwordstore/vars/Archlinux.yml create mode 100644 tests/integration/targets/monit/vars/Alpine.yml create mode 100644 tests/integration/targets/monit/vars/Archlinux.yml create mode 100644 tests/integration/targets/setup_cron/vars/alpine.yml create mode 100644 tests/integration/targets/setup_cron/vars/archlinux.yml create mode 100644 tests/integration/targets/setup_java_keytool/vars/Alpine.yml create mode 100644 tests/integration/targets/setup_java_keytool/vars/Archlinux.yml create mode 100644 tests/integration/targets/setup_openssl/vars/Alpine.yml create mode 100644 tests/integration/targets/setup_openssl/vars/Archlinux.yml create mode 100644 tests/integration/targets/setup_openssl/vars/CentOS-8.yml create mode 100644 tests/integration/targets/setup_openssl/vars/Darwin.yml create mode 100644 tests/integration/targets/setup_postgresql_db/vars/Alpine-py3.yml create mode 100644 tests/integration/targets/setup_postgresql_db/vars/Archlinux-py3.yml create mode 100644 tests/integration/targets/setup_postgresql_db/vars/Debian-11-py3.yml create mode 100644 tests/integration/targets/setup_rundeck/vars/Alpine.yml create mode 100644 tests/integration/targets/setup_rundeck/vars/Archlinux.yml create mode 100755 tests/utils/shippable/linux-community.sh diff --git a/.azure-pipelines/azure-pipelines.yml b/.azure-pipelines/azure-pipelines.yml index 82ab0c83f4..99767c6d52 100644 --- a/.azure-pipelines/azure-pipelines.yml +++ b/.azure-pipelines/azure-pipelines.yml @@ -310,6 +310,8 @@ stages: test: ubuntu1804 - name: Ubuntu 20.04 test: ubuntu2004 + - name: Alpine 3 + test: alpine3 groups: - 1 - 2 @@ -348,6 +350,8 @@ stages: test: fedora33 - name: openSUSE 15 py2 test: opensuse15py2 + - name: Alpine 3 + test: alpine3 groups: - 2 - 3 @@ -382,6 +386,26 @@ stages: - 2 - 3 +### Community Docker + - stage: Docker_community_devel + displayName: Docker (community images) devel + dependsOn: [] + jobs: + - template: templates/matrix.yml + parameters: + testFormat: devel/linux-community/{0} + targets: + - name: Debian Bullseye + test: debian-bullseye/3.9 + - name: ArchLinux + test: archlinux/3.10 + - name: CentOS Stream 8 + test: centos-stream8/3.8 + groups: + - 1 + - 2 + - 3 + ### Cloud - stage: Cloud_devel displayName: Cloud devel @@ -457,6 +481,7 @@ stages: - Docker_2_10 - Docker_2_11 - Docker_2_12 + - Docker_community_devel - Cloud_devel - Cloud_2_9 - Cloud_2_10 diff --git a/tests/integration/targets/alternatives/tasks/main.yml b/tests/integration/targets/alternatives/tasks/main.yml index 3503afe1b3..feb55b9685 100644 --- a/tests/integration/targets/alternatives/tasks/main.yml +++ b/tests/integration/targets/alternatives/tasks/main.yml @@ -68,4 +68,13 @@ # in chkconfig-1.7-2 fails when /etc/alternatives/dummy link is missing, # error is: 'failed to read link /usr/bin/dummy: No such file or directory'. # Moreover Fedora 24 is no longer maintained. - when: ansible_distribution != 'Fedora' or ansible_distribution_major_version|int > 24 + # + # *Disable tests on Arch Linux* + # TODO: figure out whether there is an alternatives tool for Arch Linux + # + # *Disable tests on Alpine* + # TODO: figure out whether there is an alternatives tool for Alpine + when: + - ansible_distribution != 'Fedora' or ansible_distribution_major_version|int > 24 + - ansible_distribution != 'Archlinux' + - ansible_distribution != 'Alpine' diff --git a/tests/integration/targets/cloud_init_data_facts/tasks/main.yml b/tests/integration/targets/cloud_init_data_facts/tasks/main.yml index faa366563a..d466ed0089 100644 --- a/tests/integration/targets/cloud_init_data_facts/tasks/main.yml +++ b/tests/integration/targets/cloud_init_data_facts/tasks/main.yml @@ -15,6 +15,8 @@ when: - not (ansible_distribution == "Ubuntu" and ansible_distribution_major_version|int == 14) - not (ansible_os_family == "Suse" and ansible_distribution_major_version|int != 42 and ansible_python.version.major != 3) + - not (ansible_distribution == 'Archlinux') # TODO: package seems to be broken, cannot be downloaded from mirrors? + - not (ansible_distribution == 'Alpine') # TODO: not sure what's wrong here, the module doesn't return what the tests expect block: - name: setup install cloud-init package: diff --git a/tests/integration/targets/consul/tasks/consul_session.yml b/tests/integration/targets/consul/tasks/consul_session.yml index a5490ec6c2..1827c9c381 100644 --- a/tests/integration/targets/consul/tasks/consul_session.yml +++ b/tests/integration/targets/consul/tasks/consul_session.yml @@ -82,50 +82,48 @@ that: - result is failed -- when: pyopenssl_version.stdout is version('0.15', '>=') - block: - - name: ensure SSL certificate is checked - consul_session: - state: info - id: '{{ session_id }}' - port: 8501 - scheme: https - register: result - ignore_errors: True +- name: ensure SSL certificate is checked + consul_session: + state: info + id: '{{ session_id }}' + port: 8501 + scheme: https + register: result + ignore_errors: True - - name: previous task should fail since certificate is not known - assert: - that: - - result is failed - - "'certificate verify failed' in result.msg" +- name: previous task should fail since certificate is not known + assert: + that: + - result is failed + - "'certificate verify failed' in result.msg" - - name: ensure SSL certificate isn't checked when validate_certs is disabled - consul_session: - state: info - id: '{{ session_id }}' - port: 8501 - scheme: https - validate_certs: False - register: result +- name: ensure SSL certificate isn't checked when validate_certs is disabled + consul_session: + state: info + id: '{{ session_id }}' + port: 8501 + scheme: https + validate_certs: False + register: result - - name: previous task should succeed since certificate isn't checked - assert: - that: - - result is changed +- name: previous task should succeed since certificate isn't checked + assert: + that: + - result is changed - - name: ensure a secure connection is possible - consul_session: - state: info - id: '{{ session_id }}' - port: 8501 - scheme: https - environment: - REQUESTS_CA_BUNDLE: '{{ remote_dir }}/cert.pem' - register: result +- name: ensure a secure connection is possible + consul_session: + state: info + id: '{{ session_id }}' + port: 8501 + scheme: https + environment: + REQUESTS_CA_BUNDLE: '{{ remote_dir }}/cert.pem' + register: result - - assert: - that: - - result is changed +- assert: + that: + - result is changed - name: delete a session consul_session: diff --git a/tests/integration/targets/consul/tasks/main.yml b/tests/integration/targets/consul/tasks/main.yml index ae7d1f8542..1f7edce304 100644 --- a/tests/integration/targets/consul/tasks/main.yml +++ b/tests/integration/targets/consul/tasks/main.yml @@ -9,9 +9,6 @@ consul_uri: https://s3.amazonaws.com/ansible-ci-files/test/integration/targets/consul/consul_{{ consul_version }}_{{ ansible_system | lower }}_{{ consul_arch }}.zip consul_cmd: '{{ remote_tmp_dir }}/consul' block: - - name: register pyOpenSSL version - command: '{{ ansible_python_interpreter }} -c ''import OpenSSL; print(OpenSSL.__version__)''' - register: pyopenssl_version - name: Install requests<2.20 (CentOS/RHEL 6) pip: name: requests<2.20 @@ -23,25 +20,23 @@ name: python-consul register: result until: result is success - - when: pyopenssl_version.stdout is version('0.15', '>=') - block: - - name: Generate privatekey - community.crypto.openssl_privatekey: - path: '{{ remote_tmp_dir }}/privatekey.pem' - - name: Generate CSR - community.crypto.openssl_csr: - path: '{{ remote_tmp_dir }}/csr.csr' - privatekey_path: '{{ remote_tmp_dir }}/privatekey.pem' - subject: - commonName: localhost - - name: Generate selfsigned certificate - register: selfsigned_certificate - community.crypto.x509_certificate: - path: '{{ remote_tmp_dir }}/cert.pem' - csr_path: '{{ remote_tmp_dir }}/csr.csr' - privatekey_path: '{{ remote_tmp_dir }}/privatekey.pem' - provider: selfsigned - selfsigned_digest: sha256 + - name: Generate privatekey + community.crypto.openssl_privatekey: + path: '{{ remote_tmp_dir }}/privatekey.pem' + - name: Generate CSR + community.crypto.openssl_csr: + path: '{{ remote_tmp_dir }}/csr.csr' + privatekey_path: '{{ remote_tmp_dir }}/privatekey.pem' + subject: + commonName: localhost + - name: Generate selfsigned certificate + register: selfsigned_certificate + community.crypto.x509_certificate: + path: '{{ remote_tmp_dir }}/cert.pem' + csr_path: '{{ remote_tmp_dir }}/csr.csr' + privatekey_path: '{{ remote_tmp_dir }}/privatekey.pem' + provider: selfsigned + selfsigned_digest: sha256 - name: Install unzip package: name: unzip diff --git a/tests/integration/targets/consul/templates/consul_config.hcl.j2 b/tests/integration/targets/consul/templates/consul_config.hcl.j2 index 9af06f02e9..811c124bb7 100644 --- a/tests/integration/targets/consul/templates/consul_config.hcl.j2 +++ b/tests/integration/targets/consul/templates/consul_config.hcl.j2 @@ -3,11 +3,7 @@ server = true pid_file = "{{ remote_dir }}/consul.pid" ports { http = 8500 - {% if pyopenssl_version.stdout is version('0.15', '>=') %} https = 8501 - {% endif %} } -{% if pyopenssl_version.stdout is version('0.15', '>=') %} key_file = "{{ remote_dir }}/privatekey.pem" cert_file = "{{ remote_dir }}/cert.pem" -{% endif %} diff --git a/tests/integration/targets/cronvar/tasks/main.yml b/tests/integration/targets/cronvar/tasks/main.yml index 4e95258e6b..8d47eb19cf 100644 --- a/tests/integration/targets/cronvar/tasks/main.yml +++ b/tests/integration/targets/cronvar/tasks/main.yml @@ -3,112 +3,115 @@ # and should not be used as examples of how to write Ansible roles # #################################################################### -- name: Create EMAIL cron var - cronvar: - name: EMAIL - value: doug@ansibmod.con.com - register: create_cronvar1 +- when: + - not (ansible_os_family == 'Alpine' and ansible_distribution_version is version('3.15', '<')) # TODO + block: + - name: Create EMAIL cron var + cronvar: + name: EMAIL + value: doug@ansibmod.con.com + register: create_cronvar1 -- name: Create EMAIL cron var again - cronvar: - name: EMAIL - value: doug@ansibmod.con.com - register: create_cronvar2 + - name: Create EMAIL cron var again + cronvar: + name: EMAIL + value: doug@ansibmod.con.com + register: create_cronvar2 -- name: Check cron var value - shell: crontab -l -u root | grep -c EMAIL=doug@ansibmod.con.com - register: varcheck1 + - name: Check cron var value + shell: crontab -l -u root | grep -c EMAIL=doug@ansibmod.con.com + register: varcheck1 -- name: Modify EMAIL cron var - cronvar: - name: EMAIL - value: jane@ansibmod.con.com - register: create_cronvar3 + - name: Modify EMAIL cron var + cronvar: + name: EMAIL + value: jane@ansibmod.con.com + register: create_cronvar3 -- name: Check cron var value again - shell: crontab -l -u root | grep -c EMAIL=jane@ansibmod.con.com - register: varcheck2 + - name: Check cron var value again + shell: crontab -l -u root | grep -c EMAIL=jane@ansibmod.con.com + register: varcheck2 -- name: Remove EMAIL cron var - cronvar: - name: EMAIL - state: absent - register: remove_cronvar1 + - name: Remove EMAIL cron var + cronvar: + name: EMAIL + state: absent + register: remove_cronvar1 -- name: Remove EMAIL cron var again - cronvar: - name: EMAIL - state: absent - register: remove_cronvar2 + - name: Remove EMAIL cron var again + cronvar: + name: EMAIL + state: absent + register: remove_cronvar2 -- name: Check cron var value again - shell: crontab -l -u root | grep -c EMAIL - register: varcheck3 - failed_when: varcheck3.rc == 0 + - name: Check cron var value again + shell: crontab -l -u root | grep -c EMAIL + register: varcheck3 + failed_when: varcheck3.rc == 0 -- name: Add cron var to custom file - cronvar: - name: TESTVAR - value: somevalue - cron_file: cronvar_test - register: custom_cronfile1 + - name: Add cron var to custom file + cronvar: + name: TESTVAR + value: somevalue + cron_file: cronvar_test + register: custom_cronfile1 -- name: Add cron var to custom file again - cronvar: - name: TESTVAR - value: somevalue - cron_file: cronvar_test - register: custom_cronfile2 + - name: Add cron var to custom file again + cronvar: + name: TESTVAR + value: somevalue + cron_file: cronvar_test + register: custom_cronfile2 -- name: Check cron var value in custom file - command: grep -c TESTVAR=somevalue {{ cron_config_path }}/cronvar_test - register: custom_varcheck1 + - name: Check cron var value in custom file + command: grep -c TESTVAR=somevalue {{ cron_config_path }}/cronvar_test + register: custom_varcheck1 -- name: Change cron var in custom file - cronvar: - name: TESTVAR - value: newvalue - cron_file: cronvar_test - register: custom_cronfile3 + - name: Change cron var in custom file + cronvar: + name: TESTVAR + value: newvalue + cron_file: cronvar_test + register: custom_cronfile3 -- name: Check cron var value in custom file - command: grep -c TESTVAR=newvalue {{ cron_config_path }}/cronvar_test - register: custom_varcheck2 + - name: Check cron var value in custom file + command: grep -c TESTVAR=newvalue {{ cron_config_path }}/cronvar_test + register: custom_varcheck2 -- name: Remove cron var from custom file - cronvar: - name: TESTVAR - value: newvalue - cron_file: cronvar_test - state: absent - register: custom_remove_cronvar1 + - name: Remove cron var from custom file + cronvar: + name: TESTVAR + value: newvalue + cron_file: cronvar_test + state: absent + register: custom_remove_cronvar1 -- name: Remove cron var from custom file again - cronvar: - name: TESTVAR - value: newvalue - cron_file: cronvar_test - state: absent - register: custom_remove_cronvar2 + - name: Remove cron var from custom file again + cronvar: + name: TESTVAR + value: newvalue + cron_file: cronvar_test + state: absent + register: custom_remove_cronvar2 -- name: Check cron var value - command: grep -c TESTVAR=newvalue {{ cron_config_path }}/cronvar_test - register: custom_varcheck3 - failed_when: custom_varcheck3.rc == 0 + - name: Check cron var value + command: grep -c TESTVAR=newvalue {{ cron_config_path }}/cronvar_test + register: custom_varcheck3 + failed_when: custom_varcheck3.rc == 0 -- name: Esure cronvar tasks did the right thing - assert: - that: - - create_cronvar1 is changed - - create_cronvar2 is not changed - - create_cronvar3 is changed - - remove_cronvar1 is changed - - remove_cronvar2 is not changed - - varcheck1.stdout == '1' - - varcheck2.stdout == '1' - - varcheck3.stdout == '0' - - custom_remove_cronvar1 is changed - - custom_remove_cronvar2 is not changed - - custom_varcheck1.stdout == '1' - - custom_varcheck2.stdout == '1' - - custom_varcheck3.stdout == '0' + - name: Esure cronvar tasks did the right thing + assert: + that: + - create_cronvar1 is changed + - create_cronvar2 is not changed + - create_cronvar3 is changed + - remove_cronvar1 is changed + - remove_cronvar2 is not changed + - varcheck1.stdout == '1' + - varcheck2.stdout == '1' + - varcheck3.stdout == '0' + - custom_remove_cronvar1 is changed + - custom_remove_cronvar2 is not changed + - custom_varcheck1.stdout == '1' + - custom_varcheck2.stdout == '1' + - custom_varcheck3.stdout == '0' diff --git a/tests/integration/targets/django_manage/tasks/main.yaml b/tests/integration/targets/django_manage/tasks/main.yaml index 0421739acc..59104d788a 100644 --- a/tests/integration/targets/django_manage/tasks/main.yaml +++ b/tests/integration/targets/django_manage/tasks/main.yaml @@ -8,6 +8,18 @@ suffix: .django_manage register: tmp_django_root +- name: Install virtualenv + package: + name: virtualenv + state: present + when: ansible_distribution == 'CentOS' and ansible_distribution_major_version == '8' + +- name: Install virtualenv + package: + name: python-virtualenv + state: present + when: ansible_os_family == 'Archlinux' + - name: Install required library pip: name: django diff --git a/tests/integration/targets/filesize/tasks/main.yml b/tests/integration/targets/filesize/tasks/main.yml index 14415dac9a..d156e6c56f 100644 --- a/tests/integration/targets/filesize/tasks/main.yml +++ b/tests/integration/targets/filesize/tasks/main.yml @@ -29,6 +29,7 @@ include_tasks: sparse.yml when: - not (ansible_os_family == 'Darwin' and ansible_distribution_version is version('11', '<')) + - not (ansible_os_family == 'Alpine') # TODO figure out why it fails - name: Include tasks to test playing with symlinks include_tasks: symlinks.yml diff --git a/tests/integration/targets/filesystem/tasks/create_fs.yml b/tests/integration/targets/filesystem/tasks/create_fs.yml index 3c92197c0a..23f6e526c2 100644 --- a/tests/integration/targets/filesystem/tasks/create_fs.yml +++ b/tests/integration/targets/filesystem/tasks/create_fs.yml @@ -1,5 +1,5 @@ --- -- name: "Create filesystem" +- name: "Create filesystem ({{ fstype }})" community.general.filesystem: dev: '{{ dev }}' fstype: '{{ fstype }}' diff --git a/tests/integration/targets/filesystem/tasks/main.yml b/tests/integration/targets/filesystem/tasks/main.yml index 864c9f7b5d..7de9df8e97 100644 --- a/tests/integration/targets/filesystem/tasks/main.yml +++ b/tests/integration/targets/filesystem/tasks/main.yml @@ -48,10 +48,18 @@ # reiserfs-utils package not available with Fedora 35 on CI - 'not (ansible_distribution == "Fedora" and (ansible_facts.distribution_major_version | int >= 35) and item.0.key == "reiserfs")' + # reiserfs packages apparently not available with Alpine + - 'not (ansible_distribution == "Alpine" and item.0.key == "reiserfs")' # ocfs2 only available on Debian based distributions - 'not (item.0.key == "ocfs2" and ansible_os_family != "Debian")' # Tests use losetup which can not be used inside unprivileged container - 'not (item.0.key == "lvm" and ansible_virtualization_type in ["docker", "container", "containerd"])' + # vfat resizing fails on Debian (but not Ubuntu) + - 'not (item.0.key == "vfat" and ansible_distribution == "Debian")' # TODO: figure out why it fails, fix it! + # vfat resizing fails on ArchLinux + - 'not (item.0.key == "vfat" and ansible_distribution == "Archlinux")' # TODO: figure out why it fails, fix it! + # btrfs-progs cannot be installed on ArchLinux + - 'not (item.0.key == "btrfs" and ansible_distribution == "Archlinux")' # TODO: figure out why it fails, fix it! # On CentOS 6 shippable containers, wipefs seems unable to remove vfat signatures - 'not (ansible_distribution == "CentOS" and ansible_distribution_version is version("7.0", "<") and @@ -65,6 +73,9 @@ - 'not (ansible_os_family == "Suse" and ansible_distribution_major_version|int != 42 and item.0.key == "xfs" and ansible_python.version.major == 2)' + # TODO: something seems to be broken on Alpine + - 'not (ansible_distribution == "Alpine")' + loop: "{{ query('dict', tested_filesystems)|product(['create_fs', 'overwrite_another_fs', 'remove_fs'])|list }}" diff --git a/tests/integration/targets/filesystem/tasks/setup.yml b/tests/integration/targets/filesystem/tasks/setup.yml index c7b27b715b..b39b5418b6 100644 --- a/tests/integration/targets/filesystem/tasks/setup.yml +++ b/tests/integration/targets/filesystem/tasks/setup.yml @@ -21,6 +21,7 @@ - not (ansible_distribution == 'Ubuntu' and ansible_distribution_version is version('16.04', '<=')) - ansible_system != "FreeBSD" - not (ansible_facts.os_family == "RedHat" and ansible_facts.distribution_major_version is version('8', '>=')) + - ansible_os_family != 'Archlinux' # TODO - name: "Install btrfs tools (Ubuntu <= 16.04)" ansible.builtin.package: @@ -60,7 +61,7 @@ state: present when: - ansible_system == 'Linux' - - ansible_os_family not in ['Suse', 'RedHat'] + - ansible_os_family not in ['Suse', 'RedHat', 'Alpine'] - name: "Install reiserfs progs (FreeBSD)" ansible.builtin.package: @@ -111,6 +112,7 @@ - ansible_system == 'Linux' - ansible_os_family != 'Suse' - ansible_os_family != 'RedHat' or (ansible_distribution == 'CentOS' and ansible_distribution_version is version('7.0', '==')) + - ansible_os_family != 'Alpine' block: - name: "Install fatresize" ansible.builtin.package: diff --git a/tests/integration/targets/gem/tasks/main.yml b/tests/integration/targets/gem/tasks/main.yml index 4674fb1075..1e6cd25ff7 100644 --- a/tests/integration/targets/gem/tasks/main.yml +++ b/tests/integration/targets/gem/tasks/main.yml @@ -21,201 +21,205 @@ # You should have received a copy of the GNU General Public License # along with Ansible. If not, see . -- include_vars: '{{ item }}' - with_first_found: - - files: - - '{{ ansible_distribution }}-{{ ansible_distribution_major_version }}.yml' - - '{{ ansible_distribution }}-{{ ansible_distribution_version }}.yml' - - '{{ ansible_os_family }}.yml' - - 'default.yml' - paths: '../vars' +- when: + - not (ansible_os_family == 'Alpine') # TODO + block: -- name: Install dependencies for test - package: - name: "{{ item }}" - state: present - loop: "{{ test_packages }}" - when: ansible_distribution != "MacOSX" + - include_vars: '{{ item }}' + with_first_found: + - files: + - '{{ ansible_distribution }}-{{ ansible_distribution_major_version }}.yml' + - '{{ ansible_distribution }}-{{ ansible_distribution_version }}.yml' + - '{{ ansible_os_family }}.yml' + - 'default.yml' + paths: '../vars' -- name: Install a gem - gem: - name: gist - state: present - register: install_gem_result - ignore_errors: yes + - name: Install dependencies for test + package: + name: "{{ item }}" + state: present + loop: "{{ test_packages }}" + when: ansible_distribution != "MacOSX" -# when running as root on Fedora, '--install-dir' is set in the os defaults which is -# incompatible with '--user-install', we ignore this error for this case only -- name: fail if failed to install gem - fail: - msg: "failed to install gem: {{ install_gem_result.msg }}" - when: - - install_gem_result is failed - - not (ansible_user_uid == 0 and "User --install-dir or --user-install but not both" not in install_gem_result.msg) - -- block: - - name: List gems - command: gem list - register: current_gems - - - name: Ensure gem was installed - assert: - that: - - install_gem_result is changed - - current_gems.stdout is search('gist\s+\([0-9.]+\)') - - - name: Remove a gem + - name: Install a gem gem: name: gist - state: absent - register: remove_gem_results + state: present + register: install_gem_result + ignore_errors: yes - - name: List gems - command: gem list - register: current_gems + # when running as root on Fedora, '--install-dir' is set in the os defaults which is + # incompatible with '--user-install', we ignore this error for this case only + - name: fail if failed to install gem + fail: + msg: "failed to install gem: {{ install_gem_result.msg }}" + when: + - install_gem_result is failed + - not (ansible_user_uid == 0 and "User --install-dir or --user-install but not both" not in install_gem_result.msg) - - name: Verify gem is not installed + - block: + - name: List gems + command: gem list + register: current_gems + + - name: Ensure gem was installed + assert: + that: + - install_gem_result is changed + - current_gems.stdout is search('gist\s+\([0-9.]+\)') + + - name: Remove a gem + gem: + name: gist + state: absent + register: remove_gem_results + + - name: List gems + command: gem list + register: current_gems + + - name: Verify gem is not installed + assert: + that: + - remove_gem_results is changed + - current_gems.stdout is not search('gist\s+\([0-9.]+\)') + when: not install_gem_result is failed + + # install gem in --no-user-install + - block: + - name: Install a gem with --no-user-install + gem: + name: gist + state: present + user_install: no + register: install_gem_result + + - name: List gems + command: gem list + register: current_gems + + - name: Ensure gem was installed + assert: + that: + - install_gem_result is changed + - current_gems.stdout is search('gist\s+\([0-9.]+\)') + + - name: Remove a gem + gem: + name: gist + state: absent + register: remove_gem_results + + - name: List gems + command: gem list + register: current_gems + + - name: Verify gem is not installed + assert: + that: + - remove_gem_results is changed + - current_gems.stdout is not search('gist\s+\([0-9.]+\)') + when: ansible_user_uid == 0 + + # Check cutom gem directory + - name: Install gem in a custom directory with incorrect options + gem: + name: gist + state: present + install_dir: "{{ remote_tmp_dir }}/gems" + ignore_errors: yes + register: install_gem_fail_result + + - debug: + var: install_gem_fail_result + tags: debug + + - name: Ensure previous task failed assert: that: - - remove_gem_results is changed - - current_gems.stdout is not search('gist\s+\([0-9.]+\)') - when: not install_gem_result is failed + - install_gem_fail_result is failed + - install_gem_fail_result.msg == 'install_dir requires user_install=false' -# install gem in --no-user-install -- block: - - name: Install a gem with --no-user-install + - name: Install a gem in a custom directory gem: name: gist state: present user_install: no + install_dir: "{{ remote_tmp_dir }}/gems" register: install_gem_result - - name: List gems - command: gem list - register: current_gems + - name: Find gems in custom directory + find: + paths: "{{ remote_tmp_dir }}/gems/gems" + file_type: directory + contains: gist + register: gem_search - - name: Ensure gem was installed + - name: Ensure gem was installed in custom directory assert: that: - install_gem_result is changed - - current_gems.stdout is search('gist\s+\([0-9.]+\)') + - gem_search.files[0].path is search('gist-[0-9.]+') + ignore_errors: yes - - name: Remove a gem + - name: Remove a gem in a custom directory gem: name: gist state: absent - register: remove_gem_results + user_install: no + install_dir: "{{ remote_tmp_dir }}/gems" + register: install_gem_result - - name: List gems - command: gem list - register: current_gems + - name: Find gems in custom directory + find: + paths: "{{ remote_tmp_dir }}/gems/gems" + file_type: directory + contains: gist + register: gem_search - - name: Verify gem is not installed + - name: Ensure gem was removed in custom directory assert: that: - - remove_gem_results is changed - - current_gems.stdout is not search('gist\s+\([0-9.]+\)') - when: ansible_user_uid == 0 + - install_gem_result is changed + - gem_search.files | length == 0 -# Check cutom gem directory -- name: Install gem in a custom directory with incorrect options - gem: - name: gist - state: present - install_dir: "{{ remote_tmp_dir }}/gems" - ignore_errors: yes - register: install_gem_fail_result + # Custom directory for executables (--bindir) + - name: Install gem with custom bindir + gem: + name: gist + state: present + bindir: "{{ remote_tmp_dir }}/custom_bindir" + norc: yes + user_install: no # Avoid conflicts between --install-dir and --user-install when running as root on CentOS / Fedora / RHEL + register: install_gem_result -- debug: - var: install_gem_fail_result - tags: debug + - name: Get stats of gem executable + stat: + path: "{{ remote_tmp_dir }}/custom_bindir/gist" + register: gem_bindir_stat -- name: Ensure previous task failed - assert: - that: - - install_gem_fail_result is failed - - install_gem_fail_result.msg == 'install_dir requires user_install=false' + - name: Ensure gem executable was installed in custom directory + assert: + that: + - install_gem_result is changed + - gem_bindir_stat.stat.exists and gem_bindir_stat.stat.isreg -- name: Install a gem in a custom directory - gem: - name: gist - state: present - user_install: no - install_dir: "{{ remote_tmp_dir }}/gems" - register: install_gem_result + - name: Remove gem with custom bindir + gem: + name: gist + state: absent + bindir: "{{ remote_tmp_dir }}/custom_bindir" + norc: yes + user_install: no # Avoid conflicts between --install-dir and --user-install when running as root on CentOS / Fedora / RHEL + register: install_gem_result -- name: Find gems in custom directory - find: - paths: "{{ remote_tmp_dir }}/gems/gems" - file_type: directory - contains: gist - register: gem_search + - name: Get stats of gem executable + stat: + path: "{{ remote_tmp_dir }}/custom_bindir/gist" + register: gem_bindir_stat -- name: Ensure gem was installed in custom directory - assert: - that: - - install_gem_result is changed - - gem_search.files[0].path is search('gist-[0-9.]+') - ignore_errors: yes - -- name: Remove a gem in a custom directory - gem: - name: gist - state: absent - user_install: no - install_dir: "{{ remote_tmp_dir }}/gems" - register: install_gem_result - -- name: Find gems in custom directory - find: - paths: "{{ remote_tmp_dir }}/gems/gems" - file_type: directory - contains: gist - register: gem_search - -- name: Ensure gem was removed in custom directory - assert: - that: - - install_gem_result is changed - - gem_search.files | length == 0 - -# Custom directory for executables (--bindir) -- name: Install gem with custom bindir - gem: - name: gist - state: present - bindir: "{{ remote_tmp_dir }}/custom_bindir" - norc: yes - user_install: no # Avoid conflicts between --install-dir and --user-install when running as root on CentOS / Fedora / RHEL - register: install_gem_result - -- name: Get stats of gem executable - stat: - path: "{{ remote_tmp_dir }}/custom_bindir/gist" - register: gem_bindir_stat - -- name: Ensure gem executable was installed in custom directory - assert: - that: - - install_gem_result is changed - - gem_bindir_stat.stat.exists and gem_bindir_stat.stat.isreg - -- name: Remove gem with custom bindir - gem: - name: gist - state: absent - bindir: "{{ remote_tmp_dir }}/custom_bindir" - norc: yes - user_install: no # Avoid conflicts between --install-dir and --user-install when running as root on CentOS / Fedora / RHEL - register: install_gem_result - -- name: Get stats of gem executable - stat: - path: "{{ remote_tmp_dir }}/custom_bindir/gist" - register: gem_bindir_stat - -- name: Ensure gem executable was removed from custom directory - assert: - that: - - install_gem_result is changed - - not gem_bindir_stat.stat.exists + - name: Ensure gem executable was removed from custom directory + assert: + that: + - install_gem_result is changed + - not gem_bindir_stat.stat.exists diff --git a/tests/integration/targets/homectl/tasks/main.yml b/tests/integration/targets/homectl/tasks/main.yml index a69d0f40e5..ded6173759 100644 --- a/tests/integration/targets/homectl/tasks/main.yml +++ b/tests/integration/targets/homectl/tasks/main.yml @@ -171,4 +171,6 @@ - jake_incorrect_pass_out is not changed and jake_incorrect_pass_out is failed and jake_incorrect_pass_out.msg == 'User exists but password is incorrect!' # homectl was first introduced in systemd 245 so check version >= 245 and make sure system has systemd and homectl command - when: systemd_version.rc == 0 and (systemd_version.stdout | regex_search('[0-9][0-9][0-9]') | int >= 245) and homectl_version.rc == 0 \ No newline at end of file + when: + - systemd_version.rc == 0 and (systemd_version.stdout | regex_search('[0-9][0-9][0-9]') | int >= 245) and homectl_version.rc == 0 + - ansible_distribution != 'Archlinux' # TODO! diff --git a/tests/integration/targets/iso_extract/vars/Alpine.yml b/tests/integration/targets/iso_extract/vars/Alpine.yml new file mode 100644 index 0000000000..f9e7ca1a9a --- /dev/null +++ b/tests/integration/targets/iso_extract/vars/Alpine.yml @@ -0,0 +1 @@ +iso_extract_7zip_package: p7zip diff --git a/tests/integration/targets/iso_extract/vars/Archlinux.yml b/tests/integration/targets/iso_extract/vars/Archlinux.yml new file mode 100644 index 0000000000..f9e7ca1a9a --- /dev/null +++ b/tests/integration/targets/iso_extract/vars/Archlinux.yml @@ -0,0 +1 @@ +iso_extract_7zip_package: p7zip diff --git a/tests/integration/targets/iso_extract/vars/Debian.yml b/tests/integration/targets/iso_extract/vars/Debian.yml new file mode 100644 index 0000000000..219c495764 --- /dev/null +++ b/tests/integration/targets/iso_extract/vars/Debian.yml @@ -0,0 +1 @@ +iso_extract_7zip_package: p7zip-full diff --git a/tests/integration/targets/lookup_passwordstore/vars/Alpine.yml b/tests/integration/targets/lookup_passwordstore/vars/Alpine.yml new file mode 100644 index 0000000000..3d1c4d45d5 --- /dev/null +++ b/tests/integration/targets/lookup_passwordstore/vars/Alpine.yml @@ -0,0 +1,2 @@ +passwordstore_packages: + - pass diff --git a/tests/integration/targets/lookup_passwordstore/vars/Archlinux.yml b/tests/integration/targets/lookup_passwordstore/vars/Archlinux.yml new file mode 100644 index 0000000000..3d1c4d45d5 --- /dev/null +++ b/tests/integration/targets/lookup_passwordstore/vars/Archlinux.yml @@ -0,0 +1,2 @@ +passwordstore_packages: + - pass diff --git a/tests/integration/targets/monit/vars/Alpine.yml b/tests/integration/targets/monit/vars/Alpine.yml new file mode 100644 index 0000000000..cb76bac9e4 --- /dev/null +++ b/tests/integration/targets/monit/vars/Alpine.yml @@ -0,0 +1 @@ +monitrc: "/etc/monitrc" diff --git a/tests/integration/targets/monit/vars/Archlinux.yml b/tests/integration/targets/monit/vars/Archlinux.yml new file mode 100644 index 0000000000..cb76bac9e4 --- /dev/null +++ b/tests/integration/targets/monit/vars/Archlinux.yml @@ -0,0 +1 @@ +monitrc: "/etc/monitrc" diff --git a/tests/integration/targets/nomad/tasks/main.yml b/tests/integration/targets/nomad/tasks/main.yml index 6e1c4a254e..abf78aad98 100644 --- a/tests/integration/targets/nomad/tasks/main.yml +++ b/tests/integration/targets/nomad/tasks/main.yml @@ -1,6 +1,9 @@ - name: Skip unsupported platforms meta: end_play - when: ansible_distribution == 'CentOS' and ansible_distribution_major_version is not version('7', '>=') + # TODO: figure out why Alpine does not work! + when: | + ansible_distribution == 'CentOS' and ansible_distribution_major_version is not version('7', '>=') + or ansible_distribution == 'Alpine' - name: Install Nomad and test vars: @@ -9,10 +12,6 @@ nomad_cmd: '{{ remote_tmp_dir }}/nomad' block: - - name: register pyOpenSSL version - command: '{{ ansible_python_interpreter }} -c ''import OpenSSL; print(OpenSSL.__version__)''' - register: pyopenssl_version - - name: Install requests<2.20 (CentOS/RHEL 6) pip: name: requests<2.20 @@ -32,27 +31,25 @@ register: result until: result is success - - when: pyopenssl_version.stdout is version('0.15', '>=') - block: - - name: Generate privatekey - community.crypto.openssl_privatekey: - path: '{{ remote_tmp_dir }}/privatekey.pem' + - name: Generate privatekey + community.crypto.openssl_privatekey: + path: '{{ remote_tmp_dir }}/privatekey.pem' - - name: Generate CSR - community.crypto.openssl_csr: - path: '{{ remote_tmp_dir }}/csr.csr' - privatekey_path: '{{ remote_tmp_dir }}/privatekey.pem' - subject: - commonName: localhost + - name: Generate CSR + community.crypto.openssl_csr: + path: '{{ remote_tmp_dir }}/csr.csr' + privatekey_path: '{{ remote_tmp_dir }}/privatekey.pem' + subject: + commonName: localhost - - name: Generate selfsigned certificate - register: selfsigned_certificate - community.crypto.x509_certificate: - path: '{{ remote_tmp_dir }}/cert.pem' - csr_path: '{{ remote_tmp_dir }}/csr.csr' - privatekey_path: '{{ remote_tmp_dir }}/privatekey.pem' - provider: selfsigned - selfsigned_digest: sha256 + - name: Generate selfsigned certificate + register: selfsigned_certificate + community.crypto.x509_certificate: + path: '{{ remote_tmp_dir }}/cert.pem' + csr_path: '{{ remote_tmp_dir }}/csr.csr' + privatekey_path: '{{ remote_tmp_dir }}/privatekey.pem' + provider: selfsigned + selfsigned_digest: sha256 - name: Install unzip package: diff --git a/tests/integration/targets/npm/tasks/main.yml b/tests/integration/targets/npm/tasks/main.yml index c3971fd91d..8e1d388e2c 100644 --- a/tests/integration/targets/npm/tasks/main.yml +++ b/tests/integration/targets/npm/tasks/main.yml @@ -20,21 +20,24 @@ # You should have received a copy of the GNU General Public License # along with Ansible. If not, see . - # ------------------------------------------------------------- # Setup steps -# expand remote path -- command: 'echo {{ remote_tmp_dir }}' - register: echo -- set_fact: - remote_dir: '{{ echo.stdout }}' +- when: + - not (ansible_os_family == 'Alpine') # TODO + block: -- include_tasks: run.yml - vars: - nodejs_version: '{{ item }}' - nodejs_path: 'node-v{{ nodejs_version }}-{{ ansible_system|lower }}-x{{ ansible_userspace_bits }}' - with_items: - - 7.10.1 # provides npm 4.2.0 (last npm < 5 released) - - 8.0.0 # provides npm 5.0.0 - - 8.2.0 # provides npm 5.3.0 (output change with this version) + # expand remote path + - command: 'echo {{ remote_tmp_dir }}' + register: echo + - set_fact: + remote_dir: '{{ echo.stdout }}' + + - include_tasks: run.yml + vars: + nodejs_version: '{{ item }}' + nodejs_path: 'node-v{{ nodejs_version }}-{{ ansible_system|lower }}-x{{ ansible_userspace_bits }}' + with_items: + - 7.10.1 # provides npm 4.2.0 (last npm < 5 released) + - 8.0.0 # provides npm 5.0.0 + - 8.2.0 # provides npm 5.3.0 (output change with this version) diff --git a/tests/integration/targets/odbc/defaults/main.yml b/tests/integration/targets/odbc/defaults/main.yml index f6efa75078..aa8eeb74a5 100644 --- a/tests/integration/targets/odbc/defaults/main.yml +++ b/tests/integration/targets/odbc/defaults/main.yml @@ -5,6 +5,13 @@ my_pass: 'md5d5e044ccd9b4b8adc89e8fed2eb0db8a' my_pass_decrypted: '6EjMk 0" - - "exactpidmatch.pids == []" - - "pattern_pid_match.pids | join(' ') == newpid.content | b64decode | trim" - - "caseinsensitive_pattern_pid_match.pids | join(' ') == newpid.content | b64decode | trim" - - newpid.content | b64decode | trim | int in match_all.pids + - name: "Checking that .* includes test pid" + pids: + pattern: .* + register: match_all -- name: "Register output of bad input pattern" - pids: - pattern: (unterminated - register: bad_pattern_result - ignore_errors: true + - name: "Reading pid from the file" + slurp: + src: "{{ remote_tmp_dir }}/obtainpid.txt" + register: newpid -- name: "Verify that bad input pattern result is failed" - assert: - that: - - bad_pattern_result is failed \ No newline at end of file + - name: "Verify that the Process IDs (PIDs) returned is not empty and also equal to the PIDs obtained in console" + assert: + that: + - "pids.pids | join(' ') == newpid.content | b64decode | trim" + - "pids.pids | length > 0" + - "exactpidmatch.pids == []" + - "pattern_pid_match.pids | join(' ') == newpid.content | b64decode | trim" + - "caseinsensitive_pattern_pid_match.pids | join(' ') == newpid.content | b64decode | trim" + - newpid.content | b64decode | trim | int in match_all.pids + + - name: "Register output of bad input pattern" + pids: + pattern: (unterminated + register: bad_pattern_result + ignore_errors: true + + - name: "Verify that bad input pattern result is failed" + assert: + that: + - bad_pattern_result is failed \ No newline at end of file diff --git a/tests/integration/targets/setup_cron/tasks/main.yml b/tests/integration/targets/setup_cron/tasks/main.yml index bacdfaf382..a53f0ecd61 100644 --- a/tests/integration/targets/setup_cron/tasks/main.yml +++ b/tests/integration/targets/setup_cron/tasks/main.yml @@ -3,67 +3,70 @@ # and should not be used as examples of how to write Ansible roles # #################################################################### -- name: Include distribution specific variables - include_vars: '{{ lookup(''first_found'', search) }}' - vars: - search: - files: - - '{{ ansible_distribution | lower }}.yml' - - '{{ ansible_os_family | lower }}.yml' - - '{{ ansible_system | lower }}.yml' - - default.yml - paths: - - vars -- name: install cron package - package: - name: '{{ cron_pkg }}' - when: cron_pkg | default(false, true) - register: cron_package_installed - until: cron_package_installed is success -- when: faketime_pkg | default(false, true) +- when: + - not (ansible_os_family == 'Alpine' and ansible_distribution_version is version('3.15', '<')) # TODO block: - - name: install cron and faketime packages + - name: Include distribution specific variables + include_vars: '{{ lookup(''first_found'', search) }}' + vars: + search: + files: + - '{{ ansible_distribution | lower }}.yml' + - '{{ ansible_os_family | lower }}.yml' + - '{{ ansible_system | lower }}.yml' + - default.yml + paths: + - vars + - name: install cron package package: - name: '{{ faketime_pkg }}' - register: faketime_package_installed - until: faketime_package_installed is success - - name: Find libfaketime path - shell: '{{ list_pkg_files }} {{ faketime_pkg }} | grep -F libfaketime.so.1' - args: - warn: false - register: libfaketime_path - - when: ansible_service_mgr == 'systemd' + name: '{{ cron_pkg }}' + when: cron_pkg | default(false, true) + register: cron_package_installed + until: cron_package_installed is success + - when: faketime_pkg | default(false, true) block: - - name: create directory for cron drop-in file - file: - path: /etc/systemd/system/{{ cron_service }}.service.d - state: directory - owner: root - group: root - mode: '0755' - - name: Use faketime with cron service + - name: install cron and faketime packages + package: + name: '{{ faketime_pkg }}' + register: faketime_package_installed + until: faketime_package_installed is success + - name: Find libfaketime path + shell: '{{ list_pkg_files }} {{ faketime_pkg }} | grep -F libfaketime.so.1' + args: + warn: false + register: libfaketime_path + - when: ansible_service_mgr == 'systemd' + block: + - name: create directory for cron drop-in file + file: + path: /etc/systemd/system/{{ cron_service }}.service.d + state: directory + owner: root + group: root + mode: '0755' + - name: Use faketime with cron service + copy: + content: '[Service] + + Environment=LD_PRELOAD={{ libfaketime_path.stdout_lines[0].strip() }} + + Environment="FAKETIME=+0y x10" + + Environment=RANDOM_DELAY=0' + dest: /etc/systemd/system/{{ cron_service }}.service.d/faketime.conf + owner: root + group: root + mode: '0644' + - when: ansible_system == 'FreeBSD' + name: Use faketime with cron service copy: - content: '[Service] - - Environment=LD_PRELOAD={{ libfaketime_path.stdout_lines[0].strip() }} - - Environment="FAKETIME=+0y x10" - - Environment=RANDOM_DELAY=0' - dest: /etc/systemd/system/{{ cron_service }}.service.d/faketime.conf + content: cron_env='LD_PRELOAD={{ libfaketime_path.stdout_lines[0].strip() }} FAKETIME="+0y x10"' + dest: /etc/rc.conf.d/cron owner: root - group: root + group: wheel mode: '0644' - - when: ansible_system == 'FreeBSD' - name: Use faketime with cron service - copy: - content: cron_env='LD_PRELOAD={{ libfaketime_path.stdout_lines[0].strip() }} FAKETIME="+0y x10"' - dest: /etc/rc.conf.d/cron - owner: root - group: wheel - mode: '0644' -- name: enable cron service - service: - daemon-reload: '{{ (ansible_service_mgr == ''systemd'') | ternary(true, omit) }}' - name: '{{ cron_service }}' - state: restarted + - name: enable cron service + service: + daemon-reload: '{{ (ansible_service_mgr == ''systemd'') | ternary(true, omit) }}' + name: '{{ cron_service }}' + state: restarted diff --git a/tests/integration/targets/setup_cron/vars/alpine.yml b/tests/integration/targets/setup_cron/vars/alpine.yml new file mode 100644 index 0000000000..ae713e3a8d --- /dev/null +++ b/tests/integration/targets/setup_cron/vars/alpine.yml @@ -0,0 +1,3 @@ +cron_pkg: cronie +cron_service: cronie +list_pkg_files: apk info -L diff --git a/tests/integration/targets/setup_cron/vars/archlinux.yml b/tests/integration/targets/setup_cron/vars/archlinux.yml new file mode 100644 index 0000000000..2ebe8d11ca --- /dev/null +++ b/tests/integration/targets/setup_cron/vars/archlinux.yml @@ -0,0 +1,3 @@ +cron_pkg: cronie +cron_service: cronie +list_pkg_files: pacman -Ql diff --git a/tests/integration/targets/setup_flatpak_remote/tasks/main.yaml b/tests/integration/targets/setup_flatpak_remote/tasks/main.yaml index d80d364634..65581abed7 100644 --- a/tests/integration/targets/setup_flatpak_remote/tasks/main.yaml +++ b/tests/integration/targets/setup_flatpak_remote/tasks/main.yaml @@ -4,6 +4,9 @@ #################################################################### - name: Set up dummy flatpak repository remote + when: | + ansible_distribution == 'Fedora' or + ansible_distribution == 'Ubuntu' and not ansible_distribution_major_version | int < 16 block: - name: Copy repo into place unarchive: diff --git a/tests/integration/targets/setup_java_keytool/vars/Alpine.yml b/tests/integration/targets/setup_java_keytool/vars/Alpine.yml new file mode 100644 index 0000000000..471da74d6b --- /dev/null +++ b/tests/integration/targets/setup_java_keytool/vars/Alpine.yml @@ -0,0 +1,2 @@ +--- +keytool_package_name: openjdk11-jre-headless diff --git a/tests/integration/targets/setup_java_keytool/vars/Archlinux.yml b/tests/integration/targets/setup_java_keytool/vars/Archlinux.yml new file mode 100644 index 0000000000..15acabe1e5 --- /dev/null +++ b/tests/integration/targets/setup_java_keytool/vars/Archlinux.yml @@ -0,0 +1,2 @@ +--- +keytool_package_name: jre11-openjdk-headless diff --git a/tests/integration/targets/setup_openssl/tasks/main.yml b/tests/integration/targets/setup_openssl/tasks/main.yml index 27d485a83f..a449926eaf 100644 --- a/tests/integration/targets/setup_openssl/tasks/main.yml +++ b/tests/integration/targets/setup_openssl/tasks/main.yml @@ -5,8 +5,17 @@ #################################################################### - name: Include OS-specific variables - include_vars: '{{ ansible_os_family }}.yml' - when: not ansible_os_family == "Darwin" + include_vars: '{{ lookup("first_found", search) }}' + vars: + search: + files: + - '{{ ansible_distribution }}-{{ ansible_distribution_major_version }}.yml' + - '{{ ansible_distribution }}-{{ ansible_distribution_version }}.yml' + - '{{ ansible_distribution }}.yml' + - '{{ ansible_os_family }}.yml' + - default.yml + paths: + - vars - name: Install OpenSSL become: True @@ -14,49 +23,38 @@ name: '{{ openssl_package_name }}' when: not ansible_os_family == 'Darwin' -- name: Install pyOpenSSL (Python 3) - become: True - package: - name: '{{ pyopenssl_package_name_python3 }}' - when: not ansible_os_family == 'Darwin' and ansible_python_version is version('3.0', '>=') - -- name: Install pyOpenSSL (Python 2) - become: True - package: - name: '{{ pyopenssl_package_name }}' - when: not ansible_os_family == 'Darwin' and ansible_python_version is version('3.0', '<') - -- name: Install pyOpenSSL (Darwin) - become: True - pip: - name: pyOpenSSL - extra_args: "-c {{ remote_constraints }}" - when: ansible_os_family == 'Darwin' - - when: ansible_facts.distribution ~ ansible_facts.distribution_major_version not in ['CentOS6', 'RedHat6'] block: - name: Install cryptography (Python 3) become: true package: name: '{{ cryptography_package_name_python3 }}' - when: not ansible_os_family == 'Darwin' and ansible_python_version is version('3.0', '>=') + when: not cryptography_from_pip and ansible_python_version is version('3.0', '>=') - name: Install cryptography (Python 2) become: true package: name: '{{ cryptography_package_name }}' - when: not ansible_os_family == 'Darwin' and ansible_python_version is version('3.0', '<') + when: not cryptography_from_pip and ansible_python_version is version('3.0', '<') - - name: Install cryptography (Darwin) + - name: Install cryptography (pip) become: true pip: name: cryptography>=3.3 extra_args: "-c {{ remote_constraints }}" - when: ansible_os_family == 'Darwin' + when: cryptography_from_pip -- name: register pyOpenSSL version - command: "{{ ansible_python.executable }} -c 'import OpenSSL; print(OpenSSL.__version__)'" - register: pyopenssl_version +- name: Install pyOpenSSL (Python 3) + become: True + package: + name: '{{ pyopenssl_package_name_python3 }}' + when: pyopenssl_package_name_python3 is defined and ansible_python_version is version('3.0', '>=') + +- name: Install pyOpenSSL (Python 2) + become: True + package: + name: '{{ pyopenssl_package_name }}' + when: pyopenssl_package_name is defined and ansible_python_version is version('3.0', '<') - name: register openssl version shell: "openssl version | cut -d' ' -f2" diff --git a/tests/integration/targets/setup_openssl/vars/Alpine.yml b/tests/integration/targets/setup_openssl/vars/Alpine.yml new file mode 100644 index 0000000000..664da81f7f --- /dev/null +++ b/tests/integration/targets/setup_openssl/vars/Alpine.yml @@ -0,0 +1,6 @@ +cryptography_package_name: py-cryptography +cryptography_package_name_python3: py3-cryptography +pyopenssl_package_name: py-openssl +pyopenssl_package_name_python3: py3-openssl +openssl_package_name: openssl +cryptography_from_pip: false diff --git a/tests/integration/targets/setup_openssl/vars/Archlinux.yml b/tests/integration/targets/setup_openssl/vars/Archlinux.yml new file mode 100644 index 0000000000..f503b8e9d0 --- /dev/null +++ b/tests/integration/targets/setup_openssl/vars/Archlinux.yml @@ -0,0 +1,6 @@ +cryptography_package_name: python-cryptography +cryptography_package_name_python3: python-cryptography +pyopenssl_package_name: python-pyopenssl +pyopenssl_package_name_python3: python-pyopenssl +openssl_package_name: openssl +cryptography_from_pip: false diff --git a/tests/integration/targets/setup_openssl/vars/CentOS-8.yml b/tests/integration/targets/setup_openssl/vars/CentOS-8.yml new file mode 100644 index 0000000000..a3521337c9 --- /dev/null +++ b/tests/integration/targets/setup_openssl/vars/CentOS-8.yml @@ -0,0 +1,4 @@ +cryptography_package_name: python-cryptography +cryptography_package_name_python3: python3-cryptography +openssl_package_name: openssl +cryptography_from_pip: '{{ ansible_python_version is version("3.8", ">=") }}' diff --git a/tests/integration/targets/setup_openssl/vars/Darwin.yml b/tests/integration/targets/setup_openssl/vars/Darwin.yml new file mode 100644 index 0000000000..8dfa88ebae --- /dev/null +++ b/tests/integration/targets/setup_openssl/vars/Darwin.yml @@ -0,0 +1 @@ +cryptography_from_pip: true diff --git a/tests/integration/targets/setup_openssl/vars/Debian.yml b/tests/integration/targets/setup_openssl/vars/Debian.yml index 7254d00a5f..8181922778 100644 --- a/tests/integration/targets/setup_openssl/vars/Debian.yml +++ b/tests/integration/targets/setup_openssl/vars/Debian.yml @@ -3,3 +3,4 @@ cryptography_package_name_python3: python3-cryptography pyopenssl_package_name: python-openssl pyopenssl_package_name_python3: python3-openssl openssl_package_name: openssl +cryptography_from_pip: false diff --git a/tests/integration/targets/setup_openssl/vars/FreeBSD.yml b/tests/integration/targets/setup_openssl/vars/FreeBSD.yml index c34b3646f4..6de6920e5d 100644 --- a/tests/integration/targets/setup_openssl/vars/FreeBSD.yml +++ b/tests/integration/targets/setup_openssl/vars/FreeBSD.yml @@ -3,3 +3,4 @@ cryptography_package_name_python3: "py{{ ansible_python.version.major }}{{ ansib pyopenssl_package_name: py27-openssl pyopenssl_package_name_python3: "py{{ ansible_python.version.major }}{{ ansible_python.version.minor }}-openssl" openssl_package_name: openssl +cryptography_from_pip: false diff --git a/tests/integration/targets/setup_openssl/vars/RedHat.yml b/tests/integration/targets/setup_openssl/vars/RedHat.yml index 5e077d732f..0ae46a475f 100644 --- a/tests/integration/targets/setup_openssl/vars/RedHat.yml +++ b/tests/integration/targets/setup_openssl/vars/RedHat.yml @@ -3,3 +3,4 @@ cryptography_package_name_python3: python3-cryptography pyopenssl_package_name: pyOpenSSL pyopenssl_package_name_python3: python3-pyOpenSSL openssl_package_name: openssl +cryptography_from_pip: false diff --git a/tests/integration/targets/setup_openssl/vars/Suse.yml b/tests/integration/targets/setup_openssl/vars/Suse.yml index ec2c556bee..6725aa79b6 100644 --- a/tests/integration/targets/setup_openssl/vars/Suse.yml +++ b/tests/integration/targets/setup_openssl/vars/Suse.yml @@ -3,3 +3,4 @@ cryptography_package_name_python3: python3-cryptography pyopenssl_package_name: python-pyOpenSSL pyopenssl_package_name_python3: python3-pyOpenSSL openssl_package_name: openssl +cryptography_from_pip: false diff --git a/tests/integration/targets/setup_pkg_mgr/tasks/main.yml b/tests/integration/targets/setup_pkg_mgr/tasks/main.yml index 1918d0f54b..66735fed11 100644 --- a/tests/integration/targets/setup_pkg_mgr/tasks/main.yml +++ b/tests/integration/targets/setup_pkg_mgr/tasks/main.yml @@ -20,4 +20,5 @@ cmd: | sed -i 's/mirrorlist/#mirrorlist/g' /etc/yum.repos.d/CentOS-Linux-*.repo sed -i 's%#baseurl=http://mirror.centos.org/$contentdir/$releasever/%baseurl=https://vault.centos.org/8.4.2105/%g' /etc/yum.repos.d/CentOS-Linux-*.repo + ignore_errors: true # This fails for CentOS Stream 8 when: ansible_distribution in 'CentOS' and ansible_distribution_major_version == '8' diff --git a/tests/integration/targets/setup_postgresql_db/tasks/main.yml b/tests/integration/targets/setup_postgresql_db/tasks/main.yml index 33e9024ba1..31f087f644 100644 --- a/tests/integration/targets/setup_postgresql_db/tasks/main.yml +++ b/tests/integration/targets/setup_postgresql_db/tasks/main.yml @@ -99,6 +99,14 @@ command: /sbin/service postgresql initdb when: ansible_os_family == "RedHat" and ansible_service_mgr != "systemd" +- name: Initialize postgres (Archlinux) + command: su - postgres -c "initdb --locale en_US.UTF-8 -D '/var/lib/postgres/data'" + when: ansible_os_family == "Archlinux" + +- name: Initialize postgres (Alpine) + command: su - postgres -c "initdb --locale en_US.UTF-8 -D '/var/lib/postgresql/data'" + when: ansible_os_family == "Alpine" + - name: Initialize postgres (Debian) shell: . /usr/share/postgresql-common/maintscripts-functions && set_system_locale && /usr/bin/pg_createcluster -u postgres {{ pg_ver }} main args: diff --git a/tests/integration/targets/setup_postgresql_db/vars/Alpine-py3.yml b/tests/integration/targets/setup_postgresql_db/vars/Alpine-py3.yml new file mode 100644 index 0000000000..e7d9b5aea6 --- /dev/null +++ b/tests/integration/targets/setup_postgresql_db/vars/Alpine-py3.yml @@ -0,0 +1,6 @@ +postgresql_packages: + - "postgresql" + - "py3-psycopg2" + +pg_hba_location: "/var/lib/postgresql/data/pg_hba.conf" +pg_dir: "/var/lib/postgresql/data" diff --git a/tests/integration/targets/setup_postgresql_db/vars/Archlinux-py3.yml b/tests/integration/targets/setup_postgresql_db/vars/Archlinux-py3.yml new file mode 100644 index 0000000000..693328e92b --- /dev/null +++ b/tests/integration/targets/setup_postgresql_db/vars/Archlinux-py3.yml @@ -0,0 +1,6 @@ +postgresql_packages: + - "postgresql" + - "python-psycopg2" + +pg_hba_location: "/var/lib/postgres/data/pg_hba.conf" +pg_dir: "/var/lib/postgres/data" diff --git a/tests/integration/targets/setup_postgresql_db/vars/Debian-11-py3.yml b/tests/integration/targets/setup_postgresql_db/vars/Debian-11-py3.yml new file mode 100644 index 0000000000..a46ecd2bd5 --- /dev/null +++ b/tests/integration/targets/setup_postgresql_db/vars/Debian-11-py3.yml @@ -0,0 +1,8 @@ +postgresql_packages: + - "postgresql" + - "postgresql-common" + - "python3-psycopg2" + +pg_hba_location: "/etc/postgresql/13/main/pg_hba.conf" +pg_dir: "/var/lib/postgresql/13/main" +pg_ver: 13 diff --git a/tests/integration/targets/setup_redis_replication/defaults/main.yml b/tests/integration/targets/setup_redis_replication/defaults/main.yml index 999bb96ebf..1ab3c53a15 100644 --- a/tests/integration/targets/setup_redis_replication/defaults/main.yml +++ b/tests/integration/targets/setup_redis_replication/defaults/main.yml @@ -1,5 +1,11 @@ # General redis_packages: + Alpine: + - redis + Archlinux: + - redis + Debian: + - redis-server Ubuntu: - redis-server openSUSE Leap: @@ -12,6 +18,9 @@ redis_packages: - redis redis_bin: + Alpine: /usr/bin/redis-server + Archlinux: /usr/bin/redis-server + Debian: /usr/bin/redis-server Ubuntu: /usr/bin/redis-server openSUSE Leap: /usr/sbin/redis-server Fedora: /usr/bin/redis-server diff --git a/tests/integration/targets/setup_redis_replication/tasks/main.yml b/tests/integration/targets/setup_redis_replication/tasks/main.yml index 49e81c61f1..6028a0fa1d 100644 --- a/tests/integration/targets/setup_redis_replication/tasks/main.yml +++ b/tests/integration/targets/setup_redis_replication/tasks/main.yml @@ -8,4 +8,4 @@ - import_tasks: setup_redis_cluster.yml when: - - ansible_distribution in ['CentOS', 'Fedora', 'FreeBSD', 'openSUSE Leap', 'Ubuntu'] + - ansible_distribution in ['CentOS', 'Fedora', 'FreeBSD', 'openSUSE Leap', 'Ubuntu', 'Debian', 'Archlinux', 'Alpine'] diff --git a/tests/integration/targets/setup_redis_replication/tasks/setup_redis_cluster.yml b/tests/integration/targets/setup_redis_replication/tasks/setup_redis_cluster.yml index b73ed4ce98..534f3d5686 100644 --- a/tests/integration/targets/setup_redis_replication/tasks/setup_redis_cluster.yml +++ b/tests/integration/targets/setup_redis_replication/tasks/setup_redis_cluster.yml @@ -1,44 +1,11 @@ # We run two servers listening different ports # to be able to check replication (one server for master, another for replica). -- name: Install redis server apt dependencies - apt: +- name: Install redis dependencies + package: name: "{{ redis_packages[ansible_distribution] }}" state: latest - policy_rc_d: 101 - when: - - ansible_facts.pkg_mgr == 'apt' - notify: cleanup redis - -- name: Install redis server rpm dependencies - yum: - name: "{{ redis_packages[ansible_distribution] }}" - state: latest - when: - - ansible_facts.pkg_mgr == 'yum' - notify: cleanup redis - -- name: Install redis rpm dependencies - dnf: - name: "{{ redis_packages[ansible_distribution] }}" - state: latest - when: ansible_facts.pkg_mgr == 'dnf' - notify: cleanup redis - -- name: Install redis server zypper dependencies - zypper: - name: "{{ redis_packages[ansible_distribution] }}" - state: latest - when: - - ansible_facts.pkg_mgr == 'community.general.zypper' - notify: cleanup redis - -- name: Install redis FreeBSD dependencies - community.general.pkgng: - name: "{{ redis_packages[ansible_distribution] }}" - state: latest - when: - - ansible_facts.pkg_mgr == 'community.general.pkgng' + policy_rc_d: "{{ 101 if ansible_facts.pkg_mgr == 'apt' else omit }}" notify: cleanup redis - name: Install redis module diff --git a/tests/integration/targets/setup_rundeck/vars/Alpine.yml b/tests/integration/targets/setup_rundeck/vars/Alpine.yml new file mode 100644 index 0000000000..7a5b937e3f --- /dev/null +++ b/tests/integration/targets/setup_rundeck/vars/Alpine.yml @@ -0,0 +1 @@ +openjdk_pkg: openjdk11-jre-headless diff --git a/tests/integration/targets/setup_rundeck/vars/Archlinux.yml b/tests/integration/targets/setup_rundeck/vars/Archlinux.yml new file mode 100644 index 0000000000..a3b6a08ddf --- /dev/null +++ b/tests/integration/targets/setup_rundeck/vars/Archlinux.yml @@ -0,0 +1 @@ +openjdk_pkg: jre11-openjdk-headless diff --git a/tests/integration/targets/setup_rundeck/vars/Debian.yml b/tests/integration/targets/setup_rundeck/vars/Debian.yml index b3bc6ac96e..b5f0c421c1 100644 --- a/tests/integration/targets/setup_rundeck/vars/Debian.yml +++ b/tests/integration/targets/setup_rundeck/vars/Debian.yml @@ -1 +1 @@ -openjdk_pkg: openjdk-8-jre-headless +openjdk_pkg: openjdk-11-jre-headless diff --git a/tests/integration/targets/shutdown/tasks/main.yml b/tests/integration/targets/shutdown/tasks/main.yml index 3e4357310d..0f256c08bb 100644 --- a/tests/integration/targets/shutdown/tasks/main.yml +++ b/tests/integration/targets/shutdown/tasks/main.yml @@ -4,11 +4,11 @@ # and should not be used as examples of how to write Ansible roles # #################################################################### -- name: Install systemd-sysv on ubuntu 18 +- name: Install systemd-sysv on Ubuntu 18 and Debian apt: name: systemd-sysv state: present - when: ansible_distribution == 'Ubuntu' and ansible_distribution_major_version is version('18', '>=') + when: (ansible_distribution == 'Ubuntu' and ansible_distribution_major_version is version('18', '>=')) or (ansible_distribution == 'Debian') register: systemd_sysv_install - name: Execute shutdown with custom message and delay diff --git a/tests/integration/targets/timezone/tasks/main.yml b/tests/integration/targets/timezone/tasks/main.yml index 3662d3e950..ddd7b74e7b 100644 --- a/tests/integration/targets/timezone/tasks/main.yml +++ b/tests/integration/targets/timezone/tasks/main.yml @@ -43,6 +43,12 @@ #### timezone tests #### +- name: make sure diffutils are installed on ArchLinux + package: + name: diffutils + state: present + when: ansible_distribution == 'Archlinux' + - name: make sure the dbus service is started under systemd systemd: name: dbus @@ -57,7 +63,9 @@ # Skip tests on Fedora 31 and 32 because dbus fails to start unless the container is run in priveleged mode. # Even then, it starts unreliably. This may be due to the move to cgroup v2 in Fedora 31 and 32. # https://www.redhat.com/sysadmin/fedora-31-control-group-v2 - when: ansible_facts.distribution ~ ansible_facts.distribution_major_version not in ['Fedora31', 'Fedora32'] + when: + - ansible_facts.distribution ~ ansible_facts.distribution_major_version not in ['Fedora31', 'Fedora32'] + - not (ansible_os_family == 'Alpine') # TODO block: - name: set timezone to Etc/UTC timezone: diff --git a/tests/integration/targets/yarn/tasks/main.yml b/tests/integration/targets/yarn/tasks/main.yml index 830539f1ed..83ddea760f 100644 --- a/tests/integration/targets/yarn/tasks/main.yml +++ b/tests/integration/targets/yarn/tasks/main.yml @@ -30,4 +30,6 @@ yarn_version: '{{ item.yarn_version }}' with_items: - {node_version: 4.8.0, yarn_version: 1.6.0} # Lowest compatible nodejs version - - {node_version: 8.0.0, yarn_version: 1.6.0} \ No newline at end of file + - {node_version: 8.0.0, yarn_version: 1.6.0} + when: + - not (ansible_os_family == 'Alpine') # TODO diff --git a/tests/utils/shippable/linux-community.sh b/tests/utils/shippable/linux-community.sh new file mode 100755 index 0000000000..e68bdf387e --- /dev/null +++ b/tests/utils/shippable/linux-community.sh @@ -0,0 +1,19 @@ +#!/usr/bin/env bash + +set -o pipefail -eux + +declare -a args +IFS='/:' read -ra args <<< "$1" + +image="${args[1]}" +python="${args[2]}" + +if [ "${#args[@]}" -gt 3 ]; then + target="shippable/posix/group${args[3]}/" +else + target="shippable/posix/" +fi + +# shellcheck disable=SC2086 +ansible-test integration --color -v --retry-on-error "${target}" ${COVERAGE:+"$COVERAGE"} ${CHANGED:+"$CHANGED"} ${UNSTABLE:+"$UNSTABLE"} \ + --docker "quay.io/ansible-community/test-image:${image}" --python "${python}"