Compare commits
	
		
			No commits in common. "master" and "restructured4freebsd-2" have entirely different histories.
		
	
	
		
			master
			...
			restructur
		
	
		
							
								
								
									
										16
									
								
								.github/workflows/commitlint.yml
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										16
									
								
								.github/workflows/commitlint.yml
									
									
									
									
										vendored
									
									
								
							@ -1,16 +0,0 @@
 | 
			
		||||
# -*- coding: utf-8 -*-
 | 
			
		||||
# vim: ft=yaml
 | 
			
		||||
---
 | 
			
		||||
name: Commitlint
 | 
			
		||||
'on': [pull_request]
 | 
			
		||||
 | 
			
		||||
jobs:
 | 
			
		||||
  lint:
 | 
			
		||||
    runs-on: ubuntu-latest
 | 
			
		||||
    env:
 | 
			
		||||
      GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
 | 
			
		||||
    steps:
 | 
			
		||||
      - uses: actions/checkout@v2
 | 
			
		||||
        with:
 | 
			
		||||
          fetch-depth: 0
 | 
			
		||||
      - uses: wagoid/commitlint-github-action@v1
 | 
			
		||||
							
								
								
									
										134
									
								
								.gitignore
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										134
									
								
								.gitignore
									
									
									
									
										vendored
									
									
								
							@ -1,134 +0,0 @@
 | 
			
		||||
# Byte-compiled / optimized / DLL files
 | 
			
		||||
__pycache__/
 | 
			
		||||
*.py[cod]
 | 
			
		||||
*$py.class
 | 
			
		||||
 | 
			
		||||
# C extensions
 | 
			
		||||
*.so
 | 
			
		||||
 | 
			
		||||
# Distribution / packaging
 | 
			
		||||
.Python
 | 
			
		||||
env/
 | 
			
		||||
build/
 | 
			
		||||
develop-eggs/
 | 
			
		||||
dist/
 | 
			
		||||
downloads/
 | 
			
		||||
eggs/
 | 
			
		||||
.eggs/
 | 
			
		||||
lib/
 | 
			
		||||
lib64/
 | 
			
		||||
parts/
 | 
			
		||||
sdist/
 | 
			
		||||
var/
 | 
			
		||||
wheels/
 | 
			
		||||
*.egg-info/
 | 
			
		||||
.installed.cfg
 | 
			
		||||
*.egg
 | 
			
		||||
 | 
			
		||||
# PyInstaller
 | 
			
		||||
#  Usually these files are written by a python script from a packager
 | 
			
		||||
#  before PyInstaller builds the exe, so as to inject date/other infos into it.
 | 
			
		||||
*.manifest
 | 
			
		||||
*.spec
 | 
			
		||||
 | 
			
		||||
# Installer logs
 | 
			
		||||
pip-log.txt
 | 
			
		||||
pip-delete-this-directory.txt
 | 
			
		||||
 | 
			
		||||
# Unit test / coverage reports
 | 
			
		||||
htmlcov/
 | 
			
		||||
.tox/
 | 
			
		||||
.coverage
 | 
			
		||||
.coverage.*
 | 
			
		||||
.cache
 | 
			
		||||
nosetests.xml
 | 
			
		||||
coverage.xml
 | 
			
		||||
*.cover
 | 
			
		||||
.hypothesis/
 | 
			
		||||
.kitchen
 | 
			
		||||
.kitchen.local.yml
 | 
			
		||||
kitchen.local.yml
 | 
			
		||||
junit-*.xml
 | 
			
		||||
 | 
			
		||||
# Translations
 | 
			
		||||
*.mo
 | 
			
		||||
*.pot
 | 
			
		||||
 | 
			
		||||
# Django stuff:
 | 
			
		||||
*.log
 | 
			
		||||
local_settings.py
 | 
			
		||||
 | 
			
		||||
# Flask stuff:
 | 
			
		||||
instance/
 | 
			
		||||
.webassets-cache
 | 
			
		||||
 | 
			
		||||
# Scrapy stuff:
 | 
			
		||||
.scrapy
 | 
			
		||||
 | 
			
		||||
# Sphinx documentation
 | 
			
		||||
docs/_build/
 | 
			
		||||
 | 
			
		||||
# PyBuilder
 | 
			
		||||
target/
 | 
			
		||||
 | 
			
		||||
# Jupyter Notebook
 | 
			
		||||
.ipynb_checkpoints
 | 
			
		||||
 | 
			
		||||
# pyenv
 | 
			
		||||
.python-version
 | 
			
		||||
 | 
			
		||||
# celery beat schedule file
 | 
			
		||||
celerybeat-schedule
 | 
			
		||||
 | 
			
		||||
# SageMath parsed files
 | 
			
		||||
*.sage.py
 | 
			
		||||
 | 
			
		||||
# dotenv
 | 
			
		||||
.env
 | 
			
		||||
 | 
			
		||||
# virtualenv
 | 
			
		||||
.venv
 | 
			
		||||
venv/
 | 
			
		||||
ENV/
 | 
			
		||||
 | 
			
		||||
# visual studio
 | 
			
		||||
.vs/
 | 
			
		||||
 | 
			
		||||
# Spyder project settings
 | 
			
		||||
.spyderproject
 | 
			
		||||
.spyproject
 | 
			
		||||
 | 
			
		||||
# Rope project settings
 | 
			
		||||
.ropeproject
 | 
			
		||||
 | 
			
		||||
# mkdocs documentation
 | 
			
		||||
/site
 | 
			
		||||
 | 
			
		||||
# mypy
 | 
			
		||||
.mypy_cache/
 | 
			
		||||
 | 
			
		||||
# Bundler
 | 
			
		||||
.bundle/
 | 
			
		||||
 | 
			
		||||
# copied `.md` files used for conversion to `.rst` using `m2r`
 | 
			
		||||
docs/*.md
 | 
			
		||||
 | 
			
		||||
# Vim
 | 
			
		||||
*.sw?
 | 
			
		||||
 | 
			
		||||
## Collected when centralising formulas (check and sort)
 | 
			
		||||
# `collectd-formula`
 | 
			
		||||
.pytest_cache/
 | 
			
		||||
/.idea/
 | 
			
		||||
Dockerfile.*_*
 | 
			
		||||
ignore/
 | 
			
		||||
tmp/
 | 
			
		||||
 | 
			
		||||
# `salt-formula` -- Vagrant Specific files
 | 
			
		||||
.vagrant
 | 
			
		||||
top.sls
 | 
			
		||||
!test/salt/pillar/top.sls
 | 
			
		||||
 | 
			
		||||
# `suricata-formula` -- Platform binaries
 | 
			
		||||
*.rpm
 | 
			
		||||
*.deb
 | 
			
		||||
							
								
								
									
										212
									
								
								.gitlab-ci.yml
									
									
									
									
									
								
							
							
						
						
									
										212
									
								
								.gitlab-ci.yml
									
									
									
									
									
								
							@ -1,212 +0,0 @@
 | 
			
		||||
# -*- coding: utf-8 -*-
 | 
			
		||||
# vim: ft=yaml
 | 
			
		||||
---
 | 
			
		||||
###############################################################################
 | 
			
		||||
# Define all YAML node anchors
 | 
			
		||||
###############################################################################
 | 
			
		||||
.node_anchors:
 | 
			
		||||
  # `only` (also used for `except` where applicable)
 | 
			
		||||
  only_branch_master_parent_repo: &only_branch_master_parent_repo
 | 
			
		||||
    - 'master@saltstack-formulas/postfix-formula'
 | 
			
		||||
  # `stage`
 | 
			
		||||
  stage_lint: &stage_lint 'lint'
 | 
			
		||||
  stage_release: &stage_release 'release'
 | 
			
		||||
  stage_test: &stage_test 'test'
 | 
			
		||||
  # `image`
 | 
			
		||||
  image_commitlint: &image_commitlint 'myii/ssf-commitlint:11'
 | 
			
		||||
  image_dindruby: &image_dindruby 'myii/ssf-dind-ruby:2.7.1-r3'
 | 
			
		||||
  image_precommit: &image_precommit
 | 
			
		||||
    name: 'myii/ssf-pre-commit:2.9.2'
 | 
			
		||||
    entrypoint: ['/bin/bash', '-c']
 | 
			
		||||
  image_rubocop: &image_rubocop 'pipelinecomponents/rubocop:latest'
 | 
			
		||||
  image_semantic-release: &image_semanticrelease 'myii/ssf-semantic-release:15.14'
 | 
			
		||||
  # `services`
 | 
			
		||||
  services_docker_dind: &services_docker_dind
 | 
			
		||||
    - 'docker:dind'
 | 
			
		||||
  # `variables`
 | 
			
		||||
  # https://forum.gitlab.com/t/gitlab-com-ci-caching-rubygems/5627/3
 | 
			
		||||
  # https://bundler.io/v1.16/bundle_config.html
 | 
			
		||||
  variables_bundler: &variables_bundler
 | 
			
		||||
    BUNDLE_CACHE_PATH: '${CI_PROJECT_DIR}/.cache/bundler'
 | 
			
		||||
    BUNDLE_WITHOUT: 'production'
 | 
			
		||||
  # `cache`
 | 
			
		||||
  cache_bundler: &cache_bundler
 | 
			
		||||
    key: '${CI_JOB_STAGE}'
 | 
			
		||||
    paths:
 | 
			
		||||
      - '${BUNDLE_CACHE_PATH}'
 | 
			
		||||
 | 
			
		||||
###############################################################################
 | 
			
		||||
# Define stages and global variables
 | 
			
		||||
###############################################################################
 | 
			
		||||
stages:
 | 
			
		||||
  - *stage_lint
 | 
			
		||||
  - *stage_test
 | 
			
		||||
  - *stage_release
 | 
			
		||||
variables:
 | 
			
		||||
  DOCKER_DRIVER: 'overlay2'
 | 
			
		||||
 | 
			
		||||
###############################################################################
 | 
			
		||||
# `lint` stage: `commitlint`, `pre-commit` & `rubocop` (latest, failure allowed)
 | 
			
		||||
###############################################################################
 | 
			
		||||
commitlint:
 | 
			
		||||
  stage: *stage_lint
 | 
			
		||||
  image: *image_commitlint
 | 
			
		||||
  script:
 | 
			
		||||
    # Add `upstream` remote to get access to `upstream/master`
 | 
			
		||||
    - 'git remote add upstream
 | 
			
		||||
       https://gitlab.com/saltstack-formulas/postfix-formula.git'
 | 
			
		||||
    - 'git fetch --all'
 | 
			
		||||
    # Set default commit hashes for `--from` and `--to`
 | 
			
		||||
    - 'export COMMITLINT_FROM="$(git merge-base upstream/master HEAD)"'
 | 
			
		||||
    - 'export COMMITLINT_TO="${CI_COMMIT_SHA}"'
 | 
			
		||||
    # `coqbot` adds a merge commit to test PRs on top of the latest commit in
 | 
			
		||||
    # the repo; amend this merge commit message to avoid failure
 | 
			
		||||
    - |
 | 
			
		||||
      if [ "${GITLAB_USER_LOGIN}" = "coqbot" ] \
 | 
			
		||||
      && [ "${CI_COMMIT_BRANCH}" != "master" ]; then
 | 
			
		||||
        git commit --amend -m \
 | 
			
		||||
          'chore: reword coqbot merge commit message for commitlint'
 | 
			
		||||
        export COMMITLINT_TO=HEAD
 | 
			
		||||
      fi
 | 
			
		||||
    # Run `commitlint`
 | 
			
		||||
    - 'commitlint --from "${COMMITLINT_FROM}"
 | 
			
		||||
                  --to   "${COMMITLINT_TO}"
 | 
			
		||||
                  --verbose'
 | 
			
		||||
 | 
			
		||||
pre-commit:
 | 
			
		||||
  stage: *stage_lint
 | 
			
		||||
  image: *image_precommit
 | 
			
		||||
  # https://pre-commit.com/#gitlab-ci-example
 | 
			
		||||
  variables:
 | 
			
		||||
    PRE_COMMIT_HOME: '${CI_PROJECT_DIR}/.cache/pre-commit'
 | 
			
		||||
  cache:
 | 
			
		||||
    key: '${CI_JOB_NAME}'
 | 
			
		||||
    paths:
 | 
			
		||||
      - '${PRE_COMMIT_HOME}'
 | 
			
		||||
  script:
 | 
			
		||||
    - 'pre-commit run --all-files --color always --verbose'
 | 
			
		||||
 | 
			
		||||
# Use a separate job for `rubocop` other than the one potentially run by `pre-commit`
 | 
			
		||||
# - The `pre-commit` check will only be available for formulas that pass the default
 | 
			
		||||
#   `rubocop` check -- and must continue to do so
 | 
			
		||||
# - This job is allowed to fail, so can be used for all formulas
 | 
			
		||||
# - Furthermore, this job uses all of the latest `rubocop` features & cops,
 | 
			
		||||
#   which will help when upgrading the `rubocop` linter used in `pre-commit`
 | 
			
		||||
rubocop:
 | 
			
		||||
  allow_failure: true
 | 
			
		||||
  stage: *stage_lint
 | 
			
		||||
  image: *image_rubocop
 | 
			
		||||
  script:
 | 
			
		||||
    - 'rubocop -d -P -S --enable-pending-cops'
 | 
			
		||||
 | 
			
		||||
###############################################################################
 | 
			
		||||
# Define `test` template
 | 
			
		||||
###############################################################################
 | 
			
		||||
.test_instance: &test_instance
 | 
			
		||||
  stage: *stage_test
 | 
			
		||||
  image: *image_dindruby
 | 
			
		||||
  services: *services_docker_dind
 | 
			
		||||
  variables: *variables_bundler
 | 
			
		||||
  cache: *cache_bundler
 | 
			
		||||
  before_script:
 | 
			
		||||
    # TODO: This should work from the env vars above automatically
 | 
			
		||||
    - 'bundle config set path "${BUNDLE_CACHE_PATH}"'
 | 
			
		||||
    - 'bundle config set without "${BUNDLE_WITHOUT}"'
 | 
			
		||||
    - 'bundle install'
 | 
			
		||||
  script:
 | 
			
		||||
    # Alternative value to consider: `${CI_JOB_NAME}`
 | 
			
		||||
    - 'bin/kitchen verify "${DOCKER_ENV_CI_JOB_NAME}"'
 | 
			
		||||
 | 
			
		||||
###############################################################################
 | 
			
		||||
# Define `test` template (`allow_failure: true`)
 | 
			
		||||
###############################################################################
 | 
			
		||||
.test_instance_failure_permitted:
 | 
			
		||||
  <<: *test_instance
 | 
			
		||||
  allow_failure: true
 | 
			
		||||
 | 
			
		||||
###############################################################################
 | 
			
		||||
# `test` stage: each instance below uses the `test` template above
 | 
			
		||||
###############################################################################
 | 
			
		||||
## 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`
 | 
			
		||||
# yamllint disable rule:line-length
 | 
			
		||||
# default-debian-11-tiamat-py3: {extends: '.test_instance'}
 | 
			
		||||
# default-debian-10-tiamat-py3: {extends: '.test_instance'}
 | 
			
		||||
# default-debian-9-tiamat-py3: {extends: '.test_instance'}
 | 
			
		||||
# default-ubuntu-2204-tiamat-py3: {extends: '.test_instance_failure_permitted'}
 | 
			
		||||
# default-ubuntu-2004-tiamat-py3: {extends: '.test_instance'}
 | 
			
		||||
# default-ubuntu-1804-tiamat-py3: {extends: '.test_instance'}
 | 
			
		||||
# default-centos-stream8-tiamat-py3: {extends: '.test_instance_failure_permitted'}
 | 
			
		||||
# 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-11-master-py3: {extends: '.test_instance'}
 | 
			
		||||
default-debian-10-master-py3: {extends: '.test_instance'}
 | 
			
		||||
default-debian-9-master-py3: {extends: '.test_instance'}
 | 
			
		||||
default-ubuntu-2204-master-py3: {extends: '.test_instance_failure_permitted'}
 | 
			
		||||
default-ubuntu-2004-master-py3: {extends: '.test_instance'}
 | 
			
		||||
default-ubuntu-1804-master-py3: {extends: '.test_instance'}
 | 
			
		||||
default-centos-stream8-master-py3: {extends: '.test_instance_failure_permitted'}
 | 
			
		||||
default-centos-7-master-py3: {extends: '.test_instance'}
 | 
			
		||||
default-fedora-36-master-py3: {extends: '.test_instance_failure_permitted'}
 | 
			
		||||
default-fedora-35-master-py3: {extends: '.test_instance'}
 | 
			
		||||
default-opensuse-leap-153-master-py3: {extends: '.test_instance'}
 | 
			
		||||
default-opensuse-tmbl-latest-master-py3: {extends: '.test_instance_failure_permitted'}
 | 
			
		||||
default-amazonlinux-2-master-py3: {extends: '.test_instance'}
 | 
			
		||||
default-oraclelinux-8-master-py3: {extends: '.test_instance'}
 | 
			
		||||
default-oraclelinux-7-master-py3: {extends: '.test_instance'}
 | 
			
		||||
default-arch-base-latest-master-py3: {extends: '.test_instance'}
 | 
			
		||||
default-gentoo-stage3-latest-master-py3: {extends: '.test_instance'}
 | 
			
		||||
default-gentoo-stage3-systemd-master-py3: {extends: '.test_instance'}
 | 
			
		||||
default-almalinux-8-master-py3: {extends: '.test_instance'}
 | 
			
		||||
default-rockylinux-8-master-py3: {extends: '.test_instance'}
 | 
			
		||||
# default-debian-11-3004-1-py3: {extends: '.test_instance'}
 | 
			
		||||
# default-debian-10-3004-1-py3: {extends: '.test_instance'}
 | 
			
		||||
# default-debian-9-3004-1-py3: {extends: '.test_instance'}
 | 
			
		||||
# default-ubuntu-2204-3004-1-py3: {extends: '.test_instance_failure_permitted'}
 | 
			
		||||
# default-ubuntu-2004-3004-1-py3: {extends: '.test_instance'}
 | 
			
		||||
# default-ubuntu-1804-3004-1-py3: {extends: '.test_instance'}
 | 
			
		||||
# default-centos-stream8-3004-1-py3: {extends: '.test_instance_failure_permitted'}
 | 
			
		||||
# default-centos-7-3004-1-py3: {extends: '.test_instance'}
 | 
			
		||||
# default-fedora-36-3004-1-py3: {extends: '.test_instance_failure_permitted'}
 | 
			
		||||
# default-fedora-35-3004-1-py3: {extends: '.test_instance'}
 | 
			
		||||
# default-amazonlinux-2-3004-1-py3: {extends: '.test_instance'}
 | 
			
		||||
# default-oraclelinux-8-3004-1-py3: {extends: '.test_instance'}
 | 
			
		||||
# default-oraclelinux-7-3004-1-py3: {extends: '.test_instance'}
 | 
			
		||||
# default-arch-base-latest-3004-1-py3: {extends: '.test_instance'}
 | 
			
		||||
# default-gentoo-stage3-latest-3004-1-py3: {extends: '.test_instance'}
 | 
			
		||||
# default-gentoo-stage3-systemd-3004-1-py3: {extends: '.test_instance'}
 | 
			
		||||
# default-almalinux-8-3004-1-py3: {extends: '.test_instance'}
 | 
			
		||||
# default-rockylinux-8-3004-1-py3: {extends: '.test_instance'}
 | 
			
		||||
# default-opensuse-leap-153-3004-0-py3: {extends: '.test_instance'}
 | 
			
		||||
# default-opensuse-tmbl-latest-3004-0-py3: {extends: '.test_instance_failure_permitted'}
 | 
			
		||||
# default-debian-10-3003-4-py3: {extends: '.test_instance'}
 | 
			
		||||
# default-debian-9-3003-4-py3: {extends: '.test_instance'}
 | 
			
		||||
# default-ubuntu-2004-3003-4-py3: {extends: '.test_instance'}
 | 
			
		||||
# default-ubuntu-1804-3003-4-py3: {extends: '.test_instance'}
 | 
			
		||||
# default-centos-stream8-3003-4-py3: {extends: '.test_instance_failure_permitted'}
 | 
			
		||||
# default-centos-7-3003-4-py3: {extends: '.test_instance'}
 | 
			
		||||
# default-amazonlinux-2-3003-4-py3: {extends: '.test_instance'}
 | 
			
		||||
# default-oraclelinux-8-3003-4-py3: {extends: '.test_instance'}
 | 
			
		||||
# default-oraclelinux-7-3003-4-py3: {extends: '.test_instance'}
 | 
			
		||||
# default-almalinux-8-3003-4-py3: {extends: '.test_instance'}
 | 
			
		||||
# yamllint enable rule:line-length
 | 
			
		||||
 | 
			
		||||
###############################################################################
 | 
			
		||||
# `release` stage: `semantic-release`
 | 
			
		||||
###############################################################################
 | 
			
		||||
semantic-release:
 | 
			
		||||
  only: *only_branch_master_parent_repo
 | 
			
		||||
  stage: *stage_release
 | 
			
		||||
  image: *image_semanticrelease
 | 
			
		||||
  variables:
 | 
			
		||||
    MAINTAINER_TOKEN: '${GH_TOKEN}'
 | 
			
		||||
  script:
 | 
			
		||||
    # Update `AUTHORS.md`
 | 
			
		||||
    - '${HOME}/go/bin/maintainer contributor'
 | 
			
		||||
    # Run `semantic-release`
 | 
			
		||||
    - 'semantic-release'
 | 
			
		||||
@ -1,77 +0,0 @@
 | 
			
		||||
# -*- coding: utf-8 -*-
 | 
			
		||||
# vim: ft=yaml
 | 
			
		||||
---
 | 
			
		||||
# See https://pre-commit.com for more information
 | 
			
		||||
# See https://pre-commit.com/hooks.html for more hooks
 | 
			
		||||
ci:
 | 
			
		||||
  autofix_commit_msg: |
 | 
			
		||||
    ci(pre-commit.ci): apply auto fixes from pre-commit.com hooks
 | 
			
		||||
 | 
			
		||||
    For more information, see https://pre-commit.ci
 | 
			
		||||
  autofix_prs: true
 | 
			
		||||
  autoupdate_branch: ''
 | 
			
		||||
  autoupdate_commit_msg: |
 | 
			
		||||
    ci(pre-commit.ci): perform `pre-commit` autoupdate
 | 
			
		||||
  autoupdate_schedule: quarterly
 | 
			
		||||
  skip: []
 | 
			
		||||
  submodules: false
 | 
			
		||||
default_stages: [commit]
 | 
			
		||||
repos:
 | 
			
		||||
  - repo: https://github.com/dafyddj/commitlint-pre-commit-hook
 | 
			
		||||
    rev: v2.3.0
 | 
			
		||||
    hooks:
 | 
			
		||||
      - id: commitlint
 | 
			
		||||
        name: Check commit message using commitlint
 | 
			
		||||
        description: Lint commit message against @commitlint/config-conventional rules
 | 
			
		||||
        stages: [commit-msg]
 | 
			
		||||
        additional_dependencies: ['@commitlint/config-conventional@8.3.4']
 | 
			
		||||
      - id: commitlint-travis
 | 
			
		||||
        stages: [manual]
 | 
			
		||||
        additional_dependencies: ['@commitlint/config-conventional@8.3.4']
 | 
			
		||||
        always_run: true
 | 
			
		||||
  - repo: https://github.com/rubocop-hq/rubocop
 | 
			
		||||
    rev: v1.30.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.8.0.4
 | 
			
		||||
    hooks:
 | 
			
		||||
      - id: shellcheck
 | 
			
		||||
        name: Check shell scripts with shellcheck
 | 
			
		||||
        files: ^.*\.(sh|bash|ksh)$
 | 
			
		||||
        types: []
 | 
			
		||||
  - repo: https://github.com/adrienverge/yamllint
 | 
			
		||||
    rev: v1.26.3
 | 
			
		||||
    hooks:
 | 
			
		||||
      - id: yamllint
 | 
			
		||||
        name: Check YAML syntax with yamllint
 | 
			
		||||
        args: [--strict, '.']
 | 
			
		||||
        always_run: true
 | 
			
		||||
        pass_filenames: false
 | 
			
		||||
  - repo: https://github.com/warpnet/salt-lint
 | 
			
		||||
    rev: v0.8.0
 | 
			
		||||
    hooks:
 | 
			
		||||
      - id: salt-lint
 | 
			
		||||
        name: Check Salt files using salt-lint
 | 
			
		||||
        files: ^.*\.(sls|jinja|j2|tmpl|tst)$
 | 
			
		||||
  - repo: https://github.com/myint/rstcheck
 | 
			
		||||
    rev: 3f929574
 | 
			
		||||
    hooks:
 | 
			
		||||
      - id: rstcheck
 | 
			
		||||
        name: Check reST files using rstcheck
 | 
			
		||||
        exclude: 'docs/CHANGELOG.rst'
 | 
			
		||||
  - 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]
 | 
			
		||||
@ -1,4 +0,0 @@
 | 
			
		||||
[rstcheck]
 | 
			
		||||
report=info
 | 
			
		||||
ignore_language=rst
 | 
			
		||||
ignore_messages=(Duplicate (ex|im)plicit target.*|Hyperlink target ".*" is not referenced\.$)
 | 
			
		||||
							
								
								
									
										23
									
								
								.rubocop.yml
									
									
									
									
									
								
							
							
						
						
									
										23
									
								
								.rubocop.yml
									
									
									
									
									
								
							@ -1,23 +0,0 @@
 | 
			
		||||
# -*- coding: utf-8 -*-
 | 
			
		||||
# vim: ft=yaml
 | 
			
		||||
---
 | 
			
		||||
# General overrides used across formulas in the org
 | 
			
		||||
Layout/LineLength:
 | 
			
		||||
  # Increase from default of `80`
 | 
			
		||||
  # Based on https://github.com/PyCQA/flake8-bugbear#opinionated-warnings (`B950`)
 | 
			
		||||
  Max: 88
 | 
			
		||||
Metrics/BlockLength:
 | 
			
		||||
  IgnoredMethods:
 | 
			
		||||
    - control
 | 
			
		||||
    - describe
 | 
			
		||||
  # Increase from default of `25`
 | 
			
		||||
  Max: 30
 | 
			
		||||
Security/YAMLLoad:
 | 
			
		||||
  Exclude:
 | 
			
		||||
    - test/integration/**/_mapdata.rb
 | 
			
		||||
 | 
			
		||||
# General settings across all cops in this formula
 | 
			
		||||
AllCops:
 | 
			
		||||
  NewCops: enable
 | 
			
		||||
 | 
			
		||||
# Any offenses that should be fixed, e.g. collected via. `rubocop --auto-gen-config`
 | 
			
		||||
							
								
								
									
										17
									
								
								.salt-lint
									
									
									
									
									
								
							
							
						
						
									
										17
									
								
								.salt-lint
									
									
									
									
									
								
							@ -1,17 +0,0 @@
 | 
			
		||||
# -*- coding: utf-8 -*-
 | 
			
		||||
# vim: ft=yaml
 | 
			
		||||
---
 | 
			
		||||
exclude_paths: []
 | 
			
		||||
rules:
 | 
			
		||||
  203:  # Most files should not contain tabs
 | 
			
		||||
    ignore: |
 | 
			
		||||
      postfix/files/mapping.j2
 | 
			
		||||
skip_list:
 | 
			
		||||
  # Using `salt-lint` for linting other files as well, such as Jinja macros/templates
 | 
			
		||||
  - 205  # Use ".sls" as a Salt State file extension
 | 
			
		||||
  # Skipping `207` and `208` because `210` is sufficient, at least for the time-being
 | 
			
		||||
  # I.e. Allows 3-digit unquoted codes to still be used, such as `644` and `755`
 | 
			
		||||
  - 207  # File modes should always be encapsulated in quotation marks
 | 
			
		||||
  - 208  # File modes should always contain a leading zero
 | 
			
		||||
tags: []
 | 
			
		||||
verbosity: 1
 | 
			
		||||
							
								
								
									
										186
									
								
								.travis.yml
									
									
									
									
									
								
							
							
						
						
									
										186
									
								
								.travis.yml
									
									
									
									
									
								
							@ -1,186 +0,0 @@
 | 
			
		||||
# -*- coding: utf-8 -*-
 | 
			
		||||
# vim: ft=yaml
 | 
			
		||||
---
 | 
			
		||||
################################################################################
 | 
			
		||||
# NOTE: This file is UNMAINTAINED; it is provided for references purposes only.
 | 
			
		||||
#       No guarantees are tendered that this structure will work after 2020.
 | 
			
		||||
################################################################################
 | 
			
		||||
# * https://en.wikipedia.org/wiki/Travis_CI:
 | 
			
		||||
#   - "... free open-source plans were removed in [sic] the end of 2020"
 | 
			
		||||
#   - https://blog.travis-ci.com/2020-11-02-travis-ci-new-billing
 | 
			
		||||
#   - https://ropensci.org/technotes/2020/11/19/moving-away-travis/
 | 
			
		||||
################################################################################
 | 
			
		||||
## Machine config
 | 
			
		||||
os: 'linux'
 | 
			
		||||
arch: 'amd64'
 | 
			
		||||
dist: 'bionic'
 | 
			
		||||
version: '~> 1.0'
 | 
			
		||||
 | 
			
		||||
## Language and cache config
 | 
			
		||||
language: 'ruby'
 | 
			
		||||
cache: 'bundler'
 | 
			
		||||
 | 
			
		||||
## Services config
 | 
			
		||||
services:
 | 
			
		||||
  - docker
 | 
			
		||||
 | 
			
		||||
## Script to run for the test stage
 | 
			
		||||
script:
 | 
			
		||||
  - bin/kitchen verify "${INSTANCE}"
 | 
			
		||||
 | 
			
		||||
## Stages and jobs matrix
 | 
			
		||||
stages:
 | 
			
		||||
  - test
 | 
			
		||||
  # # As part of the switch away from Travis CI, ensure that the `release` stage
 | 
			
		||||
  # # is not run inadvertently
 | 
			
		||||
  # - name: 'release'
 | 
			
		||||
  #   if: 'branch = master AND type != pull_request'
 | 
			
		||||
jobs:
 | 
			
		||||
  include:
 | 
			
		||||
    ## Define the test stage that runs the linters (and testing matrix, if applicable)
 | 
			
		||||
 | 
			
		||||
    # Run all of the linters in a single job
 | 
			
		||||
    - language: 'node_js'
 | 
			
		||||
      node_js: 'lts/*'
 | 
			
		||||
      env: 'Lint'
 | 
			
		||||
      name: 'Lint: salt-lint, yamllint, rubocop, shellcheck & commitlint'
 | 
			
		||||
      before_install: 'skip'
 | 
			
		||||
      script:
 | 
			
		||||
        # Install and run `salt-lint`
 | 
			
		||||
        - pip install --user salt-lint
 | 
			
		||||
        - git ls-files -- '*.sls' '*.jinja' '*.j2' '*.tmpl' '*.tst'
 | 
			
		||||
                        | xargs salt-lint
 | 
			
		||||
        # Install and run `yamllint`
 | 
			
		||||
        # 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'
 | 
			
		||||
                        | xargs shellcheck
 | 
			
		||||
        # Install and run `commitlint`
 | 
			
		||||
        - npm i -D @commitlint/config-conventional
 | 
			
		||||
                   @commitlint/travis-cli
 | 
			
		||||
        - commitlint-travis
 | 
			
		||||
 | 
			
		||||
    # Run `pre-commit` linters in a single job
 | 
			
		||||
    - language: 'python'
 | 
			
		||||
      env: 'Lint_pre-commit'
 | 
			
		||||
      name: 'Lint: pre-commit'
 | 
			
		||||
      before_install: 'skip'
 | 
			
		||||
      cache:
 | 
			
		||||
        directories:
 | 
			
		||||
          - $HOME/.cache/pre-commit
 | 
			
		||||
      script:
 | 
			
		||||
        # Install and run `pre-commit`
 | 
			
		||||
        - pip install pre-commit==2.7.1
 | 
			
		||||
        - pre-commit run --all-files --color always --verbose
 | 
			
		||||
        - pre-commit run --color always --hook-stage manual --verbose commitlint-travis
 | 
			
		||||
 | 
			
		||||
    ## 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-11-tiamat-py3
 | 
			
		||||
    # - env: INSTANCE=default-debian-10-tiamat-py3
 | 
			
		||||
    # - env: INSTANCE=default-debian-9-tiamat-py3
 | 
			
		||||
    # - env: INSTANCE=default-ubuntu-2204-tiamat-py3
 | 
			
		||||
    # - env: INSTANCE=default-ubuntu-2004-tiamat-py3
 | 
			
		||||
    # - env: INSTANCE=default-ubuntu-1804-tiamat-py3
 | 
			
		||||
    # - env: INSTANCE=default-centos-stream8-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-11-master-py3
 | 
			
		||||
    - env: INSTANCE=default-debian-10-master-py3
 | 
			
		||||
    - env: INSTANCE=default-debian-9-master-py3
 | 
			
		||||
    - env: INSTANCE=default-ubuntu-2204-master-py3
 | 
			
		||||
    - env: INSTANCE=default-ubuntu-2004-master-py3
 | 
			
		||||
    - env: INSTANCE=default-ubuntu-1804-master-py3
 | 
			
		||||
    - env: INSTANCE=default-centos-stream8-master-py3
 | 
			
		||||
    - env: INSTANCE=default-centos-7-master-py3
 | 
			
		||||
    - env: INSTANCE=default-fedora-36-master-py3
 | 
			
		||||
    - env: INSTANCE=default-fedora-35-master-py3
 | 
			
		||||
    - env: INSTANCE=default-opensuse-leap-153-master-py3
 | 
			
		||||
    - env: INSTANCE=default-opensuse-tmbl-latest-master-py3
 | 
			
		||||
    - env: INSTANCE=default-amazonlinux-2-master-py3
 | 
			
		||||
    - env: INSTANCE=default-oraclelinux-8-master-py3
 | 
			
		||||
    - env: INSTANCE=default-oraclelinux-7-master-py3
 | 
			
		||||
    - env: INSTANCE=default-arch-base-latest-master-py3
 | 
			
		||||
    - env: INSTANCE=default-gentoo-stage3-latest-master-py3
 | 
			
		||||
    - env: INSTANCE=default-gentoo-stage3-systemd-master-py3
 | 
			
		||||
    - env: INSTANCE=default-almalinux-8-master-py3
 | 
			
		||||
    - env: INSTANCE=default-rockylinux-8-master-py3
 | 
			
		||||
    # - env: INSTANCE=default-debian-11-3004-1-py3
 | 
			
		||||
    # - env: INSTANCE=default-debian-10-3004-1-py3
 | 
			
		||||
    # - env: INSTANCE=default-debian-9-3004-1-py3
 | 
			
		||||
    # - env: INSTANCE=default-ubuntu-2204-3004-1-py3
 | 
			
		||||
    # - env: INSTANCE=default-ubuntu-2004-3004-1-py3
 | 
			
		||||
    # - env: INSTANCE=default-ubuntu-1804-3004-1-py3
 | 
			
		||||
    # - env: INSTANCE=default-centos-stream8-3004-1-py3
 | 
			
		||||
    # - env: INSTANCE=default-centos-7-3004-1-py3
 | 
			
		||||
    # - env: INSTANCE=default-fedora-36-3004-1-py3
 | 
			
		||||
    # - env: INSTANCE=default-fedora-35-3004-1-py3
 | 
			
		||||
    # - env: INSTANCE=default-amazonlinux-2-3004-1-py3
 | 
			
		||||
    # - env: INSTANCE=default-oraclelinux-8-3004-1-py3
 | 
			
		||||
    # - env: INSTANCE=default-oraclelinux-7-3004-1-py3
 | 
			
		||||
    # - env: INSTANCE=default-arch-base-latest-3004-1-py3
 | 
			
		||||
    # - env: INSTANCE=default-gentoo-stage3-latest-3004-1-py3
 | 
			
		||||
    # - env: INSTANCE=default-gentoo-stage3-systemd-3004-1-py3
 | 
			
		||||
    # - env: INSTANCE=default-almalinux-8-3004-1-py3
 | 
			
		||||
    # - env: INSTANCE=default-rockylinux-8-3004-1-py3
 | 
			
		||||
    # - env: INSTANCE=default-opensuse-leap-153-3004-0-py3
 | 
			
		||||
    # - env: INSTANCE=default-opensuse-tmbl-latest-3004-0-py3
 | 
			
		||||
    # - env: INSTANCE=default-debian-10-3003-4-py3
 | 
			
		||||
    # - env: INSTANCE=default-debian-9-3003-4-py3
 | 
			
		||||
    # - env: INSTANCE=default-ubuntu-2004-3003-4-py3
 | 
			
		||||
    # - env: INSTANCE=default-ubuntu-1804-3003-4-py3
 | 
			
		||||
    # - env: INSTANCE=default-centos-stream8-3003-4-py3
 | 
			
		||||
    # - env: INSTANCE=default-centos-7-3003-4-py3
 | 
			
		||||
    # - env: INSTANCE=default-amazonlinux-2-3003-4-py3
 | 
			
		||||
    # - env: INSTANCE=default-oraclelinux-8-3003-4-py3
 | 
			
		||||
    # - env: INSTANCE=default-oraclelinux-7-3003-4-py3
 | 
			
		||||
    # - env: INSTANCE=default-almalinux-8-3003-4-py3
 | 
			
		||||
 | 
			
		||||
    ## Define the release stage that runs `semantic-release`
 | 
			
		||||
    - stage: 'release'
 | 
			
		||||
      language: 'node_js'
 | 
			
		||||
      node_js: 'lts/*'
 | 
			
		||||
      env: 'Release'
 | 
			
		||||
      name: 'Run semantic-release inc. file updates to AUTHORS, CHANGELOG & FORMULA'
 | 
			
		||||
      before_install: 'skip'
 | 
			
		||||
      script:
 | 
			
		||||
        # Update `AUTHORS.md`
 | 
			
		||||
        - export MAINTAINER_TOKEN=${GH_TOKEN}
 | 
			
		||||
        - go get github.com/myii/maintainer
 | 
			
		||||
        - maintainer contributor
 | 
			
		||||
 | 
			
		||||
        # Install all dependencies required for `semantic-release`
 | 
			
		||||
        - npm i -D @semantic-release/changelog@3
 | 
			
		||||
                   @semantic-release/exec@3
 | 
			
		||||
                   @semantic-release/git@7
 | 
			
		||||
      deploy:
 | 
			
		||||
        provider: 'script'
 | 
			
		||||
        # Opt-in to `dpl v2` to complete the Travis build config validation (beta)
 | 
			
		||||
        # * https://docs.travis-ci.com/user/build-config-validation
 | 
			
		||||
        # Deprecated `skip_cleanup` can now be avoided, `cleanup: false` is by default
 | 
			
		||||
        edge: true
 | 
			
		||||
        # Run `semantic-release`
 | 
			
		||||
        script: 'npx semantic-release@15.14'
 | 
			
		||||
 | 
			
		||||
