Bläddra i källkod

pull in master

pull/276/head
Thomas Thorburn 3 år sedan
förälder
incheckning
536992a8e4
46 ändrade filer med 1888 tillägg och 355 borttagningar
  1. +41
    -0
      .github/workflows/kitchen.vagrant.yml
  2. +11
    -0
      .gitignore
  3. +122
    -28
      .gitlab-ci.yml
  4. +22
    -5
      .pre-commit-config.yaml
  5. +2
    -1
      .rstcheck.cfg
  6. +4
    -1
      .rubocop.yml
  7. +126
    -43
      .travis.yml
  8. +10
    -4
      .yamllint
  9. +76
    -73
      AUTHORS.md
  10. +126
    -0
      CHANGELOG.md
  11. +5
    -0
      CODEOWNERS
  12. +1
    -1
      FORMULA
  13. +8
    -2
      Gemfile
  14. +6
    -3
      Gemfile.lock
  15. +89
    -80
      docs/AUTHORS.rst
  16. +155
    -0
      docs/CHANGELOG.rst
  17. +62
    -0
      docs/README.rst
  18. +40
    -0
      kitchen.vagrant.yml
  19. +385
    -60
      kitchen.yml
  20. +13
    -0
      nginx/_mapdata/_mapdata.jinja
  21. +22
    -0
      nginx/_mapdata/init.sls
  22. +1
    -0
      nginx/certificates.sls
  23. +3
    -1
      nginx/map.jinja
  24. +2
    -0
      nginx/passenger.sls
  25. +17
    -1
      nginx/pkg.sls
  26. +13
    -15
      nginx/servers.sls
  27. +13
    -8
      nginx/servers_config.sls
  28. +3
    -0
      nginx/service.sls
  29. +7
    -2
      nginx/snippets.sls
  30. +23
    -0
      pillar.example
  31. +51
    -27
      test/integration/default/controls/config.rb
  32. +9
    -0
      test/integration/default/controls/file.rb
  33. +2
    -0
      test/integration/default/controls/install.rb
  34. +3
    -0
      test/integration/default/controls/service.rb
  35. +9
    -0
      test/integration/default/inspec.yml
  36. +50
    -0
      test/integration/passenger/README.md
  37. +58
    -0
      test/integration/passenger/controls/config.rb
  38. +28
    -0
      test/integration/passenger/controls/install.rb
  39. +28
    -0
      test/integration/passenger/controls/service.rb
  40. +27
    -0
      test/integration/passenger/inspec.yml
  41. +22
    -0
      test/integration/share/README.md
  42. +24
    -0
      test/integration/share/inspec.yml
  43. +90
    -0
      test/integration/share/libraries/system.rb
  44. +13
    -0
      test/salt/default/pillar/nginx.sls
  45. +6
    -0
      test/salt/default/states/test_dep/create_dependency_file.sls
  46. +60
    -0
      test/salt/passenger/pillar/nginx.sls

+ 41
- 0
.github/workflows/kitchen.vagrant.yml Visa fil

@@ -0,0 +1,41 @@
# -*- coding: utf-8 -*-
# vim: ft=yaml
---
name: 'Kitchen Vagrant (FreeBSD)'
'on': ['push', 'pull_request']

env:
KITCHEN_LOCAL_YAML: 'kitchen.vagrant.yml'

jobs:
test:
runs-on: 'macos-10.15'
strategy:
fail-fast: false
matrix:
instance:
- default-freebsd-130-master-py3
# - freebsd-130-master-py3
- default-freebsd-122-master-py3
# - freebsd-122-master-py3
- default-freebsd-114-master-py3
# - freebsd-114-master-py3
# - default-freebsd-130-3002-6-py3
# - default-freebsd-122-3002-6-py3
# - default-freebsd-114-3002-6-py3
steps:
- name: 'Check out code'
uses: 'actions/checkout@v2'
- name: 'Set up Bundler cache'
uses: 'actions/cache@v1'
with:
path: 'vendor/bundle'
key: "${{ runner.os }}-gems-${{ hashFiles('**/Gemfile.lock') }}"
restore-keys: "${{ runner.os }}-gems-"
- name: 'Run Bundler'
run: |
ruby --version
bundle config path vendor/bundle
bundle install --jobs 4 --retry 3
- name: 'Run Test Kitchen'
run: 'bundle exec kitchen verify ${{ matrix.instance }}'

+ 11
- 0
.gitignore Visa fil

@@ -91,6 +91,9 @@ celerybeat-schedule
venv/
ENV/

# visual studio
.vs/

# Spyder project settings
.spyderproject
.spyproject
@@ -120,3 +123,11 @@ docs/*.md
Dockerfile.*_*
ignore/
tmp/

# `salt-formula` -- Vagrant Specific files
.vagrant
top.sls

# `suricata-formula` -- Platform binaries
*.rpm
*.deb

+ 122
- 28
.gitlab-ci.yml Visa fil

@@ -46,7 +46,7 @@ variables:
DOCKER_DRIVER: 'overlay2'

###############################################################################
# `lint` stage: `commitlint` & `pre-commit`
# `lint` stage: `commitlint`, `pre-commit` & `rubocop` (latest, failure allowed)
###############################################################################
commitlint:
stage: *stage_lint
@@ -123,35 +123,129 @@ rubocop:
## 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`
default-debian-10-master-py3: {extends: '.test_instance'}
# default-debian-10-tiamat-py3: {extends: '.test_instance'}
# default-debian-9-tiamat-py3: {extends: '.test_instance'}
# default-ubuntu-2004-tiamat-py3: {extends: '.test_instance'}
# default-ubuntu-1804-tiamat-py3: {extends: '.test_instance'}
# default-centos-8-tiamat-py3: {extends: '.test_instance'}
# default-centos-7-tiamat-py3: {extends: '.test_instance'}
# default-amazonlinux-2-tiamat-py3: {extends: '.test_instance'}
# default-oraclelinux-8-tiamat-py3: {extends: '.test_instance'}
# default-oraclelinux-7-tiamat-py3: {extends: '.test_instance'}
# default-almalinux-8-tiamat-py3: {extends: '.test_instance'}
# default-rockylinux-8-tiamat-py3: {extends: '.test_instance'}
# default-debian-10-master-py3: {extends: '.test_instance'}
# passenger-debian-10-master-py3: {extends: '.test_instance'}
debian-10-master-py3: {extends: '.test_instance'}
# default-debian-9-master-py3: {extends: '.test_instance'}
# passenger-debian-9-master-py3: {extends: '.test_instance'}
debian-9-master-py3: {extends: '.test_instance'}
# default-ubuntu-2004-master-py3: {extends: '.test_instance'}
# passenger-ubuntu-2004-master-py3: {extends: '.test_instance'}
ubuntu-2004-master-py3: {extends: '.test_instance'}
# default-ubuntu-1804-master-py3: {extends: '.test_instance'}
# passenger-ubuntu-1804-master-py3: {extends: '.test_instance'}
ubuntu-1804-master-py3: {extends: '.test_instance'}
# default-centos-8-master-py3: {extends: '.test_instance'}
# default-fedora-31-master-py3: {extends: '.test_instance'}
# default-opensuse-leap-151-master-py3: {extends: '.test_instance'}
# default-amazonlinux-2-master-py3: {extends: '.test_instance'}
# default-debian-10-2019-2-py3: {extends: '.test_instance'}
# default-debian-9-2019-2-py3: {extends: '.test_instance'}
default-ubuntu-1804-2019-2-py3: {extends: '.test_instance'}
default-centos-8-2019-2-py3: {extends: '.test_instance'}
# default-fedora-31-2019-2-py3: {extends: '.test_instance'}
# default-opensuse-leap-151-2019-2-py3: {extends: '.test_instance'}
# default-centos-7-2019-2-py2: {extends: '.test_instance'}
# default-amazonlinux-2-2019-2-py3: {extends: '.test_instance'}
default-arch-base-latest-2019-2-py2: {extends: '.test_instance'}
default-fedora-30-2018-3-py3: {extends: '.test_instance'}
# default-debian-9-2018-3-py2: {extends: '.test_instance'}
# default-ubuntu-1604-2018-3-py2: {extends: '.test_instance'}
# default-centos-7-2018-3-py2: {extends: '.test_instance'}
default-opensuse-leap-151-2018-3-py2: {extends: '.test_instance'}
# default-amazonlinux-1-2018-3-py2: {extends: '.test_instance'}
# default-arch-base-latest-2018-3-py2: {extends: '.test_instance'}
# default-debian-8-2017-7-py2: {extends: '.test_instance'}
# default-ubuntu-1604-2017-7-py2: {extends: '.test_instance'}
# default-centos-6-2017-7-py2: {extends: '.test_instance'}
# default-fedora-30-2017-7-py2: {extends: '.test_instance'}
# default-opensuse-leap-151-2017-7-py2: {extends: '.test_instance'}
# default-amazonlinux-1-2017-7-py2: {extends: '.test_instance'}
# default-arch-base-latest-2017-7-py2: {extends: '.test_instance'}
# passenger-centos-8-master-py3: {extends: '.test_instance'}
centos-8-master-py3: {extends: '.test_instance'}
default-centos-7-master-py3: {extends: '.test_instance'}
# passenger-centos-7-master-py3: {extends: '.test_instance'}
# centos-7-master-py3: {extends: '.test_instance'}
default-fedora-34-master-py3: {extends: '.test_instance'}
# fedora-34-master-py3: {extends: '.test_instance'}
default-fedora-33-master-py3: {extends: '.test_instance'}
# fedora-33-master-py3: {extends: '.test_instance'}
default-opensuse-leap-153-master-py3: {extends: '.test_instance'}
# opensuse-leap-153-master-py3: {extends: '.test_instance'}
default-opensuse-leap-152-master-py3: {extends: '.test_instance'}
# opensuse-leap-152-master-py3: {extends: '.test_instance'}
default-opensuse-tmbl-latest-master-py3: {extends: '.test_instance'}
# opensuse-tmbl-latest-master-py3: {extends: '.test_instance'}
default-amazonlinux-2-master-py3: {extends: '.test_instance'}
# amazonlinux-2-master-py3: {extends: '.test_instance'}
# default-oraclelinux-8-master-py3: {extends: '.test_instance'}
# passenger-oraclelinux-8-master-py3: {extends: '.test_instance'}
oraclelinux-8-master-py3: {extends: '.test_instance'}
default-oraclelinux-7-master-py3: {extends: '.test_instance'}
# oraclelinux-7-master-py3: {extends: '.test_instance'}
default-arch-base-latest-master-py3: {extends: '.test_instance'}
# arch-base-latest-master-py3: {extends: '.test_instance'}
# default-gentoo-stage3-latest-master-py3: {extends: '.test_instance'}
# gentoo-stage3-latest-master-py3: {extends: '.test_instance'}
default-gentoo-stage3-systemd-master-py3: {extends: '.test_instance'}
# gentoo-stage3-systemd-master-py3: {extends: '.test_instance'}
# default-almalinux-8-master-py3: {extends: '.test_instance'}
# passenger-almalinux-8-master-py3: {extends: '.test_instance'}
almalinux-8-master-py3: {extends: '.test_instance'}
# default-rockylinux-8-master-py3: {extends: '.test_instance'}
# passenger-rockylinux-8-master-py3: {extends: '.test_instance'}
rockylinux-8-master-py3: {extends: '.test_instance'}
# default-debian-10-3003-1-py3: {extends: '.test_instance'}
# default-debian-9-3003-1-py3: {extends: '.test_instance'}
# default-ubuntu-2004-3003-1-py3: {extends: '.test_instance'}
# default-ubuntu-1804-3003-1-py3: {extends: '.test_instance'}
# default-centos-8-3003-1-py3: {extends: '.test_instance'}
# default-centos-7-3003-1-py3: {extends: '.test_instance'}
# default-fedora-34-3003-1-py3: {extends: '.test_instance'}
# default-fedora-33-3003-1-py3: {extends: '.test_instance'}
# default-opensuse-leap-153-3003-1-py3: {extends: '.test_instance'}
# default-opensuse-leap-152-3003-1-py3: {extends: '.test_instance'}
# default-opensuse-tmbl-latest-3003-1-py3: {extends: '.test_instance'}
# default-amazonlinux-2-3003-1-py3: {extends: '.test_instance'}
# default-oraclelinux-8-3003-1-py3: {extends: '.test_instance'}
# default-oraclelinux-7-3003-1-py3: {extends: '.test_instance'}
# default-arch-base-latest-3003-1-py3: {extends: '.test_instance'}
# default-gentoo-stage3-latest-3003-1-py3: {extends: '.test_instance'}
# default-gentoo-stage3-systemd-3003-1-py3: {extends: '.test_instance'}
# default-debian-10-3002-6-py3: {extends: '.test_instance'}
# default-debian-9-3002-6-py3: {extends: '.test_instance'}
# default-ubuntu-2004-3002-6-py3: {extends: '.test_instance'}
# default-ubuntu-1804-3002-6-py3: {extends: '.test_instance'}
# default-centos-8-3002-6-py3: {extends: '.test_instance'}
# default-centos-7-3002-6-py3: {extends: '.test_instance'}
# default-fedora-34-3002-6-py3: {extends: '.test_instance'}
# default-fedora-33-3002-6-py3: {extends: '.test_instance'}
# default-amazonlinux-2-3002-6-py3: {extends: '.test_instance'}
# default-oraclelinux-8-3002-6-py3: {extends: '.test_instance'}
# default-oraclelinux-7-3002-6-py3: {extends: '.test_instance'}
# default-arch-base-latest-3002-6-py3: {extends: '.test_instance'}
# default-gentoo-stage3-latest-3002-6-py3: {extends: '.test_instance'}
# default-gentoo-stage3-systemd-3002-6-py3: {extends: '.test_instance'}
# default-opensuse-leap-153-3002-2-py3: {extends: '.test_instance'}
# default-opensuse-leap-152-3002-2-py3: {extends: '.test_instance'}
# default-opensuse-tmbl-latest-3002-2-py3: {extends: '.test_instance'}
# default-debian-10-3001-7-py3: {extends: '.test_instance'}
# default-debian-9-3001-7-py3: {extends: '.test_instance'}
# default-ubuntu-2004-3001-7-py3: {extends: '.test_instance'}
# default-ubuntu-1804-3001-7-py3: {extends: '.test_instance'}
# default-centos-8-3001-7-py3: {extends: '.test_instance'}
# default-centos-7-3001-7-py3: {extends: '.test_instance'}
# default-fedora-34-3001-7-py3: {extends: '.test_instance'}
# default-fedora-33-3001-7-py3: {extends: '.test_instance'}
# default-opensuse-leap-153-3001-7-py3: {extends: '.test_instance'}
# default-opensuse-leap-152-3001-7-py3: {extends: '.test_instance'}
# default-opensuse-tmbl-latest-3001-7-py3: {extends: '.test_instance'}
# default-amazonlinux-2-3001-7-py3: {extends: '.test_instance'}
# default-oraclelinux-8-3001-7-py3: {extends: '.test_instance'}
# default-oraclelinux-7-3001-7-py3: {extends: '.test_instance'}
# default-arch-base-latest-3001-7-py3: {extends: '.test_instance'}
# default-gentoo-stage3-latest-3001-7-py3: {extends: '.test_instance'}
# default-gentoo-stage3-systemd-3001-7-py3: {extends: '.test_instance'}
# default-debian-10-3000-9-py3: {extends: '.test_instance'}
# default-debian-9-3000-9-py3: {extends: '.test_instance'}
# default-ubuntu-1804-3000-9-py3: {extends: '.test_instance'}
# default-centos-8-3000-9-py3: {extends: '.test_instance'}
# default-centos-7-3000-9-py3: {extends: '.test_instance'}
# default-opensuse-leap-153-3000-9-py3: {extends: '.test_instance'}
# default-opensuse-leap-152-3000-9-py3: {extends: '.test_instance'}
# default-amazonlinux-2-3000-9-py3: {extends: '.test_instance'}
# default-oraclelinux-8-3000-9-py3: {extends: '.test_instance'}
# default-oraclelinux-7-3000-9-py3: {extends: '.test_instance'}
# default-gentoo-stage3-latest-3000-9-py3: {extends: '.test_instance'}
# default-gentoo-stage3-systemd-3000-9-py3: {extends: '.test_instance'}
# default-ubuntu-1804-3000-9-py2: {extends: '.test_instance'}
# default-arch-base-latest-3000-9-py2: {extends: '.test_instance'}

###############################################################################
# `release` stage: `semantic-release`

+ 22
- 5
.pre-commit-config.yaml Visa fil

@@ -17,15 +17,22 @@ repos:
stages: [manual]
additional_dependencies: ['@commitlint/config-conventional@8.3.4']
always_run: true
- repo: https://github.com/jumanjihouse/pre-commit-hooks
rev: 2.1.3
- repo: https://github.com/rubocop-hq/rubocop
rev: v1.9.1
hooks:
- id: rubocop
name: Check Ruby files with rubocop
args: [--debug]
always_run: true
pass_filenames: false
- repo: https://github.com/shellcheck-py/shellcheck-py
rev: v0.7.1.1
hooks:
- id: shellcheck
name: Check shell scripts with shellcheck
files: ^.*\.(sh|bash|ksh)$
types: []
args: []
- repo: https://github.com/adrienverge/yamllint.git
- repo: https://github.com/adrienverge/yamllint
rev: v1.23.0
hooks:
- id: yamllint
@@ -45,4 +52,14 @@ repos:
- id: rstcheck
name: Check reST files using rstcheck
exclude: 'docs/CHANGELOG.rst'
args: [--report=warning]
- repo: https://github.com/saltstack-formulas/mirrors-rst-lint
rev: v1.3.2
hooks:
- id: rst-lint
name: Check reST files using rst-lint
exclude: |
(?x)^(
docs/CHANGELOG.rst|
docs/TOFS_pattern.rst|
)$
additional_dependencies: [pygments==2.9.0]

+ 2
- 1
.rstcheck.cfg Visa fil

@@ -1,3 +1,4 @@
[rstcheck]
report=error
report=info
ignore_language=rst
ignore_messages=(Duplicate (ex|im)plicit target.*|Hyperlink target ".*" is not referenced\.$)

+ 4
- 1
.rubocop.yml Visa fil

@@ -7,10 +7,13 @@ Layout/LineLength:
# Based on https://github.com/PyCQA/flake8-bugbear#opinionated-warnings (`B950`)
Max: 88
Metrics/BlockLength:
ExcludedMethods:
IgnoredMethods:
- control
- describe
# Increase from default of `25`
Max: 30
Security/YAMLLoad:
Exclude:
- test/integration/**/_mapdata.rb

# Any offenses that should be fixed, e.g. collected via. `rubocop --auto-gen-config`

+ 126
- 43
.travis.yml Visa fil

@@ -36,17 +36,14 @@ stages:
# - name: 'release'
# if: 'branch = master AND type != pull_request'
jobs:
allow_failures:
- env: Lint_rubocop
fast_finish: true
include:
## Define the test stage that runs the linters (and testing matrix, if applicable)

