From ecac1b107f8a5309b803cb7fe41d1802b427b5fe Mon Sep 17 00:00:00 2001 From: Imran Iqbal Date: Thu, 15 Oct 2020 14:11:25 +0100 Subject: [PATCH] test(map): verify `map.jinja` dump using `_mapdata` state * Semi-automated using https://github.com/myii/ssf-formula/pull/271 --- .travis.yml | 96 +++++-- kitchen.github.yml | 11 +- kitchen.vagrant.yml | 17 +- kitchen.yml | 257 ++++++++++++++---- openvpn/_mapdata/_mapdata.jinja | 13 + openvpn/_mapdata/init.sls | 19 ++ .../default/controls/_mapdata_spec.rb | 23 ++ .../default/files/_mapdata/amazonlinux-2.yaml | 26 ++ .../files/_mapdata/arch-base-latest.yaml | 26 ++ .../default/files/_mapdata/centos-7.yaml | 26 ++ .../default/files/_mapdata/centos-8.yaml | 26 ++ .../default/files/_mapdata/debian-10.yaml | 34 +++ .../default/files/_mapdata/debian-9.yaml | 34 +++ .../default/files/_mapdata/fedora-31.yaml | 32 +++ .../default/files/_mapdata/fedora-32.yaml | 32 +++ .../default/files/_mapdata/fedora-33.yaml | 32 +++ .../default/files/_mapdata/gentoo-2-sysd.yaml | 25 ++ .../default/files/_mapdata/gentoo-2-sysv.yaml | 25 ++ .../default/files/_mapdata/opensuse-15.yaml | 25 ++ .../default/files/_mapdata/oracle-7.yaml | 26 ++ .../default/files/_mapdata/oracle-8.yaml | 26 ++ .../default/files/_mapdata/ubuntu-16.yaml | 34 +++ .../default/files/_mapdata/ubuntu-18.yaml | 34 +++ .../default/files/_mapdata/ubuntu-20.yaml | 34 +++ .../default/files/_mapdata/windows-8.yaml | 23 ++ .../files/_mapdata/windows-server-2019.yaml | 23 ++ test/integration/default/inspec.yml | 5 + test/integration/share/README.md | 19 ++ test/integration/share/inspec.yml | 21 ++ test/integration/share/libraries/system.rb | 91 +++++++ 30 files changed, 1023 insertions(+), 92 deletions(-) create mode 100644 openvpn/_mapdata/_mapdata.jinja create mode 100644 openvpn/_mapdata/init.sls create mode 100644 test/integration/default/controls/_mapdata_spec.rb create mode 100644 test/integration/default/files/_mapdata/amazonlinux-2.yaml create mode 100644 test/integration/default/files/_mapdata/arch-base-latest.yaml create mode 100644 test/integration/default/files/_mapdata/centos-7.yaml create mode 100644 test/integration/default/files/_mapdata/centos-8.yaml create mode 100644 test/integration/default/files/_mapdata/debian-10.yaml create mode 100644 test/integration/default/files/_mapdata/debian-9.yaml create mode 100644 test/integration/default/files/_mapdata/fedora-31.yaml create mode 100644 test/integration/default/files/_mapdata/fedora-32.yaml create mode 100644 test/integration/default/files/_mapdata/fedora-33.yaml create mode 100644 test/integration/default/files/_mapdata/gentoo-2-sysd.yaml create mode 100644 test/integration/default/files/_mapdata/gentoo-2-sysv.yaml create mode 100644 test/integration/default/files/_mapdata/opensuse-15.yaml create mode 100644 test/integration/default/files/_mapdata/oracle-7.yaml create mode 100644 test/integration/default/files/_mapdata/oracle-8.yaml create mode 100644 test/integration/default/files/_mapdata/ubuntu-16.yaml create mode 100644 test/integration/default/files/_mapdata/ubuntu-18.yaml create mode 100644 test/integration/default/files/_mapdata/ubuntu-20.yaml create mode 100644 test/integration/default/files/_mapdata/windows-8.yaml create mode 100644 test/integration/default/files/_mapdata/windows-server-2019.yaml create mode 100644 test/integration/share/README.md create mode 100644 test/integration/share/inspec.yml create mode 100644 test/integration/share/libraries/system.rb diff --git a/.travis.yml b/.travis.yml index 73dbe64..d54beb5 100644 --- a/.travis.yml +++ b/.travis.yml @@ -72,35 +72,81 @@ jobs: ## Define the rest of the matrix based on Kitchen testing # Make sure the instances listed below match up with # the `platforms` defined in `kitchen.yml` + # - env: INSTANCE=default-debian-10-tiamat-py3 + # - env: INSTANCE=default-debian-9-tiamat-py3 + # - env: INSTANCE=default-ubuntu-2004-tiamat-py3 + # - env: INSTANCE=default-ubuntu-1804-tiamat-py3 + # - env: INSTANCE=default-ubuntu-1604-tiamat-py3 + # - env: INSTANCE=default-centos-8-tiamat-py3 + # - env: INSTANCE=default-centos-7-tiamat-py3 + # - env: INSTANCE=default-amazonlinux-2-tiamat-py3 + # - env: INSTANCE=default-oraclelinux-8-tiamat-py3 + # - env: INSTANCE=default-oraclelinux-7-tiamat-py3 - env: INSTANCE=default-debian-10-master-py3 + # - env: INSTANCE=default-debian-9-master-py3 + - env: INSTANCE=default-ubuntu-2004-master-py3 # - env: INSTANCE=default-ubuntu-1804-master-py3 + # - env: INSTANCE=default-ubuntu-1604-master-py3 # - env: INSTANCE=default-centos-8-master-py3 + - env: INSTANCE=default-centos-7-master-py3 + # - env: INSTANCE=default-fedora-33-master-py3 + # - env: INSTANCE=default-fedora-32-master-py3 # - env: INSTANCE=default-fedora-31-master-py3 - # - env: INSTANCE=default-opensuse-leap-151-master-py3 - # - env: INSTANCE=default-amazonlinux-2-master-py3 - # - env: INSTANCE=default-debian-10-2019-2-py3 - # - env: INSTANCE=default-debian-9-2019-2-py3 - - env: INSTANCE=default-ubuntu-1804-2019-2-py3 - # - env: INSTANCE=default-centos-8-2019-2-py3 - # - env: INSTANCE=default-fedora-31-2019-2-py3 - # - env: INSTANCE=default-opensuse-leap-151-2019-2-py3 - # - env: INSTANCE=default-centos-7-2019-2-py2 - - env: INSTANCE=default-amazonlinux-2-2019-2-py3 - # - env: INSTANCE=default-arch-base-latest-2019-2-py2 - # - env: INSTANCE=default-fedora-30-2018-3-py3 - # - env: INSTANCE=default-debian-9-2018-3-py2 - # - env: INSTANCE=default-ubuntu-1604-2018-3-py2 - - env: INSTANCE=default-centos-7-2018-3-py2 - - env: INSTANCE=default-opensuse-leap-151-2018-3-py2 - # - env: INSTANCE=default-amazonlinux-1-2018-3-py2 - # - env: INSTANCE=default-arch-base-latest-2018-3-py2 - # - env: INSTANCE=default-debian-8-2017-7-py2 - # - env: INSTANCE=default-ubuntu-1604-2017-7-py2 - - env: INSTANCE=default-centos-6-2017-7-py2 - # - env: INSTANCE=default-fedora-30-2017-7-py2 - # - env: INSTANCE=default-opensuse-leap-151-2017-7-py2 - # - env: INSTANCE=default-amazonlinux-1-2017-7-py2 - # - env: INSTANCE=default-arch-base-latest-2017-7-py2 + - env: INSTANCE=default-opensuse-leap-152-master-py3 + - env: INSTANCE=default-amazonlinux-2-master-py3 + # - env: INSTANCE=default-oraclelinux-8-master-py3 + # - env: INSTANCE=default-gentoo-stage3-latest-master-py3 + # - env: INSTANCE=default-gentoo-stage3-systemd-master-py3 + # - env: INSTANCE=default-debian-10-3002-0-py3 + # - env: INSTANCE=default-debian-9-3002-0-py3 + # - env: INSTANCE=default-ubuntu-2004-3002-0-py3 + # - env: INSTANCE=default-ubuntu-1804-3002-0-py3 + # - env: INSTANCE=default-ubuntu-1604-3002-0-py3 + # - env: INSTANCE=default-centos-8-3002-0-py3 + # - env: INSTANCE=default-centos-7-3002-0-py3 + # - env: INSTANCE=default-fedora-33-3002-0-py3 + # - env: INSTANCE=default-fedora-32-3002-0-py3 + # - env: INSTANCE=default-fedora-31-3002-0-py3 + # - env: INSTANCE=default-opensuse-leap-152-3002-0-py3 + # - env: INSTANCE=default-amazonlinux-2-3002-0-py3 + # - env: INSTANCE=default-oraclelinux-8-3002-0-py3 + - env: INSTANCE=default-oraclelinux-7-3002-0-py3 + # - env: INSTANCE=default-arch-base-latest-3002-0-py3 + # - env: INSTANCE=default-debian-10-3001-1-py3 + # - env: INSTANCE=default-debian-9-3001-1-py3 + # - env: INSTANCE=default-ubuntu-2004-3001-1-py3 + # - env: INSTANCE=default-ubuntu-1804-3001-1-py3 + # - env: INSTANCE=default-ubuntu-1604-3001-1-py3 + # - env: INSTANCE=default-centos-8-3001-1-py3 + # - env: INSTANCE=default-centos-7-3001-1-py3 + # - env: INSTANCE=default-fedora-33-3001-1-py3 + # - env: INSTANCE=default-fedora-32-3001-1-py3 + # - env: INSTANCE=default-fedora-31-3001-1-py3 + # - env: INSTANCE=default-opensuse-leap-152-3001-1-py3 + # - env: INSTANCE=default-amazonlinux-2-3001-1-py3 + # - env: INSTANCE=default-oraclelinux-8-3001-1-py3 + # - env: INSTANCE=default-oraclelinux-7-3001-1-py3 + # - env: INSTANCE=default-arch-base-latest-3001-1-py3 + # - env: INSTANCE=default-gentoo-stage3-latest-3001-1-py3 + # - env: INSTANCE=default-gentoo-stage3-systemd-3001-1-py3 + # - env: INSTANCE=default-debian-10-3000-3-py3 + # - env: INSTANCE=default-debian-9-3000-3-py3 + # - env: INSTANCE=default-ubuntu-1804-3000-3-py3 + # - env: INSTANCE=default-ubuntu-1604-3000-3-py3 + # - env: INSTANCE=default-centos-8-3000-3-py3 + # - env: INSTANCE=default-centos-7-3000-3-py3 + # - env: INSTANCE=default-fedora-31-3000-3-py3 + # - env: INSTANCE=default-opensuse-leap-152-3000-3-py3 + # - env: INSTANCE=default-amazonlinux-2-3000-3-py3 + # - env: INSTANCE=default-oraclelinux-8-3000-3-py3 + # - env: INSTANCE=default-oraclelinux-7-3000-3-py3 + # - env: INSTANCE=default-gentoo-stage3-latest-3000-3-py3 + # - env: INSTANCE=default-gentoo-stage3-systemd-3000-3-py3 + # - env: INSTANCE=default-ubuntu-1804-3000-3-py2 + # - env: INSTANCE=default-ubuntu-1604-3000-3-py2 + # - env: INSTANCE=default-centos-6-3000-3-py2 + # - env: INSTANCE=default-amazonlinux-1-3000-3-py2 + # - env: INSTANCE=default-arch-base-latest-3000-3-py2 ## Define the release stage that runs `semantic-release` - stage: 'release' diff --git a/kitchen.github.yml b/kitchen.github.yml index 4646204..5bfc888 100644 --- a/kitchen.github.yml +++ b/kitchen.github.yml @@ -13,8 +13,9 @@ platforms: provisioner: salt_install: bootstrap salt_bootstrap_options: -pythonVersion 3 - init_environment: > - C:\salt\salt-call --local state.single file.managed - C:\Users\kitchen\AppData\Local\Temp\kitchen\srv\salt\win\repo-ng\openvpn.sls - source=https://github.com/saltstack/salt-winrepo-ng/raw/master/openvpn.sls - skip_verify=True makedirs=True; exit 0 + init_environment: | + C:\salt\salt-call --local state.single file.managed ` + C:\Users\kitchen\AppData\Local\Temp\kitchen\srv\salt\win\repo-ng\openvpn.sls ` + source=https://github.com/saltstack/salt-winrepo-ng/raw/master/openvpn.sls ` + skip_verify=True makedirs=True + exit 0 diff --git a/kitchen.vagrant.yml b/kitchen.vagrant.yml index 50c8e5d..f37949a 100644 --- a/kitchen.vagrant.yml +++ b/kitchen.vagrant.yml @@ -11,8 +11,15 @@ platforms: gui: false linked_clone: true provisioner: - init_environment: > - salt-call --local state.single file.managed - C:\Users\vagrant\AppData\Local\Temp\kitchen\srv\salt\win\repo-ng\openvpn.sls - source=https://github.com/saltstack/salt-winrepo-ng/raw/master/openvpn.sls - skip_verify=True makedirs=True; exit 0 + init_environment: | + # Workaround to allow `kitchen converge` to be used multiple times + # without having to `kitchen destroy` first: remove state files copied + # across during the previous `converge` (if present) + rm -recurse ` + C:\Users\vagrant\AppData\Local\Temp\kitchen\var\cache\salt\minion\files\base ` + -ErrorAction SilentlyContinue + salt-call --local state.single file.managed ` + C:\Users\vagrant\AppData\Local\Temp\kitchen\srv\salt\win\repo-ng\openvpn.sls ` + source=https://github.com/saltstack/salt-winrepo-ng/raw/master/openvpn.sls ` + skip_verify=True makedirs=True + exit 0 diff --git a/kitchen.yml b/kitchen.yml index 8a73f98..9261e0e 100644 --- a/kitchen.yml +++ b/kitchen.yml @@ -11,125 +11,267 @@ driver: # Make sure the platforms listed below match up with # the `env.matrix` instances defined in `.travis.yml` platforms: + ## SALT `tiamat` + - name: debian-10-tiamat-py3 + driver: + image: saltimages/salt-tiamat-py3:debian-10 + - name: debian-9-tiamat-py3 + driver: + image: saltimages/salt-tiamat-py3:debian-9 + - name: ubuntu-2004-tiamat-py3 + driver: + image: saltimages/salt-tiamat-py3:ubuntu-20.04 + - name: ubuntu-1804-tiamat-py3 + driver: + image: saltimages/salt-tiamat-py3:ubuntu-18.04 + - name: ubuntu-1604-tiamat-py3 + driver: + image: saltimages/salt-tiamat-py3:ubuntu-16.04 + - name: centos-8-tiamat-py3 + driver: + image: saltimages/salt-tiamat-py3:centos-8 + - name: centos-7-tiamat-py3 + driver: + image: saltimages/salt-tiamat-py3:centos-7 + - name: amazonlinux-2-tiamat-py3 + driver: + image: saltimages/salt-tiamat-py3:amazonlinux-2 + - name: oraclelinux-8-tiamat-py3 + driver: + image: saltimages/salt-tiamat-py3:oraclelinux-8 + - name: oraclelinux-7-tiamat-py3 + driver: + image: saltimages/salt-tiamat-py3:oraclelinux-7 + ## SALT `master` - name: debian-10-master-py3 driver: image: saltimages/salt-master-py3:debian-10 + - name: debian-9-master-py3 + driver: + image: saltimages/salt-master-py3:debian-9 + - name: ubuntu-2004-master-py3 + driver: + image: saltimages/salt-master-py3:ubuntu-20.04 - name: ubuntu-1804-master-py3 driver: image: saltimages/salt-master-py3:ubuntu-18.04 + - name: ubuntu-1604-master-py3 + driver: + image: saltimages/salt-master-py3:ubuntu-16.04 - name: centos-8-master-py3 driver: image: saltimages/salt-master-py3:centos-8 + - name: centos-7-master-py3 + driver: + image: saltimages/salt-master-py3:centos-7 + - name: fedora-33-master-py3 + driver: + image: saltimages/salt-master-py3:fedora-33 + - name: fedora-32-master-py3 + driver: + image: saltimages/salt-master-py3:fedora-32 - name: fedora-31-master-py3 driver: image: saltimages/salt-master-py3:fedora-31 - - name: opensuse-leap-151-master-py3 + - name: opensuse-leap-152-master-py3 driver: - image: netmanagers/salt-master-py3:opensuse-leap-15.1 + image: saltimages/salt-master-py3:opensuse-leap-15.2 run_command: /usr/lib/systemd/systemd - # Workaround to avoid intermittent failures on `opensuse-leap-15.1`: + # Workaround to avoid intermittent failures on `opensuse-leap-15.2`: # => SCP did not finish successfully (255): (Net::SCP::Error) transport: max_ssh_sessions: 1 - name: amazonlinux-2-master-py3 driver: image: saltimages/salt-master-py3:amazonlinux-2 + - name: oraclelinux-8-master-py3 + driver: + image: saltimages/salt-master-py3:oraclelinux-8 + - name: gentoo-stage3-latest-master-py3 + driver: + image: saltimages/salt-master-py3:gentoo-stage3-latest + run_command: /sbin/init + - name: gentoo-stage3-systemd-master-py3 + driver: + image: saltimages/salt-master-py3:gentoo-stage3-systemd - ## SALT `2019.2` - - name: debian-10-2019-2-py3 + ## SALT `3002.0` + - name: debian-10-3002-0-py3 driver: - image: saltimages/salt-2019.2-py3:debian-10 - - name: debian-9-2019-2-py3 + image: saltimages/salt-3002.0-py3:debian-10 + - name: debian-9-3002-0-py3 driver: - image: saltimages/salt-2019.2-py3:debian-9 - - name: ubuntu-1804-2019-2-py3 + image: saltimages/salt-3002.0-py3:debian-9 + - name: ubuntu-2004-3002-0-py3 driver: - image: saltimages/salt-2019.2-py3:ubuntu-18.04 - - name: centos-8-2019-2-py3 + image: saltimages/salt-3002.0-py3:ubuntu-20.04 + - name: ubuntu-1804-3002-0-py3 driver: - image: saltimages/salt-2019.2-py3:centos-8 - - name: fedora-31-2019-2-py3 + image: saltimages/salt-3002.0-py3:ubuntu-18.04 + - name: ubuntu-1604-3002-0-py3 driver: - image: saltimages/salt-2019.2-py3:fedora-31 - - name: opensuse-leap-151-2019-2-py3 + image: saltimages/salt-3002.0-py3:ubuntu-16.04 + - name: centos-8-3002-0-py3 driver: - image: netmanagers/salt-2019.2-py3:opensuse-leap-15.1 + image: saltimages/salt-3002.0-py3:centos-8 + - name: centos-7-3002-0-py3 + driver: + image: saltimages/salt-3002.0-py3:centos-7 + - name: fedora-33-3002-0-py3 + driver: + image: saltimages/salt-3002.0-py3:fedora-33 + - name: fedora-32-3002-0-py3 + driver: + image: saltimages/salt-3002.0-py3:fedora-32 + - name: fedora-31-3002-0-py3 + driver: + image: saltimages/salt-3002.0-py3:fedora-31 + - name: opensuse-leap-152-3002-0-py3 + driver: + image: saltimages/salt-3002.0-py3:opensuse-leap-15.2 run_command: /usr/lib/systemd/systemd - # Workaround to avoid intermittent failures on `opensuse-leap-15.1`: + # Workaround to avoid intermittent failures on `opensuse-leap-15.2`: # => SCP did not finish successfully (255): (Net::SCP::Error) transport: max_ssh_sessions: 1 - - name: centos-7-2019-2-py2 + - name: amazonlinux-2-3002-0-py3 + driver: + image: saltimages/salt-3002.0-py3:amazonlinux-2 + - name: oraclelinux-8-3002-0-py3 driver: - image: netmanagers/salt-2019.2-py2:centos-7 - - name: amazonlinux-2-2019-2-py3 + image: saltimages/salt-3002.0-py3:oraclelinux-8 + - name: oraclelinux-7-3002-0-py3 driver: - image: saltimages/salt-2019.2-py3:amazonlinux-2 - - name: arch-base-latest-2019-2-py2 + image: saltimages/salt-3002.0-py3:oraclelinux-7 + - name: arch-base-latest-3002-0-py3 driver: - image: saltimages/salt-2019.2-py2:arch-base-latest + image: saltimages/salt-3002.0-py3:arch-base-latest run_command: /usr/lib/systemd/systemd - ## SALT `2018.3` - - name: fedora-30-2018-3-py3 + ## SALT `3001.1` + - name: debian-10-3001-1-py3 driver: - image: netmanagers/salt-2018.3-py3:fedora-30 - - name: debian-9-2018-3-py2 + image: saltimages/salt-3001.1-py3:debian-10 + - name: debian-9-3001-1-py3 driver: - image: netmanagers/salt-2018.3-py2:debian-9 - - name: ubuntu-1604-2018-3-py2 + image: saltimages/salt-3001.1-py3:debian-9 + - name: ubuntu-2004-3001-1-py3 driver: - image: netmanagers/salt-2018.3-py2:ubuntu-16.04 - - name: centos-7-2018-3-py2 + image: saltimages/salt-3001.1-py3:ubuntu-20.04 + - name: ubuntu-1804-3001-1-py3 driver: - image: netmanagers/salt-2018.3-py2:centos-7 - - name: opensuse-leap-151-2018-3-py2 + image: saltimages/salt-3001.1-py3:ubuntu-18.04 + - name: ubuntu-1604-3001-1-py3 driver: - image: netmanagers/salt-2018.3-py2:opensuse-leap-15.1 + image: saltimages/salt-3001.1-py3:ubuntu-16.04 + - name: centos-8-3001-1-py3 + driver: + image: saltimages/salt-3001.1-py3:centos-8 + - name: centos-7-3001-1-py3 + driver: + image: saltimages/salt-3001.1-py3:centos-7 + - name: fedora-33-3001-1-py3 + driver: + image: saltimages/salt-3001.1-py3:fedora-33 + - name: fedora-32-3001-1-py3 + driver: + image: saltimages/salt-3001.1-py3:fedora-32 + - name: fedora-31-3001-1-py3 + driver: + image: saltimages/salt-3001.1-py3:fedora-31 + - name: opensuse-leap-152-3001-1-py3 + driver: + image: saltimages/salt-3001.1-py3:opensuse-leap-15.2 run_command: /usr/lib/systemd/systemd - # Workaround to avoid intermittent failures on `opensuse-leap-15.1`: + # Workaround to avoid intermittent failures on `opensuse-leap-15.2`: # => SCP did not finish successfully (255): (Net::SCP::Error) transport: max_ssh_sessions: 1 - - name: amazonlinux-1-2018-3-py2 + - name: amazonlinux-2-3001-1-py3 driver: - image: netmanagers/salt-2018.3-py2:amazonlinux-1 - run_command: /sbin/init - - name: arch-base-latest-2018-3-py2 + image: saltimages/salt-3001.1-py3:amazonlinux-2 + - name: oraclelinux-8-3001-1-py3 driver: - image: netmanagers/salt-2018.3-py2:arch-base-latest + image: saltimages/salt-3001.1-py3:oraclelinux-8 + - name: oraclelinux-7-3001-1-py3 + driver: + image: saltimages/salt-3001.1-py3:oraclelinux-7 + - name: arch-base-latest-3001-1-py3 + driver: + image: saltimages/salt-3001.1-py3:arch-base-latest run_command: /usr/lib/systemd/systemd + - name: gentoo-stage3-latest-3001-1-py3 + driver: + image: saltimages/salt-3001.1-py3:gentoo-stage3-latest + run_command: /sbin/init + - name: gentoo-stage3-systemd-3001-1-py3 + driver: + image: saltimages/salt-3001.1-py3:gentoo-stage3-systemd - ## SALT `2017.7` - - name: debian-8-2017-7-py2 + ## SALT `3000.3` + - name: debian-10-3000-3-py3 driver: - image: netmanagers/salt-2017.7-py2:debian-8 - - name: ubuntu-1604-2017-7-py2 + image: saltimages/salt-3000.3-py3:debian-10 + - name: debian-9-3000-3-py3 driver: - image: netmanagers/salt-2017.7-py2:ubuntu-16.04 - - name: centos-6-2017-7-py2 + image: saltimages/salt-3000.3-py3:debian-9 + - name: ubuntu-1804-3000-3-py3 driver: - image: netmanagers/salt-2017.7-py2:centos-6 - run_command: /sbin/init - - name: fedora-30-2017-7-py2 + image: saltimages/salt-3000.3-py3:ubuntu-18.04 + - name: ubuntu-1604-3000-3-py3 driver: - image: netmanagers/salt-2017.7-py2:fedora-30 - - name: opensuse-leap-151-2017-7-py2 + image: saltimages/salt-3000.3-py3:ubuntu-16.04 + - name: centos-8-3000-3-py3 driver: - image: netmanagers/salt-2017.7-py2:opensuse-leap-15.1 + image: saltimages/salt-3000.3-py3:centos-8 + - name: centos-7-3000-3-py3 + driver: + image: saltimages/salt-3000.3-py3:centos-7 + - name: fedora-31-3000-3-py3 + driver: + image: saltimages/salt-3000.3-py3:fedora-31 + - name: opensuse-leap-152-3000-3-py3 + driver: + image: saltimages/salt-3000.3-py3:opensuse-leap-15.2 run_command: /usr/lib/systemd/systemd - # Workaround to avoid intermittent failures on `opensuse-leap-15.1`: + # Workaround to avoid intermittent failures on `opensuse-leap-15.2`: # => SCP did not finish successfully (255): (Net::SCP::Error) transport: max_ssh_sessions: 1 - - name: amazonlinux-1-2017-7-py2 + - name: amazonlinux-2-3000-3-py3 + driver: + image: saltimages/salt-3000.3-py3:amazonlinux-2 + - name: oraclelinux-8-3000-3-py3 + driver: + image: saltimages/salt-3000.3-py3:oraclelinux-8 + - name: oraclelinux-7-3000-3-py3 + driver: + image: saltimages/salt-3000.3-py3:oraclelinux-7 + - name: gentoo-stage3-latest-3000-3-py3 + driver: + image: saltimages/salt-3000.3-py3:gentoo-stage3-latest + run_command: /sbin/init + - name: gentoo-stage3-systemd-3000-3-py3 + driver: + image: saltimages/salt-3000.3-py3:gentoo-stage3-systemd + - name: ubuntu-1804-3000-3-py2 + driver: + image: saltimages/salt-3000.3-py2:ubuntu-18.04 + - name: ubuntu-1604-3000-3-py2 + driver: + image: saltimages/salt-3000.3-py2:ubuntu-16.04 + - name: centos-6-3000-3-py2 + driver: + image: saltimages/salt-3000.3-py2:centos-6 + run_command: /sbin/init + - name: amazonlinux-1-3000-3-py2 driver: - image: netmanagers/salt-2017.7-py2:amazonlinux-1 + image: saltimages/salt-3000.3-py2:amazonlinux-1 run_command: /sbin/init - - name: arch-base-latest-2017-7-py2 + - name: arch-base-latest-3000-3-py2 driver: - image: netmanagers/salt-2017.7-py2:arch-base-latest + image: saltimages/salt-3000.3-py2:arch-base-latest run_command: /usr/lib/systemd/systemd provisioner: @@ -156,6 +298,7 @@ suites: state_top: base: '*': + - openvpn._mapdata - openvpn.config pillars: top.sls: diff --git a/openvpn/_mapdata/_mapdata.jinja b/openvpn/_mapdata/_mapdata.jinja new file mode 100644 index 0000000..ad54eaa --- /dev/null +++ b/openvpn/_mapdata/_mapdata.jinja @@ -0,0 +1,13 @@ +# yamllint disable rule:indentation rule:line-length +# {{ grains.get('osfinger', grains.os) }} +--- +{#- use salt.slsutil.serialize to avoid encoding errors on some platforms #} +{{ salt['slsutil.serialize']( + 'yaml', + map, + default_flow_style=False, + allow_unicode=True, + ) + | regex_replace("^\s+'$", "'", multiline=True) + | trim +}} diff --git a/openvpn/_mapdata/init.sls b/openvpn/_mapdata/init.sls new file mode 100644 index 0000000..684fca1 --- /dev/null +++ b/openvpn/_mapdata/init.sls @@ -0,0 +1,19 @@ +# -*- coding: utf-8 -*- +# vim: ft=sls +--- +{#- Get the `tplroot` from `tpldir` #} +{%- set tplroot = tpldir.split('/')[0] %} +{%- from tplroot ~ "/map.jinja" import map as mapdata with context %} + +{%- do salt['log.debug']('### MAP.JINJA DUMP ###\n' ~ mapdata | yaml(False)) %} + +{%- set output_dir = '/temp' if grains.os_family == 'Windows' else '/tmp' %} +{%- set output_file = output_dir ~ '/salt_mapdata_dump.yaml' %} + +{{ tplroot }}-mapdata-dump: + file.managed: + - name: {{ output_file }} + - source: salt://{{ tplroot }}/_mapdata/_mapdata.jinja + - template: jinja + - context: + map: {{ mapdata | yaml }} diff --git a/test/integration/default/controls/_mapdata_spec.rb b/test/integration/default/controls/_mapdata_spec.rb new file mode 100644 index 0000000..2cced0a --- /dev/null +++ b/test/integration/default/controls/_mapdata_spec.rb @@ -0,0 +1,23 @@ +# frozen_string_literal: true + +require 'yaml' + +control '`map.jinja` YAML dump' do + title 'should match the comparison file' + + # Strip the `platform[:finger]` version number down to the "OS major release" + mapdata_file = "_mapdata/#{system.platform[:finger].split('.').first}.yaml" + + # Load the mapdata from profile https://docs.chef.io/inspec/profiles/#profile-files + mapdata_dump = YAML.safe_load(inspec.profile.file(mapdata_file)) + + # Derive the location of the dumped mapdata + output_dir = platform[:family] == 'windows' ? '/temp' : '/tmp' + output_file = "#{output_dir}/salt_mapdata_dump.yaml" + + describe 'File content' do + it 'should match profile map data exactly' do + expect(yaml(output_file).params).to eq(mapdata_dump) + end + end +end diff --git a/test/integration/default/files/_mapdata/amazonlinux-2.yaml b/test/integration/default/files/_mapdata/amazonlinux-2.yaml new file mode 100644 index 0000000..fa9e454 --- /dev/null +++ b/test/integration/default/files/_mapdata/amazonlinux-2.yaml @@ -0,0 +1,26 @@ +# yamllint disable rule:indentation rule:line-length +# Amazon Linux-2 +--- +bin_dir: null +conf_dir: /etc/openvpn +conf_ext: conf +dh_files: +- '512' +dsaparam: false +external_repo_enabled: true +external_repo_supported: [] +external_repo_version: stable +group: openvpn +log_user: null +manage_group: true +manage_user: true +multi_services: true +network_manager_pkgs: +- network-manager-openvpn +- network-manager-openvpn-gnome +pkgs: +- openvpn +- openssl +service: openvpn +service_function: running +user: openvpn diff --git a/test/integration/default/files/_mapdata/arch-base-latest.yaml b/test/integration/default/files/_mapdata/arch-base-latest.yaml new file mode 100644 index 0000000..217bc1b --- /dev/null +++ b/test/integration/default/files/_mapdata/arch-base-latest.yaml @@ -0,0 +1,26 @@ +# yamllint disable rule:indentation rule:line-length +# Arch +--- +bin_dir: null +conf_dir: /etc/openvpn +conf_ext: conf +dh_files: +- '512' +dsaparam: false +external_repo_enabled: true +external_repo_supported: [] +external_repo_version: stable +group: openvpn +log_user: null +manage_group: true +manage_user: true +multi_services: true +network_manager_pkgs: +- network-manager-openvpn +- network-manager-openvpn-gnome +pkgs: +- openvpn +- easy-rsa +service: openvpn +service_function: running +user: openvpn diff --git a/test/integration/default/files/_mapdata/centos-7.yaml b/test/integration/default/files/_mapdata/centos-7.yaml new file mode 100644 index 0000000..c8cfedb --- /dev/null +++ b/test/integration/default/files/_mapdata/centos-7.yaml @@ -0,0 +1,26 @@ +# yamllint disable rule:indentation rule:line-length +# CentOS Linux-7 +--- +bin_dir: null +conf_dir: /etc/openvpn +conf_ext: conf +dh_files: +- '512' +dsaparam: false +external_repo_enabled: true +external_repo_supported: [] +external_repo_version: stable +group: openvpn +log_user: null +manage_group: true +manage_user: true +multi_services: true +network_manager_pkgs: +- network-manager-openvpn +- network-manager-openvpn-gnome +pkgs: +- openvpn +- openssl +service: openvpn +service_function: running +user: openvpn diff --git a/test/integration/default/files/_mapdata/centos-8.yaml b/test/integration/default/files/_mapdata/centos-8.yaml new file mode 100644 index 0000000..763bac5 --- /dev/null +++ b/test/integration/default/files/_mapdata/centos-8.yaml @@ -0,0 +1,26 @@ +# yamllint disable rule:indentation rule:line-length +# CentOS Linux-8 +--- +bin_dir: null +conf_dir: /etc/openvpn +conf_ext: conf +dh_files: +- '512' +dsaparam: false +external_repo_enabled: true +external_repo_supported: [] +external_repo_version: stable +group: openvpn +log_user: null +manage_group: true +manage_user: true +multi_services: true +network_manager_pkgs: +- network-manager-openvpn +- network-manager-openvpn-gnome +pkgs: +- openvpn +- openssl +service: openvpn +service_function: running +user: openvpn diff --git a/test/integration/default/files/_mapdata/debian-10.yaml b/test/integration/default/files/_mapdata/debian-10.yaml new file mode 100644 index 0000000..16f6cf8 --- /dev/null +++ b/test/integration/default/files/_mapdata/debian-10.yaml @@ -0,0 +1,34 @@ +# yamllint disable rule:indentation rule:line-length +# Debian-10 +--- +bin_dir: null +client: + conf_dir: /etc/openvpn/client + service: openvpn-client +conf_dir: /etc/openvpn +conf_ext: conf +dh_files: +- '512' +dsaparam: false +external_repo_enabled: true +external_repo_supported: +- wheezy +- jessie +- stretch +external_repo_version: stable +group: openvpn +log_user: root +manage_group: true +manage_user: true +multi_services: true +network_manager_pkgs: +- network-manager-openvpn +- network-manager-openvpn-gnome +pkgs: +- openvpn +server: + conf_dir: /etc/openvpn/server + service: openvpn-server +service: openvpn +service_function: running +user: openvpn diff --git a/test/integration/default/files/_mapdata/debian-9.yaml b/test/integration/default/files/_mapdata/debian-9.yaml new file mode 100644 index 0000000..8d14bb4 --- /dev/null +++ b/test/integration/default/files/_mapdata/debian-9.yaml @@ -0,0 +1,34 @@ +# yamllint disable rule:indentation rule:line-length +# Debian-9 +--- +bin_dir: null +client: + conf_dir: /etc/openvpn/client + service: openvpn-client +conf_dir: /etc/openvpn +conf_ext: conf +dh_files: +- '512' +dsaparam: false +external_repo_enabled: true +external_repo_supported: +- wheezy +- jessie +- stretch +external_repo_version: stable +group: openvpn +log_user: root +manage_group: true +manage_user: true +multi_services: true +network_manager_pkgs: +- network-manager-openvpn +- network-manager-openvpn-gnome +pkgs: +- openvpn +server: + conf_dir: /etc/openvpn/server + service: openvpn-server +service: openvpn +service_function: running +user: openvpn diff --git a/test/integration/default/files/_mapdata/fedora-31.yaml b/test/integration/default/files/_mapdata/fedora-31.yaml new file mode 100644 index 0000000..c52bd1c --- /dev/null +++ b/test/integration/default/files/_mapdata/fedora-31.yaml @@ -0,0 +1,32 @@ +# yamllint disable rule:indentation rule:line-length +# Fedora-31 +--- +bin_dir: null +client: + conf_dir: /etc/openvpn/client + service: openvpn-client +conf_dir: /etc/openvpn +conf_ext: conf +dh_files: +- '512' +dsaparam: false +external_repo_enabled: true +external_repo_supported: [] +external_repo_version: stable +group: openvpn +log_user: null +manage_group: true +manage_user: true +multi_services: true +network_manager_pkgs: +- network-manager-openvpn +- network-manager-openvpn-gnome +pkgs: +- openvpn +- openssl +server: + conf_dir: /etc/openvpn/server + service: openvpn-server +service: openvpn +service_function: running +user: openvpn diff --git a/test/integration/default/files/_mapdata/fedora-32.yaml b/test/integration/default/files/_mapdata/fedora-32.yaml new file mode 100644 index 0000000..b47b4a3 --- /dev/null +++ b/test/integration/default/files/_mapdata/fedora-32.yaml @@ -0,0 +1,32 @@ +# yamllint disable rule:indentation rule:line-length +# Fedora-32 +--- +bin_dir: null +client: + conf_dir: /etc/openvpn/client + service: openvpn-client +conf_dir: /etc/openvpn +conf_ext: conf +dh_files: +- '512' +dsaparam: false +external_repo_enabled: true +external_repo_supported: [] +external_repo_version: stable +group: openvpn +log_user: null +manage_group: true +manage_user: true +multi_services: true +network_manager_pkgs: +- network-manager-openvpn +- network-manager-openvpn-gnome +pkgs: +- openvpn +- openssl +server: + conf_dir: /etc/openvpn/server + service: openvpn-server +service: openvpn +service_function: running +user: openvpn diff --git a/test/integration/default/files/_mapdata/fedora-33.yaml b/test/integration/default/files/_mapdata/fedora-33.yaml new file mode 100644 index 0000000..266c1cc --- /dev/null +++ b/test/integration/default/files/_mapdata/fedora-33.yaml @@ -0,0 +1,32 @@ +# yamllint disable rule:indentation rule:line-length +# Fedora-33 +--- +bin_dir: null +client: + conf_dir: /etc/openvpn/client + service: openvpn-client +conf_dir: /etc/openvpn +conf_ext: conf +dh_files: +- '512' +dsaparam: false +external_repo_enabled: true +external_repo_supported: [] +external_repo_version: stable +group: openvpn +log_user: null +manage_group: true +manage_user: true +multi_services: true +network_manager_pkgs: +- network-manager-openvpn +- network-manager-openvpn-gnome +pkgs: +- openvpn +- openssl +server: + conf_dir: /etc/openvpn/server + service: openvpn-server +service: openvpn +service_function: running +user: openvpn diff --git a/test/integration/default/files/_mapdata/gentoo-2-sysd.yaml b/test/integration/default/files/_mapdata/gentoo-2-sysd.yaml new file mode 100644 index 0000000..458e702 --- /dev/null +++ b/test/integration/default/files/_mapdata/gentoo-2-sysd.yaml @@ -0,0 +1,25 @@ +# yamllint disable rule:indentation rule:line-length +# Gentoo-2 +--- +bin_dir: null +conf_dir: /etc/openvpn +conf_ext: conf +dh_files: +- '512' +dsaparam: false +external_repo_enabled: true +external_repo_supported: [] +external_repo_version: stable +group: openvpn +log_user: null +manage_group: true +manage_user: true +multi_services: true +network_manager_pkgs: +- network-manager-openvpn +- network-manager-openvpn-gnome +pkgs: +- openvpn +service: openvpn +service_function: running +user: openvpn diff --git a/test/integration/default/files/_mapdata/gentoo-2-sysv.yaml b/test/integration/default/files/_mapdata/gentoo-2-sysv.yaml new file mode 100644 index 0000000..d6c0e05 --- /dev/null +++ b/test/integration/default/files/_mapdata/gentoo-2-sysv.yaml @@ -0,0 +1,25 @@ +# yamllint disable rule:indentation rule:line-length +# Gentoo-2 +--- +bin_dir: null +conf_dir: /etc/openvpn +conf_ext: conf +dh_files: +- '512' +dsaparam: false +external_repo_enabled: true +external_repo_supported: [] +external_repo_version: stable +group: openvpn +log_user: null +manage_group: true +manage_user: true +multi_services: false +network_manager_pkgs: +- network-manager-openvpn +- network-manager-openvpn-gnome +pkgs: +- openvpn +service: openvpn +service_function: running +user: openvpn diff --git a/test/integration/default/files/_mapdata/opensuse-15.yaml b/test/integration/default/files/_mapdata/opensuse-15.yaml new file mode 100644 index 0000000..9e67e97 --- /dev/null +++ b/test/integration/default/files/_mapdata/opensuse-15.yaml @@ -0,0 +1,25 @@ +# yamllint disable rule:indentation rule:line-length +# Leap-15 +--- +bin_dir: null +conf_dir: /etc/openvpn +conf_ext: conf +dh_files: +- '512' +dsaparam: false +external_repo_enabled: true +external_repo_supported: [] +external_repo_version: stable +group: openvpn +log_user: null +manage_group: true +manage_user: true +multi_services: true +network_manager_pkgs: +- network-manager-openvpn +- network-manager-openvpn-gnome +pkgs: +- openvpn +service: openvpn +service_function: running +user: openvpn diff --git a/test/integration/default/files/_mapdata/oracle-7.yaml b/test/integration/default/files/_mapdata/oracle-7.yaml new file mode 100644 index 0000000..105ad71 --- /dev/null +++ b/test/integration/default/files/_mapdata/oracle-7.yaml @@ -0,0 +1,26 @@ +# yamllint disable rule:indentation rule:line-length +# Oracle Linux Server-7 +--- +bin_dir: null +conf_dir: /etc/openvpn +conf_ext: conf +dh_files: +- '512' +dsaparam: false +external_repo_enabled: true +external_repo_supported: [] +external_repo_version: stable +group: openvpn +log_user: null +manage_group: true +manage_user: true +multi_services: true +network_manager_pkgs: +- network-manager-openvpn +- network-manager-openvpn-gnome +pkgs: +- openvpn +- openssl +service: openvpn +service_function: running +user: openvpn diff --git a/test/integration/default/files/_mapdata/oracle-8.yaml b/test/integration/default/files/_mapdata/oracle-8.yaml new file mode 100644 index 0000000..b8a35ca --- /dev/null +++ b/test/integration/default/files/_mapdata/oracle-8.yaml @@ -0,0 +1,26 @@ +# yamllint disable rule:indentation rule:line-length +# Oracle Linux Server-8 +--- +bin_dir: null +conf_dir: /etc/openvpn +conf_ext: conf +dh_files: +- '512' +dsaparam: false +external_repo_enabled: true +external_repo_supported: [] +external_repo_version: stable +group: openvpn +log_user: null +manage_group: true +manage_user: true +multi_services: true +network_manager_pkgs: +- network-manager-openvpn +- network-manager-openvpn-gnome +pkgs: +- openvpn +- openssl +service: openvpn +service_function: running +user: openvpn diff --git a/test/integration/default/files/_mapdata/ubuntu-16.yaml b/test/integration/default/files/_mapdata/ubuntu-16.yaml new file mode 100644 index 0000000..9cf545a --- /dev/null +++ b/test/integration/default/files/_mapdata/ubuntu-16.yaml @@ -0,0 +1,34 @@ +# yamllint disable rule:indentation rule:line-length +# Ubuntu-16.04 +--- +bin_dir: null +client: + conf_dir: /etc/openvpn/client + service: openvpn-client +conf_dir: /etc/openvpn +conf_ext: conf +dh_files: +- '512' +dsaparam: false +external_repo_enabled: true +external_repo_supported: +- precise +- trusty +- xenial +external_repo_version: stable +group: openvpn +log_user: root +manage_group: true +manage_user: true +multi_services: true +network_manager_pkgs: +- network-manager-openvpn +- network-manager-openvpn-gnome +pkgs: +- openvpn +server: + conf_dir: /etc/openvpn/server + service: openvpn-server +service: openvpn +service_function: running +user: openvpn diff --git a/test/integration/default/files/_mapdata/ubuntu-18.yaml b/test/integration/default/files/_mapdata/ubuntu-18.yaml new file mode 100644 index 0000000..59e35ce --- /dev/null +++ b/test/integration/default/files/_mapdata/ubuntu-18.yaml @@ -0,0 +1,34 @@ +# yamllint disable rule:indentation rule:line-length +# Ubuntu-18.04 +--- +bin_dir: null +client: + conf_dir: /etc/openvpn/client + service: openvpn-client +conf_dir: /etc/openvpn +conf_ext: conf +dh_files: +- '512' +dsaparam: false +external_repo_enabled: true +external_repo_supported: +- precise +- trusty +- xenial +external_repo_version: stable +group: openvpn +log_user: root +manage_group: true +manage_user: true +multi_services: true +network_manager_pkgs: +- network-manager-openvpn +- network-manager-openvpn-gnome +pkgs: +- openvpn +server: + conf_dir: /etc/openvpn/server + service: openvpn-server +service: openvpn +service_function: running +user: openvpn diff --git a/test/integration/default/files/_mapdata/ubuntu-20.yaml b/test/integration/default/files/_mapdata/ubuntu-20.yaml new file mode 100644 index 0000000..eed978b --- /dev/null +++ b/test/integration/default/files/_mapdata/ubuntu-20.yaml @@ -0,0 +1,34 @@ +# yamllint disable rule:indentation rule:line-length +# Ubuntu-20.04 +--- +bin_dir: null +client: + conf_dir: /etc/openvpn/client + service: openvpn-client +conf_dir: /etc/openvpn +conf_ext: conf +dh_files: +- '512' +dsaparam: false +external_repo_enabled: true +external_repo_supported: +- precise +- trusty +- xenial +external_repo_version: stable +group: openvpn +log_user: root +manage_group: true +manage_user: true +multi_services: true +network_manager_pkgs: +- network-manager-openvpn +- network-manager-openvpn-gnome +pkgs: +- openvpn +server: + conf_dir: /etc/openvpn/server + service: openvpn-server +service: openvpn +service_function: running +user: openvpn diff --git a/test/integration/default/files/_mapdata/windows-8.yaml b/test/integration/default/files/_mapdata/windows-8.yaml new file mode 100644 index 0000000..c76607e --- /dev/null +++ b/test/integration/default/files/_mapdata/windows-8.yaml @@ -0,0 +1,23 @@ +# yamllint disable rule:indentation rule:line-length +# Windows-8.1 +--- +bin_dir: C:\Program Files\OpenVPN\bin\ +conf_dir: C:\Program Files\OpenVPN\config +conf_ext: ovpn +dh_files: +- '512' +dsaparam: false +external_repo_enabled: false +external_repo_supported: [] +external_repo_version: stable +group: nobody +log_user: null +multi_services: false +network_manager_pkgs: +- network-manager-openvpn +- network-manager-openvpn-gnome +pkgs: +- openvpn +service: OpenVPNService +service_function: running +user: nobody diff --git a/test/integration/default/files/_mapdata/windows-server-2019.yaml b/test/integration/default/files/_mapdata/windows-server-2019.yaml new file mode 100644 index 0000000..b2deb2a --- /dev/null +++ b/test/integration/default/files/_mapdata/windows-server-2019.yaml @@ -0,0 +1,23 @@ +# yamllint disable rule:indentation rule:line-length +# Windows-2019Server +--- +bin_dir: C:\Program Files\OpenVPN\bin\ +conf_dir: C:\Program Files\OpenVPN\config +conf_ext: ovpn +dh_files: +- '512' +dsaparam: false +external_repo_enabled: false +external_repo_supported: [] +external_repo_version: stable +group: nobody +log_user: null +multi_services: false +network_manager_pkgs: +- network-manager-openvpn +- network-manager-openvpn-gnome +pkgs: +- openvpn +service: OpenVPNService +service_function: running +user: nobody diff --git a/test/integration/default/inspec.yml b/test/integration/default/inspec.yml index 063edad..325b612 100644 --- a/test/integration/default/inspec.yml +++ b/test/integration/default/inspec.yml @@ -6,6 +6,9 @@ title: openvpn formula maintainer: SaltStack Formulas license: Apache-2.0 summary: Verify that the openvpn formula is setup and configured correctly +depends: + - name: share + path: test/integration/share supports: - platform-name: debian - platform-name: ubuntu @@ -15,5 +18,7 @@ supports: - platform-name: suse - platform-name: freebsd - platform-name: amazon + - platform-name: oracle - platform-name: arch + - platform-name: gentoo - platform: windows diff --git a/test/integration/share/README.md b/test/integration/share/README.md new file mode 100644 index 0000000..7de80b2 --- /dev/null +++ b/test/integration/share/README.md @@ -0,0 +1,19 @@ +# InSpec Profile: `share` + +This shows the implementation of the `share` InSpec [profile](https://github.com/inspec/inspec/blob/master/docs/profiles.md). + +Its goal is to share the libraries between all profiles. + +## Libraries + +### `system` + +The `system` library provides easy access to system dependent information: + +- `system.platform`: based on `inspec.platform`, modify to values that are more consistent from a SaltStack perspective + - `system.platform[:family]` provide a family name for Arch + - `system.platform[:name]` modify `amazon` to `amazonlinux` + - `system.platform[:release]` tweak Arch and Amazon Linux: + - `Arch` is always `base-latest` + - `Amazon Linux` release `2018` is resolved as `1` + - `system.platform[:finger]` is the concatenation of the name and the major release number (except for Ubuntu, which gives `ubuntu-20.04` for example) diff --git a/test/integration/share/inspec.yml b/test/integration/share/inspec.yml new file mode 100644 index 0000000..add5342 --- /dev/null +++ b/test/integration/share/inspec.yml @@ -0,0 +1,21 @@ +# -*- coding: utf-8 -*- +# vim: ft=yaml +--- +name: share +title: openvpn formula +maintainer: SaltStack Formulas +license: Apache-2.0 +summary: shared resources +supports: + - platform-name: debian + - platform-name: ubuntu + - platform-name: centos + - platform-name: fedora + - platform-name: opensuse + - platform-name: suse + - platform-name: freebsd + - platform-name: amazon + - platform-name: oracle + - platform-name: arch + - platform-name: gentoo + - platform: windows diff --git a/test/integration/share/libraries/system.rb b/test/integration/share/libraries/system.rb new file mode 100644 index 0000000..91ebbc8 --- /dev/null +++ b/test/integration/share/libraries/system.rb @@ -0,0 +1,91 @@ +# frozen_string_literal: true + +# system.rb -- InSpec resources for system values +# Author: Daniel Dehennin +# Copyright (C) 2020 Daniel Dehennin + +class SystemResource < Inspec.resource(1) + name 'system' + + attr_reader :platform + + def initialize + super + @platform = build_platform + end + + private + + def build_platform + { + family: build_platform_family, + name: build_platform_name, + release: build_platform_release, + finger: build_platform_finger + } + end + + def build_platform_family + case inspec.platform[:name] + when 'arch' + 'arch' + else + inspec.platform[:family] + end + end + + def build_platform_name + case inspec.platform[:name] + when 'amazon' + 'amazonlinux' + when 'windows_8.1_pro' + 'windows' + when 'windows_server_2019_datacenter' + 'windows-server' + else + inspec.platform[:name] + end + end + + # rubocop:disable Metrics/MethodLength + def build_platform_release + case inspec.platform[:name] + when 'amazon' + # `2018` relase is named `1` in kitchen.yaml + inspec.platform[:release].gsub(/2018.*/, '1') + when 'arch' + 'base-latest' + when 'gentoo' + "#{inspec.platform[:release].split('.')[0]}-#{derive_gentoo_init_system}" + when 'windows_8.1_pro' + '8.1' + when 'windows_server_2019_datacenter' + '2019' + else + inspec.platform[:release] + end + end + # rubocop:enable Metrics/MethodLength + + def derive_gentoo_init_system + case inspec.command('systemctl').exist? + when true + 'sysd' + else + 'sysv' + end + end + + def build_platform_finger + "#{build_platform_name}-#{build_finger_release}" + end + + def build_finger_release + case inspec.platform[:name] + when 'ubuntu' + build_platform_release.split('.').slice(0, 2).join('.') + else + build_platform_release.split('.')[0] + end + end +end