diff --git a/.gitignore b/.gitignore
index 79f6256..8b56006 100644
--- a/.gitignore
+++ b/.gitignore
@@ -41,3 +41,5 @@ Desktop.ini
.ropeproject
_build/
*.sqlite3
+.idea/
+.vagrant/
\ No newline at end of file
diff --git a/LICENSE.txt b/LICENSE.txt
index 96e8baa..ec337c9 100644
--- a/LICENSE.txt
+++ b/LICENSE.txt
@@ -1,4 +1,4 @@
-Copyright (c) 2014, 2015 Jan Dittberner
+Copyright (c) 2014-2020 Jan Dittberner
Permission is hereby granted, free of charge, to any person
obtaining a copy of this software and associated documentation
diff --git a/Pipfile b/Pipfile
new file mode 100644
index 0000000..a05f5bc
--- /dev/null
+++ b/Pipfile
@@ -0,0 +1,22 @@
+[[source]]
+name = "pypi"
+url = "https://pypi.org/simple"
+verify_ssl = true
+
+[dev-packages]
+bpython = "*"
+coverage = "*"
+sqlparse = "*"
+releases = "*"
+Sphinx = "<1.6"
+
+[packages]
+amqp = "*"
+anyjson = "*"
+billiard = "*"
+celery = "<4"
+pytz = "*"
+mysqlclient = "*"
+
+[requires]
+python_version = "3.7"
diff --git a/Pipfile.lock b/Pipfile.lock
new file mode 100644
index 0000000..078ae56
--- /dev/null
+++ b/Pipfile.lock
@@ -0,0 +1,346 @@
+{
+ "_meta": {
+ "hash": {
+ "sha256": "e12c2f5bf781c832ced57da3552d8ae340e96644037227e4024a2a89ece78f60"
+ },
+ "pipfile-spec": 6,
+ "requires": {
+ "python_version": "3.7"
+ },
+ "sources": [
+ {
+ "name": "pypi",
+ "url": "https://pypi.org/simple",
+ "verify_ssl": true
+ }
+ ]
+ },
+ "default": {
+ "amqp": {
+ "hashes": [
+ "sha256:2dea4d16d073c902c3b89d9b96620fb6729ac0f7a923bbc777cb4ad827c0c61a",
+ "sha256:e0ed0ce6b8ffe5690a2e856c7908dc557e0e605283d6885dd1361d79f2928908"
+ ],
+ "index": "pypi",
+ "version": "==1.4.9"
+ },
+ "anyjson": {
+ "hashes": [
+ "sha256:37812d863c9ad3e35c0734c42e0bf0320ce8c3bed82cd20ad54cb34d158157ba"
+ ],
+ "index": "pypi",
+ "version": "==0.3.3"
+ },
+ "billiard": {
+ "hashes": [
+ "sha256:204e75d390ef8f839c30a93b696bd842c3941916e15921745d05edc2a83868ab",
+ "sha256:23cb71472712e96bff3e0d45763b7b8a99e5040385fffb96816028352c255682",
+ "sha256:692a2a5a55ee39a42bcb7557930e2541da85df9ea81c6e24827f63b80cd39d0b",
+ "sha256:82041dbaa62f7fde1464d7ab449978618a38b241b40c0d31dafabb36446635dc",
+ "sha256:958fc9f8fd5cc9b936b2cb9d96f02aa5ec3613ba13ee7f089c77ff0bcc368fac",
+ "sha256:c0cbe8d45ba8d8213ad68ef9a1881002a151569c9424d551634195a18c3a4160",
+ "sha256:ccfe0419eb5e49f27ad35cf06e75360af903df6d576c66cb8073246d4e023e5c",
+ "sha256:d4d2fed1a251ea58eed47b48db3778ebb92f5ff4407dc91869c6f41c3a9249d0"
+ ],
+ "index": "pypi",
+ "version": "==3.3.0.23"
+ },
+ "celery": {
+ "hashes": [
+ "sha256:5493e172ae817b81ba7d09443ada114886765a8ce02f16a56e6fac68d953a9b2",
+ "sha256:60211897aee321266ff043fe2b33eaac825dfe9f46843cf964fc97507a186334"
+ ],
+ "index": "pypi",
+ "version": "==3.1.26.post2"
+ },
+ "kombu": {
+ "hashes": [
+ "sha256:7ceab743e3e974f3e5736082e8cc514c009e254e646d6167342e0e192aee81a6",
+ "sha256:e064a00c66b4d1058cd2b0523fb8d98c82c18450244177b6c0f7913016642650"
+ ],
+ "version": "==3.0.37"
+ },
+ "mysqlclient": {
+ "hashes": [
+ "sha256:4c82187dd6ab3607150fbb1fa5ef4643118f3da122b8ba31c3149ddd9cf0cb39",
+ "sha256:9e6080a7aee4cc6a06b58b59239f20f1d259c1d2fddf68ddeed242d2311c7087",
+ "sha256:f3fdaa9a38752a3b214a6fe79d7cae3653731a53e577821f9187e67cbecb2e16",
+ "sha256:f646f8d17d02be0872291f258cce3813497bc7888cd4712a577fd1e719b2f213"
+ ],
+ "index": "pypi",
+ "version": "==1.4.6"
+ },
+ "pytz": {
+ "hashes": [
+ "sha256:1c557d7d0e871de1f5ccd5833f60fb2550652da6be2693c1e02300743d21500d",
+ "sha256:b02c06db6cf09c12dd25137e563b31700d3b80fcc4ad23abb7a315f2789819be"
+ ],
+ "index": "pypi",
+ "version": "==2019.3"
+ }
+ },
+ "develop": {
+ "alabaster": {
+ "hashes": [
+ "sha256:446438bdcca0e05bd45ea2de1668c1d9b032e1a9154c2c259092d77031ddd359",
+ "sha256:a661d72d58e6ea8a57f7a86e37d86716863ee5e92788398526d58b26a4e4dc02"
+ ],
+ "version": "==0.7.12"
+ },
+ "babel": {
+ "hashes": [
+ "sha256:1aac2ae2d0d8ea368fa90906567f5c08463d98ade155c0c4bfedd6a0f7160e38",
+ "sha256:d670ea0b10f8b723672d3a6abeb87b565b244da220d76b4dba1b66269ec152d4"
+ ],
+ "version": "==2.8.0"
+ },
+ "blessings": {
+ "hashes": [
+ "sha256:98e5854d805f50a5b58ac2333411b0482516a8210f23f43308baeb58d77c157d",
+ "sha256:b1fdd7e7a675295630f9ae71527a8ebc10bfefa236b3d6aa4932ee4462c17ba3",
+ "sha256:caad5211e7ba5afe04367cdd4cfc68fa886e2e08f6f35e76b7387d2109ccea6e"
+ ],
+ "version": "==1.7"
+ },
+ "bpython": {
+ "hashes": [
+ "sha256:56cc20dbe568c98c81de4990fddf5862c0d8d3ab0ad1cf7057988abc5f7686c2",
+ "sha256:c7c6de7309311fd607d6cb47ef7e2d6e065d0a299199d51220d57732850a3efa"
+ ],
+ "index": "pypi",
+ "version": "==0.18"
+ },
+ "certifi": {
+ "hashes": [
+ "sha256:017c25db2a153ce562900032d5bc68e9f191e44e9a0f762f373977de9df1fbb3",
+ "sha256:25b64c7da4cd7479594d035c08c2d809eb4aab3a26e5a990ea98cc450c320f1f"
+ ],
+ "version": "==2019.11.28"
+ },
+ "chardet": {
+ "hashes": [
+ "sha256:84ab92ed1c4d4f16916e05906b6b75a6c0fb5db821cc65e70cbd64a3e2a5eaae",
+ "sha256:fc323ffcaeaed0e0a02bf4d117757b98aed530d9ed4531e3e15460124c106691"
+ ],
+ "version": "==3.0.4"
+ },
+ "coverage": {
+ "hashes": [
+ "sha256:15cf13a6896048d6d947bf7d222f36e4809ab926894beb748fc9caa14605d9c3",
+ "sha256:1daa3eceed220f9fdb80d5ff950dd95112cd27f70d004c7918ca6dfc6c47054c",
+ "sha256:1e44a022500d944d42f94df76727ba3fc0a5c0b672c358b61067abb88caee7a0",
+ "sha256:25dbf1110d70bab68a74b4b9d74f30e99b177cde3388e07cc7272f2168bd1477",
+ "sha256:3230d1003eec018ad4a472d254991e34241e0bbd513e97a29727c7c2f637bd2a",
+ "sha256:3dbb72eaeea5763676a1a1efd9b427a048c97c39ed92e13336e726117d0b72bf",
+ "sha256:5012d3b8d5a500834783689a5d2292fe06ec75dc86ee1ccdad04b6f5bf231691",
+ "sha256:51bc7710b13a2ae0c726f69756cf7ffd4362f4ac36546e243136187cfcc8aa73",
+ "sha256:527b4f316e6bf7755082a783726da20671a0cc388b786a64417780b90565b987",
+ "sha256:722e4557c8039aad9592c6a4213db75da08c2cd9945320220634f637251c3894",
+ "sha256:76e2057e8ffba5472fd28a3a010431fd9e928885ff480cb278877c6e9943cc2e",
+ "sha256:77afca04240c40450c331fa796b3eab6f1e15c5ecf8bf2b8bee9706cd5452fef",
+ "sha256:7afad9835e7a651d3551eab18cbc0fdb888f0a6136169fbef0662d9cdc9987cf",
+ "sha256:9bea19ac2f08672636350f203db89382121c9c2ade85d945953ef3c8cf9d2a68",
+ "sha256:a8b8ac7876bc3598e43e2603f772d2353d9931709345ad6c1149009fd1bc81b8",
+ "sha256:b0840b45187699affd4c6588286d429cd79a99d509fe3de0f209594669bb0954",
+ "sha256:b26aaf69713e5674efbde4d728fb7124e429c9466aeaf5f4a7e9e699b12c9fe2",
+ "sha256:b63dd43f455ba878e5e9f80ba4f748c0a2156dde6e0e6e690310e24d6e8caf40",
+ "sha256:be18f4ae5a9e46edae3f329de2191747966a34a3d93046dbdf897319923923bc",
+ "sha256:c312e57847db2526bc92b9bfa78266bfbaabac3fdcd751df4d062cd4c23e46dc",
+ "sha256:c60097190fe9dc2b329a0eb03393e2e0829156a589bd732e70794c0dd804258e",
+ "sha256:c62a2143e1313944bf4a5ab34fd3b4be15367a02e9478b0ce800cb510e3bbb9d",
+ "sha256:cc1109f54a14d940b8512ee9f1c3975c181bbb200306c6d8b87d93376538782f",
+ "sha256:cd60f507c125ac0ad83f05803063bed27e50fa903b9c2cfee3f8a6867ca600fc",
+ "sha256:d513cc3db248e566e07a0da99c230aca3556d9b09ed02f420664e2da97eac301",
+ "sha256:d649dc0bcace6fcdb446ae02b98798a856593b19b637c1b9af8edadf2b150bea",
+ "sha256:d7008a6796095a79544f4da1ee49418901961c97ca9e9d44904205ff7d6aa8cb",
+ "sha256:da93027835164b8223e8e5af2cf902a4c80ed93cb0909417234f4a9df3bcd9af",
+ "sha256:e69215621707119c6baf99bda014a45b999d37602cb7043d943c76a59b05bf52",
+ "sha256:ea9525e0fef2de9208250d6c5aeeee0138921057cd67fcef90fbed49c4d62d37",
+ "sha256:fca1669d464f0c9831fd10be2eef6b86f5ebd76c724d1e0706ebdff86bb4adf0"
+ ],
+ "index": "pypi",
+ "version": "==5.0.3"
+ },
+ "curtsies": {
+ "hashes": [
+ "sha256:9169d734323a1356e7563b1ca0bff3c5358c1b1dcce52506a9d4d8ab8a8f5604",
+ "sha256:b2c913a8113c4382e1a221679f2338139b112839deb16c00ee873e57a4b33bd4"
+ ],
+ "version": "==0.3.1"
+ },
+ "docutils": {
+ "hashes": [
+ "sha256:0c5b78adfbf7762415433f5515cd5c9e762339e23369dbe8000d84a4bf4ab3af",
+ "sha256:c2de3a60e9e7d07be26b7f2b00ca0309c207e06c100f9cc2a94931fc75a478fc"
+ ],
+ "version": "==0.16"
+ },
+ "greenlet": {
+ "hashes": [
+ "sha256:000546ad01e6389e98626c1367be58efa613fa82a1be98b0c6fc24b563acc6d0",
+ "sha256:0d48200bc50cbf498716712129eef819b1729339e34c3ae71656964dac907c28",
+ "sha256:23d12eacffa9d0f290c0fe0c4e81ba6d5f3a5b7ac3c30a5eaf0126bf4deda5c8",
+ "sha256:37c9ba82bd82eb6a23c2e5acc03055c0e45697253b2393c9a50cef76a3985304",
+ "sha256:51155342eb4d6058a0ffcd98a798fe6ba21195517da97e15fca3db12ab201e6e",
+ "sha256:51503524dd6f152ab4ad1fbd168fc6c30b5795e8c70be4410a64940b3abb55c0",
+ "sha256:7457d685158522df483196b16ec648b28f8e847861adb01a55d41134e7734122",
+ "sha256:8041e2de00e745c0e05a502d6e6db310db7faa7c979b3a5877123548a4c0b214",
+ "sha256:81fcd96a275209ef117e9ec91f75c731fa18dcfd9ffaa1c0adbdaa3616a86043",
+ "sha256:853da4f9563d982e4121fed8c92eea1a4594a2299037b3034c3c898cb8e933d6",
+ "sha256:8b4572c334593d449113f9dc8d19b93b7b271bdbe90ba7509eb178923327b625",
+ "sha256:9416443e219356e3c31f1f918a91badf2e37acf297e2fa13d24d1cc2380f8fbc",
+ "sha256:9854f612e1b59ec66804931df5add3b2d5ef0067748ea29dc60f0efdcda9a638",
+ "sha256:99a26afdb82ea83a265137a398f570402aa1f2b5dfb4ac3300c026931817b163",
+ "sha256:a19bf883b3384957e4a4a13e6bd1ae3d85ae87f4beb5957e35b0be287f12f4e4",
+ "sha256:a9f145660588187ff835c55a7d2ddf6abfc570c2651c276d3d4be8a2766db490",
+ "sha256:ac57fcdcfb0b73bb3203b58a14501abb7e5ff9ea5e2edfa06bb03035f0cff248",
+ "sha256:bcb530089ff24f6458a81ac3fa699e8c00194208a724b644ecc68422e1111939",
+ "sha256:beeabe25c3b704f7d56b573f7d2ff88fc99f0138e43480cecdfcaa3b87fe4f87",
+ "sha256:d634a7ea1fc3380ff96f9e44d8d22f38418c1c381d5fac680b272d7d90883720",
+ "sha256:d97b0661e1aead761f0ded3b769044bb00ed5d33e1ec865e891a8b128bf7c656",
+ "sha256:e538b8dae561080b542b0f5af64d47ef859f22517f7eca617bb314e0e03fd7ef"
+ ],
+ "version": "==0.4.15"
+ },
+ "idna": {
+ "hashes": [
+ "sha256:7588d1c14ae4c77d74036e8c22ff447b26d0fde8f007354fd48a7814db15b7cb",
+ "sha256:a068a21ceac8a4d63dbfd964670474107f541babbd2250d61922f029858365fa"
+ ],
+ "version": "==2.9"
+ },
+ "imagesize": {
+ "hashes": [
+ "sha256:6965f19a6a2039c7d48bca7dba2473069ff854c36ae6f19d2cde309d998228a1",
+ "sha256:b1f6b5a4eab1f73479a50fb79fcf729514a900c341d8503d62a62dbc4127a2b1"
+ ],
+ "version": "==1.2.0"
+ },
+ "jinja2": {
+ "hashes": [
+ "sha256:93187ffbc7808079673ef52771baa950426fd664d3aad1d0fa3e95644360e250",
+ "sha256:b0eaf100007721b5c16c1fc1eecb87409464edc10469ddc9a22a27a99123be49"
+ ],
+ "version": "==2.11.1"
+ },
+ "markupsafe": {
+ "hashes": [
+ "sha256:00bc623926325b26bb9605ae9eae8a215691f33cae5df11ca5424f06f2d1f473",
+ "sha256:09027a7803a62ca78792ad89403b1b7a73a01c8cb65909cd876f7fcebd79b161",
+ "sha256:09c4b7f37d6c648cb13f9230d847adf22f8171b1ccc4d5682398e77f40309235",
+ "sha256:1027c282dad077d0bae18be6794e6b6b8c91d58ed8a8d89a89d59693b9131db5",
+ "sha256:13d3144e1e340870b25e7b10b98d779608c02016d5184cfb9927a9f10c689f42",
+ "sha256:24982cc2533820871eba85ba648cd53d8623687ff11cbb805be4ff7b4c971aff",
+ "sha256:29872e92839765e546828bb7754a68c418d927cd064fd4708fab9fe9c8bb116b",
+ "sha256:43a55c2930bbc139570ac2452adf3d70cdbb3cfe5912c71cdce1c2c6bbd9c5d1",
+ "sha256:46c99d2de99945ec5cb54f23c8cd5689f6d7177305ebff350a58ce5f8de1669e",
+ "sha256:500d4957e52ddc3351cabf489e79c91c17f6e0899158447047588650b5e69183",
+ "sha256:535f6fc4d397c1563d08b88e485c3496cf5784e927af890fb3c3aac7f933ec66",
+ "sha256:596510de112c685489095da617b5bcbbac7dd6384aeebeda4df6025d0256a81b",
+ "sha256:62fe6c95e3ec8a7fad637b7f3d372c15ec1caa01ab47926cfdf7a75b40e0eac1",
+ "sha256:6788b695d50a51edb699cb55e35487e430fa21f1ed838122d722e0ff0ac5ba15",
+ "sha256:6dd73240d2af64df90aa7c4e7481e23825ea70af4b4922f8ede5b9e35f78a3b1",
+ "sha256:717ba8fe3ae9cc0006d7c451f0bb265ee07739daf76355d06366154ee68d221e",
+ "sha256:79855e1c5b8da654cf486b830bd42c06e8780cea587384cf6545b7d9ac013a0b",
+ "sha256:7c1699dfe0cf8ff607dbdcc1e9b9af1755371f92a68f706051cc8c37d447c905",
+ "sha256:88e5fcfb52ee7b911e8bb6d6aa2fd21fbecc674eadd44118a9cc3863f938e735",
+ "sha256:8defac2f2ccd6805ebf65f5eeb132adcf2ab57aa11fdf4c0dd5169a004710e7d",
+ "sha256:98c7086708b163d425c67c7a91bad6e466bb99d797aa64f965e9d25c12111a5e",
+ "sha256:9add70b36c5666a2ed02b43b335fe19002ee5235efd4b8a89bfcf9005bebac0d",
+ "sha256:9bf40443012702a1d2070043cb6291650a0841ece432556f784f004937f0f32c",
+ "sha256:ade5e387d2ad0d7ebf59146cc00c8044acbd863725f887353a10df825fc8ae21",
+ "sha256:b00c1de48212e4cc9603895652c5c410df699856a2853135b3967591e4beebc2",
+ "sha256:b1282f8c00509d99fef04d8ba936b156d419be841854fe901d8ae224c59f0be5",
+ "sha256:b2051432115498d3562c084a49bba65d97cf251f5a331c64a12ee7e04dacc51b",
+ "sha256:ba59edeaa2fc6114428f1637ffff42da1e311e29382d81b339c1817d37ec93c6",
+ "sha256:c8716a48d94b06bb3b2524c2b77e055fb313aeb4ea620c8dd03a105574ba704f",
+ "sha256:cd5df75523866410809ca100dc9681e301e3c27567cf498077e8551b6d20e42f",
+ "sha256:cdb132fc825c38e1aeec2c8aa9338310d29d337bebbd7baa06889d09a60a1fa2",
+ "sha256:e249096428b3ae81b08327a63a485ad0878de3fb939049038579ac0ef61e17e7",
+ "sha256:e8313f01ba26fbbe36c7be1966a7b7424942f670f38e666995b88d012765b9be"
+ ],
+ "version": "==1.1.1"
+ },
+ "pygments": {
+ "hashes": [
+ "sha256:2a3fe295e54a20164a9df49c75fa58526d3be48e14aceba6d6b1e8ac0bfd6f1b",
+ "sha256:98c8aa5a9f778fcd1026a17361ddaf7330d1b7c62ae97c3bb0ae73e0b9b6b0fe"
+ ],
+ "version": "==2.5.2"
+ },
+ "pytz": {
+ "hashes": [
+ "sha256:1c557d7d0e871de1f5ccd5833f60fb2550652da6be2693c1e02300743d21500d",
+ "sha256:b02c06db6cf09c12dd25137e563b31700d3b80fcc4ad23abb7a315f2789819be"
+ ],
+ "index": "pypi",
+ "version": "==2019.3"
+ },
+ "releases": {
+ "hashes": [
+ "sha256:555ae4c97a671a420281c1c782e9236be25157b449fdf20b4c4b293fe93db2f1",
+ "sha256:cb3435ba372a6807433800fbe473760cfa781171513f670f3c4b76983ac80f18"
+ ],
+ "index": "pypi",
+ "version": "==1.6.3"
+ },
+ "requests": {
+ "hashes": [
+ "sha256:43999036bfa82904b6af1d99e4882b560e5e2c68e5c4b0aa03b655f3d7d73fee",
+ "sha256:b3f43d496c6daba4493e7c431722aeb7dbc6288f52a6e04e7b6023b0247817e6"
+ ],
+ "version": "==2.23.0"
+ },
+ "semantic-version": {
+ "hashes": [
+ "sha256:2a4328680073e9b243667b201119772aefc5fc63ae32398d6afafff07c4f54c0",
+ "sha256:2d06ab7372034bcb8b54f2205370f4aa0643c133b7e6dbd129c5200b83ab394b"
+ ],
+ "version": "==2.6.0"
+ },
+ "six": {
+ "hashes": [
+ "sha256:236bdbdce46e6e6a3d61a337c0f8b763ca1e8717c03b369e87a7ec7ce1319c0a",
+ "sha256:8f3cd2e254d8f793e7f3d6d9df77b92252b52637291d0f0da013c76ea2724b6c"
+ ],
+ "version": "==1.14.0"
+ },
+ "snowballstemmer": {
+ "hashes": [
+ "sha256:209f257d7533fdb3cb73bdbd24f436239ca3b2fa67d56f6ff88e86be08cc5ef0",
+ "sha256:df3bac3df4c2c01363f3dd2cfa78cce2840a79b9f1c2d2de9ce8d31683992f52"
+ ],
+ "version": "==2.0.0"
+ },
+ "sphinx": {
+ "hashes": [
+ "sha256:565a72dd39dd6ea2e8c548d34c127c981e4bcaead69a2c456a6e33ef69151ace",
+ "sha256:9d93711a0f71c2a21ee44e4fd844f9990b679c9eef951f60d22b19ad9e6e929d"
+ ],
+ "index": "pypi",
+ "version": "==1.5.6"
+ },
+ "sqlparse": {
+ "hashes": [
+ "sha256:022fb9c87b524d1f7862b3037e541f68597a730a8843245c349fc93e1643dc4e",
+ "sha256:e162203737712307dfe78860cc56c8da8a852ab2ee33750e33aeadf38d12c548"
+ ],
+ "index": "pypi",
+ "version": "==0.3.1"
+ },
+ "urllib3": {
+ "hashes": [
+ "sha256:2f3db8b19923a873b3e5256dc9c2dedfa883e33d87c690d9c7913e1f40673cdc",
+ "sha256:87716c2d2a7121198ebcb7ce7cccf6ce5e9ba539041cfbaeecfb641dc0bf6acc"
+ ],
+ "version": "==1.25.8"
+ },
+ "wcwidth": {
+ "hashes": [
+ "sha256:8fd29383f539be45b20bd4df0dc29c20ba48654a41e661925e612311e9f3c603",
+ "sha256:f28b3e8a6483e5d49e7f8949ac1a78314e740333ae305b4ba5defd3e74fb37a8"
+ ],
+ "version": "==0.1.8"
+ }
+ }
+}
diff --git a/Vagrantfile b/Vagrantfile
new file mode 100644
index 0000000..9eef7bb
--- /dev/null
+++ b/Vagrantfile
@@ -0,0 +1,27 @@
+# -*- mode: ruby -*-
+# vi: set ft=ruby :
+
+Vagrant.configure(2) do |config|
+ config.vm.box = "debian/contrib-jessie64"
+
+ config.vm.hostname = "gvamysql.local"
+ config.vm.network "private_network", ip: "172.16.3.6"
+
+ config.vm.synced_folder "../gvasalt/states/", "/srv/salt/"
+ config.vm.synced_folder "../gvasalt/pillar/", "/srv/pillar/"
+
+ config.vm.provider "virtualbox" do |vb|
+ # vb.gui = true
+ vb.memory = "512"
+ end
+
+ config.vm.provision :salt do |salt|
+ salt.bootstrap_script = "salt/bootstrap.sh"
+ salt.minion_id = "gvamysql"
+ salt.masterless = true
+ salt.run_highstate = true
+ salt.verbose = true
+ salt.colorize = true
+ salt.log_level = "warning"
+ end
+end
\ No newline at end of file
diff --git a/docs/changelog.rst b/docs/changelog.rst
index addc52c..91375cd 100644
--- a/docs/changelog.rst
+++ b/docs/changelog.rst
@@ -1,8 +1,14 @@
Changelog
=========
+* :release:`0.1.2 <2020-02-29>`
+* :bug:`-` Update dependencies for Debian Buster compatibility
+* :support:`-` Add `Pipfile` and `Pipfile.lock` for more modern dependency
+ management
+
* :release:`0.1.1 <2019-03-22>`
* :bug:`-` Remove fixed kombu version due to incompatibility with current
Python 2.7, update amqp to 1.4.9
+
* :release:`0.1.0 <2015-01-04>`
* :feature:`-` initial project setup
diff --git a/docs/conf.py b/docs/conf.py
index ee8ec46..cc2f2b6 100644
--- a/docs/conf.py
+++ b/docs/conf.py
@@ -20,6 +20,13 @@ import os
# documentation root, use os.path.abspath to make it absolute, like shown here.
sys.path.insert(0, os.path.abspath(os.path.join('..', 'gvamysql')))
+os.environ['GVAMYSQL_BROKER_URL'] = 'amqp://'
+os.environ['GVAMYSQL_DBADMIN_HOST'] = 'localhost'
+os.environ['GVAMYSQL_DBADMIN_PORT'] = "3306"
+os.environ['GVAMYSQL_DBADMIN_USER'] = "gvamysql"
+os.environ['GVAMYSQL_DBADMIN_PASSWORD'] = "sUp3rS3cr3t"
+
+
# -- General configuration -----------------------------------------------------
# If your documentation needs a minimal Sphinx version, state it here.
@@ -32,9 +39,9 @@ extensions = ['releases', 'sphinx.ext.autodoc', 'celery.contrib.sphinx']
# Add any paths that contain templates here, relative to this directory.
templates_path = ['_templates']
-releases_issue_uri = 'https://dev.gnuviech-server.de/gvamysql/ticket/%s'
+releases_issue_uri = 'https://git.dittberner.info/gnuviech/gvamysql/issues/%s'
-releases_release_uri = 'https://dev.gnuviech-server.de/gvamysql/milestone/%s'
+releases_release_uri = 'https://git.dittberner.info/gnuviech/gvamysql/src/tag/%s'
# The suffix of source filenames.
source_suffix = '.rst'
@@ -47,7 +54,7 @@ master_doc = 'index'
# General information about the project.
project = u'gvamysql'
-copyright = u'2014, 2015 Jan Dittberner'
+copyright = u'2014-2020 Jan Dittberner'
# The version info for the project you're documenting, acts as replacement for
# |version| and |release|, also used in various other places throughout the
@@ -56,7 +63,7 @@ copyright = u'2014, 2015 Jan Dittberner'
# The short X.Y version.
version = '0.1'
# The full version, including alpha/beta/rc tags.
-release = '0.1.0'
+release = '0.1.2'
# The language for content autogenerated by Sphinx. Refer to documentation
# for a list of supported languages.
diff --git a/docs/install.rst b/docs/install.rst
index 06da90c..9a57ce6 100644
--- a/docs/install.rst
+++ b/docs/install.rst
@@ -7,64 +7,17 @@ Install
Working Environment
===================
-You have several options in setting up your working environment. We recommend
-using virtualenv to separate the dependencies of your project from your
-system's python environment. If on Linux or Mac OS X, you can also use
-virtualenvwrapper to help manage multiple virtualenvs across different
-projects.
+To get a running work environment use `pipenv`_.
-.. index:: virtualenv
+.. _pipenv: https://pipenv.kennethreitz.org/en/latest/
-Virtualenv Only
----------------
-
-First, make sure you are using `virtualenv`_. Once that's installed, create
-your virtualenv:
+To get started install `pip` and `pipenv` and use `pipenv install --dev`:
.. code-block:: sh
- $ virtualenv --distribute gvamysql
-
-.. _virtualenv: https://virtualenv.pypa.io/en/latest/
-
-You will also need to ensure that the virtualenv has the project directory
-added to the path.
-
-.. index:: virtualenvwrapper
-
-Virtualenv with virtualenvwrapper
-------------------------------------
-
-In Linux and Mac OSX, you can install `virtualenvwrapper
-`_, which will take care
-of managing your virtual environments and adding the project path to the
-`site-directory` for you:
-
-.. code-block:: sh
-
- $ mkdir gvamysql
- $ mkvirtualenv -a gvamysql gvamysql-dev
- $ cd gvamysql && add2virtualenv `pwd`
-
-
-.. index:: pip, requirements, dependencies
-
-Installation of Dependencies
-=============================
-
-Depending on where you are installing dependencies:
-
-In development:
-
-.. code-block:: sh
-
- $ pip install -r requirements/local.txt
-
-For production:
-
-.. code-block:: sh
-
- $ pip install -r requirements.txt
+ $ apt install python3-pip
+ $ python3 -m pip install --user -U pipenv
+ $ pipenv install --dev
.. index:: celery, worker, file queue
@@ -78,6 +31,6 @@ into the gvamysql directory and run the celery worker with:
.. code-block:: sh
$ cd gvamysql
- $ celery -A gvamysql worker -Q mysql -l info
+ $ pipenv run celery -A gvamysql worker -Q mysql -l info
.. _Celery: http://www.celeryproject.org/
diff --git a/requirements/base.txt b/requirements/base.txt
index f44a010..362a204 100644
--- a/requirements/base.txt
+++ b/requirements/base.txt
@@ -1,7 +1,7 @@
amqp==1.4.9
bpython==0.13.1
anyjson==0.3.3
-billiard==3.3.0.19
-celery==3.1.17
-pytz==2014.10
-mysqlclient==1.3.4
+billiard==3.3.0.23
+celery==3.1.26.post2
+pytz==2019.3
+mysqlclient==1.4.6
diff --git a/salt/bootstrap.sh b/salt/bootstrap.sh
new file mode 100755
index 0000000..db9e6d4
--- /dev/null
+++ b/salt/bootstrap.sh
@@ -0,0 +1,38 @@
+#!/bin/sh -
+
+echo "deb http://httpredir.debian.org/debian jessie-backports main" >/etc/apt/sources.list.d/backports.list
+
+apt-get update
+apt-get install -y -t jessie-backports python-cryptography
+
+# We just download the bootstrap script by default and execute that.
+if [ -x /usr/bin/fetch ]; then
+ /usr/bin/fetch -o - https://raw.githubusercontent.com/saltstack/salt-bootstrap/stable/bootstrap-salt.sh | sh -s -- "$@"
+elif [ -x /usr/bin/curl ]; then
+ /usr/bin/curl -L https://raw.githubusercontent.com/saltstack/salt-bootstrap/stable/bootstrap-salt.sh | sh -s -- "$@"
+else
+ python \
+ -c 'import urllib; print urllib.urlopen("https://raw.githubusercontent.com/saltstack/salt-bootstrap/stable/bootstrap-salt.sh").read()' \
+ | sh -s -- "$@"
+fi
+
+cat >/etc/salt/minion </etc/salt/grains <