Explorar o código

Testing - Switch to Molecule w/ Inspec for integration testing! (#159)

* Initial configuration to switch to Molecule
* Update various bugs that Molecule is catching 
* Cleanup lots of code 
* Drink lots of coffee 
* Finalize Molecule configuration as a v1
Jared %!s(int64=7) %!d(string=hai) anos
pai
achega
8651fb2756
Modificáronse 45 ficheiros con 1641 adicións e 279 borrados
  1. 1 1
      .gitignore
  2. 18 15
      .travis.yml
  3. 13 0
      .yamllint
  4. 6 0
      CHANGELOG.md
  5. 13 0
      Pipfile
  6. 607 0
      Pipfile.lock
  7. 8 4
      README.md
  8. 28 9
      docs/testing.md
  9. 25 8
      handlers/main.yml
  10. 11 5
      meta/main.yml
  11. 14 0
      molecule/amazonlinux/Dockerfile.j2
  12. 59 0
      molecule/amazonlinux/molecule.yml
  13. 14 0
      molecule/centos/Dockerfile.j2
  14. 59 0
      molecule/centos/molecule.yml
  15. 14 0
      molecule/debian/Dockerfile.j2
  16. 60 0
      molecule/debian/molecule.yml
  17. 14 0
      molecule/default/Dockerfile.j2
  18. 16 0
      molecule/default/INSTALL.rst
  19. 81 0
      molecule/default/create.yml
  20. 32 0
      molecule/default/destroy.yml
  21. 131 0
      molecule/default/molecule.yml
  22. 17 0
      molecule/default/playbook.yml
  23. 5 0
      molecule/default/prepare.yml
  24. 45 0
      molecule/default/tests/test_default.rb
  25. 81 0
      molecule/default/verify.yml
  26. 14 0
      molecule/fedora/Dockerfile.j2
  27. 71 0
      molecule/fedora/molecule.yml
  28. 14 0
      molecule/ubuntu/Dockerfile.j2
  29. 70 0
      molecule/ubuntu/molecule.yml
  30. 49 2
      tasks/Amazon/rabbit.yml
  31. 1 1
      tasks/Amazon/redis.yml
  32. 28 3
      tasks/CentOS/rabbit.yml
  33. 2 2
      tasks/Ubuntu/rabbit.yml
  34. 11 0
      tasks/Ubuntu/redis.yml
  35. 5 1
      tasks/redis.yml
  36. 0 3
      tests/.gitignore
  37. 0 4
      tests/Vagrantfile
  38. 0 13
      tests/provision.yml
  39. 0 21
      tests/test.yml
  40. 0 45
      tests/vms/Vagrantfile.centos7
  41. 0 45
      tests/vms/Vagrantfile.debian8
  42. 0 52
      tests/vms/Vagrantfile.freebsd10
  43. 0 45
      tests/vms/Vagrantfile.ubuntu15
  44. 1 0
      vars/Amazon.yml
  45. 3 0
      vars/Ubuntu.yml

+ 1 - 1
.gitignore

@@ -1,2 +1,2 @@
 site
-tests/.vagrant
+molecule/default/data/

+ 18 - 15
.travis.yml

@@ -1,21 +1,24 @@
 ---
-group: travis_lts
-services: docker
+group: trusty
+language: python
+python: "2.7"
 env:
-  - distro: centos7
-  - distro: ubuntu1404
-  - distro: ubuntu1604
-  - distro: debian8
-  - distro: debian9
-  - distro: fedora27
-before_install:
-  - 'docker pull geerlingguy/docker-${distro}-ansible:latest'
+  - SCENARIO=debian
+  - SCENARIO=ubuntu
+  - SCENARIO=centos
+  - SCENARIO=fedora
+  - SCENARIO=amazonlinux
+services: docker
+addons:
+  apt:
+    packages:
+      - docker-ce
+install:
+  - pip install pipenv
+  - pipenv install --two --dev
+  - gem install rubocop
 script:
-  - export container_id=$(date +%s)
-  - export cleanup=false
-  - wget -O ${PWD}/tests/test.sh https://gist.githubusercontent.com/geerlingguy/73ef1e5ee45d8694570f334be385e181/raw/
-  - chmod +x ${PWD}/tests/test.sh
-  - ${PWD}/tests/test.sh
+  - pipenv run molecule test --scenario-name $SCENARIO --driver-name docker --destroy always
 
 notifications:
   webhooks: https://galaxy.ansible.com/api/v1/notifications/

+ 13 - 0
.yamllint

@@ -0,0 +1,13 @@
+extends: default
+
+rules:
+  braces:
+    max-spaces-inside: 1
+    level: error
+  brackets:
+    max-spaces-inside: 1
+    level: error
+  line-length: disable
+  # NOTE(retr0h): Templates no longer fail this lint rule.
+  #               Uncomment if running old Molecule templates.
+  # truthy: disable

+ 6 - 0
CHANGELOG.md

@@ -10,6 +10,12 @@ The format is based on [Keep a Changelog](http://keepachangelog.com/).
 - Deprecated `sensu_pkg_version` for Redhat, Fedora, CentOS, and FreeBSD. To pin going forward across all operating systems, simply append the Sensu version to `sensu_package`. For example, `sensu_package: sensu-1.3.3` will ensure that only Sensu 1.3.3 is ever installed. (@jaredledvina)
 - Ensure that on first install we install the latest stable Sensu release (@jaredledvina)
 - Document `sensu_pkg_state`. If you'd like to ensure the latest stable release is always installed, simply leave `sensu_package` to the default `sensu` and change `sensu_pkg_state` to `latest`. (@jaredledvina)
+- Switched entirely to [molecule](https://github.com/metacloud/molecule) for integration testing (@jaredledvina)
+- Configure [Inspec](https://www.inspec.io/) for full automated verification after integration testing (@jaredledvina)
+- Amazon Linux now installs proper version of EPEL (@jaredledvina)
+- Amazon Linux now installs a supported version of Erlang and RabbitMQ from Bintray (@jaredledvina)
+- Fixup the CentOS RabbitMQ install w/ full GPG signing verification (@jaredledvina)
+- Various syntax cleanups and testing documentation updates (@jaredledvina)
 
 ## [2.4.0] - 2018-05-06
 ### Fixed:

+ 13 - 0
Pipfile

@@ -0,0 +1,13 @@
+[[source]]
+url = "https://pypi.python.org/simple"
+verify_ssl = true
+name = "pypi"
+
+[packages]
+
+[dev-packages]
+docker-py = "*"
+molecule = "==2.13.1"
+
+[requires]
+python_version = "2.7"

+ 607 - 0
Pipfile.lock

@@ -0,0 +1,607 @@
+{
+    "_meta": {
+        "hash": {
+            "sha256": "19bbd72a6002aafbbc551f7707a844dbd638d65a2b5da29985498d7d40da294e"
+        },
+        "pipfile-spec": 6,
+        "requires": {
+            "python_version": "2.7"
+        },
+        "sources": [
+            {
+                "name": "pypi",
+                "url": "https://pypi.python.org/simple",
+                "verify_ssl": true
+            }
+        ]
+    },
+    "default": {},
+    "develop": {
+        "ansible": {
+            "hashes": [
+                "sha256:a95483f3b33e0f97d03badaad073392ed03a2b2f526bec4ddf598edfc1c03ae5"
+            ],
+            "version": "==2.5.2"
+        },
+        "ansible-lint": {
+            "hashes": [
+                "sha256:fd86229fe6315137537d5380a13512e0cefa169d740a5a9e1f60dbd9ef6d6704"
+            ],
+            "version": "==3.4.21"
+        },
+        "anyconfig": {
+            "hashes": [
+                "sha256:fb0528b9aaef7fdf301efa55bac69f9733b860c83add7b25a17bf82c34ee82dd"
+            ],
+            "version": "==0.9.4"
+        },
+        "arrow": {
+            "hashes": [
+                "sha256:a558d3b7b6ce7ffc74206a86c147052de23d3d4ef0e17c210dd478c53575c4cd"
+            ],
+            "version": "==0.12.1"
+        },
+        "asn1crypto": {
+            "hashes": [
+                "sha256:2f1adbb7546ed199e3c90ef23ec95c5cf3585bac7d11fb7eb562a3fe89c64e87",
+                "sha256:9d5c20441baf0cb60a4ac34cc447c6c189024b6b4c6cd7877034f4965c464e49"
+            ],
+            "version": "==0.24.0"
+        },
+        "attrs": {
+            "hashes": [
+                "sha256:4b90b09eeeb9b88c35bc642cbac057e45a5fd85367b985bd2809c62b7b939265",
+                "sha256:e0d0eb91441a3b53dab4d9b743eafc1ac44476296a2053b6ca3af0b139faf87b"
+            ],
+            "version": "==18.1.0"
+        },
+        "backports.functools-lru-cache": {
+            "hashes": [
+                "sha256:9d98697f088eb1b0fa451391f91afb5e3ebde16bbdb272819fd091151fda4f1a",
+                "sha256:f0b0e4eba956de51238e17573b7087e852dfe9854afd2e9c873f73fc0ca0a6dd"
+            ],
+            "version": "==1.5"
+        },
+        "backports.ssl-match-hostname": {
+            "hashes": [
+                "sha256:502ad98707319f4a51fa2ca1c677bd659008d27ded9f6380c79e8932e38dcdf2"
+            ],
+            "markers": "python_version < '3.5'",
+            "version": "==3.5.0.1"
+        },
+        "bcrypt": {
+            "hashes": [
+                "sha256:01477981abf74e306e8ee31629a940a5e9138de000c6b0898f7f850461c4a0a5",
+                "sha256:054d6e0acaea429e6da3613fcd12d05ee29a531794d96f6ab959f29a39f33391",
+                "sha256:0872eeecdf9a429c1420158500eedb323a132bc5bf3339475151c52414729e70",
+                "sha256:09a3b8c258b815eadb611bad04ca15ec77d86aa9ce56070e1af0d5932f17642a",
+                "sha256:0f317e4ffbdd15c3c0f8ab5fbd86aa9aabc7bea18b5cc5951b456fe39e9f738c",
+                "sha256:2788c32673a2ad0062bea850ab73cffc0dba874db10d7a3682b6f2f280553f20",
+                "sha256:321d4d48be25b8d77594d8324c0585c80ae91ac214f62db9098734e5e7fb280f",
+                "sha256:346d6f84ff0b493dbc90c6b77136df83e81f903f0b95525ee80e5e6d5e4eef84",
+                "sha256:34dd60b90b0f6de94a89e71fcd19913a30e83091c8468d0923a93a0cccbfbbff",
+                "sha256:3b4c23300c4eded8895442c003ae9b14328ae69309ac5867e7530de8bdd7875d",
+                "sha256:43d1960e7db14042319c46925892d5fa99b08ff21d57482e6f5328a1aca03588",
+                "sha256:49e96267cd9be55a349fd74f9852eb9ae2c427cd7f6455d0f1765d7332292832",
+                "sha256:67ed1a374c9155ec0840214ce804616de49c3df9c5bc66740687c1c9b1cd9e8d",
+                "sha256:6efd9ca20aefbaf2e7e6817a2c6ed4a50ff6900fafdea1bcb1d0e9471743b144",
+                "sha256:8569844a5d8e1fdde4d7712a05ab2e6061343ac34af6e7e3d7935b2bd1907bfd",
+                "sha256:8629ea6a8a59f865add1d6a87464c3c676e60101b8d16ef404d0a031424a8491",
+                "sha256:988cac675e25133d01a78f2286189c1f01974470817a33eaf4cfee573cfb72a5",
+                "sha256:9a6fedda73aba1568962f7543a1f586051c54febbc74e87769bad6a4b8587c39",
+                "sha256:9eced8962ce3b7124fe20fd358cf8c7470706437fa064b9874f849ad4c5866fc",
+                "sha256:a005ed6163490988711ff732386b08effcbf8df62ae93dd1e5bda0714fad8afb",
+                "sha256:ae35dbcb6b011af6c840893b32399252d81ff57d52c13e12422e16b5fea1d0fb",
+                "sha256:b1e8491c6740f21b37cca77bc64677696a3fb9f32360794d57fa8477b7329eda",
+                "sha256:c906bdb482162e9ef48eea9f8c0d967acceb5c84f2d25574c7d2a58d04861df1",
+                "sha256:cb18ffdc861dbb244f14be32c47ab69604d0aca415bee53485fcea4f8e93d5ef",
+                "sha256:d86da365dda59010ba0d1ac45aa78390f56bf7f992e65f70b3b081d5e5257b09",
+                "sha256:e22f0997622e1ceec834fd25947dc2ee2962c2133ea693d61805bc867abaf7ea",
+                "sha256:f2fe545d27a619a552396533cddf70d83cecd880a611cdfdbb87ca6aec52f66b",
+                "sha256:f7fd3ed3745fe6e81e28dc3b3d76cce31525a91f32a387e1febd6b982caf8cdb",
+                "sha256:f9210820ee4818d84658ed7df16a7f30c9fba7d8b139959950acef91745cc0f7"
+            ],
+            "version": "==3.1.4"
+        },
+        "binaryornot": {
+            "hashes": [
+                "sha256:359501dfc9d40632edc9fac890e19542db1a287bbcfa58175b66658392018061",
+                "sha256:b8b71173c917bddcd2c16070412e369c3ed7f0528926f70cac18a6c97fd563e4"
+            ],
+            "version": "==0.4.4"
+        },
+        "cerberus": {
+            "hashes": [
+                "sha256:a5b39090fde3ec3294c9d7030b8eda935b42222160a66a922e0c8aea34cabfdf"
+            ],
+            "version": "==1.1"
+        },
+        "certifi": {
+            "hashes": [
+                "sha256:13e698f54293db9f89122b0581843a782ad0934a4fe0172d2a980ba77fc61bb7",
+                "sha256:9fa520c1bacfb634fa7af20a76bcbd3d5fb390481724c597da32c719a7dca4b0"
+            ],
+            "version": "==2018.4.16"
+        },
+        "cffi": {
+            "hashes": [
+                "sha256:151b7eefd035c56b2b2e1eb9963c90c6302dc15fbd8c1c0a83a163ff2c7d7743",
+                "sha256:1553d1e99f035ace1c0544050622b7bc963374a00c467edafac50ad7bd276aef",
+                "sha256:1b0493c091a1898f1136e3f4f991a784437fac3673780ff9de3bcf46c80b6b50",
+                "sha256:2ba8a45822b7aee805ab49abfe7eec16b90587f7f26df20c71dd89e45a97076f",
+                "sha256:3c85641778460581c42924384f5e68076d724ceac0f267d66c757f7535069c93",
+                "sha256:3eb6434197633b7748cea30bf0ba9f66727cdce45117a712b29a443943733257",
+                "sha256:4c91af6e967c2015729d3e69c2e51d92f9898c330d6a851bf8f121236f3defd3",
+                "sha256:770f3782b31f50b68627e22f91cb182c48c47c02eb405fd689472aa7b7aa16dc",
+                "sha256:79f9b6f7c46ae1f8ded75f68cf8ad50e5729ed4d590c74840471fc2823457d04",
+                "sha256:7a33145e04d44ce95bcd71e522b478d282ad0eafaf34fe1ec5bbd73e662f22b6",
+                "sha256:857959354ae3a6fa3da6651b966d13b0a8bed6bbc87a0de7b38a549db1d2a359",
+                "sha256:87f37fe5130574ff76c17cab61e7d2538a16f843bb7bca8ebbc4b12de3078596",
+                "sha256:95d5251e4b5ca00061f9d9f3d6fe537247e145a8524ae9fd30a2f8fbce993b5b",
+                "sha256:9d1d3e63a4afdc29bd76ce6aa9d58c771cd1599fbba8cf5057e7860b203710dd",
+                "sha256:a36c5c154f9d42ec176e6e620cb0dd275744aa1d804786a71ac37dc3661a5e95",
+                "sha256:ae5e35a2c189d397b91034642cb0eab0e346f776ec2eb44a49a459e6615d6e2e",
+                "sha256:b0f7d4a3df8f06cf49f9f121bead236e328074de6449866515cea4907bbc63d6",
+                "sha256:b75110fb114fa366b29a027d0c9be3709579602ae111ff61674d28c93606acca",
+                "sha256:ba5e697569f84b13640c9e193170e89c13c6244c24400fc57e88724ef610cd31",
+                "sha256:be2a9b390f77fd7676d80bc3cdc4f8edb940d8c198ed2d8c0be1319018c778e1",
+                "sha256:d5d8555d9bfc3f02385c1c37e9f998e2011f0db4f90e250e5bc0c0a85a813085",
+                "sha256:e55e22ac0a30023426564b1059b035973ec82186ddddbac867078435801c7801",
+                "sha256:e90f17980e6ab0f3c2f3730e56d1fe9bcba1891eeea58966e89d352492cc74f4",
+                "sha256:ecbb7b01409e9b782df5ded849c178a0aa7c906cf8c5a67368047daab282b184",
+                "sha256:ed01918d545a38998bfa5902c7c00e0fee90e957ce036a4000a88e3fe2264917",
+                "sha256:edabd457cd23a02965166026fd9bfd196f4324fe6032e866d0f3bd0301cd486f",
+                "sha256:fdf1c1dc5bafc32bc5d08b054f94d659422b05aba244d6be4ddc1c72d9aa70fb"
+            ],
+            "version": "==1.11.5"
+        },
+        "chardet": {
+            "hashes": [
+                "sha256:84ab92ed1c4d4f16916e05906b6b75a6c0fb5db821cc65e70cbd64a3e2a5eaae",
+                "sha256:fc323ffcaeaed0e0a02bf4d117757b98aed530d9ed4531e3e15460124c106691"
+            ],
+            "version": "==3.0.4"
+        },
+        "click": {
+            "hashes": [
+                "sha256:29f99fc6125fbc931b758dc053b3114e55c77a6e4c6c3a2674a2dc986016381d",
+                "sha256:f15516df478d5a56180fbf80e68f206010e6d160fc39fa508b65e035fd75130b"
+            ],
+            "version": "==6.7"
+        },
+        "click-completion": {
+            "hashes": [
+                "sha256:7ca12978493a7450486cef155845af4fae48744c3f97b7250a254de65c9e5e5a"
+            ],
+            "version": "==0.3.1"
+        },
+        "colorama": {
+            "hashes": [
+                "sha256:463f8483208e921368c9f306094eb6f725c6ca42b0f97e313cb5d5512459feda",
+                "sha256:48eb22f4f8461b1df5734a074b57042430fb06e1d61bd1e11b078c0fe6d7a1f1"
+            ],
+            "version": "==0.3.9"
+        },
+        "configparser": {
+            "hashes": [
+                "sha256:5308b47021bc2340965c371f0f058cc6971a04502638d4244225c49d80db273a"
+            ],
+            "markers": "python_version < '3.2'",
+            "version": "==3.5.0"
+        },
+        "cookiecutter": {
+            "hashes": [
+                "sha256:1316a52e1c1f08db0c9efbf7d876dbc01463a74b155a0d83e722be88beda9a3e",
+                "sha256:ed8f54a8fc79b6864020d773ce11539b5f08e4617f353de1f22d23226f6a0d36"
+            ],
+            "version": "==1.6.0"
+        },
+        "cryptography": {
+            "hashes": [
+                "sha256:3f3b65d5a16e6b52fba63dc860b62ca9832f51f1a2ae5083c78b6840275f12dd",
+                "sha256:551a3abfe0c8c6833df4192a63371aa2ff43afd8f570ed345d31f251d78e7e04",
+                "sha256:5cb990056b7cadcca26813311187ad751ea644712022a3976443691168781b6f",
+                "sha256:60bda7f12ecb828358be53095fc9c6edda7de8f1ef571f96c00b2363643fa3cd",
+                "sha256:6fef51ec447fe9f8351894024e94736862900d3a9aa2961528e602eb65c92bdb",
+                "sha256:77d0ad229d47a6e0272d00f6bf8ac06ce14715a9fd02c9a97f5a2869aab3ccb2",
+                "sha256:808fe471b1a6b777f026f7dc7bd9a4959da4bfab64972f2bbe91e22527c1c037",
+                "sha256:9b62fb4d18529c84b961efd9187fecbb48e89aa1a0f9f4161c61b7fc42a101bd",
+                "sha256:9e5bed45ec6b4f828866ac6a6bedf08388ffcfa68abe9e94b34bb40977aba531",
+                "sha256:9fc295bf69130a342e7a19a39d7bbeb15c0bcaabc7382ec33ef3b2b7d18d2f63",
+                "sha256:abd070b5849ed64e6d349199bef955ee0ad99aefbad792f0c587f8effa681a5e",
+                "sha256:ba6a774749b6e510cffc2fb98535f717e0e5fd91c7c99a61d223293df79ab351",
+                "sha256:c332118647f084c983c6a3e1dba0f3bcb051f69d12baccac68db8d62d177eb8a",
+                "sha256:d6f46e862ee36df81e6342c2177ba84e70f722d9dc9c6c394f9f1f434c4a5563",
+                "sha256:db6013746f73bf8edd9c3d1d3f94db635b9422f503db3fc5ef105233d4c011ab",
+                "sha256:f57008eaff597c69cf692c3518f6d4800f0309253bb138b526a37fe9ef0c7471",
+                "sha256:f6c821ac253c19f2ad4c8691633ae1d1a17f120d5b01ea1d256d7b602bc59887"
+            ],
+            "version": "==2.2.2"
+        },
+        "docker-py": {
+            "hashes": [
+                "sha256:35b506e95861914fa5ad57a6707e3217b4082843b883be246190f57013948aba",
+                "sha256:4c2a75875764d38d67f87bc7d03f7443a3895704efc57962bdf6500b8d4bc415"
+            ],
+            "index": "pypi",
+            "version": "==1.10.6"
+        },
+        "docker-pycreds": {
+            "hashes": [
+                "sha256:764a7ea2f6484bc5de5bf0c060f08b41a1118cf1acb987626b3ff45f3cc40dac",
+                "sha256:e3732a03610a00461a716997670c7010bf1c214a3edc440f7d6a2a3a830ecd9d"
+            ],
+            "version": "==0.2.3"
+        },
+        "enum34": {
+            "hashes": [
+                "sha256:2d81cbbe0e73112bdfe6ef8576f2238f2ba27dd0d55752a776c41d38b7da2850",
+                "sha256:644837f692e5f550741432dd3f223bbb9852018674981b1664e5dc339387588a",
+                "sha256:6bd0f6ad48ec2aa117d3d141940d484deccda84d4fcd884f5c3d93c23ecd8c79",
+                "sha256:8ad8c4783bf61ded74527bffb48ed9b54166685e4230386a9ed9b1279e2df5b1"
+            ],
+            "markers": "python_version < '3.4'",
+            "version": "==1.1.6"
+        },
+        "fasteners": {
+            "hashes": [
+                "sha256:427c76773fe036ddfa41e57d89086ea03111bbac57c55fc55f3006d027107e18",
+                "sha256:564a115ff9698767df401efca29620cbb1a1c2146b7095ebd304b79cc5807a7c"
+            ],
+            "version": "==0.14.1"
+        },
+        "flake8": {
+            "hashes": [
+                "sha256:7253265f7abd8b313e3892944044a365e3f4ac3fcdcfb4298f55ee9ddf188ba0",
+                "sha256:c7841163e2b576d435799169b78703ad6ac1bbb0f199994fc05f700b2a90ea37"
+            ],
+            "version": "==3.5.0"
+        },
+        "funcsigs": {
+            "hashes": [
+                "sha256:330cc27ccbf7f1e992e69fef78261dc7c6569012cf397db8d3de0234e6c937ca",
+                "sha256:a7bb0f2cf3a3fd1ab2732cb49eba4252c2af4240442415b4abce3b87022a8f50"
+            ],
+            "markers": "python_version < '3.0'",
+            "version": "==1.0.2"
+        },
+        "future": {
+            "hashes": [
+                "sha256:e39ced1ab767b5936646cedba8bcce582398233d6a627067d4c6a454c90cfedb"
+            ],
+            "version": "==0.16.0"
+        },
+        "git-url-parse": {
+            "hashes": [
+                "sha256:7929b594725394b34008fae557991eed727afab9521937fd59f565105361ec81",
+                "sha256:a7d1dba7fc253dff8afb7b683af35834864c9796eb130b44ec63b2584bbc6522",
+                "sha256:d647f3d7b10b6aec4a14495c45b2bd500dcfa73d2711578ef2149879bbcdf06d"
+            ],
+            "version": "==1.1.0"
+        },
+        "idna": {
+            "hashes": [
+                "sha256:2c6a5de3089009e3da7c5dde64a141dbc8551d5b7f6cf4ed7c2568d0cc520a8f",
+                "sha256:8c7309c718f94b3a625cb648ace320157ad16ff131ae0af362c9f21b80ef6ec4"
+            ],
+            "version": "==2.6"
+        },
+        "ipaddress": {
+            "hashes": [
+                "sha256:64b28eec5e78e7510698f6d4da08800a5c575caa4a286c93d651c5d3ff7b6794",
+                "sha256:b146c751ea45cad6188dd6cf2d9b757f6f4f8d6ffb96a023e6f2e26eea02a72c"
+            ],
+            "markers": "python_version < '3'",
+            "version": "==1.0.22"
+        },
+        "jinja2": {
+            "hashes": [
+                "sha256:74c935a1b8bb9a3947c50a54766a969d4846290e1e788ea44c1392163723c3bd",
+                "sha256:f84be1bb0040caca4cea721fcbbbbd61f9be9464ca236387158b0feea01914a4"
+            ],
+            "version": "==2.10"
+        },
+        "jinja2-time": {
+            "hashes": [
+                "sha256:d14eaa4d315e7688daa4969f616f226614350c48730bfa1692d2caebd8c90d40",
+                "sha256:d3eab6605e3ec8b7a0863df09cc1d23714908fa61aa6986a845c20ba488b4efa"
+            ],
+            "version": "==0.2.0"
+        },
+        "markupsafe": {
+            "hashes": [
+                "sha256:a6be69091dac236ea9c6bc7d012beab42010fa914c459791d627dad4910eb665"
+            ],
+            "version": "==1.0"
+        },
+        "mccabe": {
+            "hashes": [
+                "sha256:ab8a6258860da4b6677da4bd2fe5dc2c659cff31b3ee4f7f5d64e79735b80d42",
+                "sha256:dd8d182285a0fe56bace7f45b5e7d1a6ebcbf524e8f3bd87eb0f125271b8831f"
+            ],
+            "version": "==0.6.1"
+        },
+        "molecule": {
+            "hashes": [
+                "sha256:26b3a064decfa49c6515afa2c0839ab68b768e01facd14b87346fe75c88199ad",
+                "sha256:6aeea61fc0cf7bcb3c6b9760fdf3b0f53c07718424b7e31ba347f9f9f3828697",
+                "sha256:ce791600f1147146de081db04641b0338017c896d7602f0c14850b74b9bafe1a"
+            ],
+            "index": "pypi",
+            "version": "==2.13.1"
+        },
+        "monotonic": {
+            "hashes": [
+                "sha256:23953d55076df038541e648a53676fb24980f7a1be290cdda21300b3bc21dfb0",
+                "sha256:552a91f381532e33cbd07c6a2655a21908088962bb8fa7239ecbcc6ad1140cc7"
+            ],
+            "version": "==1.5"
+        },
+        "more-itertools": {
+            "hashes": [
+                "sha256:0dd8f72eeab0d2c3bd489025bb2f6a1b8342f9b198f6fc37b52d15cfa4531fea",
+                "sha256:11a625025954c20145b37ff6309cd54e39ca94f72f6bb9576d1195db6fa2442e",
+                "sha256:c9ce7eccdcb901a2c75d326ea134e0886abfbea5f93e91cc95de9507c0816c44"
+            ],
+            "version": "==4.1.0"
+        },
+        "paramiko": {
+            "hashes": [
+                "sha256:24fb31c947de85fbdeca09e222d41206781581fb0bdf118d2ef18f6e414cd388",
+                "sha256:33e36775a6c71790ba7692a73f948b329cf9295a72b0102144b031114bd2a4f3"
+            ],
+            "version": "==2.4.1"
+        },
+        "pathspec": {
+            "hashes": [
+                "sha256:be664567cf96a718a68b33329862d1e6f6803ef9c48a6e2636265806cfceb29d"
+            ],
+            "version": "==0.5.6"
+        },
+        "pbr": {
+            "hashes": [
+                "sha256:d7e8917458094002b9a2e0030ba60ba4c834c456071f2d0c1ccb5265992ada91",
+                "sha256:dfc304262e881066bc675a59a348733af17bee1d57084d9e2a0c96b952a82db7"
+            ],
+            "version": "==3.0.1"
+        },
+        "pexpect": {
+            "hashes": [
+                "sha256:3d132465a75b57aa818341c6521392a06cc660feb3988d7f1074f39bd23c9a92",
+                "sha256:f853b52afaf3b064d29854771e2db509ef80392509bde2dd7a6ecf2dfc3f0018"
+            ],
+            "version": "==4.2.1"
+        },
+        "pluggy": {
+            "hashes": [
+                "sha256:7f8ae7f5bdf75671a718d2daf0a64b7885f74510bcd98b1a0bb420eb9a9d0cff",
+                "sha256:d345c8fe681115900d6da8d048ba67c25df42973bda370783cd58826442dcd7c",
+                "sha256:e160a7fcf25762bb60efc7e171d4497ff1d8d2d75a3d0df7a21b76821ecbf5c5"
+            ],
+            "version": "==0.6.0"
+        },
+        "poyo": {
+            "hashes": [
+                "sha256:103b4ee3e1c7765098fe1cabe43f828db2e2a6079646561a2117e1a809f352d6",
+                "sha256:230ec11c2f35a23410c1f0e474f09fa4e203686f40ab3adca7b039c845d8c325"
+            ],
+            "version": "==0.4.1"
+        },
+        "psutil": {
+            "hashes": [
+                "sha256:0c74c6a494b650966b88da256cab4e507f483c53e85b9b10d3ff9c38f059330b",
+                "sha256:147093b75b8874e55e6b26c540544d40e98845bc4ee74dc6054c881fd2a3eed9",
+                "sha256:1da0aa70d66612588d77daed7784e623aac1fd038681c3acd0e1c76b2b2f0819",
+                "sha256:32616c5736f1de446e77865305e7f56905c718991f820c8286436adea8192f32",
+                "sha256:3d3c5c117e55c486a53ef796cc715035bf4f56419cc32dbd124fe26e9289ad1e",
+                "sha256:3f79a044db0aae96592ef42be459e37095d0c2cebcae4fd7baf486d37a85a8cd",
+                "sha256:44746540c0fab5b95401520d29eb9ffe84b3b4a235bd1d1971cbe36e1f38dd13",
+                "sha256:50c8ddc3a6d1cda1de6d7aaf1af10896832c6d686fc7d0fe3d01c1eb51e6f521",
+                "sha256:5d2f076788d71d2e1c7276f1e5a1bc255f29c2e80eb8879a9ffc633c5bf69481",
+                "sha256:70732850abd11f4d9fa46f0e110af21030e0a6088204f332d335921b36e66305",
+                "sha256:7a5c0973bd4c1de98d9b225bd4303a0718d31e31d6e2342e825c3e656f7056df",
+                "sha256:838c66c123cb024bf8c8d2fec902b38c51f75b27988f4487d81383d1d3d8a8ce",
+                "sha256:92e3500dfaf7a5502ebaf4a7472e2afb9ff0cb36b4e5dc1977b3c774f58332db",
+                "sha256:a155875d2fedb614c2cd687fe47953d03a47f76eb39bd5756931b288b685655f",
+                "sha256:a989876ac0cc7942ef9481b96d3bfc02777dc798d4a7a1b4e8f0f284228f3434",
+                "sha256:b5583d1c2c858056d39bd148ed25839c4f1b76fec8fb2cb9b564c82997a21266",
+                "sha256:db473f0d45a56d422502043f3755385fcfd83f5bb0947bc807fcad689230f37f",
+                "sha256:dcd9d3131f83480648da40d2c39403657c63a81e56e4e8d8e905bf65c133d59c",
+                "sha256:e8b65a80e978af9bf10be423442155032c589b7042b4a26edc410dc36819d65e",
+                "sha256:ed09521d49ee177f1205ed9791ad62263feacd2fe1cc20d1d33cf37923f240ea",
+                "sha256:fecda42b274dc618278bd9139e8493c9459d2174376f82b65ba929557f10e880"
+            ],
+            "markers": "sys_platform != 'win32' and sys_platform != 'cygwin'",
+            "version": "==5.2.2"
+        },
+        "ptyprocess": {
+            "hashes": [
+                "sha256:e64193f0047ad603b71f202332ab5527c5e52aa7c8b609704fc28c0dc20c4365",
+                "sha256:e8c43b5eee76b2083a9badde89fd1bbce6c8942d1045146e100b7b5e014f4f1a"
+            ],
+            "version": "==0.5.2"
+        },
+        "py": {
+            "hashes": [
+                "sha256:29c9fab495d7528e80ba1e343b958684f4ace687327e6f789a94bf3d1915f881",
+                "sha256:983f77f3331356039fdd792e9220b7b8ee1aa6bd2b25f567a963ff1de5a64f6a"
+            ],
+            "version": "==1.5.3"
+        },
+        "pyasn1": {
+            "hashes": [
+                "sha256:0d7f6e959fe53f3960a23d73f35e1fce61348b30915b6664309ca756de7c1f89",
+                "sha256:5a0db897b311d265cde49615cf783f1c78613138605cdd0f907ecfa5b2aba3ee",
+                "sha256:758cb50abddc03e4563fd9e7f03db56e3e87b58c0bd01247360326e5c0c7ffa5",
+                "sha256:7d626683e3d792cccc608da02498aff37ab4f3dafd8905d6bf755d11f9b26b43",
+                "sha256:a7efe807c4b83a859e2735c692b92ed7b567cfddc4163763412920041d876c2b",
+                "sha256:b5a9ca48055b9a20f6d1b3d68e38692e5431c86a0f99ea602e61294e891fee5b",
+                "sha256:c07d6e587b2f928366b1f67c09bda026a3e6fcc99e80a744dc67f8fca3895626",
+                "sha256:d258b0a71994f7770599835249cece1caef3c70def868c4915e6e5ca49b67d15",
+                "sha256:d5cd6ed995dba16fad0c521cfe31cd2d68400b53fcc2bce93326829be73ab6d1",
+                "sha256:d84c2aea3cf43780e9e6a19f4e4dddee9f6976519020e64e47c57e5c7a8c3dd2",
+                "sha256:e85895087905c65b5b594eb91f7522664c85545b147d5f4d4e7b1b07da8dcbdc",
+                "sha256:f81c96761fca60d64b1c9b79ec2e40cf9495a745cf570613079ef324aeb9672b"
+            ],
+            "version": "==0.4.2"
+        },
+        "pycodestyle": {
+            "hashes": [
+                "sha256:682256a5b318149ca0d2a9185d365d8864a768a28db66a84a2ea946bcc426766",
+                "sha256:6c4245ade1edfad79c3446fadfc96b0de2759662dc29d07d80a6f27ad1ca6ba9"
+            ],
+            "version": "==2.3.1"
+        },
+        "pycparser": {
+            "hashes": [
+                "sha256:99a8ca03e29851d96616ad0404b4aad7d9ee16f25c9f9708a11faf2810f7b226"
+            ],
+            "version": "==2.18"
+        },
+        "pyflakes": {
+            "hashes": [
+                "sha256:08bd6a50edf8cffa9fa09a463063c425ecaaf10d1eb0335a7e8b1401aef89e6f",
+                "sha256:8d616a382f243dbf19b54743f280b80198be0bca3a5396f1d2e1fca6223e8805"
+            ],
+            "version": "==1.6.0"
+        },
+        "pynacl": {
+            "hashes": [
+                "sha256:04e30e5bdeeb2d5b34107f28cd2f5bbfdc6c616f3be88fc6f53582ff1669eeca",
+                "sha256:0bfa0d94d2be6874e40f896e0a67e290749151e7de767c5aefbad1121cad7512",
+                "sha256:11aa4e141b2456ce5cecc19c130e970793fa3a2c2e6fbb8ad65b28f35aa9e6b6",
+                "sha256:13bdc1fe084ff9ac7653ae5a924cae03bf4bb07c6667c9eb5b6eb3c570220776",
+                "sha256:14339dc233e7a9dda80a3800e64e7ff89d0878ba23360eea24f1af1b13772cac",
+                "sha256:1d33e775fab3f383167afb20b9927aaf4961b953d76eeb271a5703a6d756b65b",
+                "sha256:2a42b2399d0428619e58dac7734838102d35f6dcdee149e0088823629bf99fbb",
+                "sha256:2dce05ac8b3c37b9e2f65eab56c544885607394753e9613fd159d5e2045c2d98",
+                "sha256:6453b0dae593163ffc6db6f9c9c1597d35c650598e2c39c0590d1757207a1ac2",
+                "sha256:73a5a96fb5fbf2215beee2353a128d382dbca83f5341f0d3c750877a236569ef",
+                "sha256:8abb4ef79161a5f58848b30ab6fb98d8c466da21fdd65558ce1d7afc02c70b5f",
+                "sha256:8ac1167195b32a8755de06efd5b2d2fe76fc864517dab66aaf65662cc59e1988",
+                "sha256:8f505f42f659012794414fa57c498404e64db78f1d98dfd40e318c569f3c783b",
+                "sha256:be71cd5fce04061e1f3d39597f93619c80cdd3558a6c9ba99a546f144a8d8101",
+                "sha256:cf6877124ae6a0698404e169b3ba534542cfbc43f939d46b927d956daf0a373a",
+                "sha256:d0eb5b2795b7ee2cbcfcadacbe95a13afbda048a262bd369da9904fecb568975",
+                "sha256:d795f506bcc9463efb5ebb0f65ed77921dcc9e0a50499dedd89f208445de9ecb",
+                "sha256:d8aaf7e5d6b0e0ef7d6dbf7abeb75085713d0100b4eb1a4e4e857de76d77ac45",
+                "sha256:e0d38fa0a75f65f556fb912f2c6790d1fa29b7dd27a1d9cc5591b281321eaaa9",
+                "sha256:eb2acabbd487a46b38540a819ef67e477a674481f84a82a7ba2234b9ba46f752",
+                "sha256:eeee629828d0eb4f6d98ac41e9a3a6461d114d1d0aa111a8931c049359298da0",
+                "sha256:f5ce9e26d25eb0b2d96f3ef0ad70e1d3ae89b5d60255c462252a3e456a48c053",
+                "sha256:fabf73d5d0286f9e078774f3435601d2735c94ce9e514ac4fb945701edead7e4"
+            ],
+            "version": "==1.2.1"
+        },
+        "pytest": {
+            "hashes": [
+                "sha256:54713b26c97538db6ff0703a12b19aeaeb60b5e599de542e7fca0ec83b9038e8",
+                "sha256:829230122facf05a5f81a6d4dfe6454a04978ea3746853b2b84567ecf8e5c526"
+            ],
+            "version": "==3.5.1"
+        },
+        "python-dateutil": {
+            "hashes": [
+                "sha256:3220490fb9741e2342e1cf29a503394fdac874bc39568288717ee67047ff29df",
+                "sha256:9d8074be4c993fbe4947878ce593052f71dac82932a677d49194d8ce9778002e"
+            ],
+            "version": "==2.7.2"
+        },
+        "python-gilt": {
+            "hashes": [
+                "sha256:4fd58c128635d1f4a8c93305e648f23379ce56e23624e4c5479427fcd2d5656e",
+                "sha256:c7321ef1a8efddbdef657b4fd21c3eaf1b4cb24a9656d97b73a444b1feb2067a",
+                "sha256:e23a45a6905e6bb7aec3ff7652b48309933a6991fad4546d9e793ac7e0513f8a"
+            ],
+            "version": "==1.2.1"
+        },
+        "pyyaml": {
+            "hashes": [
+                "sha256:0c507b7f74b3d2dd4d1322ec8a94794927305ab4cebbe89cc47fe5e81541e6e8",
+                "sha256:16b20e970597e051997d90dc2cddc713a2876c47e3d92d59ee198700c5427736",
+                "sha256:3262c96a1ca437e7e4763e2843746588a965426550f3797a79fca9c6199c431f",
+                "sha256:326420cbb492172dec84b0f65c80942de6cedb5233c413dd824483989c000608",
+                "sha256:4474f8ea030b5127225b8894d626bb66c01cda098d47a2b0d3429b6700af9fd8",
+                "sha256:592766c6303207a20efc445587778322d7f73b161bd994f227adaa341ba212ab",
+                "sha256:5ac82e411044fb129bae5cfbeb3ba626acb2af31a8d17d175004b70862a741a7",
+                "sha256:5f84523c076ad14ff5e6c037fe1c89a7f73a3e04cf0377cb4d017014976433f3",
+                "sha256:827dc04b8fa7d07c44de11fabbc888e627fa8293b695e0f99cb544fdfa1bf0d1",
+                "sha256:b4c423ab23291d3945ac61346feeb9a0dc4184999ede5e7c43e1ffb975130ae6",
+                "sha256:bc6bced57f826ca7cb5125a10b23fd0f2fff3b7c4701d64c439a300ce665fff8",
+                "sha256:c01b880ec30b5a6e6aa67b09a2fe3fb30473008c85cd6a67359a1b15ed6d83a4",
+                "sha256:ca233c64c6e40eaa6c66ef97058cdc80e8d0157a443655baa1b2966e812807ca",
+                "sha256:e863072cdf4c72eebf179342c94e6989c67185842d9997960b3e69290b2fa269"
+            ],
+            "version": "==3.12"
+        },
+        "requests": {
+            "hashes": [
+                "sha256:6a1b267aa90cac58ac3a765d067950e7dbbf75b1da07e895d1f594193a40a38b",
+                "sha256:9c443e7324ba5b85070c4a818ade28bfabedf16ea10206da1132edaa6dda237e"
+            ],
+            "version": "==2.18.4"
+        },
+        "sh": {
+            "hashes": [
+                "sha256:ae3258c5249493cebe73cb4e18253a41ed69262484bad36fdb3efcb8ad8870bb",
+                "sha256:b52bf5833ed01c7b5c5fb73a7f71b3d98d48e9b9b8764236237bdc7ecae850fc"
+            ],
+            "version": "==1.12.14"
+        },
+        "six": {
+            "hashes": [
+                "sha256:70e8a77beed4562e7f14fe23a786b54f6296e34344c23bc42f07b15018ff98e9",
+                "sha256:832dc0e10feb1aa2c68dcc57dbb658f1c7e65b9b61af69048abc87a2db00a0eb"
+            ],
+            "version": "==1.11.0"
+        },
+        "tabulate": {
+            "hashes": [
+                "sha256:e4ca13f26d0a6be2a2915428dc21e732f1e44dad7f76d7030b2ef1ec251cf7f2"
+            ],
+            "version": "==0.8.2"
+        },
+        "testinfra": {
+            "hashes": [
+                "sha256:56877ab52fbeeac97cb311662c7ed7403210f2db941bbeb2df004aacf522435a",
+                "sha256:ecf6f21b71bf5f4fe531c84149bfd5175465de910a6a0bb9a42c14828be7bdc1"
+            ],
+            "version": "==1.12.0"
+        },
+        "tree-format": {
+            "hashes": [
+                "sha256:a538523aa78ae7a4b10003b04f3e1b37708e0e089d99c9d3b9e1c71384c9a7f9",
+                "sha256:b5056228dbedde1fb81b79f71fb0c23c98e9d365230df9b29af76e8d8003de11"
+            ],
+            "version": "==0.1.2"
+        },
+        "urllib3": {
+            "hashes": [
+                "sha256:06330f386d6e4b195fbfc736b297f58c5a892e4440e54d294d7004e3a9bbea1b",
+                "sha256:cc44da8e1145637334317feebd728bd869a35285b93cbb4cca2577da7e62db4f"
+            ],
+            "version": "==1.22"
+        },
+        "websocket-client": {
+            "hashes": [
+                "sha256:188b68b14fdb2d8eb1a111f21b9ffd2dbf1dbc4e4c1d28cf2c37cdbf1dd1cae6",
+                "sha256:a453dc4dfa6e0db3d8fd7738a308a88effe6240c59f3226eb93e8f020c216149"
+            ],
+            "version": "==0.47.0"
+        },
+        "whichcraft": {
+            "hashes": [
+                "sha256:9e0d51c9387cb7e9f28b7edb549e6a03da758f7784f991eb4397d7f7808c57fd",
+                "sha256:cd0e10b58960ab877d9f273cd28788730936c3cdaceec2dafad97c7cf3067d46"
+            ],
+            "version": "==0.4.1"
+        },
+        "yamllint": {
+            "hashes": [
+                "sha256:93e255e4bd96c7c0850bf182b09f6b35625130f15b37a0e03d8bf378d747081c",
+                "sha256:e9b7dec24921ef13180902e5dbcaae9157c773e3e3e2780ef77d3a4dd67d799f"
+            ],
+            "version": "==1.11.1"
+        }
+    }
+}

+ 8 - 4
README.md

@@ -27,17 +27,21 @@ This role requires:
 - If `sensu_include_plugins` is true (the default), the `static_data_store` variable needs to be set: see [Check Deployment](http://ansible-sensu.readthedocs.io/en/latest/dynamic_checks/)
 
 ## Supported Platforms
-### Current Release
-#### Automatically tested via TravisCI
+### Automatically tested via TravisCI
 
+- [CentOS - 6](https://wiki.centos.org/Manuals/ReleaseNotes/CentOS6.9)
 - [CentOS - 7](https://wiki.centos.org/Manuals/ReleaseNotes/CentOS7)
-- [Amazon Linux](https://aws.amazon.com/amazon-linux-ami/) - only client side support is tested
 - [Debian - 8 (Jessie)](https://wiki.debian.org/DebianJessie)
 - [Debian - 9 (Stretch)](https://wiki.debian.org/DebianStretch)
 - [Ubuntu - 14.04 (Trusty Tahr)](http://releases.ubuntu.com/14.04/)
 - [Ubuntu - 16.04 (Xenial Xerus)](http://releases.ubuntu.com/16.04/)
+- [Fedora - 26](https://docs.fedoraproject.org/f26/release-notes/)
+- [Fedora - 27](https://docs.fedoraproject.org/f27/release-notes/)
+- [Fedora - 28](https://docs.fedoraproject.org/f28/release-notes/)
+- [Amazon Linux](https://aws.amazon.com/amazon-linux-ami/)
+- [Amazon Linux 2](https://aws.amazon.com/amazon-linux-2/)
 
-#### Supported manually (compatibility not always guaranteed)
+### Supported manually (compatibility not always guaranteed)
 - [SmartOS - base-64 15.x.x](https://docs.joyent.com/images/smartos/base#version-15xx)
 - [FreeBSD - 10.3, 11.0 (64-bit only)](https://www.freebsd.org/releases/10.2R/relnotes.html)
 - [OpenBSD - 6.2](https://www.openbsd.org/62.html)

+ 28 - 9
docs/testing.md

@@ -1,15 +1,34 @@
 # Testing
-A small testing framework is provided with this role using [Vagrant](https://vagrantup.com/).  
+This Ansible role makes use of the [molecule](https://github.com/metacloud/molecule)
+testing framework to run automatic integration tests for every change.
 
-To test this role locally, once you've set up Vagrant, simply `cd` to `tests` and run `vagrant up [centos7|debian8|ubuntu15]`, after which you can visit the following URLs in your browser for the associated deployments:  
+Molecule is using Python 2.7 with the latest stable release of Ansible to deploy this
+Ansible role. After succesfully deploying the entire role, Molecule then uses
+[Inspec](https://www.inspec.io/) to perform a set of tests against the final
+containers. This ensures that for every supported operating system, the end result
+is what we expect.
 
-- CentOS 7: `http://localhost:3001`
-- Debian 8: `http://localhost:3002`
-- Ubuntu 15.04: `http://localhost:3003`
+All changes submitted via [Pull Requests](https://github.com/sensu/sensu-ansible/pulls)
+are blocked from merging until the integration tests pass.
 
-_Note: To test SmartOS, please simply roll out a base64 zone_  
+## Testing locally
+In order to speed up local development, you may opt to locally run the integration
+tests to more quickly iterate on new features.
 
-To log in, use `admin` as both the username & password.  
+### Local environment prep
+1. Fork the [sensu-ansible](https://github.com/sensu/sensu-ansible) repository
+2. `git clone` your fork of the `sensu-ansible` repository and `cd` into your local clone.
+3. Add the `upstream` repo to your local clone of the repository with the following `git` command:
+```
+git remote add upstream https://github.com/sensu/sensu-ansible.git
+```
+4. Execute `git checkout -b feature/NEW_FEATURE_NAME_HERE` to work on a dedicated branch
+5. Ensure you have a recent version of Docker installed locally: https://docs.docker.com/install/
+6. Ensure you have [pipenv](https://docs.pipenv.org/install/#installing-pipenv) installed.
+7. Install this repositories development dependacies with `pipenv install --two --dev` followed by ` gem install rubocop`
+8. Execute the full integration tests for your chosen operating system distribution: ` pipenv run molecule test --scenario-name $OS --driver-name docker --destroy always`
 
-
-As support for other operating systems/distributions is written, they will be added as options for testing.
+Notes:
+1. Currently, you can set `$OS` above to one of `debian`, `ubuntu`, `centos`, `fedora`, or `amazonlinux`
+2. It's faster to iterate by changing `--destroy always` to `--destroy never` such that you don't have to full rebuild the testing infrastructure.
+3. If you want to limit testing to just the Inspec unit tests, you can simply run ` pipenv run molecule verify --scenario-name $OS` to re-run those steps.

+ 25 - 8
handlers/main.yml

@@ -1,31 +1,48 @@
 ---
 
   - name: restart rabbitmq service
-    service: name={{ rabbitmq_service_name }} state=restarted
+    service:
+      name: "{{ rabbitmq_service_name }}"
+      state: restarted
 
   - name: restart redis service
-    service: name={{ redis_service_name }} state=restarted
+    service:
+      name: "{{ redis_service_name }}"
+      pattern: /usr/bin/redis-server
+      state: restarted
 
   - name: restart uchiwa service
-    service: name={{ uchiwa_service_name }} state=restarted
+    service:
+      name: "{{ uchiwa_service_name }}"
+      state: restarted
 
   - name: restart sensu-server service
-    service: name={{ sensu_server_service_name }} state=restarted
+    service:
+      name: "{{ sensu_server_service_name }}"
+      state: restarted
     when: sensu_master and not se_enterprise
 
   - name: restart sensu-api service
-    service: name={{ sensu_api_service_name }} state=restarted
+    service:
+      name: "{{ sensu_api_service_name }}"
+      state: restarted
     when: sensu_master and not se_enterprise
 
   - name: restart sensu-client service
-    service: name={{ sensu_client_service_name }} state=restarted
+    service:
+      name: "{{ sensu_client_service_name }}"
+      state: restarted
 
   - name: restart sensu-enterprise service
-    service: name={{ sensu_enterprise_service_name }} state=restarted
+    service:
+      name: "{{ sensu_enterprise_service_name }}"
+      state: restarted
     when: se_enterprise and sensu_master
 
   - name: restart sensu-enterprise-dashboard service
-    service: name={{ sensu_enterprise_dashboard_service_name }} state=restarted
+    service:
+      name: "{{ sensu_enterprise_dashboard_service_name }}"
+      state: restarted
     when: se_enterprise and sensu_master
 
   # Joyent SmartOS specific handlers

+ 11 - 5
meta/main.yml

@@ -6,15 +6,21 @@ galaxy_info:
   platforms:
   - name: EL
     versions:
-    - 7
+      - 6
+      - 7
   - name: Ubuntu
     versions:
-    - trusty
-    - vivid
+      - trusty
+      - vivid
   - name: Debian
     versions:
-    - jessie
-    - stretch
+      - jessie
+      - stretch
+  - name: Fedora
+    versions:
+      - 26
+      - 27
+      - 28
 
   galaxy_tags:
     - cloud

+ 14 - 0
molecule/amazonlinux/Dockerfile.j2

@@ -0,0 +1,14 @@
+# Molecule managed
+
+{% if item.registry is defined %}
+FROM {{ item.registry.url }}/{{ item.image }}
+{% else %}
+FROM {{ item.image }}
+{% endif %}
+
+RUN if [ $(command -v apt-get) ]; then apt-get update && apt-get upgrade -y && apt-get install -y python sudo bash ca-certificates && apt-get clean; \
+    elif [ $(command -v dnf) ]; then dnf makecache && dnf --assumeyes install python sudo python-devel python2-dnf bash && dnf clean all; \
+    elif [ $(command -v yum) ]; then yum makecache fast && yum update -y && yum install -y python sudo yum-plugin-ovl bash && sed -i 's/plugins=0/plugins=1/g' /etc/yum.conf && yum clean all; \
+    elif [ $(command -v zypper) ]; then zypper refresh && zypper update -y && zypper install -y python sudo bash python-xml && zypper clean -a; \
+    elif [ $(command -v apk) ]; then apk update && apk add --no-cache python sudo bash ca-certificates; \
+    elif [ $(command -v xbps-install) ]; then xbps-install -Syu && xbps-install -y python sudo bash ca-certificates && xbps-remove -O; fi

+ 59 - 0
molecule/amazonlinux/molecule.yml

@@ -0,0 +1,59 @@
+---
+scenario:
+  name: amazonlinux
+dependency:
+  name: galaxy
+driver:
+  name: docker
+lint:
+  name: yamllint
+  enabled: False
+platforms:
+  - name: amazonlinux-1
+    image: dokken/amazonlinux
+    command: /sbin/init
+    capabilities:
+      - SYS_ADMIN
+  - name: amazonlinux-2
+    image: dokken/amazonlinux-2
+    command: /usr/lib/systemd/systemd
+    capabilities:
+      - SYS_ADMIN
+    volumes:
+      - /sys/fs/cgroup:/sys/fs/cgroup:ro
+provisioner:
+  name: ansible
+  playbooks:
+    prepare: ../default/prepare.yml
+    create: ../default/create.yml
+    destroy: ../default/destroy.yml
+    converge: ../default/playbook.yml
+    verify: ../default/verify.yml
+  lint:
+    name: ansible-lint
+    enabled: False
+  inventory:
+    group_vars:
+      all:
+        sensu_master: true
+        sensu_include_dashboard: true
+        rabbitmq_server: true
+        redis_server: true
+        rabbitmq_host: "{{ ansible_hostname }}"
+        redis_host: "{{ ansible_hostname }}"
+        sensu_api_host: "{{ ansible_hostname }}"
+        ansible_default_ipv4:
+          address: 127.0.0.1
+    host_vars:
+      amazonlinux-1:
+        inspec_download_url: https://packages.chef.io/files/stable/inspec/2.1.68/el/6/inspec-2.1.68-1.el6.x86_64.rpm
+        inspec_download_sha256sum: a62bc8d8ea803a72b7e834f5993c1d9eab50539293365a067cd29736daeb3fea
+      amazonlinux-2:
+        inspec_download_url: https://packages.chef.io/files/stable/inspec/2.1.68/el/7/inspec-2.1.68-1.el7.x86_64.rpm
+        inspec_download_sha256sum: 54fb2aab023a228c8f622653daabed14f2345780ec978670dbd262a63ad06fe9
+verifier:
+  name: inspec
+  directory: ../default/tests/
+  lint:
+    name: rubocop
+    enabled: true

+ 14 - 0
molecule/centos/Dockerfile.j2

@@ -0,0 +1,14 @@
+# Molecule managed
+
+{% if item.registry is defined %}
+FROM {{ item.registry.url }}/{{ item.image }}
+{% else %}
+FROM {{ item.image }}
+{% endif %}
+
+RUN if [ $(command -v apt-get) ]; then apt-get update && apt-get upgrade -y && apt-get install -y python sudo bash ca-certificates && apt-get clean; \
+    elif [ $(command -v dnf) ]; then dnf makecache && dnf --assumeyes install python sudo python-devel python2-dnf bash && dnf clean all; \
+    elif [ $(command -v yum) ]; then yum makecache fast && yum update -y && yum install -y python sudo yum-plugin-ovl bash && sed -i 's/plugins=0/plugins=1/g' /etc/yum.conf && yum clean all; \
+    elif [ $(command -v zypper) ]; then zypper refresh && zypper update -y && zypper install -y python sudo bash python-xml && zypper clean -a; \
+    elif [ $(command -v apk) ]; then apk update && apk add --no-cache python sudo bash ca-certificates; \
+    elif [ $(command -v xbps-install) ]; then xbps-install -Syu && xbps-install -y python sudo bash ca-certificates && xbps-remove -O; fi

+ 59 - 0
molecule/centos/molecule.yml

@@ -0,0 +1,59 @@
+---
+scenario:
+  name: centos
+dependency:
+  name: galaxy
+driver:
+  name: docker
+lint:
+  name: yamllint
+  enabled: False
+platforms:
+  - name: centos-6
+    image: dokken/centos-6
+    command: /sbin/init
+    capabilities:
+      - SYS_ADMIN
+  - name: centos-7
+    image: dokken/centos-7
+    command: /usr/lib/systemd/systemd
+    capabilities:
+      - SYS_ADMIN
+    volumes:
+      - /sys/fs/cgroup:/sys/fs/cgroup:ro
+provisioner:
+  name: ansible
+  playbooks:
+    prepare: ../default/prepare.yml
+    create: ../default/create.yml
+    destroy: ../default/destroy.yml
+    converge: ../default/playbook.yml
+    verify: ../default/verify.yml
+  lint:
+    name: ansible-lint
+    enabled: False
+  inventory:
+    group_vars:
+      all:
+        sensu_master: true
+        sensu_include_dashboard: true
+        rabbitmq_server: true
+        redis_server: true
+        rabbitmq_host: "{{ ansible_hostname }}"
+        redis_host: "{{ ansible_hostname }}"
+        sensu_api_host: "{{ ansible_hostname }}"
+        ansible_default_ipv4:
+          address: 127.0.0.1
+    host_vars:
+      centos-6:
+        inspec_download_url: https://packages.chef.io/files/stable/inspec/2.1.68/el/6/inspec-2.1.68-1.el6.x86_64.rpm
+        inspec_download_sha256sum: a62bc8d8ea803a72b7e834f5993c1d9eab50539293365a067cd29736daeb3fea
+      centos-7:
+        inspec_download_url: https://packages.chef.io/files/stable/inspec/2.1.68/el/7/inspec-2.1.68-1.el7.x86_64.rpm
+        inspec_download_sha256sum: 54fb2aab023a228c8f622653daabed14f2345780ec978670dbd262a63ad06fe9
+verifier:
+  name: inspec
+  directory: ../default/tests/
+  lint:
+    name: rubocop
+    enabled: true

+ 14 - 0
molecule/debian/Dockerfile.j2

@@ -0,0 +1,14 @@
+# Molecule managed
+
+{% if item.registry is defined %}
+FROM {{ item.registry.url }}/{{ item.image }}
+{% else %}
+FROM {{ item.image }}
+{% endif %}
+
+RUN if [ $(command -v apt-get) ]; then apt-get update && apt-get upgrade -y && apt-get install -y python sudo bash ca-certificates && apt-get clean; \
+    elif [ $(command -v dnf) ]; then dnf makecache && dnf --assumeyes install python sudo python-devel python2-dnf bash && dnf clean all; \
+    elif [ $(command -v yum) ]; then yum makecache fast && yum update -y && yum install -y python sudo yum-plugin-ovl bash && sed -i 's/plugins=0/plugins=1/g' /etc/yum.conf && yum clean all; \
+    elif [ $(command -v zypper) ]; then zypper refresh && zypper update -y && zypper install -y python sudo bash python-xml && zypper clean -a; \
+    elif [ $(command -v apk) ]; then apk update && apk add --no-cache python sudo bash ca-certificates; \
+    elif [ $(command -v xbps-install) ]; then xbps-install -Syu && xbps-install -y python sudo bash ca-certificates && xbps-remove -O; fi

+ 60 - 0
molecule/debian/molecule.yml

@@ -0,0 +1,60 @@
+---
+scenario:
+  name: debian
+dependency:
+  name: galaxy
+driver:
+  name: docker
+lint:
+  name: yamllint
+  enabled: False
+platforms:
+  - name: debian-8
+    image: dokken/debian-8
+    command: /lib/systemd/systemd
+    privileged: yes
+    volumes:
+      - /sys/fs/cgroup:/sys/fs/cgroup:ro
+  - name: debian-9
+    image: dokken/debian-9
+    command: /lib/systemd/systemd
+    capabilities:
+      - SYS_ADMIN
+    volumes:
+      - /sys/fs/cgroup:/sys/fs/cgroup:ro
+provisioner:
+  name: ansible
+  playbooks:
+    prepare: ../default/prepare.yml
+    create: ../default/create.yml
+    destroy: ../default/destroy.yml
+    converge: ../default/playbook.yml
+    verify: ../default/verify.yml
+  lint:
+    name: ansible-lint
+    enabled: False
+  inventory:
+    group_vars:
+      all:
+        sensu_master: true
+        sensu_include_dashboard: true
+        rabbitmq_server: true
+        redis_server: true
+        rabbitmq_host: "{{ ansible_hostname }}"
+        redis_host: "{{ ansible_hostname }}"
+        sensu_api_host: "{{ ansible_hostname }}"
+        ansible_default_ipv4:
+          address: 127.0.0.1
+    host_vars:
+      debian-8:
+        inspec_download_url: https://packages.chef.io/files/stable/inspec/2.1.68/ubuntu/16.04/inspec_2.1.68-1_amd64.deb
+        inspec_download_sha256sum: bb411271af5275c26f0129a61230a1080d22a6e99eb0f1b52223ee9d55827375
+      debian-9:
+        inspec_download_url: https://packages.chef.io/files/stable/inspec/2.1.68/ubuntu/16.04/inspec_2.1.68-1_amd64.deb
+        inspec_download_sha256sum: bb411271af5275c26f0129a61230a1080d22a6e99eb0f1b52223ee9d55827375
+verifier:
+  name: inspec
+  directory: ../default/
+  lint:
+    name: rubocop
+    enabled: true

+ 14 - 0
molecule/default/Dockerfile.j2

@@ -0,0 +1,14 @@
+# Molecule managed
+
+{% if item.registry is defined %}
+FROM {{ item.registry.url }}/{{ item.image }}
+{% else %}
+FROM {{ item.image }}
+{% endif %}
+
+RUN if [ $(command -v apt-get) ]; then apt-get update && apt-get upgrade -y && apt-get install -y python sudo bash ca-certificates && apt-get clean; \
+    elif [ $(command -v dnf) ]; then dnf makecache && dnf --assumeyes install python sudo python-devel python2-dnf bash && dnf clean all; \
+    elif [ $(command -v yum) ]; then yum makecache fast && yum update -y && yum install -y python sudo yum-plugin-ovl bash && sed -i 's/plugins=0/plugins=1/g' /etc/yum.conf && yum clean all; \
+    elif [ $(command -v zypper) ]; then zypper refresh && zypper update -y && zypper install -y python sudo bash python-xml && zypper clean -a; \
+    elif [ $(command -v apk) ]; then apk update && apk add --no-cache python sudo bash ca-certificates; \
+    elif [ $(command -v xbps-install) ]; then xbps-install -Syu && xbps-install -y python sudo bash ca-certificates && xbps-remove -O; fi

+ 16 - 0
molecule/default/INSTALL.rst

@@ -0,0 +1,16 @@
+*******
+Install
+*******
+
+Requirements
+============
+
+* Docker Engine
+* docker-py
+
+Install
+=======
+
+.. code-block:: bash
+
+  $ sudo pip install docker-py

+ 81 - 0
molecule/default/create.yml

@@ -0,0 +1,81 @@
+---
+- name: Create
+  hosts: localhost
+  connection: local
+  gather_facts: false
+  no_log: "{{ not lookup('env', 'MOLECULE_DEBUG') | bool }}"
+  tasks:
+    - name: Log into a Docker registry
+      docker_login:
+        username: "{{ item.registry.credentials.username }}"
+        password: "{{ item.registry.credentials.password }}"
+        email: "{{ item.registry.credentials.email | default(omit) }}"
+        registry: "{{ item.registry.url }}"
+        docker_host: "{{ item.docker_host | default('unix://var/run/docker.sock') }}"
+      with_items: "{{ molecule_yml.platforms }}"
+      when:
+        - item.registry is defined
+        - item.registry.credentials is defined
+        - item.registry.credentials.username is defined
+
+    - name: Create Dockerfiles from image names
+      template:
+        src: "{{ molecule_scenario_directory }}/Dockerfile.j2"
+        dest: "{{ molecule_ephemeral_directory }}/Dockerfile_{{ item.image | regex_replace('[^a-zA-Z0-9_]', '_') }}"
+      with_items: "{{ molecule_yml.platforms }}"
+      register: platforms
+
+    - name: Discover local Docker images
+      docker_image_facts:
+        name: "molecule_local/{{ item.item.name }}"
+        docker_host: "{{ item.item.docker_host | default('unix://var/run/docker.sock') }}"
+      with_items: "{{ platforms.results }}"
+      register: docker_images
+
+    - name: Build an Ansible compatible image
+      docker_image:
+        path: "{{ molecule_ephemeral_directory }}"
+        name: "molecule_local/{{ item.item.image }}"
+        docker_host: "{{ item.item.docker_host | default('unix://var/run/docker.sock') }}"
+        dockerfile: "{{ item.item.dockerfile | default(item.invocation.module_args.dest) }}"
+        force: "{{ item.item.force | default(true) }}"
+      with_items: "{{ platforms.results }}"
+      when: platforms.changed or docker_images.results | map(attribute='images') | select('equalto', []) | list | count >= 0
+
+    - name: Create docker network(s)
+      docker_network:
+        name: "{{ item }}"
+        docker_host: "{{ item.docker_host | default('unix://var/run/docker.sock') }}"
+        state: present
+      with_items: "{{ molecule_yml.platforms | molecule_get_docker_networks }}"
+
+    - name: Create molecule instance(s)
+      docker_container:
+        name: "{{ item.name }}"
+        docker_host: "{{ item.docker_host | default('unix://var/run/docker.sock') }}"
+        hostname: "{{ item.name }}"
+        image: "molecule_local/{{ item.image }}"
+        state: started
+        recreate: false
+        log_driver: json-file
+        command: "{{ item.command | default('bash -c \"while true; do sleep 10000; done\"') }}"
+        privileged: "{{ item.privileged | default(omit) }}"
+        volumes: "{{ item.volumes | default(omit) }}"
+        capabilities: "{{ item.capabilities | default(omit) }}"
+        exposed_ports: "{{ item.exposed_ports | default(omit) }}"
+        published_ports: "{{ item.published_ports | default(omit) }}"
+        ulimits: "{{ item.ulimits | default(omit) }}"
+        networks: "{{ item.networks | default(omit) }}"
+        dns_servers: "{{ item.dns_servers | default(omit) }}"
+      register: server
+      with_items: "{{ molecule_yml.platforms }}"
+      async: 7200
+      poll: 0
+
+    - name: Wait for instance(s) creation to complete
+      async_status:
+        jid: "{{ item.ansible_job_id }}"
+      register: docker_jobs
+      until: docker_jobs.finished
+      retries: 300
+      with_items: "{{ server.results }}"

+ 32 - 0
molecule/default/destroy.yml

@@ -0,0 +1,32 @@
+---
+- name: Destroy
+  hosts: localhost
+  connection: local
+  gather_facts: false
+  no_log: "{{ not lookup('env', 'MOLECULE_DEBUG') | bool }}"
+  tasks:
+    - name: Destroy molecule instance(s)
+      docker_container:
+        name: "{{ item.name }}"
+        docker_host: "{{ item.docker_host | default('unix://var/run/docker.sock') }}"
+        state: absent
+        force_kill: "{{ item.force_kill | default(true) }}"
+      register: server
+      with_items: "{{ molecule_yml.platforms }}"
+      async: 7200
+      poll: 0
+
+    - name: Wait for instance(s) deletion to complete
+      async_status:
+        jid: "{{ item.ansible_job_id }}"
+      register: docker_jobs
+      until: docker_jobs.finished
+      retries: 300
+      with_items: "{{ server.results }}"
+
+    - name: Delete docker network(s)
+      docker_network:
+        name: "{{ item }}"
+        docker_host: "{{ item.docker_host | default('unix://var/run/docker.sock') }}"
+        state: absent
+      with_items: "{{ molecule_yml.platforms | molecule_get_docker_networks }}"

+ 131 - 0
molecule/default/molecule.yml

@@ -0,0 +1,131 @@
+---
+dependency:
+  name: galaxy
+driver:
+  name: docker
+lint:
+  name: yamllint
+  enabled: False
+platforms:
+  - name: debian-8
+    image: dokken/debian-8
+    command: /lib/systemd/systemd
+    privileged: yes
+    volumes:
+      - /sys/fs/cgroup:/sys/fs/cgroup:ro
+  - name: debian-9
+    image: dokken/debian-9
+    command: /lib/systemd/systemd
+    capabilities:
+      - SYS_ADMIN
+    volumes:
+      - /sys/fs/cgroup:/sys/fs/cgroup:ro
+  - name: ubuntu-14.04
+    image: dokken/ubuntu-14.04
+    command: /sbin/init
+    capabilities:
+      - SYS_ADMIN
+  - name: ubuntu-16.04
+    image: dokken/ubuntu-16.04
+    command: /bin/systemd
+    capabilities:
+      - SYS_ADMIN
+    volumes:
+      - /sys/fs/cgroup:/sys/fs/cgroup:ro
+  - name: ubuntu-18.04
+    image: dokken/ubuntu-18.04
+    command: /bin/systemd
+    capabilities:
+      - SYS_ADMIN
+    volumes:
+      - /sys/fs/cgroup:/sys/fs/cgroup:ro
+  - name: centos-6
+    image: dokken/centos-6
+    command: /sbin/init
+    capabilities:
+      - SYS_ADMIN
+  - name: centos-7
+    image: dokken/centos-7
+    command: /usr/lib/systemd/systemd
+    capabilities:
+      - SYS_ADMIN
+    volumes:
+      - /sys/fs/cgroup:/sys/fs/cgroup:ro
+  - name: fedora-26
+    image: dokken/fedora-26
+    command: /usr/lib/systemd/systemd
+    capabilities:
+      - SYS_ADMIN
+    volumes:
+      - /sys/fs/cgroup:/sys/fs/cgroup:ro
+  - name: fedora-27
+    image: dokken/fedora-27
+    command: /usr/lib/systemd/systemd
+    capabilities:
+      - SYS_ADMIN
+    volumes:
+      - /sys/fs/cgroup:/sys/fs/cgroup:ro
+  - name: fedora-28
+    image: dokken/fedora-latest
+    command: /usr/lib/systemd/systemd
+    capabilities:
+      - SYS_ADMIN
+    volumes:
+      - /sys/fs/cgroup:/sys/fs/cgroup:ro
+  - name: amazonlinux-1
+    image: dokken/amazonlinux
+    command: /sbin/init
+    capabilities:
+      - SYS_ADMIN
+  - name: amazonlinux-2
+    image: dokken/amazonlinux-2
+    command: /usr/lib/systemd/systemd
+    capabilities:
+      - SYS_ADMIN
+    volumes:
+      - /sys/fs/cgroup:/sys/fs/cgroup:ro
+provisioner:
+  name: ansible
+  directory: ../default/
+  lint:
+    name: ansible-lint
+    enabled: False
+  inventory:
+    group_vars:
+      all:
+        sensu_master: true
+        sensu_include_dashboard: true
+        rabbitmq_server: true
+        redis_server: true
+        rabbitmq_host: "{{ ansible_hostname }}"
+        redis_host: "{{ ansible_hostname }}"
+        sensu_api_host: "{{ ansible_hostname }}"
+        ansible_default_ipv4:
+          address: 127.0.0.1
+    host_vars:
+      debian-8:
+        inspec_download_url: https://packages.chef.io/files/stable/inspec/2.1.68/ubuntu/16.04/inspec_2.1.68-1_amd64.deb
+        inspec_download_sha256sum: bb411271af5275c26f0129a61230a1080d22a6e99eb0f1b52223ee9d55827375
+      debian-9:
+        inspec_download_url: https://packages.chef.io/files/stable/inspec/2.1.68/ubuntu/16.04/inspec_2.1.68-1_amd64.deb
+        inspec_download_sha256sum: bb411271af5275c26f0129a61230a1080d22a6e99eb0f1b52223ee9d55827375
+      ubuntu-14.04:
+        inspec_download_url: https://packages.chef.io/files/stable/inspec/2.1.68/ubuntu/14.04/inspec_2.1.68-1_amd64.deb
+        inspec_download_sha256sum: bb411271af5275c26f0129a61230a1080d22a6e99eb0f1b52223ee9d55827375
+      ubuntu-16.04:
+        inspec_download_url: https://packages.chef.io/files/stable/inspec/2.1.68/ubuntu/16.04/inspec_2.1.68-1_amd64.deb
+        inspec_download_sha256sum: bb411271af5275c26f0129a61230a1080d22a6e99eb0f1b52223ee9d55827375
+      centos-6:
+        inspec_download_url: https://packages.chef.io/files/stable/inspec/2.1.68/el/6/inspec-2.1.68-1.el6.x86_64.rpm
+        inspec_download_sha256sum: a62bc8d8ea803a72b7e834f5993c1d9eab50539293365a067cd29736daeb3fea
+      centos-7:
+        inspec_download_url: https://packages.chef.io/files/stable/inspec/2.1.68/el/7/inspec-2.1.68-1.el7.x86_64.rpm
+        inspec_download_sha256sum: 54fb2aab023a228c8f622653daabed14f2345780ec978670dbd262a63ad06fe9
+scenario:
+  name: default
+verifier:
+  name: inspec
+  directory: ../default/tests/
+  lint:
+    name: rubocop
+    enabled: true

+ 17 - 0
molecule/default/playbook.yml

@@ -0,0 +1,17 @@
+---
+- name: Converge
+  hosts: all
+  pre_tasks:
+    - name: All ansible hostname to sensu_masters group
+      add_host:
+        name: "{{ item }}"
+        groups: sensu_masters
+      with_items: "{{ ansible_play_hosts }}"
+      changed_when: false
+
+    - name: Ensure container hostnames are correct
+      hostname:
+        name: "{{ inventory_hostname }}"
+      when: inventory_hostname != 'amazonlinux-1'
+  roles:
+    - role: sensu-ansible

+ 5 - 0
molecule/default/prepare.yml

@@ -0,0 +1,5 @@
+---
+- name: Prepare
+  hosts: all
+  gather_facts: false
+  tasks: []

+ 45 - 0
molecule/default/tests/test_default.rb

@@ -0,0 +1,45 @@
+# Verify that redis, rabbitmq-server, sensu-{api,client}, and Uchiwa
+# are all listening as expected
+
+# Redis
+describe port(6379) do
+  it { should be_listening }
+  its('protocols') { should include 'tcp' }
+  its('addresses') { should be_in ['0.0.0.0', '::'] }
+end
+
+# RabbitMQ Server
+describe port(5671) do
+  it { should be_listening }
+  its('protocols') { should include 'tcp' }
+  its('addresses') { should be_in ['0.0.0.0', '::'] }
+end
+
+# Sensu API
+describe port(4567) do
+  it { should be_listening }
+  its('protocols') { should include 'tcp' }
+  its('addresses') { should be_in ['0.0.0.0', '::'] }
+end
+
+# Sensu Client TCP/UDP Socket
+describe port(3030) do
+  it { should be_listening }
+  its('protocols') { should include 'tcp' }
+  # Broken on 14.04 - its('protocols') { should include 'udp' }
+  its('addresses') { should include '127.0.0.1' }
+end
+
+# Sensu Client HTTP Socket
+describe port(3031) do
+  it { should be_listening }
+  its('protocols') { should include 'tcp' }
+  its('addresses') { should include '127.0.0.1' }
+end
+
+# Uchiwa
+describe port(3000) do
+  it { should be_listening }
+  its('protocols') { should include 'tcp' }
+  its('addresses') { should be_in ['0.0.0.0', '::'] }
+end

+ 81 - 0
molecule/default/verify.yml

@@ -0,0 +1,81 @@
+---
+# This is an example playbook to execute inspec tests.
+# Tests need distributed to the appropriate ansible host/groups
+# prior to execution by `inspec exec`.
+
+- name: Verify
+  hosts: all
+  become: true
+  vars:
+    inspec_download_source_dir: /usr/local/src
+    inspec_package_name: "{{ inspec_download_url.split('/')[-1] }}"
+    inspec_bin: /opt/inspec/bin/inspec
+    inspec_test_directory: "/tmp/molecule/inspec"
+  tasks:
+    - name: Install system dependencies for Inspec
+      package:
+        name: "{{ item }}"
+        state: present
+      with_items:
+        - lsof
+        - iproute
+        - net-tools
+
+    - name: Download Inspec
+      get_url:
+        url: "{{ inspec_download_url }}"
+        dest: "{{ inspec_download_source_dir }}"
+        sha256sum: "{{ inspec_download_sha256sum }}"
+        mode: 0755
+      register: inspec_download
+
+    - name: Install Inspec
+      yum:
+        name: "{{ inspec_download.dest }}"
+        state: latest
+      when: ansible_pkg_mgr == 'yum'
+
+    - name: Install Inspec
+      dnf:
+        name: "{{ inspec_download.dest }}"
+        state: latest
+      when: ansible_pkg_mgr == 'dnf'
+
+    - name: Install Inspec
+      apt:
+        deb: "{{ inspec_download.dest }}"
+        state: present
+      when: ansible_pkg_mgr == 'apt'
+
+    - name: Create Molecule directory for test files
+      file:
+        path: "{{ inspec_test_directory }}"
+        state: directory
+
+    - name: Copy Inspec tests to remote
+      copy:
+        src: "{{ item }}"
+        dest: "{{ inspec_test_directory }}/{{ item | basename }}"
+      with_fileglob:
+        - "{{ playbook_dir }}/tests/test_*.rb"
+
+    - name: Register test files
+      shell: "ls {{ inspec_test_directory }}/test_*.rb"
+      register: test_files
+
+    - name: Execute Inspec tests
+      command: "{{ inspec_bin }} exec {{ item }} --no-color --reporter progress"
+      register: test_results
+      with_items: "{{ test_files.stdout_lines }}"
+      ignore_errors: true
+
+    - name: Display details about the Inspec results
+      debug:
+        msg: "{{ item.stdout_lines }}"
+      with_items: "{{ test_results.results }}"
+
+    - name: Fail when tests fail
+      fail:
+        msg: "Inspec failed to validate"
+      when: item.rc != 0
+      with_items: "{{ test_results.results }}"

+ 14 - 0
molecule/fedora/Dockerfile.j2

@@ -0,0 +1,14 @@
+# Molecule managed
+
+{% if item.registry is defined %}
+FROM {{ item.registry.url }}/{{ item.image }}
+{% else %}
+FROM {{ item.image }}
+{% endif %}
+
+RUN if [ $(command -v apt-get) ]; then apt-get update && apt-get upgrade -y && apt-get install -y python sudo bash ca-certificates && apt-get clean; \
+    elif [ $(command -v dnf) ]; then dnf makecache && dnf --assumeyes install python sudo python-devel python2-dnf bash && dnf clean all; \
+    elif [ $(command -v yum) ]; then yum makecache fast && yum update -y && yum install -y python sudo yum-plugin-ovl bash && sed -i 's/plugins=0/plugins=1/g' /etc/yum.conf && yum clean all; \
+    elif [ $(command -v zypper) ]; then zypper refresh && zypper update -y && zypper install -y python sudo bash python-xml && zypper clean -a; \
+    elif [ $(command -v apk) ]; then apk update && apk add --no-cache python sudo bash ca-certificates; \
+    elif [ $(command -v xbps-install) ]; then xbps-install -Syu && xbps-install -y python sudo bash ca-certificates && xbps-remove -O; fi

+ 71 - 0
molecule/fedora/molecule.yml

@@ -0,0 +1,71 @@
+---
+scenario:
+  name: fedora
+dependency:
+  name: galaxy
+driver:
+  name: docker
+lint:
+  name: yamllint
+  enabled: False
+platforms:
+  - name: fedora-26
+    image: dokken/fedora-26
+    command: /usr/lib/systemd/systemd
+    capabilities:
+      - SYS_ADMIN
+    volumes:
+      - /sys/fs/cgroup:/sys/fs/cgroup:ro
+  - name: fedora-27
+    image: dokken/fedora-27
+    command: /usr/lib/systemd/systemd
+    capabilities:
+      - SYS_ADMIN
+    volumes:
+      - /sys/fs/cgroup:/sys/fs/cgroup:ro
+  - name: fedora-28
+    image: dokken/fedora-latest
+    command: /usr/lib/systemd/systemd
+    capabilities:
+      - SYS_ADMIN
+    volumes:
+      - /sys/fs/cgroup:/sys/fs/cgroup:ro
+provisioner:
+  name: ansible
+  playbooks:
+    prepare: ../default/prepare.yml
+    create: ../default/create.yml
+    destroy: ../default/destroy.yml
+    converge: ../default/playbook.yml
+    verify: ../default/verify.yml
+  lint:
+    name: ansible-lint
+    enabled: False
+  inventory:
+    group_vars:
+      all:
+        sensu_master: true
+        sensu_include_dashboard: true
+        rabbitmq_server: true
+        redis_server: true
+        rabbitmq_host: "{{ ansible_hostname }}"
+        redis_host: "{{ ansible_hostname }}"
+        sensu_api_host: "{{ ansible_hostname }}"
+        ansible_default_ipv4:
+          address: 127.0.0.1
+    host_vars:
+      fedora-26:
+        inspec_download_url: https://packages.chef.io/files/stable/inspec/2.1.68/el/7/inspec-2.1.68-1.el7.x86_64.rpm
+        inspec_download_sha256sum: 54fb2aab023a228c8f622653daabed14f2345780ec978670dbd262a63ad06fe9
+      fedora-27:
+        inspec_download_url: https://packages.chef.io/files/stable/inspec/2.1.68/el/7/inspec-2.1.68-1.el7.x86_64.rpm
+        inspec_download_sha256sum: 54fb2aab023a228c8f622653daabed14f2345780ec978670dbd262a63ad06fe9
+      fedora-28:
+        inspec_download_url: https://packages.chef.io/files/stable/inspec/2.1.68/el/7/inspec-2.1.68-1.el7.x86_64.rpm
+        inspec_download_sha256sum: 54fb2aab023a228c8f622653daabed14f2345780ec978670dbd262a63ad06fe9
+verifier:
+  name: inspec
+  directory: ../default/tests/
+  lint:
+    name: rubocop
+    enabled: true

+ 14 - 0
molecule/ubuntu/Dockerfile.j2

@@ -0,0 +1,14 @@
+# Molecule managed
+
+{% if item.registry is defined %}
+FROM {{ item.registry.url }}/{{ item.image }}
+{% else %}
+FROM {{ item.image }}
+{% endif %}
+
+RUN if [ $(command -v apt-get) ]; then apt-get update && apt-get upgrade -y && apt-get install -y python sudo bash ca-certificates && apt-get clean; \
+    elif [ $(command -v dnf) ]; then dnf makecache && dnf --assumeyes install python sudo python-devel python2-dnf bash && dnf clean all; \
+    elif [ $(command -v yum) ]; then yum makecache fast && yum update -y && yum install -y python sudo yum-plugin-ovl bash && sed -i 's/plugins=0/plugins=1/g' /etc/yum.conf && yum clean all; \
+    elif [ $(command -v zypper) ]; then zypper refresh && zypper update -y && zypper install -y python sudo bash python-xml && zypper clean -a; \
+    elif [ $(command -v apk) ]; then apk update && apk add --no-cache python sudo bash ca-certificates; \
+    elif [ $(command -v xbps-install) ]; then xbps-install -Syu && xbps-install -y python sudo bash ca-certificates && xbps-remove -O; fi

+ 70 - 0
molecule/ubuntu/molecule.yml

@@ -0,0 +1,70 @@
+---
+scenario:
+  name: ubuntu
+dependency:
+  name: galaxy
+driver:
+  name: docker
+lint:
+  name: yamllint
+  enabled: False
+platforms:
+  - name: ubuntu-14.04
+    image: dokken/ubuntu-14.04
+    command: /sbin/init
+    capabilities:
+      - SYS_ADMIN
+  - name: ubuntu-16.04
+    image: dokken/ubuntu-16.04
+    command: /bin/systemd
+    capabilities:
+      - SYS_ADMIN
+    volumes:
+      - /sys/fs/cgroup:/sys/fs/cgroup:ro
+# Disabled for now, missing Sensu and RabbitMQ packages, total mess to override in tests
+#  - name: ubuntu-18.04
+#    image: dokken/ubuntu-18.04
+#    command: /bin/systemd
+#    capabilities:
+#      - SYS_ADMIN
+#    volumes:
+#      - /sys/fs/cgroup:/sys/fs/cgroup:ro
+provisioner:
+  name: ansible
+  playbooks:
+    prepare: ../default/prepare.yml
+    create: ../default/create.yml
+    destroy: ../default/destroy.yml
+    converge: ../default/playbook.yml
+    verify: ../default/verify.yml
+  lint:
+    name: ansible-lint
+    enabled: False
+  inventory:
+    group_vars:
+      all:
+        sensu_master: true
+        sensu_include_dashboard: true
+        rabbitmq_server: true
+        redis_server: true
+        rabbitmq_host: "{{ ansible_hostname }}"
+        redis_host: "{{ ansible_hostname }}"
+        sensu_api_host: "{{ ansible_hostname }}"
+        ansible_default_ipv4:
+          address: 127.0.0.1
+    host_vars:
+      ubuntu-14.04:
+        inspec_download_url: https://packages.chef.io/files/stable/inspec/2.1.68/ubuntu/14.04/inspec_2.1.68-1_amd64.deb
+        inspec_download_sha256sum: bb411271af5275c26f0129a61230a1080d22a6e99eb0f1b52223ee9d55827375
+      ubuntu-16.04:
+        inspec_download_url: https://packages.chef.io/files/stable/inspec/2.1.68/ubuntu/16.04/inspec_2.1.68-1_amd64.deb
+        inspec_download_sha256sum: bb411271af5275c26f0129a61230a1080d22a6e99eb0f1b52223ee9d55827375
+      ubuntu-18.04:
+        inspec_download_url: https://packages.chef.io/files/stable/inspec/2.1.68/ubuntu/18.04/inspec_2.1.68-1_amd64.deb
+        inspec_download_sha256sum: bb411271af5275c26f0129a61230a1080d22a6e99eb0f1b52223ee9d55827375
+verifier:
+  name: inspec
+  directory: ../default/tests/
+  lint:
+    name: rubocop
+    enabled: true

+ 49 - 2
tasks/Amazon/rabbit.yml

@@ -1,13 +1,60 @@
 ---
 # tasks/Amazon/rabbit.yml: Deploy RabbitMQ
-# Specific to Amazon Linux AMI
+# Specific to Amazon Linux
 
   - include_vars: "{{ ansible_distribution }}.yml"
 
+  - name: Configure RabbitMQ/RabbitMQ-erlang GPG keys in the RPM keyring
+    rpm_key:
+      key: "{{ item }}"
+      state: present
+    with_items:
+      - https://dl.bintray.com/rabbitmq/Keys/rabbitmq-release-signing-key.asc
+      - https://dl.bintray.com/rabbitmq/Keys/rabbitmq-release-signing-key.asc
+    register: sensu_rabbitmq_import_key
+
+  - name: Add RabbitMQ's repo
+    yum_repository:
+      name: rabbitmq
+      description: rabbitmq
+      baseurl: "https://dl.bintray.com/rabbitmq/rpm/rabbitmq-server/v3.7.x/el/{{ epel_version }}"
+      gpgcheck: yes
+      gpgkey: https://dl.bintray.com/rabbitmq/Keys/rabbitmq-release-signing-key.asc
+      repo_gpgcheck: no
+
+  - name: Add RabbitMQ's Erlang repo
+    yum_repository:
+      name: rabbitmq-erlang
+      description: rabbitmq-erlang
+      baseurl: "https://dl.bintray.com/rabbitmq/rpm/erlang/19/el/{{ epel_version }}"
+      gpgcheck: yes
+      gpgkey: https://dl.bintray.com/rabbitmq/Keys/rabbitmq-release-signing-key.asc
+      repo_gpgcheck: no
+
+  # HACK: https://github.com/ansible/ansible/issues/20711#issuecomment-306260869
+  # Can be removed once we're running w/ a version of Ansible that has https://github.com/ansible/ansible/pull/35989
+  - name: Make yum cache to import GPG keys
+    command: "yum -q makecache -y --disablerepo='*' --enablerepo='{{ item }}'"
+    args:
+      warn: false
+    when: sensu_rabbitmq_import_key.changed
+    with_items:
+      - rabbitmq
+      - rabbitmq-erlang
+
+  # Hard dependency for rabbitmq-server, however, typically comes from EPEL, so
+  # we simply install it here, as we purposely disable epel when installing rabbitmq
+  # causing dependency issues during installs
+  - name: Ensure socat is installed
+    yum:
+      name: socat
+      state: present
+
   - name: Ensure Erlang & RabbitMQ are installed
     yum:
       name:
         - erlang
         - rabbitmq-server
       state: present
-      enablerepo: epel
+      enablerepo: rabbitmq,rabbitmq-erlang
+      disablerepo: '*'

+ 1 - 1
tasks/Amazon/redis.yml

@@ -6,7 +6,7 @@
 
   - name: Install EPEL repo
     yum:
-      name: epel-release
+      name: "{{ epel_repo_rpm }}"
       state: present
     when: enable_epel_repo
 

+ 28 - 3
tasks/CentOS/rabbit.yml

@@ -4,6 +4,15 @@
 
   - include_vars: "{{ ansible_distribution }}.yml"
 
+  - name: Configure RabbitMQ/RabbitMQ-erlang GPG keys in the RPM keyring
+    rpm_key:
+      key: "{{ item }}"
+      state: present
+    with_items:
+      - https://dl.bintray.com/rabbitmq/Keys/rabbitmq-release-signing-key.asc
+      - https://dl.bintray.com/rabbitmq/Keys/rabbitmq-release-signing-key.asc
+    register: sensu_rabbitmq_import_key
+
   - name: Add RabbitMQ's repo
     yum_repository:
       name: rabbitmq
@@ -22,6 +31,25 @@
       gpgkey: https://dl.bintray.com/rabbitmq/Keys/rabbitmq-release-signing-key.asc
       repo_gpgcheck: no
 
+  # HACK: https://github.com/ansible/ansible/issues/20711#issuecomment-306260869
+  # Can be removed once we're running w/ a version of Ansible that has https://github.com/ansible/ansible/pull/35989
+  - name: Make yum cache to import GPG keys
+    command: "yum -q makecache -y --disablerepo='*' --enablerepo='{{ item }}'"
+    args:
+      warn: false
+    when: sensu_rabbitmq_import_key.changed
+    with_items:
+      - rabbitmq
+      - rabbitmq-erlang
+
+  # Hard dependency for rabbitmq-server, however, typically comes from EPEL, so
+  # we simply install it here, as we purposely disable epel when installing rabbitmq
+  # causing dependency issues during installs
+  - name: Ensure socat is installed
+    yum:
+      name: socat
+      state: present
+
   - name: Ensure Erlang & RabbitMQ are installed
     yum:
       name:
@@ -30,6 +58,3 @@
       state: present
       enablerepo: rabbitmq,rabbitmq-erlang
       disablerepo: epel
-
-
-

+ 2 - 2
tasks/Ubuntu/rabbit.yml

@@ -11,7 +11,7 @@
 
   - name: Ensure the RabbitMQ APT repo is present
     apt_repository:
-      repo: "deb https://dl.bintray.com/rabbitmq/debian {{ ansible_distribution_release }} main"
+      repo: "{{ sensu_rabbitmq_repo }}"
       filename: rabbitmq
       state: present
       update_cache: true
@@ -23,7 +23,7 @@
 
   - name: Ensure the Erlang APT repo is present
     apt_repository:
-      repo: "deb https://packages.erlang-solutions.com/ubuntu {{ ansible_distribution_release }} contrib"
+      repo: "{{ sensu_rabbitmq_erlang_repo }}"
       filename: erlang
       state: present
       update_cache: true

+ 11 - 0
tasks/Ubuntu/redis.yml

@@ -9,6 +9,17 @@
       name: "{{ redis_pkg_name }}"
       state: "{{ redis_pkg_state }}"
       update_cache: true
+    register: sensu_ubuntu_redis_install
+
+    # BUG: On Ubuntu 14.04, when first installed, redis, will be started
+    # however, the /var/run/redis/redis-server.pid file gets lost during the restart
+    # causing the process to be orphaned from the init system.
+    # We manually stop it right after install to account for this.
+  - name: Stop redis manually
+    shell: kill $(pgrep redis-server)
+    when:
+      - sensu_ubuntu_redis_install is changed
+      - ansible_distribution_version == '14.04'
 
   - name: Ensure redis binds to accessible IP
     lineinfile:

+ 5 - 1
tasks/redis.yml

@@ -4,4 +4,8 @@
   - include: "{{ role_path }}/tasks/{{ ansible_distribution }}/redis.yml"
 
   - name: Ensure redis is running
-    service: name={{ redis_service_name }} state=started enabled=true
+    service:
+      name: "{{ redis_service_name }}"
+      pattern: /usr/bin/redis-server
+      state: started
+      enabled: true

+ 0 - 3
tests/.gitignore

@@ -1,3 +0,0 @@
-# Ignore provisioning artifacts
-data/
-*.retry

+ 0 - 4
tests/Vagrantfile

@@ -1,4 +0,0 @@
-vagrantfiles = %w[vms/Vagrantfile.centos7 vms/Vagrantfile.debian8 vms/Vagrantfile.ubuntu15 vms/Vagrantfile.freebsd10]
-vagrantfiles.each do |vagrantfile|
-  load File.expand_path(vagrantfile) if File.exists?(vagrantfile)
-end

+ 0 - 13
tests/provision.yml

@@ -1,13 +0,0 @@
----
-- hosts: all
-
-  vars:
-    sensu_ssl_client_cert: "data/dynamic/{{ ansible_hostname }}/etc/sensu/ssl_generation/sensu_ssl_tool/client/cert.pem"
-    sensu_ssl_client_key: "data/dynamic/{{ ansible_hostname }}/etc/sensu/ssl_generation/sensu_ssl_tool/client/key.pem"
-    sensu_ssl_server_cacert: "data/dynamic/{{ ansible_hostname }}/etc/sensu/ssl_generation/sensu_ssl_tool/sensu_ca/cacert.pem"
-    sensu_ssl_server_cert: "data/dynamic/{{ ansible_hostname }}/etc/sensu/ssl_generation/sensu_ssl_tool/server/cert.pem"
-    sensu_ssl_server_key: "data/dynamic/{{ ansible_hostname }}/etc/sensu/ssl_generation/sensu_ssl_tool/server/key.pem"
-
-
-  roles:
-    - ../../sensu.sensu

+ 0 - 21
tests/test.yml

@@ -1,21 +0,0 @@
----
-- hosts: all
-  pre_tasks:
-    - name: Add localhost to sensu_masters group
-      add_host:
-        name: localhost
-        groups: sensu_masters
-      changed_when: false
-
-  roles:
-    - role: role_under_test
-      sensu_master: true
-      sensu_include_dashboard: true
-      rabbitmq_server: true
-      redis_server: true
-      rabbitmq_host: localhost
-      redis_host: localhost
-      sensu_api_host: localhost
-      # Workaround for https://github.com/geerlingguy/docker-ubuntu1604-ansible/issues/5
-      ansible_default_ipv4:
-        address: 127.0.0.1

+ 0 - 45
tests/vms/Vagrantfile.centos7

@@ -1,45 +0,0 @@
-############
-# CentOS 7 #
-############
-Vagrant.configure(2) do | config |
-  config.ssh.insert_key = false
-  config.ssh.username = 'vagrant'
-  config.vm.provider :virtualbox do |vb|
-    vb.customize ["modifyvm", :id, "--memory", "2048"]
-  end
-
-  config.vm.define "centos7" do |centos7|
-    centos7.vm.hostname = "centos7.dev"
-    centos7.vm.box = "geerlingguy/centos7"
-    centos7.vm.network :private_network, ip: "192.168.40.4"
-    centos7.vm.network "forwarded_port", guest: 3000, host: 3001
-
-    # Ansible
-    config.vm.provision "ansible" do |ansible|
-      ansible.groups = {
-        "sensu_masters" => ["centos7"],
-        "rabbitmq_servers" => ["centos7"],
-        "redis_servers" => ["centos7"],
-      }
-
-      ansible.extra_vars = {
-        dynamic_data_store: "data/dynamic",
-        rabbitmq_host: "192.168.40.4",
-        rabbitmq_server: true,
-        redis_host: "192.168.40.4",
-        redis_server: true,
-        sensu_api_host: "192.168.40.4",
-        sensu_api_user_name: "admin",
-        sensu_api_password: "admin",
-        sensu_include_plugins: false,
-        sensu_include_dashboard: true,
-        sensu_master: true,
-        uchiwa_dc_name: "vagrant",
-        uchiwa_users: [{"username": "admin", "password": "admin"}]
-      }
-
-      ansible.sudo = true
-      ansible.playbook = "provision.yml"
-    end
-  end
-end

+ 0 - 45
tests/vms/Vagrantfile.debian8

@@ -1,45 +0,0 @@
-############
-# Debian 8 #
-############
-Vagrant.configure(2) do | config |
-  config.ssh.insert_key = false
-  config.ssh.username = 'vagrant'
-  config.vm.provider :virtualbox do |vb|
-    vb.customize ["modifyvm", :id, "--memory", "2048"]
-  end
-
-  config.vm.define "debian8" do |debian8|
-    debian8.vm.hostname = "debian8.dev"
-    debian8.vm.box = "debian/jessie64"
-    debian8.vm.network :private_network, ip: "192.168.40.5"
-    debian8.vm.network "forwarded_port", guest: 3000, host: 3002
-
-    # Ansible
-    config.vm.provision "ansible" do |ansible|
-      ansible.groups = {
-        "sensu_masters" => ["debian8"],
-        "rabbitmq_servers" => ["debian8"],
-        "redis_servers" => ["debian8"],
-      }
-
-      ansible.extra_vars = {
-        dynamic_data_store: "data/dynamic",
-        rabbitmq_host: "192.168.40.5",
-        rabbitmq_server: true,
-        redis_host: "192.168.40.5",
-        redis_server: true,
-        sensu_api_host: "192.168.40.5",
-        sensu_api_user_name: "admin",
-        sensu_api_password: "admin",
-        sensu_include_plugins: false,
-        sensu_include_dashboard: true,
-        sensu_master: true,
-        uchiwa_dc_name: "vagrant",
-        uchiwa_users: [{"username": "admin", "password": "admin"}]
-      }
-
-      ansible.sudo = true
-      ansible.playbook = "provision.yml"
-    end
-  end
-end

+ 0 - 52
tests/vms/Vagrantfile.freebsd10

@@ -1,52 +0,0 @@
-##############
-# FreeBSD 10 #
-##############
-Vagrant.configure(2) do | config |
-  config.ssh.insert_key = false
-  config.ssh.username = 'vagrant'
-  config.ssh.shell = '/bin/sh'
-  config.vm.provider :virtualbox do |vb|
-    vb.customize ["modifyvm", :id, "--memory", "2048"]
-  end
-
-  # Use rsync for shared folder
-  config.vm.synced_folder ".", "/vagrant", type: "rsync", id: "vagrant-root",
-                          rsync__args: ["--verbose", "--rsync-path='sudo rsync'", "--archive", "--delete", "-z"]
-
-  config.vm.define "freebsd10" do |freebsd10|
-    freebsd10.vm.hostname = "freebsd10.dev"
-    freebsd10.vm.box = "freebsd/FreeBSD-10.2-STABLE"
-    freebsd10.vm.base_mac = "72f28c4782fd"
-    freebsd10.vm.network :private_network, ip: "192.168.40.7"
-    freebsd10.vm.network "forwarded_port", guest: 3000, host: 3004
-  end
-
-  # Ansible
-  config.vm.provision "ansible" do |ansible|
-    ansible.groups = {
-      "sensu_masters" => ["freebsd10"],
-      "rabbitmq_servers" => ["freebsd10"],
-      "redis_servers" => ["freebsd10"],
-    }
-
-    ansible.extra_vars = {
-      ansible_python_interpreter: "/usr/local/bin/python2.7",
-      dynamic_data_store: "data/dynamic",
-      rabbitmq_host: "192.168.40.7",
-      rabbitmq_server: true,
-      redis_host: "192.168.40.7",
-      redis_server: true,
-      sensu_api_host: "192.168.40.7",
-      sensu_api_user_name: "admin",
-      sensu_api_password: "admin",
-      sensu_include_plugins: false,
-      sensu_include_dashboard: true,
-      sensu_master: true,
-      uchiwa_dc_name: "vagrant",
-      uchiwa_users: [{"username": "admin", "password": "admin"}]
-    }
-
-    ansible.sudo = true
-    ansible.playbook = "provision.yml"
-  end
-end

+ 0 - 45
tests/vms/Vagrantfile.ubuntu15

@@ -1,45 +0,0 @@
-################
-# Ubuntu 15.04 #
-################
-Vagrant.configure(2) do | config |
-  config.ssh.insert_key = false
-  config.ssh.username = 'vagrant'
-  config.vm.provider :virtualbox do |vb|
-    vb.customize ["modifyvm", :id, "--memory", "2048"]
-  end
-
-  config.vm.define "ubuntu15" do |ubuntu15|
-    ubuntu15.vm.hostname = "ubuntu15.dev"
-    ubuntu15.vm.box = "ubuntu/vivid64"
-    ubuntu15.vm.network :private_network, ip: "192.168.40.6"
-    ubuntu15.vm.network "forwarded_port", guest: 3000, host: 3003
-
-    # Ansible
-    config.vm.provision "ansible" do |ansible|
-      ansible.groups = {
-        "sensu_masters" => ["ubuntu15"],
-        "rabbitmq_servers" => ["ubuntu15"],
-        "redis_servers" => ["ubuntu15"],
-      }
-
-      ansible.extra_vars = {
-        dynamic_data_store: "data/dynamic",
-        rabbitmq_host: "192.168.40.6",
-        rabbitmq_server: true,
-        redis_host: "192.168.40.6",
-        redis_server: true,
-        sensu_api_host: "192.168.40.6",
-        sensu_api_user_name: "admin",
-        sensu_api_password: "admin",
-        sensu_include_plugins: false,
-        sensu_include_dashboard: true,
-        sensu_master: true,
-        uchiwa_dc_name: "vagrant",
-        uchiwa_users: [{"username": "admin", "password": "admin"}]
-      }
-
-      ansible.sudo = true
-      ansible.playbook = "provision.yml"
-    end
-  end
-end

+ 1 - 0
vars/Amazon.yml

@@ -9,3 +9,4 @@ sensu_yum_repo_url: "https://sensu.global.ssl.fastly.net/yum/{{epel_version}}/$b
 
 #Set this to false to disable the EPEL repo installation
 enable_epel_repo: true
+epel_repo_rpm: "https://dl.fedoraproject.org/pub/epel/epel-release-latest-{{epel_version}}.noarch.rpm"

+ 3 - 0
vars/Ubuntu.yml

@@ -5,3 +5,6 @@
 # redis server properties
 redis_pkg_name: redis-server
 redis_service_name: redis-server
+
+sensu_rabbitmq_repo: "deb https://dl.bintray.com/rabbitmq/debian {{ ansible_distribution_release }} main"
+sensu_rabbitmq_erlang_repo: "deb https://packages.erlang-solutions.com/ubuntu {{ ansible_distribution_release }} contrib"