Compare commits

...

259 Commits

Author SHA1 Message Date
Imran Iqbal
20f210a273
chore(gemfile.lock): update to latest gem versions (2022-W28) [skip ci]
* Automated using https://github.com/myii/ssf-formula/pull/454
2022-07-17 19:47:08 +01:00
Imran Iqbal
59529847e0
chore(gemfile.lock): update to latest gem versions (2022-W26) [skip ci]
* Automated using https://github.com/myii/ssf-formula/pull/453
2022-06-30 23:08:24 +01:00
Imran Iqbal
73b855be9f
chore(gemfile.lock): update to latest gem versions (2022-W24) [skip ci]
* Automated using https://github.com/myii/ssf-formula/pull/452
2022-06-15 23:05:30 +01:00
Imran Iqbal
02e4fb91be
ci: update pre-commit configuration inc. for pre-commit.ci [skip ci]
* Automated using https://github.com/myii/ssf-formula/pull/450
2022-06-09 00:04:29 +01:00
Imran Iqbal
bc654fa992
chore(gemfile.lock): update to latest gem versions (2022-W23) [skip ci]
* Automated using https://github.com/myii/ssf-formula/pull/449
2022-06-07 23:30:19 +01:00
Imran Iqbal
57c938a029
chore(gemfile.lock): update to latest gem versions (2022-W22) [skip ci]
* Automated using https://github.com/myii/ssf-formula/pull/447
2022-05-30 17:28:12 +01:00
Imran Iqbal
584f74ba04
chore(gemfile.lock): update to latest gem versions (2022-W20) [skip ci]
* Automated using https://github.com/myii/ssf-formula/pull/444
2022-05-17 13:21:06 +01:00
Imran Iqbal
842a10935d
test(system.rb): add support for mac_os_x [skip ci]
* Automated using https://github.com/myii/ssf-formula/pull/442
2022-05-17 08:50:59 +01:00
Imran Iqbal
f605736c90
chore(gemfile.lock): update to latest gem versions (2022-W19) [skip ci]
* Automated using https://github.com/myii/ssf-formula/pull/439
2022-05-10 07:33:09 +01:00
Imran Iqbal
34bdb08e5c
chore(gemfile.lock): update to latest gem versions (2022-W18) [skip ci]
* Automated using https://github.com/myii/ssf-formula/pull/437
2022-05-06 23:17:37 +01:00
Imran Iqbal
e56f0217f4
chore(gemfile.lock): update to latest gem versions (2022-W17) [skip ci]
* Automated using https://github.com/myii/ssf-formula/pull/433
2022-04-25 09:10:58 +01:00
Imran Iqbal
e7e94731fb
chore(gemfile.lock): update to latest gem versions (2022-W16) [skip ci]
* Automated using https://github.com/myii/ssf-formula/pull/431
2022-04-18 23:37:10 +01:00
Imran Iqbal
6eca6a2b4f
chore(gemfile.lock): update to latest gem versions (2022-W15) [skip ci]
* Automated using https://github.com/myii/ssf-formula/pull/428
2022-04-11 19:22:20 +01:00
Imran Iqbal
c0966e961f
chore(gemfile.lock): update to latest gem versions (2022-W14) [skip ci]
* Automated using https://github.com/myii/ssf-formula/pull/427
2022-04-04 09:23:25 +01:00
Imran Iqbal
b4b0893b11
ci(kitchen+gitlab): update for new pre-salted images [skip ci]
* Automated using https://github.com/myii/ssf-formula/pull/426
2022-04-03 15:07:49 +01:00
Imran Iqbal
22c49f5bd0
chore(gemfile.lock): update to latest gem versions (2022-W13) [skip ci]
* Automated using https://github.com/myii/ssf-formula/pull/425
2022-04-01 15:36:04 +01:00
Imran Iqbal
31f2983b26
chore(gemfile.lock): update to latest gem versions (2022-W12) [skip ci]
* Automated using https://github.com/myii/ssf-formula/pull/424
2022-03-22 12:01:50 +00:00
Imran Iqbal
cc7e48b82d
chore(gemfile.lock): update to latest gem versions (2022-W11) [skip ci]
* Automated using https://github.com/myii/ssf-formula/pull/423
2022-03-17 23:40:42 +00:00
Imran Iqbal
19d29f2b2b
chore(gemfile.lock): update to latest gem versions (2022-W10) [skip ci]
* Automated using https://github.com/myii/ssf-formula/pull/422
2022-03-12 10:05:54 +00:00
Imran Iqbal
8a67e5d60d
chore(gemfile.lock): update to latest gem versions (2022-W09) [skip ci]
* Automated using https://github.com/myii/ssf-formula/pull/421
2022-03-04 15:33:00 +00:00
Imran Iqbal
147e61cee6
chore(gemfile.lock): update to latest gem versions (2022-W08) [skip ci]
* Automated using https://github.com/myii/ssf-formula/pull/419
2022-02-21 19:10:39 +00:00
Imran Iqbal
16e4950d18
chore(gemfile.lock): update to latest gem versions (2022-W07) [skip ci]
* Automated using https://github.com/myii/ssf-formula/pull/416
2022-02-15 09:02:32 +00:00
Imran Iqbal
0d68789640
test(system): add build_platform_codename [skip ci]
* Automated using https://github.com/myii/ssf-formula/pull/415
2022-02-14 08:08:03 +00:00
semantic-release-bot
127acdaf53 chore(release): 2.0.2 [skip ci]
## [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](6a33d98d75))

### Continuous Integration

* update linters to latest versions [skip ci] ([62eb687](62eb687b05))
* **gemfile:** allow rubygems proxy to be provided as an env var [skip ci] ([5d167a4](5d167a403c))
* **kitchen+gitlab:** update for new pre-salted images [skip ci] ([008ac83](008ac83c7a))
2022-02-13 00:05:17 +00:00
Imran Iqbal
6a33d98d75
refactor(salt-lint): fix violations
```
[213] SaltStack recommends using cmd.run together with onchanges, rather than cmd.wait
postfix/config.sls:148
  cmd.wait:
[213] SaltStack recommends using cmd.run together with onchanges, rather than cmd.wait
postfix/init.sls:80
  cmd.wait:
```
2022-02-12 23:44:35 +00:00
Imran Iqbal
62eb687b05
ci: update linters to latest versions [skip ci]
* Automated using https://github.com/myii/ssf-formula/pull/414
2022-02-12 23:23:31 +00:00
Imran Iqbal
eb01173981
chore(gemfile.lock): update to latest gem versions (2022-W06) [skip ci]
* Automated using https://github.com/myii/ssf-formula/pull/412
2022-02-07 17:30:10 +00:00
Imran Iqbal
008ac83c7a
ci(kitchen+gitlab): update for new pre-salted images [skip ci]
* Automated using https://github.com/myii/ssf-formula/pull/410
2022-02-02 23:05:08 +00:00
Imran Iqbal
57011dcce2
chore(gemfile.lock): update to latest gem versions (2022-W05) [skip ci]
* Automated using https://github.com/myii/ssf-formula/pull/409
2022-02-01 23:41:28 +00:00
noelmcloughlin
5d167a403c
ci(gemfile): allow rubygems proxy to be provided as an env var [skip ci]
* Automated using https://github.com/myii/ssf-formula/pull/408
2022-01-26 08:42:55 +00:00
Imran Iqbal
61a9136253
chore(gemfile.lock): update to latest gem versions (2022-W04) [skip ci]
* Automated using https://github.com/myii/ssf-formula/pull/407
2022-01-25 14:13:46 +00:00
semantic-release-bot
6b9607634c chore(release): 2.0.1 [skip ci]
## [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](3bd3d1c74e))

### Code Refactoring

* **config:** add `default_database_type` as default value ([6da70d2](6da70d21bb))

### Continuous Integration

* **3003.1:** update inc. AlmaLinux, Rocky & `rst-lint` [skip ci] ([3284d38](3284d38a36))
* **gemfile+lock:** use `ssf` customised `inspec` repo [skip ci] ([cfed974](cfed974000))
* **kitchen:** move `provisioner` block & update `run_command` [skip ci] ([31a3836](31a3836cd6))
* **kitchen+ci:** update with `3004` pre-salted images/boxes [skip ci] ([dec042a](dec042aa43))
* **kitchen+ci:** update with latest `3003.2` pre-salted images [skip ci] ([9688f36](9688f36aa1))
* **kitchen+ci:** update with latest CVE pre-salted images [skip ci] ([76134b4](76134b47c7))
* add `arch-master` to matrix and update `.travis.yml` [skip ci] ([c631eca](c631eca02e))
* add Debian 11 Bullseye & update `yamllint` configuration [skip ci] ([c11c07d](c11c07d6a6))
* **kitchen+gitlab:** adjust matrix to add `3003` [skip ci] ([04564a7](04564a7ad6))
* **kitchen+gitlab:** remove Ubuntu 16.04 & Fedora 32 (EOL) [skip ci] ([d56006f](d56006f8d2))

### Tests