# Run all of the linters in a single job (except `rubocop`)
# Run all of the linters in a single job
- language: 'node_js'
node_js: 'lts/*'
env: 'Lint'
name: 'Lint: salt-lint, yamllint, shellcheck & commitlint'
name: 'Lint: salt-lint, yamllint, rubocop, shellcheck & commitlint'
before_install: 'skip'
script:
# Install and run `salt-lint`
@@ -57,6 +54,9 @@ jobs:
# Need at least `v1.17.0` for the `yaml-files` setting
- pip install --user yamllint>=1.17.0
- yamllint -s .
# Install and run `rubocop`
- gem install rubocop
- rubocop -d
# Run `shellcheck` (already pre-installed in Travis)
- shellcheck --version
- git ls-files -- '*.sh' '*.bash' '*.ksh'
@@ -65,17 +65,6 @@ jobs:
- npm i -D @commitlint/config-conventional
@commitlint/travis-cli
- commitlint-travis
# Run the `rubocop` linter in a separate job that is allowed to fail
# Once these lint errors are fixed, this can be merged into a single job
- language: node_js
node_js: lts/*
env: Lint_rubocop
name: 'Lint: rubocop'
before_install: skip
script:
# Install and run `rubocop`
- gem install rubocop
- rubocop -d

# Run `pre-commit` linters in a single job
- language: 'python'
@@ -94,35 +83,129 @@ 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-master-py3
# - 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-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-almalinux-8-tiamat-py3
# - env: INSTANCE=default-rockylinux-8-tiamat-py3
# - env: INSTANCE=default-debian-10-master-py3
# - env: INSTANCE=passenger-debian-10-master-py3
- env: INSTANCE=debian-10-master-py3
# - env: INSTANCE=default-debian-9-master-py3
# - env: INSTANCE=passenger-debian-9-master-py3
- env: INSTANCE=debian-9-master-py3
# - env: INSTANCE=default-ubuntu-2004-master-py3
# - env: INSTANCE=passenger-ubuntu-2004-master-py3
- env: INSTANCE=ubuntu-2004-master-py3
# - env: INSTANCE=default-ubuntu-1804-master-py3
# - env: INSTANCE=passenger-ubuntu-1804-master-py3
- env: INSTANCE=ubuntu-1804-master-py3
# - env: INSTANCE=default-centos-8-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=passenger-centos-8-master-py3
- env: INSTANCE=centos-8-master-py3
- env: INSTANCE=default-centos-7-master-py3
# - env: INSTANCE=passenger-centos-7-master-py3
# - env: INSTANCE=centos-7-master-py3
- env: INSTANCE=default-fedora-34-master-py3
# - env: INSTANCE=fedora-34-master-py3
- env: INSTANCE=default-fedora-33-master-py3
# - env: INSTANCE=fedora-33-master-py3
- env: INSTANCE=default-opensuse-leap-153-master-py3
# - env: INSTANCE=opensuse-leap-153-master-py3
- env: INSTANCE=default-opensuse-leap-152-master-py3
# - env: INSTANCE=opensuse-leap-152-master-py3
- env: INSTANCE=default-opensuse-tmbl-latest-master-py3
# - env: INSTANCE=opensuse-tmbl-latest-master-py3
- env: INSTANCE=default-amazonlinux-2-master-py3
# - env: INSTANCE=amazonlinux-2-master-py3
# - env: INSTANCE=default-oraclelinux-8-master-py3
# - env: INSTANCE=passenger-oraclelinux-8-master-py3
- env: INSTANCE=oraclelinux-8-master-py3
- env: INSTANCE=default-oraclelinux-7-master-py3
# - env: INSTANCE=oraclelinux-7-master-py3
- env: INSTANCE=default-arch-base-latest-master-py3
# - env: INSTANCE=arch-base-latest-master-py3
# - env: INSTANCE=default-gentoo-stage3-latest-master-py3
# - env: INSTANCE=gentoo-stage3-latest-master-py3
- env: INSTANCE=default-gentoo-stage3-systemd-master-py3
# - env: INSTANCE=gentoo-stage3-systemd-master-py3
# - env: INSTANCE=default-almalinux-8-master-py3
# - env: INSTANCE=passenger-almalinux-8-master-py3
- env: INSTANCE=almalinux-8-master-py3
# - env: INSTANCE=default-rockylinux-8-master-py3
# - env: INSTANCE=passenger-rockylinux-8-master-py3
- env: INSTANCE=rockylinux-8-master-py3
# - env: INSTANCE=default-debian-10-3003-1-py3
# - env: INSTANCE=default-debian-9-3003-1-py3
# - env: INSTANCE=default-ubuntu-2004-3003-1-py3
# - env: INSTANCE=default-ubuntu-1804-3003-1-py3
# - env: INSTANCE=default-centos-8-3003-1-py3
# - env: INSTANCE=default-centos-7-3003-1-py3
# - env: INSTANCE=default-fedora-34-3003-1-py3
# - env: INSTANCE=default-fedora-33-3003-1-py3
# - env: INSTANCE=default-opensuse-leap-153-3003-1-py3
# - env: INSTANCE=default-opensuse-leap-152-3003-1-py3
# - env: INSTANCE=default-opensuse-tmbl-latest-3003-1-py3
# - env: INSTANCE=default-amazonlinux-2-3003-1-py3
# - env: INSTANCE=default-oraclelinux-8-3003-1-py3
# - env: INSTANCE=default-oraclelinux-7-3003-1-py3
# - env: INSTANCE=default-arch-base-latest-3003-1-py3
# - env: INSTANCE=default-gentoo-stage3-latest-3003-1-py3
# - env: INSTANCE=default-gentoo-stage3-systemd-3003-1-py3
# - env: INSTANCE=default-debian-10-3002-6-py3
# - env: INSTANCE=default-debian-9-3002-6-py3
# - env: INSTANCE=default-ubuntu-2004-3002-6-py3
# - env: INSTANCE=default-ubuntu-1804-3002-6-py3
# - env: INSTANCE=default-centos-8-3002-6-py3
# - env: INSTANCE=default-centos-7-3002-6-py3
# - env: INSTANCE=default-fedora-34-3002-6-py3
# - env: INSTANCE=default-fedora-33-3002-6-py3
# - env: INSTANCE=default-amazonlinux-2-3002-6-py3
# - env: INSTANCE=default-oraclelinux-8-3002-6-py3
# - env: INSTANCE=default-oraclelinux-7-3002-6-py3
# - env: INSTANCE=default-arch-base-latest-3002-6-py3
# - env: INSTANCE=default-gentoo-stage3-latest-3002-6-py3
# - env: INSTANCE=default-gentoo-stage3-systemd-3002-6-py3
# - env: INSTANCE=default-opensuse-leap-153-3002-2-py3
# - env: INSTANCE=default-opensuse-leap-152-3002-2-py3
# - env: INSTANCE=default-opensuse-tmbl-latest-3002-2-py3
# - env: INSTANCE=default-debian-10-3001-7-py3
# - env: INSTANCE=default-debian-9-3001-7-py3
# - env: INSTANCE=default-ubuntu-2004-3001-7-py3
# - env: INSTANCE=default-ubuntu-1804-3001-7-py3
# - env: INSTANCE=default-centos-8-3001-7-py3
# - env: INSTANCE=default-centos-7-3001-7-py3
# - env: INSTANCE=default-fedora-34-3001-7-py3
# - env: INSTANCE=default-fedora-33-3001-7-py3
# - env: INSTANCE=default-opensuse-leap-153-3001-7-py3
# - env: INSTANCE=default-opensuse-leap-152-3001-7-py3
# - env: INSTANCE=default-opensuse-tmbl-latest-3001-7-py3
# - env: INSTANCE=default-amazonlinux-2-3001-7-py3
# - env: INSTANCE=default-oraclelinux-8-3001-7-py3
# - env: INSTANCE=default-oraclelinux-7-3001-7-py3
# - env: INSTANCE=default-arch-base-latest-3001-7-py3
# - env: INSTANCE=default-gentoo-stage3-latest-3001-7-py3
# - env: INSTANCE=default-gentoo-stage3-systemd-3001-7-py3
# - env: INSTANCE=default-debian-10-3000-9-py3
# - env: INSTANCE=default-debian-9-3000-9-py3
# - env: INSTANCE=default-ubuntu-1804-3000-9-py3
# - env: INSTANCE=default-centos-8-3000-9-py3
# - env: INSTANCE=default-centos-7-3000-9-py3
# - env: INSTANCE=default-opensuse-leap-153-3000-9-py3
# - env: INSTANCE=default-opensuse-leap-152-3000-9-py3
# - env: INSTANCE=default-amazonlinux-2-3000-9-py3
# - env: INSTANCE=default-oraclelinux-8-3000-9-py3
# - env: INSTANCE=default-oraclelinux-7-3000-9-py3
# - env: INSTANCE=default-gentoo-stage3-latest-3000-9-py3
# - env: INSTANCE=default-gentoo-stage3-systemd-3000-9-py3
# - env: INSTANCE=default-ubuntu-1804-3000-9-py2
# - env: INSTANCE=default-arch-base-latest-3000-9-py2

## Define the release stage that runs `semantic-release`
- stage: 'release'

+ 10
- 4
.yamllint Visa fil

@@ -2,17 +2,23 @@
# vim: ft=yaml
---
# Extend the `default` configuration provided by `yamllint`
extends: default
extends: 'default'

# Files to ignore completely
# 1. All YAML files under directory `node_modules/`, introduced during the Travis run
# 2. Any SLS files under directory `test/`, which are actually state files
# 3. Any YAML files under directory `.kitchen/`, introduced during local testing
# 1. All YAML files under directory `.cache/`, introduced during the GitLab CI run
# 2. All YAML files under directory `.git/`
# 3. All YAML files under directory `node_modules/`, introduced during the Travis run
# 4. Any SLS files under directory `test/`, which are actually state files
# 5. Any YAML files under directory `.kitchen/`, introduced during local testing
# 6. `kitchen.vagrant.yml`, which contains Embedded Ruby (ERB) template syntax
ignore: |
.cache/
.git/
node_modules/
test/**/states/**/*.sls
.kitchen/
kitchen.vagrant.yml
test/salt/passenger/pillar/nginx.sls

yaml-files:
# Default settings

+ 76
- 73
AUTHORS.md Visa fil

@@ -4,79 +4,82 @@ This list is sorted by the number of commits per contributor in _descending_ ord

