diff --git a/Pipfile b/Pipfile index f1799b9..3b5b582 100644 --- a/Pipfile +++ b/Pipfile @@ -11,4 +11,4 @@ name = "pypi" [packages] -ansible = "==2.4.0.0" \ No newline at end of file +ansible = "==2.9.0.0" \ No newline at end of file diff --git a/Pipfile.lock b/Pipfile.lock deleted file mode 100644 index cd590dc..0000000 --- a/Pipfile.lock +++ /dev/null @@ -1,238 +0,0 @@ -{ - "_meta": { - "hash": { - "sha256": "5e3ab379ececd07b53a4358359347ad15d8b52a1450667be72eb7c2a01c01487" - }, - "pipfile-spec": 6, - "requires": {}, - "sources": [ - { - "name": "pypi", - "url": "https://pypi.python.org/simple", - "verify_ssl": true - } - ] - }, - "default": { - "ansible": { - "hashes": [ - "sha256:1a276fee7f72d4e6601a7994879e8467edb763dacc3e215258cfe71350b77c76" - ], - "index": "pypi", - "version": "==2.4.0.0" - }, - "asn1crypto": { - "hashes": [ - "sha256:2f1adbb7546ed199e3c90ef23ec95c5cf3585bac7d11fb7eb562a3fe89c64e87", - "sha256:9d5c20441baf0cb60a4ac34cc447c6c189024b6b4c6cd7877034f4965c464e49" - ], - "version": "==0.24.0" - }, - "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:63e06ffdaf4054a89757a3a1ab07f1b922daf911743114a54f7c561b9e1baa58", - "sha256:67ed1a374c9155ec0840214ce804616de49c3df9c5bc66740687c1c9b1cd9e8d", - "sha256:6b662a5669186439f4f583636c8d6ea77cf92f7cfe6aae8d22edf16c36840574", - "sha256:6efd9ca20aefbaf2e7e6817a2c6ed4a50ff6900fafdea1bcb1d0e9471743b144", - "sha256:8569844a5d8e1fdde4d7712a05ab2e6061343ac34af6e7e3d7935b2bd1907bfd", - "sha256:8629ea6a8a59f865add1d6a87464c3c676e60101b8d16ef404d0a031424a8491", - "sha256:988cac675e25133d01a78f2286189c1f01974470817a33eaf4cfee573cfb72a5", - "sha256:9a6fedda73aba1568962f7543a1f586051c54febbc74e87769bad6a4b8587c39", - "sha256:9eced8962ce3b7124fe20fd358cf8c7470706437fa064b9874f849ad4c5866fc", - "sha256:a005ed6163490988711ff732386b08effcbf8df62ae93dd1e5bda0714fad8afb", - "sha256:ae35dbcb6b011af6c840893b32399252d81ff57d52c13e12422e16b5fea1d0fb", - "sha256:b1e8491c6740f21b37cca77bc64677696a3fb9f32360794d57fa8477b7329eda", - "sha256:c906bdb482162e9ef48eea9f8c0d967acceb5c84f2d25574c7d2a58d04861df1", - "sha256:cb18ffdc861dbb244f14be32c47ab69604d0aca415bee53485fcea4f8e93d5ef", - "sha256:cc2f24dc1c6c88c56248e93f28d439ee4018338567b0bbb490ea26a381a29b1e", - "sha256:d860c7fff18d49e20339fc6dffc2d485635e36d4b2cccf58f45db815b64100b4", - "sha256:d86da365dda59010ba0d1ac45aa78390f56bf7f992e65f70b3b081d5e5257b09", - "sha256:e22f0997622e1ceec834fd25947dc2ee2962c2133ea693d61805bc867abaf7ea", - "sha256:f2fe545d27a619a552396533cddf70d83cecd880a611cdfdbb87ca6aec52f66b", - "sha256:f425e925485b3be48051f913dbe17e08e8c48588fdf44a26b8b14067041c0da6", - "sha256:f7fd3ed3745fe6e81e28dc3b3d76cce31525a91f32a387e1febd6b982caf8cdb", - "sha256:f9210820ee4818d84658ed7df16a7f30c9fba7d8b139959950acef91745cc0f7" - ], - "version": "==3.1.4" - }, - "cffi": { - "hashes": [ - "sha256:151b7eefd035c56b2b2e1eb9963c90c6302dc15fbd8c1c0a83a163ff2c7d7743", - "sha256:1553d1e99f035ace1c0544050622b7bc963374a00c467edafac50ad7bd276aef", - "sha256:1b0493c091a1898f1136e3f4f991a784437fac3673780ff9de3bcf46c80b6b50", - "sha256:2ba8a45822b7aee805ab49abfe7eec16b90587f7f26df20c71dd89e45a97076f", - "sha256:3bb6bd7266598f318063e584378b8e27c67de998a43362e8fce664c54ee52d30", - "sha256:3c85641778460581c42924384f5e68076d724ceac0f267d66c757f7535069c93", - "sha256:3eb6434197633b7748cea30bf0ba9f66727cdce45117a712b29a443943733257", - "sha256:495c5c2d43bf6cebe0178eb3e88f9c4aa48d8934aa6e3cddb865c058da76756b", - "sha256:4c91af6e967c2015729d3e69c2e51d92f9898c330d6a851bf8f121236f3defd3", - "sha256:57b2533356cb2d8fac1555815929f7f5f14d68ac77b085d2326b571310f34f6e", - "sha256:770f3782b31f50b68627e22f91cb182c48c47c02eb405fd689472aa7b7aa16dc", - "sha256:79f9b6f7c46ae1f8ded75f68cf8ad50e5729ed4d590c74840471fc2823457d04", - "sha256:7a33145e04d44ce95bcd71e522b478d282ad0eafaf34fe1ec5bbd73e662f22b6", - "sha256:857959354ae3a6fa3da6651b966d13b0a8bed6bbc87a0de7b38a549db1d2a359", - "sha256:87f37fe5130574ff76c17cab61e7d2538a16f843bb7bca8ebbc4b12de3078596", - "sha256:95d5251e4b5ca00061f9d9f3d6fe537247e145a8524ae9fd30a2f8fbce993b5b", - "sha256:9d1d3e63a4afdc29bd76ce6aa9d58c771cd1599fbba8cf5057e7860b203710dd", - "sha256:a36c5c154f9d42ec176e6e620cb0dd275744aa1d804786a71ac37dc3661a5e95", - "sha256:a6a5cb8809091ec9ac03edde9304b3ad82ad4466333432b16d78ef40e0cce0d5", - "sha256:ae5e35a2c189d397b91034642cb0eab0e346f776ec2eb44a49a459e6615d6e2e", - "sha256:b0f7d4a3df8f06cf49f9f121bead236e328074de6449866515cea4907bbc63d6", - "sha256:b75110fb114fa366b29a027d0c9be3709579602ae111ff61674d28c93606acca", - "sha256:ba5e697569f84b13640c9e193170e89c13c6244c24400fc57e88724ef610cd31", - "sha256:be2a9b390f77fd7676d80bc3cdc4f8edb940d8c198ed2d8c0be1319018c778e1", - "sha256:ca1bd81f40adc59011f58159e4aa6445fc585a32bb8ac9badf7a2c1aa23822f2", - "sha256:d5d8555d9bfc3f02385c1c37e9f998e2011f0db4f90e250e5bc0c0a85a813085", - "sha256:e55e22ac0a30023426564b1059b035973ec82186ddddbac867078435801c7801", - "sha256:e90f17980e6ab0f3c2f3730e56d1fe9bcba1891eeea58966e89d352492cc74f4", - "sha256:ecbb7b01409e9b782df5ded849c178a0aa7c906cf8c5a67368047daab282b184", - "sha256:ed01918d545a38998bfa5902c7c00e0fee90e957ce036a4000a88e3fe2264917", - "sha256:edabd457cd23a02965166026fd9bfd196f4324fe6032e866d0f3bd0301cd486f", - "sha256:fdf1c1dc5bafc32bc5d08b054f94d659422b05aba244d6be4ddc1c72d9aa70fb" - ], - "version": "==1.11.5" - }, - "cryptography": { - "hashes": [ - "sha256:02602e1672b62e803e08617ec286041cc453e8d43f093a5f4162095506bc0beb", - "sha256:10b48e848e1edb93c1d3b797c83c72b4c387ab0eb4330aaa26da8049a6cbede0", - "sha256:17db09db9d7c5de130023657be42689d1a5f60502a14f6f745f6f65a6b8195c0", - "sha256:227da3a896df1106b1a69b1e319dce218fa04395e8cc78be7e31ca94c21254bc", - "sha256:2cbaa03ac677db6c821dac3f4cdfd1461a32d0615847eedbb0df54bb7802e1f7", - "sha256:31db8febfc768e4b4bd826750a70c79c99ea423f4697d1dab764eb9f9f849519", - "sha256:4a510d268e55e2e067715d728e4ca6cd26a8e9f1f3d174faf88e6f2cb6b6c395", - "sha256:6a88d9004310a198c474d8a822ee96a6dd6c01efe66facdf17cb692512ae5bc0", - "sha256:76936ec70a9b72eb8c58314c38c55a0336a2b36de0c7ee8fb874a4547cadbd39", - "sha256:7e3b4aecc4040928efa8a7cdaf074e868af32c58ffc9bb77e7bf2c1a16783286", - "sha256:8168bcb08403ef144ff1fb880d416f49e2728101d02aaadfe9645883222c0aa5", - "sha256:8229ceb79a1792823d87779959184a1bf95768e9248c93ae9f97c7a2f60376a1", - "sha256:8a19e9f2fe69f6a44a5c156968d9fc8df56d09798d0c6a34ccc373bb186cee86", - "sha256:8d10113ca826a4c29d5b85b2c4e045ffa8bad74fb525ee0eceb1d38d4c70dfd6", - "sha256:be495b8ec5a939a7605274b6e59fbc35e76f5ad814ae010eb679529671c9e119", - "sha256:dc2d3f3b1548f4d11786616cf0f4415e25b0fbecb8a1d2cd8c07568f13fdde38", - "sha256:e4aecdd9d5a3d06c337894c9a6e2961898d3f64fe54ca920a72234a3de0f9cb3", - "sha256:e79ab4485b99eacb2166f3212218dd858258f374855e1568f728462b0e6ee0d9", - "sha256:f995d3667301e1754c57b04e0bae6f0fa9d710697a9f8d6712e8cca02550910f" - ], - "version": "==2.3.1" - }, - "enum34": { - "hashes": [ - "sha256:2d81cbbe0e73112bdfe6ef8576f2238f2ba27dd0d55752a776c41d38b7da2850", - "sha256:644837f692e5f550741432dd3f223bbb9852018674981b1664e5dc339387588a", - "sha256:6bd0f6ad48ec2aa117d3d141940d484deccda84d4fcd884f5c3d93c23ecd8c79", - "sha256:8ad8c4783bf61ded74527bffb48ed9b54166685e4230386a9ed9b1279e2df5b1" - ], - "markers": "python_version < '3'", - "version": "==1.1.6" - }, - "idna": { - "hashes": [ - "sha256:156a6814fb5ac1fc6850fb002e0852d56c0c8d2531923a51032d1b70760e186e", - "sha256:684a38a6f903c1d71d6d5fac066b58d7768af4de2b832e426ec79c30daa94a16" - ], - "version": "==2.7" - }, - "ipaddress": { - "hashes": [ - "sha256:64b28eec5e78e7510698f6d4da08800a5c575caa4a286c93d651c5d3ff7b6794", - "sha256:b146c751ea45cad6188dd6cf2d9b757f6f4f8d6ffb96a023e6f2e26eea02a72c" - ], - "markers": "python_version < '3'", - "version": "==1.0.22" - }, - "jinja2": { - "hashes": [ - "sha256:74c935a1b8bb9a3947c50a54766a969d4846290e1e788ea44c1392163723c3bd", - "sha256:f84be1bb0040caca4cea721fcbbbbd61f9be9464ca236387158b0feea01914a4" - ], - "version": "==2.10" - }, - "markupsafe": { - "hashes": [ - "sha256:a6be69091dac236ea9c6bc7d012beab42010fa914c459791d627dad4910eb665" - ], - "version": "==1.0" - }, - "paramiko": { - "hashes": [ - "sha256:3c16b2bfb4c0d810b24c40155dbfd113c0521e7e6ee593d704e84b4c658a1f3b", - "sha256:a8975a7df3560c9f1e2b43dc54ebd40fd00a7017392ca5445ce7df409f900fcb" - ], - "version": "==2.4.2" - }, - "pyasn1": { - "hashes": [ - "sha256:b9d3abc5031e61927c82d4d96c1cec1e55676c1a991623cfed28faea73cdd7ca", - "sha256:f58f2a3d12fd754aa123e9fa74fb7345333000a035f3921dbdaa08597aa53137" - ], - "version": "==0.4.4" - }, - "pycparser": { - "hashes": [ - "sha256:a988718abfad80b6b157acce7bf130a30876d27603738ac39f140993246b25b3" - ], - "version": "==2.19" - }, - "pynacl": { - "hashes": [ - "sha256:05c26f93964373fc0abe332676cb6735f0ecad27711035b9472751faa8521255", - "sha256:0c6100edd16fefd1557da078c7a31e7b7d7a52ce39fdca2bec29d4f7b6e7600c", - "sha256:0d0a8171a68edf51add1e73d2159c4bc19fc0718e79dec51166e940856c2f28e", - "sha256:1c780712b206317a746ace34c209b8c29dbfd841dfbc02aa27f2084dd3db77ae", - "sha256:2424c8b9f41aa65bbdbd7a64e73a7450ebb4aa9ddedc6a081e7afcc4c97f7621", - "sha256:2d23c04e8d709444220557ae48ed01f3f1086439f12dbf11976e849a4926db56", - "sha256:30f36a9c70450c7878053fa1344aca0145fd47d845270b43a7ee9192a051bf39", - "sha256:37aa336a317209f1bb099ad177fef0da45be36a2aa664507c5d72015f956c310", - "sha256:4943decfc5b905748f0756fdd99d4f9498d7064815c4cf3643820c9028b711d1", - "sha256:57ef38a65056e7800859e5ba9e6091053cd06e1038983016effaffe0efcd594a", - "sha256:5bd61e9b44c543016ce1f6aef48606280e45f892a928ca7068fba30021e9b786", - "sha256:6482d3017a0c0327a49dddc8bd1074cc730d45db2ccb09c3bac1f8f32d1eb61b", - "sha256:7d3ce02c0784b7cbcc771a2da6ea51f87e8716004512493a2b69016326301c3b", - "sha256:a14e499c0f5955dcc3991f785f3f8e2130ed504fa3a7f44009ff458ad6bdd17f", - "sha256:a39f54ccbcd2757d1d63b0ec00a00980c0b382c62865b61a505163943624ab20", - "sha256:aabb0c5232910a20eec8563503c153a8e78bbf5459490c49ab31f6adf3f3a415", - "sha256:bd4ecb473a96ad0f90c20acba4f0bf0df91a4e03a1f4dd6a4bdc9ca75aa3a715", - "sha256:e2da3c13307eac601f3de04887624939aca8ee3c9488a0bb0eca4fb9401fc6b1", - "sha256:f67814c38162f4deb31f68d590771a29d5ae3b1bd64b75cf232308e5c74777e0" - ], - "version": "==1.3.0" - }, - "pyyaml": { - "hashes": [ - "sha256:3d7da3009c0f3e783b2c873687652d83b1bbfd5c88e9813fb7e5b03c0dd3108b", - "sha256:3ef3092145e9b70e3ddd2c7ad59bdd0252a94dfe3949721633e41344de00a6bf", - "sha256:40c71b8e076d0550b2e6380bada1f1cd1017b882f7e16f09a65be98e017f211a", - "sha256:558dd60b890ba8fd982e05941927a3911dc409a63dcb8b634feaa0cda69330d3", - "sha256:a7c28b45d9f99102fa092bb213aa12e0aaf9a6a1f5e395d36166639c1f96c3a1", - "sha256:aa7dd4a6a427aed7df6fb7f08a580d68d9b118d90310374716ae90b710280af1", - "sha256:bc558586e6045763782014934bfaf39d48b8ae85a2713117d16c39864085c613", - "sha256:d46d7982b62e0729ad0175a9bc7e10a566fc07b224d2c79fafb5e032727eaa04", - "sha256:d5eef459e30b09f5a098b9cea68bebfeb268697f78d647bd255a085371ac7f3f", - "sha256:e01d3203230e1786cd91ccfdc8f8454c8069c91bee3962ad93b87a4b2860f537", - "sha256:e170a9e6fcfd19021dd29845af83bb79236068bf5fd4df3327c1be18182b2531" - ], - "version": "==3.13" - }, - "six": { - "hashes": [ - "sha256:70e8a77beed4562e7f14fe23a786b54f6296e34344c23bc42f07b15018ff98e9", - "sha256:832dc0e10feb1aa2c68dcc57dbb658f1c7e65b9b61af69048abc87a2db00a0eb" - ], - "version": "==1.11.0" - } - }, - "develop": {} -} diff --git a/README.md b/README.md index 7e834c8..54109f6 100644 --- a/README.md +++ b/README.md @@ -15,9 +15,10 @@ This is an Ansible playbook that configures a Kubernetes cluster and deploys a f 3. Pipenv 4. Docker 5. SSH access to all nodes you're deploying to. +6. A standard user with sudo access to all nodes ### Requirements for infrastructure (the machines you're deploying to) -1. Ubuntu +1. Ubuntu or Debian 2. Internet access ### Steps @@ -38,12 +39,7 @@ You can easily run a lab environment with Vagrant. 2. Install [Vagrant](https://www.vagrantup.com/) 3. Run `vagrant up` 4. Run `vagrant ssh client -c 'bash /vagrant/tests/files/run-test-deploy.sh'` -5. Put the following in your `/etc/hosts` file: -``` -192.168.254.2 kanban.test.com -192.168.254.2 mysql-orchestrator.test.com -``` -6. Now navigate to any of the services at http://servicename.test.com +5. Now navigate to any of the services at http://servicename.192.168.254.3.xip.io (for example: http://ceph.192.168.254.3.xip.io) # Development diff --git a/Vagrantfile b/Vagrantfile index d9fffb9..02f19d4 100644 --- a/Vagrantfile +++ b/Vagrantfile @@ -1,36 +1,27 @@ +machines = { + 'client' => { :ip =>'192.168.254.4', :memory => '512', :cpus => 1, :client => true}, + 'master1' => { :ip => '192.168.254.2', :memory => '1536', :cpus => 2 }, + 'worker1' => { :ip => '192.168.254.3', :memory => '1536', :cpus => 2 }, + 'worker2' => { :ip => '192.168.254.5', :memory => '1536', :cpus => 2 }, + 'worker3' => { :ip => '192.168.254.6', :memory => '1536', :cpus => 2 }, + # 'worker4' => { :ip => '192.168.254.7', :memory => '1536', :cpus => 1 }, +} + + Vagrant.configure("2") do |config| - - config.vm.define "master1" do |bootstrap| - bootstrap.vm.box = "debian/stretch64" - bootstrap.vm.hostname = "bootstrap" - bootstrap.vm.network "private_network", ip: "192.168.254.2" - bootstrap.vm.provision :shell, path: "tests/files/provision-script.sh" - bootstrap.vm.provider "virtualbox" do |v| - v.memory = 2048 - v.cpus = 2 - end - end - - config.vm.define "worker1" do |worker1| - worker1.vm.box = "debian/stretch64" - worker1.vm.hostname = "worker1" - worker1.vm.network "private_network", ip: "192.168.254.3" - worker1.vm.provision :shell, path: "tests/files/provision-script.sh" - worker1.vm.provider "virtualbox" do |v| - v.memory = 2048 - v.cpus = 2 - end - end - - config.vm.define "client" do |client| - client.vm.box = "debian/stretch64" - client.vm.hostname = "client" - client.vm.network "private_network", ip: "192.168.254.4" - client.vm.provision :shell, path: "tests/files/install-pip.sh" - client.vm.provision :shell, path: "tests/files/provision-script.sh" - client.vm.provider "virtualbox" do |v| - v.memory = 512 - v.cpus = 1 + machines.each do | hostname, attrs| + config.vm.define hostname do |machine| + machine.vm.hostname = hostname + machine.vm.box = "debian/stretch64" + machine.vm.network :private_network, :ip => attrs[:ip], netmask: "255.255.255.0" + machine.vm.provider "virtualbox" do |v| + v.memory = attrs[:memory] + v.cpus = attrs[:cpus] + end + machine.vm.provision :shell, path: "tests/files/provision-script.sh" + if attrs[:client] == true + machine.vm.provision :shell, path: "tests/files/install-pip.sh" + end end end end \ No newline at end of file diff --git a/group_vars/all.example b/group_vars/all.example index ae32e20..cda1b5b 100644 --- a/group_vars/all.example +++ b/group_vars/all.example @@ -1,19 +1,56 @@ --- # Variables listed here are applicable to all host groups -### Software versions -docker_ce_version_to_install: 18.03.1 - -### rke variables -rke_directory: /root/rke -rke_ssh_key_location: /root/id_rsa -rke_node_directory: /opt/rke -rke_version: 0.3.1 -rke_cluster_name: rke-k8s - -### User stuff -standard_user: vagrant +################################ REQUIRED ################################ +################################ User stuff +standard_user: ubuntu chosen_timezone: "America/New_York" # root domain for all services. You should have an A record for *.root_domain. For example, if your domain is test.com you should have an A record for *.test.com pointing to your node. # this will allow automatic dns for for things like dokuwiki.test.com and portainer.test.com -root_domain: test.com \ No newline at end of file +root_domain: test.com + +# the directory on your localhost to store all deployment yaml for apps deployed +# this directory will be created but the standard_user will need permissions to write to create the directory +startup_infrastructure_directory: /home/{{ standard_user }}/startup-infrastructure + +# the location on your localhost of the ssh key to log into all of your nodes +rke_ssh_key_location: /home/{{ standard_user }}/.ssh/id_rsa + +################################ STORAGE CONFIG +# Only enable 1 of these +# 1 is required +# use True for the one you'd like to enable + +# if you do not want to use cloud native block storage like ebs, cinder, etc then use this. Rook creates a local ceph cluster on your Kubernetes nodes. +#rook_enabled: False + +# if you are not a fan of ceph, you can use Longhorn for block storage in your Kubernetes cluster. +#longhorn_enabled: False + +################################ MYSQL CONFIG +mysql_root_password: password +mysql_replicas: 3 +mysql_cluster_name: mysql-cluster + + +################################ OPTIONAL ################################ +################################ Startup Infrastructure + + +################################ RKE (Kubernetes deployment) variables + +# the directory on your localhost to download and deploy rke +#rke_directory: /home/{{ standard_user }}/rke + +# the directory on all nodes where the rke statefile and kubeconfig will go +#rke_node_directory: /opt/rke + +#rke_version: 1.0.8 +#rke_cluster_name: rke-k8s +#kubernetes_version: 1.15.11 + +# if your kubernetes network will run over an interface that is not the default interface in the OS then set this value +#kubernetes_network_interface: eth1 + +################################ Software versions +#docker_ce_version_to_install: 19.03.5 \ No newline at end of file diff --git a/playbooks/kubernetes.yml b/playbooks/kubernetes.yml index 62ed5a1..9c71aa2 100644 --- a/playbooks/kubernetes.yml +++ b/playbooks/kubernetes.yml @@ -1,19 +1,7 @@ --- -- name: Pre rke +- name: Deploy Kubernetes hosts: kube-masters kube-workers gather_facts: yes serial: 100% - tasks: - - include: ../roles/kubernetes/tasks/pre-rke.yml - -- name: Set up Kubernetes - hosts: localhost - tasks: - - include: ../roles/kubernetes/tasks/main.yml - -- name: Post rke - hosts: kube-masters kube-workers - gather_facts: yes - serial: 100% - tasks: - - include: ../roles/kubernetes/tasks/post-rke.yml \ No newline at end of file + roles: + - role: ../roles/kubernetes \ No newline at end of file diff --git a/playbooks/site.yml b/playbooks/site.yml index bc52695..09a7a88 100644 --- a/playbooks/site.yml +++ b/playbooks/site.yml @@ -14,15 +14,19 @@ - name: Apply common configuration to all nodes hosts: all - user: root serial: 100% - tasks: - - include: ../roles/common/tasks/main.yml + roles: + - role: ../roles/common - import_playbook: kubernetes.yml - name: Deploy startup-infrastructure to kubernetes hosts: localhost connection: local - tasks: - - include: ../roles/startup-infrastructure/tasks/main.yml \ No newline at end of file + roles: + - role: ../roles/startup-infrastructure + - role: ../roles/rook-ceph + when: rook_enabled is defined and rook_enabled | bool == True + - role: ../roles/longhorn + when: longhorn_enabled is defined and longhorn_enabled | bool == True + - role: ../roles/presslabs-mysql \ No newline at end of file diff --git a/requirements.txt b/requirements.txt deleted file mode 100644 index 334f65a..0000000 --- a/requirements.txt +++ /dev/null @@ -1 +0,0 @@ -ansible==2.4.0.0 \ No newline at end of file diff --git a/roles/common/defaults/main.yml b/roles/common/defaults/main.yml new file mode 100644 index 0000000..9aa8101 --- /dev/null +++ b/roles/common/defaults/main.yml @@ -0,0 +1,2 @@ +--- +docker_ce_version_to_install: 19.03.8 \ No newline at end of file diff --git a/roles/common/tasks/main.yml b/roles/common/tasks/main.yml index 4b2b02e..16c74d4 100644 --- a/roles/common/tasks/main.yml +++ b/roles/common/tasks/main.yml @@ -7,6 +7,7 @@ # apt: upgrade=dist - name: Update apt apt: update_cache=yes + become: true - name: Install standard programs apt: name={{ item }} state=present force=yes @@ -31,37 +32,50 @@ - build-essential - tmux - sudo + become: true + + +- name: Install required packages for Longhorn + apt: name={{ item }} state=present force=yes + with_items: + - open-iscsi + - curl + become: true + when: longhorn_enabled is defined and longhorn_enabled | bool == True - name: Add docker key apt_key: url: https://download.docker.com/linux/{{ ansible_distribution|lower }}/gpg state: present + become: true - name: Add docker repo apt_repository: repo: deb [arch=amd64] https://download.docker.com/linux/{{ ansible_distribution|lower }} {{ ansible_distribution_release }} stable state: present + become: true - name: Update apt apt: update_cache=yes + become: true - name: Install docker-ce shell: > apt-get install -y -qq docker-ce=$(apt-cache madison docker-ce | grep "{{ docker_ce_version_to_install }}" | awk {'print $3'}) + become: true - name: Add standard_user to docker group user: name: "{{ standard_user }}" groups: docker append: yes + become: true - name: Set timezone to NewYork timezone: name: "{{ chosen_timezone }}" ignore_errors: true - -- name: Replace sudoers file - template: src=../roles/common/templates/sudoers.j2 dest=/etc/sudoers + become: true - name: Create /etc/docker file: @@ -70,16 +84,16 @@ owner: root mode: 700 state: directory + become: true - name: Replace docker daemon file template: src=../roles/common/templates/docker-daemon.json.j2 dest=/etc/docker/daemon.json register: dockerdaemon + become: true - name: Restart docker if daemon changes service: name: docker state: restarted when: dockerdaemon.changed - -- name: Creates directory - file: path=/data state=directory \ No newline at end of file + become: true \ No newline at end of file diff --git a/roles/common/templates/sudoers.j2 b/roles/common/templates/sudoers.j2 deleted file mode 100644 index a18a55b..0000000 --- a/roles/common/templates/sudoers.j2 +++ /dev/null @@ -1,30 +0,0 @@ -# -# This file MUST be edited with the 'visudo' command as root. -# -# Please consider adding local content in /etc/sudoers.d/ instead of -# directly modifying this file. -# -# See the man page for details on how to write a sudoers file. -# -Defaults env_reset -Defaults mail_badpass -Defaults secure_path="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin" - -# Host alias specification - -# User alias specification - -# Cmnd alias specification - -# User privilege specification -root ALL=(ALL:ALL) ALL - -# Members of the admin group may gain root privileges -%admin ALL=(ALL) ALL - -# Allow members of group sudo to execute any command -%sudo ALL=(ALL) NOPASSWD:ALL -# See sudoers(5) for more information on "#include" directives: - -#includedir /etc/sudoers.d - diff --git a/roles/kubernetes/defaults/main.yml b/roles/kubernetes/defaults/main.yml new file mode 100644 index 0000000..fa26db9 --- /dev/null +++ b/roles/kubernetes/defaults/main.yml @@ -0,0 +1,6 @@ +--- +rke_directory: /home/{{ standard_user }}/rke +rke_node_directory: /opt/rke +rke_version: 1.0.8 +rke_cluster_name: rke-k8s +kubernetes_version: 1.15.11 \ No newline at end of file diff --git a/roles/kubernetes/tasks/deploy-rke.yml b/roles/kubernetes/tasks/deploy-rke.yml new file mode 100644 index 0000000..deb425f --- /dev/null +++ b/roles/kubernetes/tasks/deploy-rke.yml @@ -0,0 +1,70 @@ +--- +- name: Create RKE directory + file: + path: "{{ rke_directory }}" + state: directory + mode: '0774' + owner: "{{ standard_user }}" + group: "{{ standard_user }}" + delegate_to: localhost + run_once: true + +- name: Create RKE Configs directory + file: + path: "{{ rke_directory }}/configs" + state: directory + delegate_to: localhost + run_once: true + +- name: Install RKE + get_url: + dest: "{{ rke_directory }}/rke" + url: https://github.com/rancher/rke/releases/download/v{{ rke_version }}/rke_linux-amd64 + delegate_to: localhost + run_once: true + +- name: Make RKE executable + file: + dest: "{{ rke_directory }}/rke" + mode: +x + delegate_to: localhost + run_once: true + +- name: Put RKE cluster config in place + template: + src: ../templates/rke-cluster-deployment.yaml + dest: "{{ rke_directory }}/{{ rke_cluster_name }}.yaml" + delegate_to: localhost + run_once: true + +- name: Put RKE configs in place + template: + src: ../templates/rke-configs/{{ item }}.j2 + dest: "{{ rke_directory }}/configs/{{ item }}" + with_items: + - kube-state-metrics-deployment.yaml + - kube-state-metrics-service.yaml + - kube-state-metrics-rbac.yaml + delegate_to: localhost + run_once: true + +- name: Run RKE + shell: > + bash -c "{{ rke_directory }}/rke up --config {{ rke_directory }}/{{ rke_cluster_name }}.yaml" + delegate_to: localhost + run_once: true + retries: 5 + delay: 5 + register: rke_install + until: rke_install.rc == 0 + +- name: Set permissions on rke directory + file: + path: "{{ rke_directory }}" + state: directory + mode: '0774' + owner: "{{ standard_user }}" + group: "{{ standard_user }}" + recurse: yes + delegate_to: localhost + run_once: true \ No newline at end of file diff --git a/roles/kubernetes/tasks/main.yml b/roles/kubernetes/tasks/main.yml index 30487ea..9bcb9a4 100644 --- a/roles/kubernetes/tasks/main.yml +++ b/roles/kubernetes/tasks/main.yml @@ -1,74 +1,9 @@ --- -- name: Create RKE directory - file: - path: "{{ rke_directory }}" - state: directory - mode: '0774' - owner: "{{ standard_user }}" - group: "{{ standard_user }}" - delegate_to: localhost - run_once: true - become: true +- name: RKE Pre Tasks + import_tasks: pre-rke.yml -- name: Create RKE Configs directory - file: - path: "{{ rke_directory }}/configs" - state: directory - delegate_to: localhost - run_once: true - become: true +- name: RKE Deploy Kubernetes + import_tasks: deploy-rke.yml -- name: Install RKE - get_url: - dest: "{{ rke_directory }}/rke" - url: https://github.com/rancher/rke/releases/download/v{{ rke_version }}/rke_linux-amd64 - delegate_to: localhost - run_once: true - become: true - -- name: Make RKE executable - file: - dest: "{{ rke_directory }}/rke" - mode: +x - delegate_to: localhost - run_once: true - become: true - -- name: Put RKE cluster config in place - template: - src: ../templates/rke-cluster-deployment.yaml.j2 - dest: "{{ rke_directory }}/{{ rke_cluster_name }}.yaml" - delegate_to: localhost - run_once: true - become: true - -- name: Put RKE configs in place - template: - src: ../templates/rke-configs/{{ item }}.j2 - dest: "{{ rke_directory }}/configs/{{ item }}" - with_items: - - kube-state-metrics-deployment.yaml - - kube-state-metrics-service.yaml - - kube-state-metrics-rbac.yaml - delegate_to: localhost - run_once: true - become: true - -- name: Run RKE - shell: > - bash -c "{{ rke_directory }}/rke up --config {{ rke_directory }}/{{ rke_cluster_name }}.yaml" - delegate_to: localhost - run_once: true - become: true - -- name: Set permissions on rke directory - file: - path: "{{ rke_directory }}" - state: directory - mode: '0774' - owner: "{{ standard_user }}" - group: "{{ standard_user }}" - recurse: yes - delegate_to: localhost - run_once: true - become: true \ No newline at end of file +- name: RKE Post Tasks + import_tasks: post-rke.yml \ No newline at end of file diff --git a/roles/kubernetes/tasks/post-rke.yml b/roles/kubernetes/tasks/post-rke.yml index b9dbe98..da9ac7f 100644 --- a/roles/kubernetes/tasks/post-rke.yml +++ b/roles/kubernetes/tasks/post-rke.yml @@ -9,4 +9,18 @@ copy: src: "{{ rke_directory }}/{{ rke_cluster_name }}.rkestate" dest: "{{ rke_node_directory }}/{{ rke_cluster_name }}.rkestate" - become: true \ No newline at end of file + become: true + +- name: Create .kube folder in standard users home directory + file: + path: /home/{{ standard_user }}/.kube + state: directory + become: true + delegate_to: localhost + +- name: Copy kube config to standard users home directory + copy: + src: "{{ rke_directory }}/kube_config_{{ rke_cluster_name }}.yaml" + dest: /home/{{ standard_user }}/.kube/config + become: true + delegate_to: localhost \ No newline at end of file diff --git a/roles/kubernetes/tasks/pre-rke.yml b/roles/kubernetes/tasks/pre-rke.yml index 17369a4..dc16f14 100644 --- a/roles/kubernetes/tasks/pre-rke.yml +++ b/roles/kubernetes/tasks/pre-rke.yml @@ -41,6 +41,36 @@ group: "{{ standard_user }}" become: true +- name: Create flex volume folder + file: + path: /usr/libexec/kubernetes/kubelet-plugins/volume/exec + state: directory + become: true + +- name: Create Rook storage Directory + file: + path: /var/lib/rook + state: directory + mode: '0774' + become: true + when: rook_enabled is defined and rook_enabled | bool == True + +- name: Create Longhorn Storage Directory + file: + path: /var/lib/rancher/longhorn + state: directory + mode: '0774' + become: true + when: longhorn_enabled is defined and longhorn_enabled | bool == True + +- name: Create Longhorn Setting Directory + file: + path: /var/lib/longhorn-setting + state: directory + mode: '0774' + become: true + when: longhorn_enabled is defined and longhorn_enabled | bool == True + - name: Check if RKE cluster state file exists stat: path: "{{ rke_node_directory }}/{{ rke_cluster_name }}.rkestate" diff --git a/roles/kubernetes/templates/rke-cluster-deployment.yaml b/roles/kubernetes/templates/rke-cluster-deployment.yaml new file mode 100644 index 0000000..319cd7c --- /dev/null +++ b/roles/kubernetes/templates/rke-cluster-deployment.yaml @@ -0,0 +1,50 @@ +--- + +ssh_key_path: {{ rke_ssh_key_location }} + +cluster_name: {{ rke_cluster_name }} +ignore_docker_version: true +system_images: + kubernetes: rancher/hyperkube:v{{ kubernetes_version }}-rancher1 + +{% if (rook_enabled is defined and rook_enabled | bool == True) or (longhorn_enabled is defined and longhorn_enabled | bool == True) %} +services: + kubelet: + extra_args: + volume-plugin-dir: /usr/libexec/kubernetes/kubelet-plugins/volume/exec + extra_binds: + - /usr/libexec/kubernetes/kubelet-plugins/volume/exec:/usr/libexec/kubernetes/kubelet-plugins/volume/exec +{% endif %} + +network: + plugin: canal + {% if (kubernetes_network_interface is defined) %} + + options: + canal_iface: {{ kubernetes_network_interface }} + {% endif %} + +nodes: + {% for node in groups['kube-masters'] %} + + - address: {{node}} + name: {{node}} + user: {{standard_user}} + role: + - controlplane + - etcd + {% endfor %} + {% for node in groups['kube-workers'] %} + + - address: {{node}} + name: {{node}} + user: {{standard_user}} + role: + - worker + + {% endfor %} + +authentication: + strategy: x509 + sans: + - "kubernetes.{{ root_domain }}" \ No newline at end of file diff --git a/roles/kubernetes/templates/rke-cluster-deployment.yaml.j2 b/roles/kubernetes/templates/rke-cluster-deployment.yaml.j2 deleted file mode 100644 index 9dac4ef..0000000 --- a/roles/kubernetes/templates/rke-cluster-deployment.yaml.j2 +++ /dev/null @@ -1,32 +0,0 @@ ---- - -ssh_key_path: {{ rke_ssh_key_location }} - -cluster_name: rke_cluster_name -ignore_docker_version: true -system_images: - kubernetes: rancher/hyperkube:v1.15.5-rancher1 - -nodes: - {% for node in groups['kube-masters'] %} - - - address: {{node}} - name: {{node}} - user: {{standard_user}} - role: - - controlplane - - etcd - {% endfor %} - {% for node in groups['kube-workers'] %} - - - address: {{node}} - name: {{node}} - user: {{standard_user}} - role: - - worker - {% endfor %} - -authentication: - strategy: x509 - sans: - - "kubernetes.{{ root_domain }}" \ No newline at end of file diff --git a/roles/longhorn/defaults/main.yaml b/roles/longhorn/defaults/main.yaml new file mode 100644 index 0000000..e7a26da --- /dev/null +++ b/roles/longhorn/defaults/main.yaml @@ -0,0 +1,2 @@ +--- +longhorn_version: v0.8.1 \ No newline at end of file diff --git a/roles/longhorn/tasks/main.yaml b/roles/longhorn/tasks/main.yaml new file mode 100644 index 0000000..e1f308c --- /dev/null +++ b/roles/longhorn/tasks/main.yaml @@ -0,0 +1,27 @@ +--- +- name: Create Longhorn config Directory + file: + path: "{{ startup_infrastructure_directory }}/longhorn" + state: directory + +- name: Get Longhorn Install + get_url: + url: https://raw.githubusercontent.com/longhorn/longhorn/{{ longhorn_version }}/deploy/longhorn.yaml + dest: "{{ startup_infrastructure_directory }}/longhorn/longhorn.yaml" + +- name: Put other Longhorn yaml in place + template: + src: ../templates/{{ item }}.j2 + dest: "{{ startup_infrastructure_directory }}/longhorn/{{ item }}" + with_items: + - longhorn-ingress.yaml + +- name: Install Longhorn + command: kubectl apply -f {{ startup_infrastructure_directory }}/longhorn/longhorn.yaml + +- name: Install Longhorn Extras + command: kubectl apply -f {{ startup_infrastructure_directory }}/longhorn/ + +- name: Set default storageclass + command: > + kubectl patch storageclass longhorn -p '{"metadata": {"annotations":{"storageclass.kubernetes.io/is-default-class":"true"}}}' \ No newline at end of file diff --git a/roles/longhorn/templates/longhorn-ingress.yaml.j2 b/roles/longhorn/templates/longhorn-ingress.yaml.j2 new file mode 100644 index 0000000..daa4bb8 --- /dev/null +++ b/roles/longhorn/templates/longhorn-ingress.yaml.j2 @@ -0,0 +1,22 @@ +apiVersion: extensions/v1beta1 +kind: Ingress +metadata: + name: longhorn-ingress + namespace: longhorn-system + annotations: + # cert-manager.io/cluster-issuer: "letsencrypt-prod" + kubernetes.io/ingress.class: "nginx" + # kubernetes.io/tls-acme: "true" +spec: + rules: + - host: longhorn.{{ root_domain }} + http: + paths: + - path: / + backend: + serviceName: longhorn-frontend + servicePort: 80 + #tls: + # - hosts: + # - longhorn.{{ root_domain }} + # secretName: longhorn-ssl \ No newline at end of file diff --git a/roles/presslabs-mysql/defaults/main.yml b/roles/presslabs-mysql/defaults/main.yml new file mode 100644 index 0000000..7691138 --- /dev/null +++ b/roles/presslabs-mysql/defaults/main.yml @@ -0,0 +1,4 @@ +--- +mysql_root_password: password +mysql_replicas: 3 +mysql_cluster_name: mysql-cluster \ No newline at end of file diff --git a/roles/presslabs-mysql/tasks/main.yml b/roles/presslabs-mysql/tasks/main.yml new file mode 100644 index 0000000..3844360 --- /dev/null +++ b/roles/presslabs-mysql/tasks/main.yml @@ -0,0 +1,45 @@ +--- +- name: Create Mysql Directory + file: + path: "{{ startup_infrastructure_directory }}/presslabs-mysql-operator" + state: directory + +- name: Add presslabs helm repo + command: helm repo add presslabs https://presslabs.github.io/charts + +- name: Install the presslabs mysql operator + command: helm install presslabs/mysql-operator --name presslabs-mysql-operator + +- name: Wait for mysql-operator to be Running + command: > + bash -c "kubectl get pods --all-namespaces | grep presslabs-mysql-operator | grep Running" + retries: 10 + delay: 30 + register: mysql_operator_init + until: mysql_operator_init.rc == 0 + +- name: Put mysql cluster yaml in place + template: + src: presslabs-mysql-cluster.yaml.j2 + dest: "{{ startup_infrastructure_directory }}/presslabs-mysql-operator/presslabs-mysql-cluster.yaml" + +- name: Deploy mysql cluster + command: > + kubectl apply -f {{ startup_infrastructure_directory }}/presslabs-mysql-operator/presslabs-mysql-cluster.yaml + +- name: Wait for cluster to be Running + command: > + bash -c "kubectl get mysql | grep {{ mysql_cluster_name }} | grep True" + retries: 10 + delay: 60 + register: mysql_cluster_init + until: mysql_cluster_init.rc == 0 + +- name: Test a query on the cluster + command: > + kubectl run mysql-client --image=mysql:5.7 -it --rm --restart=Never \ + -- mysql -h {{ mysql_cluster_name }}-mysql -u root -p{{ mysql_root_password }} -e "show databases; show slave status;" + retries: 10 + delay: 20 + register: mysql_cluster_query + until: mysql_cluster_query.rc == 0 \ No newline at end of file diff --git a/roles/presslabs-mysql/templates/presslabs-mysql-cluster.yaml.j2 b/roles/presslabs-mysql/templates/presslabs-mysql-cluster.yaml.j2 new file mode 100644 index 0000000..172b06f --- /dev/null +++ b/roles/presslabs-mysql/templates/presslabs-mysql-cluster.yaml.j2 @@ -0,0 +1,18 @@ +apiVersion: v1 +kind: Secret +metadata: + name: {{ mysql_cluster_name }}-secret +type: Opaque +# use data if password is base64 encoded +#data: +# ROOT_PASSWORD: {{ mysql_root_password }} +stringData: + ROOT_PASSWORD: {{ mysql_root_password }} +--- +apiVersion: mysql.presslabs.org/v1alpha1 +kind: MysqlCluster +metadata: + name: {{ mysql_cluster_name }} +spec: + replicas: {{ mysql_replicas }} + secretName: {{ mysql_cluster_name }}-secret \ No newline at end of file diff --git a/roles/startup-infrastructure/tasks/main.yml b/roles/startup-infrastructure/tasks/main.yml index 722f658..7558da4 100644 --- a/roles/startup-infrastructure/tasks/main.yml +++ b/roles/startup-infrastructure/tasks/main.yml @@ -1,13 +1,12 @@ --- - name: Create Startup Infrastructure Directory file: - path: /opt/startup-infrastructure + path: "{{ startup_infrastructure_directory }}" state: directory - become: true - name: Download Helm get_url: - url: https://get.helm.sh/helm-v2.14.3-linux-amd64.tar.gz + url: https://get.helm.sh/helm-v2.16.6-linux-amd64.tar.gz dest: /tmp/helm.tar.gz become: true @@ -42,21 +41,29 @@ - name: Create Tiller serviceaccount command: kubectl -n kube-system create serviceaccount tiller - become: true - environment: - KUBECONFIG: "{{ rke_directory }}/kube_config_{{ rke_cluster_name }}.yaml" + ignore_errors: true - name: Create Tiller rbac - become: true command: > kubectl create clusterrolebinding tiller \ --clusterrole=cluster-admin \ --serviceaccount=kube-system:tiller - environment: - KUBECONFIG: "{{ rke_directory }}/kube_config_{{ rke_cluster_name }}.yaml" - name: Initialize Tiller command: helm init --service-account tiller - become: true - environment: - KUBECONFIG: "{{ rke_directory }}/kube_config_{{ rke_cluster_name }}.yaml" \ No newline at end of file + +- name: Wait for Tiller to be running + command: > + bash -c "kubectl -n kube-system get pods | grep tiller | grep Running" + retries: 10 + delay: 30 + register: tiller_running + until: tiller_running.rc == 0 + +- name: Wait for Tiller to be initialized + command: > + bash -c "kubectl rollout status -w deployment/tiller-deploy --namespace=kube-system | grep "successfully rolled out"" + retries: 10 + delay: 30 + register: tiller_init + until: tiller_init.rc == 0 \ No newline at end of file diff --git a/tests/files/group_vars_all b/tests/files/group_vars_all index 4798d26..d44d846 100644 --- a/tests/files/group_vars_all +++ b/tests/files/group_vars_all @@ -1,19 +1,18 @@ --- -# Variables listed here are applicable to all host groups - -### Software versions -docker_ce_version_to_install: 18.03.1 - -### rke variables -rke_directory: /opt/rke -rke_ssh_key_location: /vagrant/tests/files/test_rsa -rke_node_directory: /opt/rke -rke_version: 0.3.1 -rke_cluster_name: rke-k8s - -### User stuff +################################ REQUIRED ################################ +################################ User stuff standard_user: vagrant chosen_timezone: "America/New_York" -# root domain for all services. You should have an A record for *.root_domain. For example, if your domain is test.com you should have an A record for *.test.com pointing to your node. -# this will allow automatic dns for for things like dokuwiki.test.com and portainer.test.com -root_domain: test.com \ No newline at end of file +root_domain: 192.168.254.3.xip.io +rke_ssh_key_location: /home/vagrant/test_rsa + +# the directory on your localhost to store all deployment yaml for apps deployed +startup_infrastructure_directory: /home/{{ standard_user }}/startup-infrastructure + +################################ STORAGE CONFIG +longhorn_enabled: True + + +################################ OPTIONAL ################################ +################################ RKE (Kubernetes deployment) variables +kubernetes_network_interface: eth1 diff --git a/tests/files/provision-script.sh b/tests/files/provision-script.sh index 0d8f586..8aa58c3 100644 --- a/tests/files/provision-script.sh +++ b/tests/files/provision-script.sh @@ -1,14 +1,18 @@ #!/bin/bash mkdir -p /root/.ssh + # Putting test_rsa.pub into root and vagrant authorized keys echo "ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQDYa9zstumlg7XkKoNrJMlIN/zteqMA9J4GjuZA7r0xfMPrz4CglxzYKd/BhBpwp/HhU+vSR6vBa15kRODHdPZ+T1oXzMXAmMT3R2ZJRqF280Hsx9sK0X+FZWM84e4a1zQUrxuWyWJ4kKIiaX6DBAmhy8zHNvQ0c4Nk1exfwRicojaze71qrexSas4FHWaI4usC/g3mMKfiML/QX0UWW/G+D8qrg3cK3zClG916XlY/p1h9SWantqz75ea33TtmDNW6iCraKSjVeDGfzhshJsmQ7+/Rr/L4/s7hdpwTqdjSlJTIi61eBxcpDfMWBmsHOMZgnsTZ3wrdYXo70k44moA7 vagrant@test" >> /home/vagrant/.ssh/authorized_keys echo "ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQDYa9zstumlg7XkKoNrJMlIN/zteqMA9J4GjuZA7r0xfMPrz4CglxzYKd/BhBpwp/HhU+vSR6vBa15kRODHdPZ+T1oXzMXAmMT3R2ZJRqF280Hsx9sK0X+FZWM84e4a1zQUrxuWyWJ4kKIiaX6DBAmhy8zHNvQ0c4Nk1exfwRicojaze71qrexSas4FHWaI4usC/g3mMKfiML/QX0UWW/G+D8qrg3cK3zClG916XlY/p1h9SWantqz75ea33TtmDNW6iCraKSjVeDGfzhshJsmQ7+/Rr/L4/s7hdpwTqdjSlJTIi61eBxcpDfMWBmsHOMZgnsTZ3wrdYXo70k44moA7 vagrant@test" >> /root/.ssh/authorized_keys # Setting A record -echo "192.168.254.2 swarm.test.com" >> /etc/hosts -echo "192.168.254.2 portainer.test.com" >> /etc/hosts +# echo "192.168.254.2 mysql-orchestrator.test.com" >> /etc/hosts +# echo "192.168.254.2 kanban.test.com" >> /etc/hosts cp /vagrant/tests/files/test_rsa /home/vagrant/test_rsa chmod 600 /home/vagrant/test_rsa -chown vagrant:vagrant /home/vagrant/test_rsa \ No newline at end of file +chown vagrant:vagrant /home/vagrant/test_rsa + +apt-get update -qq +apt-get install -y -qq lvm2 curl \ No newline at end of file diff --git a/tests/lib/mysql-query.sh b/tests/lib/mysql-query.sh new file mode 100644 index 0000000..a97b4e8 --- /dev/null +++ b/tests/lib/mysql-query.sh @@ -0,0 +1,3 @@ +#!/bin/bash +kubectl run mysql-client --image=mysql:5.7 -it --rm --restart=Never \ + -- mysql -h mysql-cluster-mysql -u root -ppassword -e "show databases; show slave status;" \ No newline at end of file diff --git a/tests/lib/test-function.sh b/tests/lib/test-function.sh index 8e2f285..780402c 100644 --- a/tests/lib/test-function.sh +++ b/tests/lib/test-function.sh @@ -9,7 +9,7 @@ function testbash() { local name="${1}" shift local command="${@}" - eval $command + eval "${command}" local return=$? if [[ ! $return -eq 0 ]]; then echo "${red}FAILED: ${name}${reset}" diff --git a/tests/vagrant-tests.sh b/tests/vagrant-tests.sh index 17f3db9..57d6a17 100644 --- a/tests/vagrant-tests.sh +++ b/tests/vagrant-tests.sh @@ -1,4 +1,5 @@ #!/bin/bash +set -eEuo pipefail project_dir="$(dirname $( dirname $(readlink -f ${BASH_SOURCE[0]})))" source ${project_dir}/tests/lib/test-function.sh @@ -24,11 +25,13 @@ function run-tests { "vagrant ssh client -c 'bash /vagrant/tests/files/run-test-deploy.sh'" testbash "Running kubectl should not fail" \ - "vagrant ssh client -c 'export KUBECONFIG=/opt/rke/kube_config_rke-k8s.yaml; kubectl get nodes'" + "vagrant ssh client -c 'kubectl get nodes'" - # testbash "Portainer was deployed and admin account was initialized" \ - # "vagrant ssh client -c 'curl --silent -I \ - # -X GET \"http://portainer.test.com/api/users/admin/check\" -H \"accept: application/json\"' | grep 204" + testbash "Longhorn dashboard is running" \ + "vagrant ssh client -c 'curl --silent -I -X GET http://longhorn.192.168.254.3.xip.io/dashboard' | grep '200 OK'" + + testbash "Running a query on the mysql cluster should not fail" \ + "vagrant ssh client -c 'bash /vagrant/tests/lib/mysql-query.sh'" } function destroy-infrastructure {