* standardise use of `share` suite & `_mapdata` state [skip ci] ([4c394a7](4c394a76fa))
2022-01-25 12:19:23 +00:00
Javier Bértoli
fc98143c96
Merge pull request #123 from netmanagers/alxwr-master-updates
fix(config): set default_database_type; fixes #118 (supersedes  #121)
2022-01-25 07:15:12 -03:00
Javier Bértoli
6da70d21bb refactor(config): add default_database_type as default value 2022-01-24 18:08:10 -03:00
Alexander Weidinger
3bd3d1c74e fix(config): set default_database_type; fixes #118 2022-01-24 18:07:03 -03:00
Imran Iqbal
3b71be736e
chore(gemfile.lock): update to latest gem versions (2022-W03) [skip ci]
* Automated using https://github.com/myii/ssf-formula/pull/405
2022-01-17 19:49:42 +00:00
Imran Iqbal
c903221ecd
chore(semantic-release): replace broken m2r with m2r2 [skip ci]
* Automated using https://github.com/myii/ssf-formula/pull/404
2022-01-17 08:15:32 +00:00
Imran Iqbal
e3964b1993
chore(gemfile.lock): update to latest gem versions (2022-W02) [skip ci]
* Automated using https://github.com/myii/ssf-formula/pull/398
2022-01-11 09:38:04 +00:00
Imran Iqbal
7a2af78544
chore(gemfile.lock): update to latest gem versions (2022-W01) [skip ci]
* Automated using https://github.com/myii/ssf-formula/pull/397
2022-01-06 08:07:33 +00:00
Imran Iqbal
75f1a4810c
chore(gemfile.lock): update to latest gem versions (2021-W52) [skip ci]
* Automated using https://github.com/myii/ssf-formula/pull/396
2021-12-28 21:06:00 +00:00
Imran Iqbal
eb4e6a1c8b
chore(gemfile.lock): update to latest gem versions (2021-W51) [skip ci]
* Automated using https://github.com/myii/ssf-formula/pull/394
2021-12-22 11:57:43 +00:00
Imran Iqbal
1c39ee722a
chore(gemfile.lock): update to latest gem versions (2021-W50) [skip ci]
* Automated using https://github.com/myii/ssf-formula/pull/391
2021-12-14 15:22:14 +00:00
Imran Iqbal
e41b6639e1
chore(gemfile.lock): update to latest gem versions (2021-W49) [skip ci]
* Automated using https://github.com/myii/ssf-formula/pull/388
2021-12-06 08:22:00 +00:00
Imran Iqbal
da21bffa44
chore(gemfile.lock): update to latest gem versions (2021-W47) [skip ci]
* Automated using https://github.com/myii/ssf-formula/pull/386
2021-11-23 11:43:35 +00:00
Imran Iqbal
dec042aa43
ci(kitchen+ci): update with 3004 pre-salted images/boxes [skip ci]
* Automated using https://github.com/myii/ssf-formula/pull/385
2021-11-23 10:36:22 +00:00
Imran Iqbal
f3850814d0
chore(gemfile.lock): update to latest gem versions (2021-W43) [skip ci]
* Automated using https://github.com/myii/ssf-formula/pull/381
2021-10-26 11:15:23 +01:00
Imran Iqbal
ad2a0c24da
chore(gemfile.lock): update to latest gem versions (2021-W42) [skip ci]
* Automated using https://github.com/myii/ssf-formula/pull/380
2021-10-23 21:10:57 +01:00
Imran Iqbal
4430fc0564
chore(gemfile.lock): update to latest gem versions (2021-W41) [skip ci]
* Automated using https://github.com/myii/ssf-formula/pull/378
2021-10-15 19:10:45 +01:00
Imran Iqbal
c8da52f4d8
chore(gemfile.lock): update to latest gem versions (2021-W40) [skip ci]
* Automated using https://github.com/myii/ssf-formula/pull/375
2021-10-06 17:04:52 +01:00
Imran Iqbal
76134b47c7
ci(kitchen+ci): update with latest CVE pre-salted images [skip ci]
* Automated using https://github.com/myii/ssf-formula/pull/374
2021-10-05 11:16:09 +01:00
Imran Iqbal
439e300aa7
chore(gemfile.lock): update to latest gem versions (2021-W39) [skip ci]
* Automated using https://github.com/myii/ssf-formula/pull/370
2021-09-30 07:18:26 +01:00
Imran Iqbal
45016a1e2b
chore(gemfile.lock): update to latest gem versions (2021-W38) [skip ci]
* Automated using https://github.com/myii/ssf-formula/pull/369
2021-09-21 11:59:03 +01:00
Imran Iqbal
51ecd8606b
chore(gemfile.lock): update to latest gem versions (2021-W37) [skip ci]
* Automated using https://github.com/myii/ssf-formula/pull/368
2021-09-14 09:57:41 +01:00
Imran Iqbal
c2a8f19456
chore(gemfile.lock): update to latest gem versions (2021-W36) [skip ci]
* Automated using https://github.com/myii/ssf-formula/pull/367
2021-09-08 23:34:29 +01:00
Imran Iqbal
782581b317
chore(gemfile.lock): update to latest gem versions (2021-W35) [skip ci]
* Automated using https://github.com/myii/ssf-formula/pull/364
2021-08-30 18:10:37 +01:00
Imran Iqbal
f1b6e8c5fc
chore(gemfile.lock): update to latest gem versions (2021-W34) [skip ci]
* Automated using https://github.com/myii/ssf-formula/pull/362
2021-08-23 09:24:50 +01:00
Imran Iqbal
9688f36aa1
ci(kitchen+ci): update with latest 3003.2 pre-salted images [skip ci]
* Automated using https://github.com/myii/ssf-formula/pull/360
2021-08-19 10:13:57 +01:00
Imran Iqbal
6f3207eb1d
chore(gemfile.lock): update to latest gem versions (2021-W33) [skip ci]
* Automated using https://github.com/myii/ssf-formula/pull/359
2021-08-16 18:24:42 +01:00
Imran Iqbal
e629d88e93
chore(gemfile.lock): update to latest gem versions (2021-W32) [skip ci]
* Automated using https://github.com/myii/ssf-formula/pull/358
2021-08-09 12:15:08 +01:00
Imran Iqbal
cfed974000
ci(gemfile+lock): use ssf customised inspec repo [skip ci]
* Automated using https://github.com/myii/ssf-formula/pull/357
2021-08-04 21:55:46 +01:00
Imran Iqbal
05c8c1b2de
chore(gemfile.lock): update to latest gem versions (2021-W31) [skip ci]
* Automated using https://github.com/myii/ssf-formula/pull/356
2021-08-04 21:38:33 +01:00
Imran Iqbal
f8048f9b50
chore(gemfile.lock): update to latest gem versions (2021-W30) [skip ci]
* Automated using https://github.com/myii/ssf-formula/pull/353
2021-07-26 14:29:45 +01:00
Imran Iqbal
94509cdb1a
chore(gemfile.lock): update to latest gem versions (2021-W29) [skip ci]
* Automated using https://github.com/myii/ssf-formula/pull/349
2021-07-21 18:32:36 +01:00
Imran Iqbal
c11c07d6a6
ci: add Debian 11 Bullseye & update yamllint configuration [skip ci]
* Automated using https://github.com/myii/ssf-formula/pull/345
2021-07-18 19:04:00 +01:00
Imran Iqbal
31a3836cd6
ci(kitchen): move provisioner block & update run_command [skip ci]
* Automated using https://github.com/myii/ssf-formula/pull/344
2021-07-17 21:11:38 +01:00
Imran Iqbal
4ebc15609f
chore(gemfile+lock): update to latest gem versions (2021-W28) [skip ci]
* Automated using https://github.com/myii/ssf-formula/pull/343
2021-07-17 20:28:56 +01:00
Imran Iqbal
fe552b009d
chore(deps): bump addressable from 2.7.0 to 2.8.0 [skip ci]
* Automated using https://github.com/myii/ssf-formula/pull/340
2021-07-14 12:15:25 +01:00
Imran Iqbal
3284d38a36
ci(3003.1): update inc. AlmaLinux, Rocky & rst-lint [skip ci]
* Automated using https://github.com/myii/ssf-formula/pull/335
2021-07-02 00:06:24 +01:00
Imran Iqbal
d56006f8d2
ci(kitchen+gitlab): remove Ubuntu 16.04 & Fedora 32 (EOL) [skip ci]
* Automated using https://github.com/myii/ssf-formula/pull/331
2021-06-21 20:47:24 +01:00
Imran Iqbal
37042c2b31
chore(pre-commit): use info report level for rstcheck [skip ci]
* Automated using https://github.com/myii/ssf-formula/pull/325
2021-05-20 14:09:42 +01:00
Imran Iqbal
c631eca02e
ci: add arch-master to matrix and update .travis.yml [skip ci]
* Automated using https://github.com/myii/ssf-formula/pull/323
2021-05-09 22:32:52 +01:00
Imran Iqbal
04564a7ad6
ci(kitchen+gitlab): adjust matrix to add 3003 [skip ci]
* Automated using https://github.com/myii/ssf-formula/pull/318
2021-04-23 08:48:38 +01:00
Imran Iqbal
c876d0f400
chore: update CODEOWNERS & .yamllint re: kitchen-vagrant [skip ci]
* Automated using https://github.com/myii/ssf-formula/pull/310
2021-04-05 18:20:57 +01:00
Imran Iqbal
4c394a76fa
test: standardise use of share suite & _mapdata state [skip ci]
* Automated using https://github.com/myii/ssf-formula/pull/302
2021-03-23 21:31:53 +00:00
semantic-release-bot
065f31ac99 chore(release): 2.0.0 [skip ci]
# [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](03ad48b8a4))

### Continuous Integration

* **commitlint:** ensure `upstream/master` uses main repo URL [skip ci] ([381b150](381b150b0f))
* **gemfile+lock:** use `ssf` customised `kitchen-docker` repo [skip ci] ([c5851e6](c5851e67a2))
* **gitlab-ci:** add `rubocop` linter (with `allow_failure`) [skip ci] ([22fa184](22fa184b14))
* **gitlab-ci:** use GitLab CI as Travis CI replacement ([890f3ae](890f3aebc6))
* **kitchen+ci:** use latest pre-salted images (after CVE) [skip ci] ([19617a0](19617a0ad7))
* **kitchen+gitlab-ci:** use latest pre-salted images [skip ci] ([d65a7a3](d65a7a36c2))
* **pre-commit:** add to formula [skip ci] ([f41392d](f41392d450))
* **pre-commit:** enable/disable `rstcheck` as relevant [skip ci] ([fb5be95](fb5be9504e))
* **pre-commit:** finalise `rstcheck` configuration [skip ci] ([75941ed](75941ed614))
* **pre-commit:** update hook for `rubocop` [skip ci] ([c60d58e](c60d58eb11))

### BREAKING CHANGES

* **resources:** as all resources' IDs changed, other formulas
depending on this formula's resources will need to be modified
accordingly.
2021-03-15 19:55:47 +00:00
Imran Iqbal
dc986f084e
Merge pull request #120 from netmanagers/master
fix(resources): modify names to match template-formula's
2021-03-15 19:38:20 +00:00
Javier Bértoli
03ad48b8a4 fix(resources): make resources' IDs unique
The new format match the format proposed in the template-formula