# Notification options: `always`, `never` or `change`
 | 
			
		||||
notifications:
 | 
			
		||||
  webhooks:
 | 
			
		||||
    if: 'repo = saltstack-formulas/postfix-formula'
 | 
			
		||||
    urls:
 | 
			
		||||
      - https://saltstack-formulas.zulipchat.com/api/v1/external/travis?api_key=HsIq3o5QmLxdnVCKF9is0FUIpkpAY79P&stream=CI&topic=saltstack-formulas%2Fpostfix-formula&ignore_pull_requests=true
 | 
			
		||||
    on_success: always  # default: always
 | 
			
		||||
    on_failure: always  # default: always
 | 
			
		||||
    on_start: always    # default: never
 | 
			
		||||
    on_cancel: always   # default: always
 | 
			
		||||
    on_error: always    # default: always
 | 
			
		||||
							
								
								
									
										47
									
								
								.yamllint
									
									
									
									
									
								
							
							
						
						
									
										47
									
								
								.yamllint
									
									
									
									
									
								
							@ -1,47 +0,0 @@
 | 
			
		||||
# -*- coding: utf-8 -*-
 | 
			
		||||
# vim: ft=yaml
 | 
			
		||||
---
 | 
			
		||||
# Extend the `default` configuration provided by `yamllint`
 | 
			
		||||
extends: 'default'
 | 
			
		||||
 | 
			
		||||
# Files to ignore completely
 | 
			
		||||
# 1. All YAML files under directory `.bundle/`, introduced if gems are installed locally
 | 
			
		||||
# 2. All YAML files under directory `.cache/`, introduced during the CI run
 | 
			
		||||
# 3. All YAML files under directory `.git/`
 | 
			
		||||
# 4. All YAML files under directory `node_modules/`, introduced during the CI run
 | 
			
		||||
# 5. Any SLS files under directory `test/`, which are actually state files
 | 
			
		||||
# 6. Any YAML files under directory `.kitchen/`, introduced during local testing
 | 
			
		||||
# 7. `kitchen.vagrant.yml`, which contains Embedded Ruby (ERB) template syntax
 | 
			
		||||
ignore: |
 | 
			
		||||
  .bundle/
 | 
			
		||||
  .cache/
 | 
			
		||||
  .git/
 | 
			
		||||
  node_modules/
 | 
			
		||||
  test/**/states/**/*.sls
 | 
			
		||||
  .kitchen/
 | 
			
		||||
  kitchen.vagrant.yml
 | 
			
		||||
 | 
			
		||||
yaml-files:
 | 
			
		||||
  # Default settings
 | 
			
		||||
  - '*.yaml'
 | 
			
		||||
  - '*.yml'
 | 
			
		||||
  - .salt-lint
 | 
			
		||||
  - .yamllint
 | 
			
		||||
  # SaltStack Formulas additional settings
 | 
			
		||||
  - '*.example'
 | 
			
		||||
  - test/**/*.sls
 | 
			
		||||
 | 
			
		||||
rules:
 | 
			
		||||
  empty-values:
 | 
			
		||||
    forbid-in-block-mappings: true
 | 
			
		||||
    forbid-in-flow-mappings: true
 | 
			
		||||
  key-duplicates:
 | 
			
		||||
    ignore: |
 | 
			
		||||
      pillar.example
 | 
			
		||||
  line-length:
 | 
			
		||||
    # Increase from default of `80`
 | 
			
		||||
    # Based on https://github.com/PyCQA/flake8-bugbear#opinionated-warnings (`B950`)
 | 
			
		||||
    max: 88
 | 
			
		||||
  octal-values:
 | 
			
		||||
    forbid-implicit-octal: true
 | 
			
		||||
    forbid-explicit-octal: true
 | 
			
		||||
							
								
								
									
										48
									
								
								AUTHORS.md
									
									
									
									
									
								
							
							
						
						
									
										48
									
								
								AUTHORS.md
									
									
									
									
									
								
							@ -1,48 +0,0 @@
 | 
			
		||||
# Authors
 | 
			
		||||
 | 
			
		||||
This list is sorted by the number of commits per contributor in _descending_ order.
 | 
			
		||||
 | 
			
		||||
Avatar|Contributor|Contributions
 | 
			
		||||
:-:|---|:-:
 | 
			
		||||
<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)|122
 | 
			
		||||
<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)|26
 | 
			
		||||
<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)|23
 | 
			
		||||
<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)|16
 | 
			
		||||
<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)|14
 | 
			
		||||
<img class='float-left rounded-1' src='https://avatars.githubusercontent.com/u/1920805?v=4' width='36' height='36' alt='@alxwr'>|[@alxwr](https://github.com/alxwr)|12
 | 
			
		||||
<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)|10
 | 
			
		||||
<img class='float-left rounded-1' src='https://avatars.githubusercontent.com/u/18299?v=4' width='36' height='36' alt='@davidkarlsen'>|[@davidkarlsen](https://github.com/davidkarlsen)|10
 | 
			
		||||
<img class='float-left rounded-1' src='https://avatars.githubusercontent.com/u/214768?v=4' width='36' height='36' alt='@ixs'>|[@ixs](https://github.com/ixs)|9
 | 
			
		||||
<img class='float-left rounded-1' src='https://avatars.githubusercontent.com/u/6215293?v=4' width='36' height='36' alt='@0xf10e'>|[@0xf10e](https://github.com/0xf10e)|9
 | 
			
		||||
<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)|8
 | 
			
		||||
<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/1197993?v=4' width='36' height='36' alt='@danoe'>|[@danoe](https://github.com/danoe)|6
 | 
			
		||||
<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)|4
 | 
			
		||||
<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)|4
 | 
			
		||||
<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)|3
 | 
			
		||||
<img class='float-left rounded-1' src='https://avatars.githubusercontent.com/u/732321?v=4' width='36' height='36' alt='@gtmanfred'>|[@gtmanfred](https://github.com/gtmanfred)|2
 | 
			
		||||
<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)|2
 | 
			
		||||
<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)|2
 | 
			
		||||