Avatar|Contributor|Contributions
:-:|---|:-:
<img class='float-left rounded-1' src='https://avatars2.githubusercontent.com/u/10231489?v=4' width='36' height='36' alt='@myii'>|[@myii](https://github.com/myii)|82
<img class='float-left rounded-1' src='https://avatars0.githubusercontent.com/u/1800660?v=4' width='36' height='36' alt='@aboe76'>|[@aboe76](https://github.com/aboe76)|46
<img class='float-left rounded-1' src='https://avatars2.githubusercontent.com/u/1396878?v=4' width='36' height='36' alt='@gravyboat'>|[@gravyboat](https://github.com/gravyboat)|27
<img class='float-left rounded-1' src='https://avatars0.githubusercontent.com/u/3374962?v=4' width='36' height='36' alt='@nmadhok'>|[@nmadhok](https://github.com/nmadhok)|24
<img class='float-left rounded-1' src='https://avatars1.githubusercontent.com/u/13322818?v=4' width='36' height='36' alt='@noelmcloughlin'>|[@noelmcloughlin](https://github.com/noelmcloughlin)|18
<img class='float-left rounded-1' src='https://avatars2.githubusercontent.com/u/91293?v=4' width='36' height='36' alt='@whiteinge'>|[@whiteinge](https://github.com/whiteinge)|17
<img class='float-left rounded-1' src='https://avatars0.githubusercontent.com/u/4956475?v=4' width='36' height='36' alt='@ross-p'>|[@ross-p](https://github.com/ross-p)|13
<img class='float-left rounded-1' src='https://avatars3.githubusercontent.com/u/52996?v=4' width='36' height='36' alt='@daks'>|[@daks](https://github.com/daks)|11
<img class='float-left rounded-1' src='https://avatars1.githubusercontent.com/u/287147?v=4' width='36' height='36' alt='@techhat'>|[@techhat](https://github.com/techhat)|10
<img class='float-left rounded-1' src='https://avatars2.githubusercontent.com/u/242396?v=4' width='36' height='36' alt='@javierbertoli'>|[@javierbertoli](https://github.com/javierbertoli)|9
<img class='float-left rounded-1' src='https://avatars0.githubusercontent.com/u/445200?v=4' width='36' height='36' alt='@arthurlogilab'>|[@arthurlogilab](https://github.com/arthurlogilab)|8
<img class='float-left rounded-1' src='https://avatars1.githubusercontent.com/u/1184479?v=4' width='36' height='36' alt='@cheuschober'>|[@cheuschober](https://github.com/cheuschober)|8
<img class='float-left rounded-1' src='https://avatars2.githubusercontent.com/u/378158?v=4' width='36' height='36' alt='@dseira'>|[@dseira](https://github.com/dseira)|8
<img class='float-left rounded-1' src='https://avatars2.githubusercontent.com/u/941928?v=4' width='36' height='36' alt='@amontalban'>|[@amontalban](https://github.com/amontalban)|7
<img class='float-left rounded-1' src='https://avatars1.githubusercontent.com/u/528061?v=4' width='36' height='36' alt='@puneetk'>|[@puneetk](https://github.com/puneetk)|7
<img class='float-left rounded-1' src='https://avatars0.githubusercontent.com/u/6354880?v=4' width='36' height='36' alt='@TaiSHiNet'>|[@TaiSHiNet](https://github.com/TaiSHiNet)|6
<img class='float-left rounded-1' src='https://avatars0.githubusercontent.com/u/745513?v=4' width='36' height='36' alt='@EvaSDK'>|[@EvaSDK](https://github.com/EvaSDK)|6
<img class='float-left rounded-1' src='https://avatars3.githubusercontent.com/u/3280630?v=4' width='36' height='36' alt='@cackovic'>|[@cackovic](https://github.com/cackovic)|5
<img class='float-left rounded-1' src='https://avatars1.githubusercontent.com/u/529?v=4' width='36' height='36' alt='@auser'>|[@auser](https://github.com/auser)|5
<img class='float-left rounded-1' src='https://avatars2.githubusercontent.com/u/3768412?v=4' width='36' height='36' alt='@stp-ip'>|[@stp-ip](https://github.com/stp-ip)|5
<img class='float-left rounded-1' src='https://avatars2.githubusercontent.com/u/1060507?v=4' width='36' height='36' alt='@ahmadsherif'>|[@ahmadsherif](https://github.com/ahmadsherif)|4
<img class='float-left rounded-1' src='https://avatars3.githubusercontent.com/u/3433835?v=4' width='36' height='36' alt='@n-rodriguez'>|[@n-rodriguez](https://github.com/n-rodriguez)|4
<img class='float-left rounded-1' src='https://avatars3.githubusercontent.com/u/37182?v=4' width='36' height='36' alt='@teepark'>|[@teepark](https://github.com/teepark)|4
<img class='float-left rounded-1' src='https://avatars0.githubusercontent.com/u/4754654?v=4' width='36' height='36' alt='@alinefr'>|[@alinefr](https://github.com/alinefr)|3
<img class='float-left rounded-1' src='https://avatars0.githubusercontent.com/u/5412167?v=4' width='36' height='36' alt='@devaos'>|[@devaos](https://github.com/devaos)|3
<img class='float-left rounded-1' src='https://avatars3.githubusercontent.com/u/637990?v=4' width='36' height='36' alt='@bmwiedemann'>|[@bmwiedemann](https://github.com/bmwiedemann)|3
<img class='float-left rounded-1' src='https://avatars1.githubusercontent.com/u/328598?v=4' width='36' height='36' alt='@terminalmage'>|[@terminalmage](https://github.com/terminalmage)|3
<img class='float-left rounded-1' src='https://avatars0.githubusercontent.com/u/94157?v=4' width='36' height='36' alt='@imran1008'>|[@imran1008](https://github.com/imran1008)|3
<img class='float-left rounded-1' src='https://avatars3.githubusercontent.com/u/783794?v=4' width='36' height='36' alt='@morsik'>|[@morsik](https://github.com/morsik)|3
<img class='float-left rounded-1' src='https://avatars3.githubusercontent.com/u/7060082?v=4' width='36' height='36' alt='@msciciel'>|[@msciciel](https://github.com/msciciel)|3
<img class='float-left rounded-1' src='https://avatars1.githubusercontent.com/u/8029478?v=4' width='36' height='36' alt='@rfairburn'>|[@rfairburn](https://github.com/rfairburn)|3
<img class='float-left rounded-1' src='https://avatars2.githubusercontent.com/u/50891?v=4' width='36' height='36' alt='@westurner'>|[@westurner](https://github.com/westurner)|3
<img class='float-left rounded-1' src='https://avatars2.githubusercontent.com/u/813115?v=4' width='36' height='36' alt='@chris-sanders'>|[@chris-sanders](https://github.com/chris-sanders)|2
<img class='float-left rounded-1' src='https://avatars2.githubusercontent.com/u/4195158?v=4' width='36' height='36' alt='@dafyddj'>|[@dafyddj](https://github.com/dafyddj)|2
<img class='float-left rounded-1' src='https://avatars0.githubusercontent.com/u/306240?v=4' width='36' height='36' alt='@UtahDave'>|[@UtahDave](https://github.com/UtahDave)|2
<img class='float-left rounded-1' src='https://avatars0.githubusercontent.com/u/51596?v=4' width='36' height='36' alt='@ghtyrant'>|[@ghtyrant](https://github.com/ghtyrant)|2
<img class='float-left rounded-1' src='https://avatars2.githubusercontent.com/u/56635?v=4' width='36' height='36' alt='@pprkut'>|[@pprkut](https://github.com/pprkut)|2
<img class='float-left rounded-1' src='https://avatars2.githubusercontent.com/u/85002?v=4' width='36' height='36' alt='@jstrunk'>|[@jstrunk](https://github.com/jstrunk)|2
<img class='float-left rounded-1' src='https://avatars3.githubusercontent.com/u/5306980?v=4' width='36' height='36' alt='@johnkeates'>|[@johnkeates](https://github.com/johnkeates)|2
<img class='float-left rounded-1' src='https://avatars3.githubusercontent.com/u/2200073?v=4' width='36' height='36' alt='@kmshultz'>|[@kmshultz](https://github.com/kmshultz)|2
<img class='float-left rounded-1' src='https://avatars1.githubusercontent.com/u/11417?v=4' width='36' height='36' alt='@malept'>|[@malept](https://github.com/malept)|2
<img class='float-left rounded-1' src='https://avatars2.githubusercontent.com/u/3279679?v=4' width='36' height='36' alt='@meganlkm'>|[@meganlkm](https://github.com/meganlkm)|2
<img class='float-left rounded-1' src='https://avatars2.githubusercontent.com/u/84885?v=4' width='36' height='36' alt='@garrettw'>|[@garrettw](https://github.com/garrettw)|2
<img class='float-left rounded-1' src='https://avatars1.githubusercontent.com/u/101513?v=4' width='36' height='36' alt='@ErisDS'>|[@ErisDS](https://github.com/ErisDS)|2
<img class='float-left rounded-1' src='https://avatars1.githubusercontent.com/u/879922?v=4' width='36' height='36' alt='@myoung34'>|[@myoung34](https://github.com/myoung34)|2
<img class='float-left rounded-1' src='https://avatars0.githubusercontent.com/u/46799934?v=4' width='36' height='36' alt='@sticky-note'>|[@sticky-note](https://github.com/sticky-note)|2
<img class='float-left rounded-1' src='https://avatars1.githubusercontent.com/u/1922124?v=4' width='36' height='36' alt='@bebosudo'>|[@bebosudo](https://github.com/bebosudo)|1
<img class='float-left rounded-1' src='https://avatars0.githubusercontent.com/u/8395913?v=4' width='36' height='36' alt='@aanriot'>|[@aanriot](https://github.com/aanriot)|1
<img class='float-left rounded-1' src='https://avatars2.githubusercontent.com/u/7460036?v=4' width='36' height='36' alt='@andrew-vant'>|[@andrew-vant](https://github.com/andrew-vant)|1
<img class='float-left rounded-1' src='https://avatars2.githubusercontent.com/u/2106845?v=4' width='36' height='36' alt='@bemosior'>|[@bemosior](https://github.com/bemosior)|1
<img class='float-left rounded-1' src='https://avatars3.githubusercontent.com/u/458548?v=4' width='36' height='36' alt='@SuperTux88'>|[@SuperTux88](https://github.com/SuperTux88)|1
<img class='float-left rounded-1' src='https://avatars2.githubusercontent.com/u/1079875?v=4' width='36' height='36' alt='@bogdanr'>|[@bogdanr](https://github.com/bogdanr)|1
<img class='float-left rounded-1' src='https://avatars1.githubusercontent.com/u/1435085?v=4' width='36' height='36' alt='@blbradley'>|[@blbradley](https://github.com/blbradley)|1
<img class='float-left rounded-1' src='https://avatars3.githubusercontent.com/u/2459661?v=4' width='36' height='36' alt='@CorwinTanner'>|[@CorwinTanner](https://github.com/CorwinTanner)|1
<img class='float-left rounded-1' src='https://avatars1.githubusercontent.com/u/1686586?v=4' width='36' height='36' alt='@fayetted'>|[@fayetted](https://github.com/fayetted)|1
<img class='float-left rounded-1' src='https://avatars3.githubusercontent.com/u/72727?v=4' width='36' height='36' alt='@czarneckid'>|[@czarneckid](https://github.com/czarneckid)|1
<img class='float-left rounded-1' src='https://avatars2.githubusercontent.com/u/983?v=4' width='36' height='36' alt='@statik'>|[@statik](https://github.com/statik)|1
<img class='float-left rounded-1' src='https://avatars0.githubusercontent.com/u/48329?v=4' width='36' height='36' alt='@ekristen'>|[@ekristen](https://github.com/ekristen)|1
<img class='float-left rounded-1' src='https://avatars0.githubusercontent.com/u/75496?v=4' width='36' height='36' alt='@jeduardo'>|[@jeduardo](https://github.com/jeduardo)|1
<img class='float-left rounded-1' src='https://avatars3.githubusercontent.com/u/668449?v=4' width='36' height='36' alt='@stromnet'>|[@stromnet](https://github.com/stromnet)|1
<img class='float-left rounded-1' src='https://avatars0.githubusercontent.com/u/744549?v=4' width='36' height='36' alt='@bsdlp'>|[@bsdlp](https://github.com/bsdlp)|1
<img class='float-left rounded-1' src='https://avatars3.githubusercontent.com/u/5395035?v=4' width='36' height='36' alt='@MEschenbacher'>|[@MEschenbacher](https://github.com/MEschenbacher)|1
<img class='float-left rounded-1' src='https://avatars1.githubusercontent.com/u/225115?v=4' width='36' height='36' alt='@renich'>|[@renich](https://github.com/renich)|1
<img class='float-left rounded-1' src='https://avatars2.githubusercontent.com/u/62993?v=4' width='36' height='36' alt='@outime'>|[@outime](https://github.com/outime)|1
<img class='float-left rounded-1' src='https://avatars0.githubusercontent.com/u/991850?v=4' width='36' height='36' alt='@scub'>|[@scub](https://github.com/scub)|1
<img class='float-left rounded-1' src='https://avatars0.githubusercontent.com/u/507599?v=4' width='36' height='36' alt='@thatch45'>|[@thatch45](https://github.com/thatch45)|1
<img class='float-left rounded-1' src='https://avatars3.githubusercontent.com/u/479088?v=4' width='36' height='36' alt='@blarghmatey'>|[@blarghmatey](https://github.com/blarghmatey)|1
<img class='float-left rounded-1' src='https://avatars1.githubusercontent.com/u/117961?v=4' width='36' height='36' alt='@babilen5'>|[@babilen5](https://github.com/babilen5)|1
<img class='float-left rounded-1' src='https://avatars0.githubusercontent.com/u/228723?v=4' width='36' height='36' alt='@abednarik'>|[@abednarik](https://github.com/abednarik)|1
<img class='float-left rounded-1' src='https://avatars3.githubusercontent.com/u/19428823?v=4' width='36' height='36' alt='@francesco-a'>|[@francesco-a](https://github.com/francesco-a)|1
<img class='float-left rounded-1' src='https://avatars3.githubusercontent.com/u/1068764?v=4' width='36' height='36' alt='@oboyle'>|[@oboyle](https://github.com/oboyle)|1
<img class='float-left rounded-1' src='https://avatars1.githubusercontent.com/u/542613?v=4' width='36' height='36' alt='@bersace'>|[@bersace](https://github.com/bersace)|1
<img class='float-left rounded-1' src='https://avatars.githubusercontent.com/u/10231489?v=4' width='36' height='36' alt='@myii'>|[@myii](https://github.com/myii)|107
<img class='float-left rounded-1' src='https://avatars.githubusercontent.com/u/1800660?v=4' width='36' height='36' alt='@aboe76'>|[@aboe76](https://github.com/aboe76)|46
<img class='float-left rounded-1' src='https://avatars.githubusercontent.com/u/1396878?v=4' width='36' height='36' alt='@gravyboat'>|[@gravyboat](https://github.com/gravyboat)|27
<img class='float-left rounded-1' src='https://avatars.githubusercontent.com/u/3374962?v=4' width='36' height='36' alt='@nmadhok'>|[@nmadhok](https://github.com/nmadhok)|24
<img class='float-left rounded-1' src='https://avatars.githubusercontent.com/u/242396?v=4' width='36' height='36' alt='@javierbertoli'>|[@javierbertoli](https://github.com/javierbertoli)|21
<img class='float-left rounded-1' src='https://avatars.githubusercontent.com/u/13322818?v=4' width='36' height='36' alt='@noelmcloughlin'>|[@noelmcloughlin](https://github.com/noelmcloughlin)|18
<img class='float-left rounded-1' src='https://avatars.githubusercontent.com/u/91293?v=4' width='36' height='36' alt='@whiteinge'>|[@whiteinge](https://github.com/whiteinge)|17
<img class='float-left rounded-1' src='https://avatars.githubusercontent.com/u/4956475?v=4' width='36' height='36' alt='@ross-p'>|[@ross-p](https://github.com/ross-p)|13
<img class='float-left rounded-1' src='https://avatars.githubusercontent.com/u/52996?v=4' width='36' height='36' alt='@daks'>|[@daks](https://github.com/daks)|11
<img class='float-left rounded-1' src='https://avatars.githubusercontent.com/u/287147?v=4' width='36' height='36' alt='@techhat'>|[@techhat](https://github.com/techhat)|10
<img class='float-left rounded-1' src='https://avatars.githubusercontent.com/u/445200?v=4' width='36' height='36' alt='@arthurlogilab'>|[@arthurlogilab](https://github.com/arthurlogilab)|8
<img class='float-left rounded-1' src='https://avatars.githubusercontent.com/u/1184479?v=4' width='36' height='36' alt='@cheuschober'>|[@cheuschober](https://github.com/cheuschober)|8
<img class='float-left rounded-1' src='https://avatars.githubusercontent.com/u/378158?v=4' width='36' height='36' alt='@dseira'>|[@dseira](https://github.com/dseira)|8
<img class='float-left rounded-1' src='https://avatars.githubusercontent.com/u/941928?v=4' width='36' height='36' alt='@amontalban'>|[@amontalban](https://github.com/amontalban)|7
<img class='float-left rounded-1' src='https://avatars.githubusercontent.com/u/528061?v=4' width='36' height='36' alt='@puneetk'>|[@puneetk](https://github.com/puneetk)|7
<img class='float-left rounded-1' src='https://avatars.githubusercontent.com/u/6354880?v=4' width='36' height='36' alt='@TaiSHiNet'>|[@TaiSHiNet](https://github.com/TaiSHiNet)|6
<img class='float-left rounded-1' src='https://avatars.githubusercontent.com/u/745513?v=4' width='36' height='36' alt='@EvaSDK'>|[@EvaSDK](https://github.com/EvaSDK)|6
<img class='float-left rounded-1' src='https://avatars.githubusercontent.com/u/3280630?v=4' width='36' height='36' alt='@cackovic'>|[@cackovic](https://github.com/cackovic)|5
<img class='float-left rounded-1' src='https://avatars.githubusercontent.com/u/529?v=4' width='36' height='36' alt='@auser'>|[@auser](https://github.com/auser)|5
<img class='float-left rounded-1' src='https://avatars.githubusercontent.com/u/3768412?v=4' width='36' height='36' alt='@stp-ip'>|[@stp-ip](https://github.com/stp-ip)|5
<img class='float-left rounded-1' src='https://avatars.githubusercontent.com/u/1060507?v=4' width='36' height='36' alt='@ahmadsherif'>|[@ahmadsherif](https://github.com/ahmadsherif)|4
<img class='float-left rounded-1' src='https://avatars.githubusercontent.com/u/3433835?v=4' width='36' height='36' alt='@n-rodriguez'>|[@n-rodriguez](https://github.com/n-rodriguez)|4
<img class='float-left rounded-1' src='https://avatars.githubusercontent.com/u/37182?v=4' width='36' height='36' alt='@teepark'>|[@teepark](https://github.com/teepark)|4
<img class='float-left rounded-1' src='https://avatars.githubusercontent.com/u/4754654?v=4' width='36' height='36' alt='@alinefr'>|[@alinefr](https://github.com/alinefr)|3
<img class='float-left rounded-1' src='https://avatars.githubusercontent.com/u/5412167?v=4' width='36' height='36' alt='@devaos'>|[@devaos](https://github.com/devaos)|3
<img class='float-left rounded-1' src='https://avatars.githubusercontent.com/u/637990?v=4' width='36' height='36' alt='@bmwiedemann'>|[@bmwiedemann](https://github.com/bmwiedemann)|3
<img class='float-left rounded-1' src='https://avatars.githubusercontent.com/u/4195158?v=4' width='36' height='36' alt='@dafyddj'>|[@dafyddj](https://github.com/dafyddj)|3
<img class='float-left rounded-1' src='https://avatars.githubusercontent.com/u/328598?v=4' width='36' height='36' alt='@terminalmage'>|[@terminalmage](https://github.com/terminalmage)|3
<img class='float-left rounded-1' src='https://avatars.githubusercontent.com/u/94157?v=4' width='36' height='36' alt='@imran1008'>|[@imran1008](https://github.com/imran1008)|3
<img class='float-left rounded-1' src='https://avatars.githubusercontent.com/u/783794?v=4' width='36' height='36' alt='@morsik'>|[@morsik](https://github.com/morsik)|3
<img class='float-left rounded-1' src='https://avatars.githubusercontent.com/u/7060082?v=4' width='36' height='36' alt='@msciciel'>|[@msciciel](https://github.com/msciciel)|3
<img class='float-left rounded-1' src='https://avatars.githubusercontent.com/u/8029478?v=4' width='36' height='36' alt='@rfairburn'>|[@rfairburn](https://github.com/rfairburn)|3
<img class='float-left rounded-1' src='https://avatars.githubusercontent.com/u/50891?v=4' width='36' height='36' alt='@westurner'>|[@westurner](https://github.com/westurner)|3
<img class='float-left rounded-1' src='https://avatars.githubusercontent.com/u/1773291?v=4' width='36' height='36' alt='@toanju'>|[@toanju](https://github.com/toanju)|3
<img class='float-left rounded-1' src='https://avatars.githubusercontent.com/u/813115?v=4' width='36' height='36' alt='@chris-sanders'>|[@chris-sanders](https://github.com/chris-sanders)|2
<img class='float-left rounded-1' src='https://avatars.githubusercontent.com/u/306240?v=4' width='36' height='36' alt='@UtahDave'>|[@UtahDave](https://github.com/UtahDave)|2
<img class='float-left rounded-1' src='https://avatars.githubusercontent.com/u/51596?v=4' width='36' height='36' alt='@ghtyrant'>|[@ghtyrant](https://github.com/ghtyrant)|2
<img class='float-left rounded-1' src='https://avatars.githubusercontent.com/u/56635?v=4' width='36' height='36' alt='@pprkut'>|[@pprkut](https://github.com/pprkut)|2
<img class='float-left rounded-1' src='https://avatars.githubusercontent.com/u/85002?v=4' width='36' height='36' alt='@jstrunk'>|[@jstrunk](https://github.com/jstrunk)|2
<img class='float-left rounded-1' src='https://avatars.githubusercontent.com/u/5306980?v=4' width='36' height='36' alt='@johnkeates'>|[@johnkeates](https://github.com/johnkeates)|2
<img class='float-left rounded-1' src='https://avatars.githubusercontent.com/u/2200073?v=4' width='36' height='36' alt='@kmshultz'>|[@kmshultz](https://github.com/kmshultz)|2
<img class='float-left rounded-1' src='https://avatars.githubusercontent.com/u/11417?v=4' width='36' height='36' alt='@malept'>|[@malept](https://github.com/malept)|2
<img class='float-left rounded-1' src='https://avatars.githubusercontent.com/u/3279679?v=4' width='36' height='36' alt='@meganlkm'>|[@meganlkm](https://github.com/meganlkm)|2
<img class='float-left rounded-1' src='https://avatars.githubusercontent.com/u/101513?v=4' width='36' height='36' alt='@ErisDS'>|[@ErisDS](https://github.com/ErisDS)|2
<img class='float-left rounded-1' src='https://avatars.githubusercontent.com/u/879922?v=4' width='36' height='36' alt='@myoung34'>|[@myoung34](https://github.com/myoung34)|2
<img class='float-left rounded-1' src='https://avatars.githubusercontent.com/u/46799934?v=4' width='36' height='36' alt='@sticky-note'>|[@sticky-note](https://github.com/sticky-note)|2
<img class='float-left rounded-1' src='https://avatars.githubusercontent.com/u/1922124?v=4' width='36' height='36' alt='@bebosudo'>|[@bebosudo](https://github.com/bebosudo)|1
<img class='float-left rounded-1' src='https://avatars.githubusercontent.com/u/8395913?v=4' width='36' height='36' alt='@aanriot'>|[@aanriot](https://github.com/aanriot)|1
<img class='float-left rounded-1' src='https://avatars.githubusercontent.com/u/7460036?v=4' width='36' height='36' alt='@andrew-vant'>|[@andrew-vant](https://github.com/andrew-vant)|1
<img class='float-left rounded-1' src='https://avatars.githubusercontent.com/u/2106845?v=4' width='36' height='36' alt='@bemosior'>|[@bemosior](https://github.com/bemosior)|1
<img class='float-left rounded-1' src='https://avatars.githubusercontent.com/u/458548?v=4' width='36' height='36' alt='@SuperTux88'>|[@SuperTux88](https://github.com/SuperTux88)|1
<img class='float-left rounded-1' src='https://avatars.githubusercontent.com/u/1079875?v=4' width='36' height='36' alt='@bogdanr'>|[@bogdanr](https://github.com/bogdanr)|1
<img class='float-left rounded-1' src='https://avatars.githubusercontent.com/u/1435085?v=4' width='36' height='36' alt='@blbradley'>|[@blbradley](https://github.com/blbradley)|1
<img class='float-left rounded-1' src='https://avatars.githubusercontent.com/u/2459661?v=4' width='36' height='36' alt='@CorwinTanner'>|[@CorwinTanner](https://github.com/CorwinTanner)|1
<img class='float-left rounded-1' src='https://avatars.githubusercontent.com/u/1686586?v=4' width='36' height='36' alt='@fayetted'>|[@fayetted](https://github.com/fayetted)|1
<img class='float-left rounded-1' src='https://avatars.githubusercontent.com/u/1233212?v=4' width='36' height='36' alt='@baby-gnu'>|[@baby-gnu](https://github.com/baby-gnu)|1
<img class='float-left rounded-1' src='https://avatars.githubusercontent.com/u/72727?v=4' width='36' height='36' alt='@czarneckid'>|[@czarneckid](https://github.com/czarneckid)|1
<img class='float-left rounded-1' src='https://avatars.githubusercontent.com/u/983?v=4' width='36' height='36' alt='@statik'>|[@statik](https://github.com/statik)|1
<img class='float-left rounded-1' src='https://avatars.githubusercontent.com/u/48329?v=4' width='36' height='36' alt='@ekristen'>|[@ekristen](https://github.com/ekristen)|1
<img class='float-left rounded-1' src='https://avatars.githubusercontent.com/u/84885?v=4' width='36' height='36' alt='@garrettw'>|[@garrettw](https://github.com/garrettw)|1
<img class='float-left rounded-1' src='https://avatars.githubusercontent.com/u/75496?v=4' width='36' height='36' alt='@jeduardo'>|[@jeduardo](https://github.com/jeduardo)|1
<img class='float-left rounded-1' src='https://avatars.githubusercontent.com/u/668449?v=4' width='36' height='36' alt='@stromnet'>|[@stromnet](https://github.com/stromnet)|1
<img class='float-left rounded-1' src='https://avatars.githubusercontent.com/u/744549?v=4' width='36' height='36' alt='@bsdlp'>|[@bsdlp](https://github.com/bsdlp)|1
<img class='float-left rounded-1' src='https://avatars.githubusercontent.com/u/350294?v=4' width='36' height='36' alt='@anderbubble'>|[@anderbubble](https://github.com/anderbubble)|1
<img class='float-left rounded-1' src='https://avatars.githubusercontent.com/u/5395035?v=4' width='36' height='36' alt='@MEschenbacher'>|[@MEschenbacher](https://github.com/MEschenbacher)|1
<img class='float-left rounded-1' src='https://avatars.githubusercontent.com/u/225115?v=4' width='36' height='36' alt='@renich'>|[@renich](https://github.com/renich)|1
<img class='float-left rounded-1' src='https://avatars.githubusercontent.com/u/62993?v=4' width='36' height='36' alt='@outime'>|[@outime](https://github.com/outime)|1
<img class='float-left rounded-1' src='https://avatars.githubusercontent.com/u/991850?v=4' width='36' height='36' alt='@scub'>|[@scub](https://github.com/scub)|1
<img class='float-left rounded-1' src='https://avatars.githubusercontent.com/u/507599?v=4' width='36' height='36' alt='@thatch45'>|[@thatch45](https://github.com/thatch45)|1
<img class='float-left rounded-1' src='https://avatars.githubusercontent.com/u/479088?v=4' width='36' height='36' alt='@blarghmatey'>|[@blarghmatey](https://github.com/blarghmatey)|1
<img class='float-left rounded-1' src='https://avatars.githubusercontent.com/u/117961?v=4' width='36' height='36' alt='@babilen5'>|[@babilen5](https://github.com/babilen5)|1
<img class='float-left rounded-1' src='https://avatars.githubusercontent.com/u/228723?v=4' width='36' height='36' alt='@abednarik'>|[@abednarik](https://github.com/abednarik)|1
<img class='float-left rounded-1' src='https://avatars.githubusercontent.com/u/19428823?v=4' width='36' height='36' alt='@francesco-a'>|[@francesco-a](https://github.com/francesco-a)|1
<img class='float-left rounded-1' src='https://avatars.githubusercontent.com/u/1068764?v=4' width='36' height='36' alt='@oboyle'>|[@oboyle](https://github.com/oboyle)|1
<img class='float-left rounded-1' src='https://avatars.githubusercontent.com/u/542613?v=4' width='36' height='36' alt='@bersace'>|[@bersace](https://github.com/bersace)|1

---

Auto-generated by a [forked version](https://github.com/myii/maintainer) of [gaocegege/maintainer](https://github.com/gaocegege/maintainer) on 2021-01-04.
Auto-generated by a [forked version](https://github.com/myii/maintainer) of [gaocegege/maintainer](https://github.com/gaocegege/maintainer) on 2021-06-15.

+ 126
- 0
CHANGELOG.md Visa fil

@@ -1,5 +1,131 @@
# Changelog

## [2.7.4](https://github.com/saltstack-formulas/nginx-formula/compare/v2.7.3...v2.7.4) (2021-06-15)


### Bug Fixes

* **servers:** include main config file watch in extend ([00387e7](https://github.com/saltstack-formulas/nginx-formula/commit/00387e7cbd90ceb5496df5cf9bce8f7dae25b056))

## [2.7.3](https://github.com/saltstack-formulas/nginx-formula/compare/v2.7.2...v2.7.3) (2021-06-14)


### Tests

* **snippets:** add tests for snippets includes ([1c83b6d](https://github.com/saltstack-formulas/nginx-formula/commit/1c83b6d5fa93079476ca9e8baa1ccd9d44e5237f)), closes [#275](https://github.com/saltstack-formulas/nginx-formula/issues/275) [#274](https://github.com/saltstack-formulas/nginx-formula/issues/274)

## [2.7.2](https://github.com/saltstack-formulas/nginx-formula/compare/v2.7.1...v2.7.2) (2021-06-14)


### Bug Fixes

* **certificates:** ensure `openssl` installed before `cmd.run` ([0cd7c7b](https://github.com/saltstack-formulas/nginx-formula/commit/0cd7c7b20528ce9fbd4f8991a365415a3093546d)), closes [/gitlab.com/saltstack-formulas/nginx-formula/-/jobs/1345325819#L2830](https://github.com//gitlab.com/saltstack-formulas/nginx-formula/-/jobs/1345325819/issues/L2830)
* **snippets:** ignore servers or snippets when undefined ([6cb486d](https://github.com/saltstack-formulas/nginx-formula/commit/6cb486dbd290c91bbdbf00fd0061efaedbef4dea)), closes [#274](https://github.com/saltstack-formulas/nginx-formula/issues/274)

## [2.7.1](https://github.com/saltstack-formulas/nginx-formula/compare/v2.7.0...v2.7.1) (2021-05-12)


### Bug Fixes

* **servers:** wrong conditional specification ([494b2fb](https://github.com/saltstack-formulas/nginx-formula/commit/494b2fbea490fded02cecd4d3e3e0372476548fb))


### Continuous Integration

* add `arch-master` to matrix and update `.travis.yml` [skip ci] ([4697152](https://github.com/saltstack-formulas/nginx-formula/commit/46971528d7a7e23241564da146ee8d28b7d2eecc))

# [2.7.0](https://github.com/saltstack-formulas/nginx-formula/compare/v2.6.3...v2.7.0) (2021-04-28)


### Continuous Integration

* **kitchen+gitlab:** adjust matrix to add `3003` [skip ci] ([46faf4e](https://github.com/saltstack-formulas/nginx-formula/commit/46faf4e24b39f7d4fd138126dbe5eb6a06eb5b67))
* **vagrant:** add FreeBSD 13.0 [skip ci] ([b41062e](https://github.com/saltstack-formulas/nginx-formula/commit/b41062e3b19c4c109198bd95c53158d871bbff85))
* **vagrant:** use pre-salted boxes & conditional local settings [skip ci] ([b9e9cd3](https://github.com/saltstack-formulas/nginx-formula/commit/b9e9cd38e6d29b7eb4cd8ae74a1bdf901959dee3))


### Documentation

* **readme:** add `Testing with Vagrant` section [skip ci] ([5727848](https://github.com/saltstack-formulas/nginx-formula/commit/57278481de489441a5c04aee544962212e91c5af))


### Features

* **servers_config:** add require statement to manage dependencies ([622d22f](https://github.com/saltstack-formulas/nginx-formula/commit/622d22f9711085aeca19f3907e22e87c6b21b8d0))


### Tests

* **requires:** verify dependencies in vhosts ([6478143](https://github.com/saltstack-formulas/nginx-formula/commit/64781431b9187d392f56ce5461c3b1a9c2944f90))

## [2.6.3](https://github.com/saltstack-formulas/nginx-formula/compare/v2.6.2...v2.6.3) (2021-04-03)


### Bug Fixes

* **freebsd:** add `openssl` pkg and update all `default` tests ([4cd351a](https://github.com/saltstack-formulas/nginx-formula/commit/4cd351adbc184b938b0d0cf587419bab5b39a7d3))


### Continuous Integration

* enable Vagrant-based testing using GitHub Actions ([c79ce9a](https://github.com/saltstack-formulas/nginx-formula/commit/c79ce9a9ae30e889ab925bb0398008b434bc9b0a))

## [2.6.2](https://github.com/saltstack-formulas/nginx-formula/compare/v2.6.1...v2.6.2) (2021-03-30)


### Bug Fixes

* **servers_config:** fixup 05994e1 ([c03729a](https://github.com/saltstack-formulas/nginx-formula/commit/c03729ae326876a20cb22c346f9d4cd96418af9a))

## [2.6.1](https://github.com/saltstack-formulas/nginx-formula/compare/v2.6.0...v2.6.1) (2021-03-29)


### Bug Fixes

* **servers_config:** remove service depedency ([05994e1](https://github.com/saltstack-formulas/nginx-formula/commit/05994e1b174ccdf3ff4a444f81314ad925fa478d))


### Code Refactoring

* **servers_config:** remove unused loop ([3825557](https://github.com/saltstack-formulas/nginx-formula/commit/3825557070a18db4828cc634dd036a428f8a9836))


### Continuous Integration

* **kitchen+ci:** include `passenger` suite [skip ci] ([0bbe686](https://github.com/saltstack-formulas/nginx-formula/commit/0bbe68619fdf3791e6202ce3f17ca03efc4441c1))


### Tests

* standardise use of `share` suite & `_mapdata` state [skip ci] ([8ea3c82](https://github.com/saltstack-formulas/nginx-formula/commit/8ea3c82be3fccb2bad8bac566f210454549d141e))

# [2.6.0](https://github.com/saltstack-formulas/nginx-formula/compare/v2.5.0...v2.6.0) (2021-03-11)


### Bug Fixes

* **passenger:** various fixes ([7271c9d](https://github.com/saltstack-formulas/nginx-formula/commit/7271c9d16c8218244ae5ef0b188b7f9f4a414074))
* **pkg:** add inline EPEL repo configuration for Amazon Linux 2 ([ae6375c](https://github.com/saltstack-formulas/nginx-formula/commit/ae6375ccccd56a506ee28babbeabf351112a06de))


### Continuous Integration

* **gemfile+lock:** use `ssf` customised `kitchen-docker` repo [skip ci] ([123d13e](https://github.com/saltstack-formulas/nginx-formula/commit/123d13e2f483c203cbfc1366b36a30e1732603e1))
* **kitchen+ci:** make rubocop happy [skip ci] ([eedfc56](https://github.com/saltstack-formulas/nginx-formula/commit/eedfc56b41b673e196029274048670e89e55a694))
* **kitchen+ci:** use latest pre-salted images (after CVE) [skip ci] ([63d32a4](https://github.com/saltstack-formulas/nginx-formula/commit/63d32a40b13ca2c77bb83cceba620218617aab6a))
* **kitchen+gitlab-ci:** use latest pre-salted images [skip ci] ([b4411c6](https://github.com/saltstack-formulas/nginx-formula/commit/b4411c61d3352ecb9775197f991f5f33996730dc))
* **pre-commit:** update hook for `rubocop` [skip ci] ([2a23743](https://github.com/saltstack-formulas/nginx-formula/commit/2a23743fca8fd54b2a18dc2a07d0daa8142c0289))


### Features

* **config:** validate config before applying ([b396b24](https://github.com/saltstack-formulas/nginx-formula/commit/b396b24fe456de7001b2cc013814ada189351e6f))


### Tests

* **config:** fix for Amazon Linux 2 & Oracle Linux 7/8 ([ab39c8f](https://github.com/saltstack-formulas/nginx-formula/commit/ab39c8f7c3c9bf5dbd4436cad8ccce21263fe646))

# [2.5.0](https://github.com/saltstack-formulas/nginx-formula/compare/v2.4.1...v2.5.0) (2021-01-04)



+ 5
- 0
CODEOWNERS Visa fil

@@ -15,8 +15,11 @@
/docs/AUTHORS.rst @saltstack-formulas/ssf
/docs/CHANGELOG.rst @saltstack-formulas/ssf
/docs/TOFS_pattern.rst @saltstack-formulas/ssf
/*/_mapdata/ @saltstack-formulas/ssf
/*/libsaltcli.jinja @saltstack-formulas/ssf
/*/libtofs.jinja @saltstack-formulas/ssf
/test/integration/**/_mapdata.rb @saltstack-formulas/ssf
/test/integration/**/libraries/system.rb @saltstack-formulas/ssf
/test/integration/**/inspec.yml @saltstack-formulas/ssf
/test/integration/**/README.md @saltstack-formulas/ssf
/.gitignore @saltstack-formulas/ssf
@@ -36,6 +39,8 @@
/Gemfile @saltstack-formulas/ssf
/Gemfile.lock @saltstack-formulas/ssf
/kitchen.yml @saltstack-formulas/ssf
/kitchen.vagrant.yml @saltstack-formulas/ssf
/kitchen.windows.yml @saltstack-formulas/ssf
/pre-commit_semantic-release.sh @saltstack-formulas/ssf
/release-rules.js @saltstack-formulas/ssf
/release.config.js @saltstack-formulas/ssf

+ 1
- 1
FORMULA Visa fil

@@ -1,7 +1,7 @@
name: nginx
os: Debian, Ubuntu, RedHat, Fedora, CentOS, Suse, openSUSE
os_family: Debian, RedHat, Suse
version: 2.5.0
version: 2.7.4
release: 1
minimum_version: 2017.3
summary: nginx formula

+ 8
- 2
Gemfile Visa fil

@@ -5,8 +5,14 @@ source 'https://rubygems.org'
# Use the latest version of `inspec` prior to `4.23.4`, which introduces a
# regression where the diff isn't displayed when comparing using `eq`.
gem 'inspec', '~> 4.22.22'
# Install the `kitchen-docker` gem from GitHub because the latest version
# Install the `kitchen-docker` gem using `git` because the latest version
# currently available (`2.10.0`) doesn't include a recent fix for Gentoo.
gem 'kitchen-docker', github: 'test-kitchen/kitchen-docker', ref: '41e80fe'
# rubocop:disable Layout/LineLength
gem 'kitchen-docker', git: 'https://gitlab.com/saltstack-formulas/infrastructure/kitchen-docker', branch: 'ssf'
# rubocop:enable Layout/LineLength
gem 'kitchen-inspec', '>= 2.2.1'
gem 'kitchen-salt', '>= 0.6.3'

group :vagrant do
gem 'kitchen-vagrant'
end

+ 6
- 3
Gemfile.lock Visa fil

@@ -1,7 +1,7 @@
GIT
remote: https://github.com/test-kitchen/kitchen-docker.git
revision: 41e80fed3a7cc86323e19c16a5a340cebf7e5848
ref: 41e80fe
remote: https://gitlab.com/saltstack-formulas/infrastructure/kitchen-docker
revision: 1f543f654da5c1774cb8737f6f07a01745520bb5
branch: ssf
specs:
kitchen-docker (2.10.0)
test-kitchen (>= 1.0.0)
@@ -292,6 +292,8 @@ GEM
kitchen-salt (0.6.3)
hashie (>= 3.5)
test-kitchen (>= 1.4)
kitchen-vagrant (1.7.0)
test-kitchen (>= 1.4, < 3)
libyajl2 (1.2.0)
license-acceptance (1.0.19)
pastel (~> 0.7)
@@ -525,6 +527,7 @@ DEPENDENCIES
kitchen-docker!
kitchen-inspec (>= 2.2.1)
kitchen-salt (>= 0.6.3)
kitchen-vagrant

BUNDLED WITH
2.1.2

+ 89
- 80
docs/AUTHORS.rst Visa fil

@@ -13,224 +13,233 @@ This list is sorted by the number of commits per contributor in *descending* ord
* - Avatar
- Contributor
- Contributions
* - :raw-html-m2r:`<img class='float-left rounded-1' src='https://avatars2.githubusercontent.com/u/10231489?v=4' width='36' height='36' alt='@myii'>`
* - :raw-html-m2r:`<img class='float-left rounded-1' src='https://avatars.githubusercontent.com/u/10231489?v=4' width='36' height='36' alt='@myii'>`
- `@myii <https://github.com/myii>`_
- 82
* - :raw-html-m2r:`<img class='float-left rounded-1' src='https://avatars0.githubusercontent.com/u/1800660?v=4' width='36' height='36' alt='@aboe76'>`
- 107
* - :raw-html-m2r:`<img class='float-left rounded-1' src='https://avatars.githubusercontent.com/u/1800660?v=4' width='36' height='36' alt='@aboe76'>`
- `@aboe76 <https://github.com/aboe76>`_
- 46
* - :raw-html-m2r:`<img class='float-left rounded-1' src='https://avatars2.githubusercontent.com/u/1396878?v=4' width='36' height='36' alt='@gravyboat'>`
* - :raw-html-m2r:`<img class='float-left rounded-1' src='https://avatars.githubusercontent.com/u/1396878?v=4' width='36' height='36' alt='@gravyboat'>`
- `@gravyboat <https://github.com/gravyboat>`_
- 27
* - :raw-html-m2r:`<img class='float-left rounded-1' src='https://avatars0.githubusercontent.com/u/3374962?v=4' width='36' height='36' alt='@nmadhok'>`
* - :raw-html-m2r:`<img class='float-left rounded-1' src='https://avatars.githubusercontent.com/u/3374962?v=4' width='36' height='36' alt='@nmadhok'>`
- `@nmadhok <https://github.com/nmadhok>`_
- 24
* - :raw-html-m2r:`<img class='float-left rounded-1' src='https://avatars1.githubusercontent.com/u/13322818?v=4' width='36' height='36' alt='@noelmcloughlin'>`
* - :raw-html-m2r:`<img class='float-left rounded-1' src='https://avatars.githubusercontent.com/u/242396?v=4' width='36' height='36' alt='@javierbertoli'>`
- `@javierbertoli <https://github.com/javierbertoli>`_
- 21
* - :raw-html-m2r:`<img class='float-left rounded-1' src='https://avatars.githubusercontent.com/u/13322818?v=4' width='36' height='36' alt='@noelmcloughlin'>`
- `@noelmcloughlin <https://github.com/noelmcloughlin>`_
- 18
* - :raw-html-m2r:`<img class='float-left rounded-1' src='https://avatars2.githubusercontent.com/u/91293?v=4' width='36' height='36' alt='@whiteinge'>`
* - :raw-html-m2r:`<img class='float-left rounded-1' src='https://avatars.githubusercontent.com/u/91293?v=4' width='36' height='36' alt='@whiteinge'>`
- `@whiteinge <https://github.com/whiteinge>`_
- 17
* - :raw-html-m2r:`<img class='float-left rounded-1' src='https://avatars0.githubusercontent.com/u/4956475?v=4' width='36' height='36' alt='@ross-p'>`
* - :raw-html-m2r:`<img class='float-left rounded-1' src='https://avatars.githubusercontent.com/u/4956475?v=4' width='36' height='36' alt='@ross-p'>`
- `@ross-p <https://github.com/ross-p>`_
- 13
* - :raw-html-m2r:`<img class='float-left rounded-1' src='https://avatars3.githubusercontent.com/u/52996?v=4' width='36' height='36' alt='@daks'>`
* - :raw-html-m2r:`<img class='float-left rounded-1' src='https://avatars.githubusercontent.com/u/52996?v=4' width='36' height='36' alt='@daks'>`
- `@daks <https://github.com/daks>`_
- 11
* - :raw-html-m2r:`<img class='float-left rounded-1' src='https://avatars1.githubusercontent.com/u/287147?v=4' width='36' height='36' alt='@techhat'>`
* - :raw-html-m2r:`<img class='float-left rounded-1' src='https://avatars.githubusercontent.com/u/287147?v=4' width='36' height='36' alt='@techhat'>`
- `@techhat <https://github.com/techhat>`_
- 10
* - :raw-html-m2r:`<img class='float-left rounded-1' src='https://avatars2.githubusercontent.com/u/242396?v=4' width='36' height='36' alt='@javierbertoli'>`
- `@javierbertoli <https://github.com/javierbertoli>`_
- 9
* - :raw-html-m2r:`<img class='float-left rounded-1' src='https://avatars0.githubusercontent.com/u/445200?v=4' width='36' height='36' alt='@arthurlogilab'>`
* - :raw-html-m2r:`<img class='float-left rounded-1' src='https://avatars.githubusercontent.com/u/445200?v=4' width='36' height='36' alt='@arthurlogilab'>`
- `@arthurlogilab <https://github.com/arthurlogilab>`_
- 8
* - :raw-html-m2r:`<img class='float-left rounded-1' src='https://avatars1.githubusercontent.com/u/1184479?v=4' width='36' height='36' alt='@cheuschober'>`
* - :raw-html-m2r:`<img class='float-left rounded-1' src='https://avatars.githubusercontent.com/u/1184479?v=4' width='36' height='36' alt='@cheuschober'>`
- `@cheuschober <https://github.com/cheuschober>`_
- 8
* - :raw-html-m2r:`<img class='float-left rounded-1' src='https://avatars2.githubusercontent.com/u/378158?v=4' width='36' height='36' alt='@dseira'>`
* - :raw-html-m2r:`<img class='float-left rounded-1' src='https://avatars.githubusercontent.com/u/378158?v=4' width='36' height='36' alt='@dseira'>`
- `@dseira <https://github.com/dseira>`_
- 8
* - :raw-html-m2r:`<img class='float-left rounded-1' src='https://avatars2.githubusercontent.com/u/941928?v=4' width='36' height='36' alt='@amontalban'>`
* - :raw-html-m2r:`<img class='float-left rounded-1' src='https://avatars.githubusercontent.com/u/941928?v=4' width='36' height='36' alt='@amontalban'>`
- `@amontalban <https://github.com/amontalban>`_
- 7
* - :raw-html-m2r:`<img class='float-left rounded-1' src='https://avatars1.githubusercontent.com/u/528061?v=4' width='36' height='36' alt='@puneetk'>`
* - :raw-html-m2r:`<img class='float-left rounded-1' src='https://avatars.githubusercontent.com/u/528061?v=4' width='36' height='36' alt='@puneetk'>`
- `@puneetk <https://github.com/puneetk>`_
- 7
* - :raw-html-m2r:`<img class='float-left rounded-1' src='https://avatars0.githubusercontent.com/u/6354880?v=4' width='36' height='36' alt='@TaiSHiNet'>`
* - :raw-html-m2r:`<img class='float-left rounded-1' src='https://avatars.githubusercontent.com/u/6354880?v=4' width='36' height='36' alt='@TaiSHiNet'>`
- `@TaiSHiNet <https://github.com/TaiSHiNet>`_
- 6
* - :raw-html-m2r:`<img class='float-left rounded-1' src='https://avatars0.githubusercontent.com/u/745513?v=4' width='36' height='36' alt='@EvaSDK'>`
* - :raw-html-m2r:`<img class='float-left rounded-1' src='https://avatars.githubusercontent.com/u/745513?v=4' width='36' height='36' alt='@EvaSDK'>`
- `@EvaSDK <https://github.com/EvaSDK>`_
- 6
* - :raw-html-m2r:`<img class='float-left rounded-1' src='https://avatars3.githubusercontent.com/u/3280630?v=4' width='36' height='36' alt='@cackovic'>`
* - :raw-html-m2r:`<img class='float-left rounded-1' src='https://avatars.githubusercontent.com/u/3280630?v=4' width='36' height='36' alt='@cackovic'>`
- `@cackovic <https://github.com/cackovic>`_
- 5
* - :raw-html-m2r:`<img class='float-left rounded-1' src='https://avatars1.githubusercontent.com/u/529?v=4' width='36' height='36' alt='@auser'>`
* - :raw-html-m2r:`<img class='float-left rounded-1' src='https://avatars.githubusercontent.com/u/529?v=4' width='36' height='36' alt='@auser'>`
- `@auser <https://github.com/auser>`_
- 5
* - :raw-html-m2r:`<img class='float-left rounded-1' src='https://avatars2.githubusercontent.com/u/3768412?v=4' width='36' height='36' alt='@stp-ip'>`
* - :raw-html-m2r:`<img class='float-left rounded-1' src='https://avatars.githubusercontent.com/u/3768412?v=4' width='36' height='36' alt='@stp-ip'>`
- `@stp-ip <https://github.com/stp-ip>`_
- 5
* - :raw-html-m2r:`<img class='float-left rounded-1' src='https://avatars2.githubusercontent.com/u/1060507?v=4' width='36' height='36' alt='@ahmadsherif'>`
* - :raw-html-m2r:`<img class='float-left rounded-1' src='https://avatars.githubusercontent.com/u/1060507?v=4' width='36' height='36' alt='@ahmadsherif'>`
- `@ahmadsherif <https://github.com/ahmadsherif>`_
- 4
* - :raw-html-m2r:`<img class='float-left rounded-1' src='https://avatars3.githubusercontent.com/u/3433835?v=4' width='36' height='36' alt='@n-rodriguez'>`
* - :raw-html-m2r:`<img class='float-left rounded-1' src='https://avatars.githubusercontent.com/u/3433835?v=4' width='36' height='36' alt='@n-rodriguez'>`
- `@n-rodriguez <https://github.com/n-rodriguez>`_
- 4
* - :raw-html-m2r:`<img class='float-left rounded-1' src='https://avatars3.githubusercontent.com/u/37182?v=4' width='36' height='36' alt='@teepark'>`
* - :raw-html-m2r:`<img class='float-left rounded-1' src='https://avatars.githubusercontent.com/u/37182?v=4' width='36' height='36' alt='@teepark'>`
- `@teepark <https://github.com/teepark>`_
- 4
* - :raw-html-m2r:`<img class='float-left rounded-1' src='https://avatars0.githubusercontent.com/u/4754654?v=4' width='36' height='36' alt='@alinefr'>`
* - :raw-html-m2r:`<img class='float-left rounded-1' src='https://avatars.githubusercontent.com/u/4754654?v=4' width='36' height='36' alt='@alinefr'>`
- `@alinefr <https://github.com/alinefr>`_
- 3
* - :raw-html-m2r:`<img class='float-left rounded-1' src='https://avatars0.githubusercontent.com/u/5412167?v=4' width='36' height='36' alt='@devaos'>`
* - :raw-html-m2r:`<img class='float-left rounded-1' src='https://avatars.githubusercontent.com/u/5412167?v=4' width='36' height='36' alt='@devaos'>`
- `@devaos <https://github.com/devaos>`_
- 3
* - :raw-html-m2r:`<img class='float-left rounded-1' src='https://avatars3.githubusercontent.com/u/637990?v=4' width='36' height='36' alt='@bmwiedemann'>`
* - :raw-html-m2r:`<img class='float-left rounded-1' src='https://avatars.githubusercontent.com/u/637990?v=4' width='36' height='36' alt='@bmwiedemann'>`
- `@bmwiedemann <https://github.com/bmwiedemann>`_
- 3
* - :raw-html-m2r:`<img class='float-left rounded-1' src='https://avatars1.githubusercontent.com/u/328598?v=4' width='36' height='36' alt='@terminalmage'>`
* - :raw-html-m2r:`<img class='float-left rounded-1' src='https://avatars.githubusercontent.com/u/4195158?v=4' width='36' height='36' alt='@dafyddj'>`
- `@dafyddj <https://github.com/dafyddj>`_
- 3
* - :raw-html-m2r:`<img class='float-left rounded-1' src='https://avatars.githubusercontent.com/u/328598?v=4' width='36' height='36' alt='@terminalmage'>`
- `@terminalmage <https://github.com/terminalmage>`_
- 3
* - :raw-html-m2r:`<img class='float-left rounded-1' src='https://avatars0.githubusercontent.com/u/94157?v=4' width='36' height='36' alt='@imran1008'>`
* - :raw-html-m2r:`<img class='float-left rounded-1' src='https://avatars.githubusercontent.com/u/94157?v=4' width='36' height='36' alt='@imran1008'>`
- `@imran1008 <https://github.com/imran1008>`_
- 3
* - :raw-html-m2r:`<img class='float-left rounded-1' src='https://avatars3.githubusercontent.com/u/783794?v=4' width='36' height='36' alt='@morsik'>`
* - :raw-html-m2r:`<img class='float-left rounded-1' src='https://avatars.githubusercontent.com/u/783794?v=4' width='36' height='36' alt='@morsik'>`
- `@morsik <https://github.com/morsik>`_
- 3
* - :raw-html-m2r:`<img class='float-left rounded-1' src='https://avatars3.githubusercontent.com/u/7060082?v=4' width='36' height='36' alt='@msciciel'>`
* - :raw-html-m2r:`<img class='float-left rounded-1' src='https://avatars.githubusercontent.com/u/7060082?v=4' width='36' height='36' alt='@msciciel'>`
- `@msciciel <https://github.com/msciciel>`_
- 3
* - :raw-html-m2r:`<img class='float-left rounded-1' src='https://avatars1.githubusercontent.com/u/8029478?v=4' width='36' height='36' alt='@rfairburn'>`
* - :raw-html-m2r:`<img class='float-left rounded-1' src='https://avatars.githubusercontent.com/u/8029478?v=4' width='36' height='36' alt='@rfairburn'>`
- `@rfairburn <https://github.com/rfairburn>`_
- 3
* - :raw-html-m2r:`<img class='float-left rounded-1' src='https://avatars2.githubusercontent.com/u/50891?v=4' width='36' height='36' alt='@westurner'>`
* - :raw-html-m2r:`<img class='float-left rounded-1' src='https://avatars.githubusercontent.com/u/50891?v=4' width='36' height='36' alt='@westurner'>`
- `@westurner <https://github.com/westurner>`_
- 3
* - :raw-html-m2r:`<img class='float-left rounded-1' src='https://avatars2.githubusercontent.com/u/813115?v=4' width='36' height='36' alt='@chris-sanders'>`
* - :raw-html-m2r:`<img class='float-left rounded-1' src='https://avatars.githubusercontent.com/u/1773291?v=4' width='36' height='36' alt='@toanju'>`
- `@toanju <https://github.com/toanju>`_
- 3
* - :raw-html-m2r:`<img class='float-left rounded-1' src='https://avatars.githubusercontent.com/u/813115?v=4' width='36' height='36' alt='@chris-sanders'>`
- `@chris-sanders <https://github.com/chris-sanders>`_
- 2
* - :raw-html-m2r:`<img class='float-left rounded-1' src='https://avatars2.githubusercontent.com/u/4195158?v=4' width='36' height='36' alt='@dafyddj'>`
- `@dafyddj <https://github.com/dafyddj>`_
- 2
* - :raw-html-m2r:`<img class='float-left rounded-1' src='https://avatars0.githubusercontent.com/u/306240?v=4' width='36' height='36' alt='@UtahDave'>`
* - :raw-html-m2r:`<img class='float-left rounded-1' src='https://avatars.githubusercontent.com/u/306240?v=4' width='36' height='36' alt='@UtahDave'>`
- `@UtahDave <https://github.com/UtahDave>`_
- 2
* - :raw-html-m2r:`<img class='float-left rounded-1' src='https://avatars0.githubusercontent.com/u/51596?v=4' width='36' height='36' alt='@ghtyrant'>`
* - :raw-html-m2r:`<img class='float-left rounded-1' src='https://avatars.githubusercontent.com/u/51596?v=4' width='36' height='36' alt='@ghtyrant'>`
- `@ghtyrant <https://github.com/ghtyrant>`_
- 2
* - :raw-html-m2r:`<img class='float-left rounded-1' src='https://avatars2.githubusercontent.com/u/56635?v=4' width='36' height='36' alt='@pprkut'>`
* - :raw-html-m2r:`<img class='float-left rounded-1' src='https://avatars.githubusercontent.com/u/56635?v=4' width='36' height='36' alt='@pprkut'>`
- `@pprkut <https://github.com/pprkut>`_
- 2
* - :raw-html-m2r:`<img class='float-left rounded-1' src='https://avatars2.githubusercontent.com/u/85002?v=4' width='36' height='36' alt='@jstrunk'>`
* - :raw-html-m2r:`<img class='float-left rounded-1' src='https://avatars.githubusercontent.com/u/85002?v=4' width='36' height='36' alt='@jstrunk'>`
- `@jstrunk <https://github.com/jstrunk>`_
- 2
* - :raw-html-m2r:`<img class='float-left rounded-1' src='https://avatars3.githubusercontent.com/u/5306980?v=4' width='36' height='36' alt='@johnkeates'>`
* - :raw-html-m2r:`<img class='float-left rounded-1' src='https://avatars.githubusercontent.com/u/5306980?v=4' width='36' height='36' alt='@johnkeates'>`
- `@johnkeates <https://github.com/johnkeates>`_
- 2
* - :raw-html-m2r:`<img class='float-left rounded-1' src='https://avatars3.githubusercontent.com/u/2200073?v=4' width='36' height='36' alt='@kmshultz'>`
* - :raw-html-m2r:`<img class='float-left rounded-1' src='https://avatars.githubusercontent.com/u/2200073?v=4' width='36' height='36' alt='@kmshultz'>`
- `@kmshultz <https://github.com/kmshultz>`_
- 2
* - :raw-html-m2r:`<img class='float-left rounded-1' src='https://avatars1.githubusercontent.com/u/11417?v=4' width='36' height='36' alt='@malept'>`
* - :raw-html-m2r:`<img class='float-left rounded-1' src='https://avatars.githubusercontent.com/u/11417?v=4' width='36' height='36' alt='@malept'>`
- `@malept <https://github.com/malept>`_
- 2
* - :raw-html-m2r:`<img class='float-left rounded-1' src='https://avatars2.githubusercontent.com/u/3279679?v=4' width='36' height='36' alt='@meganlkm'>`
* - :raw-html-m2r:`<img class='float-left rounded-1' src='https://avatars.githubusercontent.com/u/3279679?v=4' width='36' height='36' alt='@meganlkm'>`
- `@meganlkm <https://github.com/meganlkm>`_
- 2
* - :raw-html-m2r:`<img class='float-left rounded-1' src='https://avatars2.githubusercontent.com/u/84885?v=4' width='36' height='36' alt='@garrettw'>`
- `@garrettw <https://github.com/garrettw>`_
- 2
* - :raw-html-m2r:`<img class='float-left rounded-1' src='https://avatars1.githubusercontent.com/u/101513?v=4' width='36' height='36' alt='@ErisDS'>`
* - :raw-html-m2r:`<img class='float-left rounded-1' src='https://avatars.githubusercontent.com/u/101513?v=4' width='36' height='36' alt='@ErisDS'>`
- `@ErisDS <https://github.com/ErisDS>`_
- 2
* - :raw-html-m2r:`<img class='float-left rounded-1' src='https://avatars1.githubusercontent.com/u/879922?v=4' width='36' height='36' alt='@myoung34'>`
* - :raw-html-m2r:`<img class='float-left rounded-1' src='https://avatars.githubusercontent.com/u/879922?v=4' width='36' height='36' alt='@myoung34'>`
- `@myoung34 <https://github.com/myoung34>`_
- 2
* - :raw-html-m2r:`<img class='float-left rounded-1' src='https://avatars0.githubusercontent.com/u/46799934?v=4' width='36' height='36' alt='@sticky-note'>`
* - :raw-html-m2r:`<img class='float-left rounded-1' src='https://avatars.githubusercontent.com/u/46799934?v=4' width='36' height='36' alt='@sticky-note'>`
- `@sticky-note <https://github.com/sticky-note>`_
- 2
* - :raw-html-m2r:`<img class='float-left rounded-1' src='https://avatars1.githubusercontent.com/u/1922124?v=4' width='36' height='36' alt='@bebosudo'>`
* - :raw-html-m2r:`<img class='float-left rounded-1' src='https://avatars.githubusercontent.com/u/1922124?v=4' width='36' height='36' alt='@bebosudo'>`
- `@bebosudo <https://github.com/bebosudo>`_
- 1
* - :raw-html-m2r:`<img class='float-left rounded-1' src='https://avatars0.githubusercontent.com/u/8395913?v=4' width='36' height='36' alt='@aanriot'>`
* - :raw-html-m2r:`<img class='float-left rounded-1' src='https://avatars.githubusercontent.com/u/8395913?v=4' width='36' height='36' alt='@aanriot'>`
- `@aanriot <https://github.com/aanriot>`_
- 1
* - :raw-html-m2r:`<img class='float-left rounded-1' src='https://avatars2.githubusercontent.com/u/7460036?v=4' width='36' height='36' alt='@andrew-vant'>`
* - :raw-html-m2r:`<img class='float-left rounded-1' src='https://avatars.githubusercontent.com/u/7460036?v=4' width='36' height='36' alt='@andrew-vant'>`
- `@andrew-vant <https://github.com/andrew-vant>`_
- 1
* - :raw-html-m2r:`<img class='float-left rounded-1' src='https://avatars2.githubusercontent.com/u/2106845?v=4' width='36' height='36' alt='@bemosior'>`
* - :raw-html-m2r:`<img class='float-left rounded-1' src='https://avatars.githubusercontent.com/u/2106845?v=4' width='36' height='36' alt='@bemosior'>`
- `@bemosior <https://github.com/bemosior>`_
- 1
* - :raw-html-m2r:`<img class='float-left rounded-1' src='https://avatars3.githubusercontent.com/u/458548?v=4' width='36' height='36' alt='@SuperTux88'>`
* - :raw-html-m2r:`<img class='float-left rounded-1' src='https://avatars.githubusercontent.com/u/458548?v=4' width='36' height='36' alt='@SuperTux88'>`
- `@SuperTux88 <https://github.com/SuperTux88>`_
- 1
* - :raw-html-m2r:`<img class='float-left rounded-1' src='https://avatars2.githubusercontent.com/u/1079875?v=4' width='36' height='36' alt='@bogdanr'>`
* - :raw-html-m2r:`<img class='float-left rounded-1' src='https://avatars.githubusercontent.com/u/1079875?v=4' width='36' height='36' alt='@bogdanr'>`
- `@bogdanr <https://github.com/bogdanr>`_
- 1
* - :raw-html-m2r:`<img class='float-left rounded-1' src='https://avatars1.githubusercontent.com/u/1435085?v=4' width='36' height='36' alt='@blbradley'>`
* - :raw-html-m2r:`<img class='float-left rounded-1' src='https://avatars.githubusercontent.com/u/1435085?v=4' width='36' height='36' alt='@blbradley'>`
- `@blbradley <https://github.com/blbradley>`_
- 1
* - :raw-html-m2r:`<img class='float-left rounded-1' src='https://avatars3.githubusercontent.com/u/2459661?v=4' width='36' height='36' alt='@CorwinTanner'>`
* - :raw-html-m2r:`<img class='float-left rounded-1' src='https://avatars.githubusercontent.com/u/2459661?v=4' width='36' height='36' alt='@CorwinTanner'>`
- `@CorwinTanner <https://github.com/CorwinTanner>`_
- 1
* - :raw-html-m2r:`<img class='float-left rounded-1' src='https://avatars1.githubusercontent.com/u/1686586?v=4' width='36' height='36' alt='@fayetted'>`
* - :raw-html-m2r:`<img class='float-left rounded-1' src='https://avatars.githubusercontent.com/u/1686586?v=4' width='36' height='36' alt='@fayetted'>`
- `@fayetted <https://github.com/fayetted>`_
- 1
* - :raw-html-m2r:`<img class='float-left rounded-1' src='https://avatars3.githubusercontent.com/u/72727?v=4' width='36' height='36' alt='@czarneckid'>`
* - :raw-html-m2r:`<img class='float-left rounded-1' src='https://avatars.githubusercontent.com/u/1233212?v=4' width='36' height='36' alt='@baby-gnu'>`
- `@baby-gnu <https://github.com/baby-gnu>`_
- 1
* - :raw-html-m2r:`<img class='float-left rounded-1' src='https://avatars.githubusercontent.com/u/72727?v=4' width='36' height='36' alt='@czarneckid'>`
- `@czarneckid <https://github.com/czarneckid>`_
- 1
* - :raw-html-m2r:`<img class='float-left rounded-1' src='https://avatars2.githubusercontent.com/u/983?v=4' width='36' height='36' alt='@statik'>`
* - :raw-html-m2r:`<img class='float-left rounded-1' src='https://avatars.githubusercontent.com/u/983?v=4' width='36' height='36' alt='@statik'>`
- `@statik <https://github.com/statik>`_
- 1
* - :raw-html-m2r:`<img class='float-left rounded-1' src='https://avatars0.githubusercontent.com/u/48329?v=4' width='36' height='36' alt='@ekristen'>`
* - :raw-html-m2r:`<img class='float-left rounded-1' src='https://avatars.githubusercontent.com/u/48329?v=4' width='36' height='36' alt='@ekristen'>`
- `@ekristen <https://github.com/ekristen>`_
- 1
* - :raw-html-m2r:`<img class='float-left rounded-1' src='https://avatars0.githubusercontent.com/u/75496?v=4' width='36' height='36' alt='@jeduardo'>`
* - :raw-html-m2r:`<img class='float-left rounded-1' src='https://avatars.githubusercontent.com/u/84885?v=4' width='36' height='36' alt='@garrettw'>`
- `@garrettw <https://github.com/garrettw>`_
- 1
* - :raw-html-m2r:`<img class='float-left rounded-1' src='https://avatars.githubusercontent.com/u/75496?v=4' width='36' height='36' alt='@jeduardo'>`
- `@jeduardo <https://github.com/jeduardo>`_
- 1
* - :raw-html-m2r:`<img class='float-left rounded-1' src='https://avatars3.githubusercontent.com/u/668449?v=4' width='36' height='36' alt='@stromnet'>`
* - :raw-html-m2r:`<img class='float-left rounded-1' src='https://avatars.githubusercontent.com/u/668449?v=4' width='36' height='36' alt='@stromnet'>`
- `@stromnet <https://github.com/stromnet>`_
- 1
* - :raw-html-m2r:`<img class='float-left rounded-1' src='https://avatars0.githubusercontent.com/u/744549?v=4' width='36' height='36' alt='@bsdlp'>`
* - :raw-html-m2r:`<img class='float-left rounded-1' src='https://avatars.githubusercontent.com/u/744549?v=4' width='36' height='36' alt='@bsdlp'>`
- `@bsdlp <https://github.com/bsdlp>`_
- 1
* - :raw-html-m2r:`<img class='float-left rounded-1' src='https://avatars3.githubusercontent.com/u/5395035?v=4' width='36' height='36' alt='@MEschenbacher'>`
* - :raw-html-m2r:`<img class='float-left rounded-1' src='https://avatars.githubusercontent.com/u/350294?v=4' width='36' height='36' alt='@anderbubble'>`
- `@anderbubble <https://github.com/anderbubble>`_
- 1
* - :raw-html-m2r:`<img class='float-left rounded-1' src='https://avatars.githubusercontent.com/u/5395035?v=4' width='36' height='36' alt='@MEschenbacher'>`
- `@MEschenbacher <https://github.com/MEschenbacher>`_
- 1
* - :raw-html-m2r:`<img class='float-left rounded-1' src='https://avatars1.githubusercontent.com/u/225115?v=4' width='36' height='36' alt='@renich'>`
* - :raw-html-m2r:`<img class='float-left rounded-1' src='https://avatars.githubusercontent.com/u/225115?v=4' width='36' height='36' alt='@renich'>`
- `@renich <https://github.com/renich>`_
- 1
* - :raw-html-m2r:`<img class='float-left rounded-1' src='https://avatars2.githubusercontent.com/u/62993?v=4' width='36' height='36' alt='@outime'>`
* - :raw-html-m2r:`<img class='float-left rounded-1' src='https://avatars.githubusercontent.com/u/62993?v=4' width='36' height='36' alt='@outime'>`
- `@outime <https://github.com/outime>`_
- 1
* - :raw-html-m2r:`<img class='float-left rounded-1' src='https://avatars0.githubusercontent.com/u/991850?v=4' width='36' height='36' alt='@scub'>`
* - :raw-html-m2r:`<img class='float-left rounded-1' src='https://avatars.githubusercontent.com/u/991850?v=4' width='36' height='36' alt='@scub'>`
- `@scub <https://github.com/scub>`_
- 1
* - :raw-html-m2r:`<img class='float-left rounded-1' src='https://avatars0.githubusercontent.com/u/507599?v=4' width='36' height='36' alt='@thatch45'>`
* - :raw-html-m2r:`<img class='float-left rounded-1' src='https://avatars.githubusercontent.com/u/507599?v=4' width='36' height='36' alt='@thatch45'>`
- `@thatch45 <https://github.com/thatch45>`_
- 1
* - :raw-html-m2r:`<img class='float-left rounded-1' src='https://avatars3.githubusercontent.com/u/479088?v=4' width='36' height='36' alt='@blarghmatey'>`
* - :raw-html-m2r:`<img class='float-left rounded-1' src='https://avatars.githubusercontent.com/u/479088?v=4' width='36' height='36' alt='@blarghmatey'>`
- `@blarghmatey <https://github.com/blarghmatey>`_
- 1
* - :raw-html-m2r:`<img class='float-left rounded-1' src='https://avatars1.githubusercontent.com/u/117961?v=4' width='36' height='36' alt='@babilen5'>`
* - :raw-html-m2r:`<img class='float-left rounded-1' src='https://avatars.githubusercontent.com/u/117961?v=4' width='36' height='36' alt='@babilen5'>`
- `@babilen5 <https://github.com/babilen5>`_
- 1
* - :raw-html-m2r:`<img class='float-left rounded-1' src='https://avatars0.githubusercontent.com/u/228723?v=4' width='36' height='36' alt='@abednarik'>`
* - :raw-html-m2r:`<img class='float-left rounded-1' src='https://avatars.githubusercontent.com/u/228723?v=4' width='36' height='36' alt='@abednarik'>`
- `@abednarik <https://github.com/abednarik>`_
- 1
* - :raw-html-m2r:`<img class='float-left rounded-1' src='https://avatars3.githubusercontent.com/u/19428823?v=4' width='36' height='36' alt='@francesco-a'>`
* - :raw-html-m2r:`<img class='float-left rounded-1' src='https://avatars.githubusercontent.com/u/19428823?v=4' width='36' height='36' alt='@francesco-a'>`
- `@francesco-a <https://github.com/francesco-a>`_
- 1
* - :raw-html-m2r:`<img class='float-left rounded-1' src='https://avatars3.githubusercontent.com/u/1068764?v=4' width='36' height='36' alt='@oboyle'>`
* - :raw-html-m2r:`<img class='float-left rounded-1' src='https://avatars.githubusercontent.com/u/1068764?v=4' width='36' height='36' alt='@oboyle'>`
- `@oboyle <https://github.com/oboyle>`_
- 1
* - :raw-html-m2r:`<img class='float-left rounded-1' src='https://avatars1.githubusercontent.com/u/542613?v=4' width='36' height='36' alt='@bersace'>`
* - :raw-html-m2r:`<img class='float-left rounded-1' src='https://avatars.githubusercontent.com/u/542613?v=4' width='36' height='36' alt='@bersace'>`
- `@bersace <https://github.com/bersace>`_
- 1


----

Auto-generated by a `forked version <https://github.com/myii/maintainer>`_ of `gaocegege/maintainer <https://github.com/gaocegege/maintainer>`_ on 2021-01-04.
Auto-generated by a `forked version <https://github.com/myii/maintainer>`_ of `gaocegege/maintainer <https://github.com/gaocegege/maintainer>`_ on 2021-06-15.

+ 155
- 0
docs/CHANGELOG.rst Visa fil

@@ -2,6 +2,161 @@
Changelog
=========

`2.7.4 <https://github.com/saltstack-formulas/nginx-formula/compare/v2.7.3...v2.7.4>`_ (2021-06-15)
-------------------------------------------------------------------------------------------------------

Bug Fixes
^^^^^^^^^


* **servers:** include main config file watch in extend (\ `00387e7 <https://github.com/saltstack-formulas/nginx-formula/commit/00387e7cbd90ceb5496df5cf9bce8f7dae25b056>`_\ )

`2.7.3 <https://github.com/saltstack-formulas/nginx-formula/compare/v2.7.2...v2.7.3>`_ (2021-06-14)
-------------------------------------------------------------------------------------------------------

Tests
^^^^^


* **snippets:** add tests for snippets includes (\ `1c83b6d <https://github.com/saltstack-formulas/nginx-formula/commit/1c83b6d5fa93079476ca9e8baa1ccd9d44e5237f>`_\ ), closes `#275 <https://github.com/saltstack-formulas/nginx-formula/issues/275>`_ `#274 <https://github.com/saltstack-formulas/nginx-formula/issues/274>`_

`2.7.2 <https://github.com/saltstack-formulas/nginx-formula/compare/v2.7.1...v2.7.2>`_ (2021-06-14)
-------------------------------------------------------------------------------------------------------

Bug Fixes
^^^^^^^^^


* **certificates:** ensure ``openssl`` installed before ``cmd.run`` (\ `0cd7c7b <https://github.com/saltstack-formulas/nginx-formula/commit/0cd7c7b20528ce9fbd4f8991a365415a3093546d>`_\ ), closes `/gitlab.com/saltstack-formulas/nginx-formula/-/jobs/1345325819#L2830 <https://github.com//gitlab.com/saltstack-formulas/nginx-formula/-/jobs/1345325819/issues/L2830>`_
* **snippets:** ignore servers or snippets when undefined (\ `6cb486d <https://github.com/saltstack-formulas/nginx-formula/commit/6cb486dbd290c91bbdbf00fd0061efaedbef4dea>`_\ ), closes `#274 <https://github.com/saltstack-formulas/nginx-formula/issues/274>`_

`2.7.1 <https://github.com/saltstack-formulas/nginx-formula/compare/v2.7.0...v2.7.1>`_ (2021-05-12)
-------------------------------------------------------------------------------------------------------

Bug Fixes
^^^^^^^^^


* **servers:** wrong conditional specification (\ `494b2fb <https://github.com/saltstack-formulas/nginx-formula/commit/494b2fbea490fded02cecd4d3e3e0372476548fb>`_\ )

Continuous Integration
^^^^^^^^^^^^^^^^^^^^^^


* add ``arch-master`` to matrix and update ``.travis.yml`` [skip ci] (\ `4697152 <https://github.com/saltstack-formulas/nginx-formula/commit/46971528d7a7e23241564da146ee8d28b7d2eecc>`_\ )

`2.7.0 <https://github.com/saltstack-formulas/nginx-formula/compare/v2.6.3...v2.7.0>`_ (2021-04-28)
-------------------------------------------------------------------------------------------------------

Continuous Integration
^^^^^^^^^^^^^^^^^^^^^^


* **kitchen+gitlab:** adjust matrix to add ``3003`` [skip ci] (\ `46faf4e <https://github.com/saltstack-formulas/nginx-formula/commit/46faf4e24b39f7d4fd138126dbe5eb6a06eb5b67>`_\ )
* **vagrant:** add FreeBSD 13.0 [skip ci] (\ `b41062e <https://github.com/saltstack-formulas/nginx-formula/commit/b41062e3b19c4c109198bd95c53158d871bbff85>`_\ )
* **vagrant:** use pre-salted boxes & conditional local settings [skip ci] (\ `b9e9cd3 <https://github.com/saltstack-formulas/nginx-formula/commit/b9e9cd38e6d29b7eb4cd8ae74a1bdf901959dee3>`_\ )

Documentation
^^^^^^^^^^^^^


* **readme:** add ``Testing with Vagrant`` section [skip ci] (\ `5727848 <https://github.com/saltstack-formulas/nginx-formula/commit/57278481de489441a5c04aee544962212e91c5af>`_\ )

Features
^^^^^^^^


* **servers_config:** add require statement to manage dependencies (\ `622d22f <https://github.com/saltstack-formulas/nginx-formula/commit/622d22f9711085aeca19f3907e22e87c6b21b8d0>`_\ )

Tests
^^^^^


* **requires:** verify dependencies in vhosts (\ `6478143 <https://github.com/saltstack-formulas/nginx-formula/commit/64781431b9187d392f56ce5461c3b1a9c2944f90>`_\ )

`2.6.3 <https://github.com/saltstack-formulas/nginx-formula/compare/v2.6.2...v2.6.3>`_ (2021-04-03)
-------------------------------------------------------------------------------------------------------

Bug Fixes
^^^^^^^^^


* **freebsd:** add ``openssl`` pkg and update all ``default`` tests (\ `4cd351a <https://github.com/saltstack-formulas/nginx-formula/commit/4cd351adbc184b938b0d0cf587419bab5b39a7d3>`_\ )

Continuous Integration
^^^^^^^^^^^^^^^^^^^^^^


* enable Vagrant-based testing using GitHub Actions (\ `c79ce9a <https://github.com/saltstack-formulas/nginx-formula/commit/c79ce9a9ae30e889ab925bb0398008b434bc9b0a>`_\ )

`2.6.2 <https://github.com/saltstack-formulas/nginx-formula/compare/v2.6.1...v2.6.2>`_ (2021-03-30)
-------------------------------------------------------------------------------------------------------

Bug Fixes
^^^^^^^^^


* **servers_config:** fixup 05994e1 (\ `c03729a <https://github.com/saltstack-formulas/nginx-formula/commit/c03729ae326876a20cb22c346f9d4cd96418af9a>`_\ )

`2.6.1 <https://github.com/saltstack-formulas/nginx-formula/compare/v2.6.0...v2.6.1>`_ (2021-03-29)
-------------------------------------------------------------------------------------------------------

Bug Fixes
^^^^^^^^^


* **servers_config:** remove service depedency (\ `05994e1 <https://github.com/saltstack-formulas/nginx-formula/commit/05994e1b174ccdf3ff4a444f81314ad925fa478d>`_\ )

Code Refactoring
^^^^^^^^^^^^^^^^


* **servers_config:** remove unused loop (\ `3825557 <https://github.com/saltstack-formulas/nginx-formula/commit/3825557070a18db4828cc634dd036a428f8a9836>`_\ )

Continuous Integration
^^^^^^^^^^^^^^^^^^^^^^


* **kitchen+ci:** include ``passenger`` suite [skip ci] (\ `0bbe686 <https://github.com/saltstack-formulas/nginx-formula/commit/0bbe68619fdf3791e6202ce3f17ca03efc4441c1>`_\ )

Tests
^^^^^


* standardise use of ``share`` suite & ``_mapdata`` state [skip ci] (\ `8ea3c82 <https://github.com/saltstack-formulas/nginx-formula/commit/8ea3c82be3fccb2bad8bac566f210454549d141e>`_\ )

`2.6.0 <https://github.com/saltstack-formulas/nginx-formula/compare/v2.5.0...v2.6.0>`_ (2021-03-11)
-------------------------------------------------------------------------------------------------------

Bug Fixes
^^^^^^^^^


* **passenger:** various fixes (\ `7271c9d <https://github.com/saltstack-formulas/nginx-formula/commit/7271c9d16c8218244ae5ef0b188b7f9f4a414074>`_\ )
* **pkg:** add inline EPEL repo configuration for Amazon Linux 2 (\ `ae6375c <https://github.com/saltstack-formulas/nginx-formula/commit/ae6375ccccd56a506ee28babbeabf351112a06de>`_\ )

Continuous Integration
^^^^^^^^^^^^^^^^^^^^^^


* **gemfile+lock:** use ``ssf`` customised ``kitchen-docker`` repo [skip ci] (\ `123d13e <https://github.com/saltstack-formulas/nginx-formula/commit/123d13e2f483c203cbfc1366b36a30e1732603e1>`_\ )
* **kitchen+ci:** make rubocop happy [skip ci] (\ `eedfc56 <https://github.com/saltstack-formulas/nginx-formula/commit/eedfc56b41b673e196029274048670e89e55a694>`_\ )
* **kitchen+ci:** use latest pre-salted images (after CVE) [skip ci] (\ `63d32a4 <https://github.com/saltstack-formulas/nginx-formula/commit/63d32a40b13ca2c77bb83cceba620218617aab6a>`_\ )
* **kitchen+gitlab-ci:** use latest pre-salted images [skip ci] (\ `b4411c6 <https://github.com/saltstack-formulas/nginx-formula/commit/b4411c61d3352ecb9775197f991f5f33996730dc>`_\ )
* **pre-commit:** update hook for ``rubocop`` [skip ci] (\ `2a23743 <https://github.com/saltstack-formulas/nginx-formula/commit/2a23743fca8fd54b2a18dc2a07d0daa8142c0289>`_\ )

Features
^^^^^^^^


* **config:** validate config before applying (\ `b396b24 <https://github.com/saltstack-formulas/nginx-formula/commit/b396b24fe456de7001b2cc013814ada189351e6f>`_\ )

Tests
^^^^^


* **config:** fix for Amazon Linux 2 & Oracle Linux 7/8 (\ `ab39c8f <https://github.com/saltstack-formulas/nginx-formula/commit/ab39c8f7c3c9bf5dbd4436cad8ccce21263fe646>`_\ )

`2.5.0 <https://github.com/saltstack-formulas/nginx-formula/compare/v2.4.1...v2.5.0>`_ (2021-01-04)
-------------------------------------------------------------------------------------------------------


+ 62
- 0
docs/README.rst Visa fil

@@ -169,3 +169,65 @@ Runs all of the stages above in one go: i.e. ``destroy`` + ``converge`` + ``veri
^^^^^^^^^^^^^^^^^^^^^

Gives you SSH access to the instance for manual testing.

Testing with Vagrant
--------------------

Windows/FreeBSD/OpenBSD testing is done with ``kitchen-salt``.

Requirements
^^^^^^^^^^^^

* Ruby
* Virtualbox
* Vagrant

Setup
^^^^^

.. code-block:: bash

$ gem install bundler
$ bundle install --with=vagrant
$ bin/kitchen test [platform]

Where ``[platform]`` is the platform name defined in ``kitchen.vagrant.yml``,
e.g. ``windows-81-latest-py3``.

Note
^^^^

When testing using Vagrant you must set the environment variable ``KITCHEN_LOCAL_YAML`` to ``kitchen.vagrant.yml``. For example:

.. code-block:: bash

$ KITCHEN_LOCAL_YAML=kitchen.vagrant.yml bin/kitchen test # Alternatively,
$ export KITCHEN_LOCAL_YAML=kitchen.vagrant.yml
$ bin/kitchen test

Then run the following commands as needed.

``bin/kitchen converge``
^^^^^^^^^^^^^^^^^^^^^^^^

Creates the Vagrant instance and runs the ``nginx`` main state, ready for testing.

``bin/kitchen verify``
^^^^^^^^^^^^^^^^^^^^^^

Runs the ``inspec`` tests on the actual instance.

``bin/kitchen destroy``
^^^^^^^^^^^^^^^^^^^^^^^

Removes the Vagrant instance.

``bin/kitchen test``
^^^^^^^^^^^^^^^^^^^^

Runs all of the stages above in one go: i.e. ``destroy`` + ``converge`` + ``verify`` + ``destroy``.

``bin/kitchen login``
^^^^^^^^^^^^^^^^^^^^^

Gives you RDP/SSH access to the instance for manual testing.

+ 40
- 0
kitchen.vagrant.yml Visa fil

@@ -0,0 +1,40 @@
# -*- coding: utf-8 -*-
# vim: ft=yaml
---
driver:
name: vagrant
cache_directory: false
customize:
usbxhci: 'off'
gui: false
ssh:
shell: /bin/sh
<% unless ENV['CI'] %>
linked_clone: true
synced_folders:
- - '.kitchen/kitchen-vagrant/%{instance_name}/vagrant'
- '/vagrant'
- 'create: true, disabled: false'
<% end %>

platforms:
- name: freebsd-130-master-py3
driver:
box: myii/freebsd-13.0-master-py3
synced_folders: [] # https://bugs.freebsd.org/bugzilla/show_bug.cgi?id=255208
- name: freebsd-122-master-py3
driver:
box: myii/freebsd-12.2-master-py3
- name: freebsd-114-master-py3
driver:
box: myii/freebsd-11.4-master-py3
- name: freebsd-130-3002-6-py3
driver:
box: myii/freebsd-13.0-3002.6-py3
synced_folders: [] # https://bugs.freebsd.org/bugzilla/show_bug.cgi?id=255208
- name: freebsd-122-3002-6-py3
driver:
box: myii/freebsd-12.2-3002.6-py3
- name: freebsd-114-3002-6-py3
driver:
box: myii/freebsd-11.4-3002.6-py3

+ 385
- 60
kitchen.yml Visa fil

@@ -8,128 +8,384 @@ driver:
privileged: true
run_command: /lib/systemd/systemd

# 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: 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
- name: almalinux-8-tiamat-py3
driver:
image: saltimages/salt-tiamat-py3:almalinux-8
- name: rockylinux-8-tiamat-py3
driver:
image: saltimages/salt-tiamat-py3:rockylinux-8

## 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: centos-8-master-py3
driver:
image: saltimages/salt-master-py3:centos-8
- name: fedora-31-master-py3
- name: centos-7-master-py3
driver:
image: saltimages/salt-master-py3:centos-7
- name: fedora-34-master-py3
driver:
image: saltimages/salt-master-py3:fedora-34
- name: fedora-33-master-py3
driver:
image: saltimages/salt-master-py3:fedora-31
- name: opensuse-leap-151-master-py3
image: saltimages/salt-master-py3:fedora-33
- name: opensuse-leap-153-master-py3
driver:
image: netmanagers/salt-master-py3:opensuse-leap-15.1
image: saltimages/salt-master-py3:opensuse-leap-15.3
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.3`:
# => SCP did not finish successfully (255): (Net::SCP::Error)
transport:
max_ssh_sessions: 1
- name: opensuse-leap-152-master-py3
driver:
image: saltimages/salt-master-py3:opensuse-leap-15.2
run_command: /usr/lib/systemd/systemd
# 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: opensuse-tmbl-latest-master-py3
driver:
image: saltimages/salt-master-py3:opensuse-tumbleweed-latest
run_command: /usr/lib/systemd/systemd
# Workaround to avoid intermittent failures on `opensuse-tumbleweed`:
# => 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: oraclelinux-7-master-py3
driver:
image: saltimages/salt-master-py3:oraclelinux-7
- name: arch-base-latest-master-py3
driver:
image: saltimages/salt-master-py3:arch-base-latest
run_command: /usr/lib/systemd/systemd
- 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
- name: almalinux-8-master-py3
driver:
image: saltimages/salt-master-py3:almalinux-8
- name: rockylinux-8-master-py3
driver:
image: saltimages/salt-master-py3:rockylinux-8

## SALT `2019.2`
- name: debian-10-2019-2-py3
## SALT `3003.1`
- name: debian-10-3003-1-py3
driver:
image: saltimages/salt-3003.1-py3:debian-10
- name: debian-9-3003-1-py3
driver:
image: saltimages/salt-3003.1-py3:debian-9
- name: ubuntu-2004-3003-1-py3
driver:
image: saltimages/salt-3003.1-py3:ubuntu-20.04
- name: ubuntu-1804-3003-1-py3
driver:
image: saltimages/salt-3003.1-py3:ubuntu-18.04
- name: centos-8-3003-1-py3
driver:
image: saltimages/salt-3003.1-py3:centos-8
- name: centos-7-3003-1-py3
driver:
image: saltimages/salt-2019.2-py3:debian-10
- name: debian-9-2019-2-py3
image: saltimages/salt-3003.1-py3:centos-7
- name: fedora-34-3003-1-py3
driver:
image: saltimages/salt-2019.2-py3:debian-9
- name: ubuntu-1804-2019-2-py3
image: saltimages/salt-3003.1-py3:fedora-34
- name: fedora-33-3003-1-py3
driver:
image: saltimages/salt-2019.2-py3:ubuntu-18.04
- name: centos-8-2019-2-py3
image: saltimages/salt-3003.1-py3:fedora-33
- name: opensuse-leap-153-3003-1-py3
driver:
image: saltimages/salt-2019.2-py3:centos-8
- name: fedora-31-2019-2-py3
image: saltimages/salt-3003.1-py3:opensuse-leap-15.3
run_command: /usr/lib/systemd/systemd
# Workaround to avoid intermittent failures on `opensuse-leap-15.3`:
# => SCP did not finish successfully (255): (Net::SCP::Error)
transport:
max_ssh_sessions: 1
- name: opensuse-leap-152-3003-1-py3
driver:
image: saltimages/salt-2019.2-py3:fedora-31
- name: opensuse-leap-151-2019-2-py3
image: saltimages/salt-3003.1-py3:opensuse-leap-15.2
run_command: /usr/lib/systemd/systemd
# 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: opensuse-tmbl-latest-3003-1-py3
driver:
image: netmanagers/salt-2019.2-py3:opensuse-leap-15.1
image: saltimages/salt-3003.1-py3:opensuse-tumbleweed-latest
run_command: /usr/lib/systemd/systemd
# Workaround to avoid intermittent failures on `opensuse-leap-15.1`:
# Workaround to avoid intermittent failures on `opensuse-tumbleweed`:
# => SCP did not finish successfully (255): (Net::SCP::Error)
transport:
max_ssh_sessions: 1
- name: centos-7-2019-2-py2
- name: amazonlinux-2-3003-1-py3
driver:
image: netmanagers/salt-2019.2-py2:centos-7
- name: amazonlinux-2-2019-2-py3
image: saltimages/salt-3003.1-py3:amazonlinux-2
- name: oraclelinux-8-3003-1-py3
driver:
image: saltimages/salt-2019.2-py3:amazonlinux-2
- name: arch-base-latest-2019-2-py2
image: saltimages/salt-3003.1-py3:oraclelinux-8
- name: oraclelinux-7-3003-1-py3
driver:
image: saltimages/salt-2019.2-py2:arch-base-latest
image: saltimages/salt-3003.1-py3:oraclelinux-7
- name: arch-base-latest-3003-1-py3
driver:
image: saltimages/salt-3003.1-py3:arch-base-latest
run_command: /usr/lib/systemd/systemd
- name: gentoo-stage3-latest-3003-1-py3
driver:
image: saltimages/salt-3003.1-py3:gentoo-stage3-latest
run_command: /sbin/init
- name: gentoo-stage3-systemd-3003-1-py3
driver:
image: saltimages/salt-3003.1-py3:gentoo-stage3-systemd

## SALT `2018.3`
- name: fedora-30-2018-3-py3
## SALT `3002.6`
- name: debian-10-3002-6-py3
driver:
image: saltimages/salt-3002.6-py3:debian-10
- name: debian-9-3002-6-py3
driver:
image: saltimages/salt-3002.6-py3:debian-9
- name: ubuntu-2004-3002-6-py3
driver:
image: saltimages/salt-3002.6-py3:ubuntu-20.04
- name: ubuntu-1804-3002-6-py3
driver:
image: saltimages/salt-3002.6-py3:ubuntu-18.04
- name: centos-8-3002-6-py3
driver:
image: netmanagers/salt-2018.3-py3:fedora-30
- name: debian-9-2018-3-py2
image: saltimages/salt-3002.6-py3:centos-8
- name: centos-7-3002-6-py3
driver:
image: netmanagers/salt-2018.3-py2:debian-9
- name: ubuntu-1604-2018-3-py2
image: saltimages/salt-3002.6-py3:centos-7
- name: fedora-34-3002-6-py3
driver:
image: netmanagers/salt-2018.3-py2:ubuntu-16.04
- name: centos-7-2018-3-py2
image: saltimages/salt-3002.6-py3:fedora-34
- name: fedora-33-3002-6-py3
driver:
image: netmanagers/salt-2018.3-py2:centos-7
- name: opensuse-leap-151-2018-3-py2
image: saltimages/salt-3002.6-py3:fedora-33
- name: amazonlinux-2-3002-6-py3
driver:
image: netmanagers/salt-2018.3-py2:opensuse-leap-15.1
image: saltimages/salt-3002.6-py3:amazonlinux-2
- name: oraclelinux-8-3002-6-py3
driver:
image: saltimages/salt-3002.6-py3:oraclelinux-8
- name: oraclelinux-7-3002-6-py3
driver:
image: saltimages/salt-3002.6-py3:oraclelinux-7
- name: arch-base-latest-3002-6-py3
driver:
image: saltimages/salt-3002.6-py3:arch-base-latest
run_command: /usr/lib/systemd/systemd
# Workaround to avoid intermittent failures on `opensuse-leap-15.1`:
- name: gentoo-stage3-latest-3002-6-py3
driver:
image: saltimages/salt-3002.6-py3:gentoo-stage3-latest
run_command: /sbin/init
- name: gentoo-stage3-systemd-3002-6-py3
driver:
image: saltimages/salt-3002.6-py3:gentoo-stage3-systemd

## SALT `3002.2`
- name: opensuse-leap-153-3002-2-py3
driver:
image: saltimages/salt-3002.2-py3:opensuse-leap-15.3
run_command: /usr/lib/systemd/systemd
# Workaround to avoid intermittent failures on `opensuse-leap-15.3`:
# => SCP did not finish successfully (255): (Net::SCP::Error)
transport:
max_ssh_sessions: 1
- name: amazonlinux-1-2018-3-py2
- name: opensuse-leap-152-3002-2-py3
driver:
image: netmanagers/salt-2018.3-py2:amazonlinux-1
run_command: /sbin/init
- name: arch-base-latest-2018-3-py2
image: saltimages/salt-3002.2-py3:opensuse-leap-15.2
run_command: /usr/lib/systemd/systemd
# 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: opensuse-tmbl-latest-3002-2-py3
driver:
image: netmanagers/salt-2018.3-py2:arch-base-latest
image: saltimages/salt-3002.2-py3:opensuse-tumbleweed-latest
run_command: /usr/lib/systemd/systemd
# Workaround to avoid intermittent failures on `opensuse-tumbleweed`:
# => SCP did not finish successfully (255): (Net::SCP::Error)
transport:
max_ssh_sessions: 1

## SALT `2017.7`
- name: debian-8-2017-7-py2
## SALT `3001.7`
- name: debian-10-3001-7-py3
driver:
image: saltimages/salt-3001.7-py3:debian-10
- name: debian-9-3001-7-py3
driver:
image: saltimages/salt-3001.7-py3:debian-9
- name: ubuntu-2004-3001-7-py3
driver:
image: saltimages/salt-3001.7-py3:ubuntu-20.04
- name: ubuntu-1804-3001-7-py3
driver:
image: saltimages/salt-3001.7-py3:ubuntu-18.04
- name: centos-8-3001-7-py3
driver:
image: saltimages/salt-3001.7-py3:centos-8
- name: centos-7-3001-7-py3
driver:
image: saltimages/salt-3001.7-py3:centos-7
- name: fedora-34-3001-7-py3
driver:
image: saltimages/salt-3001.7-py3:fedora-34
- name: fedora-33-3001-7-py3
driver:
image: saltimages/salt-3001.7-py3:fedora-33
- name: opensuse-leap-153-3001-7-py3
driver:
image: saltimages/salt-3001.7-py3:opensuse-leap-15.3
run_command: /usr/lib/systemd/systemd
# Workaround to avoid intermittent failures on `opensuse-leap-15.3`:
# => SCP did not finish successfully (255): (Net::SCP::Error)
transport:
max_ssh_sessions: 1
- name: opensuse-leap-152-3001-7-py3
driver:
image: saltimages/salt-3001.7-py3:opensuse-leap-15.2
run_command: /usr/lib/systemd/systemd
# 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: opensuse-tmbl-latest-3001-7-py3
driver:
image: saltimages/salt-3001.7-py3:opensuse-tumbleweed-latest
run_command: /usr/lib/systemd/systemd
# Workaround to avoid intermittent failures on `opensuse-tumbleweed`:
# => SCP did not finish successfully (255): (Net::SCP::Error)
transport:
max_ssh_sessions: 1
- name: amazonlinux-2-3001-7-py3
driver:
image: netmanagers/salt-2017.7-py2:debian-8
- name: ubuntu-1604-2017-7-py2
image: saltimages/salt-3001.7-py3:amazonlinux-2
- name: oraclelinux-8-3001-7-py3
driver:
image: netmanagers/salt-2017.7-py2:ubuntu-16.04
- name: centos-6-2017-7-py2
image: saltimages/salt-3001.7-py3:oraclelinux-8
- name: oraclelinux-7-3001-7-py3
driver:
image: netmanagers/salt-2017.7-py2:centos-6
image: saltimages/salt-3001.7-py3:oraclelinux-7
- name: arch-base-latest-3001-7-py3
driver:
image: saltimages/salt-3001.7-py3:arch-base-latest
run_command: /usr/lib/systemd/systemd
- name: gentoo-stage3-latest-3001-7-py3
driver:
image: saltimages/salt-3001.7-py3:gentoo-stage3-latest
run_command: /sbin/init
- name: fedora-30-2017-7-py2
- name: gentoo-stage3-systemd-3001-7-py3
driver:
image: saltimages/salt-3001.7-py3:gentoo-stage3-systemd

## SALT `3000.9`
- name: debian-10-3000-9-py3
driver:
image: saltimages/salt-3000.9-py3:debian-10
- name: debian-9-3000-9-py3
driver:
image: saltimages/salt-3000.9-py3:debian-9
- name: ubuntu-1804-3000-9-py3
driver:
image: saltimages/salt-3000.9-py3:ubuntu-18.04
- name: centos-8-3000-9-py3
driver:
image: netmanagers/salt-2017.7-py2:fedora-30
- name: opensuse-leap-151-2017-7-py2
image: saltimages/salt-3000.9-py3:centos-8
- name: centos-7-3000-9-py3
driver:
image: netmanagers/salt-2017.7-py2:opensuse-leap-15.1
image: saltimages/salt-3000.9-py3:centos-7
- name: opensuse-leap-153-3000-9-py3
driver:
image: saltimages/salt-3000.9-py3:opensuse-leap-15.3
run_command: /usr/lib/systemd/systemd
# Workaround to avoid intermittent failures on `opensuse-leap-15.3`:
# => SCP did not finish successfully (255): (Net::SCP::Error)
transport:
max_ssh_sessions: 1
- name: opensuse-leap-152-3000-9-py3
driver:
image: saltimages/salt-3000.9-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-9-py3
driver:
image: saltimages/salt-3000.9-py3:amazonlinux-2
- name: oraclelinux-8-3000-9-py3
driver:
image: saltimages/salt-3000.9-py3:oraclelinux-8
- name: oraclelinux-7-3000-9-py3
driver:
image: netmanagers/salt-2017.7-py2:amazonlinux-1
image: saltimages/salt-3000.9-py3:oraclelinux-7
- name: gentoo-stage3-latest-3000-9-py3
driver:
image: saltimages/salt-3000.9-py3:gentoo-stage3-latest
run_command: /sbin/init
- name: arch-base-latest-2017-7-py2
- name: gentoo-stage3-systemd-3000-9-py3
driver:
image: saltimages/salt-3000.9-py3:gentoo-stage3-systemd
- name: ubuntu-1804-3000-9-py2
driver:
image: netmanagers/salt-2017.7-py2:arch-base-latest
image: saltimages/salt-3000.9-py2:ubuntu-18.04
- name: arch-base-latest-3000-9-py2
driver:
image: saltimages/salt-3000.9-py2:arch-base-latest
run_command: /usr/lib/systemd/systemd

provisioner:
@@ -153,9 +409,14 @@ verifier:
suites:
- name: default
provisioner:
dependencies:
- name: test_dep
path: test/salt/default/states
state_top:
base:
'*':
- test_dep.create_dependency_file
- nginx._mapdata
- nginx
pillars:
top.sls:
@@ -167,3 +428,67 @@ suites:
verifier:
inspec_tests:
- path: test/integration/default
- name: passenger
includes:
- debian-10-tiamat-py3
- debian-9-tiamat-py3
- ubuntu-2004-tiamat-py3
- ubuntu-1804-tiamat-py3
- centos-8-tiamat-py3
- centos-7-tiamat-py3
- oraclelinux-8-tiamat-py3
- almalinux-8-tiamat-py3
- rockylinux-8-tiamat-py3
- debian-10-master-py3
- debian-9-master-py3
- ubuntu-2004-master-py3
- ubuntu-1804-master-py3
- centos-8-master-py3
- centos-7-master-py3
- oraclelinux-8-master-py3
- almalinux-8-master-py3
- rockylinux-8-master-py3
- debian-10-3003-1-py3
- debian-9-3003-1-py3
- ubuntu-2004-3003-1-py3
- ubuntu-1804-3003-1-py3
- centos-8-3003-1-py3
- centos-7-3003-1-py3
- oraclelinux-8-3003-1-py3
- debian-10-3002-6-py3
- debian-9-3002-6-py3
- ubuntu-2004-3002-6-py3
- ubuntu-1804-3002-6-py3
- centos-8-3002-6-py3
- centos-7-3002-6-py3
- oraclelinux-8-3002-6-py3
- debian-10-3001-7-py3
- debian-9-3001-7-py3
- ubuntu-2004-3001-7-py3
- ubuntu-1804-3001-7-py3
- centos-8-3001-7-py3
- centos-7-3001-7-py3
- oraclelinux-8-3001-7-py3
- debian-10-3000-9-py3
- debian-9-3000-9-py3
- ubuntu-1804-3000-9-py3
- centos-8-3000-9-py3
- centos-7-3000-9-py3
- oraclelinux-8-3000-9-py3
- ubuntu-1804-3000-9-py2
provisioner:
state_top:
base:
'*':
- nginx._mapdata
- nginx.passenger
pillars:
top.sls:
base:
'*':
- nginx
pillars_from_files:
nginx.sls: test/salt/passenger/pillar/nginx.sls
verifier:
inspec_tests:
- path: test/integration/passenger

+ 13
- 0
nginx/_mapdata/_mapdata.jinja Visa fil

@@ -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
}}

+ 22
- 0
nginx/_mapdata/init.sls Visa fil

@@ -0,0 +1,22 @@
# -*- coding: utf-8 -*-
# vim: ft=sls
---
{#- Get the `tplroot` from `tpldir` #}
{%- set tplroot = tpldir.split("/")[0] %}
{%- from tplroot ~ "/map.jinja" import nginx with context %}

{%- set _mapdata = {
"values": nginx,
} %}
{%- 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 }}

+ 1
- 0
nginx/certificates.sls Visa fil

@@ -30,6 +30,7 @@ generate_nginx_dhparam_{{ dh_param }}_key:
- creates: {{ certificates_path }}/{{ dh_param }}
- require:
- file: prepare_certificates_path_dir
- pkg: generate_nginx_dhparam_{{ dh_param }}_key
- watch_in:
- service: nginx_service
{%- endif %}

+ 3
- 1
nginx/map.jinja Visa fil

@@ -9,7 +9,7 @@
'Debian': {
'package': 'nginx',
'passenger_package': 'passenger',
'passenger_config_file': '/etc/nginx/conf.d/passenger.conf',
'passenger_config_file': '/etc/nginx/conf.d/mod-http-passenger.conf',
'service': 'nginx',
'webuser': 'www-data',
'conf_file': '/etc/nginx/nginx.conf',
@@ -112,6 +112,7 @@
'snippets_dir': '/usr/local/etc/nginx/snippets',
'streams_dir': '/usr/local/etc/nginx/streams',
'server_use_symlink': True,
'openssl_package': 'openssl',
'pid_file': '/var/run/nginx.pid',
},
}, default='Debian' ),
@@ -119,6 +120,7 @@
'install_from_ppa': False,
'install_from_repo': False,
'install_from_phusionpassenger': False,
'check_config_before_apply': False,
'ppa_version': 'stable',
'source_version': '1.10.0',
'source_hash': '8ed647c3dd65bc4ced03b0e0f6bf9e633eff6b01bac772bcf97077d58bc2be4d',

+ 2
- 0
nginx/passenger.sls Visa fil

@@ -28,6 +28,7 @@ passenger_install:
- pkg: nginx_install
- require_in:
- service: nginx_service
- file: nginx_config

/etc/nginx/passenger.conf:
file.absent:
@@ -49,6 +50,7 @@ passenger_config:
- service: nginx_service
- require_in:
- service: nginx_service
- file: nginx_config
- require:
- file: /etc/nginx/passenger.conf
- pkg: passenger_install

+ 17
- 1
nginx/pkg.sls Visa fil

@@ -113,6 +113,22 @@ nginx_zypp_repo:
{% endif %}

{% if salt['grains.get']('os_family') == 'RedHat' %}
{% if salt['grains.get']('osfinger', '') in ['Amazon Linux-2'] %}
nginx_epel_repo:
pkgrepo.managed:
- name: epel
- humanname: Extra Packages for Enterprise Linux 7 - $basearch
- mirrorlist: https://mirrors.fedoraproject.org/metalink?repo=epel-7&arch=$basearch
- enabled: 1
- gpgcheck: 1
- gpgkey: https://dl.fedoraproject.org/pub/epel/RPM-GPG-KEY-EPEL-7
- failovermethod: priority
- require_in:
- pkg: nginx_install
- watch_in:
- pkg: nginx_install
{% endif %}

nginx_yum_repo:
pkgrepo:
{%- if from_official %}
@@ -147,7 +163,7 @@ nginx_phusionpassenger_yum_repo:
- baseurl: 'https://oss-binaries.phusionpassenger.com/yum/passenger/el/$releasever/$basearch'
- repo_gpgcheck: 1
- gpgcheck: 0
- gpgkey: 'https://packagecloud.io/gpg.key'
- gpgkey: 'https://oss-binaries.phusionpassenger.com/yum/definitions/RPM-GPG-KEY.asc'
- enabled: True
- sslverify: 1
- sslcacert: /etc/pki/tls/certs/ca-bundle.crt

+ 13
- 15
nginx/servers.sls Visa fil

@@ -5,12 +5,11 @@
{%- set tplroot = tpldir.split('/')[0] %}
{%- from tplroot ~ '/map.jinja' import nginx, sls_block with context %}
{%- from tplroot ~ '/servers_config.sls' import server_states with context %}
{%- from tplroot ~ '/service.sls' import service_function with context %}

{% macro file_requisites(states) %}
{%- for state in states %}
- file: {{ state }}
{%- endfor -%}
{%- for state in states %}
- file: {{ state }}
{%- endfor -%}
{% endmacro %}

include:
@@ -18,15 +17,14 @@ include:
- nginx.servers_config

{% if server_states|length() > 0 %}
nginx_service_reload:
service.{{ service_function }}:
- name: {{ nginx.lookup.service }}
- reload: True
- use:
- service: nginx_service
- listen:
{{ file_requisites(server_states) }}
- require:
{{ file_requisites(server_states) }}
- service: nginx_service
extend:
nginx_service:
service:
- reload: True
- require:
- file: nginx_config
{{ file_requisites(server_states) }}
- listen:
- file: nginx_config
{{ file_requisites(server_states) }}
{% endif %}

+ 13
- 8
nginx/servers_config.sls Visa fil

@@ -10,9 +10,14 @@
{% set server_states = [] %}
{#- _nginx is a lightened copy of nginx map intended to passed in templates #}
{%- set _nginx = nginx.copy() %}
<<<<<<< HEAD
{%- do _nginx.pop('snippets') %}
{%- do _nginx.pop('streams') %}
{%- do _nginx.pop('servers') %}
=======
{%- do _nginx.pop('snippets') if nginx.snippets is defined %}
{%- do _nginx.pop('servers') if nginx.servers is defined %}
>>>>>>> 6a42a9bdf84e764cb4b3313ad2b6d95688517dec

# Simple path concatenation.
# Needs work to make this function on windows.
@@ -53,6 +58,7 @@
file.symlink:
{{ sls_block(nginx.servers.symlink_opts) }}
- name: {{ server_path(server, state) }}
- makedirs: True
- target: {{ server_path(server, anti_state) }}
{%- else %}
{%- if deleted == True %}
@@ -99,10 +105,6 @@ nginx_server_available_dir:
- clean: {{ nginx.servers.purge_servers_config }}
{%- endif %}

# Manage the actual server files
{% for server, settings in nginx.servers.managed.items() %}
{% endfor %}

# Managed enabled/disabled state for servers
{% for server, settings in nginx.servers.managed.items() %}
{% set conf_state_id = 'server_conf_' ~ loop.index0 %}
@@ -110,6 +112,7 @@ nginx_server_available_dir:
{{ conf_state_id }}:
file.absent:
- name: {{ server_curpath(server) }}
{% do server_states.append(conf_state_id) %}
{% else %}
{% if settings.enabled == True %}
{{ conf_state_id }}:
@@ -126,8 +129,12 @@ nginx_server_available_dir:
}}
- makedirs: True
- template: jinja
- require_in:
- service: nginx_service
{%- if 'requires' in settings %}
- require:
{%- for k, v in settings.requires.items() %}
- {{ k }}: {{ v }}
{%- endfor %}
{%- endif %}
{% if 'source_path' not in settings.config %}
- context:
config: {{ settings.config|json(sort_keys=False) }}
@@ -157,9 +164,7 @@ nginx_server_available_dir:
- file: {{ conf_state_id }}
{% endif %}

{% if 'deleted' not in settings or ( 'deleted' in settings and settings.deleted == False ) %}
{% do server_states.append(status_state_id) %}
{% endif %}
{%- endif %} {# enabled != available_dir #}
{% endif %}
{% endfor %}

+ 3
- 0
nginx/service.sls Visa fil

@@ -42,3 +42,6 @@ nginx_service:
{% else %}
- pkg: nginx_install
{% endif %}
{% if nginx.check_config_before_apply %}
- onlyif: /usr/sbin/nginx -t
{% endif %}

+ 7
- 2
nginx/snippets.sls Visa fil

@@ -8,8 +8,8 @@

{#- _nginx is a lightened copy of nginx map intended to passed in templates #}
{%- set _nginx = nginx.copy() %}
{%- do _nginx.pop('snippets') %}
{%- do _nginx.pop('servers') %}
{%- do _nginx.pop('snippets') if nginx.snippets is defined %}
{%- do _nginx.pop('servers') if nginx.servers is defined %}

nginx_snippets_dir:
file.directory:
@@ -28,4 +28,9 @@ nginx_snippet_{{ snippet }}:
- context:
config: {{ config|json() }}
nginx: {{ _nginx|json() }}
- require:
- file: nginx_snippets_dir
- require_in:
- file: nginx_config
- service: nginx_service
{% endfor %}

+ 23
- 0
pillar.example Visa fil

@@ -28,6 +28,17 @@ nginx:
source_version: '1.10.0'
source_hash: ''

# Check the configuration before applying:
# To prevent applying a configuration that might break nginx, set this
# parameter to true so the configuration is checked BEFORE applying. If
# the check fails, the state will fail and it won't be deployed.
# CAVEAT: As the configuration file is created in a temp dir, it can't
# have relative references or it will fail to check. You'll need to
# specify full paths where required (ie, `include`, `load_module`,
# `snippets`, etc.0
# Defaults to false
check_config_before_apply: false

# These are usually set by grains in map.jinja
# Typically you can comment these out.
lookup:
@@ -200,6 +211,18 @@ nginx:
# and None indicates no action
enabled: true

# This let's you add dependencies on other resources being applied for a
# particular vhost
# A common case is when you use this formula together with letsencrypt's,
# validating through nginx: you need nginx running (to validate the vhost) but
# can't have the ssl vhost up until the certificate is created (because it
# won't exist and will make nginx fail to load the configuration)
#
# An example, when using LE to create the cert for 'some.host.domain':
# requires:
# cmd: create-initial-cert-some.host.domain
requires: {}

# Remove the site config file shipped by nginx
# (i.e. '/etc/nginx/sites-available/default' by default)
# It also remove the symlink (if it is exists).

+ 51
- 27
test/integration/default/controls/config.rb Visa fil

@@ -1,37 +1,52 @@
# frozen_string_literal: true

# Set defaults, use debian as base

server_available = '/etc/nginx/sites-available'
server_enabled = '/etc/nginx/sites-enabled'

# Override by OS
case os[:name]
when 'redhat', 'centos', 'fedora'
server_available = '/etc/nginx/conf.d'
server_enabled = '/etc/nginx/conf.d'
when 'opensuse'
server_available = '/etc/nginx/vhosts.d'
server_enabled = '/etc/nginx/vhosts.d'
end
# Override by platform family
server_available, server_enabled =
case platform[:family]
when 'redhat', 'fedora'
%w[/etc/nginx/conf.d /etc/nginx/conf.d]
when 'suse'
%w[/etc/nginx/vhosts.d /etc/nginx/vhosts.d]
when 'bsd'
%w[/usr/local/etc/nginx/sites-available /usr/local/etc/nginx/sites-enabled]
else
%w[/etc/nginx/sites-available /etc/nginx/sites-enabled]
end

nginx_conf, snippets_letsencrypt_conf, file_owner, file_group =
case platform[:family]
when 'bsd'
%w[/usr/local/etc/nginx/nginx.conf /usr/local/etc/nginx/snippets/letsencrypt.conf
root wheel]
else
%w[/etc/nginx/nginx.conf /etc/nginx/snippets/letsencrypt.conf root root]
end

control 'Nginx configuration' do
title 'should match desired lines'

# main configuration
describe file('/etc/nginx/nginx.conf') do
describe file(nginx_conf) do
it { should be_file }
it { should be_owned_by 'root' }
it { should be_grouped_into 'root' }
it { should be_owned_by file_owner }
it { should be_grouped_into file_group }
its('mode') { should cmp '0644' }
its('content') { should include %Q[ log_format main '$remote_addr - $remote_user [$time_local] $status '
its('content') do
# rubocop:disable Metrics/LineLength
should include %( log_format main '$remote_addr - $remote_user [$time_local] $status '
'"$request" $body_bytes_sent "$http_referer" '
'"$http_user_agent" "$http_x_forwarded_for"';] }
'"$http_user_agent" "$http_x_forwarded_for"';)
# rubocop:enable Metrics/LineLength
end
end

# snippets configuration
describe file('/etc/nginx/snippets/letsencrypt.conf') do
describe file(snippets_letsencrypt_conf) do
it { should be_file }
it { should be_owned_by 'root' }
it { should be_grouped_into 'root' }
it { should be_owned_by file_owner }
it { should be_grouped_into file_group }
its('mode') { should cmp '0644' }
its('content') { should include 'location ^~ /.well-known/acme-challenge/ {' }
its('content') { should include 'proxy_pass http://localhost:9999;' }
@@ -40,15 +55,14 @@ control 'Nginx configuration' do

# sites configuration
[server_available, server_enabled].each do |dir|

describe file ("#{dir}/default") do
it { should_not exist }
describe file "#{dir}/default" do
it { should_not exist }
end

describe file ("#{dir}/mysite") do
describe file "#{dir}/mysite" do
it { should be_file }
it { should be_owned_by 'root' }
it { should be_grouped_into 'root' }
it { should be_owned_by file_owner }
it { should be_grouped_into file_group }
its('mode') { should cmp '0644' }
its('content') { should include 'server_name localhost;' }
its('content') { should include 'listen 80 default_server;' }
@@ -57,6 +71,16 @@ control 'Nginx configuration' do
its('content') { should include 'try_files $uri $uri/ =404;' }
its('content') { should include 'include snippets/letsencrypt.conf;' }
end

describe file "#{dir}/mysite_with_require" do
it { should be_file }
it { should be_owned_by file_owner }
it { should be_grouped_into file_group }
its('mode') { should cmp '0644' }
its('content') { should include 'server_name with-deps;' }
its('content') { should include 'listen 80;' }
its('content') { should include 'index index.html index.htm;' }
its('content') { should include 'location ~ .htm {' }
its('content') { should include 'try_files $uri $uri/ =404;' }
end
end
end

+ 9
- 0
test/integration/default/controls/file.rb Visa fil

@@ -0,0 +1,9 @@
# frozen_string_literal: true

control 'Dependency test file' do
title 'should exist'

describe file('/tmp/created_to_test_dependencies') do
it { should be_file }
end
end

+ 2
- 0
test/integration/default/controls/install.rb Visa fil

@@ -1,3 +1,5 @@
# frozen_string_literal: true

control 'Nginx package' do
title 'should be installed'


+ 3
- 0
test/integration/default/controls/service.rb Visa fil

@@ -1,7 +1,10 @@
# frozen_string_literal: true

control 'Nginx service' do
title 'should be running and enabled'

describe service('nginx') do
it { should be_installed }
it { should be_enabled }
it { should be_running }
end

+ 9
- 0
test/integration/default/inspec.yml Visa fil

@@ -6,6 +6,9 @@ title: nginx formula
maintainer: SaltStack Formulas
license: Apache-2.0
summary: Verify that the nginx formula is setup and configured correctly
depends:
- name: share
path: test/integration/share
supports:
- platform-name: debian
- platform-name: ubuntu
@@ -14,5 +17,11 @@ supports:
- platform-name: opensuse
- platform-name: suse
- platform-name: freebsd
- platform-name: openbsd
- platform-name: amazon
- platform-name: oracle
- platform-name: arch
- platform-name: gentoo
- platform-name: almalinux
- platform-name: rocky
- platform: windows

+ 50
- 0
test/integration/passenger/README.md Visa fil

@@ -0,0 +1,50 @@
# InSpec Profile: `passenger`

This shows the implementation of the `passenger` InSpec [profile](https://github.com/inspec/inspec/blob/master/docs/profiles.md).

## Verify a profile

InSpec ships with built-in features to verify a profile structure.

```bash
$ inspec check passenger
Summary
-------
Location: passenger
Profile: profile
Controls: 4
Timestamp: 2019-06-24T23:09:01+00:00
Valid: true

Errors
------

Warnings
--------
```

## Execute a profile

To run all **supported** controls on a local machine use `inspec exec /path/to/profile`.

```bash
$ inspec exec passenger
..

Finished in 0.0025 seconds (files took 0.12449 seconds to load)
8 examples, 0 failures
```

## Execute a specific control from a profile

To run one control from the profile use `inspec exec /path/to/profile --controls name`.

```bash
$ inspec exec passenger --controls package
.

Finished in 0.0025 seconds (files took 0.12449 seconds to load)
1 examples, 0 failures
```

See an [example control here](https://github.com/inspec/inspec/blob/master/examples/profile/controls/example.rb).

+ 58
- 0
test/integration/passenger/controls/config.rb Visa fil

@@ -0,0 +1,58 @@
# frozen_string_literal: true

# Set defaults, use debian as base

# Override by OS Family
case platform[:family]
when 'redhat', 'centos', 'fedora'
server_available = '/etc/nginx/conf.d'
server_enabled = '/etc/nginx/conf.d'
passenger_mod = '/usr/lib64/nginx/modules/ngx_http_passenger_module.so'
passenger_root = '/usr/share/ruby/vendor_ruby/phusion_passenger/locations.ini'
passenger_config_file = '/etc/nginx/conf.d/passenger.conf'
should_not_exist_file = '/etc/nginx/conf.d/mod-http-passenger.conf'
when 'debian', 'ubuntu'
server_available = '/etc/nginx/sites-available'
server_enabled = '/etc/nginx/sites-enabled'
passenger_mod = '/usr/lib/nginx/modules/ngx_http_passenger_module.so'
passenger_root = '/usr/lib/ruby/vendor_ruby/phusion_passenger/locations.ini'
passenger_config_file = '/etc/nginx/conf.d/mod-http-passenger.conf'
should_not_exist_file = '/etc/nginx/conf.d/passenger.conf'
end

control 'Passenger configuration' do
title 'should match desired lines'

# main configuration
describe file('/etc/nginx/nginx.conf') do
its('content') { should include "load_module #{passenger_mod}" }
end

describe file(passenger_config_file) do
it { should be_file }
it { should be_owned_by 'root' }
it { should be_grouped_into 'root' }
its('mode') { should cmp '0644' }
its('content') { should include "passenger_root #{passenger_root};" }
its('content') { should include 'passenger_ruby /usr/bin/ruby;' }
end

describe file(should_not_exist_file) do
it { should_not exist }
end

# sites configuration
[server_available, server_enabled].each do |dir|
describe file "#{dir}/default" do
it { should_not exist }
end

describe file "#{dir}/mysite" do
it { should be_file }
it { should be_owned_by 'root' }
it { should be_grouped_into 'root' }
its('mode') { should cmp '0644' }
its('content') { should include 'passenger_enabled on;' }
end
end
end

+ 28
- 0
test/integration/passenger/controls/install.rb Visa fil

@@ -0,0 +1,28 @@
# frozen_string_literal: true

control 'Nginx package' do
title 'should be installed'

describe package('nginx') do
it { should be_installed }
end
end

control 'Passenger packages' do
title 'should be installed'

# Override by OS Family
passenger_mod_pkg = case platform[:family]
when 'redhat', 'centos', 'fedora'
'nginx-mod-http-passenger'
when 'debian', 'ubuntu'
'libnginx-mod-http-passenger'
end

describe package('passenger') do
it { should be_installed }
end
describe package(passenger_mod_pkg) do
it { should be_installed }
end
end

+ 28
- 0
test/integration/passenger/controls/service.rb Visa fil

@@ -0,0 +1,28 @@
# frozen_string_literal: true

control 'Nginx service' do
title 'should be running and enabled'

describe service('nginx') do
it { should be_enabled }
it { should be_running }
end
end

control 'Passenger module' do
title 'should be running and enabled'

describe 'Passenger engine' do
it 'passenger-config should say configuration "looks good"' do
expect(command(
'/usr/bin/passenger-config validate-install --auto'
).stdout).to match(/looks good/)
end

it 'passenger-memory-stats should return Passenger stats' do
expect(command('/usr/sbin/passenger-memory-stats').stdout).to match(
%r{nginx: master process /usr/sbin/nginx.*Passenger watchdog.*Passenger core.*}m
)
end
end
end

+ 27
- 0
test/integration/passenger/inspec.yml Visa fil

@@ -0,0 +1,27 @@
# -*- coding: utf-8 -*-
# vim: ft=yaml
---
name: passenger
title: nginx formula
maintainer: SaltStack Formulas
license: Apache-2.0
summary: Verify that the nginx formula is setup and configured correctly
depends:
- name: share
path: test/integration/share
supports:
- platform-name: debian
- platform-name: ubuntu
- platform-name: centos
- platform-name: fedora
- platform-name: opensuse
- platform-name: suse
- platform-name: freebsd
- platform-name: openbsd
- platform-name: amazon
- platform-name: oracle
- platform-name: arch
- platform-name: gentoo
- platform-name: almalinux
- platform-name: rocky
- platform: windows

+ 22
- 0
test/integration/share/README.md Visa fil

@@ -0,0 +1,22 @@
# 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 and Gentoo
- `system.platform[:name]` append `linux` to both `amazon` and `oracle`; ensure Windows platforms are resolved as simply `windows`
- `system.platform[:release]` tweak Arch, Amazon Linux, Gentoo, openSUSE and Windows:
- `Arch` is always `base-latest`
- `Amazon Linux` release `2018` is resolved as `1`
- `Gentoo` release is trimmed to its major version number and then the init system is appended (i.e. `sysv` or `sysd`)
- `openSUSE` is resolved as `tumbleweed` if the `platform[:release]` is in date format
- `Windows` uses the widely-used release number (e.g. `8.1` or `2019-server`) in place of the actual system release version
- `system.platform[:finger]` is the concatenation of the name and the major release number (except for Ubuntu, which gives `ubuntu-20.04` for example)

+ 24
- 0
test/integration/share/inspec.yml Visa fil

@@ -0,0 +1,24 @@
# -*- coding: utf-8 -*-
# vim: ft=yaml
---
name: share
title: InSpec shared resources
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: openbsd
- platform-name: amazon
- platform-name: oracle
- platform-name: arch
- platform-name: gentoo
- platform-name: almalinux
- platform-name: rocky
- platform: windows

+ 90
- 0
test/integration/share/libraries/system.rb Visa fil

@@ -0,0 +1,90 @@
# frozen_string_literal: true

# system.rb -- InSpec resources for system values
# Author: Daniel Dehennin <daniel.dehennin@ac-dijon.fr>
# Copyright (C) 2020 Daniel Dehennin <daniel.dehennin@ac-dijon.fr>

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', 'gentoo'
inspec.platform[:name]
else
inspec.platform[:family]
end
end

def build_platform_name
case inspec.platform[:name]
when 'amazon', 'oracle', 'rocky'
"#{inspec.platform[:name]}linux"
when /^windows_/
inspec.platform[:family]
else
inspec.platform[:name]
end
end

# rubocop:disable Metrics/MethodLength,Metrics/AbcSize,Metrics/CyclomaticComplexity
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 'opensuse'
# rubocop:disable Style/NumericLiterals,Layout/LineLength
inspec.platform[:release].to_i > 20210101 ? 'tumbleweed' : inspec.platform[:release]
# rubocop:enable Style/NumericLiterals,Layout/LineLength
when 'windows_8.1_pro'
'8.1'
when 'windows_server_2019_datacenter'
'2019-server'
when 'windows_server_2016_datacenter'
'2016-server'
else
inspec.platform[:release]
end
end
# rubocop:enable Metrics/MethodLength,Metrics/AbcSize,Metrics/CyclomaticComplexity

def derive_gentoo_init_system
inspec.command('systemctl').exist? ? 'sysd' : 'sysv'
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

+ 13
- 0
test/salt/default/pillar/nginx.sls Visa fil

@@ -37,6 +37,19 @@ nginx:
- location ~ .htm:
- try_files: '$uri $uri/ =404'
- include: 'snippets/letsencrypt.conf'
mysite_with_require:
enabled: true
config:
- server:
- server_name: with-deps
- listen:
- '80'
- index: 'index.html index.htm'
- location ~ .htm:
- try_files: '$uri $uri/ =404'
requires:
file: created_to_test_dependencies

dh_param:
'mydhparam2.pem':
keysize: 2048

+ 6
- 0
test/salt/default/states/test_dep/create_dependency_file.sls Visa fil

@@ -0,0 +1,6 @@
## this state creates a file that is used to test vhosts dependencies
# (see https://github.com/saltstack-formulas/nginx-formula/pull/278)

created_to_test_dependencies:
file.managed:
- name: /tmp/created_to_test_dependencies

+ 60
- 0
test/salt/passenger/pillar/nginx.sls Visa fil

@@ -0,0 +1,60 @@
# -*- coding: utf-8 -*-
# vim: ft=yaml
---
# Simple pillar setup
# - remove 'default' site
# - create 'mysite' site

{%- if grains.os_family in ('RedHat',) %}
{%- set passenger_pkg = 'nginx-mod-http-passenger' %}
{%- set passenger_mod = '/usr/lib64/nginx/modules/ngx_http_passenger_module.so' %}
{%- else %}
{%- set passenger_pkg = 'libnginx-mod-http-passenger' %}
{%- set passenger_mod = '/usr/lib/nginx/modules/ngx_http_passenger_module.so' %}
{%- endif %}

nginx:
check_config_before_apply: true

install_from_phusionpassenger: true
lookup:
passenger_package: {{ passenger_pkg }}

server:
config:
# This is required to get the passenger module loaded
# In Debian it can be done with this
# include: 'modules-enabled/*.conf'
load_module: {{ passenger_mod }}

worker_processes: 4
http:
### module ngx_http_log_module example
log_format: |-
main '$remote_addr - $remote_user [$time_local] $status '
'"$request" $body_bytes_sent "$http_referer" '
'"$http_user_agent" "$http_x_forwarded_for"'
include:
- /etc/nginx/mime.types
- /etc/nginx/conf.d/*.conf
- /etc/nginx/sites-enabled/*

servers:
managed:
default:
deleted: true
enabled: false
config: {}

mysite:
enabled: true
config:
- server:
- passenger_enabled: 'on'

- server_name: localhost
- listen:
- '80 default_server'
- index: 'index.html index.htm'
- location ~ .htm:
- try_files: '$uri $uri/ =404'

Laddar…
Avbryt
Spara