BREAKING CHANGE: as all resources' IDs changed, other formulas
depending on this formula's resources will need to be modified
accordingly.
2021-03-15 16:08:07 -03:00
Imran Iqbal
19617a0ad7
ci(kitchen+ci): use latest pre-salted images (after CVE) [skip ci]
* Automated using https://github.com/myii/ssf-formula/pull/299
2021-03-07 22:21:27 +00:00
Imran Iqbal
507f6af887
chore(yamllint): add .git/ to ignores [skip ci]
* Automated using https://github.com/myii/ssf-formula/pull/297
2021-03-05 18:34:26 +00:00
Daniel Dehennin
7556f448a3
chore(rubocop): allow use of YAML.load for _mapdata.rb [skip ci]
* Automated using https://github.com/myii/ssf-formula/pull/296
2021-02-23 21:50:28 +00:00
Dafydd Jones
c47f4abadc
chore(shellcheck): switch hook for shellcheck [skip ci]
* Automated using https://github.com/myii/ssf-formula/pull/295
2021-02-21 08:32:54 +00:00
Imran Iqbal
c5851e67a2
ci(gemfile+lock): use ssf customised kitchen-docker repo [skip ci]
* Automated using https://github.com/myii/ssf-formula/pull/294
2021-02-17 13:52:34 +00:00
Imran Iqbal
d65a7a36c2
ci(kitchen+gitlab-ci): use latest pre-salted images [skip ci]
* Automated using https://github.com/myii/ssf-formula/pull/293
2021-02-15 12:45:05 +00:00
Imran Iqbal
3dd9778790
chore: standardise structure (.gitignore & _mapdata.rb) [skip ci]
* Automated using https://github.com/myii/ssf-formula/pull/292
2021-02-11 11:52:30 +00:00
Imran Iqbal
c60d58eb11
ci(pre-commit): update hook for rubocop [skip ci]
* Automated using https://github.com/myii/ssf-formula/pull/290
2021-02-02 00:21:57 +00:00
Imran Iqbal
381b150b0f
ci(commitlint): ensure upstream/master uses main repo URL [skip ci]
* Automated using https://github.com/myii/ssf-formula/pull/278
2020-12-20 18:48:42 +00:00
Imran Iqbal
22fa184b14
ci(gitlab-ci): add rubocop linter (with allow_failure) [skip ci]
* Automated using https://github.com/myii/ssf-formula/pull/277
2020-12-19 14:34:18 +00:00
Imran Iqbal
890f3aebc6
ci(gitlab-ci): use GitLab CI as Travis CI replacement
* Automated using https://github.com/myii/ssf-formula/pull/275
2020-12-16 06:38:25 +00:00
Imran Iqbal
c0485fb345
chore(gemfile+lock): update to latest gem versions (2020-W44) [skip ci]
* Automated using https://github.com/myii/ssf-formula/pull/274
2020-10-26 22:52:46 +00:00
Imran Iqbal
8f1167048a
chore(gemfile+lock): update to latest gem versions (2020-W43) [skip ci]
* Automated using https://github.com/myii/ssf-formula/pull/273
2020-10-20 10:20:45 +01:00
Imran Iqbal
75941ed614
ci(pre-commit): finalise rstcheck configuration [skip ci]
* Automated using https://github.com/myii/ssf-formula/pull/267
2020-10-10 06:50:51 +01:00
Dafydd Jones
a54905f066
chore(commitlint): add {body,footer,header}-max(-line)-length [skip ci]
* Automated using https://github.com/myii/ssf-formula/pull/265
2020-10-07 09:08:55 +01:00
Imran Iqbal
6da33dcb7b
chore(gemfile+lock): update to latest gem versions (2020-W41) [skip ci]
* Automated using https://github.com/myii/ssf-formula/pull/263
2020-10-07 00:07:14 +01:00
Imran Iqbal
fb5be9504e
ci(pre-commit): enable/disable rstcheck as relevant [skip ci]
* Automated using https://github.com/myii/ssf-formula/pull/262
2020-10-05 00:23:24 +01:00
Dafydd Jones
f41392d450
ci(pre-commit): add to formula [skip ci]
* Automated using https://github.com/myii/ssf-formula/pull/259
2020-10-03 10:52:04 +01:00
semantic-release-bot
42afb3454e chore(release): 1.2.2 [skip ci]
## [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](fdc127c8db))
* quote modes/numbers ([b9c4fba](b9c4fbadaf))
2020-10-02 19:47:45 +00:00
Imran Iqbal
98831f2159
Merge pull request #116 from jasonious/properly-quote-modes
style: quote modes/numbers
2020-10-02 20:32:12 +01:00
jason shaw
fdc127c8db style: prepend modes with 0
per https://github.com/warpnet/salt-lint/wiki/208
2020-10-02 14:09:13 -04:00
jason shaw
b9c4fbadaf style: quote modes/numbers
salt-lint complains about these
2020-10-02 14:08:44 -04:00
semantic-release-bot
cff88afa90 chore(release): 1.2.1 [skip ci]
## [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](780dc9d372))
2020-09-27 15:48:10 +00:00
Nicolas Rodriguez
3f599c0bf9
Merge pull request #115 from dafyddj/fix/for-pre-commit
style: linting for `yamllint`
2020-09-27 17:39:30 +02:00
Dafydd Jones
780dc9d372 style: linting for yamllint 2020-09-27 14:50:48 +01:00
semantic-release-bot
9c85788c47 chore(release): 1.2.0 [skip ci]
# [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](e3970dfc3e))
2020-07-20 08:58:38 +00:00
Imran Iqbal
683e35d6ba
Merge pull request #114 from Perceptyx/add-map-types-test
feat(maps): add more map types and tests
2020-07-20 09:51:20 +01:00
Felipe Zipitria
e3970dfc3e
feat(maps): add more map types and tests
Signed-off-by: Felipe Zipitria <fzipitria@perceptyx.com>
2020-07-18 17:00:13 -03:00
semantic-release-bot
d6a0601355 chore(release): 1.1.0 [skip ci]
# [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](2ddd417039))

### Features

* **config:** run postmap also for regexp maps ([7584fce](7584fce0af))
2020-07-18 18:55:09 +00:00
Felipe Zipitría
a10af42b16
Merge pull request #113 from hoonetorg/master
run postmap also for regexp maps
2020-07-18 15:46:42 -03:00
Holger Fischer
7584fce0af feat(config): run postmap also for regexp maps 2020-07-18 20:36:58 +02:00
Imran Iqbal
75fcd4af70 chore(gemfile.lock): update to latest gem versions (2020-W27) [skip ci]
* Automated using https://github.com/myii/ssf-formula/pull/235
2020-07-06 14:30:14 +01:00
Imran Iqbal
2b4b9c659c chore(gemfile.lock): update to latest gem versions (2020-W26) [skip ci]
* Automated using https://github.com/myii/ssf-formula/pull/233
2020-06-26 12:46:28 +01:00
Imran Iqbal
a6829cfc51 chore(gemfile.lock): update to latest gem versions (2020-W25) [skip ci]
* Automated using https://github.com/myii/ssf-formula/pull/229
2020-06-21 12:58:47 +01:00
Imran Iqbal
2ddd417039 ci(kitchen): use saltimages Docker Hub where available [skip ci]
* Automated using https://github.com/myii/ssf-formula/pull/223
2020-06-15 16:58:31 +01:00
Imran Iqbal
103c17db10 chore(gemfile.lock): update to latest gem versions [skip ci]
* Automated using https://github.com/myii/ssf-formula/pull/222
2020-06-15 15:09:29 +01:00
semantic-release-bot
43fb80ebfa chore(release): 1.0.3 [skip ci]
## [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](a28bd05b85))
* **test:** use specific ip to workaround centos bug ([273caf9](273caf9b6f))

### Tests

* **default:** add inspec for base and maps ([2a61498](2a61498fa4))
2020-06-08 02:52:48 +00:00
Imran Iqbal
466c120462
Merge pull request #108 from Perceptyx/add-inspec-tests
test(default): add inspec for base and maps
2020-06-08 03:45:33 +01:00
Felipe Zipitria
a28bd05b85
fix(deps): fixes ordering where postmap requires sane main.cf
Moved maps generation to config, and added dependency on main.cf generation. Solves centos8 problems.

Signed-off-by: Felipe Zipitria <fzipitria@perceptyx.com>
2020-06-07 23:35:20 -03:00
Felipe Zipitria
273caf9b6f
fix(test): use specific ip to workaround centos bug
Signed-off-by: Felipe Zipitria <fzipitria@perceptyx.com>
2020-06-07 21:47:22 -03:00
Felipe Zipitria
2a61498fa4
test(default): add inspec for base and maps
Signed-off-by: Felipe Zipitria <fzipitria@perceptyx.com>
2020-06-07 21:47:18 -03:00
semantic-release-bot
474a59be65 chore(release): 1.0.2 [skip ci]
## [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](067bcf636f))
2020-06-07 23:55:14 +00:00
Imran Iqbal
b20b7ec72d
Merge pull request #112 from Perceptyx/opensuse-fixes
fix(opensuse): fixes config files generation in opensuse
2020-06-08 00:48:08 +01:00
Felipe Zipitria
067bcf636f
fix(opensuse): fixes config files generation in opensuse
Signed-off-by: Felipe Zipitria <fzipitria@perceptyx.com>
2020-06-07 20:28:24 -03:00
semantic-release-bot
55e366f197 chore(release): 1.0.1 [skip ci]
## [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](04003c6ee3))
2020-06-07 12:38:48 +00:00
Felipe Zipitría
e7856e054b
Merge pull request #107 from Perceptyx/fix-restrictions-defined-main-cf
fix(main): fix postconf warning when reloading/starting
2020-06-07 09:28:47 -03:00
semantic-release-bot
f128f6db79 chore(release): 1.0.0 [skip ci]
# [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](06276fd743))

### Continuous Integration

* **kitchen+travis:** use latest pre-salted images ([b364744](b364744e40))

### BREAKING CHANGES

* **maps:** `transport` and `tls_policy` keys in `postfix:config` have been moved to the standard `postfix:mapping`.
2020-06-06 22:33:23 +00:00
Felipe Zipitria
04003c6ee3
fix(main): fix postconf warning when reloading/starting
Signed-off-by: Felipe Zipitria <fzipitria@perceptyx.com>
2020-06-06 19:26:18 -03:00
Felipe Zipitría
0b16a2c2cb
Merge pull request #106 from Perceptyx/reorganize-maps
refactor(maps): move tls_policy and transport maps to standard mapping
2020-06-06 19:25:42 -03:00
Felipe Zipitria
06276fd743
refactor(maps): move tls_policy and transport to mapping section
Signed-off-by: Felipe Zipitria <fzipitria@perceptyx.com>

BREAKING CHANGE: `transport` and `tls_policy` keys in `postfix:config` have been moved to the standard `postfix:mapping`.
2020-06-06 19:17:46 -03:00
Imran Iqbal
954a6634dc chore(gemfile.lock): update to latest gem versions [skip ci]
* Automated using https://github.com/myii/ssf-formula/pull/221
2020-06-05 22:19:05 +01:00
Felipe Zipitría
42965a7640
Merge pull request #110 from myii/chore/standardise-structure-220
ci(kitchen+travis): use latest pre-salted images
2020-06-05 15:46:14 -03:00
Imran Iqbal
b364744e40 ci(kitchen+travis): use latest pre-salted images
* Automated using https://github.com/myii/ssf-formula/pull/220
2020-06-05 19:32:33 +01:00
Imran Iqbal
f49290cc92 chore(codeowners): add global codeowner [skip ci]
* Automated using https://github.com/myii/ssf-formula/pull/219
2020-06-05 19:06:50 +01:00
Imran Iqbal
2f9c96e170 chore(gemfile.lock): update to latest gem versions [skip ci]
* Automated using https://github.com/myii/ssf-formula/pull/202
2020-05-28 00:21:08 +01:00
semantic-release-bot
28348200a1 chore(release): 0.19.0 [skip ci]
# [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](c78c421984))

### Features

* **maps:** adds tls_policy map for smtp delivery ([d87da4a](d87da4adc4))
2020-05-23 13:46:25 +00:00
Imran Iqbal
e61eb5a685
Merge pull request #105 from Perceptyx/add-tls-poliy-map
feat(maps): adds tls_policy map for smtp delivery
2020-05-23 14:38:44 +01:00
Imran Iqbal
c78c421984 ci(travis): add notifications => zulip [skip ci]
* Automated using https://github.com/myii/ssf-formula/pull/191
2020-05-21 20:09:33 +01:00
Felipe Zipitria
d87da4adc4 feat(maps): adds tls_policy map for smtp delivery
Signed-off-by: Felipe Zipitria <fzipitria@perceptyx.com>
2020-05-12 15:41:02 -03:00
semantic-release-bot
51b269e2c3 chore(release): 0.18.2 [skip ci]
## [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](34a112faab)), 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](ffbe5aad13))