<img class='float-left rounded-1' src='https://avatars.githubusercontent.com/u/131665?v=4' width='36' height='36' alt='@iamseth'>|[@iamseth](https://github.com/iamseth)|2
 | 
			
		||||
<img class='float-left rounded-1' src='https://avatars.githubusercontent.com/u/4156131?v=4' width='36' height='36' alt='@skylerberg'>|[@skylerberg](https://github.com/skylerberg)|2
 | 
			
		||||
<img class='float-left rounded-1' src='https://avatars.githubusercontent.com/u/117961?v=4' width='36' height='36' alt='@babilen'>|[@babilen](https://github.com/babilen)|2
 | 
			
		||||
<img class='float-left rounded-1' src='https://avatars.githubusercontent.com/u/3180588?v=4' width='36' height='36' alt='@jeroen92'>|[@jeroen92](https://github.com/jeroen92)|2
 | 
			
		||||
<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)|2
 | 
			
		||||
<img class='float-left rounded-1' src='https://avatars.githubusercontent.com/u/762280?v=4' width='36' height='36' alt='@asenci'>|[@asenci](https://github.com/asenci)|1
 | 
			
		||||
<img class='float-left rounded-1' src='https://avatars.githubusercontent.com/u/8599847?v=4' width='36' height='36' alt='@campbellmc'>|[@campbellmc](https://github.com/campbellmc)|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/1654592?v=4' width='36' height='36' alt='@feiming'>|[@feiming](https://github.com/feiming)|1
 | 
			
		||||
<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)|1
 | 
			
		||||
<img class='float-left rounded-1' src='https://avatars.githubusercontent.com/u/12465797?v=4' width='36' height='36' alt='@hoonetorg'>|[@hoonetorg](https://github.com/hoonetorg)|1
 | 
			
		||||
<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)|1
 | 
			
		||||
<img class='float-left rounded-1' src='https://avatars.githubusercontent.com/u/611471?v=4' width='36' height='36' alt='@duk3luk3'>|[@duk3luk3](https://github.com/duk3luk3)|1
 | 
			
		||||
<img class='float-left rounded-1' src='https://avatars.githubusercontent.com/u/924183?v=4' width='36' height='36' alt='@mschiff'>|[@mschiff](https://github.com/mschiff)|1
 | 
			
		||||
<img class='float-left rounded-1' src='https://avatars.githubusercontent.com/u/6086064?v=4' width='36' height='36' alt='@mgomersbach'>|[@mgomersbach](https://github.com/mgomersbach)|1
 | 
			
		||||
<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)|1
 | 
			
		||||
<img class='float-left rounded-1' src='https://avatars.githubusercontent.com/u/1013915?v=4' width='36' height='36' alt='@rhertzog'>|[@rhertzog](https://github.com/rhertzog)|1
 | 
			
		||||
<img class='float-left rounded-1' src='https://avatars.githubusercontent.com/u/5825186?v=4' width='36' height='36' alt='@kti-richard'>|[@kti-richard](https://github.com/kti-richard)|1
 | 
			
		||||
<img class='float-left rounded-1' src='https://avatars.githubusercontent.com/u/21147643?v=4' width='36' height='36' alt='@vquiering'>|[@vquiering](https://github.com/vquiering)|1
 | 
			
		||||
 | 
			
		||||
---
 | 
			
		||||
 | 
			
		||||
Auto-generated by a [forked version](https://github.com/myii/maintainer) of [gaocegege/maintainer](https://github.com/gaocegege/maintainer) on 2022-02-13.
 | 
			
		||||
							
								
								
									
										253
									
								
								CHANGELOG.md
									
									
									
									
									
								
							
							
						
						
									
										253
									
								
								CHANGELOG.md
									
									
									
									
									
								
							@ -1,253 +0,0 @@
 | 
			
		||||
# Changelog
 | 
			
		||||
 | 
			
		||||
## [2.0.2](https://github.com/saltstack-formulas/postfix-formula/compare/v2.0.1...v2.0.2) (2022-02-13)
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
### Code Refactoring
 | 
			
		||||
 | 
			
		||||
* **salt-lint:** fix violations ([6a33d98](https://github.com/saltstack-formulas/postfix-formula/commit/6a33d98d75b7cbce3fa735f9e2c4071da0ce0355))
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
### Continuous Integration
 | 
			
		||||
 | 
			
		||||
* update linters to latest versions [skip ci] ([62eb687](https://github.com/saltstack-formulas/postfix-formula/commit/62eb687b052a31bc395f53dd9c8259ff643b449e))
 | 
			
		||||
* **gemfile:** allow rubygems proxy to be provided as an env var [skip ci] ([5d167a4](https://github.com/saltstack-formulas/postfix-formula/commit/5d167a403c253e3b9f6c68641e0b871d287d2662))
 | 
			
		||||
* **kitchen+gitlab:** update for new pre-salted images [skip ci] ([008ac83](https://github.com/saltstack-formulas/postfix-formula/commit/008ac83c7a95dc1d29ee388f0d634ff3bd9b0320))
 | 
			
		||||
 | 
			
		||||
## [2.0.1](https://github.com/saltstack-formulas/postfix-formula/compare/v2.0.0...v2.0.1) (2022-01-25)
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
### Bug Fixes
 | 
			
		||||
 | 
			
		||||
* **config:** set default_database_type; fixes [#118](https://github.com/saltstack-formulas/postfix-formula/issues/118) ([3bd3d1c](https://github.com/saltstack-formulas/postfix-formula/commit/3bd3d1c74e6dd60a984a3f790b8c50fa46ea2ed6))
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
### Code Refactoring
 | 
			
		||||
 | 
			
		||||
* **config:** add `default_database_type` as default value ([6da70d2](https://github.com/saltstack-formulas/postfix-formula/commit/6da70d21bbfbf613e6f0149c757c5e628ef227fb))
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
### Continuous Integration
 | 
			
		||||
 | 
			
		||||
* **3003.1:** update inc. AlmaLinux, Rocky & `rst-lint` [skip ci] ([3284d38](https://github.com/saltstack-formulas/postfix-formula/commit/3284d38a367d94ef57c57e88dd6698c88b0affd2))
 | 
			
		||||
* **gemfile+lock:** use `ssf` customised `inspec` repo [skip ci] ([cfed974](https://github.com/saltstack-formulas/postfix-formula/commit/cfed97400047b109a765d5cee95667f6ca1c1fd2))
 | 
			
		||||
* **kitchen:** move `provisioner` block & update `run_command` [skip ci] ([31a3836](https://github.com/saltstack-formulas/postfix-formula/commit/31a3836cd63f09d81ad88f510b61cb831436759c))
 | 
			
		||||
* **kitchen+ci:** update with `3004` pre-salted images/boxes [skip ci] ([dec042a](https://github.com/saltstack-formulas/postfix-formula/commit/dec042aa43e71785bc49247002a16d82af8c1531))
 | 
			
		||||
* **kitchen+ci:** update with latest `3003.2` pre-salted images [skip ci] ([9688f36](https://github.com/saltstack-formulas/postfix-formula/commit/9688f36aa146d584546da71fa89e04525c08aa42))
 | 
			
		||||
* **kitchen+ci:** update with latest CVE pre-salted images [skip ci] ([76134b4](https://github.com/saltstack-formulas/postfix-formula/commit/76134b47c70d98d00dfe1e6d0f3c9cc0095bda69))
 | 
			
		||||
* add `arch-master` to matrix and update `.travis.yml` [skip ci] ([c631eca](https://github.com/saltstack-formulas/postfix-formula/commit/c631eca02e2c1c03e38bcd179c9b443c22ce706d))
 | 
			
		||||
* add Debian 11 Bullseye & update `yamllint` configuration [skip ci] ([c11c07d](https://github.com/saltstack-formulas/postfix-formula/commit/c11c07d6a664da11f11c22ddd416d0501a2cb07e))
 | 
			
		||||
* **kitchen+gitlab:** adjust matrix to add `3003` [skip ci] ([04564a7](https://github.com/saltstack-formulas/postfix-formula/commit/04564a7ad6c803f70cfa487acd92dd1197563469))
 | 
			
		||||
* **kitchen+gitlab:** remove Ubuntu 16.04 & Fedora 32 (EOL) [skip ci] ([d56006f](https://github.com/saltstack-formulas/postfix-formula/commit/d56006f8d2dac568c06c4e1e83b076acfe49a80c))
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
### Tests
 | 
			
		||||
 | 
			
		||||
* standardise use of `share` suite & `_mapdata` state [skip ci] ([4c394a7](https://github.com/saltstack-formulas/postfix-formula/commit/4c394a76faea4301df4708854edd39d37a13935d))
 | 
			
		||||
 | 
			
		||||
# [2.0.0](https://github.com/saltstack-formulas/postfix-formula/compare/v1.2.2...v2.0.0) (2021-03-15)
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
### Bug Fixes
 | 
			
		||||
 | 
			
		||||
* **resources:** make resources' IDs unique ([03ad48b](https://github.com/saltstack-formulas/postfix-formula/commit/03ad48b8a4b0b05144d449c9caee998ad6d0628f))
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
### Continuous Integration
 | 
			
		||||
 | 
			
		||||
* **commitlint:** ensure `upstream/master` uses main repo URL [skip ci] ([381b150](https://github.com/saltstack-formulas/postfix-formula/commit/381b150b0f1d0ab41e60f0ac95a7a6163633d701))
 | 
			
		||||
* **gemfile+lock:** use `ssf` customised `kitchen-docker` repo [skip ci] ([c5851e6](https://github.com/saltstack-formulas/postfix-formula/commit/c5851e67a2125c5367b3ab97b46c6407aa66eaf1))
 | 
			
		||||
* **gitlab-ci:** add `rubocop` linter (with `allow_failure`) [skip ci] ([22fa184](https://github.com/saltstack-formulas/postfix-formula/commit/22fa184b14e88a05d4c4284c459a7d887501e404))
 | 
			
		||||
* **gitlab-ci:** use GitLab CI as Travis CI replacement ([890f3ae](https://github.com/saltstack-formulas/postfix-formula/commit/890f3aebc63484d07f887c870f2825797ba504e9))
 | 
			
		||||
* **kitchen+ci:** use latest pre-salted images (after CVE) [skip ci] ([19617a0](https://github.com/saltstack-formulas/postfix-formula/commit/19617a0ad710914c8f4439044d7bf993e1effcc8))
 | 
			
		||||
* **kitchen+gitlab-ci:** use latest pre-salted images [skip ci] ([d65a7a3](https://github.com/saltstack-formulas/postfix-formula/commit/d65a7a36c28e3881b058e9c5b898a0f39c5e1ca7))
 | 
			
		||||
* **pre-commit:** add to formula [skip ci] ([f41392d](https://github.com/saltstack-formulas/postfix-formula/commit/f41392d4504cb60b2fcf2c818cfe97f5487e2844))
 | 
			
		||||
* **pre-commit:** enable/disable `rstcheck` as relevant [skip ci] ([fb5be95](https://github.com/saltstack-formulas/postfix-formula/commit/fb5be9504ec18c86bab4f387bf62ba816b3ffa64))
 | 
			
		||||
* **pre-commit:** finalise `rstcheck` configuration [skip ci] ([75941ed](https://github.com/saltstack-formulas/postfix-formula/commit/75941ed61443c84c27fea864d0529461564d8969))
 | 
			
		||||
* **pre-commit:** update hook for `rubocop` [skip ci] ([c60d58e](https://github.com/saltstack-formulas/postfix-formula/commit/c60d58eb1168c031c12d656c9605f83afebc9fa1))
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
### BREAKING CHANGES
 | 
			
		||||
 | 
			
		||||
* **resources:** as all resources' IDs changed, other formulas
 | 
			
		||||
depending on this formula's resources will need to be modified
 | 
			
		||||
accordingly.
 | 
			
		||||
 | 
			
		||||
## [1.2.2](https://github.com/saltstack-formulas/postfix-formula/compare/v1.2.1...v1.2.2) (2020-10-02)
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
### Styles
 | 
			
		||||
 | 
			
		||||
* prepend modes with 0 ([fdc127c](https://github.com/saltstack-formulas/postfix-formula/commit/fdc127c8db7b19fac9be907ca511b17d5f5c4be0))
 | 
			
		||||
* quote modes/numbers ([b9c4fba](https://github.com/saltstack-formulas/postfix-formula/commit/b9c4fbadaf164c1589a27af45fbde7092e6a1d8a))
 | 
			
		||||
 | 
			
		||||
## [1.2.1](https://github.com/saltstack-formulas/postfix-formula/compare/v1.2.0...v1.2.1) (2020-09-27)
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
### Styles
 | 
			
		||||
 | 
			
		||||
* linting for `yamllint` ([780dc9d](https://github.com/saltstack-formulas/postfix-formula/commit/780dc9d372328f0b7ae08425abf1e1f32ed4b49e))
 | 
			
		||||
 | 
			
		||||
# [1.2.0](https://github.com/saltstack-formulas/postfix-formula/compare/v1.1.0...v1.2.0) (2020-07-20)
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
### Features
 | 
			
		||||
 | 
			
		||||
* **maps:** add more map types and tests ([e3970df](https://github.com/saltstack-formulas/postfix-formula/commit/e3970dfc3eac57b7a4f8911ef48d8652f3a26cd7))
 | 
			
		||||
 | 
			
		||||
# [1.1.0](https://github.com/saltstack-formulas/postfix-formula/compare/v1.0.3...v1.1.0) (2020-07-18)
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
### Continuous Integration
 | 
			
		||||
 | 
			
		||||
* **kitchen:** use `saltimages` Docker Hub where available [skip ci] ([2ddd417](https://github.com/saltstack-formulas/postfix-formula/commit/2ddd417039d8cb6f8241036c60ee0e6d534aab00))
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
### Features
 | 
			
		||||
 | 
			
		||||
* **config:** run postmap also for regexp maps ([7584fce](https://github.com/saltstack-formulas/postfix-formula/commit/7584fce0aff912b3aeaf44e6eed82a4c9c267535))
 | 
			
		||||
 | 
			
		||||
## [1.0.3](https://github.com/saltstack-formulas/postfix-formula/compare/v1.0.2...v1.0.3) (2020-06-08)
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
### Bug Fixes
 | 
			
		||||
 | 
			
		||||
* **deps:** fixes ordering where postmap requires sane main.cf ([a28bd05](https://github.com/saltstack-formulas/postfix-formula/commit/a28bd05b852c309e70aa8ff0491c12271ddd4461))
 | 
			
		||||
* **test:** use specific ip to workaround centos bug ([273caf9](https://github.com/saltstack-formulas/postfix-formula/commit/273caf9b6f42a4127025f9d2d862806653b661c2))
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
### Tests
 | 
			
		||||
 | 
			
		||||
* **default:** add inspec for base and maps ([2a61498](https://github.com/saltstack-formulas/postfix-formula/commit/2a61498fa440b2eef26849c2b0bc2dadf27b2dee))
 | 
			
		||||
 | 
			
		||||
## [1.0.2](https://github.com/saltstack-formulas/postfix-formula/compare/v1.0.1...v1.0.2) (2020-06-07)
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
### Bug Fixes
 | 
			
		||||
 | 
			
		||||
* **opensuse:** fixes config files generation in opensuse ([067bcf6](https://github.com/saltstack-formulas/postfix-formula/commit/067bcf636face6b3a3cb40418758641354ac2402))
 | 
			
		||||
 | 
			
		||||
## [1.0.1](https://github.com/saltstack-formulas/postfix-formula/compare/v1.0.0...v1.0.1) (2020-06-07)
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
### Bug Fixes
 | 
			
		||||
 | 
			
		||||
* **main:** fix postconf warning when reloading/starting ([04003c6](https://github.com/saltstack-formulas/postfix-formula/commit/04003c6ee33d5699cc392f7e74f81d27547b5f6e))
 | 
			
		||||
 | 
			
		||||
# [1.0.0](https://github.com/saltstack-formulas/postfix-formula/compare/v0.19.0...v1.0.0) (2020-06-06)
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
### Code Refactoring
 | 
			
		||||
 | 
			
		||||
* **maps:** move tls_policy and transport to mapping section ([06276fd](https://github.com/saltstack-formulas/postfix-formula/commit/06276fd7431e1675795be95c0c8ebb01772ea740))
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
### Continuous Integration
 | 
			
		||||
 | 
			
		||||
* **kitchen+travis:** use latest pre-salted images ([b364744](https://github.com/saltstack-formulas/postfix-formula/commit/b364744e40b484397fea5c2c1767f77728649de8))
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
### BREAKING CHANGES
 | 
			
		||||
 | 
			
		||||
* **maps:** `transport` and `tls_policy` keys in `postfix:config` have been moved to the standard `postfix:mapping`.
 | 
			
		||||
 | 
			
		||||
# [0.19.0](https://github.com/saltstack-formulas/postfix-formula/compare/v0.18.2...v0.19.0) (2020-05-23)
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
### Continuous Integration
 | 
			
		||||
 | 
			
		||||
* **travis:** add notifications => zulip [skip ci] ([c78c421](https://github.com/saltstack-formulas/postfix-formula/commit/c78c4219846f8c384623da7dd74d4e9a5e419b74))
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
### Features
 | 
			
		||||
 | 
			
		||||
* **maps:** adds tls_policy map for smtp delivery ([d87da4a](https://github.com/saltstack-formulas/postfix-formula/commit/d87da4adc49d18674f35e40a948ad88fefaf26f6))
 | 
			
		||||
 | 
			
		||||
## [0.18.2](https://github.com/saltstack-formulas/postfix-formula/compare/v0.18.1...v0.18.2) (2020-05-12)
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
### Bug Fixes
 | 
			
		||||
 | 
			
		||||
* make necessary modifications to get working on `salt-ssh` ([34a112f](https://github.com/saltstack-formulas/postfix-formula/commit/34a112faabba46d95b102afa3add5b797dda2ce1)), closes [/freenode.logbot.info/saltstack-formulas/20200507#c3819526-c3819581](https://github.com//freenode.logbot.info/saltstack-formulas/20200507/issues/c3819526-c3819581) [/freenode.logbot.info/saltstack-formulas/20200508#c3826763-c3826995](https://github.com//freenode.logbot.info/saltstack-formulas/20200508/issues/c3826763-c3826995)
 | 
			
		||||
* **release.config.js:** use full commit hash in commit link [skip ci] ([ffbe5aa](https://github.com/saltstack-formulas/postfix-formula/commit/ffbe5aad13e73a4e3aa1c6dbd24488ebd73436ee))
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
### Continuous Integration
 | 
			
		||||
 | 
			
		||||
* **gemfile:** restrict `train` gem version until upstream fix [skip ci] ([80cdd9d](https://github.com/saltstack-formulas/postfix-formula/commit/80cdd9d202b6dbbc43aa02025bb7d9738aad8ee7))
 | 
			
		||||
* **gemfile.lock:** add to repo with updated `Gemfile` [skip ci] ([497221d](https://github.com/saltstack-formulas/postfix-formula/commit/497221d1de7356cb031f78597781fa05897ca0a9))
 | 
			
		||||
* **kitchen:** avoid using bootstrap for `master` instances [skip ci] ([708b0a5](https://github.com/saltstack-formulas/postfix-formula/commit/708b0a51d9378ef44c0df125f532deea44f07044))
 | 
			
		||||
* **kitchen:** use `debian-10-master-py3` instead of `develop` [skip ci] ([90098c0](https://github.com/saltstack-formulas/postfix-formula/commit/90098c0cdfa856f9e3ca7772e8fb52e014d70d55))
 | 
			
		||||
* **kitchen:** use `develop` image until `master` is ready (`amazonlinux`) [skip ci] ([df76c72](https://github.com/saltstack-formulas/postfix-formula/commit/df76c72dcee4ff87f104b13880ddc32b163e2db6))
 | 
			
		||||
* **kitchen+travis:** remove `master-py2-arch-base-latest` [skip ci] ([46d0f3d](https://github.com/saltstack-formulas/postfix-formula/commit/46d0f3d1d8b9b7373068c9182a593c8ed96e1bcd))
 | 
			
		||||
* **kitchen+travis:** upgrade matrix after `2019.2.2` release [skip ci] ([70fc491](https://github.com/saltstack-formulas/postfix-formula/commit/70fc49122ed6213a4e93fc5280bf5744af969f86))
 | 
			
		||||
* **travis:** apply changes from build config validation [skip ci] ([f25db2d](https://github.com/saltstack-formulas/postfix-formula/commit/f25db2d5f3c2394e29f36cf33d2166c5af73fa40))
 | 
			
		||||
* **travis:** opt-in to `dpl v2` to complete build config validation [skip ci] ([8f4db70](https://github.com/saltstack-formulas/postfix-formula/commit/8f4db70ece851dea547550cfabb4b770eaf0796b))
 | 
			
		||||
* **travis:** quote pathspecs used with `git ls-files` [skip ci] ([6d18d1d](https://github.com/saltstack-formulas/postfix-formula/commit/6d18d1dc93c92c4ba85f340c541d3a69f557d74e))
 | 
			
		||||
* **travis:** run `shellcheck` during lint job [skip ci] ([29efb81](https://github.com/saltstack-formulas/postfix-formula/commit/29efb819fc9d4bf273b57c15d01dfb390642b3d5))
 | 
			
		||||
* **travis:** update `salt-lint` config for `v0.0.10` [skip ci] ([b23168e](https://github.com/saltstack-formulas/postfix-formula/commit/b23168e69ec8823ad9382b6c9c3be8f743d3b8e3))
 | 
			
		||||
* **travis:** use `major.minor` for `semantic-release` version [skip ci] ([964e3ef](https://github.com/saltstack-formulas/postfix-formula/commit/964e3ef0fa6613380c56b1b2044e6f37dd797c6c))
 | 
			
		||||
* **travis:** use build config validation (beta) [skip ci] ([1ab8692](https://github.com/saltstack-formulas/postfix-formula/commit/1ab8692f31bdfcf5a24d7049c254d1b71d090e21))
 | 
			
		||||
* **workflows/commitlint:** add to repo [skip ci] ([43a7353](https://github.com/saltstack-formulas/postfix-formula/commit/43a7353caec2908e1d6aabab11c198c1806412f5))
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
### Documentation
 | 
			
		||||
 | 
			
		||||
* **contributing:** remove to use org-level file instead [skip ci] ([a33757a](https://github.com/saltstack-formulas/postfix-formula/commit/a33757a6ad445fc7e209f32c6ceb5b2309e11d03))
 | 
			
		||||
* **readme:** update link to `CONTRIBUTING` [skip ci] ([50b9808](https://github.com/saltstack-formulas/postfix-formula/commit/50b9808a3bd094de30439ff788b6f58ea72051ba))
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
### Performance Improvements
 | 
			
		||||
 | 
			
		||||
* **travis:** improve `salt-lint` invocation [skip ci] ([2ece69c](https://github.com/saltstack-formulas/postfix-formula/commit/2ece69c3c12ffd9696a5836bf3ed7992af58e8ab))
 | 
			
		||||
 | 
			
		||||
## [0.18.1](https://github.com/saltstack-formulas/postfix-formula/compare/v0.18.0...v0.18.1) (2019-10-11)
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
### Bug Fixes
 | 
			
		||||
 | 
			
		||||
* **rubocop:** add fixes using `rubocop --safe-auto-correct` ([](https://github.com/saltstack-formulas/postfix-formula/commit/87dd217))
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
### Continuous Integration
 | 
			
		||||
 | 
			
		||||
* **kitchen:** change `log_level` to `debug` instead of `info` ([](https://github.com/saltstack-formulas/postfix-formula/commit/17734cb))
 | 
			
		||||
* **kitchen:** install required packages to bootstrapped `opensuse` [skip ci] ([](https://github.com/saltstack-formulas/postfix-formula/commit/5127bee))
 | 
			
		||||
* **kitchen:** use bootstrapped `opensuse` images until `2019.2.2` [skip ci] ([](https://github.com/saltstack-formulas/postfix-formula/commit/79df4ce))
 | 
			
		||||
* **platform:** add `arch-base-latest` ([](https://github.com/saltstack-formulas/postfix-formula/commit/16e6f58))
 | 
			
		||||
* merge travis matrix, add `salt-lint` & `rubocop` to `lint` job ([](https://github.com/saltstack-formulas/postfix-formula/commit/0c0a228))
 | 
			
		||||
* merge travis matrix, add `salt-lint` & `rubocop` to `lint` job ([](https://github.com/saltstack-formulas/postfix-formula/commit/1ec88a4))
 | 
			
		||||
* use `dist: bionic` & apply `opensuse-leap-15` SCP error workaround ([](https://github.com/saltstack-formulas/postfix-formula/commit/bbbc260))
 | 
			
		||||
* **travis:** merge `rubocop` linter into main `lint` job ([](https://github.com/saltstack-formulas/postfix-formula/commit/508074a))
 | 
			
		||||
* **yamllint:** add rule `empty-values` & use new `yaml-files` setting ([](https://github.com/saltstack-formulas/postfix-formula/commit/c9a4fc7))
 | 
			
		||||
 | 
			
		||||
# [0.18.0](https://github.com/saltstack-formulas/postfix-formula/compare/v0.17.1...v0.18.0) (2019-09-01)
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
### Continuous Integration
 | 
			
		||||
 | 
			
		||||
* **kitchen+travis:** replace EOL pre-salted images ([8996d28](https://github.com/saltstack-formulas/postfix-formula/commit/8996d28))
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
### Features
 | 
			
		||||
 | 
			
		||||
* **yamllint:** include for this repo and apply rules throughout ([b4fbac2](https://github.com/saltstack-formulas/postfix-formula/commit/b4fbac2))
 | 
			
		||||
 | 
			
		||||
## [0.17.1](https://github.com/saltstack-formulas/postfix-formula/compare/v0.17.0...v0.17.1) (2019-07-26)
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
### Bug Fixes
 | 
			
		||||
 | 
			
		||||
* **service:** restart service on package change ([75358e0](https://github.com/saltstack-formulas/postfix-formula/commit/75358e0))
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
### Continuous Integration
 | 
			
		||||
 | 
			
		||||
* **kitchen+travis:** modify matrix to include `develop` platform ([b505a5d](https://github.com/saltstack-formulas/postfix-formula/commit/b505a5d))
 | 
			
		||||
 | 
			
		||||
# [0.17.0](https://github.com/saltstack-formulas/postfix-formula/compare/v0.16.0...v0.17.0) (2019-06-03)
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
### Features
 | 
			
		||||
 | 
			
		||||
* **semantic-release:** implement an automated changelog ([3161504](https://github.com/saltstack-formulas/postfix-formula/commit/3161504))
 | 
			
		||||
							
								
								
									
										50
									
								
								CODEOWNERS
									
									
									
									
									
								
							
							
						
						
									
										50
									
								
								CODEOWNERS
									
									
									
									
									
								
							@ -1,50 +0,0 @@
 | 
			
		||||
# https://help.github.com/en/github/creating-cloning-and-archiving-repositories/about-code-owners
 | 
			
		||||
 | 
			
		||||
# SECTION: Owner(s) for everything in the repo, unless a later match takes precedence
 | 
			
		||||
# FILE PATTERN                              OWNER(S)
 | 
			
		||||
*                                           @fzipi
 | 
			
		||||
 | 
			
		||||
# SECTION: Owner(s) for specific directories
 | 
			
		||||
# FILE PATTERN                              OWNER(S)
 | 
			
		||||
 | 
			
		||||
# SECTION: Owner(s) for files/directories related to `semantic-release`
 | 
			
		||||
# FILE PATTERN                              OWNER(S)
 | 
			
		||||
/.github/workflows/                         @saltstack-formulas/ssf
 | 
			
		||||
/bin/install-hooks                          @saltstack-formulas/ssf
 | 
			
		||||
/bin/kitchen                                @saltstack-formulas/ssf
 | 
			
		||||
/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
 | 
			
		||||
/test/salt/pillar/top.sls                   @saltstack-formulas/ssf
 | 
			
		||||
/.gitignore                                 @saltstack-formulas/ssf
 | 
			
		||||
/.cirrus.yml                                @saltstack-formulas/ssf
 | 
			
		||||
/.gitlab-ci.yml                             @saltstack-formulas/ssf
 | 
			
		||||
/.pre-commit-config.yaml                    @saltstack-formulas/ssf
 | 
			
		||||
/.rstcheck.cfg                              @saltstack-formulas/ssf
 | 
			
		||||
/.rubocop.yml                               @saltstack-formulas/ssf
 | 
			
		||||
/.salt-lint                                 @saltstack-formulas/ssf
 | 
			
		||||
/.travis.yml                                @saltstack-formulas/ssf
 | 
			
		||||
/.yamllint                                  @saltstack-formulas/ssf
 | 
			
		||||
/AUTHORS.md                                 @saltstack-formulas/ssf
 | 
			
		||||
/CHANGELOG.md                               @saltstack-formulas/ssf
 | 
			
		||||
/CODEOWNERS                                 @saltstack-formulas/ssf
 | 
			
		||||
/commitlint.config.js                       @saltstack-formulas/ssf
 | 
			
		||||
/FORMULA                                    @saltstack-formulas/ssf
 | 
			
		||||
/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
 | 
			
		||||
 | 
			
		||||
# SECTION: Owner(s) for specific files
 | 
			
		||||
# FILE PATTERN                              OWNER(S)
 | 
			
		||||
							
								
								
									
										9
									
								
								FORMULA
									
									
									
									
									
								
							
							
						
						
									
										9
									
								
								FORMULA
									
									
									
									
									
								
							@ -1,9 +0,0 @@
 | 
			
		||||
name: postfix
 | 
			
		||||
os: Debian, Ubuntu, Raspbian, RedHat, Fedora, CentOS, Suse, openSUSE
 | 
			
		||||
os_family: Debian, RedHat, Suse
 | 
			
		||||
version: 2.0.2
 | 
			
		||||
release: 1
 | 
			
		||||
minimum_version: 2016.11
 | 
			
		||||
summary: Postfix formula
 | 
			
		||||
description: Formula to install and configure Postfix mail server
 | 
			
		||||
top_level_dir: postfix
 | 
			
		||||
							
								
								
									
										19
									
								
								Gemfile
									
									
									
									
									
								
							
							
						
						
									
										19
									
								
								Gemfile
									
									
									
									
									
								
							@ -1,19 +0,0 @@
 | 
			
		||||
# frozen_string_literal: true
 | 
			
		||||
 | 
			
		||||
source ENV.fetch('PROXY_RUBYGEMSORG', 'https://rubygems.org')
 | 
			
		||||
 | 
			
		||||
# Install the `inspec` gem using `git` because versions after `4.22.22`
 | 
			
		||||
# suppress diff output; this version fixes this for our uses.
 | 
			
		||||
# rubocop:disable Layout/LineLength
 | 
			
		||||
gem 'inspec', git: 'https://gitlab.com/saltstack-formulas/infrastructure/inspec', branch: 'ssf'
 | 
			
		||||
# rubocop:enable Layout/LineLength
 | 
			
		||||
 | 
			
		||||
# Install the `kitchen-docker` gem using `git` in order to gain a performance
 | 
			
		||||
# improvement: avoid package installations which are already covered by the
 | 
			
		||||
# `salt-image-builder` (i.e. the pre-salted images that we're using)
 | 
			
		||||
# 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.5.0'
 | 
			
		||||
gem 'kitchen-salt', '>= 0.7.2'
 | 
			
		||||
							
								
								
									
										675
									
								
								Gemfile.lock
									
									
									
									
									
								
							
							
						
						
									
										675
									
								
								Gemfile.lock
									
									
									
									
									
								
							@ -1,675 +0,0 @@
 | 
			
		||||
GIT
 | 
			
		||||
  remote: https://gitlab.com/saltstack-formulas/infrastructure/inspec
 | 
			
		||||
  revision: aaef842906a5666f0fc0b4f186b4dd3498f5b28c
 | 
			
		||||
  branch: ssf
 | 
			
		||||
  specs:
 | 
			
		||||
    inspec (5.18.15)
 | 
			
		||||
      cookstyle
 | 
			
		||||
      faraday_middleware (>= 0.12.2, < 1.1)
 | 
			
		||||
      inspec-core (= 5.18.15)
 | 
			
		||||
      mongo (= 2.13.2)
 | 
			
		||||
      progress_bar (~> 1.3.3)
 | 
			
		||||
      rake
 | 
			
		||||
      train (~> 3.10)
 | 
			
		||||
      train-aws (~> 0.2)
 | 
			
		||||
      train-habitat (~> 0.1)
 | 
			
		||||
      train-winrm (~> 0.2)
 | 
			
		||||
    inspec-core (5.18.15)
 | 
			
		||||
      addressable (~> 2.4)
 | 
			
		||||
      chef-telemetry (~> 1.0, >= 1.0.8)
 | 
			
		||||
      faraday (>= 0.9.0, < 1.5)
 | 
			
		||||
      faraday_middleware (~> 1.0)
 | 
			
		||||
      hashie (>= 3.4, < 5.0)
 | 
			
		||||
      license-acceptance (>= 0.2.13, < 3.0)
 | 
			
		||||
      method_source (>= 0.8, < 2.0)
 | 
			
		||||
      mixlib-log (~> 3.0)
 | 
			
		||||
      multipart-post (~> 2.0)
 | 
			
		||||
      parallel (~> 1.9)
 | 
			
		||||
      parslet (>= 1.5, < 2.0)
 | 
			
		||||
      pry (~> 0.13)
 | 
			
		||||
      rspec (>= 3.9, <= 3.11)
 | 
			
		||||
      rspec-its (~> 1.2)
 | 
			
		||||
      rubyzip (>= 1.2.2, < 3.0)
 | 
			
		||||
      semverse (~> 3.0)
 | 
			
		||||
      sslshake (~> 1.2)
 | 
			
		||||
      thor (>= 0.20, < 2.0)
 | 
			
		||||
      tomlrb (>= 1.2, < 2.1)
 | 
			
		||||
      train-core (~> 3.10)
 | 
			
		||||
      tty-prompt (~> 0.17)
 | 
			
		||||
      tty-table (~> 0.10)
 | 
			
		||||
 | 
			
		||||
GIT
 | 
			
		||||
  remote: https://gitlab.com/saltstack-formulas/infrastructure/kitchen-docker
 | 
			
		||||
  revision: 9a09bc1e571e25f3ccabf4725ca2048d970fff82
 | 
			
		||||
  branch: ssf
 | 
			
		||||
  specs:
 | 
			
		||||
    kitchen-docker (2.12.0)
 | 
			
		||||
      test-kitchen (>= 1.0.0)
 | 
			
		||||
 | 
			
		||||
GEM
 | 
			
		||||
  remote: https://rubygems.org/
 | 
			
		||||
  specs:
 | 
			
		||||
    activesupport (7.0.3.1)
 | 
			
		||||
      concurrent-ruby (~> 1.0, >= 1.0.2)
 | 
			
		||||
      i18n (>= 1.6, < 2)
 | 
			
		||||
      minitest (>= 5.1)
 | 
			
		||||
      tzinfo (~> 2.0)
 | 
			
		||||
    addressable (2.8.0)
 | 
			
		||||
      public_suffix (>= 2.0.2, < 5.0)
 | 
			
		||||
    ast (2.4.2)
 | 
			
		||||
    aws-eventstream (1.2.0)
 | 
			
		||||
    aws-partitions (1.607.0)
 | 
			
		||||
    aws-sdk-alexaforbusiness (1.56.0)
 | 
			
		||||
      aws-sdk-core (~> 3, >= 3.127.0)
 | 
			
		||||
      aws-sigv4 (~> 1.1)
 | 
			
		||||
    aws-sdk-amplify (1.32.0)
 | 
			
		||||
      aws-sdk-core (~> 3, >= 3.120.0)
 | 
			
		||||
      aws-sigv4 (~> 1.1)
 | 
			
		||||
    aws-sdk-apigateway (1.78.0)
 | 
			
		||||
      aws-sdk-core (~> 3, >= 3.127.0)
 | 
			
		||||
      aws-sigv4 (~> 1.1)
 | 
			
		||||
    aws-sdk-apigatewayv2 (1.42.0)
 | 
			
		||||
      aws-sdk-core (~> 3, >= 3.127.0)
 | 
			
		||||
      aws-sigv4 (~> 1.1)
 | 
			
		||||
    aws-sdk-applicationautoscaling (1.51.0)
 | 
			
		||||
      aws-sdk-core (~> 3, >= 3.112.0)
 | 
			
		||||
      aws-sigv4 (~> 1.1)
 | 
			
		||||
    aws-sdk-athena (1.55.0)
 | 
			
		||||
      aws-sdk-core (~> 3, >= 3.127.0)
 | 
			
		||||
      aws-sigv4 (~> 1.1)
 | 
			
		||||
    aws-sdk-autoscaling (1.63.0)
 | 
			
		||||
      aws-sdk-core (~> 3, >= 3.112.0)
 | 
			
		||||
      aws-sigv4 (~> 1.1)
 | 
			
		||||
    aws-sdk-batch (1.47.0)
 | 
			
		||||
      aws-sdk-core (~> 3, >= 3.112.0)
 | 
			
		||||
      aws-sigv4 (~> 1.1)
 | 
			
		||||
    aws-sdk-budgets (1.50.0)
 | 
			
		||||
      aws-sdk-core (~> 3, >= 3.127.0)
 | 
			
		||||
      aws-sigv4 (~> 1.1)
 | 
			
		||||
    aws-sdk-cloudformation (1.70.0)
 | 
			
		||||
      aws-sdk-core (~> 3, >= 3.127.0)
 | 
			
		||||
      aws-sigv4 (~> 1.1)
 | 
			
		||||
    aws-sdk-cloudfront (1.65.0)
 | 
			
		||||
      aws-sdk-core (~> 3, >= 3.127.0)
 | 
			
		||||
      aws-sigv4 (~> 1.1)
 | 
			
		||||
    aws-sdk-cloudhsm (1.39.0)
 | 
			
		||||
      aws-sdk-core (~> 3, >= 3.127.0)
 | 
			
		||||
      aws-sigv4 (~> 1.1)
 | 
			
		||||
    aws-sdk-cloudhsmv2 (1.42.0)
 | 
			
		||||
      aws-sdk-core (~> 3, >= 3.127.0)
 | 
			
		||||
      aws-sigv4 (~> 1.1)
 | 
			
		||||
    aws-sdk-cloudtrail (1.49.0)
 | 
			
		||||
      aws-sdk-core (~> 3, >= 3.127.0)
 | 
			
		||||
      aws-sigv4 (~> 1.1)
 | 
			
		||||
    aws-sdk-cloudwatch (1.64.0)
 | 
			
		||||
      aws-sdk-core (~> 3, >= 3.127.0)
 | 
			
		||||
      aws-sigv4 (~> 1.1)
 | 
			
		||||
    aws-sdk-cloudwatchevents (1.46.0)
 | 
			
		||||
      aws-sdk-core (~> 3, >= 3.112.0)
 | 
			
		||||
      aws-sigv4 (~> 1.1)
 | 
			
		||||
    aws-sdk-cloudwatchlogs (1.53.0)
 | 
			
		||||
      aws-sdk-core (~> 3, >= 3.127.0)
 | 
			
		||||
      aws-sigv4 (~> 1.1)
 | 
			
		||||
    aws-sdk-codecommit (1.51.0)
 | 
			
		||||
      aws-sdk-core (~> 3, >= 3.127.0)
 | 
			
		||||
      aws-sigv4 (~> 1.1)
 | 
			
		||||
    aws-sdk-codedeploy (1.49.0)
 | 
			
		||||
      aws-sdk-core (~> 3, >= 3.127.0)
 | 
			
		||||
      aws-sigv4 (~> 1.1)
 | 
			
		||||
    aws-sdk-codepipeline (1.53.0)
 | 
			
		||||
      aws-sdk-core (~> 3, >= 3.127.0)
 | 
			
		||||
      aws-sigv4 (~> 1.1)
 | 
			
		||||
    aws-sdk-cognitoidentity (1.31.0)
 | 
			
		||||
      aws-sdk-core (~> 3, >= 3.112.0)
 | 
			
		||||
      aws-sigv4 (~> 1.1)
 | 
			
		||||
    aws-sdk-cognitoidentityprovider (1.53.0)
 | 
			
		||||
      aws-sdk-core (~> 3, >= 3.112.0)
 | 
			
		||||
      aws-sigv4 (~> 1.1)
 | 
			
		||||
    aws-sdk-configservice (1.79.0)
 | 
			
		||||
      aws-sdk-core (~> 3, >= 3.127.0)
 | 
			
		||||
      aws-sigv4 (~> 1.1)
 | 
			
		||||
    aws-sdk-core (3.131.2)
 | 
			
		||||
      aws-eventstream (~> 1, >= 1.0.2)
 | 
			
		||||
      aws-partitions (~> 1, >= 1.525.0)
 | 
			
		||||
      aws-sigv4 (~> 1.1)
 | 
			
		||||
      jmespath (~> 1, >= 1.6.1)
 | 
			
		||||
    aws-sdk-costandusagereportservice (1.40.0)
 | 
			
		||||
      aws-sdk-core (~> 3, >= 3.127.0)
 | 
			
		||||
      aws-sigv4 (~> 1.1)
 | 
			
		||||
    aws-sdk-databasemigrationservice (1.53.0)
 | 
			
		||||
      aws-sdk-core (~> 3, >= 3.112.0)
 | 
			
		||||
      aws-sigv4 (~> 1.1)
 | 
			
		||||
    aws-sdk-dynamodb (1.75.0)
 | 
			
		||||
      aws-sdk-core (~> 3, >= 3.127.0)
 | 
			
		||||
      aws-sigv4 (~> 1.1)
 | 
			
		||||
    aws-sdk-ec2 (1.322.0)
 | 
			
		||||
      aws-sdk-core (~> 3, >= 3.127.0)
 | 
			
		||||
      aws-sigv4 (~> 1.1)
 | 
			
		||||
    aws-sdk-ecr (1.56.0)
 | 
			
		||||
      aws-sdk-core (~> 3, >= 3.127.0)
 | 
			
		||||
      aws-sigv4 (~> 1.1)
 | 
			
		||||
    aws-sdk-ecrpublic (1.12.0)
 | 
			
		||||
      aws-sdk-core (~> 3, >= 3.127.0)
 | 
			
		||||
      aws-sigv4 (~> 1.1)
 | 
			
		||||
    aws-sdk-ecs (1.100.0)
 | 
			
		||||
      aws-sdk-core (~> 3, >= 3.127.0)
 | 
			
		||||
      aws-sigv4 (~> 1.1)
 | 
			
		||||
    aws-sdk-efs (1.54.0)
 | 
			
		||||
      aws-sdk-core (~> 3, >= 3.127.0)
 | 
			
		||||
      aws-sigv4 (~> 1.1)
 | 
			
		||||
    aws-sdk-eks (1.75.0)
 | 
			
		||||
      aws-sdk-core (~> 3, >= 3.127.0)
 | 
			
		||||
      aws-sigv4 (~> 1.1)
 | 
			
		||||
    aws-sdk-elasticache (1.78.0)
 | 
			
		||||
      aws-sdk-core (~> 3, >= 3.127.0)
 | 
			
		||||
      aws-sigv4 (~> 1.1)
 | 
			
		||||
    aws-sdk-elasticbeanstalk (1.51.0)
 | 
			
		||||
      aws-sdk-core (~> 3, >= 3.127.0)
 | 
			
		||||
      aws-sigv4 (~> 1.1)
 | 
			
		||||
    aws-sdk-elasticloadbalancing (1.40.0)
 | 
			
		||||
      aws-sdk-core (~> 3, >= 3.127.0)
 | 
			
		||||
      aws-sigv4 (~> 1.1)
 | 
			
		||||
    aws-sdk-elasticloadbalancingv2 (1.78.0)
 | 
			
		||||
      aws-sdk-core (~> 3, >= 3.127.0)
 | 
			
		||||
      aws-sigv4 (~> 1.1)
 | 
			
		||||
    aws-sdk-elasticsearchservice (1.65.0)
 | 
			
		||||
      aws-sdk-core (~> 3, >= 3.127.0)
 | 
			
		||||
      aws-sigv4 (~> 1.1)
 | 
			
		||||
    aws-sdk-emr (1.53.0)
 | 
			
		||||
      aws-sdk-core (~> 3, >= 3.121.2)
 | 
			
		||||
      aws-sigv4 (~> 1.1)
 | 
			
		||||
    aws-sdk-eventbridge (1.24.0)
 | 
			
		||||
      aws-sdk-core (~> 3, >= 3.112.0)
 | 
			
		||||
      aws-sigv4 (~> 1.1)
 | 
			
		||||
    aws-sdk-firehose (1.48.0)
 | 
			
		||||
      aws-sdk-core (~> 3, >= 3.127.0)
 | 
			
		||||
      aws-sigv4 (~> 1.1)
 | 
			
		||||
    aws-sdk-glue (1.88.0)
 | 
			
		||||
      aws-sdk-core (~> 3, >= 3.112.0)
 | 
			
		||||
      aws-sigv4 (~> 1.1)
 | 
			
		||||
    aws-sdk-guardduty (1.58.0)
 | 
			
		||||
      aws-sdk-core (~> 3, >= 3.127.0)
 | 
			
		||||
      aws-sigv4 (~> 1.1)
 | 
			
		||||
    aws-sdk-iam (1.69.0)
 | 
			
		||||
      aws-sdk-core (~> 3, >= 3.127.0)
 | 
			
		||||
      aws-sigv4 (~> 1.1)
 | 
			
		||||
    aws-sdk-kafka (1.50.0)
 | 
			
		||||
      aws-sdk-core (~> 3, >= 3.127.0)
 | 
			
		||||
      aws-sigv4 (~> 1.1)
 | 
			
		||||
    aws-sdk-kinesis (1.41.0)
 | 
			
		||||
      aws-sdk-core (~> 3, >= 3.127.0)
 | 
			
		||||
      aws-sigv4 (~> 1.1)
 | 
			
		||||
    aws-sdk-kms (1.57.0)
 | 
			
		||||
      aws-sdk-core (~> 3, >= 3.127.0)
 | 
			
		||||
      aws-sigv4 (~> 1.1)
 | 
			
		||||
    aws-sdk-lambda (1.84.0)
 | 
			
		||||
      aws-sdk-core (~> 3, >= 3.127.0)
 | 
			
		||||
      aws-sigv4 (~> 1.1)
 | 
			
		||||
    aws-sdk-mq (1.40.0)
 | 
			
		||||
      aws-sdk-core (~> 3, >= 3.120.0)
 | 
			
		||||
      aws-sigv4 (~> 1.1)
 | 
			
		||||
    aws-sdk-networkfirewall (1.17.0)
 | 
			
		||||
      aws-sdk-core (~> 3, >= 3.127.0)
 | 
			
		||||
      aws-sigv4 (~> 1.1)
 | 
			
		||||
    aws-sdk-networkmanager (1.24.0)
 | 
			
		||||
      aws-sdk-core (~> 3, >= 3.127.0)
 | 
			
		||||
      aws-sigv4 (~> 1.1)
 | 
			
		||||
    aws-sdk-organizations (1.59.0)
 | 
			
		||||
      aws-sdk-core (~> 3, >= 3.112.0)
 | 
			
		||||
      aws-sigv4 (~> 1.1)
 | 
			
		||||
    aws-sdk-ram (1.26.0)
 | 
			
		||||
      aws-sdk-core (~> 3, >= 3.112.0)
 | 
			
		||||
      aws-sigv4 (~> 1.1)
 | 
			
		||||
    aws-sdk-rds (1.148.0)
 | 
			
		||||
      aws-sdk-core (~> 3, >= 3.127.0)
 | 
			
		||||
      aws-sigv4 (~> 1.1)
 | 
			
		||||
    aws-sdk-redshift (1.84.0)
 | 
			
		||||
      aws-sdk-core (~> 3, >= 3.127.0)
 | 
			
		||||
      aws-sigv4 (~> 1.1)
 | 
			
		||||
    aws-sdk-route53 (1.63.0)
 | 
			
		||||
      aws-sdk-core (~> 3, >= 3.127.0)
 | 
			
		||||
      aws-sigv4 (~> 1.1)
 | 
			
		||||
    aws-sdk-route53domains (1.40.0)
 | 
			
		||||
      aws-sdk-core (~> 3, >= 3.127.0)
 | 
			
		||||
      aws-sigv4 (~> 1.1)
 | 
			
		||||
    aws-sdk-route53resolver (1.37.0)
 | 
			
		||||
      aws-sdk-core (~> 3, >= 3.127.0)
 | 
			
		||||
      aws-sigv4 (~> 1.1)
 | 
			
		||||
    aws-sdk-s3 (1.114.0)
 | 
			
		||||
      aws-sdk-core (~> 3, >= 3.127.0)
 | 
			
		||||
      aws-sdk-kms (~> 1)
 | 
			
		||||
      aws-sigv4 (~> 1.4)
 | 
			
		||||
    aws-sdk-s3control (1.43.0)
 | 
			
		||||
      aws-sdk-core (~> 3, >= 3.122.0)
 | 
			
		||||
      aws-sigv4 (~> 1.1)
 | 
			
		||||
    aws-sdk-secretsmanager (1.46.0)
 | 
			
		||||
      aws-sdk-core (~> 3, >= 3.112.0)
 | 
			
		||||
      aws-sigv4 (~> 1.1)
 | 
			
		||||
    aws-sdk-securityhub (1.67.0)
 | 
			
		||||
      aws-sdk-core (~> 3, >= 3.127.0)
 | 
			
		||||
      aws-sigv4 (~> 1.1)
 | 
			
		||||
    aws-sdk-servicecatalog (1.60.0)
 | 
			
		||||
      aws-sdk-core (~> 3, >= 3.112.0)
 | 
			
		||||
      aws-sigv4 (~> 1.1)
 | 
			
		||||
    aws-sdk-ses (1.41.0)
 | 
			
		||||
      aws-sdk-core (~> 3, >= 3.120.0)
 | 
			
		||||
      aws-sigv4 (~> 1.1)
 | 
			
		||||
    aws-sdk-shield (1.48.0)
 | 
			
		||||
      aws-sdk-core (~> 3, >= 3.127.0)
 | 
			
		||||
      aws-sigv4 (~> 1.1)
 | 
			
		||||
    aws-sdk-signer (1.32.0)
 | 
			
		||||
      aws-sdk-core (~> 3, >= 3.120.0)
 | 
			
		||||
      aws-sigv4 (~> 1.1)
 | 
			
		||||
    aws-sdk-simpledb (1.29.0)
 | 
			
		||||
      aws-sdk-core (~> 3, >= 3.120.0)
 | 
			
		||||
      aws-sigv2 (~> 1.0)
 | 
			
		||||
    aws-sdk-sms (1.40.0)
 | 
			
		||||
      aws-sdk-core (~> 3, >= 3.127.0)
 | 
			
		||||
      aws-sigv4 (~> 1.1)
 | 
			
		||||
    aws-sdk-sns (1.53.0)
 | 
			
		||||
      aws-sdk-core (~> 3, >= 3.127.0)
 | 
			
		||||
      aws-sigv4 (~> 1.1)
 | 
			
		||||
    aws-sdk-sqs (1.51.1)
 | 
			
		||||
      aws-sdk-core (~> 3, >= 3.127.0)
 | 
			
		||||
      aws-sigv4 (~> 1.1)
 | 
			
		||||
    aws-sdk-ssm (1.137.0)
 | 
			
		||||
      aws-sdk-core (~> 3, >= 3.127.0)
 | 
			
		||||
      aws-sigv4 (~> 1.1)
 | 
			
		||||
    aws-sdk-states (1.39.0)
 | 
			
		||||
      aws-sdk-core (~> 3, >= 3.112.0)
 | 
			
		||||
      aws-sigv4 (~> 1.1)
 | 
			
		||||
    aws-sdk-synthetics (1.19.0)
 | 
			
		||||
      aws-sdk-core (~> 3, >= 3.121.2)
 | 
			
		||||
      aws-sigv4 (~> 1.1)
 | 
			
		||||
    aws-sdk-transfer (1.34.0)
 | 
			
		||||
      aws-sdk-core (~> 3, >= 3.112.0)
 | 
			
		||||
      aws-sigv4 (~> 1.1)
 | 
			
		||||
    aws-sdk-waf (1.43.0)
 | 
			
		||||
      aws-sdk-core (~> 3, >= 3.122.0)
 | 
			
		||||
      aws-sigv4 (~> 1.1)
 | 
			
		||||
    aws-sigv2 (1.1.0)
 | 
			
		||||
    aws-sigv4 (1.5.0)
 | 
			
		||||
      aws-eventstream (~> 1, >= 1.0.2)
 | 
			
		||||
    azure_graph_rbac (0.17.2)
 | 
			
		||||
      ms_rest_azure (~> 0.12.0)
 | 
			
		||||
    azure_mgmt_key_vault (0.17.7)
 | 
			
		||||
      ms_rest_azure (~> 0.12.0)
 | 
			
		||||
    azure_mgmt_resources (0.18.2)
 | 
			
		||||
      ms_rest_azure (~> 0.12.0)
 | 
			
		||||
    azure_mgmt_security (0.19.0)
 | 
			
		||||
      ms_rest_azure (~> 0.12.0)
 | 
			
		||||
    azure_mgmt_storage (0.23.0)
 | 
			
		||||
      ms_rest_azure (~> 0.12.0)
 | 
			
		||||
    bcrypt_pbkdf (1.1.0)
 | 
			
		||||
    bson (4.15.0)
 | 
			
		||||
    builder (3.2.4)
 | 
			
		||||
    chef-config (17.10.0)
 | 
			
		||||
      addressable
 | 
			
		||||
      chef-utils (= 17.10.0)
 | 
			
		||||
      fuzzyurl
 | 
			
		||||
      mixlib-config (>= 2.2.12, < 4.0)
 | 
			
		||||
      mixlib-shellout (>= 2.0, < 4.0)
 | 
			
		||||
      tomlrb (~> 1.2)
 | 
			
		||||
    chef-telemetry (1.1.1)
 | 
			
		||||
      chef-config
 | 
			
		||||
      concurrent-ruby (~> 1.0)
 | 
			
		||||
    chef-utils (17.10.0)
 | 
			
		||||
      concurrent-ruby
 | 
			
		||||
    coderay (1.1.3)
 | 
			
		||||
    concurrent-ruby (1.1.10)
 | 
			
		||||
    cookstyle (7.32.1)
 | 
			
		||||
      rubocop (= 1.25.1)
 | 
			
		||||
    declarative (0.0.20)
 | 
			
		||||
    diff-lcs (1.5.0)
 | 
			
		||||
    docker-api (2.2.0)
 | 
			
		||||
      excon (>= 0.47.0)
 | 
			
		||||
      multi_json
 | 
			
		||||
    domain_name (0.5.20190701)
 | 
			
		||||
      unf (>= 0.0.5, < 1.0.0)
 | 
			
		||||
    ed25519 (1.3.0)
 | 
			
		||||
    erubi (1.10.0)
 | 
			
		||||
    excon (0.92.3)
 | 
			
		||||
    faraday (1.4.3)
 | 
			
		||||
      faraday-em_http (~> 1.0)
 | 
			
		||||
      faraday-em_synchrony (~> 1.0)
 | 
			
		||||
      faraday-excon (~> 1.1)
 | 
			
		||||
      faraday-net_http (~> 1.0)
 | 
			
		||||
      faraday-net_http_persistent (~> 1.1)
 | 
			
		||||
      multipart-post (>= 1.2, < 3)
 | 
			
		||||
      ruby2_keywords (>= 0.0.4)
 | 
			
		||||
    faraday-cookie_jar (0.0.7)
 | 
			
		||||
      faraday (>= 0.8.0)
 | 
			
		||||
      http-cookie (~> 1.0.0)
 | 
			
		||||
    faraday-em_http (1.0.0)
 | 
			
		||||
    faraday-em_synchrony (1.0.0)
 | 
			
		||||
    faraday-excon (1.1.0)
 | 
			
		||||
    faraday-net_http (1.0.1)
 | 
			
		||||
    faraday-net_http_persistent (1.2.0)
 | 
			
		||||
    faraday_middleware (1.0.0)
 | 
			
		||||
      faraday (~> 1.0)
 | 
			
		||||
    ffi (1.15.5)
 | 
			
		||||
    fuzzyurl (0.9.0)
 | 
			
		||||
    google-api-client (0.52.0)
 | 
			
		||||
      addressable (~> 2.5, >= 2.5.1)
 | 
			
		||||
      googleauth (~> 0.9)
 | 
			
		||||
      httpclient (>= 2.8.1, < 3.0)
 | 
			
		||||
      mini_mime (~> 1.0)
 | 
			
		||||
      representable (~> 3.0)
 | 
			
		||||
      retriable (>= 2.0, < 4.0)
 | 
			
		||||
      rexml
 | 
			
		||||
      signet (~> 0.12)
 | 
			
		||||
    googleauth (0.14.0)
 | 
			
		||||
      faraday (>= 0.17.3, < 2.0)
 | 
			
		||||
      jwt (>= 1.4, < 3.0)
 | 
			
		||||
      memoist (~> 0.16)
 | 
			
		||||
      multi_json (~> 1.11)
 | 
			
		||||
      os (>= 0.9, < 2.0)
 | 
			
		||||
      signet (~> 0.14)
 | 
			
		||||
    gssapi (1.3.1)
 | 
			
		||||
      ffi (>= 1.0.1)
 | 
			
		||||
    gyoku (1.4.0)
 | 
			
		||||
      builder (>= 2.1.2)
 | 
			
		||||
      rexml (~> 3.0)
 | 
			
		||||
    hashie (4.1.0)
 | 
			
		||||
    highline (2.0.3)
 | 
			
		||||
    http-cookie (1.0.5)
 | 
			
		||||
      domain_name (~> 0.5)
 | 
			
		||||
    httpclient (2.8.3)
 | 
			
		||||
    i18n (1.12.0)
 | 
			
		||||
      concurrent-ruby (~> 1.0)
 | 
			
		||||
    inifile (3.0.0)
 | 
			
		||||
    jmespath (1.6.1)
 | 
			
		||||
    json (2.6.2)
 | 
			
		||||
    jwt (2.4.1)
 | 
			
		||||
    kitchen-inspec (2.6.1)
 | 
			
		||||
      hashie (>= 3.4, <= 5.0)
 | 
			
		||||
      inspec (>= 2.2.64, < 7.0)
 | 
			
		||||
      test-kitchen (>= 2.7, < 4)
 | 
			
		||||
    kitchen-salt (0.7.2)
 | 
			
		||||
      hashie (>= 3.5)
 | 
			
		||||
      test-kitchen (>= 1.4)
 | 
			
		||||
    license-acceptance (2.1.13)
 | 
			
		||||
      pastel (~> 0.7)
 | 
			
		||||
      tomlrb (>= 1.2, < 3.0)
 | 
			
		||||
      tty-box (~> 0.6)
 | 
			
		||||
      tty-prompt (~> 0.20)
 | 
			
		||||
    little-plugger (1.1.4)
 | 
			
		||||
    logging (2.3.1)
 | 
			
		||||
      little-plugger (~> 1.1)
 | 
			
		||||
      multi_json (~> 1.14)
 | 
			
		||||
    memoist (0.16.2)
 | 
			
		||||
    method_source (1.0.0)
 | 
			
		||||
    mini_mime (1.1.2)
 | 
			
		||||
    minitest (5.16.2)
 | 
			
		||||
    mixlib-config (3.0.27)
 | 
			
		||||
      tomlrb
 | 
			
		||||
    mixlib-install (3.12.19)
 | 
			
		||||
      mixlib-shellout
 | 
			
		||||
      mixlib-versioning
 | 
			
		||||
      thor
 | 
			
		||||
    mixlib-log (3.0.9)
 | 
			
		||||
    mixlib-shellout (3.2.7)
 | 
			
		||||
      chef-utils
 | 
			
		||||
    mixlib-versioning (1.2.12)
 | 
			
		||||
    mongo (2.13.2)
 | 
			
		||||
      bson (>= 4.8.2, < 5.0.0)
 | 
			
		||||
    ms_rest (0.7.6)
 | 
			
		||||
      concurrent-ruby (~> 1.0)
 | 
			
		||||
      faraday (>= 0.9, < 2.0.0)
 | 
			
		||||
      timeliness (~> 0.3.10)
 | 
			
		||||
    ms_rest_azure (0.12.0)
 | 
			
		||||
      concurrent-ruby (~> 1.0)
 | 
			
		||||
      faraday (>= 0.9, < 2.0.0)
 | 
			
		||||
      faraday-cookie_jar (~> 0.0.6)
 | 
			
		||||
      ms_rest (~> 0.7.6)
 | 
			
		||||
    multi_json (1.15.0)
 | 
			
		||||
    multipart-post (2.2.3)
 | 
			
		||||
    net-scp (3.0.0)
 | 
			
		||||
      net-ssh (>= 2.6.5, < 7.0.0)
 | 
			
		||||
    net-ssh (6.1.0)
 | 
			
		||||
    net-ssh-gateway (2.0.0)
 | 
			
		||||
      net-ssh (>= 4.0.0)
 | 
			
		||||
    nori (2.6.0)
 | 
			
		||||
    options (2.3.2)
 | 
			
		||||
    os (1.1.4)
 | 
			
		||||
    parallel (1.22.1)
 | 
			
		||||
    parser (3.1.2.0)
 | 
			
		||||
      ast (~> 2.4.1)
 | 
			
		||||
    parslet (1.8.2)
 | 
			
		||||
    pastel (0.8.0)
 | 
			
		||||
      tty-color (~> 0.5)
 | 
			
		||||
    progress_bar (1.3.3)
 | 
			
		||||
      highline (>= 1.6, < 3)
 | 
			
		||||
      options (~> 2.3.0)
 | 
			
		||||
    pry (0.14.1)
 | 
			
		||||
      coderay (~> 1.1)
 | 
			
		||||
      method_source (~> 1.0)
 | 
			
		||||
    public_suffix (4.0.7)
 | 
			
		||||
    rainbow (3.1.1)
 | 
			
		||||
    rake (13.0.6)
 | 
			
		||||
    regexp_parser (2.5.0)
 | 
			
		||||
    representable (3.2.0)
 | 
			
		||||
      declarative (< 0.1.0)
 | 
			
		||||
      trailblazer-option (>= 0.1.1, < 0.2.0)
 | 
			
		||||
      uber (< 0.2.0)
 | 
			
		||||
    retriable (3.1.2)
 | 
			
		||||
    rexml (3.2.5)
 | 
			
		||||
    rspec (3.11.0)
 | 
			
		||||
      rspec-core (~> 3.11.0)
 | 
			
		||||
      rspec-expectations (~> 3.11.0)
 | 
			
		||||
      rspec-mocks (~> 3.11.0)
 | 
			
		||||
    rspec-core (3.11.0)
 | 
			
		||||
      rspec-support (~> 3.11.0)
 | 
			
		||||
    rspec-expectations (3.11.0)
 | 
			
		||||
      diff-lcs (>= 1.2.0, < 2.0)
 | 
			
		||||
      rspec-support (~> 3.11.0)
 | 
			
		||||
    rspec-its (1.3.0)
 | 
			
		||||
      rspec-core (>= 3.0.0)
 | 
			
		||||
      rspec-expectations (>= 3.0.0)
 | 
			
		||||
    rspec-mocks (3.11.1)
 | 
			
		||||
      diff-lcs (>= 1.2.0, < 2.0)
 | 
			
		||||
      rspec-support (~> 3.11.0)
 | 
			
		||||
    rspec-support (3.11.0)
 | 
			
		||||
    rubocop (1.25.1)
 | 
			
		||||
      parallel (~> 1.10)
 | 
			
		||||
      parser (>= 3.1.0.0)
 | 
			
		||||
      rainbow (>= 2.2.2, < 4.0)
 | 
			
		||||
      regexp_parser (>= 1.8, < 3.0)
 | 
			
		||||
      rexml
 | 
			
		||||
      rubocop-ast (>= 1.15.1, < 2.0)
 | 
			
		||||
      ruby-progressbar (~> 1.7)
 | 
			
		||||
      unicode-display_width (>= 1.4.0, < 3.0)
 | 
			
		||||
    rubocop-ast (1.19.1)
 | 
			
		||||
      parser (>= 3.1.1.0)
 | 
			
		||||
    ruby-progressbar (1.11.0)
 | 
			
		||||
    ruby2_keywords (0.0.5)
 | 
			
		||||
    rubyntlm (0.6.3)
 | 
			
		||||
    rubyzip (2.3.2)
 | 
			
		||||
    semverse (3.0.2)
 | 
			
		||||
    signet (0.17.0)
 | 
			
		||||
      addressable (~> 2.8)
 | 
			
		||||
      faraday (>= 0.17.5, < 3.a)
 | 
			
		||||
      jwt (>= 1.5, < 3.0)
 | 
			
		||||
      multi_json (~> 1.10)
 | 
			
		||||
    sslshake (1.3.1)
 | 
			
		||||
    strings (0.2.1)
 | 
			
		||||
      strings-ansi (~> 0.2)
 | 
			
		||||
      unicode-display_width (>= 1.5, < 3.0)
 | 
			
		||||
      unicode_utils (~> 1.4)
 | 
			
		||||
    strings-ansi (0.2.0)
 | 
			
		||||
    test-kitchen (3.3.1)
 | 
			
		||||
      bcrypt_pbkdf (~> 1.0)
 | 
			
		||||
      chef-utils (>= 16.4.35)
 | 
			
		||||
      ed25519 (~> 1.2)
 | 
			
		||||
      license-acceptance (>= 1.0.11, < 3.0)
 | 
			
		||||
      mixlib-install (~> 3.6)
 | 
			
		||||
      mixlib-shellout (>= 1.2, < 4.0)
 | 
			
		||||
      net-scp (>= 1.1, < 4.0)
 | 
			
		||||
      net-ssh (>= 2.9, < 7.0)
 | 
			
		||||
      net-ssh-gateway (>= 1.2, < 3.0)
 | 
			
		||||
      thor (>= 0.19, < 2.0)
 | 
			
		||||
      winrm (~> 2.0)
 | 
			
		||||
      winrm-elevated (~> 1.0)
 | 
			
		||||
      winrm-fs (~> 1.1)
 | 
			
		||||
    thor (1.2.1)
 | 
			
		||||
    timeliness (0.3.10)
 | 
			
		||||
    tomlrb (1.3.0)
 | 
			
		||||
    trailblazer-option (0.1.2)
 | 
			
		||||
    train (3.10.1)
 | 
			
		||||
      activesupport (>= 6.0.3.1)
 | 
			
		||||
      azure_graph_rbac (~> 0.16)
 | 
			
		||||
      azure_mgmt_key_vault (~> 0.17)
 | 
			
		||||
      azure_mgmt_resources (~> 0.15)
 | 
			
		||||
      azure_mgmt_security (~> 0.18)
 | 
			
		||||
      azure_mgmt_storage (~> 0.18)
 | 
			
		||||
      docker-api (>= 1.26, < 3.0)
 | 
			
		||||
      google-api-client (>= 0.23.9, <= 0.52.0)
 | 
			
		||||
      googleauth (>= 0.6.6, <= 0.14.0)
 | 
			
		||||
      inifile (~> 3.0)
 | 
			
		||||
      train-core (= 3.10.1)
 | 
			
		||||
      train-winrm (~> 0.2)
 | 
			
		||||
    train-aws (0.2.24)
 | 
			
		||||
      aws-sdk-alexaforbusiness (~> 1.0)
 | 
			
		||||
      aws-sdk-amplify (~> 1.32.0)
 | 
			
		||||
      aws-sdk-apigateway (~> 1.0)
 | 
			
		||||
      aws-sdk-apigatewayv2 (~> 1.0)
 | 
			
		||||
      aws-sdk-applicationautoscaling (>= 1.46, < 1.52)
 | 
			
		||||
      aws-sdk-athena (~> 1.0)
 | 
			
		||||
      aws-sdk-autoscaling (>= 1.22, < 1.64)
 | 
			
		||||
      aws-sdk-batch (>= 1.36, < 1.48)
 | 
			
		||||
      aws-sdk-budgets (~> 1.0)
 | 
			
		||||
      aws-sdk-cloudformation (~> 1.0)
 | 
			
		||||
      aws-sdk-cloudfront (~> 1.0)
 | 
			
		||||
      aws-sdk-cloudhsm (~> 1.0)
 | 
			
		||||
      aws-sdk-cloudhsmv2 (~> 1.0)
 | 
			
		||||
      aws-sdk-cloudtrail (~> 1.8)
 | 
			
		||||
      aws-sdk-cloudwatch (~> 1.13)
 | 
			
		||||
      aws-sdk-cloudwatchevents (>= 1.36, < 1.47)
 | 
			
		||||
      aws-sdk-cloudwatchlogs (~> 1.13)
 | 
			
		||||
      aws-sdk-codecommit (~> 1.0)
 | 
			
		||||
      aws-sdk-codedeploy (~> 1.0)
 | 
			
		||||
      aws-sdk-codepipeline (~> 1.0)
 | 
			
		||||
      aws-sdk-cognitoidentity (>= 1.26, < 1.32)
 | 
			
		||||
      aws-sdk-cognitoidentityprovider (>= 1.46, < 1.54)
 | 
			
		||||
      aws-sdk-configservice (~> 1.21)
 | 
			
		||||
      aws-sdk-core (~> 3.0)
 | 
			
		||||
      aws-sdk-costandusagereportservice (~> 1.6)
 | 
			
		||||
      aws-sdk-databasemigrationservice (>= 1.42, < 1.54)
 | 
			
		||||
      aws-sdk-dynamodb (~> 1.31)
 | 
			
		||||
      aws-sdk-ec2 (~> 1.70)
 | 
			
		||||
      aws-sdk-ecr (~> 1.18)
 | 
			
		||||
      aws-sdk-ecrpublic (~> 1.3)
 | 
			
		||||
      aws-sdk-ecs (~> 1.30)
 | 
			
		||||
      aws-sdk-efs (~> 1.0)
 | 
			
		||||
      aws-sdk-eks (~> 1.9)
 | 
			
		||||
      aws-sdk-elasticache (~> 1.0)
 | 
			
		||||
      aws-sdk-elasticbeanstalk (~> 1.0)
 | 
			
		||||
      aws-sdk-elasticloadbalancing (~> 1.8)
 | 
			
		||||
      aws-sdk-elasticloadbalancingv2 (~> 1.0)
 | 
			
		||||
      aws-sdk-elasticsearchservice (~> 1.0)
 | 
			
		||||
      aws-sdk-emr (~> 1.53.0)
 | 
			
		||||
      aws-sdk-eventbridge (~> 1.24.0)
 | 
			
		||||
      aws-sdk-firehose (~> 1.0)
 | 
			
		||||
      aws-sdk-glue (>= 1.71, < 1.89)
 | 
			
		||||
      aws-sdk-guardduty (~> 1.31)
 | 
			
		||||
      aws-sdk-iam (~> 1.13)
 | 
			
		||||
      aws-sdk-kafka (~> 1.0)
 | 
			
		||||
      aws-sdk-kinesis (~> 1.0)
 | 
			
		||||
      aws-sdk-kms (~> 1.13)
 | 
			
		||||
      aws-sdk-lambda (~> 1.0)
 | 
			
		||||
      aws-sdk-mq (~> 1.40.0)
 | 
			
		||||
      aws-sdk-networkfirewall (>= 1.6.0)
 | 
			
		||||
      aws-sdk-networkmanager (>= 1.13.0)
 | 
			
		||||
      aws-sdk-organizations (>= 1.17, < 1.60)
 | 
			
		||||
      aws-sdk-ram (>= 1.21, < 1.27)
 | 
			
		||||
      aws-sdk-rds (~> 1.43)
 | 
			
		||||
      aws-sdk-redshift (~> 1.0)
 | 
			
		||||
      aws-sdk-route53 (~> 1.0)
 | 
			
		||||
      aws-sdk-route53domains (~> 1.0)
 | 
			
		||||
      aws-sdk-route53resolver (~> 1.0)
 | 
			
		||||
      aws-sdk-s3 (~> 1.30)
 | 
			
		||||
      aws-sdk-s3control (~> 1.43.0)
 | 
			
		||||
      aws-sdk-secretsmanager (>= 1.42, < 1.47)
 | 
			
		||||
      aws-sdk-securityhub (~> 1.0)
 | 
			
		||||
      aws-sdk-servicecatalog (>= 1.48, < 1.61)
 | 
			
		||||
      aws-sdk-ses (~> 1.41.0)
 | 
			
		||||
      aws-sdk-shield (~> 1.30)
 | 
			
		||||
      aws-sdk-signer (~> 1.32.0)
 | 
			
		||||
      aws-sdk-simpledb (~> 1.29.0)
 | 
			
		||||
      aws-sdk-sms (~> 1.0)
 | 
			
		||||
      aws-sdk-sns (~> 1.9)
 | 
			
		||||
      aws-sdk-sqs (~> 1.10)
 | 
			
		||||
      aws-sdk-ssm (~> 1.0)
 | 
			
		||||
      aws-sdk-states (>= 1.35, < 1.40)
 | 
			
		||||
      aws-sdk-synthetics (~> 1.19.0)
 | 
			
		||||
      aws-sdk-transfer (>= 1.26, < 1.35)
 | 
			
		||||
      aws-sdk-waf (~> 1.43.0)
 | 
			
		||||
    train-core (3.10.1)
 | 
			
		||||
      addressable (~> 2.5)
 | 
			
		||||
      ffi (!= 1.13.0)
 | 
			
		||||
      json (>= 1.8, < 3.0)
 | 
			
		||||
      mixlib-shellout (>= 2.0, < 4.0)
 | 
			
		||||
      net-scp (>= 1.2, < 4.0)
 | 
			
		||||
      net-ssh (>= 2.9, < 7.0)
 | 
			
		||||
    train-habitat (0.2.22)
 | 
			
		||||
    train-winrm (0.2.13)
 | 
			
		||||
      winrm (>= 2.3.6, < 3.0)
 | 
			
		||||
      winrm-elevated (~> 1.2.2)
 | 
			
		||||
      winrm-fs (~> 1.0)
 | 
			
		||||
    tty-box (0.7.0)
 | 
			
		||||
      pastel (~> 0.8)
 | 
			
		||||
      strings (~> 0.2.0)
 | 
			
		||||
      tty-cursor (~> 0.7)
 | 
			
		||||
    tty-color (0.6.0)
 | 
			
		||||
    tty-cursor (0.7.1)
 | 
			
		||||
    tty-prompt (0.23.1)
 | 
			
		||||
      pastel (~> 0.8)
 | 
			
		||||
      tty-reader (~> 0.8)
 | 
			
		||||
    tty-reader (0.9.0)
 | 
			
		||||
      tty-cursor (~> 0.7)
 | 
			
		||||
      tty-screen (~> 0.8)
 | 
			
		||||
      wisper (~> 2.0)
 | 
			
		||||
    tty-screen (0.8.1)
 | 
			
		||||
    tty-table (0.12.0)
 | 
			
		||||
      pastel (~> 0.8)
 | 
			
		||||
      strings (~> 0.2.0)
 | 
			
		||||
      tty-screen (~> 0.8)
 | 
			
		||||
    tzinfo (2.0.4)
 | 
			
		||||
      concurrent-ruby (~> 1.0)
 | 
			
		||||
    uber (0.1.0)
 | 
			
		||||
    unf (0.1.4)
 | 
			
		||||
      unf_ext
 | 
			
		||||
    unf_ext (0.0.8.2)
 | 
			
		||||
    unicode-display_width (2.2.0)
 | 
			
		||||
    unicode_utils (1.4.0)
 | 
			
		||||
    winrm (2.3.6)
 | 
			
		||||
      builder (>= 2.1.2)
 | 
			
		||||
      erubi (~> 1.8)
 | 
			
		||||
      gssapi (~> 1.2)
 | 
			
		||||
      gyoku (~> 1.0)
 | 
			
		||||
      httpclient (~> 2.2, >= 2.2.0.2)
 | 
			
		||||
      logging (>= 1.6.1, < 3.0)
 | 
			
		||||
      nori (~> 2.0)
 | 
			
		||||
      rubyntlm (~> 0.6.0, >= 0.6.3)
 | 
			
		||||
    winrm-elevated (1.2.3)
 | 
			
		||||
      erubi (~> 1.8)
 | 
			
		||||
      winrm (~> 2.0)
 | 
			
		||||
      winrm-fs (~> 1.0)
 | 
			
		||||
    winrm-fs (1.3.5)
 | 
			
		||||
      erubi (~> 1.8)
 | 
			
		||||
      logging (>= 1.6.1, < 3.0)
 | 
			
		||||
      rubyzip (~> 2.0)
 | 
			
		||||
      winrm (~> 2.0)
 | 
			
		||||
    wisper (2.0.1)
 | 
			
		||||
 | 
			
		||||
PLATFORMS
 | 
			
		||||
  ruby
 | 
			
		||||
 | 
			
		||||
DEPENDENCIES
 | 
			
		||||
  inspec!
 | 
			
		||||
  kitchen-docker!
 | 
			
		||||
  kitchen-inspec (>= 2.5.0)
 | 
			
		||||
  kitchen-salt (>= 0.7.2)
 | 
			
		||||
 | 
			
		||||
BUNDLED WITH
 | 
			
		||||
   2.1.2
 | 
			
		||||
							
								
								
									
										52
									
								
								README.rst
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										52
									
								
								README.rst
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,52 @@
 | 
			
		||||
postfix-formula
 | 
			
		||||
===============
 | 
			
		||||
 | 
			
		||||
Formulas to set up and configure the Postfix mail transfer agent.
 | 
			
		||||
 | 
			
		||||
.. note::
 | 
			
		||||
 | 
			
		||||
    See the full `Salt Formulas installation and usage instructions
 | 
			
		||||
    <http://docs.saltstack.com/en/latest/topics/development/conventions/formulas.html>`_.
 | 
			
		||||
 | 
			
		||||
Available states
 | 
			
		||||
================
 | 
			
		||||
 | 
			
		||||
.. contents::
 | 
			
		||||
    :local:
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
``postfix``
 | 
			
		||||
-----------
 | 
			
		||||
 | 
			
		||||
Installs and starts postfix SMTP server
 | 
			
		||||
 | 
			
		||||
``postfix.config``
 | 
			
		||||
------------------
 | 
			
		||||
 | 
			
		||||
Manages postfix main.cf configuration file
 | 
			
		||||
 | 
			
		||||
``postfix.policyd-spf``
 | 
			
		||||
------------------
 | 
			
		||||
 | 
			
		||||
Installs and configures policyd-spf
 | 
			
		||||
 | 
			
		||||
``postfix.postgrey``
 | 
			
		||||
------------------
 | 
			
		||||
 | 
			
		||||
Installs and starts Postgrey service
 | 
			
		||||
 | 
			
		||||
``postfix.mysql``
 | 
			
		||||
------------------
 | 
			
		||||
 | 
			
		||||
Installs postfix mysql package ( Debian only)
 | 
			
		||||
 | 
			
		||||
``postfix.pcre``
 | 
			
		||||
------------------
 | 
			
		||||
 | 
			
		||||
Installs postfix pcre package ( Debian only)
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
``postfix.postsrsd``
 | 
			
		||||
------------------
 | 
			
		||||
 | 
			
		||||
Installs postfix postsrsd package
 | 
			
		||||
@ -1,16 +0,0 @@
 | 
			
		||||
#!/usr/bin/env sh
 | 
			
		||||
set -o nounset # Treat unset variables as an error and immediately exit
 | 
			
		||||
set -o errexit # If a command fails exit the whole script
 | 
			
		||||
 | 
			
		||||
if [ "${DEBUG:-false}" = "true" ]; then
 | 
			
		||||
  set -x # Run the entire script in debug mode
 | 
			
		||||
fi
 | 
			
		||||
 | 
			
		||||
if ! command -v pre-commit >/dev/null 2>&1; then
 | 
			
		||||
  echo "pre-commit not found: please install or check your PATH" >&2
 | 
			
		||||
  echo "See https://pre-commit.com/#installation" >&2
 | 
			
		||||
  exit 1
 | 
			
		||||
fi
 | 
			
		||||
 | 
			
		||||
pre-commit install --install-hooks
 | 
			
		||||
pre-commit install --hook-type commit-msg --install-hooks
 | 
			
		||||
							
								
								
									
										32
									
								
								bin/kitchen
									
									
									
									
									
								
							
							
						
						
									
										32
									
								
								bin/kitchen
									
									
									
									
									
								
							@ -1,32 +0,0 @@
 | 
			
		||||
#!/usr/bin/env ruby
 | 
			
		||||
# frozen_string_literal: true
 | 
			
		||||
 | 
			
		||||
#
 | 
			
		||||
# This file was generated by Bundler.
 | 
			
		||||
#
 | 
			
		||||
# The application 'kitchen' is installed as part of a gem, and
 | 
			
		||||
# this file is here to facilitate running it.
 | 
			
		||||
#
 | 
			
		||||
 | 
			
		||||
require 'pathname'
 | 
			
		||||
ENV['BUNDLE_GEMFILE'] ||= File.expand_path('../../Gemfile',
 | 
			
		||||
                                           Pathname.new(__FILE__).realpath)
 | 
			
		||||
 | 
			
		||||
bundle_binstub = File.expand_path('bundle', __dir__)
 | 
			
		||||
 | 
			
		||||
if File.file?(bundle_binstub)
 | 
			
		||||
  if File.read(bundle_binstub, 300) =~ /This file was generated by Bundler/
 | 
			
		||||
    load(bundle_binstub)
 | 
			
		||||
  else
 | 
			
		||||
    abort(
 | 
			
		||||
      'Your `bin/bundle` was not generated by Bundler, ' \
 | 
			
		||||
      'so this binstub cannot run.  Replace `bin/bundle` by running ' \
 | 
			
		||||
      '`bundle binstubs bundler --force`, then run this command again.'
 | 
			
		||||
    )
 | 
			
		||||
  end
 | 
			
		||||
end
 | 
			
		||||
 | 
			
		||||
require 'rubygems'
 | 
			
		||||
require 'bundler/setup'
 | 
			
		||||
 | 
			
		||||
load Gem.bin_path('test-kitchen', 'kitchen')
 | 
			
		||||
@ -1,8 +0,0 @@
 | 
			
		||||
module.exports = {
 | 
			
		||||
    extends: ['@commitlint/config-conventional'],
 | 
			
		||||
    rules: {
 | 
			
		||||
        'body-max-line-length': [2, 'always', 120],
 | 
			
		||||
        'footer-max-line-length': [2, 'always', 120],
 | 
			
		||||
        'header-max-length': [2, 'always', 72],
 | 
			
		||||
    },
 | 
			
		||||
};
 | 
			
		||||
							
								
								
									
										134
									
								
								docs/AUTHORS.rst
									
									
									
									
									
								
							
							
						
						
									
										134
									
								
								docs/AUTHORS.rst
									
									
									
									
									
								
							@ -1,134 +0,0 @@
 | 
			
		||||
.. role:: raw-html-m2r(raw)
 | 
			
		||||
   :format: html
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
Authors
 | 
			
		||||
=======
 | 
			
		||||
 | 
			
		||||
This list is sorted by the number of commits per contributor in *descending* order.
 | 
			
		||||
 | 
			
		||||
.. list-table::
 | 
			
		||||
   :header-rows: 1
 | 
			
		||||
 | 
			
		||||
   * - Avatar
 | 
			
		||||
     - Contributor
 | 
			
		||||
     - Contributions
 | 
			
		||||
   * - :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>`_
 | 
			
		||||
     - 122
 | 
			
		||||
   * - :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>`_
 | 
			
		||||
     - 26
 | 
			
		||||
   * - :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>`_
 | 
			
		||||
     - 23
 | 
			
		||||
   * - :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>`_
 | 
			
		||||
     - 16
 | 
			
		||||
   * - :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>`_
 | 
			
		||||
     - 14
 | 
			
		||||
   * - :raw-html-m2r:`<img class='float-left rounded-1' src='https://avatars.githubusercontent.com/u/1920805?v=4' width='36' height='36' alt='@alxwr'>`
 | 
			
		||||
     - `@alxwr <https://github.com/alxwr>`_
 | 
			
		||||
     - 12
 | 
			
		||||
   * - :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>`_
 | 
			
		||||
     - 10
 | 
			
		||||
   * - :raw-html-m2r:`<img class='float-left rounded-1' src='https://avatars.githubusercontent.com/u/18299?v=4' width='36' height='36' alt='@davidkarlsen'>`
 | 
			
		||||
     - `@davidkarlsen <https://github.com/davidkarlsen>`_
 | 
			
		||||
     - 10
 | 
			
		||||
   * - :raw-html-m2r:`<img class='float-left rounded-1' src='https://avatars.githubusercontent.com/u/214768?v=4' width='36' height='36' alt='@ixs'>`
 | 
			
		||||
     - `@ixs <https://github.com/ixs>`_
 | 
			
		||||
     - 9
 | 
			
		||||
   * - :raw-html-m2r:`<img class='float-left rounded-1' src='https://avatars.githubusercontent.com/u/6215293?v=4' width='36' height='36' alt='@0xf10e'>`
 | 
			
		||||
     - `@0xf10e <https://github.com/0xf10e>`_
 | 
			
		||||
     - 9
 | 
			
		||||
   * - :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>`_
 | 
			
		||||
     - 8
 | 
			
		||||
   * - :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://avatars.githubusercontent.com/u/1197993?v=4' width='36' height='36' alt='@danoe'>`
 | 
			
		||||
     - `@danoe <https://github.com/danoe>`_
 | 
			
		||||
     - 6
 | 
			
		||||
   * - :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>`_
 | 
			
		||||
     - 4
 | 
			
		||||
   * - :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>`_
 | 
			
		||||
     - 4
 | 
			
		||||
   * - :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>`_
 | 
			
		||||
     - 3
 | 
			
		||||
   * - :raw-html-m2r:`<img class='float-left rounded-1' src='https://avatars.githubusercontent.com/u/732321?v=4' width='36' height='36' alt='@gtmanfred'>`
 | 
			
		||||
     - `@gtmanfred <https://github.com/gtmanfred>`_
 | 
			
		||||
     - 2
 | 
			
		||||
   * - :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>`_
 | 
			
		||||
     - 2
 | 
			
		||||
   * - :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>`_
 | 
			
		||||
     - 2
 | 
			
		||||
   * - :raw-html-m2r:`<img class='float-left rounded-1' src='https://avatars.githubusercontent.com/u/131665?v=4' width='36' height='36' alt='@iamseth'>`
 | 
			
		||||
     - `@iamseth <https://github.com/iamseth>`_
 | 
			
		||||
     - 2
 | 
			
		||||
   * - :raw-html-m2r:`<img class='float-left rounded-1' src='https://avatars.githubusercontent.com/u/4156131?v=4' width='36' height='36' alt='@skylerberg'>`
 | 
			
		||||
     - `@skylerberg <https://github.com/skylerberg>`_
 | 
			
		||||
     - 2
 | 
			
		||||
   * - :raw-html-m2r:`<img class='float-left rounded-1' src='https://avatars.githubusercontent.com/u/117961?v=4' width='36' height='36' alt='@babilen'>`
 | 
			
		||||
     - `@babilen <https://github.com/babilen>`_
 | 
			
		||||
     - 2
 | 
			
		||||
   * - :raw-html-m2r:`<img class='float-left rounded-1' src='https://avatars.githubusercontent.com/u/3180588?v=4' width='36' height='36' alt='@jeroen92'>`
 | 
			
		||||
     - `@jeroen92 <https://github.com/jeroen92>`_
 | 
			
		||||
     - 2
 | 
			
		||||
   * - :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>`_
 | 
			
		||||
     - 2
 | 
			
		||||
   * - :raw-html-m2r:`<img class='float-left rounded-1' src='https://avatars.githubusercontent.com/u/762280?v=4' width='36' height='36' alt='@asenci'>`
 | 
			
		||||
     - `@asenci <https://github.com/asenci>`_
 | 
			
		||||
     - 1
 | 
			
		||||
   * - :raw-html-m2r:`<img class='float-left rounded-1' src='https://avatars.githubusercontent.com/u/8599847?v=4' width='36' height='36' alt='@campbellmc'>`
 | 
			
		||||
     - `@campbellmc <https://github.com/campbellmc>`_
 | 
			
		||||
     - 1
 | 
			
		||||
   * - :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/1654592?v=4' width='36' height='36' alt='@feiming'>`
 | 
			
		||||
     - `@feiming <https://github.com/feiming>`_
 | 
			
		||||
     - 1
 | 
			
		||||
   * - :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>`_
 | 
			
		||||
     - 1
 | 
			
		||||
   * - :raw-html-m2r:`<img class='float-left rounded-1' src='https://avatars.githubusercontent.com/u/12465797?v=4' width='36' height='36' alt='@hoonetorg'>`
 | 
			
		||||
     - `@hoonetorg <https://github.com/hoonetorg>`_
 | 
			
		||||
     - 1
 | 
			
		||||
   * - :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>`_
 | 
			
		||||
     - 1
 | 
			
		||||
   * - :raw-html-m2r:`<img class='float-left rounded-1' src='https://avatars.githubusercontent.com/u/611471?v=4' width='36' height='36' alt='@duk3luk3'>`
 | 
			
		||||
     - `@duk3luk3 <https://github.com/duk3luk3>`_
 | 
			
		||||
     - 1
 | 
			
		||||
   * - :raw-html-m2r:`<img class='float-left rounded-1' src='https://avatars.githubusercontent.com/u/924183?v=4' width='36' height='36' alt='@mschiff'>`
 | 
			
		||||
     - `@mschiff <https://github.com/mschiff>`_
 | 
			
		||||
     - 1
 | 
			
		||||
   * - :raw-html-m2r:`<img class='float-left rounded-1' src='https://avatars.githubusercontent.com/u/6086064?v=4' width='36' height='36' alt='@mgomersbach'>`
 | 
			
		||||
     - `@mgomersbach <https://github.com/mgomersbach>`_
 | 
			
		||||
     - 1
 | 
			
		||||
   * - :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>`_
 | 
			
		||||
     - 1
 | 
			
		||||
   * - :raw-html-m2r:`<img class='float-left rounded-1' src='https://avatars.githubusercontent.com/u/1013915?v=4' width='36' height='36' alt='@rhertzog'>`
 | 
			
		||||
     - `@rhertzog <https://github.com/rhertzog>`_
 | 
			
		||||
     - 1
 | 
			
		||||
   * - :raw-html-m2r:`<img class='float-left rounded-1' src='https://avatars.githubusercontent.com/u/5825186?v=4' width='36' height='36' alt='@kti-richard'>`
 | 
			
		||||
     - `@kti-richard <https://github.com/kti-richard>`_
 | 
			
		||||
     - 1
 | 
			
		||||
   * - :raw-html-m2r:`<img class='float-left rounded-1' src='https://avatars.githubusercontent.com/u/21147643?v=4' width='36' height='36' alt='@vquiering'>`
 | 
			
		||||
     - `@vquiering <https://github.com/vquiering>`_
 | 
			
		||||
     - 1
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
----
 | 
			
		||||
 | 
			
		||||
Auto-generated by a `forked version <https://github.com/myii/maintainer>`_ of `gaocegege/maintainer <https://github.com/gaocegege/maintainer>`_ on 2022-02-13.
 | 
			
		||||
@ -1,306 +0,0 @@
 | 
			
		||||
 | 
			
		||||
Changelog
 | 
			
		||||
=========
 | 
			
		||||
 | 
			
		||||
`2.0.2 <https://github.com/saltstack-formulas/postfix-formula/compare/v2.0.1...v2.0.2>`_ (2022-02-13)
 | 
			
		||||
---------------------------------------------------------------------------------------------------------
 | 
			
		||||
 | 
			
		||||
Code Refactoring
 | 
			
		||||
^^^^^^^^^^^^^^^^
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
* **salt-lint:** fix violations (\ `6a33d98 <https://github.com/saltstack-formulas/postfix-formula/commit/6a33d98d75b7cbce3fa735f9e2c4071da0ce0355>`_\ )
 | 
			
		||||
 | 
			
		||||
Continuous Integration
 | 
			
		||||
^^^^^^^^^^^^^^^^^^^^^^
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
* update linters to latest versions [skip ci] (\ `62eb687 <https://github.com/saltstack-formulas/postfix-formula/commit/62eb687b052a31bc395f53dd9c8259ff643b449e>`_\ )
 | 
			
		||||
* **gemfile:** allow rubygems proxy to be provided as an env var [skip ci] (\ `5d167a4 <https://github.com/saltstack-formulas/postfix-formula/commit/5d167a403c253e3b9f6c68641e0b871d287d2662>`_\ )
 | 
			
		||||
* **kitchen+gitlab:** update for new pre-salted images [skip ci] (\ `008ac83 <https://github.com/saltstack-formulas/postfix-formula/commit/008ac83c7a95dc1d29ee388f0d634ff3bd9b0320>`_\ )
 | 
			
		||||
 | 
			
		||||
`2.0.1 <https://github.com/saltstack-formulas/postfix-formula/compare/v2.0.0...v2.0.1>`_ (2022-01-25)
 | 
			
		||||
---------------------------------------------------------------------------------------------------------
 | 
			
		||||
 | 
			
		||||
Bug Fixes
 | 
			
		||||
^^^^^^^^^
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
* **config:** set default_database_type; fixes `#118 <https://github.com/saltstack-formulas/postfix-formula/issues/118>`_ (\ `3bd3d1c <https://github.com/saltstack-formulas/postfix-formula/commit/3bd3d1c74e6dd60a984a3f790b8c50fa46ea2ed6>`_\ )
 | 
			
		||||
 | 
			
		||||
Code Refactoring
 | 
			
		||||
^^^^^^^^^^^^^^^^
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
* **config:** add ``default_database_type`` as default value (\ `6da70d2 <https://github.com/saltstack-formulas/postfix-formula/commit/6da70d21bbfbf613e6f0149c757c5e628ef227fb>`_\ )
 | 
			
		||||
 | 
			
		||||
Continuous Integration
 | 
			
		||||
^^^^^^^^^^^^^^^^^^^^^^
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
* **3003.1:** update inc. AlmaLinux, Rocky & ``rst-lint`` [skip ci] (\ `3284d38 <https://github.com/saltstack-formulas/postfix-formula/commit/3284d38a367d94ef57c57e88dd6698c88b0affd2>`_\ )
 | 
			
		||||
* **gemfile+lock:** use ``ssf`` customised ``inspec`` repo [skip ci] (\ `cfed974 <https://github.com/saltstack-formulas/postfix-formula/commit/cfed97400047b109a765d5cee95667f6ca1c1fd2>`_\ )
 | 
			
		||||
* **kitchen:** move ``provisioner`` block & update ``run_command`` [skip ci] (\ `31a3836 <https://github.com/saltstack-formulas/postfix-formula/commit/31a3836cd63f09d81ad88f510b61cb831436759c>`_\ )
 | 
			
		||||
* **kitchen+ci:** update with ``3004`` pre-salted images/boxes [skip ci] (\ `dec042a <https://github.com/saltstack-formulas/postfix-formula/commit/dec042aa43e71785bc49247002a16d82af8c1531>`_\ )
 | 
			
		||||
* **kitchen+ci:** update with latest ``3003.2`` pre-salted images [skip ci] (\ `9688f36 <https://github.com/saltstack-formulas/postfix-formula/commit/9688f36aa146d584546da71fa89e04525c08aa42>`_\ )
 | 
			
		||||
* **kitchen+ci:** update with latest CVE pre-salted images [skip ci] (\ `76134b4 <https://github.com/saltstack-formulas/postfix-formula/commit/76134b47c70d98d00dfe1e6d0f3c9cc0095bda69>`_\ )
 | 
			
		||||
* add ``arch-master`` to matrix and update ``.travis.yml`` [skip ci] (\ `c631eca <https://github.com/saltstack-formulas/postfix-formula/commit/c631eca02e2c1c03e38bcd179c9b443c22ce706d>`_\ )
 | 
			
		||||
* add Debian 11 Bullseye & update ``yamllint`` configuration [skip ci] (\ `c11c07d <https://github.com/saltstack-formulas/postfix-formula/commit/c11c07d6a664da11f11c22ddd416d0501a2cb07e>`_\ )
 | 
			
		||||
* **kitchen+gitlab:** adjust matrix to add ``3003`` [skip ci] (\ `04564a7 <https://github.com/saltstack-formulas/postfix-formula/commit/04564a7ad6c803f70cfa487acd92dd1197563469>`_\ )
 | 
			
		||||
* **kitchen+gitlab:** remove Ubuntu 16.04 & Fedora 32 (EOL) [skip ci] (\ `d56006f <https://github.com/saltstack-formulas/postfix-formula/commit/d56006f8d2dac568c06c4e1e83b076acfe49a80c>`_\ )
 | 
			
		||||
 | 
			
		||||
Tests
 | 
			
		||||
^^^^^
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
* standardise use of ``share`` suite & ``_mapdata`` state [skip ci] (\ `4c394a7 <https://github.com/saltstack-formulas/postfix-formula/commit/4c394a76faea4301df4708854edd39d37a13935d>`_\ )
 | 
			
		||||
 | 
			
		||||
`2.0.0 <https://github.com/saltstack-formulas/postfix-formula/compare/v1.2.2...v2.0.0>`_ (2021-03-15)
 | 
			
		||||
---------------------------------------------------------------------------------------------------------
 | 
			
		||||
 | 
			
		||||
Bug Fixes
 | 
			
		||||
^^^^^^^^^
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
* **resources:** make resources' IDs unique (\ `03ad48b <https://github.com/saltstack-formulas/postfix-formula/commit/03ad48b8a4b0b05144d449c9caee998ad6d0628f>`_\ )
 | 
			
		||||
 | 
			
		||||
Continuous Integration
 | 
			
		||||
^^^^^^^^^^^^^^^^^^^^^^
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
* **commitlint:** ensure ``upstream/master`` uses main repo URL [skip ci] (\ `381b150 <https://github.com/saltstack-formulas/postfix-formula/commit/381b150b0f1d0ab41e60f0ac95a7a6163633d701>`_\ )
 | 
			
		||||
* **gemfile+lock:** use ``ssf`` customised ``kitchen-docker`` repo [skip ci] (\ `c5851e6 <https://github.com/saltstack-formulas/postfix-formula/commit/c5851e67a2125c5367b3ab97b46c6407aa66eaf1>`_\ )
 | 
			
		||||
* **gitlab-ci:** add ``rubocop`` linter (with ``allow_failure``\ ) [skip ci] (\ `22fa184 <https://github.com/saltstack-formulas/postfix-formula/commit/22fa184b14e88a05d4c4284c459a7d887501e404>`_\ )
 | 
			
		||||
* **gitlab-ci:** use GitLab CI as Travis CI replacement (\ `890f3ae <https://github.com/saltstack-formulas/postfix-formula/commit/890f3aebc63484d07f887c870f2825797ba504e9>`_\ )
 | 
			
		||||
* **kitchen+ci:** use latest pre-salted images (after CVE) [skip ci] (\ `19617a0 <https://github.com/saltstack-formulas/postfix-formula/commit/19617a0ad710914c8f4439044d7bf993e1effcc8>`_\ )
 | 
			
		||||
* **kitchen+gitlab-ci:** use latest pre-salted images [skip ci] (\ `d65a7a3 <https://github.com/saltstack-formulas/postfix-formula/commit/d65a7a36c28e3881b058e9c5b898a0f39c5e1ca7>`_\ )
 | 
			
		||||
* **pre-commit:** add to formula [skip ci] (\ `f41392d <https://github.com/saltstack-formulas/postfix-formula/commit/f41392d4504cb60b2fcf2c818cfe97f5487e2844>`_\ )
 | 
			
		||||
* **pre-commit:** enable/disable ``rstcheck`` as relevant [skip ci] (\ `fb5be95 <https://github.com/saltstack-formulas/postfix-formula/commit/fb5be9504ec18c86bab4f387bf62ba816b3ffa64>`_\ )
 | 
			
		||||
* **pre-commit:** finalise ``rstcheck`` configuration [skip ci] (\ `75941ed <https://github.com/saltstack-formulas/postfix-formula/commit/75941ed61443c84c27fea864d0529461564d8969>`_\ )
 | 
			
		||||
* **pre-commit:** update hook for ``rubocop`` [skip ci] (\ `c60d58e <https://github.com/saltstack-formulas/postfix-formula/commit/c60d58eb1168c031c12d656c9605f83afebc9fa1>`_\ )
 | 
			
		||||
 | 
			
		||||
BREAKING CHANGES
 | 
			
		||||
^^^^^^^^^^^^^^^^
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
* **resources:** as all resources' IDs changed, other formulas
 | 
			
		||||
  depending on this formula's resources will need to be modified
 | 
			
		||||
  accordingly.
 | 
			
		||||
 | 
			
		||||
`1.2.2 <https://github.com/saltstack-formulas/postfix-formula/compare/v1.2.1...v1.2.2>`_ (2020-10-02)
 | 
			
		||||
---------------------------------------------------------------------------------------------------------
 | 
			
		||||
 | 
			
		||||
Styles
 | 
			
		||||
^^^^^^
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
* prepend modes with 0 (\ `fdc127c <https://github.com/saltstack-formulas/postfix-formula/commit/fdc127c8db7b19fac9be907ca511b17d5f5c4be0>`_\ )
 | 
			
		||||
* quote modes/numbers (\ `b9c4fba <https://github.com/saltstack-formulas/postfix-formula/commit/b9c4fbadaf164c1589a27af45fbde7092e6a1d8a>`_\ )
 | 
			
		||||
 | 
			
		||||
`1.2.1 <https://github.com/saltstack-formulas/postfix-formula/compare/v1.2.0...v1.2.1>`_ (2020-09-27)
 | 
			
		||||
---------------------------------------------------------------------------------------------------------
 | 
			
		||||
 | 
			
		||||
Styles
 | 
			
		||||
^^^^^^
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
* linting for ``yamllint`` (\ `780dc9d <https://github.com/saltstack-formulas/postfix-formula/commit/780dc9d372328f0b7ae08425abf1e1f32ed4b49e>`_\ )
 | 
			
		||||
 | 
			
		||||
`1.2.0 <https://github.com/saltstack-formulas/postfix-formula/compare/v1.1.0...v1.2.0>`_ (2020-07-20)
 | 
			
		||||
---------------------------------------------------------------------------------------------------------
 | 
			
		||||
 | 
			
		||||
Features
 | 
			
		||||
^^^^^^^^
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
* **maps:** add more map types and tests (\ `e3970df <https://github.com/saltstack-formulas/postfix-formula/commit/e3970dfc3eac57b7a4f8911ef48d8652f3a26cd7>`_\ )
 | 
			
		||||
 | 
			
		||||
`1.1.0 <https://github.com/saltstack-formulas/postfix-formula/compare/v1.0.3...v1.1.0>`_ (2020-07-18)
 | 
			
		||||
---------------------------------------------------------------------------------------------------------
 | 
			
		||||
 | 
			
		||||
Continuous Integration
 | 
			
		||||
^^^^^^^^^^^^^^^^^^^^^^
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
* **kitchen:** use ``saltimages`` Docker Hub where available [skip ci] (\ `2ddd417 <https://github.com/saltstack-formulas/postfix-formula/commit/2ddd417039d8cb6f8241036c60ee0e6d534aab00>`_\ )
 | 
			
		||||
 | 
			
		||||
Features
 | 
			
		||||
^^^^^^^^
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
* **config:** run postmap also for regexp maps (\ `7584fce <https://github.com/saltstack-formulas/postfix-formula/commit/7584fce0aff912b3aeaf44e6eed82a4c9c267535>`_\ )
 | 
			
		||||
 | 
			
		||||
`1.0.3 <https://github.com/saltstack-formulas/postfix-formula/compare/v1.0.2...v1.0.3>`_ (2020-06-08)
 | 
			
		||||
---------------------------------------------------------------------------------------------------------
 | 
			
		||||
 | 
			
		||||
Bug Fixes
 | 
			
		||||
^^^^^^^^^
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
* **deps:** fixes ordering where postmap requires sane main.cf (\ `a28bd05 <https://github.com/saltstack-formulas/postfix-formula/commit/a28bd05b852c309e70aa8ff0491c12271ddd4461>`_\ )
 | 
			
		||||
* **test:** use specific ip to workaround centos bug (\ `273caf9 <https://github.com/saltstack-formulas/postfix-formula/commit/273caf9b6f42a4127025f9d2d862806653b661c2>`_\ )
 | 
			
		||||
 | 
			
		||||
Tests
 | 
			
		||||
^^^^^
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
* **default:** add inspec for base and maps (\ `2a61498 <https://github.com/saltstack-formulas/postfix-formula/commit/2a61498fa440b2eef26849c2b0bc2dadf27b2dee>`_\ )
 | 
			
		||||
 | 
			
		||||
`1.0.2 <https://github.com/saltstack-formulas/postfix-formula/compare/v1.0.1...v1.0.2>`_ (2020-06-07)
 | 
			
		||||
---------------------------------------------------------------------------------------------------------
 | 
			
		||||
 | 
			
		||||
Bug Fixes
 | 
			
		||||
^^^^^^^^^
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
* **opensuse:** fixes config files generation in opensuse (\ `067bcf6 <https://github.com/saltstack-formulas/postfix-formula/commit/067bcf636face6b3a3cb40418758641354ac2402>`_\ )
 | 
			
		||||
 | 
			
		||||
`1.0.1 <https://github.com/saltstack-formulas/postfix-formula/compare/v1.0.0...v1.0.1>`_ (2020-06-07)
 | 
			
		||||
---------------------------------------------------------------------------------------------------------
 | 
			
		||||
 | 
			
		||||
Bug Fixes
 | 
			
		||||
^^^^^^^^^
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
* **main:** fix postconf warning when reloading/starting (\ `04003c6 <https://github.com/saltstack-formulas/postfix-formula/commit/04003c6ee33d5699cc392f7e74f81d27547b5f6e>`_\ )
 | 
			
		||||
 | 
			
		||||
`1.0.0 <https://github.com/saltstack-formulas/postfix-formula/compare/v0.19.0...v1.0.0>`_ (2020-06-06)
 | 
			
		||||
----------------------------------------------------------------------------------------------------------
 | 
			
		||||
 | 
			
		||||
Code Refactoring
 | 
			
		||||
^^^^^^^^^^^^^^^^
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
* **maps:** move tls_policy and transport to mapping section (\ `06276fd <https://github.com/saltstack-formulas/postfix-formula/commit/06276fd7431e1675795be95c0c8ebb01772ea740>`_\ )
 | 
			
		||||
 | 
			
		||||
Continuous Integration
 | 
			
		||||
^^^^^^^^^^^^^^^^^^^^^^
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
* **kitchen+travis:** use latest pre-salted images (\ `b364744 <https://github.com/saltstack-formulas/postfix-formula/commit/b364744e40b484397fea5c2c1767f77728649de8>`_\ )
 | 
			
		||||
 | 
			
		||||
BREAKING CHANGES
 | 
			
		||||
^^^^^^^^^^^^^^^^
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
* **maps:** ``transport`` and ``tls_policy`` keys in ``postfix:config`` have been moved to the standard ``postfix:mapping``.
 | 
			
		||||
 | 
			
		||||
`0.19.0 <https://github.com/saltstack-formulas/postfix-formula/compare/v0.18.2...v0.19.0>`_ (2020-05-23)
 | 
			
		||||
------------------------------------------------------------------------------------------------------------
 | 
			
		||||
 | 
			
		||||
Continuous Integration
 | 
			
		||||
^^^^^^^^^^^^^^^^^^^^^^
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
* **travis:** add notifications => zulip [skip ci] (\ `c78c421 <https://github.com/saltstack-formulas/postfix-formula/commit/c78c4219846f8c384623da7dd74d4e9a5e419b74>`_\ )
 | 
			
		||||
 | 
			
		||||
Features
 | 
			
		||||
^^^^^^^^
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
* **maps:** adds tls_policy map for smtp delivery (\ `d87da4a <https://github.com/saltstack-formulas/postfix-formula/commit/d87da4adc49d18674f35e40a948ad88fefaf26f6>`_\ )
 | 
			
		||||
 | 
			
		||||
`0.18.2 <https://github.com/saltstack-formulas/postfix-formula/compare/v0.18.1...v0.18.2>`_ (2020-05-12)
 | 
			
		||||
------------------------------------------------------------------------------------------------------------
 | 
			
		||||
 | 
			
		||||
Bug Fixes
 | 
			
		||||
^^^^^^^^^
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
* make necessary modifications to get working on ``salt-ssh`` (\ `34a112f <https://github.com/saltstack-formulas/postfix-formula/commit/34a112faabba46d95b102afa3add5b797dda2ce1>`_\ ), closes `/freenode.logbot.info/saltstack-formulas/20200507#c3819526-c3819581 <https://github.com//freenode.logbot.info/saltstack-formulas/20200507/issues/c3819526-c3819581>`_ `/freenode.logbot.info/saltstack-formulas/20200508#c3826763-c3826995 <https://github.com//freenode.logbot.info/saltstack-formulas/20200508/issues/c3826763-c3826995>`_
 | 
			
		||||
* **release.config.js:** use full commit hash in commit link [skip ci] (\ `ffbe5aa <https://github.com/saltstack-formulas/postfix-formula/commit/ffbe5aad13e73a4e3aa1c6dbd24488ebd73436ee>`_\ )
 | 
			
		||||
 | 
			
		||||
Continuous Integration
 | 
			
		||||
^^^^^^^^^^^^^^^^^^^^^^
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
* **gemfile:** restrict ``train`` gem version until upstream fix [skip ci] (\ `80cdd9d <https://github.com/saltstack-formulas/postfix-formula/commit/80cdd9d202b6dbbc43aa02025bb7d9738aad8ee7>`_\ )
 | 
			
		||||
* **gemfile.lock:** add to repo with updated ``Gemfile`` [skip ci] (\ `497221d <https://github.com/saltstack-formulas/postfix-formula/commit/497221d1de7356cb031f78597781fa05897ca0a9>`_\ )
 | 
			
		||||
* **kitchen:** avoid using bootstrap for ``master`` instances [skip ci] (\ `708b0a5 <https://github.com/saltstack-formulas/postfix-formula/commit/708b0a51d9378ef44c0df125f532deea44f07044>`_\ )
 | 
			
		||||
* **kitchen:** use ``debian-10-master-py3`` instead of ``develop`` [skip ci] (\ `90098c0 <https://github.com/saltstack-formulas/postfix-formula/commit/90098c0cdfa856f9e3ca7772e8fb52e014d70d55>`_\ )
 | 
			
		||||
* **kitchen:** use ``develop`` image until ``master`` is ready (\ ``amazonlinux``\ ) [skip ci] (\ `df76c72 <https://github.com/saltstack-formulas/postfix-formula/commit/df76c72dcee4ff87f104b13880ddc32b163e2db6>`_\ )
 | 
			
		||||
* **kitchen+travis:** remove ``master-py2-arch-base-latest`` [skip ci] (\ `46d0f3d <https://github.com/saltstack-formulas/postfix-formula/commit/46d0f3d1d8b9b7373068c9182a593c8ed96e1bcd>`_\ )
 | 
			
		||||
* **kitchen+travis:** upgrade matrix after ``2019.2.2`` release [skip ci] (\ `70fc491 <https://github.com/saltstack-formulas/postfix-formula/commit/70fc49122ed6213a4e93fc5280bf5744af969f86>`_\ )
 | 
			
		||||
* **travis:** apply changes from build config validation [skip ci] (\ `f25db2d <https://github.com/saltstack-formulas/postfix-formula/commit/f25db2d5f3c2394e29f36cf33d2166c5af73fa40>`_\ )
 | 
			
		||||
* **travis:** opt-in to ``dpl v2`` to complete build config validation [skip ci] (\ `8f4db70 <https://github.com/saltstack-formulas/postfix-formula/commit/8f4db70ece851dea547550cfabb4b770eaf0796b>`_\ )
 | 
			
		||||
* **travis:** quote pathspecs used with ``git ls-files`` [skip ci] (\ `6d18d1d <https://github.com/saltstack-formulas/postfix-formula/commit/6d18d1dc93c92c4ba85f340c541d3a69f557d74e>`_\ )
 | 
			
		||||
* **travis:** run ``shellcheck`` during lint job [skip ci] (\ `29efb81 <https://github.com/saltstack-formulas/postfix-formula/commit/29efb819fc9d4bf273b57c15d01dfb390642b3d5>`_\ )
 | 
			
		||||
* **travis:** update ``salt-lint`` config for ``v0.0.10`` [skip ci] (\ `b23168e <https://github.com/saltstack-formulas/postfix-formula/commit/b23168e69ec8823ad9382b6c9c3be8f743d3b8e3>`_\ )
 | 
			
		||||
* **travis:** use ``major.minor`` for ``semantic-release`` version [skip ci] (\ `964e3ef <https://github.com/saltstack-formulas/postfix-formula/commit/964e3ef0fa6613380c56b1b2044e6f37dd797c6c>`_\ )
 | 
			
		||||
* **travis:** use build config validation (beta) [skip ci] (\ `1ab8692 <https://github.com/saltstack-formulas/postfix-formula/commit/1ab8692f31bdfcf5a24d7049c254d1b71d090e21>`_\ )
 | 
			
		||||
* **workflows/commitlint:** add to repo [skip ci] (\ `43a7353 <https://github.com/saltstack-formulas/postfix-formula/commit/43a7353caec2908e1d6aabab11c198c1806412f5>`_\ )
 | 
			
		||||
 | 
			
		||||
Documentation
 | 
			
		||||
^^^^^^^^^^^^^
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
* **contributing:** remove to use org-level file instead [skip ci] (\ `a33757a <https://github.com/saltstack-formulas/postfix-formula/commit/a33757a6ad445fc7e209f32c6ceb5b2309e11d03>`_\ )
 | 
			
		||||
* **readme:** update link to ``CONTRIBUTING`` [skip ci] (\ `50b9808 <https://github.com/saltstack-formulas/postfix-formula/commit/50b9808a3bd094de30439ff788b6f58ea72051ba>`_\ )
 | 
			
		||||
 | 
			
		||||
Performance Improvements
 | 
			
		||||
^^^^^^^^^^^^^^^^^^^^^^^^
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
* **travis:** improve ``salt-lint`` invocation [skip ci] (\ `2ece69c <https://github.com/saltstack-formulas/postfix-formula/commit/2ece69c3c12ffd9696a5836bf3ed7992af58e8ab>`_\ )
 | 
			
		||||
 | 
			
		||||
`0.18.1 <https://github.com/saltstack-formulas/postfix-formula/compare/v0.18.0...v0.18.1>`_ (2019-10-11)
 | 
			
		||||
------------------------------------------------------------------------------------------------------------
 | 
			
		||||
 | 
			
		||||
Bug Fixes
 | 
			
		||||
^^^^^^^^^
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
* **rubocop:** add fixes using ``rubocop --safe-auto-correct`` (\ ` <https://github.com/saltstack-formulas/postfix-formula/commit/87dd217>`_\ )
 | 
			
		||||
 | 
			
		||||
Continuous Integration
 | 
			
		||||
^^^^^^^^^^^^^^^^^^^^^^
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
* **kitchen:** change ``log_level`` to ``debug`` instead of ``info`` (\ ` <https://github.com/saltstack-formulas/postfix-formula/commit/17734cb>`_\ )
 | 
			
		||||
* **kitchen:** install required packages to bootstrapped ``opensuse`` [skip ci] (\ ` <https://github.com/saltstack-formulas/postfix-formula/commit/5127bee>`_\ )
 | 
			
		||||
* **kitchen:** use bootstrapped ``opensuse`` images until ``2019.2.2`` [skip ci] (\ ` <https://github.com/saltstack-formulas/postfix-formula/commit/79df4ce>`_\ )
 | 
			
		||||
* **platform:** add ``arch-base-latest`` (\ ` <https://github.com/saltstack-formulas/postfix-formula/commit/16e6f58>`_\ )
 | 
			
		||||
* merge travis matrix, add ``salt-lint`` & ``rubocop`` to ``lint`` job (\ ` <https://github.com/saltstack-formulas/postfix-formula/commit/0c0a228>`_\ )
 | 
			
		||||
* merge travis matrix, add ``salt-lint`` & ``rubocop`` to ``lint`` job (\ ` <https://github.com/saltstack-formulas/postfix-formula/commit/1ec88a4>`_\ )
 | 
			
		||||
* use ``dist: bionic`` & apply ``opensuse-leap-15`` SCP error workaround (\ ` <https://github.com/saltstack-formulas/postfix-formula/commit/bbbc260>`_\ )
 | 
			
		||||
* **travis:** merge ``rubocop`` linter into main ``lint`` job (\ ` <https://github.com/saltstack-formulas/postfix-formula/commit/508074a>`_\ )
 | 
			
		||||
* **yamllint:** add rule ``empty-values`` & use new ``yaml-files`` setting (\ ` <https://github.com/saltstack-formulas/postfix-formula/commit/c9a4fc7>`_\ )
 | 
			
		||||
 | 
			
		||||
`0.18.0 <https://github.com/saltstack-formulas/postfix-formula/compare/v0.17.1...v0.18.0>`_ (2019-09-01)
 | 
			
		||||
------------------------------------------------------------------------------------------------------------
 | 
			
		||||
 | 
			
		||||
Continuous Integration
 | 
			
		||||
^^^^^^^^^^^^^^^^^^^^^^
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
* **kitchen+travis:** replace EOL pre-salted images (\ `8996d28 <https://github.com/saltstack-formulas/postfix-formula/commit/8996d28>`_\ )
 | 
			
		||||
 | 
			
		||||
Features
 | 
			
		||||
^^^^^^^^
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
* **yamllint:** include for this repo and apply rules throughout (\ `b4fbac2 <https://github.com/saltstack-formulas/postfix-formula/commit/b4fbac2>`_\ )
 | 
			
		||||
 | 
			
		||||
`0.17.1 <https://github.com/saltstack-formulas/postfix-formula/compare/v0.17.0...v0.17.1>`_ (2019-07-26)
 | 
			
		||||
------------------------------------------------------------------------------------------------------------
 | 
			
		||||
 | 
			
		||||
Bug Fixes
 | 
			
		||||
^^^^^^^^^
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
* **service:** restart service on package change (\ `75358e0 <https://github.com/saltstack-formulas/postfix-formula/commit/75358e0>`_\ )
 | 
			
		||||
 | 
			
		||||
Continuous Integration
 | 
			
		||||
^^^^^^^^^^^^^^^^^^^^^^
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
* **kitchen+travis:** modify matrix to include ``develop`` platform (\ `b505a5d <https://github.com/saltstack-formulas/postfix-formula/commit/b505a5d>`_\ )
 | 
			
		||||
 | 
			
		||||
`0.17.0 <https://github.com/saltstack-formulas/postfix-formula/compare/v0.16.0...v0.17.0>`_ (2019-06-03)
 | 
			
		||||
------------------------------------------------------------------------------------------------------------
 | 
			
		||||
 | 
			
		||||
Features
 | 
			
		||||
^^^^^^^^
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
* **semantic-release:** implement an automated changelog (\ `3161504 <https://github.com/saltstack-formulas/postfix-formula/commit/3161504>`_\ )
 | 
			
		||||
							
								
								
									
										128
									
								
								docs/README.rst
									
									
									
									
									
								
							
							
						
						
									
										128
									
								
								docs/README.rst
									
									
									
									
									
								
							@ -1,128 +0,0 @@
 | 
			
		||||
.. _readme:
 | 
			
		||||
 | 
			
		||||
postfix-formula
 | 
			
		||||
===============
 | 
			
		||||
 | 
			
		||||
|img_travis| |img_sr|
 | 
			
		||||
 | 
			
		||||
.. |img_travis| image:: https://travis-ci.com/saltstack-formulas/postfix-formula.svg?branch=master
 | 
			
		||||
   :alt: Travis CI Build Status
 | 
			
		||||
   :scale: 100%
 | 
			
		||||
   :target: https://travis-ci.com/saltstack-formulas/postfix-formula
 | 
			
		||||
.. |img_sr| image:: https://img.shields.io/badge/%20%20%F0%9F%93%A6%F0%9F%9A%80-semantic--release-e10079.svg
 | 
			
		||||
   :alt: Semantic Release
 | 
			
		||||
   :scale: 100%
 | 
			
		||||
   :target: https://github.com/semantic-release/semantic-release
 | 
			
		||||
 | 
			
		||||
A SaltStack formula to install and configure Postfix mail server.
 | 
			
		||||
 | 
			
		||||
.. contents:: **Table of Contents**
 | 
			
		||||
 | 
			
		||||
General notes
 | 
			
		||||
-------------
 | 
			
		||||
 | 
			
		||||
See the full `SaltStack Formulas installation and usage instructions
 | 
			
		||||
<https://docs.saltstack.com/en/latest/topics/development/conventions/formulas.html>`_.
 | 
			
		||||
 | 
			
		||||
If you are interested in writing or contributing to formulas, please pay attention to the `Writing Formula Section
 | 
			
		||||
<https://docs.saltstack.com/en/latest/topics/development/conventions/formulas.html#writing-formulas>`_.
 | 
			
		||||
 | 
			
		||||
If you want to use this formula, please pay attention to the ``FORMULA`` file and/or ``git tag``,
 | 
			
		||||
which contains the currently released version. This formula is versioned according to `Semantic Versioning <http://semver.org/>`_.
 | 
			
		||||
 | 
			
		||||
See `Formula Versioning Section <https://docs.saltstack.com/en/latest/topics/development/conventions/formulas.html#versioning>`_ for more details.
 | 
			
		||||
 | 
			
		||||
Contributing to this repo
 | 
			
		||||
-------------------------
 | 
			
		||||
 | 
			
		||||
**Commit message formatting is significant!!**
 | 
			
		||||
 | 
			
		||||
Please see `How to contribute <https://github.com/saltstack-formulas/.github/blob/master/CONTRIBUTING.rst>`_ for more details.
 | 
			
		||||
 | 
			
		||||
Available states
 | 
			
		||||
----------------
 | 
			
		||||
 | 
			
		||||
.. contents::
 | 
			
		||||
   :local:
 | 
			
		||||
 | 
			
		||||
``postfix``
 | 
			
		||||
^^^^^^^^^^^
 | 
			
		||||
 | 
			
		||||
Installs and starts postfix SMTP server
 | 
			
		||||
 | 
			
		||||
``postfix.config``
 | 
			
		||||
^^^^^^^^^^^^^^^^^^
 | 
			
		||||
 | 
			
		||||
Manages postfix main.cf and optionally the master.cf configuration file. Generates mappings.
 | 
			
		||||
 | 
			
		||||
``postfix.policyd-spf``
 | 
			
		||||
^^^^^^^^^^^^^^^^^^^^^^^
 | 
			
		||||
 | 
			
		||||
Installs and configures policyd-spf
 | 
			
		||||
 | 
			
		||||
``postfix.postgrey``
 | 
			
		||||
^^^^^^^^^^^^^^^^^^^^
 | 
			
		||||
 | 
			
		||||
Installs and starts Postgrey service
 | 
			
		||||
 | 
			
		||||
``postfix.mysql``
 | 
			
		||||
^^^^^^^^^^^^^^^^^
 | 
			
		||||
 | 
			
		||||
Installs postfix mysql package ( Debian only)
 | 
			
		||||
 | 
			
		||||
``postfix.pcre``
 | 
			
		||||
^^^^^^^^^^^^^^^^
 | 
			
		||||
 | 
			
		||||
Installs postfix pcre package ( Debian only)
 | 
			
		||||
 | 
			
		||||
``postfix.postsrsd``
 | 
			
		||||
^^^^^^^^^^^^^^^^^^^^
 | 
			
		||||
 | 
			
		||||
Installs postfix postsrsd package
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
Testing
 | 
			
		||||
-------
 | 
			
		||||
 | 
			
		||||
Linux testing is done with ``kitchen-salt``.
 | 
			
		||||
 | 
			
		||||
Requirements
 | 
			
		||||
^^^^^^^^^^^^
 | 
			
		||||
 | 
			
		||||
* Ruby
 | 
			
		||||
* Docker
 | 
			
		||||
 | 
			
		||||
.. code-block:: bash
 | 
			
		||||
 | 
			
		||||
   $ gem install bundler
 | 
			
		||||
   $ bundle install
 | 
			
		||||
   $ bin/kitchen test [platform]
 | 
			
		||||
 | 
			
		||||
Where ``[platform]`` is the platform name defined in ``kitchen.yml``,
 | 
			
		||||
e.g. ``debian-9-2019-2-py3``.
 | 
			
		||||
 | 
			
		||||
``bin/kitchen converge``
 | 
			
		||||
^^^^^^^^^^^^^^^^^^^^^^^^
 | 
			
		||||
 | 
			
		||||
Creates the docker instance and runs the main state(s), ready for testing.
 | 
			
		||||
 | 
			
		||||
``bin/kitchen verify``
 | 
			
		||||
^^^^^^^^^^^^^^^^^^^^^^
 | 
			
		||||
 | 
			
		||||
Runs the ``inspec`` tests on the actual instance.
 | 
			
		||||
 | 
			
		||||
``bin/kitchen destroy``
 | 
			
		||||
^^^^^^^^^^^^^^^^^^^^^^^
 | 
			
		||||
 | 
			
		||||
Removes the docker instance.
 | 
			
		||||
 | 
			
		||||
``bin/kitchen test``
 | 
			
		||||
^^^^^^^^^^^^^^^^^^^^
 | 
			
		||||
 | 
			
		||||
Runs all of the stages above in one go: i.e. ``destroy`` + ``converge`` + ``verify`` + ``destroy``.
 | 
			
		||||
 | 
			
		||||
``bin/kitchen login``
 | 
			
		||||
^^^^^^^^^^^^^^^^^^^^^
 | 
			
		||||
 | 
			
		||||
Gives you SSH access to the instance for manual testing.
 | 
			
		||||
 | 
			
		||||
							
								
								
									
										287
									
								
								kitchen.yml
									
									
									
									
									
								
							
							
						
						
									
										287
									
								
								kitchen.yml
									
									
									
									
									
								
							@ -1,287 +0,0 @@
 | 
			
		||||
# -*- coding: utf-8 -*-
 | 
			
		||||
# vim: ft=yaml
 | 
			
		||||
---
 | 
			
		||||
# For help on this file's format, see https://kitchen.ci/
 | 
			
		||||
driver:
 | 
			
		||||
  name: docker
 | 
			
		||||
  use_sudo: false
 | 
			
		||||
  privileged: true
 | 
			
		||||
  run_command: /usr/lib/systemd/systemd
 | 
			
		||||
 | 
			
		||||
provisioner:
 | 
			
		||||
  name: salt_solo
 | 
			
		||||
  log_level: debug
 | 
			
		||||
  salt_install: none
 | 
			
		||||
  require_chef: false
 | 
			
		||||
  formula: postfix
 | 
			
		||||
  salt_copy_filter:
 | 
			
		||||
    - .kitchen
 | 
			
		||||
    - .git
 | 
			
		||||
 | 
			
		||||
platforms:
 | 
			
		||||
  ## SALT `tiamat`
 | 
			
		||||
  - name: debian-11-tiamat-py3
 | 
			
		||||
    driver:
 | 
			
		||||
      image: saltimages/salt-tiamat-py3:debian-11
 | 
			
		||||
      run_command: /lib/systemd/systemd
 | 
			
		||||
  - name: debian-10-tiamat-py3
 | 
			
		||||
    driver:
 | 
			
		||||
      image: saltimages/salt-tiamat-py3:debian-10
 | 
			
		||||
      run_command: /lib/systemd/systemd
 | 
			
		||||
  - name: debian-9-tiamat-py3
 | 
			
		||||
    driver:
 | 
			
		||||
      image: saltimages/salt-tiamat-py3:debian-9
 | 
			
		||||
      run_command: /lib/systemd/systemd
 | 
			
		||||
  - name: ubuntu-2204-tiamat-py3
 | 
			
		||||
    driver:
 | 
			
		||||
      image: saltimages/salt-tiamat-py3:ubuntu-22.04
 | 
			
		||||
      run_command: /lib/systemd/systemd
 | 
			
		||||
  - name: ubuntu-2004-tiamat-py3
 | 
			
		||||
    driver:
 | 
			
		||||
      image: saltimages/salt-tiamat-py3:ubuntu-20.04
 | 
			
		||||
      run_command: /lib/systemd/systemd
 | 
			
		||||
  - name: ubuntu-1804-tiamat-py3
 | 
			
		||||
    driver:
 | 
			
		||||
      image: saltimages/salt-tiamat-py3:ubuntu-18.04
 | 
			
		||||
      run_command: /lib/systemd/systemd
 | 
			
		||||
  - name: centos-stream8-tiamat-py3
 | 
			
		||||
    driver:
 | 
			
		||||
      image: saltimages/salt-tiamat-py3:centos-stream8
 | 
			
		||||
  - 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-11-master-py3
 | 
			
		||||
    driver:
 | 
			
		||||
      image: saltimages/salt-master-py3:debian-11
 | 
			
		||||
      run_command: /lib/systemd/systemd
 | 
			
		||||
  - name: debian-10-master-py3
 | 
			
		||||
    driver:
 | 
			
		||||
      image: saltimages/salt-master-py3:debian-10
 | 
			
		||||
      run_command: /lib/systemd/systemd
 | 
			
		||||
  - name: debian-9-master-py3
 | 
			
		||||
    driver:
 | 
			
		||||
      image: saltimages/salt-master-py3:debian-9
 | 
			
		||||
      run_command: /lib/systemd/systemd
 | 
			
		||||
  - name: ubuntu-2204-master-py3
 | 
			
		||||
    driver:
 | 
			
		||||
      image: saltimages/salt-master-py3:ubuntu-22.04
 | 
			
		||||
      run_command: /lib/systemd/systemd
 | 
			
		||||
  - name: ubuntu-2004-master-py3
 | 
			
		||||
    driver:
 | 
			
		||||
      image: saltimages/salt-master-py3:ubuntu-20.04
 | 
			
		||||
      run_command: /lib/systemd/systemd
 | 
			
		||||
  - name: ubuntu-1804-master-py3
 | 
			
		||||
    driver:
 | 
			
		||||
      image: saltimages/salt-master-py3:ubuntu-18.04
 | 
			
		||||
      run_command: /lib/systemd/systemd
 | 
			
		||||
  - name: centos-stream8-master-py3
 | 
			
		||||
    driver:
 | 
			
		||||
      image: saltimages/salt-master-py3:centos-stream8
 | 
			
		||||
  - name: centos-7-master-py3
 | 
			
		||||
    driver:
 | 
			
		||||
      image: saltimages/salt-master-py3:centos-7
 | 
			
		||||
  - name: fedora-36-master-py3
 | 
			
		||||
    driver:
 | 
			
		||||
      image: saltimages/salt-master-py3:fedora-36
 | 
			
		||||
  - name: fedora-35-master-py3
 | 
			
		||||
    driver:
 | 
			
		||||
      image: saltimages/salt-master-py3:fedora-35
 | 
			
		||||
  - name: opensuse-leap-153-master-py3
 | 
			
		||||
    driver:
 | 
			
		||||
      image: saltimages/salt-master-py3:opensuse-leap-15.3
 | 
			
		||||
    # 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-tmbl-latest-master-py3
 | 
			
		||||
    driver:
 | 
			
		||||
      image: saltimages/salt-master-py3:opensuse-tumbleweed-latest
 | 
			
		||||
    # 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
 | 
			
		||||
  - 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 `3004.1`
 | 
			
		||||
  - name: debian-11-3004-1-py3
 | 
			
		||||
    driver:
 | 
			
		||||
      image: saltimages/salt-3004.1-py3:debian-11
 | 
			
		||||
      run_command: /lib/systemd/systemd
 | 
			
		||||
  - name: debian-10-3004-1-py3
 | 
			
		||||
    driver:
 | 
			
		||||
      image: saltimages/salt-3004.1-py3:debian-10
 | 
			
		||||
      run_command: /lib/systemd/systemd
 | 
			
		||||
  - name: debian-9-3004-1-py3
 | 
			
		||||
    driver:
 | 
			
		||||
      image: saltimages/salt-3004.1-py3:debian-9
 | 
			
		||||
      run_command: /lib/systemd/systemd
 | 
			
		||||
  - name: ubuntu-2204-3004-1-py3
 | 
			
		||||
    driver:
 | 
			
		||||
      image: saltimages/salt-3004.1-py3:ubuntu-22.04
 | 
			
		||||
      run_command: /lib/systemd/systemd
 | 
			
		||||
  - name: ubuntu-2004-3004-1-py3
 | 
			
		||||
    driver:
 | 
			
		||||
      image: saltimages/salt-3004.1-py3:ubuntu-20.04
 | 
			
		||||
      run_command: /lib/systemd/systemd
 | 
			
		||||
  - name: ubuntu-1804-3004-1-py3
 | 
			
		||||
    driver:
 | 
			
		||||
      image: saltimages/salt-3004.1-py3:ubuntu-18.04
 | 
			
		||||
      run_command: /lib/systemd/systemd
 | 
			
		||||
  - name: centos-stream8-3004-1-py3
 | 
			
		||||
    driver:
 | 
			
		||||
      image: saltimages/salt-3004.1-py3:centos-stream8
 | 
			
		||||
  - name: centos-7-3004-1-py3
 | 
			
		||||
    driver:
 | 
			
		||||
      image: saltimages/salt-3004.1-py3:centos-7
 | 
			
		||||
  - name: fedora-36-3004-1-py3
 | 
			
		||||
    driver:
 | 
			
		||||
      image: saltimages/salt-3004.1-py3:fedora-36
 | 
			
		||||
  - name: fedora-35-3004-1-py3
 | 
			
		||||
    driver:
 | 
			
		||||
      image: saltimages/salt-3004.1-py3:fedora-35
 | 
			
		||||
  - name: amazonlinux-2-3004-1-py3
 | 
			
		||||
    driver:
 | 
			
		||||
      image: saltimages/salt-3004.1-py3:amazonlinux-2
 | 
			
		||||
  - name: oraclelinux-8-3004-1-py3
 | 
			
		||||
    driver:
 | 
			
		||||
      image: saltimages/salt-3004.1-py3:oraclelinux-8
 | 
			
		||||
  - name: oraclelinux-7-3004-1-py3
 | 
			
		||||
    driver:
 | 
			
		||||
      image: saltimages/salt-3004.1-py3:oraclelinux-7
 | 
			
		||||
  - name: arch-base-latest-3004-1-py3
 | 
			
		||||
    driver:
 | 
			
		||||
      image: saltimages/salt-3004.1-py3:arch-base-latest
 | 
			
		||||
  - name: gentoo-stage3-latest-3004-1-py3
 | 
			
		||||
    driver:
 | 
			
		||||
      image: saltimages/salt-3004.1-py3:gentoo-stage3-latest
 | 
			
		||||
      run_command: /sbin/init
 | 
			
		||||
  - name: gentoo-stage3-systemd-3004-1-py3
 | 
			
		||||
    driver:
 | 
			
		||||
      image: saltimages/salt-3004.1-py3:gentoo-stage3-systemd
 | 
			
		||||
  - name: almalinux-8-3004-1-py3
 | 
			
		||||
    driver:
 | 
			
		||||
      image: saltimages/salt-3004.1-py3:almalinux-8
 | 
			
		||||
  - name: rockylinux-8-3004-1-py3
 | 
			
		||||
    driver:
 | 
			
		||||
      image: saltimages/salt-3004.1-py3:rockylinux-8
 | 
			
		||||
 | 
			
		||||
  ## SALT `3004.0`
 | 
			
		||||
  - name: opensuse-leap-153-3004-0-py3
 | 
			
		||||
    driver:
 | 
			
		||||
      image: saltimages/salt-3004.0-py3:opensuse-leap-15.3
 | 
			
		||||
    # 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-tmbl-latest-3004-0-py3
 | 
			
		||||
    driver:
 | 
			
		||||
      image: saltimages/salt-3004.0-py3:opensuse-tumbleweed-latest
 | 
			
		||||
    # Workaround to avoid intermittent failures on `opensuse-tumbleweed`:
 | 
			
		||||
    # => SCP did not finish successfully (255):  (Net::SCP::Error)
 | 
			
		||||
    transport:
 | 
			
		||||
      max_ssh_sessions: 1
 | 
			
		||||
 | 
			
		||||
  ## SALT `3003.4`
 | 
			
		||||
  - name: debian-10-3003-4-py3
 | 
			
		||||
    driver:
 | 
			
		||||
      image: saltimages/salt-3003.4-py3:debian-10
 | 
			
		||||
      run_command: /lib/systemd/systemd
 | 
			
		||||
  - name: debian-9-3003-4-py3
 | 
			
		||||
    driver:
 | 
			
		||||
      image: saltimages/salt-3003.4-py3:debian-9
 | 
			
		||||
      run_command: /lib/systemd/systemd
 | 
			
		||||
  - name: ubuntu-2004-3003-4-py3
 | 
			
		||||
    driver:
 | 
			
		||||
      image: saltimages/salt-3003.4-py3:ubuntu-20.04
 | 
			
		||||
      run_command: /lib/systemd/systemd
 | 
			
		||||
  - name: ubuntu-1804-3003-4-py3
 | 
			
		||||
    driver:
 | 
			
		||||
      image: saltimages/salt-3003.4-py3:ubuntu-18.04
 | 
			
		||||
      run_command: /lib/systemd/systemd
 | 
			
		||||
  - name: centos-stream8-3003-4-py3
 | 
			
		||||
    driver:
 | 
			
		||||
      image: saltimages/salt-3003.4-py3:centos-stream8
 | 
			
		||||
  - name: centos-7-3003-4-py3
 | 
			
		||||
    driver:
 | 
			
		||||
      image: saltimages/salt-3003.4-py3:centos-7
 | 
			
		||||
  - name: amazonlinux-2-3003-4-py3
 | 
			
		||||
    driver:
 | 
			
		||||
      image: saltimages/salt-3003.4-py3:amazonlinux-2
 | 
			
		||||
  - name: oraclelinux-8-3003-4-py3
 | 
			
		||||
    driver:
 | 
			
		||||
      image: saltimages/salt-3003.4-py3:oraclelinux-8
 | 
			
		||||
  - name: oraclelinux-7-3003-4-py3
 | 
			
		||||
    driver:
 | 
			
		||||
      image: saltimages/salt-3003.4-py3:oraclelinux-7
 | 
			
		||||
  - name: almalinux-8-3003-4-py3
 | 
			
		||||
    driver:
 | 
			
		||||
      image: saltimages/salt-3003.4-py3:almalinux-8
 | 
			
		||||
 | 
			
		||||
verifier:
 | 
			
		||||
  # https://www.inspec.io/
 | 
			
		||||
  name: inspec
 | 
			
		||||
  sudo: true
 | 
			
		||||
  reporter:
 | 
			
		||||
    # cli, documentation, html, progress, json, json-min, json-rspec, junit
 | 
			
		||||
    - cli
 | 
			
		||||
 | 
			
		||||
suites:
 | 
			
		||||
  - name: default
 | 
			
		||||
    provisioner:
 | 
			
		||||
      state_top:
 | 
			
		||||
        base:
 | 
			
		||||
          '*':
 | 
			
		||||
            - postfix._mapdata
 | 
			
		||||
            - postfix
 | 
			
		||||
            - postfix.config
 | 
			
		||||
      pillars:
 | 
			
		||||
        top.sls:
 | 
			
		||||
          base:
 | 
			
		||||
            '*':
 | 
			
		||||
              - postfix
 | 
			
		||||
      pillars_from_files:
 | 
			
		||||
        postfix.sls: test/salt/pillar/default.sls
 | 
			
		||||
    verifier:
 | 
			
		||||
      inspec_tests:
 | 
			
		||||
        - path: test/integration/default
 | 
			
		||||
							
								
								
									
										146
									
								
								pillar.example
									
									
									
									
									
								
							
							
						
						
									
										146
									
								
								pillar.example
									
									
									
									
									
								
							@ -1,84 +1,17 @@
 | 
			
		||||
# -*- coding: utf-8 -*-
 | 
			
		||||
# vim: ft=yaml
 | 
			
		||||
---
 | 
			
		||||
postfix:
 | 
			
		||||
  manage_master_config: true
 | 
			
		||||
  manage_master_config: True
 | 
			
		||||
  master_config:
 | 
			
		||||
    # Preferred way of managing services/processes. This allows for finegrained
 | 
			
		||||
    # control over each service. See postfix/services.yaml for defaults that can
 | 
			
		||||
    # be overridden.
 | 
			
		||||
    services:
 | 
			
		||||
      smtp:
 | 
			
		||||
        # Limit to no more than 10 smtp processes
 | 
			
		||||
        maxproc: 10
 | 
			
		||||
      # Enable oldstyle TLS wrapped SMTP
 | 
			
		||||
      smtps:
 | 
			
		||||
        enable: true
 | 
			
		||||
      # Enable submission service on port 587/tcp with custom options
 | 
			
		||||
      submission:
 | 
			
		||||
        enable: true
 | 
			
		||||
        args:
 | 
			
		||||
          - "-o smtpd_tls_security_level=encrypt"
 | 
			
		||||
          - "-o smtpd_sasl_auth_enable=yes"
 | 
			
		||||
          - "-o smtpd_client_restrictions: permit_sasl_authenticated,reject"
 | 
			
		||||
      tlsproxy:
 | 
			
		||||
        enable: true
 | 
			
		||||
        chroot: true
 | 
			
		||||
      uucp:
 | 
			
		||||
        enable: true
 | 
			
		||||
      # Dovecot delivery via deliver binary. For better performance, investigate
 | 
			
		||||
      # using LMTP instead: <https://wiki.dovecot.org/LMTP>
 | 
			
		||||
      dovecot:
 | 
			
		||||
        chroot: false
 | 
			
		||||
        command: pipe
 | 
			
		||||
        enable: true
 | 
			
		||||
        extras: '-d ${recipient}'
 | 
			
		||||
        flags: DRhu
 | 
			
		||||
        type: unix
 | 
			
		||||
        unpriv: false
 | 
			
		||||
        user: vmail:vmail
 | 
			
		||||
        argv: /usr/lib/dovecot/deliver
 | 
			
		||||
      # Completely customized mail-delivery-agent entry. Will be appended to the
 | 
			
		||||
      # master.cf file
 | 
			
		||||
      custom-mda:
 | 
			
		||||
        argv: /usr/local/sbin/mail-handler.py
 | 
			
		||||
        command: pipe
 | 
			
		||||
        extras: --rcpt ${recipient}
 | 
			
		||||
        flags: DRhu
 | 
			
		||||
        user: mail
 | 
			
		||||
        # Wrap the output in master.cf at 78 chars for better readability
 | 
			
		||||
        wrap: true
 | 
			
		||||
        # Avoid user and arvg settings to allow define internal processes
 | 
			
		||||
        # needed for randomizing relay IP (randmap functionality)
 | 
			
		||||
        no_args: true
 | 
			
		||||
    enable_submission: False
 | 
			
		||||
 | 
			
		||||
    # Backwards compatible definition of dovecot delivery in master.cf
 | 
			
		||||
    enable_dovecot: false
 | 
			
		||||
    # The following are the default values:
 | 
			
		||||
    dovecot:
 | 
			
		||||
      user: vmail
 | 
			
		||||
      group: vmail
 | 
			
		||||
      flags: DRhu
 | 
			
		||||
      argv: "/usr/lib/dovecot/deliver"
 | 
			
		||||
 | 
			
		||||
    # Backwards compatible definition of submission listener in master.cf
 | 
			
		||||
    enable_submission: false
 | 
			
		||||
    # To replace the defaults use this:
 | 
			
		||||
    submission:
 | 
			
		||||
      smtpd_tls_security_level: encrypt
 | 
			
		||||
      smtpd_sasl_auth_enable: 'yes'
 | 
			
		||||
      smtpd_client_restrictions: permit_sasl_authenticated,reject
 | 
			
		||||
 | 
			
		||||
  enable_service: true
 | 
			
		||||
  reload_service: true
 | 
			
		||||
  enable_service: True
 | 
			
		||||
 | 
			
		||||
  postgrey:
 | 
			
		||||
    enabled: true
 | 
			
		||||
    enable_service: true
 | 
			
		||||
    enabled: True
 | 
			
		||||
    enable_service: True
 | 
			
		||||
    location: inet:172.16.0.5:6379
 | 
			
		||||
 | 
			
		||||
  policyd-spf:
 | 
			
		||||
    enabled: true
 | 
			
		||||
    enabled: True
 | 
			
		||||
    time_limit: 7200s
 | 
			
		||||
 | 
			
		||||
  config:
 | 
			
		||||
@ -89,14 +22,13 @@ postfix:
 | 
			
		||||
    readme_directory: 'no'
 | 
			
		||||
    myhostname: localhost
 | 
			
		||||
    mydestination: localhost, localhost.localdomain
 | 
			
		||||
    relayhost: ''
 | 
			
		||||
    relayhost: 
 | 
			
		||||
    mynetworks: 127.0.0.0/8 [::ffff:127.0.0.0]/104 [::1]/128
 | 
			
		||||
    mailbox_size_limit: 0
 | 
			
		||||
    recipient_delimiter: +
 | 
			
		||||
    inet_interfaces: all
 | 
			
		||||
    inet_protocols: all
 | 
			
		||||
 | 
			
		||||
    # postsrsd:
 | 
			
		||||
    #postsrsd:
 | 
			
		||||
    sender_canonical_maps: tcp:127.0.0.1:10001
 | 
			
		||||
    sender_canonical_classes: envelope_sender
 | 
			
		||||
    recipient_canonical_maps: tcp:127.0.0.1:10002
 | 
			
		||||
@ -122,7 +54,6 @@ postfix:
 | 
			
		||||
 | 
			
		||||
    local_transport: virtual
 | 
			
		||||
    local_recipient_maps: $virtual_mailbox_maps
 | 
			
		||||
    # Use the `mapping` key to define the map
 | 
			
		||||
    transport_maps: hash:/etc/postfix/transport
 | 
			
		||||
 | 
			
		||||
    # SMTP server
 | 
			
		||||
@ -131,14 +62,8 @@ postfix:
 | 
			
		||||
    smtpd_sasl_auth_enable: 'yes'
 | 
			
		||||
    smtpd_sasl_type: dovecot
 | 
			
		||||
    smtpd_sasl_path: /var/run/dovecot/auth-client
 | 
			
		||||
    smtpd_recipient_restrictions: >-
 | 
			
		||||
      permit_mynetworks,
 | 
			
		||||
      permit_sasl_authenticated,
 | 
			
		||||
      reject_unauth_destination
 | 
			
		||||
    smtpd_relay_restrictions: >-
 | 
			
		||||
      permit_mynetworks,
 | 
			
		||||
      permit_sasl_authenticated,
 | 
			
		||||
      reject_unauth_destination
 | 
			
		||||
    smtpd_recipient_restrictions: permit_mynetworks, permit_sasl_authenticated, reject_unauth_destination
 | 
			
		||||
    smtpd_relay_restrictions: permit_mynetworks, permit_sasl_authenticated, reject_unauth_destination
 | 
			
		||||
    smtpd_sasl_security_options: noanonymous
 | 
			
		||||
    smtpd_sasl_tls_security_options: $smtpd_sasl_security_options
 | 
			
		||||
    smtpd_tls_auth_only: 'yes'
 | 
			
		||||
@ -157,34 +82,21 @@ postfix:
 | 
			
		||||
    smtp_use_tls: 'yes'
 | 
			
		||||
    smtp_tls_cert_file: /etc/postfix/ssl/example.com-relay-client-cert.crt
 | 
			
		||||
    smtp_tls_key_file: /etc/postfix/ssl/example.com-relay-client-cert.key
 | 
			
		||||
    smtp_tls_policy_maps: hash:/etc/postfix/tls_policy
 | 
			
		||||
 | 
			
		||||
    smtp_sasl_password_maps: hash:/etc/postfix/sasl_passwd
 | 
			
		||||
    sender_canonical_maps: hash:/etc/postfix/sender_canonical
 | 
			
		||||
    relay_recipient_maps: hash:/etc/postfix/relay_domains
 | 
			
		||||
    virtual_alias_maps: hash:/etc/postfix/virtual
 | 
			
		||||
 | 
			
		||||
  transport:
 | 
			
		||||
    DOMAIN_NAME: ':[IP_ADDRESS]'
 | 
			
		||||
 | 
			
		||||
  vmail:
 | 
			
		||||
    user: postfix_user
 | 
			
		||||
    password: DB_PASSWD
 | 
			
		||||
    hosts: DB_HOST
 | 
			
		||||
    dbname: postfix_db
 | 
			
		||||
 | 
			
		||||
  # add mysql query to virtual
 | 
			
		||||
  mysql:
 | 
			
		||||
    virtual_mailbox_domains:
 | 
			
		||||
      table: virtual_domains
 | 
			
		||||
      select_field: 1
 | 
			
		||||
      where_field: name
 | 
			
		||||
    virtual_alias_maps:
 | 
			
		||||
      table: virtual_aliases
 | 
			
		||||
      select_field: destination
 | 
			
		||||
      where_field: email
 | 
			
		||||
    virtual_mailbox_maps:
 | 
			
		||||
      table: virtual_users
 | 
			
		||||
      select_field: 1
 | 
			
		||||
      where_field: email
 | 
			
		||||
 | 
			
		||||
  aliases:
 | 
			
		||||
    # manage single aliases
 | 
			
		||||
    # this uses the aliases file defined in the minion config, /etc/aliases by default
 | 
			
		||||
@ -228,13 +140,6 @@ postfix:
 | 
			
		||||
        -----END RSA PRIVATE KEY-----
 | 
			
		||||
 | 
			
		||||
  mapping:
 | 
			
		||||
    transport_maps:
 | 
			
		||||
      - DOMAIN_NAME: ':[IP_ADDRESS]'
 | 
			
		||||
 | 
			
		||||
    smpt_tls_policy_maps:
 | 
			
		||||
      - example.com: encrypt
 | 
			
		||||
      - .example.com: encrypt
 | 
			
		||||
 | 
			
		||||
    smtp_sasl_password_maps:
 | 
			
		||||
      - smtp.example.com: myaccount:somepassword
 | 
			
		||||
 | 
			
		||||
@ -247,27 +152,6 @@ postfix:
 | 
			
		||||
 | 
			
		||||
    virtual_alias_maps:
 | 
			
		||||
      - groupaliasexample:
 | 
			
		||||
          - someuser_1@example.com
 | 
			
		||||
          - someuser_2@example.com
 | 
			
		||||
        - someuser_1@example.com
 | 
			
		||||
        - someuser_2@example.com
 | 
			
		||||
      - singlealiasexample: someuser_3@example.com
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
###
 | 
			
		||||
#
 | 
			
		||||
# Multiple virtual_alias_maps entries:
 | 
			
		||||
#
 | 
			
		||||
# You are free to define alternative mapping names
 | 
			
		||||
# and use them as 'variables' in your Postfix config:
 | 
			
		||||
# (Credit for the idea and the example goes to @roskens.)
 | 
			
		||||
 | 
			
		||||
postfix:
 | 
			
		||||
  config:
 | 
			
		||||
    virtual_alias_maps: $virtual_alias_1_maps $virtual_alias_2_maps
 | 
			
		||||
    virtual_alias_1_maps: hash:/etc/postfix/virtual
 | 
			
		||||
    virtual_alias_2_maps: pcre:/etc/postfix/virtual.pcre
 | 
			
		||||
  mapping:
 | 
			
		||||
    virtual_alias_1_maps:
 | 
			
		||||
      root:
 | 
			
		||||
        - me
 | 
			
		||||
    virtual_alias_2_maps:
 | 
			
		||||
      - '/(\S+)_(devel|preprod|prod)@sub.example.com$/': '$(1)@$(2).sub.example.com'
 | 
			
		||||
 | 
			
		||||
@ -1,13 +0,0 @@
 | 
			
		||||
# 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
 | 
			
		||||
}}
 | 
			
		||||
@ -1,22 +0,0 @@
 | 
			
		||||
# -*- coding: utf-8 -*-
 | 
			
		||||
# vim: ft=sls
 | 
			
		||||
---
 | 
			
		||||
{#- Get the `tplroot` from `tpldir` #}
 | 
			
		||||
{%- set tplroot = tpldir.split("/")[0] %}
 | 
			
		||||
{%- from tplroot ~ "/map.jinja" import postfix with context %}
 | 
			
		||||
 | 
			
		||||
{%- set _mapdata = {
 | 
			
		||||
      "values": postfix,
 | 
			
		||||
    } %}
 | 
			
		||||
{%- 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,156 +1,118 @@
 | 
			
		||||
{% from "postfix/map.jinja" import postfix with context %}
 | 
			
		||||
 | 
			
		||||
include:
 | 
			
		||||
  - postfix
 | 
			
		||||
 | 
			
		||||
postfix-config-file-directory-config-path:
 | 
			
		||||
{{ postfix.config_path }}:
 | 
			
		||||
  file.directory:
 | 
			
		||||
    - name: {{ postfix.config_path }}
 | 
			
		||||
    - user: root
 | 
			
		||||
    - group: {{ postfix.root_grp }}
 | 
			
		||||
    - dir_mode: '0755'
 | 
			
		||||
    - file_mode: '0644'
 | 
			
		||||
    - dir_mode: 755
 | 
			
		||||
    - file_mode: 644
 | 
			
		||||
    - makedirs: True
 | 
			
		||||
 | 
			
		||||
postfix-config-file-managed-main.cf:
 | 
			
		||||
{{ postfix.config_path }}/main.cf:
 | 
			
		||||
  file.managed:
 | 
			
		||||
    - name: {{ postfix.config_path }}/main.cf
 | 
			
		||||
    - source: salt://postfix/files/main.cf
 | 
			
		||||
    - user: root
 | 
			
		||||
    - group: {{ postfix.root_grp }}
 | 
			
		||||
    - mode: '0644'
 | 
			
		||||
    - mode: 644
 | 
			
		||||
    - require:
 | 
			
		||||
      - pkg: postfix-init-pkg-installed-postfix
 | 
			
		||||
      - pkg: postfix
 | 
			
		||||
    - watch_in:
 | 
			
		||||
      - service: postfix-init-service-running-postfix
 | 
			
		||||
      - service: postfix
 | 
			
		||||
    - template: jinja
 | 
			
		||||
    - context:
 | 
			
		||||
        postfix: {{ postfix|tojson }}
 | 
			
		||||
 | 
			
		||||
{% if 'vmail' in pillar.get('postfix', '') %}
 | 
			
		||||
postfix-config-file-managed-virtual-alias-maps.cf:
 | 
			
		||||
{{ postfix.config_path }}/virtual_alias_maps.cf:
 | 
			
		||||
  file.managed:
 | 
			
		||||
    - name: {{ postfix.config_path }}/virtual_alias_maps.cf
 | 
			
		||||
    - source: salt://postfix/files/virtual_alias_maps.cf
 | 
			
		||||
    - user: root
 | 
			
		||||
    - group: postfix
 | 
			
		||||
    - mode: '0640'
 | 
			
		||||
    - mode: 640
 | 
			
		||||
    - require:
 | 
			
		||||
      - pkg: postfix-init-pkg-installed-postfix
 | 
			
		||||
      - pkg: postfix
 | 
			
		||||
    - watch_in:
 | 
			
		||||
      - service: postfix-init-service-running-postfix
 | 
			
		||||
      - service: postfix
 | 
			
		||||
    - template: jinja
 | 
			
		||||
 | 
			
		||||
postfix-config-file-managed-virtual-mailbox-domains.cf:
 | 
			
		||||
{{ postfix.config_path }}/virtual_mailbox_domains.cf:
 | 
			
		||||
  file.managed:
 | 
			
		||||
    - name: {{ postfix.config_path }}/virtual_mailbox_domains.cf
 | 
			
		||||
    - source: salt://postfix/files/virtual_mailbox_domains.cf
 | 
			
		||||
    - user: root
 | 
			
		||||
    - group: postfix
 | 
			
		||||
    - mode: '0640'
 | 
			
		||||
    - mode: 640
 | 
			
		||||
    - require:
 | 
			
		||||
      - pkg: postfix-init-pkg-installed-postfix
 | 
			
		||||
      - pkg: postfix
 | 
			
		||||
    - watch_in:
 | 
			
		||||
      - service: postfix-init-service-running-postfix
 | 
			
		||||
      - service: postfix
 | 
			
		||||
    - template: jinja
 | 
			
		||||
 | 
			
		||||
postfix-config-file-managed-virtual-mailbox-maps.cf:
 | 
			
		||||
{{ postfix.config_path }}/virtual_mailbox_maps.cf:
 | 
			
		||||
  file.managed:
 | 
			
		||||
    - name: {{ postfix.config_path }}/virtual_mailbox_maps.cf
 | 
			
		||||
    - source: salt://postfix/files/virtual_mailbox_maps.cf
 | 
			
		||||
    - user: root
 | 
			
		||||
    - group: postfix
 | 
			
		||||
    - mode: '0640'
 | 
			
		||||
    - mode: 640
 | 
			
		||||
    - require:
 | 
			
		||||
      - pkg: postfix-init-pkg-installed-postfix
 | 
			
		||||
      - pkg: postfix
 | 
			
		||||
    - watch_in:
 | 
			
		||||
      - service: postfix-init-service-running-postfix
 | 
			
		||||
      - service: postfix
 | 
			
		||||
    - template: jinja
 | 
			
		||||
{% endif %}
 | 
			
		||||
 | 
			
		||||
{% if salt['pillar.get']('postfix:manage_master_config', True) %}
 | 
			
		||||
{% import_yaml "postfix/services.yaml" as postfix_master_services %}
 | 
			
		||||
postfix-config-file-managed-master.cf:
 | 
			
		||||
{{ postfix.config_path }}/master.cf:
 | 
			
		||||
  file.managed:
 | 
			
		||||
    - name: {{ postfix.config_path }}/master.cf
 | 
			
		||||
    - source: salt://postfix/files/master.cf
 | 
			
		||||
    - user: root
 | 
			
		||||
    - group: {{ postfix.root_grp }}
 | 
			
		||||
    - mode: '0644'
 | 
			
		||||
    - mode: 644
 | 
			
		||||
    - require:
 | 
			
		||||
      - pkg: postfix-init-pkg-installed-postfix
 | 
			
		||||
      - pkg: postfix
 | 
			
		||||
    - watch_in:
 | 
			
		||||
      - service: postfix-init-service-running-postfix
 | 
			
		||||
      - service: postfix
 | 
			
		||||
    - template: jinja
 | 
			
		||||
    - context:
 | 
			
		||||
        postfix: {{ postfix|tojson }}
 | 
			
		||||
        postfix_master_services: {{ postfix_master_services|tojson }}
 | 
			
		||||
{% endif %}
 | 
			
		||||
 | 
			
		||||
{% if 'transport' in pillar.get('postfix', '') %}
 | 
			
		||||
{{ postfix.config_path }}/transport:
 | 
			
		||||
  file.managed:
 | 
			
		||||
    - source: salt://postfix/files/transport
 | 
			
		||||
    - user: root
 | 
			
		||||
    - group: {{ postfix.root_grp }}
 | 
			
		||||
    - mode: 644
 | 
			
		||||
    - require:
 | 
			
		||||
      - pkg: postfix
 | 
			
		||||
    - watch_in:
 | 
			
		||||
      - service: postfix
 | 
			
		||||
    - template: jinja
 | 
			
		||||
 | 
			
		||||
run-postmap:
 | 
			
		||||
  cmd.wait:
 | 
			
		||||
    - name: {{ postfix.xbin_prefix }}/sbin/postmap {{ postfix.config_path }}/transport
 | 
			
		||||
    - cwd: /
 | 
			
		||||
    - watch:
 | 
			
		||||
      - file: {{ postfix.config_path }}/transport
 | 
			
		||||
{% endif %}
 | 
			
		||||
 | 
			
		||||
{%- for domain in salt['pillar.get']('postfix:certificates', {}).keys() %}
 | 
			
		||||
 | 
			
		||||
postfix-config-file-managed-{{ domain }}-ssl-certificate:
 | 
			
		||||
postfix_{{ domain }}_ssl_certificate:
 | 
			
		||||
 | 
			
		||||
  file.managed:
 | 
			
		||||
    - name: {{ postfix.config_path }}/ssl/{{ domain }}.crt
 | 
			
		||||
    - makedirs: True
 | 
			
		||||
    - contents_pillar: postfix:certificates:{{ domain }}:public_cert
 | 
			
		||||
    - watch_in:
 | 
			
		||||
       - service: postfix-init-service-running-postfix
 | 
			
		||||
       - service: postfix
 | 
			
		||||
 | 
			
		||||
postfix-config-file-managed-{{ domain }}-ssl-key:
 | 
			
		||||
postfix_{{ domain }}_ssl_key:
 | 
			
		||||
  file.managed:
 | 
			
		||||
    - name: {{ postfix.config_path }}/ssl/{{ domain }}.key
 | 
			
		||||
    - mode: '0600'
 | 
			
		||||
    - mode: 600
 | 
			
		||||
    - makedirs: True
 | 
			
		||||
    - contents_pillar: postfix:certificates:{{ domain }}:private_key
 | 
			
		||||
    - watch_in:
 | 
			
		||||
       - service: postfix-init-service-running-postfix
 | 
			
		||||
       - service: postfix
 | 
			
		||||
 | 
			
		||||
{% endfor %}
 | 
			
		||||
 | 
			
		||||
# manage various mappings
 | 
			
		||||
{% for mapping, data in salt['pillar.get']('postfix:mapping', {}).items() %}
 | 
			
		||||
  {%- set need_postmap = False %}
 | 
			
		||||
  {%- set file_path = salt['pillar.get']('postfix:config:' ~ mapping) %}
 | 
			
		||||
  {%- if file_path.startswith('proxy:') %}
 | 
			
		||||
    {#- Discard the proxy:-prefix #}
 | 
			
		||||
    {%- set _, file_type, file_path = file_path.split(':') %}
 | 
			
		||||
  {%- elif ':' in file_path %}
 | 
			
		||||
    {%- set file_type, file_path = file_path.split(':') %}
 | 
			
		||||
  {%- else %}
 | 
			
		||||
    {%- set file_type = postfix.default_database_type %}
 | 
			
		||||
  {%- endif %}
 | 
			
		||||
  {%- if not file_path.startswith('/') %}
 | 
			
		||||
    {%- set file_path = postfix.config_path ~ '/' ~ file_path %}
 | 
			
		||||
  {%- endif %}
 | 
			
		||||
  {%- if file_type in ("btree", "cdb", "cidr", "dbm", "hash", "pcre", "regexp", "sdbm") %}
 | 
			
		||||
    {%- set need_postmap = True %}
 | 
			
		||||
  {%- endif %}
 | 
			
		||||
postfix-config-file-managed-{{ mapping }}:
 | 
			
		||||
  file.managed:
 | 
			
		||||
    - name: {{ file_path }}
 | 
			
		||||
    - source: salt://postfix/files/mapping.j2
 | 
			
		||||
    - user: root
 | 
			
		||||
    - group: {{ postfix.root_grp }}
 | 
			
		||||
    {%- if mapping.endswith('_sasl_password_maps') %}
 | 
			
		||||
    - mode: '0600'
 | 
			
		||||
    {%- else %}
 | 
			
		||||
    - mode: '0644'
 | 
			
		||||
    {%- endif %}
 | 
			
		||||
    - template: jinja
 | 
			
		||||
    - context:
 | 
			
		||||
        data: {{ data|json() }}
 | 
			
		||||
    - require:
 | 
			
		||||
      - pkg: postfix-init-pkg-installed-postfix
 | 
			
		||||
      - file: postfix-config-file-managed-main.cf
 | 
			
		||||
  {%- if need_postmap %}
 | 
			
		||||
postfix-config-cmd-run-{{ mapping }}:
 | 
			
		||||
  cmd.run:
 | 
			
		||||
    - name: {{ postfix.xbin_prefix }}/sbin/postmap {{ file_path }}
 | 
			
		||||
    - cwd: /
 | 
			
		||||
    - onchanges:
 | 
			
		||||
      - file: postfix-config-file-managed-{{ mapping }}
 | 
			
		||||
    - watch_in:
 | 
			
		||||
      - service: postfix-init-service-running-postfix
 | 
			
		||||
  {%- endif %}
 | 
			
		||||
{% endfor %}
 | 
			
		||||
 | 
			
		||||
@ -1,6 +1,6 @@
 | 
			
		||||
# -*- coding: utf-8 -*-
 | 
			
		||||
# vim: ft=yaml
 | 
			
		||||
---
 | 
			
		||||
 | 
			
		||||
postfix:
 | 
			
		||||
  aliases_file: /etc/aliases
 | 
			
		||||
  config_path: /etc/postfix
 | 
			
		||||
@ -8,9 +8,5 @@ postfix:
 | 
			
		||||
  postsrsd_pkg: postsrsd
 | 
			
		||||
  postgrey_pkg: postgrey
 | 
			
		||||
  root_grp: root
 | 
			
		||||
  setgid_group: postdrop
 | 
			
		||||
  daemon_directory: /usr/libexec/postfix
 | 
			
		||||
  service: postfix
 | 
			
		||||
  xbin_prefix: /usr
 | 
			
		||||
  dovecot_deliver: /usr/lib/dovecot/deliver
 | 
			
		||||
  default_database_type: hash
 | 
			
		||||
 | 
			
		||||
@ -1,24 +1,23 @@
 | 
			
		||||
{%- from "postfix/map.jinja" import postfix with context -%}
 | 
			
		||||
{%- set config = salt['pillar.get']('postfix:config', {}) -%}
 | 
			
		||||
 | 
			
		||||
{#- " | list": Python3.6 retuns dict_keys here, which needs to be converted into a list here. -#}
 | 
			
		||||
{%- set processed_parameters = salt['pillar.get']('postfix:mapping', {}).keys() | list %}
 | 
			
		||||
 | 
			
		||||
{#- TODO: alias_maps probably belongs here, too: #}
 | 
			
		||||
{%- set processed_parameters = [
 | 
			
		||||
        'virtual_alias_maps',
 | 
			
		||||
        'smtp_sasl_password_maps',
 | 
			
		||||
        'sender_canonical_maps',
 | 
			
		||||
    ] %}
 | 
			
		||||
{%- macro set_parameter(parameter, default=None) -%}
 | 
			
		||||
{% set value = config.get(parameter, default) %}
 | 
			
		||||
{%- if value is not none %}
 | 
			
		||||
  {%- if value is number or value is string -%}
 | 
			
		||||
{{ parameter }} = {{ value }}
 | 
			
		||||
  {%- elif value is iterable -%}
 | 
			
		||||
{{ parameter }} = {{ value | join('\n') | indent(parameter | length + 3) }}
 | 
			
		||||
{{ parameter }} = {{ value | join(', ')}}
 | 
			
		||||
  {%- endif -%}
 | 
			
		||||
{%- do processed_parameters.append(parameter) %}
 | 
			
		||||
{%- endif %}
 | 
			
		||||
{%- endmacro -%}
 | 
			
		||||
 | 
			
		||||
#
 | 
			
		||||
# This file is managed by salt.
 | 
			
		||||
# Modify the salt pillar in the postfix formula that generates this file instead.
 | 
			
		||||
#
 | 
			
		||||
# Managed by config management
 | 
			
		||||
# See /usr/share/postfix/main.cf.dist for a commented, more complete version
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
@ -31,13 +30,6 @@
 | 
			
		||||
{{ set_parameter('biff', 'no') }}
 | 
			
		||||
{{ set_parameter('compatibility_level', '2') }}
 | 
			
		||||
 | 
			
		||||
# must be set
 | 
			
		||||
# See: https://serverfault.com/questions/952776/warning-undefined-parameter-mua-sender-restrictions-when-postconf-n
 | 
			
		||||
{{ set_parameter('smtpd_restriction_classes', 'mua_sender_restrictions, mua_client_restrictions, mua_helo_restrictions') }}
 | 
			
		||||
{{ set_parameter('mua_client_restrictions', 'permit_sasl_authenticated, reject') }}
 | 
			
		||||
{{ set_parameter('mua_sender_restrictions', 'permit_sasl_authenticated, reject') }}
 | 
			
		||||
{{ set_parameter('mua_helo_restrictions', 'permit_mynetworks, reject_non_fqdn_hostname, reject_invalid_hostname, permit') }}
 | 
			
		||||
 | 
			
		||||
# appending .domain is the MUA's job.
 | 
			
		||||
{{ set_parameter('append_dot_mydomain', 'no') }}
 | 
			
		||||
 | 
			
		||||
@ -46,11 +38,6 @@
 | 
			
		||||
 | 
			
		||||
{{ set_parameter('readme_directory', 'no') }}
 | 
			
		||||
 | 
			
		||||
# Apply default setgid_group
 | 
			
		||||
{{ set_parameter('setgid_group', postfix.setgid_group) }}
 | 
			
		||||
# Set daemon directory
 | 
			
		||||
{{ set_parameter('daemon_directory', postfix.daemon_directory) }}
 | 
			
		||||
 | 
			
		||||
{%- set relay_restrictions = ['permit_mynetworks'] %}
 | 
			
		||||
{%- set recipient_restrictions = ['permit_mynetworks'] %}
 | 
			
		||||
 | 
			
		||||
@ -96,7 +83,6 @@
 | 
			
		||||
{{ set_parameter('mailbox_size_limit', '0') }}
 | 
			
		||||
{{ set_parameter('recipient_delimiter', '+') }}
 | 
			
		||||
{{ set_parameter('inet_interfaces', 'all') }}
 | 
			
		||||
{{ set_parameter('inet_protocols', 'all') }}
 | 
			
		||||
{{ set_parameter('message_size_limit', '41943040') }}
 | 
			
		||||
 | 
			
		||||
{%- if config.get('relayhost') %}
 | 
			
		||||
@ -118,21 +104,20 @@ policy-spf_time_limit = {{ policyd_spf.get('time_limit', '3600s') }}
 | 
			
		||||
{{ set_parameter('smtpd_recipient_restrictions', recipient_restrictions) }}
 | 
			
		||||
 | 
			
		||||
{# From init.sls #}
 | 
			
		||||
{%- set default_database_type = salt['pillar.get']('postfix:config:default_database_type', 'hash') %}
 | 
			
		||||
 | 
			
		||||
{%- for mapping, data in salt['pillar.get']('postfix:mapping', {}).items() %}
 | 
			
		||||
  {%- set file_path = salt['pillar.get']('postfix:config:' ~ mapping) %}
 | 
			
		||||
  {%- if file_path.startswith('proxy:') %}
 | 
			
		||||
    {#- Discard the proxy:-prefix #}
 | 
			
		||||
    {%- set _, file_type, file_path = file_path.split(':') %}
 | 
			
		||||
  {%- elif ':' in file_path %}
 | 
			
		||||
  {%- if ':' in file_path %}
 | 
			
		||||
    {%- set file_type, file_path = file_path.split(':') %}
 | 
			
		||||
  {%- else %}
 | 
			
		||||
    {%- set file_type = postfix.default_database_type %}
 | 
			
		||||
    {%- set file_type = default_database_type %}
 | 
			
		||||
  {%- endif %}
 | 
			
		||||
  {%- if not file_path.startswith('/') %}
 | 
			
		||||
    {%- set file_path = postfix.config_path ~ '/' ~ file_path %}
 | 
			
		||||
  {%- endif %}
 | 
			
		||||
 | 
			
		||||
{{ set_parameter(mapping, file_type ~ ':' ~ file_path) }}
 | 
			
		||||
{{ mapping }} = {{ file_type }}:{{ file_path }}
 | 
			
		||||
{% endfor %}
 | 
			
		||||
 | 
			
		||||
{# Accept arbitrary parameters -#}
 | 
			
		||||
 | 
			
		||||
@ -15,13 +15,12 @@
 | 
			
		||||
{%- endmacro %}
 | 
			
		||||
 | 
			
		||||
{%- if data is mapping %}
 | 
			
		||||
{% for key, value in data.items() %}
 | 
			
		||||
{% for key, value in data.iteritems() %}
 | 
			
		||||
{{ format_value(key, value) }}
 | 
			
		||||
{%- endfor -%}
 | 
			
		||||
{%- else %}
 | 
			
		||||
{#- Some settings need order, handle OrderedDict #}
 | 
			
		||||
{% for item in data %}
 | 
			
		||||
{%-   set key, value = item.popitem() %}
 | 
			
		||||
{{ format_value(key, value) }}
 | 
			
		||||
{{ format_value(item.keys()[0], item.values()[0]) }}
 | 
			
		||||
{%- endfor -%}
 | 
			
		||||
{%- endif %}
 | 
			
		||||
 | 
			
		||||
@ -1,66 +1,4 @@
 | 
			
		||||
{%- set master_config = salt['pillar.get']('postfix:master_config', {}) -%}
 | 
			
		||||
{#-
 | 
			
		||||
 # Handle the case that the pillar data does not provide any service
 | 
			
		||||
 # configuration but submission parameters are provided in the pillar.
 | 
			
		||||
 # This is important for backwards compatibility with sites that are using
 | 
			
		||||
 # the previous enable_submission pillar settings.
 | 
			
		||||
 -#}
 | 
			
		||||
{%- set additional_services = {} -%}
 | 
			
		||||
{%- if master_config.get('enable_submission', False) and not salt[
 | 
			
		||||
        'pillar.get']('postfix:master_config:services:submission', False)  -%}
 | 
			
		||||
{%-   do additional_services.update({'submission': {'chroot': False,
 | 
			
		||||
                                                    'command': 'smtpd',
 | 
			
		||||
                                                    'enable': True,
 | 
			
		||||
                                                    'type': 'inet',
 | 
			
		||||
                                                    'args': [],
 | 
			
		||||
                                                    'private': False}}) -%}
 | 
			
		||||
{%-   if master_config.get('submission', False) -%}
 | 
			
		||||
{%-     for parameter, value in master_config.get('submission', {}).items() -%}
 | 
			
		||||
{%-       if value is number or value is string -%}
 | 
			
		||||
{%-         do additional_services['submission']['args'].append('-o %s=%s' % (
 | 
			
		||||
                parameter, value)) -%}
 | 
			
		||||
{%-       elif value is iterable -%}
 | 
			
		||||
{%-         do additional_services['submission']['args'].append('-o %s=%s' % (
 | 
			
		||||
                parameter, ','.join(value))) -%}
 | 
			
		||||
{%-       endif -%}
 | 
			
		||||
{%-     endfor -%}
 | 
			
		||||
{%-   else -%}
 | 
			
		||||
{%-     do additional_services[
 | 
			
		||||
             'submission']['args'].extend(['#  -o syslog_name=postfix/submission',
 | 
			
		||||
                                           '-o smtpd_tls_security_level=encrypt',
 | 
			
		||||
                                           '-o smtpd_sasl_auth_enable=yes',
 | 
			
		||||
                                           '#  -o smtpd_reject_unlisted_recipient=no',
 | 
			
		||||
                                           '#  -o smtpd_client_restrictions=$mua_client_restrictions',
 | 
			
		||||
                                           '#  -o smtpd_helo_restrictions=$mua_helo_restrictions',
 | 
			
		||||
                                           '#  -o smtpd_sender_restrictions=$mua_sender_restrictions',
 | 
			
		||||
                                           '#  -o smtpd_recipient_restrictions=',
 | 
			
		||||
                                           '#  -o smtpd_relay_restrictions=permit_sasl_authenticated,reject',
 | 
			
		||||
                                           '#  -o milter_macro_daemon_name=ORIGINATING'
 | 
			
		||||
                                          ]) -%}
 | 
			
		||||
{%-   endif -%}
 | 
			
		||||
{%- endif -%}
 | 
			
		||||
 | 
			
		||||
{#- Format the postfix service parameters correctly -#}
 | 
			
		||||
{%- macro service_param(service, service_name, parameter_name, default='-') -%}
 | 
			
		||||
  {#- Fetch the value from the passed service dictionary or fall back to the
 | 
			
		||||
   # service defaults by chaining .get() commands. #}
 | 
			
		||||
  {%- set value = service.get(parameter_name,
 | 
			
		||||
                      postfix_master_services.defaults[service_name].get(
 | 
			
		||||
                        parameter_name, default)) -%}
 | 
			
		||||
  {%- if value is sameas false -%}
 | 
			
		||||
n
 | 
			
		||||
  {%- elif value is sameas true -%}
 | 
			
		||||
y
 | 
			
		||||
  {%- elif value is number or value is string -%}
 | 
			
		||||
{{ value }}
 | 
			
		||||
  {%- else -%}
 | 
			
		||||
-
 | 
			
		||||
  {%- endif -%}
 | 
			
		||||
{%- endmacro -%}
 | 
			
		||||
 | 
			
		||||
#
 | 
			
		||||
# This file is managed by salt.
 | 
			
		||||
# Modify the salt pillar in the postfix formula that generates this file instead.
 | 
			
		||||
{% set master_config = salt['pillar.get']('postfix:master_config', {}) -%}
 | 
			
		||||
#
 | 
			
		||||
# Postfix master process configuration file.  For details on the format
 | 
			
		||||
# of the file, see the master(5) manual page (command: "man 5 master" or
 | 
			
		||||
@ -72,109 +10,62 @@ y
 | 
			
		||||
# service type  private unpriv  chroot  wakeup  maxproc command + args
 | 
			
		||||
#               (yes)   (yes)   (no)    (never) (100)
 | 
			
		||||
# ==========================================================================
 | 
			
		||||
{%- for service_name in postfix_master_services.order %}
 | 
			
		||||
{#-   Try to get the service configuration from the pillar if present.
 | 
			
		||||
 #    Next try if the service has been dynamically configured and is present in
 | 
			
		||||
 #    the additional_services dictionary.
 | 
			
		||||
 #    If absent, fall back to the defaults provided in services.jinja -#}
 | 
			
		||||
{%-   set service = salt['pillar.get']('postfix:master_config:services:%s' % (
 | 
			
		||||
                                         service_name,),
 | 
			
		||||
                                         additional_services.get(service_name,
 | 
			
		||||
                                         postfix_master_services.defaults[service_name])) -%}
 | 
			
		||||
{%-   if service.get('enable', True) -%}
 | 
			
		||||
{%-     set comment = '' -%}
 | 
			
		||||
{%-   else -%}
 | 
			
		||||
{%-     set comment = '#' -%}
 | 
			
		||||
{%-   endif %}
 | 
			
		||||
{{ "%s%-9s %-5s %-7s %-7s %-7s %-7s %-7s %s" | format(comment,
 | 
			
		||||
                                               service_param(service, service_name, 'service', service_name),
 | 
			
		||||
                                               service_param(service, service_name, 'type'),
 | 
			
		||||
                                               service_param(service, service_name, 'private'),
 | 
			
		||||
                                               service_param(service, service_name, 'unpriv'),
 | 
			
		||||
                                               service_param(service, service_name, 'chroot'),
 | 
			
		||||
                                               service_param(service, service_name, 'wakeup'),
 | 
			
		||||
                                               service_param(service, service_name, 'maxproc'),
 | 
			
		||||
                                               service_param(service, service_name, 'command', service_name)) -}}
 | 
			
		||||
{%-   if service.args is not none -%}
 | 
			
		||||
{%-     for option in service.get('args', postfix_master_services.defaults[
 | 
			
		||||
                                            service_name].get('args', [])) -%}
 | 
			
		||||
{%-       if option.startswith('#') %}
 | 
			
		||||
{{ option }}
 | 
			
		||||
{%-       else %}
 | 
			
		||||
{{ comment }}  {{ option }}
 | 
			
		||||
{%-       endif %}
 | 
			
		||||
{%-     endfor %}
 | 
			
		||||
{%-   endif %}
 | 
			
		||||
{%- endfor %}
 | 
			
		||||
smtp      inet  n       -       n       -       -       smtpd
 | 
			
		||||
#smtp      inet  n       -       n       -       1       postscreen
 | 
			
		||||
#smtpd     pass  -       -       n       -       -       smtpd
 | 
			
		||||
#dnsblog   unix  -       -       n       -       0       dnsblog
 | 
			
		||||
#tlsproxy  unix  -       -       n       -       0       tlsproxy
 | 
			
		||||
{% if master_config.get('enable_submission', False) %}
 | 
			
		||||
submission inet n       -       n       -       -       smtpd
 | 
			
		||||
#  -o syslog_name=postfix/submission
 | 
			
		||||
  -o smtpd_tls_security_level=encrypt
 | 
			
		||||
  -o smtpd_sasl_auth_enable=yes
 | 
			
		||||
#  -o smtpd_reject_unlisted_recipient=no
 | 
			
		||||
#  -o smtpd_client_restrictions=$mua_client_restrictions
 | 
			
		||||
#  -o smtpd_helo_restrictions=$mua_helo_restrictions
 | 
			
		||||
#  -o smtpd_sender_restrictions=$mua_sender_restrictions
 | 
			
		||||
#  -o smtpd_recipient_restrictions=
 | 
			
		||||
#  -o smtpd_relay_restrictions=permit_sasl_authenticated,reject
 | 
			
		||||
#  -o milter_macro_daemon_name=ORIGINATING
 | 
			
		||||
{% endif %}
 | 
			
		||||
#smtps     inet  n       -       n       -       -       smtpd
 | 
			
		||||
#  -o syslog_name=postfix/smtps
 | 
			
		||||
#  -o smtpd_tls_wrappermode=yes
 | 
			
		||||
#  -o smtpd_sasl_auth_enable=yes
 | 
			
		||||
#  -o smtpd_reject_unlisted_recipient=no
 | 
			
		||||
#  -o smtpd_client_restrictions=$mua_client_restrictions
 | 
			
		||||
#  -o smtpd_helo_restrictions=$mua_helo_restrictions
 | 
			
		||||
#  -o smtpd_sender_restrictions=$mua_sender_restrictions
 | 
			
		||||
#  -o smtpd_recipient_restrictions=
 | 
			
		||||
#  -o smtpd_relay_restrictions=permit_sasl_authenticated,reject
 | 
			
		||||
#  -o milter_macro_daemon_name=ORIGINATING
 | 
			
		||||
#628       inet  n       -       n       -       -       qmqpd
 | 
			
		||||
pickup    unix  n       -       n       60      1       pickup
 | 
			
		||||
cleanup   unix  n       -       n       -       0       cleanup
 | 
			
		||||
qmgr      unix  n       -       n       300     1       qmgr
 | 
			
		||||
#qmgr     unix  n       -       n       300     1       oqmgr
 | 
			
		||||
tlsmgr    unix  -       -       n       1000?   1       tlsmgr
 | 
			
		||||
rewrite   unix  -       -       n       -       -       trivial-rewrite
 | 
			
		||||
bounce    unix  -       -       n       -       0       bounce
 | 
			
		||||
defer     unix  -       -       n       -       0       bounce
 | 
			
		||||
trace     unix  -       -       n       -       0       bounce
 | 
			
		||||
verify    unix  -       -       n       -       1       verify
 | 
			
		||||
flush     unix  n       -       n       1000?   0       flush
 | 
			
		||||
proxymap  unix  -       -       n       -       -       proxymap
 | 
			
		||||
proxywrite unix -       -       n       -       1       proxymap
 | 
			
		||||
smtp      unix  -       -       n       -       -       smtp
 | 
			
		||||
relay     unix  -       -       n       -       -       smtp
 | 
			
		||||
#       -o smtp_helo_timeout=5 -o smtp_connect_timeout=5
 | 
			
		||||
showq     unix  n       -       n       -       -       showq
 | 
			
		||||
error     unix  -       -       n       -       -       error
 | 
			
		||||
retry     unix  -       -       n       -       -       error
 | 
			
		||||
discard   unix  -       -       n       -       -       discard
 | 
			
		||||
local     unix  -       n       n       -       -       local
 | 
			
		||||
virtual   unix  -       n       n       -       -       virtual
 | 
			
		||||
lmtp      unix  -       -       n       -       -       lmtp
 | 
			
		||||
anvil     unix  -       -       n       -       1       anvil
 | 
			
		||||
scache    unix  -       -       n       -       1       scache
 | 
			
		||||
#
 | 
			
		||||
{%- set handled_extra_services = [] -%}
 | 
			
		||||
{%- macro extra_service(service_name, wrap=False) -%}
 | 
			
		||||
{%-   do handled_extra_services.append(service_name) -%}
 | 
			
		||||
{%-   set service = salt['pillar.get']('postfix:master_config:services:%s' % (
 | 
			
		||||
                                         service_name,),
 | 
			
		||||
                                         postfix_master_services.defaults[service_name]) -%}
 | 
			
		||||
{%-   if service.get('enable', True) -%}
 | 
			
		||||
{%-     set comment = '' -%}
 | 
			
		||||
{%-   else -%}
 | 
			
		||||
{%-     set comment = '#' -%}
 | 
			
		||||
{%-   endif -%}
 | 
			
		||||
{{    "%s%-9s %-5s %-7s %-7s %-7s %-7s %-7s %s" | format(comment,
 | 
			
		||||
                                               service_param(service, service_name, 'service', service_name),
 | 
			
		||||
                                               service_param(service, service_name, 'type'),
 | 
			
		||||
                                               service_param(service, service_name, 'private'),
 | 
			
		||||
                                               service_param(service, service_name, 'unpriv'),
 | 
			
		||||
                                               service_param(service, service_name, 'chroot'),
 | 
			
		||||
                                               service_param(service, service_name, 'wakeup'),
 | 
			
		||||
                                               service_param(service, service_name, 'maxproc'),
 | 
			
		||||
                                               service_param(service, service_name, 'command', service_name)) }}
 | 
			
		||||
{%-   if 'no_args' in service -%}
 | 
			
		||||
{%-     set parameter_str = "%s %s" | format(comment,service_param(service, service_name, 'extras', '')) -%}
 | 
			
		||||
{%-   else -%}
 | 
			
		||||
{%-   if 'flags' in service or 'flags' in postfix_master_services.defaults[service_name] -%}
 | 
			
		||||
{%-     set parameter_str = "%s  flags=%s user=%s argv=%s %s" | format(comment,
 | 
			
		||||
                                            service_param(service, service_name, 'flags'),
 | 
			
		||||
                                            service_param(service, service_name, 'user'),
 | 
			
		||||
                                            service_param(service, service_name, 'argv'),
 | 
			
		||||
                                            service_param(service, service_name, 'extras', '')) -%}
 | 
			
		||||
{%-   else -%}
 | 
			
		||||
{%-      set parameter_str = "%s  user=%s argv=%s %s" | format(comment,
 | 
			
		||||
                                            service_param(service, service_name, 'user'),
 | 
			
		||||
                                            service_param(service, service_name, 'argv'),
 | 
			
		||||
                                            service_param(service, service_name, 'extras', '')) -%}
 | 
			
		||||
{%-   endif -%}
 | 
			
		||||
{%-   endif -%}{# if 'no_args' in service #}
 | 
			
		||||
{%-   if wrap %}
 | 
			
		||||
{{      parameter_str | wordwrap(width=wrap, break_long_words=False, wrapstring='\n%s  ' | format(comment)) }}
 | 
			
		||||
{%-   else %}
 | 
			
		||||
{{      parameter_str }}
 | 
			
		||||
{%-   endif -%}
 | 
			
		||||
{%- endmacro -%}
 | 
			
		||||
 | 
			
		||||
{#- Handle legacy configuration of services for backwards compatibility
 | 
			
		||||
    by extending the services dictionary accordingly #}
 | 
			
		||||
{%- if salt['pillar.get']('postfix:policyd-spf:enabled', False) %}
 | 
			
		||||
{%-   do postfix_master_services.defaults.update({'policy-spf': {
 | 
			
		||||
                                                    'command': 'spawn',
 | 
			
		||||
                                                    'chroot': False,
 | 
			
		||||
                                                    'enable': True,
 | 
			
		||||
                                                    'type': 'unix',
 | 
			
		||||
                                                    'unpriv': False,
 | 
			
		||||
                                                    'user': 'nobody',
 | 
			
		||||
                                                    'argv': '%s/bin/policyd-spf' | format(postfix.xbin_prefix)}}) %}
 | 
			
		||||
{%- endif %}
 | 
			
		||||
{%- if master_config.get('enable_dovecot', False) -%}
 | 
			
		||||
{%-   set dovecot = master_config.get('dovecot', {} )%}
 | 
			
		||||
{%-   do postfix_master_services.defaults.update({'dovecot': {
 | 
			
		||||
                                                    'command': 'pipe',
 | 
			
		||||
                                                    'chroot': False,
 | 
			
		||||
                                                    'enable': True,
 | 
			
		||||
                                                    'extras': '-d ${recipient}',
 | 
			
		||||
                                                    'flags': dovecot.get('flags', 'DRhu'),
 | 
			
		||||
                                                    'type': 'unix',
 | 
			
		||||
                                                    'unpriv': False,
 | 
			
		||||
                                                    'user': '%s:%s' | format(dovecot.get('user', 'vmail'), dovecot.get('group', 'vmail')),
 | 
			
		||||
                                                    'argv': dovecot.get('argv', postfix.dovecot_deliver) }}) %}
 | 
			
		||||
{%- endif %}
 | 
			
		||||
# ====================================================================
 | 
			
		||||
# Interfaces to non-Postfix software. Be sure to examine the manual
 | 
			
		||||
# pages of the non-Postfix software to find out what options it wants.
 | 
			
		||||
@ -187,7 +78,8 @@ y
 | 
			
		||||
# maildrop. See the Postfix MAILDROP_README file for details.
 | 
			
		||||
# Also specify in main.cf: maildrop_destination_recipient_limit=1
 | 
			
		||||
#
 | 
			
		||||
{{ extra_service('maildrop') }}
 | 
			
		||||
#maildrop  unix  -       n       n       -       -       pipe
 | 
			
		||||
#  flags=DRhu user=vmail argv=/usr/local/bin/maildrop -d ${recipient}
 | 
			
		||||
#
 | 
			
		||||
# ====================================================================
 | 
			
		||||
#
 | 
			
		||||
@ -205,42 +97,41 @@ y
 | 
			
		||||
# Cyrus 2.1.5 (Amos Gouaux)
 | 
			
		||||
# Also specify in main.cf: cyrus_destination_recipient_limit=1
 | 
			
		||||
#
 | 
			
		||||
{{ extra_service('cyrus') }}
 | 
			
		||||
#cyrus     unix  -       n       n       -       -       pipe
 | 
			
		||||
#  user=cyrus argv=/cyrus/bin/deliver -e -r ${sender} -m ${extension} ${user}
 | 
			
		||||
#
 | 
			
		||||
# ====================================================================
 | 
			
		||||
#
 | 
			
		||||
# Old example of delivery via Cyrus.
 | 
			
		||||
#
 | 
			
		||||
{{ extra_service('old-cyrus') }}
 | 
			
		||||
#old-cyrus unix  -       n       n       -       -       pipe
 | 
			
		||||
#  flags=R user=cyrus argv=/cyrus/bin/deliver -e -m ${extension} ${user}
 | 
			
		||||
#
 | 
			
		||||
# ====================================================================
 | 
			
		||||
#
 | 
			
		||||
# See the Postfix UUCP_README file for configuration details.
 | 
			
		||||
#
 | 
			
		||||
{{ extra_service('uucp') }}
 | 
			
		||||
#uucp      unix  -       n       n       -       -       pipe
 | 
			
		||||
#  flags=Fqhu user=uucp argv=uux -r -n -z -a$sender - $nexthop!rmail ($recipient)
 | 
			
		||||
#
 | 
			
		||||
# ====================================================================
 | 
			
		||||
#
 | 
			
		||||
# Other external delivery methods.
 | 
			
		||||
#
 | 
			
		||||
{{ extra_service('ifmail') }}
 | 
			
		||||
#ifmail    unix  -       n       n       -       -       pipe
 | 
			
		||||
#  flags=F user=ftn argv=/usr/lib/ifmail/ifmail -r $nexthop ($recipient)
 | 
			
		||||
#
 | 
			
		||||
{{ extra_service('bsmtp') }}
 | 
			
		||||
#bsmtp     unix  -       n       n       -       -       pipe
 | 
			
		||||
#  flags=Fq. user=bsmtp argv=/usr/local/sbin/bsmtp -f $sender $nexthop $recipient
 | 
			
		||||
#
 | 
			
		||||
{{ extra_service('scalemail-backend', 79) }}
 | 
			
		||||
#scalemail-backend unix -       n       n       -       2       pipe
 | 
			
		||||
#  flags=R user=scalemail argv=/usr/lib/scalemail/bin/scalemail-store
 | 
			
		||||
#  ${nexthop} ${user} ${extension}
 | 
			
		||||
#
 | 
			
		||||
{{ extra_service('mailman', 79) }}
 | 
			
		||||
{#- Handle custom services configured as pillars by extending the services
 | 
			
		||||
    dictionary for all defined services that have not been otherwise be
 | 
			
		||||
    handled yet. -#}
 | 
			
		||||
{%- for service in salt['pillar.get']('postfix:master_config:services', []) if not service in handled_extra_services -%}
 | 
			
		||||
{%-  do postfix_master_services.defaults.update({service: salt['pillar.get']('postfix:master_config:services:%s' % (service,))}) -%}
 | 
			
		||||
{%- endfor -%}
 | 
			
		||||
{%- for service in postfix_master_services.defaults if not service in handled_extra_services and not service in postfix_master_services.order %}
 | 
			
		||||
#
 | 
			
		||||
{%-   if postfix_master_services.defaults[service].get('wrap', False) %}
 | 
			
		||||
{{      extra_service(service, 78) }}
 | 
			
		||||
{%-   else %}
 | 
			
		||||
{{      extra_service(service) }}
 | 
			
		||||
{%-   endif %}
 | 
			
		||||
{%- endfor %}
 | 
			
		||||
#mailman   unix  -       n       n       -       -       pipe
 | 
			
		||||
#  flags=FR user=list argv=/usr/lib/mailman/bin/postfix-to-mailman.py
 | 
			
		||||
#  ${nexthop} ${user}
 | 
			
		||||
{% if salt['pillar.get']('postfix:policyd-spf:enabled', False) %}
 | 
			
		||||
policy-spf  unix  -       n       n       -       -       spawn
 | 
			
		||||
  user=nobody argv={{ xbin_prefix }}/bin/policyd-spf
 | 
			
		||||
{%- endif %}
 | 
			
		||||
 | 
			
		||||
							
								
								
									
										17
									
								
								postfix/files/transport
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										17
									
								
								postfix/files/transport
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,17 @@
 | 
			
		||||
#
 | 
			
		||||
# This file is managed by salt
 | 
			
		||||
#
 | 
			
		||||
 | 
			
		||||
{% set config = salt['pillar.get']('postfix:transport', {}) -%}
 | 
			
		||||
{% macro set_parameter(parameter, default=None) -%}
 | 
			
		||||
{% set value = config.get(parameter, default) -%}
 | 
			
		||||
{% if value is not none -%}
 | 
			
		||||
{{ parameter }} {{ value }}
 | 
			
		||||
{% endif -%}
 | 
			
		||||
{% endmacro -%}
 | 
			
		||||
 | 
			
		||||
{# Accept arbitrary parameters -#}
 | 
			
		||||
{% for parameter in config -%}
 | 
			
		||||
{{ set_parameter(parameter) }}
 | 
			
		||||
{% endfor -%}
 | 
			
		||||
 | 
			
		||||
@ -1,10 +1,3 @@
 | 
			
		||||
{%- if 'mysql' in salt['pillar.get']('postfix:config:virtual_alias_maps', '') %}
 | 
			
		||||
{%- set config = salt['pillar.get']('postfix:mysql:virtual_alias_maps', {}) -%}
 | 
			
		||||
{%- for key,value in salt['pillar.get']('postfix:vmail').items() %}
 | 
			
		||||
{{ key }} = {{ value }}
 | 
			
		||||
{%- endfor %}
 | 
			
		||||
query = SELECT {{ config.select_field|default('destination') }} FROM {{ config.table|default('virtual_aliases') }} WHERE {{ config.where_field|default('email') }}='%s'
 | 
			
		||||
{%- else %}
 | 
			
		||||
{% set config = salt['pillar.get']('postfix:vmail', {}) -%}
 | 
			
		||||
{% macro set_parameter(parameter, default=None) -%}
 | 
			
		||||
{% set value = config.get(parameter, default) -%}
 | 
			
		||||
@ -21,4 +14,4 @@ query = SELECT {{ config.select_field|default('destination') }} FROM {{ config.t
 | 
			
		||||
{{ set_parameter('table', 'alias') }}
 | 
			
		||||
{{ set_parameter('select_field', 'goto') }}
 | 
			
		||||
{{ set_parameter('where_field', 'address') }}
 | 
			
		||||
{%- endif %}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
@ -1,10 +1,3 @@
 | 
			
		||||
{%- if 'mysql' in salt['pillar.get']('postfix:config:virtual_mailbox_domains', '') %}
 | 
			
		||||
{%- set config = salt['pillar.get']('postfix:mysql:virtual_mailbox_domains', {}) -%}
 | 
			
		||||
{%- for key,value in salt['pillar.get']('postfix:vmail').items() %}
 | 
			
		||||
{{ key }} = {{ value }}
 | 
			
		||||
{%- endfor %}
 | 
			
		||||
query = SELECT {{ config.select_field|default('1') }} FROM {{ config.table|default('virtual_domains') }} WHERE {{ config.where_field|default('name') }}='%s'
 | 
			
		||||
{%- else %}
 | 
			
		||||
{% set config = salt['pillar.get']('postfix:vmail', {}) -%}
 | 
			
		||||
{% macro set_parameter(parameter, default=None) -%}
 | 
			
		||||
{% set value = config.get(parameter, default) -%}
 | 
			
		||||
@ -21,4 +14,4 @@ query = SELECT {{ config.select_field|default('1') }} FROM {{ config.table|defau
 | 
			
		||||
{{ set_parameter('table', 'domain') }}
 | 
			
		||||
{{ set_parameter('select_field', 'domain') }}
 | 
			
		||||
{{ set_parameter('where_field', 'domain') }}
 | 
			
		||||
{%- endif %}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
@ -1,10 +1,3 @@
 | 
			
		||||
{%- if 'mysql' in salt['pillar.get']('postfix:config:virtual_mailbox_maps', '') %}
 | 
			
		||||
{%- set config = salt['pillar.get']('postfix:mysql:virtual_mailbox_maps', {}) -%}
 | 
			
		||||
{%- for key,value in salt['pillar.get']('postfix:vmail').items() %}
 | 
			
		||||
{{ key }} = {{ value }}
 | 
			
		||||
{%- endfor %}
 | 
			
		||||
query = SELECT {{ config.select_field|default('1') }} FROM {{ config.table|default('virtual_users') }} WHERE {{ config.where_field|default('email') }}='%s'
 | 
			
		||||
{%- else %}
 | 
			
		||||
{% set config = salt['pillar.get']('postfix:vmail', {}) -%}
 | 
			
		||||
{% macro set_parameter(parameter, default=None) -%}
 | 
			
		||||
{% set value = config.get(parameter, default) -%}
 | 
			
		||||
@ -21,4 +14,4 @@ query = SELECT {{ config.select_field|default('1') }} FROM {{ config.table|defau
 | 
			
		||||
{{ set_parameter('table', 'mailbox') }}
 | 
			
		||||
{{ set_parameter('select_field', 'maildir') }}
 | 
			
		||||
{{ set_parameter('where_field', 'username') }}
 | 
			
		||||
{%- endif %}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
							
								
								
									
										105
									
								
								postfix/init.sls
									
									
									
									
									
								
							
							
						
						
									
										105
									
								
								postfix/init.sls
									
									
									
									
									
								
							@ -1,48 +1,19 @@
 | 
			
		||||
{% from "postfix/map.jinja" import postfix with context %}
 | 
			
		||||
 | 
			
		||||
{%- if grains.os_family == "Suse" %}
 | 
			
		||||
# The existence of this file prevents the system to
 | 
			
		||||
# overwrite files from salt when installing.
 | 
			
		||||
postfix-init-file-managed-postfix.configured:
 | 
			
		||||
  file.managed:
 | 
			
		||||
    - name: /var/adm/postfix.configured
 | 
			
		||||
    - contents: ''
 | 
			
		||||
    - mode: '0644'
 | 
			
		||||
    - user: 'root'
 | 
			
		||||
    - group: 'root'
 | 
			
		||||
    - require_in:
 | 
			
		||||
      - pkg: postfix-init-pkg-installed-postfix
 | 
			
		||||
{%- endif %}
 | 
			
		||||
 | 
			
		||||
postfix-init-pkg-installed-postfix:
 | 
			
		||||
postfix:
 | 
			
		||||
  pkg.installed:
 | 
			
		||||
    - name: {{ postfix.package }}
 | 
			
		||||
{%- if grains.os_family == "FreeBSD" %}
 | 
			
		||||
    - force: True
 | 
			
		||||
    - batch: True
 | 
			
		||||
{%- endif %}
 | 
			
		||||
    - watch_in:
 | 
			
		||||
      - service: postfix-init-service-running-postfix
 | 
			
		||||
 | 
			
		||||
postfix-init-service-running-postfix:
 | 
			
		||||
      - service: postfix
 | 
			
		||||
  service.running:
 | 
			
		||||
    - name: postfix
 | 
			
		||||
    - enable: {{ salt['pillar.get']('postfix:enable_service', True) }}
 | 
			
		||||
    - reload: {{ salt['pillar.get']('postfix:reload_service', True) }}
 | 
			
		||||
    - require:
 | 
			
		||||
      - pkg: postfix-init-pkg-installed-postfix
 | 
			
		||||
      - pkg: postfix
 | 
			
		||||
    - watch:
 | 
			
		||||
      - pkg: postfix-init-pkg-installed-postfix
 | 
			
		||||
      - pkg: postfix
 | 
			
		||||
 | 
			
		||||
{%- if salt['pillar.get']('postfix:reload_service', True) %}
 | 
			
		||||
# Restart postfix if the package was changed.
 | 
			
		||||
# This also provides an ID to be used in a watch_in statement.
 | 
			
		||||
postfix-init-service-running-postfix-restart:
 | 
			
		||||
  service.running:
 | 
			
		||||
    - name: postfix
 | 
			
		||||
    - watch:
 | 
			
		||||
      - pkg: postfix-init-pkg-installed-postfix
 | 
			
		||||
{%- endif %}
 | 
			
		||||
{# Used for newaliases, postalias and postconf #}
 | 
			
		||||
{%- set default_database_type = salt['pillar.get']('postfix:config:default_database_type', 'hash') %}
 | 
			
		||||
 | 
			
		||||
# manage /etc/aliases if data found in pillar
 | 
			
		||||
{% if 'aliases' in pillar.get('postfix', '') %}
 | 
			
		||||
@ -52,48 +23,84 @@ postfix-init-service-running-postfix-restart:
 | 
			
		||||
  {%- if ':' in file_path %}
 | 
			
		||||
    {%- set file_type, file_path = postfix.aliases_file.split(':') %}
 | 
			
		||||
  {%- else %}
 | 
			
		||||
    {%- set file_type = postfix.default_database_type %}
 | 
			
		||||
    {%- set file_type = default_database_type %}
 | 
			
		||||
  {%- endif %}
 | 
			
		||||
  {%- if file_type in ("btree", "cdb", "dbm", "hash", "sdbm") %}
 | 
			
		||||
    {%- set need_newaliases = True %}
 | 
			
		||||
  {%- endif %}
 | 
			
		||||
postfix-init-file-managed-alias-database:
 | 
			
		||||
postfix_alias_database:
 | 
			
		||||
  file.managed:
 | 
			
		||||
    - name: {{ file_path }}
 | 
			
		||||
  {% if salt['pillar.get']('postfix:aliases:content', None) is string %}
 | 
			
		||||
    - contents_pillar: postfix:aliases:content
 | 
			
		||||
  {% else %}
 | 
			
		||||
    - source: salt://postfix/files/mapping.j2
 | 
			
		||||
  {% endif %}
 | 
			
		||||
    - user: root
 | 
			
		||||
    - group: {{ postfix.root_grp }}
 | 
			
		||||
    - mode: '0644'
 | 
			
		||||
    - mode: 644
 | 
			
		||||
    - template: jinja
 | 
			
		||||
    - context:
 | 
			
		||||
        data: {{ salt['pillar.get']('postfix:aliases:present') }}
 | 
			
		||||
        colon: True
 | 
			
		||||
    - require:
 | 
			
		||||
      - pkg: postfix-init-pkg-installed-postfix
 | 
			
		||||
 | 
			
		||||
      - pkg: postfix
 | 
			
		||||
  {%- if need_newaliases %}
 | 
			
		||||
postfix-init-cmd-run-new-aliases:
 | 
			
		||||
  cmd.run:
 | 
			
		||||
  cmd.wait:
 | 
			
		||||
    - name: newaliases
 | 
			
		||||
    - cwd: /
 | 
			
		||||
    - onchanges:
 | 
			
		||||
    - watch:
 | 
			
		||||
      - file: {{ file_path }}
 | 
			
		||||
  {%- endif %}
 | 
			
		||||
{% else %}
 | 
			
		||||
  {%- for user, target in salt['pillar.get']('postfix:aliases:present', {}).items() %}
 | 
			
		||||
postfix-init-alias-present-{{ user }}:
 | 
			
		||||
postfix_alias_present_{{ user }}:
 | 
			
		||||
  alias.present:
 | 
			
		||||
    - name: {{ user }}
 | 
			
		||||
    - target: {{ target }}
 | 
			
		||||
  {%- endfor %}
 | 
			
		||||
  {%- for user in salt['pillar.get']('postfix:aliases:absent', {}) %}
 | 
			
		||||
postfix-init-alias-absent-{{ user }}:
 | 
			
		||||
postfix_alias_absent_{{ user }}:
 | 
			
		||||
  alias.absent:
 | 
			
		||||
    - name: {{ user }}
 | 
			
		||||
  {%- endfor %}
 | 
			
		||||
{% endif %}
 | 
			
		||||
{% endif %}
 | 
			
		||||
 | 
			
		||||
# manage various mappings
 | 
			
		||||
{% for mapping, data in salt['pillar.get']('postfix:mapping', {}).items() %}
 | 
			
		||||
  {%- set need_postmap = False %}
 | 
			
		||||
  {%- set file_path = salt['pillar.get']('postfix:config:' ~ mapping) %}
 | 
			
		||||
  {%- if ':' in file_path %}
 | 
			
		||||
    {%- set file_type, file_path = file_path.split(':') %}
 | 
			
		||||
  {%- else %}
 | 
			
		||||
    {%- set file_type = default_database_type %}
 | 
			
		||||
  {%- endif %}
 | 
			
		||||
  {%- if not file_path.startswith('/') %}
 | 
			
		||||
    {%- set file_path = postfix.config_path ~ '/' ~ file_path %}
 | 
			
		||||
  {%- endif %}
 | 
			
		||||
  {%- if file_type in ("btree", "cdb", "dbm", "hash", "sdbm") %}
 | 
			
		||||
    {%- set need_postmap = True %}
 | 
			
		||||
  {%- endif %}
 | 
			
		||||
postfix_{{ mapping }}:
 | 
			
		||||
  file.managed:
 | 
			
		||||
    - name: {{ file_path }}
 | 
			
		||||
    - source: salt://postfix/files/mapping.j2
 | 
			
		||||
    - user: root
 | 
			
		||||
    - group: {{ postfix.root_grp }}
 | 
			
		||||
    {%- if mapping.endswith('_sasl_password_maps') %}
 | 
			
		||||
    - mode: 600
 | 
			
		||||
    {%- else %}
 | 
			
		||||
    - mode: 644
 | 
			
		||||
    {%- endif %}
 | 
			
		||||
    - template: jinja
 | 
			
		||||
    - context:
 | 
			
		||||
        data: {{ data|json() }}
 | 
			
		||||
    - require:
 | 
			
		||||
      - pkg: postfix
 | 
			
		||||
  {%- if need_postmap %}
 | 
			
		||||
  cmd.wait:
 | 
			
		||||
    - name: {{ postfix.xbin_prefix }}/sbin/postmap {{ file_path }}
 | 
			
		||||
    - cwd: /
 | 
			
		||||
    - watch:
 | 
			
		||||
      - file: {{ file_path }}
 | 
			
		||||
    - watch_in:
 | 
			
		||||
      - service: postfix
 | 
			
		||||
  {%- endif %}
 | 
			
		||||
{% endfor %}
 | 
			
		||||
 | 
			
		||||
@ -1,10 +1,9 @@
 | 
			
		||||
postfix-iptables-iptables-chain-present-smtp-input:
 | 
			
		||||
smtp.input:
 | 
			
		||||
  iptables.chain_present:
 | 
			
		||||
    - name: smtp.input
 | 
			
		||||
    -
 | 
			
		||||
 | 
			
		||||
postfix-iptables-iptables-insert-smtp-iptables-tcp:
 | 
			
		||||
smtp.iptables.tcp:
 | 
			
		||||
  iptables.insert:
 | 
			
		||||
    - name: smtp.iptables.tcp
 | 
			
		||||
    - table: filter
 | 
			
		||||
    - position: 1
 | 
			
		||||
    - chain: smtp.input
 | 
			
		||||
@ -15,11 +14,11 @@ postfix-iptables-iptables-insert-smtp-iptables-tcp:
 | 
			
		||||
    - proto: tcp
 | 
			
		||||
    - save: True
 | 
			
		||||
 | 
			
		||||
postfix-iptables-iptables-insert-smtp-iptables-filter:
 | 
			
		||||
smtp.iptables.filter:
 | 
			
		||||
  iptables.insert:
 | 
			
		||||
    - name: smtp.iptables.filter
 | 
			
		||||
    - table: filter
 | 
			
		||||
    - position: 1
 | 
			
		||||
    - chain: INPUT
 | 
			
		||||
    - jump: smtp.input
 | 
			
		||||
    - save: True
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
@ -2,12 +2,13 @@
 | 
			
		||||
# vim: ft=jinja
 | 
			
		||||
 | 
			
		||||
{% import_yaml "postfix/defaults.yaml" as defaults %}
 | 
			
		||||
{% import_yaml "postfix/osfamilymap.yaml" as os_familymap %}
 | 
			
		||||
{% import_yaml "postfix/osmap.yaml" as osmap %}
 | 
			
		||||
 | 
			
		||||
{% set postfix = salt['grains.filter_by'](
 | 
			
		||||
    defaults,
 | 
			
		||||
    merge=salt['grains.filter_by'](
 | 
			
		||||
        os_familymap,
 | 
			
		||||
        osmap,
 | 
			
		||||
        grain='os',
 | 
			
		||||
        merge=salt['pillar.get']('postfix:lookup', {}),
 | 
			
		||||
    ),
 | 
			
		||||
    base='postfix')
 | 
			
		||||
 | 
			
		||||
@ -1,7 +1,7 @@
 | 
			
		||||
{% from "postfix/map.jinja" import postfix with context %}
 | 
			
		||||
 | 
			
		||||
postfix-mysql-pkg-installed-mysql:
 | 
			
		||||
mysql:
 | 
			
		||||
  pkg.installed:
 | 
			
		||||
    - name: {{ postfix.mysql_pkg }}
 | 
			
		||||
    - watch_in:
 | 
			
		||||
      - service: postfix-init-service-running-postfix
 | 
			
		||||
      - service: postfix
 | 
			
		||||
 | 
			
		||||
@ -1,15 +1,10 @@
 | 
			
		||||
# -*- coding: utf-8 -*-
 | 
			
		||||
# vim: ft=yaml
 | 
			
		||||
---
 | 
			
		||||
Arch:
 | 
			
		||||
  policyd_spf_pkg: python-postfix-policyd-spf
 | 
			
		||||
  daemon_directory: /usr/lib/postfix/bin
 | 
			
		||||
 | 
			
		||||
Debian:
 | 
			
		||||
  policyd_spf_pkg: postfix-policyd-spf-python
 | 
			
		||||
  pcre_pkg: postfix-pcre
 | 
			
		||||
  mysql_pkg: postfix-mysql
 | 
			
		||||
  daemon_directory: /usr/lib/postfix/sbin
 | 
			
		||||
 | 
			
		||||
FreeBSD:
 | 
			
		||||
  policyd_spf_pkg: py27-postfix-policyd-spf-python
 | 
			
		||||
@ -17,8 +12,6 @@ FreeBSD:
 | 
			
		||||
  xbin_prefix: /usr/local
 | 
			
		||||
  config_path: /usr/local/etc/postfix
 | 
			
		||||
  root_grp: wheel
 | 
			
		||||
  daemon_directory: /usr/local/libexec/postfix
 | 
			
		||||
  dovecot_deliver: /usr/local/libexec/dovecot/deliver
 | 
			
		||||
 | 
			
		||||
Gentoo:
 | 
			
		||||
  package: mail-mta/postfix
 | 
			
		||||
@ -26,11 +19,6 @@ Gentoo:
 | 
			
		||||
  postsrsd_pkg: mail-filter/postsrsd
 | 
			
		||||
  postgrey_pkg: mail-filter/postgrey
 | 
			
		||||
  aliases_file: /etc/mail/aliases
 | 
			
		||||
  dovecot_deliver: /usr/libexec/dovecot/deliver
 | 
			
		||||
 | 
			
		||||
RedHat:
 | 
			
		||||
  policyd_spf_pkg: pypolicyd-spf
 | 
			
		||||
 | 
			
		||||
Suse:
 | 
			
		||||
  setgid_group: maildrop
 | 
			
		||||
  daemon_directory: /usr/lib/postfix/bin
 | 
			
		||||
@ -1,7 +1,7 @@
 | 
			
		||||
{% from "postfix/map.jinja" import postfix with context %}
 | 
			
		||||
 | 
			
		||||
postfix-pcre-pkg-installed-pcre:
 | 
			
		||||
pcre:
 | 
			
		||||
  pkg.installed:
 | 
			
		||||
    - name: {{ postfix.pcre_pkg }}
 | 
			
		||||
    - watch_in:
 | 
			
		||||
      - service: postfix-init-service-running-postfix
 | 
			
		||||
      - service: postfix
 | 
			
		||||
 | 
			
		||||
@ -1,5 +1,5 @@
 | 
			
		||||
{% from "postfix/map.jinja" import postfix with context %}
 | 
			
		||||
 | 
			
		||||
postfix-policyd-spf-pkg-installed-policyd_spf:
 | 
			
		||||
policyd_spf:
 | 
			
		||||
  pkg.installed:
 | 
			
		||||
    - name: {{ postfix.policyd_spf_pkg }}
 | 
			
		||||
 | 
			
		||||
@ -1,15 +1,15 @@
 | 
			
		||||
{% from "postfix/map.jinja" import postfix with context %}
 | 
			
		||||
 | 
			
		||||
postfix-postgrey-pkg-installed-postgrey:
 | 
			
		||||
postgrey:
 | 
			
		||||
  pkg.installed:
 | 
			
		||||
    - name: {{ postfix.postgrey_pkg }}
 | 
			
		||||
    - watch_in:
 | 
			
		||||
      - service: postgrey
 | 
			
		||||
 | 
			
		||||
postfix-postgrey-service-running-postgrey:
 | 
			
		||||
  service.running:
 | 
			
		||||
    - name: postgrey
 | 
			
		||||
    - enable: {{ salt['pillar.get']('postfix:postgrey:enable_service', True) }}
 | 
			
		||||
    - require:
 | 
			
		||||
      - pkg: postfix-postgrey-pkg-installed-postgrey
 | 
			
		||||
      - pkg: postgrey
 | 
			
		||||
    - watch:
 | 
			
		||||
      - pkg: postfix-postgrey-pkg-installed-postgrey
 | 
			
		||||
      - pkg: postgrey
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
@ -1,6 +1,6 @@
 | 
			
		||||
{% from "postfix/map.jinja" import postfix with context %}
 | 
			
		||||
 | 
			
		||||
postfix-postsrsd-pkg-latest-postsrsd:
 | 
			
		||||
postsrsd:
 | 
			
		||||
  pkg.latest:
 | 
			
		||||
    - name: {{ postfix.postsrsd_pkg }}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
@ -1,347 +0,0 @@
 | 
			
		||||
# -*- coding: utf-8 -*-
 | 
			
		||||
# vim: ft=yaml
 | 
			
		||||
---
 | 
			
		||||
#  Default Postfix master processes as defined by postfix
 | 
			
		||||
#
 | 
			
		||||
# The dictionary is keyed off the service name ("smtp", "smtpd", etc.) except
 | 
			
		||||
# for the few cases the service name is repeated to illustrate alternative
 | 
			
		||||
# options in the file.
 | 
			
		||||
# In such a case the second entry has a unique identifier appended, e.g.
 | 
			
		||||
# "smtp-unix". The 'service' attribute is used to provide the service name
 | 
			
		||||
# that will be rendered thus overriding the usual key to prevent clashes.
 | 
			
		||||
#
 | 
			
		||||
 | 
			
		||||
defaults:
 | 
			
		||||
  # Postfix internal services/processes defaults
 | 
			
		||||
  smtp:
 | 
			
		||||
    chroot: false
 | 
			
		||||
    command: smtpd
 | 
			
		||||
    private: false
 | 
			
		||||
    type: inet
 | 
			
		||||
 | 
			
		||||
  smtp-postscreen:
 | 
			
		||||
    chroot: false
 | 
			
		||||
    command: postscreen
 | 
			
		||||
    enable: false
 | 
			
		||||
    maxproc: 1
 | 
			
		||||
    private: false
 | 
			
		||||
    service: smtp
 | 
			
		||||
    type: inet
 | 
			
		||||
 | 
			
		||||
  smtpd:
 | 
			
		||||
    chroot: false
 | 
			
		||||
    enable: false
 | 
			
		||||
    type: pass
 | 
			
		||||
 | 
			
		||||
  dnsblog:
 | 
			
		||||
    chroot: false
 | 
			
		||||
    enable: false
 | 
			
		||||
    maxproc: 0
 | 
			
		||||
    type: unix
 | 
			
		||||
 | 
			
		||||
  tlsproxy:
 | 
			
		||||
    chroot: false
 | 
			
		||||
    enable: false
 | 
			
		||||
    maxproc: 0
 | 
			
		||||
    type: unix
 | 
			
		||||
 | 
			
		||||
  submission:
 | 
			
		||||
    args:
 | 
			
		||||
      - '-o syslog_name=postfix/submission'
 | 
			
		||||
      - '-o smtpd_tls_security_level=encrypt'
 | 
			
		||||
      - '-o smtpd_sasl_auth_enable=yes'
 | 
			
		||||
      - '-o smtpd_reject_unlisted_recipient=no'
 | 
			
		||||
      - '-o smtpd_client_restrictions=$mua_client_restrictions'
 | 
			
		||||
      - '-o smtpd_helo_restrictions=$mua_helo_restrictions'
 | 
			
		||||
      - '-o smtpd_sender_restrictions=$mua_sender_restrictions'
 | 
			
		||||
      - '-o smtpd_recipient_restrictions=permit_sasl_authenticated,reject'
 | 
			
		||||
      - '-o milter_macro_daemon_name=ORIGINATING'
 | 
			
		||||
    chroot: false
 | 
			
		||||
    command: smtpd
 | 
			
		||||
    enable: false
 | 
			
		||||
    private: false
 | 
			
		||||
    type: inet
 | 
			
		||||
 | 
			
		||||
  smtps:
 | 
			
		||||
    args:
 | 
			
		||||
      - '-o syslog_name=postfix/smtps'
 | 
			
		||||
      - '-o smtpd_tls_wrappermode=yes'
 | 
			
		||||
      - '-o smtpd_sasl_auth_enable=yes'
 | 
			
		||||
      - '-o smtpd_reject_unlisted_recipient=no'
 | 
			
		||||
      - '-o smtpd_client_restrictions=$mua_client_restrictions'
 | 
			
		||||
      - '-o smtpd_helo_restrictions=$mua_helo_restrictions'
 | 
			
		||||
      - '-o smtpd_sender_restrictions=$mua_sender_restrictions'
 | 
			
		||||
      - '-o smtpd_recipient_restrictions=permit_sasl_authenticated,reject'
 | 
			
		||||
      - '-o milter_macro_daemon_name=ORIGINATING'
 | 
			
		||||
    chroot: false
 | 
			
		||||
    command: smtpd
 | 
			
		||||
    enable: false
 | 
			
		||||
    private: false
 | 
			
		||||
    type: inet
 | 
			
		||||
 | 
			
		||||
  '628':
 | 
			
		||||
    chroot: false
 | 
			
		||||
    command: qmqpd
 | 
			
		||||
    enable: false
 | 
			
		||||
    private: false
 | 
			
		||||
    type: inet
 | 
			
		||||
 | 
			
		||||
  pickup:
 | 
			
		||||
    chroot: false
 | 
			
		||||
    maxproc: 1
 | 
			
		||||
    private: false
 | 
			
		||||
    type: unix
 | 
			
		||||
    wakeup: 60
 | 
			
		||||
 | 
			
		||||
  cleanup:
 | 
			
		||||
    chroot: false
 | 
			
		||||
    maxproc: 0
 | 
			
		||||
    private: false
 | 
			
		||||
    type: unix
 | 
			
		||||
 | 
			
		||||
  qmgr:
 | 
			
		||||
    chroot: false
 | 
			
		||||
    maxproc: 1
 | 
			
		||||
    private: false
 | 
			
		||||
    type: unix
 | 
			
		||||
    wakeup: 300
 | 
			
		||||
 | 
			
		||||
  qmgr-oqmgr:
 | 
			
		||||
    chroot: false
 | 
			
		||||
    command: oqmgr
 | 
			
		||||
    enable: false
 | 
			
		||||
    maxproc: 1
 | 
			
		||||
    private: false
 | 
			
		||||
    service: qmgr
 | 
			
		||||
    type: unix
 | 
			
		||||
    wakeup: 300
 | 
			
		||||
 | 
			
		||||
  tlsmgr:
 | 
			
		||||
    chroot: false
 | 
			
		||||
    maxproc: 1
 | 
			
		||||
    type: unix
 | 
			
		||||
    wakeup: '1000?'
 | 
			
		||||
 | 
			
		||||
  rewrite:
 | 
			
		||||
    chroot: false
 | 
			
		||||
    command: trivial-rewrite
 | 
			
		||||
    type: unix
 | 
			
		||||
 | 
			
		||||
  bounce:
 | 
			
		||||
    chroot: false
 | 
			
		||||
    maxproc: 0
 | 
			
		||||
    type: unix
 | 
			
		||||
 | 
			
		||||
  defer:
 | 
			
		||||
    chroot: false
 | 
			
		||||
    command: bounce
 | 
			
		||||
    maxproc: 0
 | 
			
		||||
    type: unix
 | 
			
		||||
 | 
			
		||||
  trace:
 | 
			
		||||
    chroot: false
 | 
			
		||||
    command: bounce
 | 
			
		||||
    maxproc: 0
 | 
			
		||||
    type: unix
 | 
			
		||||
 | 
			
		||||
  smtp-unix:
 | 
			
		||||
    chroot: false
 | 
			
		||||
    command: smtp
 | 
			
		||||
    service: smtp
 | 
			
		||||
    type: unix
 | 
			
		||||
 | 
			
		||||
  verify:
 | 
			
		||||
    chroot: false
 | 
			
		||||
    maxproc: 1
 | 
			
		||||
    type: unix
 | 
			
		||||
 | 
			
		||||
  flush:
 | 
			
		||||
    chroot: false
 | 
			
		||||
    maxproc: 0
 | 
			
		||||
    private: false
 | 
			
		||||
    type: unix
 | 
			
		||||
    wakeup: '1000?'
 | 
			
		||||
 | 
			
		||||
  proxymap:
 | 
			
		||||
    chroot: false
 | 
			
		||||
    type: unix
 | 
			
		||||
 | 
			
		||||
  proxywrite:
 | 
			
		||||
    chroot: false
 | 
			
		||||
    command: proxymap
 | 
			
		||||
    maxproc: 1
 | 
			
		||||
    type: unix
 | 
			
		||||
 | 
			
		||||
  relay:
 | 
			
		||||
    args:
 | 
			
		||||
      - '#       -o smtp_helo_timeout=5 -o smtp_connect_timeout=5'
 | 
			
		||||
    chroot: false
 | 
			
		||||
    command: smtp
 | 
			
		||||
    type: unix
 | 
			
		||||
 | 
			
		||||
  showq:
 | 
			
		||||
    chroot: false
 | 
			
		||||
    private: false
 | 
			
		||||
    type: unix
 | 
			
		||||
 | 
			
		||||
  error:
 | 
			
		||||
    chroot: false
 | 
			
		||||
    type: unix
 | 
			
		||||
 | 
			
		||||
  retry:
 | 
			
		||||
    chroot: false
 | 
			
		||||
    command: error
 | 
			
		||||
    type: unix
 | 
			
		||||
 | 
			
		||||
  discard:
 | 
			
		||||
    chroot: false
 | 
			
		||||
    type: unix
 | 
			
		||||
 | 
			
		||||
  local:
 | 
			
		||||
    chroot: false
 | 
			
		||||
    type: unix
 | 
			
		||||
    unpriv: false
 | 
			
		||||
 | 
			
		||||
  virtual:
 | 
			
		||||
    chroot: false
 | 
			
		||||
    type: unix
 | 
			
		||||
    unpriv: false
 | 
			
		||||
 | 
			
		||||
  lmtp:
 | 
			
		||||
    chroot: false
 | 
			
		||||
    type: unix
 | 
			
		||||
 | 
			
		||||
  anvil:
 | 
			
		||||
    chroot: false
 | 
			
		||||
    maxproc: 1
 | 
			
		||||
    type: unix
 | 
			
		||||
 | 
			
		||||
  scache:
 | 
			
		||||
    chroot: false
 | 
			
		||||
    maxproc: 1
 | 
			
		||||
    type: unix
 | 
			
		||||
 | 
			
		||||
  # Postfix MDA definitions, these are optional and commented out by default
 | 
			
		||||
  maildrop:
 | 
			
		||||
    argv: /usr/local/bin/maildrop
 | 
			
		||||
    chroot: false
 | 
			
		||||
    command: pipe
 | 
			
		||||
    enable: false
 | 
			
		||||
    extras: '-d ${recipient}'
 | 
			
		||||
    flags: DRhu
 | 
			
		||||
    type: unix
 | 
			
		||||
    unpriv: false
 | 
			
		||||
    user: vmail
 | 
			
		||||
 | 
			
		||||
  cyrus:
 | 
			
		||||
    argv: /cyrus/bin/deliver
 | 
			
		||||
    chroot: false
 | 
			
		||||
    command: pipe
 | 
			
		||||
    enable: false
 | 
			
		||||
    extras: "-e -r ${sender} -m ${extension} ${user}"
 | 
			
		||||
    type: unix
 | 
			
		||||
    unpriv: false
 | 
			
		||||
    user: cyrus
 | 
			
		||||
 | 
			
		||||
  old-cyrus:
 | 
			
		||||
    argv: /cyrus/bin/deliver
 | 
			
		||||
    chroot: false
 | 
			
		||||
    command: pipe
 | 
			
		||||
    enable: false
 | 
			
		||||
    extras: '-e -m ${extension} ${user}'
 | 
			
		||||
    flags: R
 | 
			
		||||
    type: unix
 | 
			
		||||
    unpriv: false
 | 
			
		||||
    user: cyrus
 | 
			
		||||
 | 
			
		||||
  uucp:
 | 
			
		||||
    argv: uux
 | 
			
		||||
    chroot: false
 | 
			
		||||
    command: pipe
 | 
			
		||||
    enable: false
 | 
			
		||||
    extras: '-r -n -z -a$sender - $nexthop!rmail ($recipient)'
 | 
			
		||||
    flags: Fqhu
 | 
			
		||||
    type: unix
 | 
			
		||||
    unpriv: false
 | 
			
		||||
    user: uucp
 | 
			
		||||
 | 
			
		||||
  ifmail:
 | 
			
		||||
    argv: /usr/lib/ifmail/ifmail
 | 
			
		||||
    chroot: false
 | 
			
		||||
    command: pipe
 | 
			
		||||
    enable: false
 | 
			
		||||
    extras: '-r $nexthop ($recipient)'
 | 
			
		||||
    flags: F
 | 
			
		||||
    type: unix
 | 
			
		||||
    unpriv: false
 | 
			
		||||
    user: ftn
 | 
			
		||||
 | 
			
		||||
  bsmtp:
 | 
			
		||||
    argv: /usr/local/sbin/bsmtp
 | 
			
		||||
    chroot: false
 | 
			
		||||
    command: pipe
 | 
			
		||||
    enable: false
 | 
			
		||||
    extras: '-f $sender $nexthop $recipient'
 | 
			
		||||
    flags: Fq.
 | 
			
		||||
    type: unix
 | 
			
		||||
    unpriv: false
 | 
			
		||||
    user: bsmtp
 | 
			
		||||
 | 
			
		||||
  scalemail-backend:
 | 
			
		||||
    argv: /usr/lib/scalemail/bin/scalemail-store
 | 
			
		||||
    chroot: false
 | 
			
		||||
    command: pipe
 | 
			
		||||
    enable: false
 | 
			
		||||
    extras: '${nexthop} ${user} ${extension}'
 | 
			
		||||
    flags: R
 | 
			
		||||
    maxproc: 2
 | 
			
		||||
    type: unix
 | 
			
		||||
    unpriv: false
 | 
			
		||||
    user: scalemail
 | 
			
		||||
 | 
			
		||||
  mailman:
 | 
			
		||||
    argv: /usr/lib/mailman/bin/postfix-to-mailman.py
 | 
			
		||||
    chroot: false
 | 
			
		||||
    command: pipe
 | 
			
		||||
    enable: false
 | 
			
		||||
    extras: '${nexthop} ${user}'
 | 
			
		||||
    flags: FR
 | 
			
		||||
    type: unix
 | 
			
		||||
    unpriv: false
 | 
			
		||||
    user: list
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
# Service order inside the master.cf file
 | 
			
		||||
order:
 | 
			
		||||
  - smtp
 | 
			
		||||
  - smtp-postscreen
 | 
			
		||||
  - smtpd
 | 
			
		||||
  - dnsblog
 | 
			
		||||
  - tlsproxy
 | 
			
		||||
  - submission
 | 
			
		||||
  - smtps
 | 
			
		||||
  - '628'
 | 
			
		||||
  - pickup
 | 
			
		||||
  - cleanup
 | 
			
		||||
  - qmgr
 | 
			
		||||
  - qmgr-oqmgr
 | 
			
		||||
  - tlsmgr
 | 
			
		||||
  - rewrite
 | 
			
		||||
  - bounce
 | 
			
		||||
  - defer
 | 
			
		||||
  - trace
 | 
			
		||||
  - verify
 | 
			
		||||
  - flush
 | 
			
		||||
  - proxymap
 | 
			
		||||
  - proxywrite
 | 
			
		||||
  - smtp-unix
 | 
			
		||||
  - relay
 | 
			
		||||
  - showq
 | 
			
		||||
  - error
 | 
			
		||||
  - retry
 | 
			
		||||
  - discard
 | 
			
		||||
  - local
 | 
			
		||||
  - virtual
 | 
			
		||||
  - lmtp
 | 
			
		||||
  - anvil
 | 
			
		||||
  - scache
 | 
			
		||||
@ -1,30 +0,0 @@
 | 
			
		||||
#!/bin/sh
 | 
			
		||||
 | 
			
		||||
###############################################################################
 | 
			
		||||
# (A) Update `FORMULA` with `${nextRelease.version}`
 | 
			
		||||
###############################################################################
 | 
			
		||||
sed -i -e "s_^\(version:\).*_\1 ${1}_" FORMULA
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
###############################################################################
 | 
			
		||||
# (B) Use `m2r2` to convert automatically produced `.md` docs to `.rst`
 | 
			
		||||
###############################################################################
 | 
			
		||||
 | 
			
		||||
# Install `m2r2`
 | 
			
		||||
pip3 install m2r2
 | 
			
		||||
 | 
			
		||||
# Copy and then convert the `.md` docs
 | 
			
		||||
cp ./*.md docs/
 | 
			
		||||
cd docs/ || exit
 | 
			
		||||
m2r2 --overwrite ./*.md
 | 
			
		||||
 | 
			
		||||
# Change excess `H1` headings to `H2` in converted `CHANGELOG.rst`
 | 
			
		||||
sed -i -e '/^=.*$/s/=/-/g' CHANGELOG.rst
 | 
			
		||||
sed -i -e '1,4s/-/=/g' CHANGELOG.rst
 | 
			
		||||
 | 
			
		||||
# Use for debugging output, when required
 | 
			
		||||
# cat AUTHORS.rst
 | 
			
		||||
# cat CHANGELOG.rst
 | 
			
		||||
 | 
			
		||||
# Return back to the main directory
 | 
			
		||||
cd ..
 | 
			
		||||
@ -1,18 +0,0 @@
 | 
			
		||||
// No release is triggered for the types commented out below.
 | 
			
		||||
// Commits using these types will be incorporated into the next release.
 | 
			
		||||
//
 | 
			
		||||
// NOTE: Any changes here must be reflected in `CONTRIBUTING.md`.
 | 
			
		||||
module.exports = [
 | 
			
		||||
  {breaking: true, release: 'major'},
 | 
			
		||||
  // {type: 'build', release: 'patch'},
 | 
			
		||||
  // {type: 'chore', release: 'patch'},
 | 
			
		||||
  // {type: 'ci', release: 'patch'},
 | 
			
		||||
  {type: 'docs', release: 'patch'},
 | 
			
		||||
  {type: 'feat', release: 'minor'},
 | 
			
		||||
  {type: 'fix', release: 'patch'},
 | 
			
		||||
  {type: 'perf', release: 'patch'},
 | 
			
		||||
  {type: 'refactor', release: 'patch'},
 | 
			
		||||
  {type: 'revert', release: 'patch'},
 | 
			
		||||
  {type: 'style', release: 'patch'},
 | 
			
		||||
  {type: 'test', release: 'patch'},
 | 
			
		||||
];
 | 
			
		||||
@ -1,107 +0,0 @@
 | 
			
		||||
module.exports = {
 | 
			
		||||
  branch: 'master',
 | 
			
		||||
  repositoryUrl: 'https://github.com/saltstack-formulas/postfix-formula',
 | 
			
		||||
  plugins: [
 | 
			
		||||
      ['@semantic-release/commit-analyzer', {
 | 
			
		||||
        preset: 'angular',
 | 
			
		||||
        releaseRules: './release-rules.js',
 | 
			
		||||
      }],
 | 
			
		||||
      '@semantic-release/release-notes-generator',
 | 
			
		||||
      ['@semantic-release/changelog', {
 | 
			
		||||
        changelogFile: 'CHANGELOG.md',
 | 
			
		||||
        changelogTitle: '# Changelog',
 | 
			
		||||
      }],
 | 
			
		||||
      ['@semantic-release/exec', {
 | 
			
		||||
        prepareCmd: 'sh ./pre-commit_semantic-release.sh ${nextRelease.version}',
 | 
			
		||||
      }],
 | 
			
		||||
      ['@semantic-release/git', {
 | 
			
		||||
        assets: ['*.md', 'docs/*.rst', 'FORMULA'],
 | 
			
		||||
      }],
 | 
			
		||||
      '@semantic-release/github',
 | 
			
		||||
  ],
 | 
			
		||||
  generateNotes: {
 | 
			
		||||
    preset: 'angular',
 | 
			
		||||
    writerOpts: {
 | 
			
		||||
      // Required due to upstream bug preventing all types being displayed.
 | 
			
		||||
      // Bug: https://github.com/conventional-changelog/conventional-changelog/issues/317
 | 
			
		||||
      // Fix: https://github.com/conventional-changelog/conventional-changelog/pull/410
 | 
			
		||||
      transform: (commit, context) => {
 | 
			
		||||
          const issues = []
 | 
			
		||||
 | 
			
		||||
          commit.notes.forEach(note => {
 | 
			
		||||
              note.title = `BREAKING CHANGES`
 | 
			
		||||
          })
 | 
			
		||||
 | 
			
		||||
          // NOTE: Any changes here must be reflected in `CONTRIBUTING.md`.
 | 
			
		||||
          if (commit.type === `feat`) {
 | 
			
		||||
              commit.type = `Features`
 | 
			
		||||
          } else if (commit.type === `fix`) {
 | 
			
		||||
              commit.type = `Bug Fixes`
 | 
			
		||||
          } else if (commit.type === `perf`) {
 | 
			
		||||
              commit.type = `Performance Improvements`
 | 
			
		||||
          } else if (commit.type === `revert`) {
 | 
			
		||||
              commit.type = `Reverts`
 | 
			
		||||
          } else if (commit.type === `docs`) {
 | 
			
		||||
              commit.type = `Documentation`
 | 
			
		||||
          } else if (commit.type === `style`) {
 | 
			
		||||
              commit.type = `Styles`
 | 
			
		||||
          } else if (commit.type === `refactor`) {
 | 
			
		||||
              commit.type = `Code Refactoring`
 | 
			
		||||
          } else if (commit.type === `test`) {
 | 
			
		||||
              commit.type = `Tests`
 | 
			
		||||
          } else if (commit.type === `build`) {
 | 
			
		||||
              commit.type = `Build System`
 | 
			
		||||
          // } else if (commit.type === `chore`) {
 | 
			
		||||
          //     commit.type = `Maintenance`
 | 
			
		||||
          } else if (commit.type === `ci`) {
 | 
			
		||||
              commit.type = `Continuous Integration`
 | 
			
		||||
          } else {
 | 
			
		||||
              return
 | 
			
		||||
          }
 | 
			
		||||
 | 
			
		||||
          if (commit.scope === `*`) {
 | 
			
		||||
              commit.scope = ``
 | 
			
		||||
          }
 | 
			
		||||
 | 
			
		||||
          if (typeof commit.hash === `string`) {
 | 
			
		||||
              commit.shortHash = commit.hash.substring(0, 7)
 | 
			
		||||
          }
 | 
			
		||||
 | 
			
		||||
          if (typeof commit.subject === `string`) {
 | 
			
		||||
              let url = context.repository
 | 
			
		||||
                  ? `${context.host}/${context.owner}/${context.repository}`
 | 
			
		||||
                  : context.repoUrl
 | 
			
		||||
              if (url) {
 | 
			
		||||
                  url = `${url}/issues/`
 | 
			
		||||
                  // Issue URLs.
 | 
			
		||||
                  commit.subject = commit.subject.replace(/#([0-9]+)/g, (_, issue) => {
 | 
			
		||||
                      issues.push(issue)
 | 
			
		||||
                      return `[#${issue}](${url}${issue})`
 | 
			
		||||
                  })
 | 
			
		||||
              }
 | 
			
		||||
              if (context.host) {
 | 
			
		||||
                  // User URLs.
 | 
			
		||||
                  commit.subject = commit.subject.replace(/\B@([a-z0-9](?:-?[a-z0-9/]){0,38})/g, (_, username) => {
 | 
			
		||||
                  if (username.includes('/')) {
 | 
			
		||||
                      return `@${username}`
 | 
			
		||||
                  }
 | 
			
		||||
 | 
			
		||||
                  return `[@${username}](${context.host}/${username})`
 | 
			
		||||
                  })
 | 
			
		||||
              }
 | 
			
		||||
          }
 | 
			
		||||
 | 
			
		||||
          // remove references that already appear in the subject
 | 
			
		||||
          commit.references = commit.references.filter(reference => {
 | 
			
		||||
              if (issues.indexOf(reference.issue) === -1) {
 | 
			
		||||
                  return true
 | 
			
		||||
              }
 | 
			
		||||
 | 
			
		||||
              return false
 | 
			
		||||
          })
 | 
			
		||||
 | 
			
		||||
          return commit
 | 
			
		||||
      },
 | 
			
		||||
    },
 | 
			
		||||
  },
 | 
			
		||||
};
 | 
			
		||||
@ -1,50 +0,0 @@
 | 
			
		||||
# InSpec Profile: `default`
 | 
			
		||||
 | 
			
		||||
This shows the implementation of the `default` 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 default
 | 
			
		||||
Summary
 | 
			
		||||
-------
 | 
			
		||||
Location: default
 | 
			
		||||
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 default
 | 
			
		||||
..
 | 
			
		||||
 | 
			
		||||
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 default --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).
 | 
			
		||||
@ -1,9 +0,0 @@
 | 
			
		||||
# frozen_string_literal: true
 | 
			
		||||
 | 
			
		||||
control 'Postfix packages' do
 | 
			
		||||
  title 'should be installed'
 | 
			
		||||
 | 
			
		||||
  describe package('postfix') do
 | 
			
		||||
    it { should be_installed }
 | 
			
		||||
  end
 | 
			
		||||
end
 | 
			
		||||
@ -1,20 +0,0 @@
 | 
			
		||||
# frozen_string_literal: true
 | 
			
		||||
 | 
			
		||||
control 'Postfix maps' do
 | 
			
		||||
  title 'maps have been generated properly'
 | 
			
		||||
 | 
			
		||||
  describe command('postmap -q example.com /etc/postfix/transport') do
 | 
			
		||||
    its('stdout') { should eq "10.1.1.1\n" }
 | 
			
		||||
    its('exit_status') { should eq 0 }
 | 
			
		||||
  end
 | 
			
		||||
 | 
			
		||||
  describe command('postmap -q example.com /etc/postfix/tls_policy') do
 | 
			
		||||
    its('stdout') { should eq "encrypt\n" }
 | 
			
		||||
    its('exit_status') { should eq 0 }
 | 
			
		||||
  end
 | 
			
		||||
 | 
			
		||||
  describe command('postmap -q .example.com /etc/postfix/tls_policy') do
 | 
			
		||||
    its('stdout') { should eq "encrypt\n" }
 | 
			
		||||
    its('exit_status') { should eq 0 }
 | 
			
		||||
  end
 | 
			
		||||
end
 | 
			
		||||
@ -1,25 +0,0 @@
 | 
			
		||||
# frozen_string_literal: true
 | 
			
		||||
 | 
			
		||||
control 'Postfix map types' do
 | 
			
		||||
  title 'maps types are generated properly'
 | 
			
		||||
 | 
			
		||||
  # CIDR
 | 
			
		||||
  describe command('postmap -q "192.168.0.0/16" /etc/postfix/check_cidr') do
 | 
			
		||||
    its('stdout') { should eq "REJECT\n" }
 | 
			
		||||
    its('exit_status') { should eq 0 }
 | 
			
		||||
  end
 | 
			
		||||
 | 
			
		||||
  # PCRE
 | 
			
		||||
  describe command(
 | 
			
		||||
    'postmap -q "/^(?!owner-)(.*)-outgoing@(.*)/" /etc/postfix/check_pcre'
 | 
			
		||||
  ) do
 | 
			
		||||
    its('stdout') { should eq "550 Use ${1}@${2} instead\n" }
 | 
			
		||||
    its('exit_status') { should eq 0 }
 | 
			
		||||
  end
 | 
			
		||||
 | 
			
		||||
  # REGEXP
 | 
			
		||||
  describe command('postmap -q "/[%!@].*[%!@]/" /etc/postfix/check_client_access') do
 | 
			
		||||
    its('stdout') { should eq "550 Sender-specified routing rejected\n" }
 | 
			
		||||
    its('exit_status') { should eq 0 }
 | 
			
		||||
  end
 | 
			
		||||
end
 | 
			
		||||
@ -1,73 +0,0 @@
 | 
			
		||||
# frozen_string_literal: true
 | 
			
		||||
 | 
			
		||||
control 'Postfix config' do
 | 
			
		||||
  title 'config is generated correctly'
 | 
			
		||||
 | 
			
		||||
  describe postfix_conf do
 | 
			
		||||
    its('biff') { should cmp 'no' }
 | 
			
		||||
    its('compatibility_level') { should cmp '2' }
 | 
			
		||||
    its('append_dot_mydomain') { should cmp 'no' }
 | 
			
		||||
    its('readme_directory') { should cmp 'no' }
 | 
			
		||||
    its('smtpd_sasl_auth_enable') { should cmp 'yes' }
 | 
			
		||||
    its('smtpd_sasl_path') { should cmp '/var/run/dovecot/auth-client' }
 | 
			
		||||
    its('smtpd_sasl_type') { should cmp 'dovecot' }
 | 
			
		||||
    its('smtpd_sasl_security_options') { should cmp 'noanonymous' }
 | 
			
		||||
    its('smtpd_sasl_tls_security_options') { should cmp '$smtpd_sasl_security_options' }
 | 
			
		||||
    its('smtpd_tls_auth_only') { should cmp 'yes' }
 | 
			
		||||
    its('smtpd_use_tls') { should cmp 'yes' }
 | 
			
		||||
    its('smtpd_tls_loglevel') { should cmp '1' }
 | 
			
		||||
    its('smtpd_tls_security_level') { should cmp 'may' }
 | 
			
		||||
    its('smtp_tls_CApath') { should cmp '/etc/ssl/certs' }
 | 
			
		||||
    its('smtpd_tls_cert_file') { should cmp '/etc/postfix/ssl/server-cert.crt' }
 | 
			
		||||
    its('smtpd_tls_key_file') { should cmp '/etc/postfix/ssl/server-cert.key' }
 | 
			
		||||
    its('smtpd_tls_session_cache_database') do
 | 
			
		||||
      should cmp 'btree:${data_directory}/smtpd_scache'
 | 
			
		||||
    end
 | 
			
		||||
    its('smtpd_tls_mandatory_ciphers') { should cmp 'high' }
 | 
			
		||||
    its('tls_preempt_cipherlist') { should cmp 'yes' }
 | 
			
		||||
    its('smtp_tls_loglevel') { should cmp '1' }
 | 
			
		||||
    its('smtp_tls_security_level') { should cmp 'may' }
 | 
			
		||||
    its('smtp_tls_session_cache_database') do
 | 
			
		||||
      should cmp 'btree:${data_directory}/smtp_scache'
 | 
			
		||||
    end
 | 
			
		||||
    its('myhostname') { should cmp 'localhost' }
 | 
			
		||||
    its('alias_maps') { should cmp 'hash:/etc/aliases' }
 | 
			
		||||
    its('alias_database') { should cmp 'hash:/etc/aliases' }
 | 
			
		||||
    its('mydestination') { should cmp 'localhost, localhost.localdomain' }
 | 
			
		||||
    its('relayhost') { should cmp '' }
 | 
			
		||||
    its('mynetworks') { should cmp '127.0.0.0/8 [::ffff:127.0.0.0]/104 [::1]/128' }
 | 
			
		||||
    its('mailbox_size_limit') { should cmp '0' }
 | 
			
		||||
    its('recipient_delimiter') { should cmp '+' }
 | 
			
		||||
    its('inet_interfaces') { should cmp '127.0.0.1' }
 | 
			
		||||
    its('inet_protocols') { should cmp 'all' }
 | 
			
		||||
    its('message_size_limit') { should cmp '41943040' }
 | 
			
		||||
    its('smtpd_recipient_restrictions') do
 | 
			
		||||
      should cmp 'permit_mynetworks,'\
 | 
			
		||||
                 ' permit_sasl_authenticated,'\
 | 
			
		||||
                 ' reject_unauth_destination'
 | 
			
		||||
    end
 | 
			
		||||
    its('transport_maps') { should cmp 'hash:/etc/postfix/transport' }
 | 
			
		||||
    its('smtp_tls_policy_maps') { should cmp 'hash:/etc/postfix/tls_policy' }
 | 
			
		||||
    its('smtp_sasl_password_maps') { should cmp 'hash:/etc/postfix/sasl_passwd' }
 | 
			
		||||
    its('sender_canonical_maps') { should cmp 'hash:/etc/postfix/sender_canonical' }
 | 
			
		||||
    its('relay_recipient_maps') { should cmp 'hash:/etc/postfix/relay_domains' }
 | 
			
		||||
    its('virtual_alias_maps') { should cmp 'hash:/etc/postfix/virtual' }
 | 
			
		||||
    its('local_transport') { should cmp 'virtual' }
 | 
			
		||||
    its('local_recipient_maps') { should cmp '$virtual_mailbox_maps' }
 | 
			
		||||
    its('smtpd_relay_restrictions') do
 | 
			
		||||
      should cmp 'permit_mynetworks, '\
 | 
			
		||||
                 'permit_sasl_authenticated, '\
 | 
			
		||||
                 'reject_unauth_destination'
 | 
			
		||||
    end
 | 
			
		||||
    its('smtpd_sasl_local_domain') { should cmp '$mydomain' }
 | 
			
		||||
    its('smtpd_tls_session_cache_timeout') { should cmp '3600s' }
 | 
			
		||||
    its('relay_domains') { should cmp '$mydestination' }
 | 
			
		||||
    its('smtp_use_tls') { should cmp 'yes' }
 | 
			
		||||
    its('smtp_tls_cert_file') do
 | 
			
		||||
      should cmp '/etc/postfix/ssl/example.com-relay-client-cert.crt'
 | 
			
		||||
    end
 | 
			
		||||
    its('smtp_tls_key_file') do
 | 
			
		||||
      should cmp '/etc/postfix/ssl/example.com-relay-client-cert.key'
 | 
			
		||||
    end
 | 
			
		||||
  end
 | 
			
		||||
end
 | 
			
		||||
@ -1,14 +0,0 @@
 | 
			
		||||
# frozen_string_literal: true
 | 
			
		||||
 | 
			
		||||
control 'Postfix service' do
 | 
			
		||||
  title 'should be running'
 | 
			
		||||
 | 
			
		||||
  describe service('postfix') do
 | 
			
		||||
    it { should be_enabled }
 | 
			
		||||
    it { should be_running }
 | 
			
		||||
  end
 | 
			
		||||
 | 
			
		||||
  describe port(25) do
 | 
			
		||||
    it { should be_listening }
 | 
			
		||||
  end
 | 
			
		||||
end
 | 
			
		||||
@ -1,28 +0,0 @@
 | 
			
		||||
# -*- coding: utf-8 -*-
 | 
			
		||||
# vim: ft=yaml
 | 
			
		||||
---
 | 
			
		||||
name: default
 | 
			
		||||
title: postfix formula
 | 
			
		||||
maintainer: SaltStack Formulas
 | 
			
		||||
license: Apache-2.0
 | 
			
		||||
summary: Verify that the postfix 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-name: mac_os_x
 | 
			
		||||
  - platform: windows
 | 
			
		||||
@ -1,22 +0,0 @@
 | 
			
		||||
# 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)
 | 
			
		||||
@ -1,25 +0,0 @@
 | 
			
		||||
# -*- 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-name: mac_os_x
 | 
			
		||||
  - platform: windows
 | 
			
		||||
@ -1,138 +0,0 @@
 | 
			
		||||
# 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>
 | 
			
		||||
 | 
			
		||||
# rubocop:disable Metrics/ClassLength
 | 
			
		||||
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,
 | 
			
		||||
      codename: build_platform_codename
 | 
			
		||||
    }
 | 
			
		||||
  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.yml`
 | 
			
		||||
      inspec.platform[:release].gsub(/2018.*/, '1')
 | 
			
		||||
    when 'arch'
 | 
			
		||||
      'base-latest'
 | 
			
		||||
    when 'gentoo'
 | 
			
		||||
      "#{inspec.platform[:release].split('.')[0]}-#{derive_gentoo_init_system}"
 | 
			
		||||
    when 'mac_os_x'
 | 
			
		||||
      inspec.command('sw_vers -productVersion').stdout.to_s
 | 
			
		||||
    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_2022_datacenter'
 | 
			
		||||
      '2022-server'
 | 
			
		||||
    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
 | 
			
		||||
 | 
			
		||||
  # rubocop:disable Metrics/MethodLength,Metrics/CyclomaticComplexity
 | 
			
		||||
  def build_platform_codename
 | 
			
		||||
    case build_platform_finger
 | 
			
		||||
    when 'ubuntu-22.04'
 | 
			
		||||
      'jammy'
 | 
			
		||||
    when 'ubuntu-20.04'
 | 
			
		||||
      'focal'
 | 
			
		||||
    when 'ubuntu-18.04'
 | 
			
		||||
      'bionic'
 | 
			
		||||
    when 'debian-11'
 | 
			
		||||
      'bullseye'
 | 
			
		||||
    when 'debian-10'
 | 
			
		||||
      'buster'
 | 
			
		||||
    when 'debian-9'
 | 
			
		||||
      'stretch'
 | 
			
		||||
    when 'almalinux-8'
 | 
			
		||||
      "AlmaLinux #{build_platform_release} (Arctic Sphynx)"
 | 
			
		||||
    when 'amazonlinux-2'
 | 
			
		||||
      'Amazon Linux 2'
 | 
			
		||||
    when 'arch-base-latest'
 | 
			
		||||
      'Arch Linux'
 | 
			
		||||
    when 'centos-7'
 | 
			
		||||
      'CentOS Linux 7 (Core)'
 | 
			
		||||
    when 'centos-8'
 | 
			
		||||
      'CentOS Stream 8'
 | 
			
		||||
    when 'opensuse-tumbleweed'
 | 
			
		||||
      'openSUSE Tumbleweed'
 | 
			
		||||
    when 'opensuse-15'
 | 
			
		||||
      "openSUSE Leap #{build_platform_release}"
 | 
			
		||||
    when 'oraclelinux-8', 'oraclelinux-7'
 | 
			
		||||
      "Oracle Linux Server #{build_platform_release}"
 | 
			
		||||
    when 'gentoo-2-sysd', 'gentoo-2-sysv'
 | 
			
		||||
      'Gentoo/Linux'
 | 
			
		||||
    when 'rockylinux-8'
 | 
			
		||||
      "Rocky Linux #{build_platform_release} (Green Obsidian)"
 | 
			
		||||
    else
 | 
			
		||||
      ''
 | 
			
		||||
    end
 | 
			
		||||
  end
 | 
			
		||||
  # rubocop:enable Metrics/MethodLength,Metrics/CyclomaticComplexity
 | 
			
		||||
end
 | 
			
		||||
# rubocop:enable Metrics/ClassLength
 | 
			
		||||
@ -1,183 +0,0 @@
 | 
			
		||||
# -*- coding: utf-8 -*-
 | 
			
		||||
# vim: ft=yaml
 | 
			
		||||
---
 | 
			
		||||
postfix:
 | 
			
		||||
  manage_master_config: true
 | 
			
		||||
  master_config:
 | 
			
		||||
    # Preferred way of managing services/processes. This allows for finegrained
 | 
			
		||||
    # control over each service. See postfix/services.yaml for defaults that can
 | 
			
		||||
    # be overridden.
 | 
			
		||||
    services:
 | 
			
		||||
      smtp:
 | 
			
		||||
        # Limit to no more than 10 smtp processes
 | 
			
		||||
        maxproc: 10
 | 
			
		||||
      # Disable oldstyle TLS wrapped SMTP
 | 
			
		||||
      smtps:
 | 
			
		||||
        enable: false
 | 
			
		||||
      # Enable submission service on port 587/tcp with custom options
 | 
			
		||||
      submission:
 | 
			
		||||
        enable: true
 | 
			
		||||
        args:
 | 
			
		||||
          - "-o smtpd_tls_security_level=encrypt"
 | 
			
		||||
          - "-o smtpd_sasl_auth_enable=yes"
 | 
			
		||||
          - "-o smtpd_client_restrictions=permit_sasl_authenticated,reject"
 | 
			
		||||
      tlsproxy:
 | 
			
		||||
        enable: true
 | 
			
		||||
        chroot: true
 | 
			
		||||
 | 
			
		||||
    # Backwards compatible definition of dovecot delivery in master.cf
 | 
			
		||||
    enable_dovecot: false
 | 
			
		||||
    # Backwards compatible definition of submission listener in master.cf
 | 
			
		||||
    enable_submission: false
 | 
			
		||||
 | 
			
		||||
  enable_service: true
 | 
			
		||||
  reload_service: true
 | 
			
		||||
 | 
			
		||||
  config:
 | 
			
		||||
    smtpd_banner: $myhostname ESMTP $mail_name
 | 
			
		||||
    smtp_tls_CApath: /etc/ssl/certs
 | 
			
		||||
    biff: 'no'
 | 
			
		||||
    append_dot_mydomain: 'no'
 | 
			
		||||
    readme_directory: 'no'
 | 
			
		||||
    myhostname: localhost
 | 
			
		||||
    mydestination: localhost, localhost.localdomain
 | 
			
		||||
    relayhost: ''
 | 
			
		||||
    mynetworks: 127.0.0.0/8 [::ffff:127.0.0.0]/104 [::1]/128
 | 
			
		||||
    mailbox_size_limit: 0
 | 
			
		||||
    recipient_delimiter: +
 | 
			
		||||
    # using all has problems in centos with ipv6
 | 
			
		||||
    inet_interfaces: 127.0.0.1
 | 
			
		||||
    inet_protocols: all
 | 
			
		||||
 | 
			
		||||
    # Alias
 | 
			
		||||
    alias_maps: hash:/etc/aliases
 | 
			
		||||
    # This is the list of files for the newaliases
 | 
			
		||||
    # cmd to process (see postconf(5) for details).
 | 
			
		||||
    # Only local hash/btree/dbm files:
 | 
			
		||||
    alias_database: hash:/etc/aliases
 | 
			
		||||
 | 
			
		||||
    local_transport: virtual
 | 
			
		||||
    local_recipient_maps: $virtual_mailbox_maps
 | 
			
		||||
    transport_maps: hash:/etc/postfix/transport
 | 
			
		||||
 | 
			
		||||
    # Other map types
 | 
			
		||||
    check_client_access_maps: regexp:/etc/postfix/check_client_access
 | 
			
		||||
    check_cidr_maps: cidr:/etc/postfix/check_cidr
 | 
			
		||||
    check_pcre_maps: pcre:/etc/postfix/check_pcre
 | 
			
		||||
 | 
			
		||||
    # SMTP server
 | 
			
		||||
    smtpd_tls_session_cache_database: btree:${data_directory}/smtpd_scache
 | 
			
		||||
    smtpd_use_tls: 'yes'
 | 
			
		||||
    smtpd_sasl_auth_enable: 'yes'
 | 
			
		||||
    smtpd_sasl_type: dovecot
 | 
			
		||||
    smtpd_sasl_path: /var/run/dovecot/auth-client
 | 
			
		||||
    smtpd_recipient_restrictions: >-
 | 
			
		||||
      permit_mynetworks,
 | 
			
		||||
      permit_sasl_authenticated,
 | 
			
		||||
      reject_unauth_destination
 | 
			
		||||
    smtpd_relay_restrictions: >-
 | 
			
		||||
      permit_mynetworks,
 | 
			
		||||
      permit_sasl_authenticated,
 | 
			
		||||
      reject_unauth_destination
 | 
			
		||||
    smtpd_sasl_security_options: noanonymous
 | 
			
		||||
    smtpd_sasl_tls_security_options: $smtpd_sasl_security_options
 | 
			
		||||
    smtpd_tls_auth_only: 'yes'
 | 
			
		||||
    smtpd_sasl_local_domain: $mydomain
 | 
			
		||||
    smtpd_tls_loglevel: 1
 | 
			
		||||
    smtpd_tls_session_cache_timeout: 3600s
 | 
			
		||||
 | 
			
		||||
    relay_domains: '$mydestination'
 | 
			
		||||
 | 
			
		||||
    # SMTP server certificate and key (from pillar data)
 | 
			
		||||
    smtpd_tls_cert_file: /etc/postfix/ssl/server-cert.crt
 | 
			
		||||
    smtpd_tls_key_file: /etc/postfix/ssl/server-cert.key
 | 
			
		||||
 | 
			
		||||
    # SMTP client
 | 
			
		||||
    smtp_tls_session_cache_database: btree:${data_directory}/smtp_scache
 | 
			
		||||
    smtp_use_tls: 'yes'
 | 
			
		||||
    smtp_tls_cert_file: /etc/postfix/ssl/example.com-relay-client-cert.crt
 | 
			
		||||
    smtp_tls_key_file: /etc/postfix/ssl/example.com-relay-client-cert.key
 | 
			
		||||
    smtp_tls_policy_maps: hash:/etc/postfix/tls_policy
 | 
			
		||||
 | 
			
		||||
    smtp_sasl_password_maps: hash:/etc/postfix/sasl_passwd
 | 
			
		||||
    sender_canonical_maps: hash:/etc/postfix/sender_canonical
 | 
			
		||||
    relay_recipient_maps: hash:/etc/postfix/relay_domains
 | 
			
		||||
    virtual_alias_maps: hash:/etc/postfix/virtual
 | 
			
		||||
 | 
			
		||||
  aliases:
 | 
			
		||||
    # manage single aliases
 | 
			
		||||
    # this uses the aliases file defined in the minion config, /etc/aliases by default
 | 
			
		||||
    use_file: false
 | 
			
		||||
    present:
 | 
			
		||||
      root: info@example.com
 | 
			
		||||
    absent:
 | 
			
		||||
      - root
 | 
			
		||||
 | 
			
		||||
  certificates:
 | 
			
		||||
    server-cert:
 | 
			
		||||
      public_cert: |
 | 
			
		||||
        -----BEGIN CERTIFICATE-----
 | 
			
		||||
        (Your primary SSL certificate: smtp.example.com.crt)
 | 
			
		||||
        -----END CERTIFICATE-----
 | 
			
		||||
        -----BEGIN CERTIFICATE-----
 | 
			
		||||
        (Your intermediate certificate: example-ca.crt)
 | 
			
		||||
        -----END CERTIFICATE-----
 | 
			
		||||
        -----BEGIN CERTIFICATE-----
 | 
			
		||||
        (Your root certificate: trusted-root.crt)
 | 
			
		||||
        -----END CERTIFICATE-----
 | 
			
		||||
      private_key: |
 | 
			
		||||
        -----BEGIN RSA PRIVATE KEY-----
 | 
			
		||||
        (Your Private key)
 | 
			
		||||
        -----END RSA PRIVATE KEY-----
 | 
			
		||||
 | 
			
		||||
    example.com-relay-client-cert:
 | 
			
		||||
      public_cert: |
 | 
			
		||||
        -----BEGIN CERTIFICATE-----
 | 
			
		||||
        (Your primary SSL certificate: smtp.example.com.crt)
 | 
			
		||||
        -----END CERTIFICATE-----
 | 
			
		||||
      private_key: |
 | 
			
		||||
        -----BEGIN RSA PRIVATE KEY-----
 | 
			
		||||
        (Your Private key)
 | 
			
		||||
        -----END RSA PRIVATE KEY-----
 | 
			
		||||
 | 
			
		||||
  mapping:
 | 
			
		||||
    transport_maps:
 | 
			
		||||
      - example.com: '10.1.1.1'
 | 
			
		||||
 | 
			
		||||
    smtp_tls_policy_maps:
 | 
			
		||||
      - example.com: encrypt
 | 
			
		||||
      - .example.com: encrypt
 | 
			
		||||
 | 
			
		||||
    smtp_sasl_password_maps:
 | 
			
		||||
      - smtp.example.com: myaccount:somepassword
 | 
			
		||||
 | 
			
		||||
    sender_canonical_maps:
 | 
			
		||||
      - root: servers@example.com
 | 
			
		||||
      - nagios: alerts@example.com
 | 
			
		||||
 | 
			
		||||
    relay_recipient_maps:
 | 
			
		||||
      - example.com: OK
 | 
			
		||||
 | 
			
		||||
    virtual_alias_maps:
 | 
			
		||||
      - groupaliasexample:
 | 
			
		||||
          - someuser_1@example.com
 | 
			
		||||
          - someuser_2@example.com
 | 
			
		||||
      - singlealiasexample: someuser_3@example.com
 | 
			
		||||
 | 
			
		||||
    check_client_access_maps:
 | 
			
		||||
      - '/[%!@].*[%!@]/':
 | 
			
		||||
          - 550 Sender-specified routing rejected
 | 
			
		||||
 | 
			
		||||
    check_cidr_maps:
 | 
			
		||||
      - '192.168.1.1':
 | 
			
		||||
          - OK
 | 
			
		||||
      - '192.168.0.0/16':
 | 
			
		||||
          - REJECT
 | 
			
		||||
      - '2001:db8::1':
 | 
			
		||||
          - OK
 | 
			
		||||
      - '2001:db8::/32':
 | 
			
		||||
          - REJECT
 | 
			
		||||
 | 
			
		||||
    check_pcre_maps:
 | 
			
		||||
      - '/^(?!owner-)(.*)-outgoing@(.*)/':
 | 
			
		||||
          - 550 Use ${1}@${2} instead
 | 
			
		||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user