### Continuous Integration

* **gemfile:** restrict `train` gem version until upstream fix [skip ci] ([80cdd9d](80cdd9d202))
* **gemfile.lock:** add to repo with updated `Gemfile` [skip ci] ([497221d](497221d1de))
* **kitchen:** avoid using bootstrap for `master` instances [skip ci] ([708b0a5](708b0a51d9))
* **kitchen:** use `debian-10-master-py3` instead of `develop` [skip ci] ([90098c0](90098c0cdf))
* **kitchen:** use `develop` image until `master` is ready (`amazonlinux`) [skip ci] ([df76c72](df76c72dce))
* **kitchen+travis:** remove `master-py2-arch-base-latest` [skip ci] ([46d0f3d](46d0f3d1d8))
* **kitchen+travis:** upgrade matrix after `2019.2.2` release [skip ci] ([70fc491](70fc49122e))
* **travis:** apply changes from build config validation [skip ci] ([f25db2d](f25db2d5f3))
* **travis:** opt-in to `dpl v2` to complete build config validation [skip ci] ([8f4db70](8f4db70ece))
* **travis:** quote pathspecs used with `git ls-files` [skip ci] ([6d18d1d](6d18d1dc93))
* **travis:** run `shellcheck` during lint job [skip ci] ([29efb81](29efb819fc))
* **travis:** update `salt-lint` config for `v0.0.10` [skip ci] ([b23168e](b23168e69e))
* **travis:** use `major.minor` for `semantic-release` version [skip ci] ([964e3ef](964e3ef0fa))
* **travis:** use build config validation (beta) [skip ci] ([1ab8692](1ab8692f31))
* **workflows/commitlint:** add to repo [skip ci] ([43a7353](43a7353cae))

### Documentation

* **contributing:** remove to use org-level file instead [skip ci] ([a33757a](a33757a6ad))
* **readme:** update link to `CONTRIBUTING` [skip ci] ([50b9808](50b9808a3b))

### Performance Improvements

* **travis:** improve `salt-lint` invocation [skip ci] ([2ece69c](2ece69c3c1))
2020-05-12 13:48:06 +00:00
Imran Iqbal
25441cb23c
Merge pull request #104 from myii/bug/fix-for-salt-ssh
fix: make necessary modifications to get working on `salt-ssh`
2020-05-12 14:45:02 +01:00
Imran Iqbal
34a112faab
fix: make necessary modifications to get working on salt-ssh
* Similar situation to https://github.com/saltstack-formulas/logrotate-formula/pull/53
  - https://freenode.logbot.info/saltstack-formulas/20200507#c3819526-c3819581
  - https://freenode.logbot.info/saltstack-formulas/20200508#c3826763-c3826995
* Send template values by `context`
2020-05-08 09:40:10 +01:00
Imran Iqbal
b64102f884 chore(codeowners): update semantic-release related files [skip ci]
* Automated using https://github.com/myii/ssf-formula/pull/174
2020-05-04 23:17:12 +01:00
Imran Iqbal
04cbc57098 chore(codeowners): add to repo [skip ci]
* Automated using https://github.com/myii/ssf-formula/pull/173
2020-05-04 22:45:44 +01:00
Imran Iqbal
43a7353cae ci(workflows/commitlint): add to repo [skip ci]
* Automated using https://github.com/myii/ssf-formula/pull/172
2020-05-04 09:31:15 +01:00
Imran Iqbal
46d0f3d1d8 ci(kitchen+travis): remove master-py2-arch-base-latest [skip ci]
* Automated using https://github.com/myii/ssf-formula/pull/167
2020-05-02 04:29:34 +01:00
Imran Iqbal
497221d1de ci(gemfile.lock): add to repo with updated Gemfile [skip ci]
* Automated using https://github.com/myii/ssf-formula/pull/163
2020-04-21 22:09:27 +01:00
Imran Iqbal
d254931add chore(rubocop): use org-wide standard settings for Metrics/BlockLength [skip ci]
* Automated using https://github.com/myii/ssf-formula/pull/158
2020-04-18 13:45:40 +01:00
Imran Iqbal
85e8d6e4f9 chore(gitignore): update from the template-formula [skip ci]
* Automated using https://github.com/myii/ssf-formula/pull/132
2020-02-14 22:30:57 +00:00
Imran Iqbal
961842a4e8 chore(rubocop): move LineLength cop from Metrics to Layout [skip ci]
* Automated using https://github.com/myii/ssf-formula/pull/129
2020-02-14 12:52:24 +00:00
Imran Iqbal
708b0a51d9 ci(kitchen): avoid using bootstrap for master instances [skip ci]
* Automated using https://github.com/myii/ssf-formula/pull/124
2020-02-05 14:07:28 +00:00
Imran Iqbal
964e3ef0fa ci(travis): use major.minor for semantic-release version [skip ci]
* Automated using https://github.com/myii/ssf-formula/pull/112
2019-12-22 01:00:51 +00:00
Imran Iqbal
80cdd9d202 ci(gemfile): restrict train gem version until upstream fix [skip ci]
* Automated using https://github.com/myii/ssf-formula/pull/110
2019-12-16 13:43:48 +00:00
Imran Iqbal
6d18d1dc93 ci(travis): quote pathspecs used with git ls-files [skip ci]
* Automated using https://github.com/myii/ssf-formula/pull/107
2019-11-27 22:00:55 +00:00
Imran Iqbal
29efb819fc ci(travis): run shellcheck during lint job [skip ci]
* Automated using https://github.com/myii/ssf-formula/pull/106
2019-11-27 21:02:31 +00:00
Imran Iqbal
8f4db70ece ci(travis): opt-in to dpl v2 to complete build config validation [skip ci]
* Automated using https://github.com/myii/ssf-formula/pull/100
2019-11-20 16:36:07 +00:00
Imran Iqbal
f25db2d5f3 ci(travis): apply changes from build config validation [skip ci]
* Automated using https://github.com/myii/ssf-formula/pull/98
2019-11-16 20:09:27 +00:00
Imran Iqbal
1ab8692f31 ci(travis): use build config validation (beta) [skip ci]
* Automated using https://github.com/myii/ssf-formula/pull/97
2019-11-13 16:51:39 +00:00
Imran Iqbal
df76c72dce ci(kitchen): use develop image until master is ready (amazonlinux) [skip ci]
* Automated using https://github.com/myii/ssf-formula/pull/93
2019-11-03 11:40:03 +00:00
Imran Iqbal
2ece69c3c1 perf(travis): improve salt-lint invocation [skip ci]
* Automated using https://github.com/myii/ssf-formula/pull/90
2019-11-02 08:42:17 +00:00
Imran Iqbal
ffbe5aad13 fix(release.config.js): use full commit hash in commit link [skip ci]
* Automated using https://github.com/myii/ssf-formula/pull/89
2019-10-31 10:34:19 +00:00
Imran Iqbal
70fc49122e ci(kitchen+travis): upgrade matrix after 2019.2.2 release [skip ci]
* Automated using https://github.com/myii/ssf-formula/pull/86
2019-10-30 04:50:49 +00:00
Imran Iqbal
90098c0cdf ci(kitchen): use debian-10-master-py3 instead of develop [skip ci]
* Automated using https://github.com/myii/ssf-formula/pull/84
2019-10-24 18:14:09 +01:00
Imran Iqbal
b23168e69e ci(travis): update salt-lint config for v0.0.10 [skip ci]
* Automated using https://github.com/myii/ssf-formula/pull/82
2019-10-23 17:37:04 +01:00
Imran Iqbal
a33757a6ad docs(contributing): remove to use org-level file instead [skip ci]
* Automated using https://github.com/myii/ssf-formula/pull/70
2019-10-14 12:31:34 +01:00
Imran Iqbal
50b9808a3b
docs(readme): update link to CONTRIBUTING [skip ci] 2019-10-14 11:37:46 +01:00
semantic-release-bot
76168cc3e8 chore(release): 0.18.1 [skip ci]
## [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))
2019-10-11 21:25:43 +00:00
Imran Iqbal
508074a286 ci(travis): merge rubocop linter into main lint job
* Semi-automated using https://github.com/myii/ssf-formula/pull/65
2019-10-11 22:10:00 +01:00
Imran Iqbal
87dd217ec1
fix(rubocop): add fixes using rubocop --safe-auto-correct 2019-10-11 22:01:37 +01:00
Imran Iqbal
90cae491b8 chore(issues): remove issues templates to use org-level templates [skip ci]
* Automated using https://github.com/myii/ssf-formula/pull/61
2019-10-10 15:29:27 +01:00
Imran Iqbal
e707692aa0
Merge pull request #102 from myii/ci/merge-matrix-and-add-salt-lint-and-rubocop
ci: merge travis matrix, add `salt-lint` & `rubocop` to `lint` job
2019-10-09 23:50:58 +01:00
Imran Iqbal
0c0a228120 ci: merge travis matrix, add salt-lint & rubocop to lint job
* Semi-automated using https://github.com/myii/ssf-formula/pull/60
2019-10-09 18:04:01 +01:00
Imran Iqbal
1ec88a45ca ci: merge travis matrix, add salt-lint & rubocop to lint job
* Automated using https://github.com/myii/ssf-formula/pull/60
2019-10-08 16:39:24 +01:00
Imran Iqbal
561d094029 chore(yamllint): update ignored paths and add octal-values [skip ci]
* Automated using https://github.com/myii/ssf-formula/pull/59
2019-10-07 19:36:10 +01:00
Imran Iqbal
a443d7792d chore(issues): update Bug report & Feature request templates [skip ci]
* Automated using https://github.com/myii/ssf-formula/pull/58
2019-10-07 15:30:14 +01:00
Imran Iqbal
5127bee5ca ci(kitchen): install required packages to bootstrapped opensuse [skip ci]
* Automated using https://github.com/myii/ssf-formula/pull/53
2019-10-02 00:10:58 +01:00
Imran Iqbal
79df4cedee ci(kitchen): use bootstrapped opensuse images until 2019.2.2 [skip ci]
* Automated using https://github.com/myii/ssf-formula/pull/52
2019-10-01 21:37:58 +01:00
Imran Iqbal
468c28e922 chore(issues): provide Bug report & Feature request templates [skip ci]
* Automated using https://github.com/myii/ssf-formula/pull/48
2019-09-30 16:03:26 +01:00
Niels Abspoel
5f1c8302bc
Merge pull request #99 from myii/chore/standardise-structure
ci(platform): add `arch-base-latest`
2019-09-25 19:57:40 +02:00
Imran Iqbal
17734cb191 ci(kitchen): change log_level to debug instead of info
* Automated using https://github.com/myii/ssf-formula/pull/41
2019-09-23 17:03:33 +01:00
Imran Iqbal
16e6f589cf ci(platform): add arch-base-latest
* Automated using https://github.com/myii/ssf-formula/pull/40
2019-09-22 22:41:03 +01:00
Éric Veiras Galisson
cae0c84319
Merge pull request #98 from myii/chore/standardise-structure
ci(yamllint): add rule `empty-values` & use new `yaml-files` setting
2019-09-11 08:29:33 +02:00
Imran Iqbal
c9a4fc7654
ci(yamllint): add rule empty-values & use new yaml-files setting
* Semi-automated using https://github.com/myii/ssf-formula/pull/27
* Fix errors shown below:

```bash
postfix-formula$ yamllint -s .
./pillar.example
  92:15     error    empty value in block mapping  (empty-values)
```
2019-09-10 22:37:55 +01:00
Niels Abspoel
28ebbadc88
Merge pull request #97 from myii/chore/standardise-structure
ci: use `dist: bionic` & apply `opensuse-leap-15` SCP error workaround
2019-09-08 21:42:42 +02:00
Imran Iqbal
bbbc2607eb ci: use dist: bionic & apply opensuse-leap-15 SCP error workaround
* Automated using https://github.com/myii/ssf-formula/pull/22
2019-09-07 03:42:21 +01:00
semantic-release-bot
077a6a6494 chore(release): 0.18.0 [skip ci]
# [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))
2019-09-01 11:34:47 +00:00
Niels Abspoel
621504dea4
Merge pull request #96 from myii/chore/standardise-structure
ci(kitchen+travis): replace EOL pre-salted images
2019-09-01 11:42:58 +02:00
Imran Iqbal
8996d287e5 ci(kitchen+travis): replace EOL pre-salted images
* Automated using https://github.com/myii/ssf-formula/pull/16
2019-08-28 07:43:02 +01:00
Niels Abspoel
d3da392f0e
Merge pull request #95 from myii/chore/standardise-structure
feat(yamllint): include for this repo and apply rules throughout
2019-08-15 19:34:18 +02:00
Imran Iqbal
b4fbac2934
feat(yamllint): include for this repo and apply rules throughout
* Semi-automated using `ssf-formula` (v0.5.0)
* Fix (or ignore) errors shown below:

```bash
postfix-formula$ $(grep "\- yamllint" .travis.yml | sed -e "s:^\s\+-\s\(.*\):\1:")
./postfix/osfamilymap.yaml
  1:1       warning  missing document start "---"  (document-start)

./postfix/services.yaml
  11:1      warning  missing document start "---"  (document-start)
  12:1      warning  comment not indented like content  (comments-indentation)
  221:1     warning  comment not indented like content  (comments-indentation)

./postfix/defaults.yaml
  4:1       warning  missing document start "---"  (document-start)

pillar.example
  1:1       warning  missing document start "---"  (document-start)
  2:25      warning  truthy value should be one of [false, true]  (truthy)
  13:17     warning  truthy value should be one of [false, true]  (truthy)
  16:17     warning  truthy value should be one of [false, true]  (truthy)
  22:17     warning  truthy value should be one of [false, true]  (truthy)
  23:17     warning  truthy value should be one of [false, true]  (truthy)
  25:17     warning  truthy value should be one of [false, true]  (truthy)
  29:17     warning  truthy value should be one of [false, true]  (truthy)
  31:17     warning  truthy value should be one of [false, true]  (truthy)
  35:17     warning  truthy value should be one of [false, true]  (truthy)
  47:15     warning  truthy value should be one of [false, true]  (truthy)
  50:18     warning  truthy value should be one of [false, true]  (truthy)
  53:21     warning  truthy value should be one of [false, true]  (truthy)
  62:24     warning  truthy value should be one of [false, true]  (truthy)
  66:31     warning  truthy value should be one of [false, true]  (truthy)
  69:19     warning  truthy value should be one of [false, true]  (truthy)
  70:19     warning  truthy value should be one of [false, true]  (truthy)
  73:14     warning  truthy value should be one of [false, true]  (truthy)
  74:21     warning  truthy value should be one of [false, true]  (truthy)
  78:14     warning  truthy value should be one of [false, true]  (truthy)
  89:15     error    trailing spaces  (trailing-spaces)
  96:6      warning  missing starting space in comment  (comments)
  130:89    error    line too long (105 > 88 characters)  (line-length)
  131:89    error    line too long (101 > 88 characters)  (line-length)
  152:5     error    duplication of key "sender_canonical_maps" in mapping  (key-duplicates)
  154:5     error    duplication of key "virtual_alias_maps" in mapping  (key-duplicates)
  190:5     error    duplication of key "use_file" in mapping  (key-duplicates)
  235:9     error    wrong indentation: expected 10 but found 8  (indentation)
  248:1     error    duplication of key "postfix" in mapping  (key-duplicates)
  258:85    error    trailing spaces  (trailing-spaces)
```
2019-08-15 00:07:07 +01:00
semantic-release-bot
aa0ba507db chore(release): 0.17.1 [skip ci]
## [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))
2019-07-26 20:15:53 +00:00
Niels Abspoel
0f1ad60500
Merge pull request #94 from alxwr/service-restart
fix(service): restart service on package change
2019-07-26 22:06:42 +02:00
Alexander Weidinger
75358e03e0 fix(service): restart service on package change
This also provides an ID to be used in a watch_in statement.
2019-07-25 22:15:57 +02:00
Niels Abspoel
fb182529e4
Merge pull request #93 from myii/ci/standardise-structure
chore: use `semantic-release` cross-formula standard structure
2019-07-23 21:01:02 +02:00
Imran Iqbal
e3cca62de5 chore: use semantic-release cross-formula standard structure
* Automated using `ssf-formula` (v0.1.0-rc.1)
2019-07-19 12:33:50 +01:00
Imran Iqbal
6fa00beff2
Merge pull request #92 from myii/ci/use-develop-image-in-matrix
ci(kitchen+travis): modify matrix to include `develop` platform
2019-06-28 07:41:43 +01:00
Imran Iqbal
b505a5d8c7
ci(kitchen+travis): modify matrix to include develop platform
* Use balanced matrix based on `template-formula` guidelines
* Initial ref: https://github.com/saltstack-formulas/template-formula/issues/118
2019-06-28 07:25:19 +01:00
semantic-release-bot
79768b4083 chore(release): 0.17.0 [skip ci]
# [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))
2019-06-03 08:42:42 +00:00
Imran Iqbal
d89b07cd98
Merge pull request #91 from daks/semantic-release
feat(semantic-release): implement an automated changelog
2019-06-03 09:07:45 +01:00
Eric Veiras Galisson
3161504bc1 feat(semantic-release): implement an automated changelog 2019-06-02 20:38:14 +02:00
alxwr
19f5de8383
Merge pull request #90 from alxwr/fix-89
Fix #89 by ignoring only keys which are actually used in Pillar 'postfix:mapping'
2019-04-27 00:37:18 +02:00
Alexander Weidinger
fbaa2dcabb main.cf: ignore only actually used keys of 'postfix:mapping'; fixes #89 2019-04-24 12:38:55 +02:00
Alexander Weidinger
bb6746c5b7 Explain multiple entries in virtual_alias_maps via pillar.example 2019-04-24 12:38:55 +02:00
Alexander Weidinger
c432ae23dc mapping.j2: fixed handling of OrderedDict in Python 3 2019-04-09 20:06:16 +02:00
Niels Abspoel
84c64267fa
Merge pull request #88 from FHE3/add-additinoal-internal-services
Add additinoal internal services
2019-01-08 21:48:57 +01:00
Dimitrij Hilt
7ea197728b
Update pillar.example 2019-01-08 09:36:01 +01:00
Dimitrij Hilt
dada652f3e Add no_args parameter on defined own services to allow create also
internal services without 'user= argv='.
2019-01-08 09:26:27 +01:00
Dimitrij Hilt
097d149322 typo fixed 2019-01-07 17:47:53 +01:00
Niels Abspoel
1da803467f
Merge pull request #80 from bawuenet/proxy_map_support
Fix table type for proxy tables
2018-10-21 00:34:45 +02:00
Niels Abspoel
8f1126039b
Merge pull request #81 from bawuenet/services_yaml
Improve services definitions
2018-10-21 00:33:15 +02:00
Niels Abspoel
f2a64549ab
Merge pull request #82 from bawuenet/example_pillar
Improve pillar example
2018-10-21 00:32:05 +02:00
Javier Bértoli
5c5c5fab72
Merge pull request #85 from mgomersbach/GH-84-dovecot-deliver-gentoo
Specify dovecot_deliver for Gentoo, solves #84
2018-10-10 09:12:53 -03:00
Mark Gomersbach
ae83e2d2a8
Specify dovecot_deliver for Gentoo, solves #84 2018-10-10 02:56:30 +02:00
Andreas Thienemann
fb69881dde Improve services definitions
The services definitions for master.cf were previously defined in
the services.jinja file.

This commit instead moves them into the services.yaml file, as we
should not require any jinja parsing inside the services definitions.

Drive-By: Add a .gitignore file
Drive-By: Set manage_master_config: True for kitchen. We do want to
          verify that the master.cf file generation is actually working.
Drive-By: Add fedora-latest as a kitchen testing target, this helps
          with verifying the os_family map testing that was added in
          PR #79
Drive-By: Link to the kitchen-salt getting started guide in the README
2018-10-08 12:28:01 +02:00
Andreas Thienemann
6cbc1efc1b Improve pillar example
Add dovecot example using the services dictionary with a note that
LMTP delivery might be better.

Slight improvements about pillar example settings.

Reorder examples, put the services dictionary examples which allow
more control above the previous dovecot and submission examples.
Add a note about backwards compatibility to indicate that these
options are still supported.
2018-10-08 11:35:18 +02:00
Andreas Thienemann
9281c79aec Fix table type for proxy tables
http://www.postfix.org/DATABASE_README.html#types specifies the lookup
table types postfix understands.

Most are defined as type:/path/to/table which is currently supported
by the postfix formula.

This does break though as soon as the proxy table type is used which is
a prefix to a normal table definition to indicate caching is requested.

This PR changes the code to discard the proxy prefix to ensure that the
usual logic applies again.
2018-10-07 13:48:13 +02:00
Niels Abspoel
d2896ea148
Merge pull request #78 from bawuenet/more_services_next_iteration
Further improvements on extra services configured in master.cf
2018-10-05 10:55:02 +02:00
Javier Bértoli
99efe7e0d9
Merge pull request #79 from bawuenet/osfamily_rework
Rework of PR #69 to fix Issue #68
2018-10-04 12:05:47 -03:00
Andreas Thienemann
f5d9a0e95d Rework of PR #69 to fix Issue #68
Issue #68 raised a valid problem: The postfix formula is using
the osmap.yaml file incorrectly. It is being used to filter on
the os grain but should instead be filtering on os_family
to correctly account for Red Hat/CentOS similarities.

PR #69 did the fix in a complex way as it only moved parts of the os
mapping into the os_family mapping.

This is a much simpler fix, as it just renames the file and uses
it as a os_family map, which it actually is.

If we really need to differentiate between os flavors inside the
os_family at a later date, we can then add a lookup on the os grain.
No need to complicate manners now.
2018-10-04 16:53:30 +02:00
Andreas Thienemann
e4b507b0b5 Further improvements on extra services configured in master.cf
As promised in PR #75, here's a further (and hopefully final)
iteration of the master.cf service handling:

- Bring dovecot and policyd-spf configuration in line with the
  extras_services item added in PR #75
- Remove policyd-spf configuration again from services.jinja,
  handle this in master.cf instead, where it was before
- Allow for completely custom services to be added via a pillar
  definition in postfix:master_config:services
- Fix legacy dovecot argv example in pillar.example: The example
  showed the extra_args being defined as part of the argv
  parameter, something that would clash with the actual code and
  result in a duplicate '-d ${recipient}' definition in the config.
2018-10-04 05:02:57 +02:00
Niels Abspoel
ca6b26e3ed
Merge pull request #75 from bawuenet/more_services
More pillar managed services
2018-10-01 22:49:54 +02:00
Javier Bértoli
4fb57c98a8
Merge pull request #77 from bawuenet/main_iteration
Improve handling of multiple values in main.cf
2018-09-29 08:42:20 -03:00
Andreas Thienemann
36f0a70813 Improve handling of multiple values in main.cf
In case a list of items (iterable) is passed to the set_parameter
function in main.cf, the list of items are joined by a comma.

This makes parameters with many items a bit hard to read as it
results in long lines.

Postfix also supports an alternative declaration where subsequent
parameter values are written in a new line that starts with whitespace
and thus forms a continuation of the previous line.
This makes parsing multiple entry lines easier for humans.

Old style:
smtpd_milters = { unix:/run/spamass-milter/postfix/sock, connect_timeout=10s, default_action=accept } { inet:localhost:10003, connect_timeout=10s, default_action=accept } { inet:localhost:10004, connect_timeout=10s, default_action=accept } { inet:localhost:10006, connect_timeout=10s, default_action=accept } { inet:localhost:10007, connect_timeout=10s, default_action=accept }

New style:
smtpd_milters = { unix:/run/spamass-milter/postfix/sock, connect_timeout=10s, default_action=accept }
                { inet:localhost:10003, connect_timeout=10s, default_action=accept }
                { inet:localhost:10004, connect_timeout=10s, default_action=accept }
                { inet:localhost:10006, connect_timeout=10s, default_action=accept }
                { inet:localhost:10007, connect_timeout=10s, default_action=accept }
2018-09-29 03:55:38 +02:00
Javier Bértoli
a4cdd1acd2
Merge pull request #74 from bawuenet/postfix_reload
Reload postfix service by default.
2018-09-27 22:00:35 -03:00
N
4a3a94fb39
Merge pull request #76 from netmanagers/master
Fix testing
2018-09-28 00:16:06 +01:00
Javier Bértoli
768cc62f66 Fix testing 2018-09-27 15:12:42 -03:00
Andreas Thienemann
1b9ac1eb4e More pillar managed services
Most of the services in master.cf were already configurable through
the formula but specific ones such as cyrus or uucp were not managed
yet.

This commit adds functionality to manage these services as well
through pillar variables, e.g.:

postfix:
  master_config:
    services:
      uucp:
	enable: True
2018-09-26 21:52:02 -07:00
Andreas Thienemann
44210a1fe8 Reload postfix service by default.
The postfix service is currently being restarted whenever a
config item changes.
This is unnecessary as the postfix service can reload a new
config.

Set reload: True to prevent unnecessary restarts of the service.
The old behavior can be restored by setting the pillar key
reload_service to False.
2018-09-26 17:33:14 -07:00
Niels Abspoel
3ded29687e
Merge pull request #73 from Perceptyx/master
Force batch in FreeBSD
2018-09-25 20:54:58 +02:00
Javier Bértoli
f8cebbfe8e
Merge pull request #72 from asenci/fix_duplicated_maps
Fix duplicated mapping parameters on main.cf
2018-09-01 09:44:28 -03:00
Andre Sencioles
e40c589cd5 Fix duplicated mapping parameters on main.cf
Fixes the creation of duplicated parameters on main.cf by using the
"set_parameter" macro to append the mapping parameter to the
"processed_parameters" list.
2018-08-29 15:34:31 +12:00
Felipe Zipitria
7ede7609f7 Force batch in FreeBSD 2018-07-24 14:38:10 +01:00
Niels Abspoel
cf42ec7e8c
Merge pull request #71 from Poil/add_inet_protocols
add inet_protocols
2018-07-09 12:19:46 +02:00
Benjamin DUPUIS
fe261fc635 add inet_protocols 2018-07-09 11:32:16 +02:00
Javier Bértoli
b19eb93f9c
Merge pull request #70 from saltstack-formulas/bugfixes
master.cf: submission: CSV must not use blank
2018-04-04 07:33:21 -03:00
Alexander Weidinger
0c489c03df master.cf: submission: CSV must not use blank
Would produce: "fatal: unexpected command-line argument: nameofsetting,"
2018-04-04 11:34:34 +02:00
Niels Abspoel
84605b0237
Merge pull request #66 from netmanagers/master
Basic testing framework
2018-04-01 21:54:26 +02:00
Javier Bértoli
1087f3b85e Basic testing framework 2018-03-18 16:49:49 -03:00
Niels Abspoel
62abea758a
Merge pull request #67 from netmanagers/fix_bin_prefix
Fix xbin_prefix parameter, add managed by Salt headers
2018-03-18 20:11:38 +01:00
Javier Bértoli
47ffa7d173 Fix xbin_prefix parameter, add managed by Salt headers 2018-03-18 14:08:45 -03:00
Niels Abspoel
9399043497
Merge pull request #65 from bawuenet/configurable_services
Allow for full managed master.cf services
2018-03-18 17:16:15 +01:00
Andreas Thienemann
b6b7ab4cca Allow for full managed master.cf services
Currently master.cf only allows for _very_ limited configuration
options mainly focussed on SMTP submission settings.

This is rather limited and does not scale very well for managing
the other services defined in master.cf.

This patch has moved all the service definitions into a jinja file
and generates the master.cf service definition on the fly based on
these defaults.

Defaults can be overridden in a pillar to customize the rendered
master.cf file accordingly to local needs.
Undefined values will be filled with the postfix defaults.

Care has been taken that the previous ways of managing the submission
configuration options are still supported for backwards compatibility
to prevent breakage for existing users of the formula.
2018-03-11 19:22:12 +01:00
N
e9ef0aa547
Merge pull request #56 from vquiering/add_mysql_query_to_virtual
Add a mysql query to 'virtual' files
2018-03-08 09:43:26 +00:00
N
5579ebcef6
Merge branch 'master' into add_mysql_query_to_virtual 2018-03-08 09:40:09 +00:00
Javier Bértoli
b40258211e
Merge pull request #64 from aboe76/python3_support
replace iteritems with items
2018-03-07 19:38:59 -03:00
Niels Abspoel
f30071afd2 replace iteritems with items 2018-03-07 21:17:57 +01:00
Niels Abspoel
16f73256b2
Merge pull request #63 from saltstack-formulas/configurable-master-config
Configurable master_config.cf
2017-12-30 22:46:19 +01:00
Alexander Weidinger
f4a10a2843 re-enable Pillar postfix:aliases:content 2017-12-28 21:42:23 +01:00
Alexander Weidinger
014c5227bc Let the user handle mappings manually 2017-12-08 14:53:58 +01:00
Alexander Weidinger
caee184158 master.cf: added dovecot 2017-12-08 14:04:35 +01:00
Alexander Weidinger
4c7c2a269d master.cf: made submission configurable 2017-12-08 13:20:01 +01:00
Alexander Weidinger
ae878da8fa Use defaults.yaml and osmap.yaml 2017-12-08 12:12:56 +01:00
Florian Ermisch
9ed99927c2 explain what the colon in mapping.j2 is for 2017-08-25 14:54:20 +02:00
Florian Ermisch
f514881e5a explain the difference between alias_maps and alias_database 2017-08-24 13:35:24 +02:00
Florian Ermisch
c60c3bab6f adjust processed_parameters to match pillar.example 2017-08-24 13:25:38 +02:00
Florian Ermisch
8eed254773 one for-loop for all of the mappings 2017-08-24 13:10:54 +02:00
Florian Ermisch
136e02a61c check for absolute file_paths for maps 2017-08-24 13:03:22 +02:00
Florian Ermisch
d51f60647a add optional context variable "colon" to mapping.j2 for aliases file 2017-08-24 13:03:10 +02:00
Florian Ermisch
099d84ab73 Template paths and groups to make them work on FreeBSD, too. 2017-08-24 13:02:46 +02:00
Florian Ermisch
af5e9f8862 Add FreeBSD to map.jinja; root_grp, xbin_prefix to defaults.yaml
Accidentally already added config_path in the last commit, not
redoing it again.
2017-08-24 11:27:43 +02:00
Florian Ermisch
f30c63f9ed Import map.jinja+defaults.yaml structure from salt-formula
Now using the `deep_merge()` macro so we can move the
values which are identical on most distributions from
`map.jinja` to `defaults.yaml`.
2017-08-24 11:21:48 +02:00
Vitali Quiering
f8514b3629 Add a mysql query to virtual_mailbox_domains, virtual_alias_maps virtual_mailbox_maps if mysql is declared in main.cf within these options 2017-04-12 17:06:16 +02:00
60 changed files with 4436 additions and 353 deletions

16
.github/workflows/commitlint.yml vendored Normal file
View File

@ -0,0 +1,16 @@
# -*- 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 Normal file
View File

@ -0,0 +1,134 @@
# 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 Normal file
View File

@ -0,0 +1,212 @@
# -*- 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'

77
.pre-commit-config.yaml Normal file
View File

@ -0,0 +1,77 @@
# -*- 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]

4
.rstcheck.cfg Normal file
View File

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

23
.rubocop.yml Normal file
View File

@ -0,0 +1,23 @@
# -*- 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 Normal file
View File

@ -0,0 +1,17 @@
# -*- 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 Normal file
View File

@ -0,0 +1,186 @@
# -*- 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 Normal file
View File

@ -0,0 +1,47 @@
# -*- 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 Normal file
View File

@ -0,0 +1,48 @@
# 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 Normal file
View File

@ -0,0 +1,253 @@
# 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 Normal file
View File

@ -0,0 +1,50 @@
# 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 Normal file
View File

@ -0,0 +1,9 @@
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 Normal file
View File

@ -0,0 +1,19 @@
# 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 Normal file
View File

@ -0,0 +1,675 @@
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

View File

@ -1,52 +0,0 @@
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

16
bin/install-hooks Executable file
View File

@ -0,0 +1,16 @@
#!/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 Executable file
View File

@ -0,0 +1,32 @@
#!/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')

8
commitlint.config.js Normal file
View File

@ -0,0 +1,8 @@
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 Normal file
View File

@ -0,0 +1,134 @@
.. 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.

306
docs/CHANGELOG.rst Normal file
View File

@ -0,0 +1,306 @@
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 Normal file
View File

@ -0,0 +1,128 @@
.. _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 Normal file
View File

@ -0,0 +1,287 @@
# -*- 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

View File

@ -1,17 +1,84 @@
# -*- coding: utf-8 -*-
# vim: ft=yaml
---
postfix:
manage_master_config: True
manage_master_config: true
master_config:
enable_submission: False
# 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_service: True
# 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
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:
@ -22,13 +89,14 @@ 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
@ -36,6 +104,9 @@ postfix:
# 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
# Virtual users
@ -51,6 +122,7 @@ 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
@ -59,8 +131,14 @@ 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'
@ -79,21 +157,34 @@ 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
@ -137,6 +228,13 @@ 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
@ -149,6 +247,27 @@ 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'

View File

@ -0,0 +1,13 @@
# yamllint disable rule:indentation rule:line-length
# {{ grains.get("osfinger", grains.os) }}
---
{#- use salt.slsutil.serialize to avoid encoding errors on some platforms #}
{{ salt["slsutil.serialize"](
"yaml",
map,
default_flow_style=False,
allow_unicode=True,
)
| regex_replace("^\s+'$", "'", multiline=True)
| trim
}}

22
postfix/_mapdata/init.sls Normal file
View File

@ -0,0 +1,22 @@
# -*- coding: utf-8 -*-
# vim: ft=sls
---
{#- Get the `tplroot` from `tpldir` #}
{%- set tplroot = tpldir.split("/")[0] %}
{%- from tplroot ~ "/map.jinja" import 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 }}

View File

@ -1,3 +0,0 @@
# Managed by config management
# See man 5 aliases for format
{{pillar['postfix']['aliases']['content']}}

View File

@ -1,117 +1,156 @@
{% from "postfix/map.jinja" import postfix with context %}
include:
- postfix
/etc/postfix:
postfix-config-file-directory-config-path:
file.directory:
- name: {{ postfix.config_path }}
- user: root
- group: root
- dir_mode: 755
- file_mode: 644
- group: {{ postfix.root_grp }}
- dir_mode: '0755'
- file_mode: '0644'
- makedirs: True
/etc/postfix/main.cf:
postfix-config-file-managed-main.cf:
file.managed:
- name: {{ postfix.config_path }}/main.cf
- source: salt://postfix/files/main.cf
- user: root
- group: root
- mode: 644
- group: {{ postfix.root_grp }}
- mode: '0644'
- require:
- pkg: postfix
- pkg: postfix-init-pkg-installed-postfix
- watch_in:
- service: postfix
- service: postfix-init-service-running-postfix
- template: jinja
- context:
postfix: {{ postfix|tojson }}
{% if 'vmail' in pillar.get('postfix', '') %}
/etc/postfix/virtual_alias_maps.cf:
postfix-config-file-managed-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: 640
- mode: '0640'
- require:
- pkg: postfix
- pkg: postfix-init-pkg-installed-postfix
- watch_in:
- service: postfix
- service: postfix-init-service-running-postfix
- template: jinja
/etc/postfix/virtual_mailbox_domains.cf:
postfix-config-file-managed-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: 640
- mode: '0640'
- require:
- pkg: postfix
- pkg: postfix-init-pkg-installed-postfix
- watch_in:
- service: postfix
- service: postfix-init-service-running-postfix
- template: jinja
/etc/postfix/virtual_mailbox_maps.cf:
postfix-config-file-managed-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: 640
- mode: '0640'
- require:
- pkg: postfix
- pkg: postfix-init-pkg-installed-postfix
- watch_in:
- service: postfix
- service: postfix-init-service-running-postfix
- template: jinja
{% endif %}
{% if salt['pillar.get']('postfix:manage_master_config', True) %}
/etc/postfix/master.cf:
{% import_yaml "postfix/services.yaml" as postfix_master_services %}
postfix-config-file-managed-master.cf:
file.managed:
- name: {{ postfix.config_path }}/master.cf
- source: salt://postfix/files/master.cf
- user: root
- group: root
- mode: 644
- group: {{ postfix.root_grp }}
- mode: '0644'
- require:
- pkg: postfix
- pkg: postfix-init-pkg-installed-postfix
- watch_in:
- service: postfix
- service: postfix-init-service-running-postfix
- template: jinja
{% endif %}
{% if 'transport' in pillar.get('postfix', '') %}
/etc/postfix/transport:
file.managed:
- source: salt://postfix/files/transport
- user: root
- group: root
- mode: 644
- require:
- pkg: postfix
- watch_in:
- service: postfix
- template: jinja
run-postmap:
cmd.wait:
- name: /usr/sbin/postmap /etc/postfix/transport
- cwd: /
- watch:
- file: /etc/postfix/transport
- context:
postfix: {{ postfix|tojson }}
postfix_master_services: {{ postfix_master_services|tojson }}
{% endif %}
{%- for domain in salt['pillar.get']('postfix:certificates', {}).keys() %}
postfix_{{ domain }}_ssl_certificate:
postfix-config-file-managed-{{ domain }}-ssl-certificate:
file.managed:
- name: /etc/postfix/ssl/{{ domain }}.crt
- name: {{ postfix.config_path }}/ssl/{{ domain }}.crt
- makedirs: True
- contents_pillar: postfix:certificates:{{ domain }}:public_cert
- watch_in:
- service: postfix
- service: postfix-init-service-running-postfix
postfix_{{ domain }}_ssl_key:
postfix-config-file-managed-{{ domain }}-ssl-key:
file.managed:
- name: /etc/postfix/ssl/{{ domain }}.key
- mode: 600
- name: {{ postfix.config_path }}/ssl/{{ domain }}.key
- mode: '0600'
- makedirs: True
- contents_pillar: postfix:certificates:{{ domain }}:private_key
- watch_in:
- service: postfix
- service: postfix-init-service-running-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 %}

16
postfix/defaults.yaml Normal file
View File

@ -0,0 +1,16 @@
# -*- coding: utf-8 -*-
# vim: ft=yaml
---
postfix:
aliases_file: /etc/aliases
config_path: /etc/postfix
package: 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

View File

@ -1,18 +1,24 @@
{%- from "postfix/map.jinja" import postfix with context -%}
{%- set config = salt['pillar.get']('postfix:config', {}) -%}
{% set processed_parameters = ['aliases_file', 'virtual', 'sasl_passwd', 'sender_canonical'] %}
{#- " | 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 %}
{%- 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(', ')}}
{{ parameter }} = {{ value | join('\n') | indent(parameter | length + 3) }}
{%- endif -%}
{%- do processed_parameters.append(parameter) %}
{%- endif %}
{%- endmacro -%}
# Managed by config management
#
# This file is managed by salt.
# Modify the salt pillar in the postfix formula that generates this file instead.
#
# See /usr/share/postfix/main.cf.dist for a commented, more complete version
@ -25,6 +31,13 @@
{{ 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') }}
@ -33,6 +46,11 @@
{{ 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'] %}
@ -69,6 +87,7 @@
{%- endif %}
{{ set_parameter('myhostname', grains['fqdn']) }}
{#- TODO: The following two may not be the same: #}
{{ set_parameter('alias_maps', 'hash:' ~ postfix.aliases_file) }}
{{ set_parameter('alias_database', 'hash:' ~ postfix.aliases_file) }}
{{ set_parameter('mydestination', [grains['fqdn'], 'localhost', 'localhost.localdomain', grains['domain']]) }}
@ -77,6 +96,7 @@
{{ 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') %}
@ -97,17 +117,23 @@ policy-spf_time_limit = {{ policyd_spf.get('time_limit', '3600s') }}
{%- endif %}
{{ set_parameter('smtpd_recipient_restrictions', recipient_restrictions) }}
{% if 'virtual' in pillar.get('postfix','') %}
virtual_alias_maps = hash:/etc/postfix/virtual
{% endif %}
{# From init.sls #}
{%- 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 %}
{%- 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 'sasl_passwd' in pillar.get('postfix','') %}
smtp_sasl_password_maps = hash:/etc/postfix/sasl_passwd
{% endif %}
{% if 'sender_canonical' in pillar.get('postfix','') %}
sender_canonical_maps = hash:/etc/postfix/sender_canonical
{% endif %}
{{ set_parameter(mapping, file_type ~ ':' ~ file_path) }}
{% endfor %}
{# Accept arbitrary parameters -#}
{% for parameter in config -%}

View File

@ -1,21 +1,27 @@
# Managed by config management
{#- Some files (mainly the aliases one) require key and values
to be separated with a colon. For this `colon: True` should
be passed to the template #}
{%- if colon is not defined %}
{%- set colon = False %}
{%- endif %}
{%- macro format_value(key, value) %}
{#- Some settings, like virtual_alias_maps can take multiple values. Handle this case. -#}
{%- if value is iterable and value is not string -%}
{{ key }} {{ value|join(", ") }}
{{ key }}{% if colon %}:{% endif %} {{ value|join(", ") }}
{%- else -%}
{{ key }} {{ value }}
{{ key }}{% if colon %}:{% endif %} {{ value }}
{%- endif -%}
{%- endmacro %}
{%- if data is mapping %}
{% for key, value in data.iteritems() %}
{% for key, value in data.items() %}
{{ format_value(key, value) }}
{%- endfor -%}
{%- else %}
{#- Some settings need order, handle OrderedDict #}
{% for item in data %}
{{ format_value(item.keys()[0], item.values()[0]) }}
{%- set key, value = item.popitem() %}
{{ format_value(key, value) }}
{%- endfor -%}
{%- endif %}

View File

@ -1,4 +1,66 @@
{% set master_config = salt['pillar.get']('postfix:master_config', {}) -%}
{%- 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.
#
# Postfix master process configuration file. For details on the format
# of the file, see the master(5) manual page (command: "man 5 master" or
@ -10,62 +72,109 @@
# service type private unpriv chroot wakeup maxproc command + args
# (yes) (yes) (no) (never) (100)
# ==========================================================================
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
{%- 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 %}
#
{%- 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.
@ -78,8 +187,7 @@ scache unix - - n - 1 scache
# maildrop. See the Postfix MAILDROP_README file for details.
# Also specify in main.cf: maildrop_destination_recipient_limit=1
#
#maildrop unix - n n - - pipe
# flags=DRhu user=vmail argv=/usr/local/bin/maildrop -d ${recipient}
{{ extra_service('maildrop') }}
#
# ====================================================================
#
@ -97,41 +205,42 @@ scache unix - - n - 1 scache
# Cyrus 2.1.5 (Amos Gouaux)
# Also specify in main.cf: cyrus_destination_recipient_limit=1
#
#cyrus unix - n n - - pipe
# user=cyrus argv=/cyrus/bin/deliver -e -r ${sender} -m ${extension} ${user}
{{ extra_service('cyrus') }}
#
# ====================================================================
#
# Old example of delivery via Cyrus.
#
#old-cyrus unix - n n - - pipe
# flags=R user=cyrus argv=/cyrus/bin/deliver -e -m ${extension} ${user}
{{ extra_service('old-cyrus') }}
#
# ====================================================================
#
# See the Postfix UUCP_README file for configuration details.
#
#uucp unix - n n - - pipe
# flags=Fqhu user=uucp argv=uux -r -n -z -a$sender - $nexthop!rmail ($recipient)
{{ extra_service('uucp') }}
#
# ====================================================================
#
# Other external delivery methods.
#
#ifmail unix - n n - - pipe
# flags=F user=ftn argv=/usr/lib/ifmail/ifmail -r $nexthop ($recipient)
{{ extra_service('ifmail') }}
#
#bsmtp unix - n n - - pipe
# flags=Fq. user=bsmtp argv=/usr/local/sbin/bsmtp -f $sender $nexthop $recipient
{{ extra_service('bsmtp') }}
#
#scalemail-backend unix - n n - 2 pipe
# flags=R user=scalemail argv=/usr/lib/scalemail/bin/scalemail-store
# ${nexthop} ${user} ${extension}
{{ extra_service('scalemail-backend', 79) }}
#
#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=/usr/bin/policyd-spf
{%- endif %}
{{ 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 %}

View File

@ -1,17 +0,0 @@
#
# 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 -%}

View File

@ -1,3 +1,10 @@
{%- 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) -%}
@ -14,4 +21,4 @@
{{ set_parameter('table', 'alias') }}
{{ set_parameter('select_field', 'goto') }}
{{ set_parameter('where_field', 'address') }}
{%- endif %}

View File

@ -1,3 +1,10 @@
{%- 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) -%}
@ -14,4 +21,4 @@
{{ set_parameter('table', 'domain') }}
{{ set_parameter('select_field', 'domain') }}
{{ set_parameter('where_field', 'domain') }}
{%- endif %}

View File

@ -1,3 +1,10 @@
{%- 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) -%}
@ -14,4 +21,4 @@
{{ set_parameter('table', 'mailbox') }}
{{ set_parameter('select_field', 'maildir') }}
{{ set_parameter('where_field', 'username') }}
{%- endif %}

View File

@ -1,19 +1,48 @@
{% from "postfix/map.jinja" import postfix with context %}
postfix:
{%- 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:
pkg.installed:
- name: {{ postfix.package }}
{%- if grains.os_family == "FreeBSD" %}
- force: True
- batch: True
{%- endif %}
- watch_in:
- service: postfix
service.running:
- enable: {{ salt['pillar.get']('postfix:enable_service', True) }}
- require:
- pkg: postfix
- watch:
- pkg: postfix
- service: postfix-init-service-running-postfix
{# Used for newaliases, postalias and postconf #}
{%- set default_database_type = salt['pillar.get']('postfix:config:default_database_type', 'hash') %}
postfix-init-service-running-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
- watch:
- pkg: postfix-init-pkg-installed-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 %}
# manage /etc/aliases if data found in pillar
{% if 'aliases' in pillar.get('postfix', '') %}
@ -23,78 +52,48 @@ postfix:
{%- if ':' in file_path %}
{%- set file_type, file_path = postfix.aliases_file.split(':') %}
{%- else %}
{%- set file_type = default_database_type %}
{%- set file_type = postfix.default_database_type %}
{%- endif %}
{%- if file_type in ("btree", "cdb", "dbm", "hash", "sdbm") %}
{%- set need_newaliases = True %}
{%- endif %}
postfix_alias_database:
postfix-init-file-managed-alias-database:
file.managed:
- name: {{ file_path }}
- source: salt://postfix/aliases
{% 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: root
- mode: 644
- group: {{ postfix.root_grp }}
- mode: '0644'
- template: jinja
- context:
data: {{ salt['pillar.get']('postfix:aliases:present') }}
colon: True
- require:
- pkg: postfix
- pkg: postfix-init-pkg-installed-postfix
{%- if need_newaliases %}
cmd.wait:
postfix-init-cmd-run-new-aliases:
cmd.run:
- name: newaliases
- cwd: /
- watch:
- onchanges:
- file: {{ file_path }}
{%- endif %}
{% else %}
{%- for user, target in salt['pillar.get']('postfix:aliases:present', {}).items() %}
postfix_alias_present_{{ user }}:
postfix-init-alias-present-{{ user }}:
alias.present:
- name: {{ user }}
- target: {{ target }}
{%- endfor %}
{%- for user in salt['pillar.get']('postfix:aliases:absent', {}) %}
postfix_alias_absent_{{ user }}:
postfix-init-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 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: root
{%- 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: /usr/sbin/postmap {{ file_path }}
- cwd: /
- watch:
- file: {{ file_path }}
- watch_in:
- service: postfix
{%- endif %}
{% endfor %}

View File

@ -1,9 +1,10 @@
smtp.input:
postfix-iptables-iptables-chain-present-smtp-input:
iptables.chain_present:
-
- name: smtp.input
smtp.iptables.tcp:
postfix-iptables-iptables-insert-smtp-iptables-tcp:
iptables.insert:
- name: smtp.iptables.tcp
- table: filter
- position: 1
- chain: smtp.input
@ -14,11 +15,11 @@ smtp.iptables.tcp:
- proto: tcp
- save: True
smtp.iptables.filter:
postfix-iptables-iptables-insert-smtp-iptables-filter:
iptables.insert:
- name: smtp.iptables.filter
- table: filter
- position: 1
- chain: INPUT
- jump: smtp.input
- save: True

View File

@ -1,36 +1,14 @@
{% set postfix = salt['grains.filter_by']({
'Debian': {
'package': 'postfix',
'policyd_spf_pkg': 'postfix-policyd-spf-python',
'postsrsd_pkg': 'postsrsd',
'postgrey_pkg': 'postgrey',
'pcre_pkg': 'postfix-pcre',
'mysql_pkg': 'postfix-mysql',
'service': 'postfix',
'aliases_file': '/etc/aliases',
},
'Gentoo': {
'package': 'mail-mta/postfix',
'policyd_spf_pkg': 'mail-filter/pypolicyd-spf',
'postsrsd_pkg': 'mail-filter/postsrsd',
'postgrey_pkg': 'mail-filter/postgrey',
'service': 'postfix',
'aliases_file': '/etc/mail/aliases',
},
'RedHat': {
'package': 'postfix',
'policyd_spf_pkg': 'pypolicyd-spf',
'postsrsd_pkg': 'postsrsd',
'postgrey_pkg': 'postgrey',
'service': 'postfix',
'aliases_file': '/etc/aliases',
},
'Arch' : {
'package': 'postfix',
'policyd_spf_pkg': 'python-postfix-policyd-spf',
'postsrsd_pkg': 'postsrsd',
'postgrey_pkg': 'postgrey',
'service': 'postfix',
'aliases_file': '/etc/aliases',
},
}, merge=salt['pillar.get']('postfix:lookup')) %}
# -*- coding: utf-8 -*-
# vim: ft=jinja
{% import_yaml "postfix/defaults.yaml" as defaults %}
{% import_yaml "postfix/osfamilymap.yaml" as os_familymap %}
{% set postfix = salt['grains.filter_by'](
defaults,
merge=salt['grains.filter_by'](
os_familymap,
merge=salt['pillar.get']('postfix:lookup', {}),
),
base='postfix')
%}

View File

@ -1,7 +1,7 @@
{% from "postfix/map.jinja" import postfix with context %}
mysql:
postfix-mysql-pkg-installed-mysql:
pkg.installed:
- name: {{ postfix.mysql_pkg }}
- watch_in:
- service: postfix
- service: postfix-init-service-running-postfix

36
postfix/osfamilymap.yaml Normal file
View File

@ -0,0 +1,36 @@
# -*- 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
aliases_file: /etc/mail/aliases
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
policyd_spf_pkg: mail-filter/pypolicyd-spf
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

View File

@ -1,7 +1,7 @@
{% from "postfix/map.jinja" import postfix with context %}
pcre:
postfix-pcre-pkg-installed-pcre:
pkg.installed:
- name: {{ postfix.pcre_pkg }}
- watch_in:
- service: postfix
- service: postfix-init-service-running-postfix

View File

@ -1,5 +1,5 @@
{% from "postfix/map.jinja" import postfix with context %}
policyd_spf:
postfix-policyd-spf-pkg-installed-policyd_spf:
pkg.installed:
- name: {{ postfix.policyd_spf_pkg }}

View File

@ -1,15 +1,15 @@
{% from "postfix/map.jinja" import postfix with context %}
postgrey:
postfix-postgrey-pkg-installed-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: postgrey
- pkg: postfix-postgrey-pkg-installed-postgrey
- watch:
- pkg: postgrey
- pkg: postfix-postgrey-pkg-installed-postgrey

View File

@ -1,6 +1,6 @@
{% from "postfix/map.jinja" import postfix with context %}
postsrsd:
postfix-postsrsd-pkg-latest-postsrsd:
pkg.latest:
- name: {{ postfix.postsrsd_pkg }}

347
postfix/services.yaml Normal file
View File

@ -0,0 +1,347 @@
# -*- 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

30
pre-commit_semantic-release.sh Executable file
View File

@ -0,0 +1,30 @@
#!/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 ..

18
release-rules.js Normal file
View File

@ -0,0 +1,18 @@
// 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'},
];

107
release.config.js Normal file
View File

@ -0,0 +1,107 @@
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
},
},
},
};

View File

@ -0,0 +1,50 @@
# 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).

View File

@ -0,0 +1,9 @@
# frozen_string_literal: true
control 'Postfix packages' do
title 'should be installed'
describe package('postfix') do
it { should be_installed }
end
end

View File

@ -0,0 +1,20 @@
# 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

View File

@ -0,0 +1,25 @@
# 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

View File

@ -0,0 +1,73 @@
# 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

View File

@ -0,0 +1,14 @@
# 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

View File

@ -0,0 +1,28 @@
# -*- 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

View File

@ -0,0 +1,22 @@
# InSpec Profile: `share`
This shows the implementation of the `share` InSpec [profile](https://github.com/inspec/inspec/blob/master/docs/profiles.md).
Its goal is to share the libraries between all profiles.
## Libraries
### `system`
The `system` library provides easy access to system dependent information:
- `system.platform`: based on `inspec.platform`, modify to values that are more consistent from a SaltStack perspective
- `system.platform[:family]` provide a family name for Arch and Gentoo
- `system.platform[:name]` append `linux` to both `amazon` and `oracle`; ensure Windows platforms are resolved as simply `windows`
- `system.platform[:release]` tweak Arch, Amazon Linux, Gentoo, openSUSE and Windows:
- `Arch` is always `base-latest`
- `Amazon Linux` release `2018` is resolved as `1`
- `Gentoo` release is trimmed to its major version number and then the init system is appended (i.e. `sysv` or `sysd`)
- `openSUSE` is resolved as `tumbleweed` if the `platform[:release]` is in date format
- `Windows` uses the widely-used release number (e.g. `8.1` or `2019-server`) in place of the actual system release version
- `system.platform[:finger]` is the concatenation of the name and the major release number (except for Ubuntu, which gives `ubuntu-20.04` for example)

View File

@ -0,0 +1,25 @@
# -*- 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

View File

@ -0,0 +1,138 @@
# 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

View File

@ -0,0 +1,183 @@
# -*- 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