From 6b7cbb4e66ec26f182cf7ad8ec1977b6feb04802 Mon Sep 17 00:00:00 2001 From: Anurag Guda Date: Mon, 18 May 2020 21:37:21 -0700 Subject: [PATCH] Hashi Stack --- README.md | 94 ++++++++++- consul/client.json | 12 ++ consul/consul.service | 19 +++ consul/server.json | 14 ++ consul/servers.json | 15 ++ hashi-ui/hashi-ui.service | 19 +++ images/hashi-stack.png | Bin 0 -> 33100 bytes images/nomad_ha.png | Bin 0 -> 36526 bytes images/vault-ha-consul.png | Bin 0 -> 89923 bytes nomad/client.hcl | 11 ++ nomad/jobs/countdash.nomad | 74 +++++++++ nomad/jobs/nginx.nomad | 48 ++++++ nomad/jobs/python-app.nomad | 52 ++++++ nomad/jobs/simple.nomad | 35 +++++ nomad/nomad.service | 19 +++ nomad/server.hcl | 23 +++ nomad/servers.hcl | 28 ++++ packer/hashi.json | 28 ++++ packer/prereqs.sh | 61 ++++++++ setup.sh | 17 ++ terraform/iplist | 4 + terraform/main.tf | 148 ++++++++++++++++++ terraform/output.tf | 4 + terraform/provision.sh | 64 ++++++++ terraform/variables.tf | 43 +++++ vagrant/.vagrant/bundler/global.sol | 1 + .../inventory/vagrant_ansible_inventory | 3 + vagrant/.vagrant/rgloader/loader.rb | 9 ++ vagrant/Vagrantfile | 74 +++++++++ vagrant/scripts/clientstart.sh | 33 ++++ vagrant/scripts/serverlist.sh | 70 +++++++++ vagrant/scripts/serverstart.sh | 38 +++++ vagrant/scripts/setup.sh | 67 ++++++++ vagrant/scripts/vaultinit.sh | 9 ++ vault/server.hcl | 19 +++ vault/vault.service | 16 ++ 36 files changed, 1169 insertions(+), 2 deletions(-) create mode 100644 consul/client.json create mode 100644 consul/consul.service create mode 100644 consul/server.json create mode 100644 consul/servers.json create mode 100644 hashi-ui/hashi-ui.service create mode 100644 images/hashi-stack.png create mode 100644 images/nomad_ha.png create mode 100644 images/vault-ha-consul.png create mode 100644 nomad/client.hcl create mode 100644 nomad/jobs/countdash.nomad create mode 100644 nomad/jobs/nginx.nomad create mode 100644 nomad/jobs/python-app.nomad create mode 100644 nomad/jobs/simple.nomad create mode 100644 nomad/nomad.service create mode 100644 nomad/server.hcl create mode 100644 nomad/servers.hcl create mode 100644 packer/hashi.json create mode 100644 packer/prereqs.sh create mode 100644 setup.sh create mode 100644 terraform/iplist create mode 100644 terraform/main.tf create mode 100644 terraform/output.tf create mode 100644 terraform/provision.sh create mode 100644 terraform/variables.tf create mode 100644 vagrant/.vagrant/bundler/global.sol create mode 100644 vagrant/.vagrant/provisioners/ansible/inventory/vagrant_ansible_inventory create mode 100644 vagrant/.vagrant/rgloader/loader.rb create mode 100644 vagrant/Vagrantfile create mode 100644 vagrant/scripts/clientstart.sh create mode 100644 vagrant/scripts/serverlist.sh create mode 100644 vagrant/scripts/serverstart.sh create mode 100644 vagrant/scripts/setup.sh create mode 100644 vagrant/scripts/vaultinit.sh create mode 100644 vault/server.hcl create mode 100644 vault/vault.service diff --git a/README.md b/README.md index c02856b..4ab1957 100644 --- a/README.md +++ b/README.md @@ -1,2 +1,92 @@ -# hashi-stack -Hashi Stack with Vagrant, Terraform, Nomad, Consul, Vault +

Complete HashiStack

+ +

Instroduction

+ +This repository helps you to setup your development environemt and also setup production environment with 3 master nodes and 3 clients. + +- [Build and Test Environment](#Build and Test Environment) +- [Enterprise Environment](#Enterprise Setup) + +## Motivation + +![Hashi Stack Setup](images/hashi-stack.png) +![Vault HA Setup](images/vault-ha-consul.png) +![Nomad HA Setup](images/nomad-ha.png) + +## Build and Test Environment + +Build and test Environment helps you to explore the tools and test your changes on vagrant. You can modify the number of servers on vagrant file to test the changes. + +The Final Test Environment inclides: + +- Vagrant + - Consul + - Nomad + - Vault + +### Prerequsites + +- MacOS (Linux testing in progress) +- [Homebrew](https://brew.sh/) +- `brew install packer terraform nomad` +- `brew cask install virtualbox` + + +### Usage + +Update your number of servers depends on your system memory and CPU and run below command to explore hashi tools + +``` +vagrant up +``` + +### Access + +Use the private IP address to access the applications, in this + +``` +Access Nomad Cluster http://172.20.20.11:4646 + +Access Consul Cluster http://172.20.20.11:8500 + +Access Vault Cluster http://172.20.20.101:8200 + +Access Hashi UI http://172.20.20.11:3000 +``` + +## Enterprise Setup + +This enterprise setup helps you to setup High Availability cluster with 3 masters and 2 clients on AWS. + +The Final Environments Includes: + +- Packer +- Terraform + - Nomad + - Consul + - Vault + +### Prerequsites + +- Install Packer and Terraform +- AWS access credentials +- AWS private key + +### Usage + +Uset setup.sh scripts helps you to setup cluster environment on AWS. Update your AWS credentials in variables.tf and run the script + +``` +sudo bash setup.sh +``` + +### Access + +With AWS environment we don't have an option to access UI as it's setup with Private IP, but with help of Hashi UI we can access Nomad and Consul + +Use the Output of AWS public IP and access hashi UI + +``` +Access Hashi UI with http://awspublicip:3000 +``` + diff --git a/consul/client.json b/consul/client.json new file mode 100644 index 0000000..8e320cf --- /dev/null +++ b/consul/client.json @@ -0,0 +1,12 @@ +{ + "server": false, + "datacenter": "us-west-1", + "node_name": "NODENAME", + "data_dir": "/etc/consul.d/data/", + "bind_addr": "PRIVATEIP", + "client_addr": "127.0.0.1", + "retry_join": [ servers ], + "log_level": "DEBUG", + "enable_syslog": true, + "acl_enforce_version_8": false +} diff --git a/consul/consul.service b/consul/consul.service new file mode 100644 index 0000000..4f612b8 --- /dev/null +++ b/consul/consul.service @@ -0,0 +1,19 @@ +[Unit] +Description=Consul Service Discovery Agent +Documentation=https://www.consul.io/ +After=network-online.target +Wants=network-online.target +[Service] +Type=simple +User=consul +Group=consul +ExecStart=/usr/local/bin/consul agent \ + -config-dir=/etc/consul.d +ExecReload=/bin/kill -HUP $MAINPID +KillSignal=SIGTERM +TimeoutStopSec=5 +Restart=on-failure +RestartSec=42s +SyslogIdentifier=consul +[Install] +WantedBy=multi-user.target diff --git a/consul/server.json b/consul/server.json new file mode 100644 index 0000000..5fb00bd --- /dev/null +++ b/consul/server.json @@ -0,0 +1,14 @@ +{ + "server": true, + "node_name": "NODENAME", + "datacenter": "us-west-1", + "data_dir": "/etc/consul.d/data", + "bind_addr": "0.0.0.0", + "client_addr": "0.0.0.0", + "advertise_addr": "PRIVATEIP", + "bootstrap_expect": 1, + "ui": true, + "log_level": "DEBUG", + "enable_syslog": true, + "acl_enforce_version_8": false +} diff --git a/consul/servers.json b/consul/servers.json new file mode 100644 index 0000000..f309cb1 --- /dev/null +++ b/consul/servers.json @@ -0,0 +1,15 @@ +{ + "server": true, + "node_name": "NODENAME", + "datacenter": "us-west-1", + "data_dir": "/etc/consul.d/data", + "bind_addr": "0.0.0.0", + "client_addr": "0.0.0.0", + "advertise_addr": "PRIVATEIP", + "bootstrap_expect": count, + "retry_join": [ servers ], + "ui": true, + "log_level": "DEBUG", + "enable_syslog": true, + "acl_enforce_version_8": false +} diff --git a/hashi-ui/hashi-ui.service b/hashi-ui/hashi-ui.service new file mode 100644 index 0000000..be9c6b8 --- /dev/null +++ b/hashi-ui/hashi-ui.service @@ -0,0 +1,19 @@ +[Unit] +Description=Run Hashi-ui +Requires=nomad.service +After=nomad.service + +[Install] +WantedBy=multi-user.target + +[Service] +RestartSec=5 +Restart=always +ExecStart=/usr/bin/docker run \ + -e NOMAD_ENABLE=1 \ + -e NOMAD_ADDR=http://SERVERIP:4646 \ + -e CONSUL_ADDR=http://SERVERIP:8500 \ + -e CONSUL_ENABLE=1 \ + -e LOG_LEVEL=error \ + --net=host \ + jippi/hashi-ui diff --git a/images/hashi-stack.png b/images/hashi-stack.png new file mode 100644 index 0000000000000000000000000000000000000000..c72781fd5ef4b907f9d5f4ee44a997bd769e7923 GIT binary patch literal 33100 zcmd?RbzB_J(l-hV1Pku&7GTi?cemi~5Zv7%NFcZ`?(Xgm!3pk*Yw!R;gWS#eo%5XM zy>I@#e_cK^yTjD2^ij1_l3KSHq9^`rt;SJ=osD`y4 z3JO}nN=!^iMof%c$=Si&%GL}Diay@d$Ou!0iGIY`*vM$)J0k;0Yn42|zVc)S2I?mUZeQHI zz6LnFzP?_t=RUOHe*K-JFcMS9g(vqAW(VWuTxuAl(*4swkE1s!Gu1q-=?hMa_u z6AB6@AruN8@{I{O#d87wp~C9r!u;nNYVXg3BC29CGLUaoQ)e?XdlyRw*TTrN3dpOL ztkkqzwG`xeO&#oj#-AKa%z&PDj(>_k@q6+@F73=*jmbUjZ0%imJq0NL^#m{E`p<0^ zO7ed_;%Xy6simMqF6Q8DM*bei31p=dL?S0A=Xd^O&Z{CW`S0S8{{$#4U0oe{Sy((g zJb)e?KnG_F7B(Ip9u`)17It=K$P>&iUiPlWp3L?xRR6r>KkpGYb1`+ca&)zFuqXfX zUSksnH&+2l%0CtT&)+}oH1o9jZ%y_t|Lzu~gDih2ENnnlmj8J-q$vNNySz$Po@TaM z;#PJL_CV?oWMgCd!2hoT{}<`MRsK^{-NnpV%)t&)(pB)k4E}fF|4saV7yMV9+W)PS zot^uCSNXpv|1QbT@~7+nixvOy`CoS-j21-VXZfE&6GS4R3xkM@FqDkAh?*z#X%<|j z`XG3iEWHR6TEs_F1S_EvhutSEqB1Bsv2=cp3#0qGoJ$!LlthU@&n)c$Y^tqY^Y9OL zxm)Ytn*82%nen{Vbtpe|Hz8m#$uY&BIGmR`9S?;V_qQV?T6m*&|67#wXV||UoX|*m z%NTzpNs~{&(mNt@D49zEsD=M>V7Jzy{k76K;Z#JWEll&=iI~6FO7Cb)Mh=bnmm`oB zYvh8ZXRt!!cVxfgf1mg%ohuRiNc!C6<-E2X{r1^3P&oIQz|A}-<_qI6uO}6{WsZ5k ztz^PWohbRVAjy&Up%Xpck!Y&W-`PTq1r217Ew1?9obWfUiGP8D11k4Ti2ju^3E>dx zsB6=T#(&%Q->w9fqUZL~yi3(a_*>P&>=+PgTJ;C8>|Z!ajgAArZWV{)K&JQ`ccf_{ zRO-0}b6uIg4QIaSXFy7+kvYX*M{86ZLjBafYRmZ7cBvsiMhs_yDdcY>MxKVS7wc|H z=D7vE((UIHV=|u1NXM+(oaF!fDAVox;CjD35VjA}wI9X6BQ+ZbCF3&dNWZ>3(**cW zeNPqeX@2@SfOfTH7%+Oi-ch7nAURv9%|RgO+nU6rJ)3r68Y@6c#ATnfGZ;CpswlAk ztA&)9+fn$ubrVe?+*VSRB1~<$;Ye&G{Jk}V)-=6*O%WlN$=EU3AyYm zbH?$Bw6eTFI?rpdES*0^k2bnGBJU>BIN+vMisVv`*`&Uwzb{g+&~Uz4(3A_uq{(z@ zv0b4=6MCu@l+wCB_?~5a0A(8QcCvWHYY^~!vkKPjioj)lXOZa?N-C7hpgQ!4BH-nr zr1Rk*W70(t{tFV$>@JR?@vlffz>lRI->dMaTd+g>=60w1*=oCkf%j3-MHTKu2Ay>`Os8t=YyZ8F^)FJL7O2~^*7$|TY{pEWJ%bnWE?yu?ol z{+5ruyX+{_Ypdt9oEA>et2b(o$yc0>7hXo-&Oe=p8qRxnaWe;z zo8e|VuxnLP+&3HkM5&X-Dv}H?2X`w8Z|`=~Uq5CH=H5YnHNDy!o#c$=zxv8ijhVpx zTm@g#{aDU1dAAvGQM-7ypJM1Psm|pm1z}01lY+oymHif~o2t{$4G5l6K8trjxk~4K z>;riXV|8nPUBIiqg#kCKZL-l&9_c5bF}HFMjfFoC;7H`(a}QCPoQi5-CQl6h@OtV| zZ|L&=a+l%+mVAn zuNJ~SgtOyEXEg>mj2f;_SK};`_ldL$&LGpOj+<7kI+MwJ{;w>63XLk~RDYAM;sdQN zPTu(t(-=t!8{e`JqW0JQ(Zu1)nrk(!qBmoYjefL#k}KNB72DU9p`Y!xUQw)wiXgWZDBf_ZS&Nv zyO8coK1~FsPcJ@;DdZEe_$LZ$A$V$_D0^f}^GRNOO*@6 z5#MJTbAQ&5S#NjC@<+x4&L^A-z1)i>{S+xy%mE%31LMviV)MZ6ajr+wVmuJ41BOYb z83!?A(O6>8OviWo{T}1m^ewOm$-Q*G=(@8myX&~#BO9?hmPir1Z-lj0OnqKaC8IA)rRXezGF+&wiOgWf|q|%-}pA-lP zf7$5rkw7VK{B_fHw~+{8xFs`T0mi2*vGq47goOk~w-Nu*I0?zUes}AK#8_{Mxs|3~ zOmT@7L@R^9dRG29n%f^0VTbO7~%Pjef4+@7h zv{JC9!JS^$NSsPyZurQ?@}Jg<6*Be?a{@pleC{KIc!rh32-AS(_P${F6Q}S6v|;>; z=|M8+DAOt46DE<(pkUnhkMA1m*h0T?W1CuA@`-_oR!JS(*t*pm7`-#QEoUg7e^29F zUMnK<|GHmO<*blg&hpq`P!xP9jCsTCXqly6W1xR9kw)cN!|iodxTvQosu_6O519nj z&+^^((Lp$zGac?{)}2Mt@syLMq~fukF`+uvsL)9HOE=+TNd?|c#r+)YvNx)H|8q62wjlew*Gi$uM!+>U4MXxTM1;4{$(7Bu*EhfOP#~m2x z6k1hwlFDW(ANNum8i|aW{f}Ki4GnGCztdIYZpsDy>WHfGvudRe zESAgQ&m!+icbq>vU9Kw-OJj5l4;8F|RrrW%eKkizOb1yat5Gjj8Z2U1y&=PJ#Ar=m z9wVA3QcC;%#!W?z$IX-VPU(a%<-yMP*NhZ!UwL2<4qmZen!M)Nm2EpW%Xv4N%bFQS zP5L?YX%U%2a>!Vrd1prtugbn#=eTMfUIF_#+HJBnGU$qx=oe%aunM5boZgHp_P-p& z16t+Y0K!%nEUP?S;wI9yLkKv`Em4TE@NA?P*vYE;IBb_$ce8eh%4VL4jz@GDc*4!zgoEQ)c5?Io7IHpPCeWB^HVTb^( z6{OK(={jR)Q+-|9A!y>;Er+a1mFyIt`PM~yln z>_b%xGX8|zkIJ8v>yF^D^9}I8O+W{4OzX{S}P*&@apa0`#?#g6>OK z7#v13Uy22l%$m!&c&VN|a?Lk>v6oXx#f(5qk)}E}EO<1{Qn>*m(jAfK+43N(oy&}W zTUD4@P_$~bO!&JnOmst6fylsCVWEtLw=GL`01ymOU_>%T2obBE1BuI)cBBk}qWwr5 zMNq60>pi}GSbM&pqh(@;&+Uo@T%zbXY6f&_3fdiO_Ao6p$4Buq)`MRMYg~b>NBIKX z-!4#yOggW|7=!kI-al_iETs%!`YQGaM9oo%2XUPB;e+*;^QlS$Qeg+{DcbL8KHm|W zn)lCjF{gqUIs~s)ZEB7z02^tJuiu6kT&d9+0By96eeJSOU!#KUFr{<1Yi|i`RI5-$ z(Vobo2E46YVgk`%In7bt@8Bz7VQoGWY1B|S_MHnk;yVia?B|7%&bq6xI`-Mlcx?L7 z$ucVsv+1xtej68h+it{l5K3e}{lRn|leSNaSz`92^K!jdfrzDSP@9bJhAS->#q%>^ z*!z{~*}iH;txaU(SYxxDpa0=zLLihoXUO*kr`@5^mQDYPv)1i>G&1>+-cTaj%vQx& zCaqfGpH3d=Dn@I@Lud$hcN6YYR7oz&WWD$U+!K!`9@N~Yp?jl}#GIb|Jg3dlfsu6V zbte{&B%B|f6aYH9#SaA{nbd1z@d_EVp!m^%+R_>;#&aTDK`vQ z!trHwHyeJ+GzH35UFX8iGptX5r~++^Tn{-cn1rd){qq({bId%u!o$<`)Ij|EYjWsV zSZ9T;pfiHY%e`D$t!`g0$kGwZfp6V&-^y2dlujdLWo0#Kgx`0yFW>qe1r``rI)Fgx z{}nwZwUa_%cp{Y~ED%402fvhI{8XpN31WeGM_SveqQDr&ReL)Z3l{rl@AOU)+Rtk3 zifX}9;JiH-1;f27@l=}mx1%UrkI`FifL}9wjXq`OYg9w|fqAS(W_#6!!vdxjjRDXWZt(y!ZjR_RbrYsqn%>?ZpmOCV)$DRXnE zyN5L%4g8h3!7)YN$r(c|M8U`n2gVB+N}ea}84jxki-jfpI@x&(hPWiWkv$L{;L4w5 zGd9dd@^2T58X4L)uj0)X@Vhz|#i}JRJN&+sz>@@`x@1ikXu5xgyG`WTsYckTgI2EiS9j%15!9`=xhsl6cic&Fic6ckv~HWYt1&Zr4GSHZ zpO5QW8qmiB*^#%Dg47P*5P-=2qzl^4#hnk=e&KYIrTJudkqvY`Bq|Czm1#lLmJOj9 zmFi)b$A_kq_-j&~B3T^2w?e#_2z1a>$T8{{F^vQ1JhsDM(HeznlS$08JMGdCP*5sc z1`Zz%bCwpwbWDHYl4{ACHminS@>-^~^1&%q;D|*;q*cB=|Lzc14kq%8p^@Monx*?T zpt0~mJfE1C7EB}2^YU0B=elg#2by+N`tr-18|_4oZ8yXbA4Ae_okXo5$N$mlESdmH z`mu}0@+egs(9jLm)q70*$DbFb#8B$E`%z_CciQWxjbc8&P#D?JwwUHuQW6VulDZ4= zh~{-?+NFg2pIS9^hi^NV%L#@aFYTJ`+_`3Bf7NOl4I!BSwzBEga<&^1laBQ^sthXn z=o+pF6`C4-fCvgnGrL#>nWhm8WodmZaX*?BsblT_=J_iSo^<*K(M>*LpWG2*6ua1? zR0%M>CJC#8V*{b}Et_TrKR~bHeeXgc4D-whQcWD5^r4&->k6Yp<7O)P%JcEA;GDHBvfZKYivWp=5|-Pq4uR{uuFb<#YUYh) z(YKY}nV`CHEUr>oACiZyu1kfLAz!qn0@tG$h=btC>U2S$|s2eOCo!-k_Rh;YIgrItgU6e zw#m9R)tPm`=;|BS|HwHnv}K+e#8?%2WoWmsP+ z$70l}*VoJJ<#py18Jq??=T+RVN2K*6)@@%(*OM&s7bbC1H9@%1C> zy`OPr4XpzS#2e}sQ`q7i$Q7vx$$1leok0lvh~4IG^ceBGdD?oVM3qW*#oejQH1}WT z+>9d|L4Hjd4$6xf4QUm^H|d+d(7Rz7tRY7pmL%nMC-(E|Uf({=jGpSr9mGvJnys~rVfilC*wG7z z(?9EPC>K#_=P0Dn%#~>ul#7{|dhS$tNN;#{a3pUkklQ;bOLZ5cVCaO`nk$LkxaHj+ z5`;0)Cp7I-dXqJ-zZLY9?Q_m!A(Y<>C;p>fhI|QxT}GxTU9Hn({qe?#W(EWSkJi(2 z5;9Ln5NlDW-ZB$}74g<~S5t4YdtH61k#m};rz{*em(qIqwA6P``t~vpb;#Jpsx^j$ zF9NgqhXdBZ5z%ptmY1vf-;l%hBik0> zF^9chu9XXR3v696?HDr3Opl-D!xX+RP%8)?4YK+-)JcAXC_J6d`AOn??THBgY4sPd z@dUIkv!~4GGlT%t4y)Xc%a}OsWI5X;^bsjgj$L1=Ir*@Jl%-8V|$-m;x-!LI)w#kuoE%2|!5k(*fXh>_6E$m+rP^Le~EU5a;iRj;u+5g{G zef8T$Vuj+xgf$a(C$?Adt~#biwqfZ1X0S2MbiT-Q?SaMjiJD%x_&Z-)g?>}auMPlo zO35oJoK07)-=0*po(tBuhn^jll{Jch(>cLQR#sHRTE*dQ3De{*OrwC?h)`%JStvi= zgc!L9N|_X|f2;HV6Qrl6fsAv)Rei(E|J@A8op@^DKso9o_WvNc|HbAZpn728AF7Ih z`-k+uieLgn!osQb4;20?1WAA7Z)|*0@~`a@Pk;ml;tR(+{|e71{GrNtt*lu7HEbY_ z2@$^p*EFub3a82+Dgz52(O=tzF7qdBkN~`<{cG4j_D|Sg-^`-mukE6gflLeOS+kA5 zGE?RcwXpNlmh-ReqW%-;k!hd!k4yG{1Wd>oAk>7Ul&t8#w(Bc3WElUy801U|R&#=$A8MnkfF^ z0=Mk}5br_=pN5eb-x~nCq1|YBwTD5ln4h$#y6H+CmjO%KZqpLgU7S>?eo(-~RRc5r zKYc^U>dnI%-utpJw>N-ty}wtc$~$1_Q3c9-&o^>&(=Kxf_#(yEdV|yE5YLMJpK-sEH11=J+7ewPbMm~4#!Ex=#q@UdEkesv%#hb`(A_^gG!QY zhLabCw$*f;oi*?%v?`z7oG7+@4R&U++N28Z9 z$c6YqdA)k4?;O^>WZ#uEZu)U*Y2 z7$05qFXjkYXzr^su`vB?F|<0kRDln+4X$PCYNS7O46H%#EE!3t;)PogKbi6D{jNb9 zt>K6np&3vqve?{7NZE~ZG&T4CBaCq;u=S{iKJauk8j~m$q9~q)&sSPi& z&kP&&nHd&~&11NKkq2r~)>>}9Y4bTsxthw$60Cp|ndl1eW4@@$VZ3`!Kz=s9cu9~G zSSR)wfQPnZ;_&E1W2sGx)uVez!3jQ@X9(ked2xRDLaFPBsaMkY6(X(?9A??EdsMR`Pm1m%Z&Qia5ln91 zA4#1zWBw1@-~sl7c9q#ixCMJExy-h(j9#z9EV{X31!RwAwq&wZZnxw4)N(9FEHEs) zhJDJjAuwT}=b4fF_7L^eKF!JZ()HBDE_qABPuA6engM0*$*j*2^D9yy3Bl3Tj|hgV z=fxhtJBRhWb#~hg*dv{~ytS3q*m-)L54pdhi2We5zLhQD1l%OMeAQA&Cb*5e^X$4C zL*;xnhrG9&vuM*d&hvfDCzd!cE~SLtc>Gm7Cdc6NQ$+}jl=%6B(q2KDEZFSxNbhZP z0vjgc9=W5a6@F)vV~=m$Q|_9xyLMZrm&~fis7N^J3}vm`HDcTAt^RDiTSQd8Uy7x% z1&=Yg!)wLLVugDyS0!9PNVT)EC$%(f=<%~R&!PDB-;c7SEBYHX1kA01S z6{W5fqLMp*v?_7+v*?;w`O*Hu`K>Z76Ba=Gv!wZ=UVp>et%q2^dG)7WZyGB!qIf)1 zqfooY1?eDWfv(zAw!okG*9>z~(I5^qf{uGPx0r^zw+iDqv)QYNi~YJgkPJx29oxP|`wZ3ndj(|*Kf~2h=$3O$#z9z*4ghQP+=`|_1j<5^GYHS0gc-`yX=Kz->G_Dd_vW#RQ2ECX#;znaaw6d zK>AYq`ewc!cY(X?=Lv5FWv|IXio}+`{16Adwq~0&)_6!SR=y~hPwv7DVv#+Dzs=6$ zEU{+n5L6I(#zie%kTYN<-!908zm3Kp4=6p6i!lRLZ8%h!{o0 z^$~)#mssKv&0Gz|l9A0krFr>cO21ltvF-L#5gzwO(f~3@Btz>ho5)zHF@%xep6VsJ zv5FBb3*?_Rekbm-3cL@b)6ipxH^F`)sL`8;{$kw8~W@MI+@r`G|RG#&^h|i{x`V(Uyqp>Isv| zb=ujy?V}>`Fm_ut0|_gg=MdtJ7PW(k-%AF7Az5ocPBqqpD1({E59cm$%puhj6N67| zb`n}jF?^$*{lyGZo9XIDue&LjE9twd*=lS2LLM2vD)*_q+J&hEiaBRFL$ zh4je+V%wvQ+ceV^nk+|)RT=U*f&!fchbs2P0&QyikSXK=WGxhC67xEX`WrS&F@q5|+es{2 zCiEG+@lqR}=qJ?ZkK&4Pmc|k!3`bXQHoh=FT-OoZw6YvLnMz*yX9kZNk|No3Pej4?i;%~k zW>Kr?_B+|7h0#}mrtA=PWl?MynuG`onm&$2|Jc%8-U(-J4wPICZLnYR!m(4GQ{^ms z{6=n1a2Eeo;0$xw*EL74YfGTZ%*7sAx6-ZH505c=jprbvndlC;X^nsFqcM!f45*#5 ztgA?2j@LeqlKD6V*pF-^ih~2)lWk-{{wS z>_YI`v;Z+9fz{Azzr=<&zhqzmuf*5{e43x`<%`stSUMzb#&8pAfEBbgHx<;$viG=x z<|Si->5o&!M}?;y{OpOh`t@Z$>A4U)Z=VELx;UKgPKCkEMtvXCIHbxrXK84lEx)*) zt-e18`@cLK+Sp~aIv^0Ce*mC28+BM1q7pKrH>&wK*S6YJ-pd}cy!BdmxR=f10?`t{ z_kFY~5)qSvOs|oVv7{2s7xKgBt48_FI?7b0{Djb3{rsR6QwoT#G$vSC|2{B&6h9GE z@2D#$Q!%4HS*ojSt?{lHgocwiSh0}n_v*w_)_)OA5?QON{5&>x5W4!k-KvQyA^oP| zsm`+aQ+Dm$6>D+8$3EqIn=#_uv|iVn4UZSK_}}yR3<4Y-G=4E(s@sT z1Qw%exB3RUwThGeE?vG?n(ZNqXiOdc{FH&h2vJ=o9rBO#0&&#Fu^ndP#$H>2oBKmV z7GDG$%<&CjF-172F;>wHyJ(wjkVPVejOB_t9xbCmjz~IdW#kT)oocP!6~e8m59i(I z%AOwq{)pW3BR7mqdL<`Obo(~}^FEp&oltam)LVV;=c_3GcHao%F}UCCPM_&d)eCzE zQI5WxNkqWcs+b&Zv)7vhNbwY&>ew#(FEh9N$g19Wr_!hdVtTmdTj|;CRzF@u8J7+| zE}N;Kmy56gIMir-2xRs=0{Iu8Q+UEYv{o&@2O4*J@Bm1MLP1;-1r!M&{YwcmY1)bVjElQ}f zIG}#}HoUZ*)402eGYXp@ zn((`usism@41W0#SB?K6F8a<r+$?2 zdbMl^Qgwum4yUm&&4b;wvK_g{nL*^ci6eT!*P1myy+_|#8H2M7+O89LVC!WX4~z^s z6ad_k9d}5!$;eScmK+%dihD#shKu9|wq2dZr|HE1Yfl95aD z1i}Ce^4hz5V=t4zyQ>9|#F(T7ED{3cIOPNK7{o;x9a%j@I30oAfh<0Ei&M$J)8EG3 znmricBM5akF*sfdACFy&8>j+O9A9Gm4I0I)dWmN`aJ}efYnFb|P@cHoN8>7m>_{Mu ze0HgLlN1^+(~GWEetx7`s*d(N&rQllxWM4V3(JT8omgF!mT8S;YI2<_EQS%e^MgKU zmbLXb!|qD*RTjH_`O}bPJXP%{X8ua&X#fxY1y z1r&4qWES5zOV1OgYXP|)&)u4f+oN`aIS(Ar{V9mK5t2dURF#Eg+mSZO0ga$b?s~b` z*oAARNu$vuUptP`967nxZn%UYmu-15IF~Gs+Eel3sR%j+V{=5Gsnq51FYf`$Qk}h< zL`e~Cy?U%5%6sj0n9kYdteU+xTjyK^PXnN*vIhZ5&Av9fsG>nrc#0rBUL95hO>Pg4 ziqPGpJ1##o6)HiyL)U!9H;U|SvAz+bYs$cIf6r?bUlnDgE_-08E*Hwl$l!GidkfX- ze&wFlA)_5yOcjVv&gynW5$KoVK+C{5YwXzJVKHJF%aT;5`6_BGhwn-2jeA+jfEnxd z@t1#+?wK6KG%(_crwcO^pSBHGH%310+&;c*s)ZXyCp6Z^4qp0QjmQua2QDoZULxXkOlwA~xPvQl*Y6}De$OKXV1%b_2dz+(aR!S3VF{@%My zLk2w5$B*65L)XaC_tq1cm|vh8C35#MS%4eIL@au{b=l}jwmw?lM?9UHlFjA%-W7F* z9CUNRN~Gzc?UhPDa=zcnlhXmfvvYiU-WCAlNu`NO6pT>>Y;>}hyGx}l?rR(w)Hz9; z;i<~Szssg4=hLW3eD*m7zrHP-rdE&-j7&k^EGVj%Q67@Zg}*pXev+Ex&ZfDLH#nha za;Q1%xg@a{9mnOfMSb?q0p|y)F&KVx;FlzaEZDZH7kRq@cx{&LBMu;S%;+(^gqCE# z6k%czr9Rh}2I)Xn)3p(-NGC3F|LQ|j$4OUY zoZjIfpM_UR+|i$#3P>(YUdfIJ`oxmOuMUn&ME54SI3(~9-GP#P$9|N;TX@JQpFPp+ z_pW}g_exYzjm0tLBwbCUH-K2a`?3e>gyfp8I9_`J29&K{76%n2zRm3q2mF55Cjooy zeK&S2b<2&qdmTc~2fOD5<%~p&uSe%+H@@OIs|Ex3!hk%?)RGY9>!j&@m4)xw);_!~ zy~)Jtq}JLqd+K4ZV8yw3VI~YM){D}uxr=^G=Xmx?-NLVj50S}?ccWm4vRG@wCLNl+ ziEL^Abq3Z%mNB2qBye1SWD5ez%1V~*N=iz`A=#bZstt3$qUmNB#Bfme~Mg}`aL*~msOEqCAJev7f!xS?po~lH3IU#b1E$XezorpfHd zAW&QM?UB8-6*|KRN5KEM5VtvrNlRQ7kBQKwszRl;FiBB}hB4)pSt^D!yzP<3`wP9} zrPG)3^17#9sJHJ^DwH;*>{mo;0&Wyb;9N{gAx{85MO+q6dpGS%msr*y|BFjZ0*kQSh020kH z1Y4#367sowY=xOZIz)oDj7`n@;#>sqM><=o$yw~b#ER~d5jC0;pIT*}#%EY;)>u>e zEV3EFC(t_blym_U~u^Ow^_%_#h8EPahx) zs;;$A$Fpgby4fZ@Ij{60^#W+!;#OufGVyl|!0HOl4FUs^tRD88ea6Sc6gA_@7X)go zVl>X~&L=-y`QA^5TjGp6CwvuVvWffVyq-`R`AuAvqviCjJyG!sQOBS-i8dnUSL(p5 zVN_YrZqhiaXgt%Dz=i18kX&Rxj@g9}(Wi%=+YOBM>n*Q)NH+FPm>FMD<7{q3j`S;B z4u7%~;X;`WMRf42! zo9g@?vggBR;fJloX{6JvbslY`NEv2<-9K3meoPKnqhd(~^-jtE0NDcR>(x(~oeeI0V4Pv4!{ zBtzO>p4OWkLC2+g#@+JL=-yspRAN}JL)+?jL^kOX08eGbv_wW3D)m*Eo)8$ePz^k} zHIrRuhoe&CGtWSPO#^_H~o~n3-D$#HeNl$0CuXlf=+A$a&1Rv4cm&5Onq33?T!ZroJ%EM=vPH{gpTT(y3 zhXBGMC~0Z;{}fSJ@xcVI0Li*d+4@eBHg%IaF1WX@5-SMpw1Ze6jUjDpBXZ$AgSJGr zC7YJ{nI3aZ<%2eA4!=2yJLzwZuaRG4u;}*hXpl3lJkg0@Ps7Jd3aZ;QBKwXXl)k;n zQt0bj0zjDt z{n&;D7U)WC6ecVyYe2x;Uf6lBp;Ha^s8cl@qJZci;f%dZm&v-UZ`FZokfi)W)@qxQ zIB1wRu$6A6bcRFWhJZzVzsf55#cI$EC(|$(w<<`m_CoKY;ef=Th@idr%SYMh z=iSeX*RdG9lJWNO4cAeZfrX0`M+AdEFeQqq(6p02< z=e_ZmC7G@r95eYWm;Ds`meDxEGwK|8J6!k{hg;$If}N$?CcC^M%g)B|@o4_d7}^pm zUh-992{-;!J@37$qIxRhvEOaIyIU=q=A{c zg6yz3*~HDNL+;bt&T<>CBE_$pL_GBsYwdZB?d3i5XDdLdR3S8`FG1vk$K+}v8BuwL ziv5KG7n5$Gx^q{lu>2UGmDiiitVdOuSwON3)qHCp6-j$CTkpWP6)Og$1|PH!PG5%8 zBn-O0@o0Yo2cBg3cPmT6_!~nMZ(OmP-$i1~8Y=Nvk_^X(gAvc2w{>PUI}rxk_Qq4BfP5@Z9LU*Y|Ae9;A>T#Fqql#aGP57VQsX&NPzz^f_iS3^%kk)x_AuR1Yzf}fUMA&4u+VqL7I&tVp#)gT z_Fma{C|@auRX8K)R^lIH*N|gP5i(<~#>A}-jvbLNhvY>nLXhL-PW$iH5uD}L9Q6^P z9xVagc*B>q1yA7H;E$R1jAg`YCoA-6CG#*->U{LcxzEUowm%@-gyQc1;1-&+#iMX| zWoLxQO6x3_HQpvIj%%$>&4fQj@vG^2AUVZ`R(%IEWFcUu-Qn04tY|05qB%5XN2;sK zDL)>byK;3AB|$n~>kahXC0eQPec>jsipGt6pEH-vlbmT#1mEmRnh~smmu-a#nG=GD z@+Z!bnW`Hbe3b0RdU=7qn-At)zv$IhKL67bSjTnAn_4ojqXW(|Jp=8=o83iQUiyZV zbLXM-%2VRA`n*P!5))9R-ifx|Tw2<`(WlK-5C`d>jX}cBm=H*Auk$>7`S?$+=A@u5 zK^k&@U)*`yVRnTOH|o$A6@S)!HWb9qpG(ZdH%6HJ4?BoOYNzTe_hITAC$sA7=MsTn zO|dPNn{W{T1u}7Wg&@!Jprw6L$8V$%pn14j^irrd_WT}wDyfVjl)JXde2hdOZy}LJ zL$LgbD6~iJsR@msT`R03jS>G{Hkw2X>0J(jtl>h%LP}M~%P*pb8f`Hd*qMTnj$>?OK<5Kc{AB<&N*0b<}*(biv)VJiDWtb61odX6&SY zLYrEUSfxpk@$UUt_6N#my#3{H-`UQ**CPJfz+Xd4Hhat&tITfW7nrt;cEd&3V{~HP z^e~*R|HMoU5a0IH7xMr1PH#Mm`)yOmLbfX0ec#!_9-*^h;|KA&Lxt@v)AuCPio2dZ z8UQ3!Y0v@gvms*m*wR_}DX`MyZ3y?8J<>o@e_e2HgtV^N$&b7D{sqSfCvzw7U|cH} z!auw&(8ptKVyH zA5Mc^SAIGa-@#%a9L*L*M3MT1&R1$v0@^sn#c81I5^vAIQ&V z-dnxU;3M?Qeq@#joT~KC??y-3B*_iKv184Az+EGzpIEY&uXvO+>%8N--{4<^kKKcI*m%Yx3D;_ z#2bj~ysv&2zyv;RC>$W5qj9)>-n3bBcS9ZR+(h+3@jz=m4myR8_Q9X}Cu;o>%kv@{ z##zM*6%}G(TD2AanBvMIn+-}amBq)B(d-dnAP^|8)5*tZj}DezO!OKCLR)6SQaWlw zGD)YS^W5d8e2-OQkuZ^P30_+mxN`d6Xv+I7Y{8;cWL__|$(PyH|03Vj*^JCK> z$YNxG*n3|kbaw+9WVfH8yAp;3+A8Z`G-X;3J*ek~#tVHY$9de#3y_7NUo{1v%!d48 zp26WsK=U2~DT%UgA)|KS`g!+{RfM4UHw&tE!xrLyg0|8c0433K|1*T zZ-`;P$kg-5fmoYoAC2Y25$F_)r+Il!DjO&_jFMpN2qD>; zNy6NmdP?RM6^~%x;{@BY^S3W?MMEcIMH_oW&ZojjbpYWmwf*vZSy7X|aJDiDnl2g-HZ4^9&S|KG>KPAUuT_07REIDB zuk4Yn@ZRbyy8WZDyOGyuaG71(yp5LhxmRQ6nyVCnOod*rDyFVK32)&j--UZ(#&A;{ zCJoZ6?0_`Hy6epq38pOH$2@vEYm9d?$$Sl!LP`S9J0$J^NQf7(b)p<(2`l9lrkNQl%XJg^jP4?MQA6!=0 z!B#96+Nwx6x%}Thuu4+@$uvQO)nFC^?hc>FO$tO<{|1tDVB`4G`nf8BJ$T&4c**uD zf?qqW>BU-W=VqI1)Gy-kMFA9;_+0jx6FEXc-}LzDO57tYfWO>mKGX0$MBurz$=jG1 zg@0syW3AwQ;*s1O4Vz;yY>#dG9JT(n@{Mzq(;2A`M|tE20!?>M_!SPPYMuo1^L?OH=f$|mC+_9z^`T?ypE z!%u%15tV5f#|ypc{74@f)*i;iDb%3ZWPuh;;Q0ElY^PqBKT+V43$*cCHku;8VM^z9 z=At6iJ4#vbey;7NcR!7K&r4IIhFqKTcEj_I3Y4NWq{y;!8)UyMe+cXa4$5!VzNHuj z(`aGkrjFQ>tO(Td^+@vCuVxle$B*Sy?zH`3|I$XM=((YhB(j1#QODa<)674FB}J@O zN+p{evY%ACooz;S+gna2OAEg+e@Q~9%m-gB6|3LL4YB=}jI(6oB4UgElSf3p2D^6F zkvUUY%m2&Ot8FjhRDavRr>kMjONueCmS*i&T8?xpKL-lbqL)C`@oPW+w{x^2=OOL@oSH&uO_K&SXmZd1P^B>e34kk*ypPcGMf z!(XMnoGZd$wNa^ekNhcy+9*+&`@KqkTFUoh4xLP_-dSRYaofsU#huQyNzIHOgLuC%3Btmn z@ks$$fax3xUk?a#mYxCSpVaHmc7VQ(_tAbS6=C*?4njhf9sH8ifzp_tHDohB*ogvn zb|P6&E1Km;a7^Afi9rpS3Gm=gM$<9l*&=sc4-))|iq}8fPSKd|yDNVG$K&v%*?NxN zw84DSiiPma6F6(Xp{XTX7Cs$8v+gn`=%D-ibJEzO4CwjBw7DdQN()4~o-*Y8Y-Gav z$B5b^H*%=SBOc8p9ggMO%a}srneq|_v?-7ir!#DiP_^*XKCMwe5z#GIjU<9^N3a9Q zsYusCD>hR|SU%z*MBMt-Nh2C;L}j!O!)$&kH-*3?QwO9%ZYnQ4t#cN{Z-(d~a8AGD zdV0CK2(t}5XvV*&t6q#?ggO81{y~G@m!V`d+3>`kk*CcPxWbj7S)XRP#H%6!p*27S ziD{znJ)#;t$PnmoE;ja~WP~5H5;Z6%ir`;!9#I- z_EC$o8nBU$Z0v;#E>iLA7)y>E5`_rv4hVvOyo2~jv0(RxojQ@+wVw@L)@{8Yxk?u1 zG2YZ|j8BUcQ!k`cbBVCN=*xajae8;dVeC6CEoMHUVO7?Cg=R`m=vzecsnrW`XX3Is z%_;b5F==C3=Q9I+HON&e-Ctd;)Y(ew)4syy%j7CQh_ZWGx_PxZq!;3}I5@St6BMCJ z{__J6Mj5>{DSDVmAi3HjTg@np#312r%r8X=v39v!n}Q6*cKO(yh?kx(#9gPGe@1Uefr`Y}#EIxX3f%zqJ&zl6Z4&r8p9F^lTk+T=7rm`bbW+;!j zBirr2fsT=Jj_&;&O0%~#^L~G*VXQQ(+m{8;x-x|GW(<3xslDFlk6rXt^Ir&g>+!rj zB0d3@Ck2!)aB#J>>5h~bbl6KP%S4o41;IoQW8`XOR3VG4XkcVmWE!bUD;>$HBk1Z$%u(|8>4*E%%5j#tE+NP+N^`c z0bLbVAcn^Y#@@}Ca+;04tSH%FtBCF-uJdYuKhcXoGu8ddOtP5^n=7$%5_?DMom}GD zf$!SJH);)#I^$argPk<`^NM1+^@YS3AI#99+sn|QPurStO`0=b>0kJ3{tSfes z2)MK=Ty=io!Y!q(3l(2mc{9Ia2+>R*JLZ5ig0=q@$co|k%?u`)-(@6Gu$#(=EI?4< zgChVx+|*G-?srW6wghLL9d^-5Gbc{cL2>ON9idL!^c;8r(V-n+F;C%8z~G24ry>_$ zCL~Pbs?a#aeBa}e6 zLT#OXo9n=Me@gVPI+dXm0?m!sG)#F9Xs(%_pWr|$aQ;gP)S*iwoX6# zI@yO6ZP0(sta}dIYbFFryA}p#Qxjh3TtB?ykpc)uR4?yY+Rv~x2@h($-rTSxjUCe$ zCFlt0&9hUG0A}MVc*f|LWBsA|2}9EaQ|P%K;qrjuaZyTrX2J@X3fyGM&a!C!W%`xD zK^QZzoS(QKIx*z$Gj_<+qyB+>z%j}77an2GQD1=itcTK}`t?Y1j~%P7 z3_>D?d^{clDZBL@t^-eh03tXRj#G=J~8H!o`9q(<(0xpT}6?_~aFyC1YZhRKQPn3=#mnk(~ z&7O4#N@_4K6F8Zjtv)(A5~%^nd(BxA&HoZ;syc*YAwxqSU*pK?q;qpIP)lH;XBRmv zzMQwIc>5g;Y5bqzG_`1^I#mqHGz>q$Dny_Jk#({`D*O4CECMk8s_%L^c9)suUi)1JCJ>sXS!*5i8)s_XB~>!cI2k#>n{?cCf$-;*l5 z8csm0M&*3{n*CHShA~CSy0uhk6l)z9m6jN~;EX=F&Z-f|%MmqrZ$}m_*g{=e{LKPx zKK&a5oMHly&DcEk>EY&-Wm|v>YJt;$FF{gT?(@SQa?gUg|B9577 zEoEL@HZQCuc1Da_DXT76R;b{So5NX{zNhnYREE+Y@lG8tXz-V9B{qTrG1ya zBP8e3_+X5t`(26q0)x>WH7#qFw9;h!!Cc~qB72IW+a8-W;j1Az;iNi#>#}@vefdtE z9&)q@Eo!(eEqg;pKjf8`B$(qo5*`5wZ7ZfrTy--(BtBQ|IvXKp2XK&s5MdD{+cwB` zx~VVSqQejY^Hyf!c^p}}i+hOw8j?T0jhepQS%gQ3D$AQRNd{bKv83D(Q(5q!xp`E4 z5Z#2>M|V-P0yCR^A$HFV4#xqaG}@@UoG?M)W-4)${9Gj&ZuSya`=+&@&T44c$OoBl z!*HT4h}ol}K~K05`n-R12><60?BEgSWdY)ssCxX{`e2#uu?zwqITHx##veI-b0CpP zt_>OKQv*A58qj><a@?ya{*jE0SkX|%k*E{Yd*K4AIE9r4`1XH*p-GRO_n27H#_ zJbAVH!2Ti4uy9`GjjaZWgz^SW`(g;;jnP%EC*nDALHKIf_`t;RD zMy1oymsHRbTtJ;YsWMe+QiiM7OXjrvdjG;0Q>HTlE|3x@Xzke|%YC~Rt#lmxlE^`; zR!v}Zp2RgwwKR>rz9a!M4y-}r_`Mm-v?|MW-ON9`6Xw`FbnX}gR(E_#kojL@yEcjG zyer=3W})dp2Bw|aUS!GB>Md;o%xAk5)Y#sys)xehCxFG?p|+gl!92N|&sGO-+hv$p zj1V5JzpR~4oJ|Hfb0{OFBH=}gECCB8iS>tS8~dZ!gPIxSaVC9@QBF&G0vc1Yoy+#+ z9DXRYIO2$ul+YP;y_qf(xt(f7b`6`v;j;V9xlmhPD;;&zcj4V1rIxnl$JSg+!7>Ay zDlo1cszePtCgsu_gM1tPS6G+ZM}sdE;}`k#Xah(xy7R=3?B746A|&cHir{4G6}x!v zt}1N|uu80?zWRE*Dn+Qp61W`vkzzqB^!e82z~`ZEYH>Zu%f1 zHb&GQ9-vj^>5jfX>smxHow?Yty(V0@&=UODBn$*^(XR3Zj9WX*i40O#kd5CSX;lxJ z-J`^2Nnw`1wwtJX71!YxZaFVsZaWzzAN+oe4@nKFeH=ynwSr}6;ie0ukUu-6zY&$X z081l!d-^Pk*ouIf@6YVcQZkORstnv(C`%7A*pZ=(K_$FrX+wFQI4XRWUHz>eZtl&W zQ~2|OR^nP{6eoK*jMTBa?}N3g9qPgbo}`NO#L9jagy{mEqo*^kq`W@z_Zf@2L{S^y z1op?VP*d87WkH=Fd=mi7(SRCSJl0H0{|`Y1n7E12jx{)b>I!E0jk*!>L|=*YZ@KrM z?>M@Dl7`CmyB7YMmPQK)G#~I9bv5cge+Xy|A_!HIK!(j+GkGcIp9t!oFA;=4I5Bt@ z>Xd)|^FR0SzZ_ab46N1cR3vb>lLMe1Drimb=L$DyDs30vxC0m}GXN#Q?(^U_-|GJ9 zOw=eWHmH-tu9d1`$uZ1ku9C`fVK_)CT?9ZemFl->xEw7p0`RL)FQ{l-B>+ot2i7|- zyoJ7OD2O4j$*%!f>1Px2tOJVN%e2AR6p`~D^kTh$g~0Iz0gK*CB(&#a835aA^ULMD zdB$!fm`+YcN=hp7MC(FCFp<@e1uK{azod_E69L+=;xRNos^|-_U>Z5CreyvQzj&Q? zRJ5!v4;xko^<9_ggda}Cwa!fF2SnkX!A-KZd21G_((OU)u>qJ#ou21m-Pr&`Mt{wy z5DE7vw6Oa<)R-<>*Cf`uyh-X0>*o(vp+*n|i!>Tw7WKK0JOfvX!(ERuWO%8*QZJ;W zlTV0icHWok4Sj)R5>=4lv!I0kHloJk(y9qyZy||E^MN6VrR(P5Nj25g0G#IIc=l)V z4uw>n@m}EsC4fW1#Jyx6(0cM6-4WozXcg;xpZ<(Mz?yh5%rP3rZZ_CI5X-O$@Q;RY z(S1Ps068W%H+KUR#T5m_0fz@m|*`ZZsD=jS!lL=m{R{}sN z3&JEx2-JisVtwuejB(5W7^6kx6C#$$;rrfD)DMePS^z!4jnarr*aX9GfS`n9Jzi^i zsd^^9FNOh7BM4ybXB#m9W@$c0{^!}k&RklzmY=va)aJpB38YUng7l#XUgKKw{l z$^tUnbxi>@RnYT7SQ?bQvRS1B@xmC`y zlc8?Bf(Da&ybMl|FW30;x$im9rM&ba0ov5w7~uD_9B2u->!a}HnYIGZBMXzF0m!m# z9+$Pb!s5&iC;$QK;j3#nWsgm3N}X zTv;$6bRD47$pcJ{Je&DykD|W0DigEoqh)&QKlVbi;csmI9+BjNI+-wy4j=C_>L3{k zuM;Q+8Q&C9hxKfEGqd$$DpWv54uP;|{WEUHU_8^l4H&Jv?5oo~;F74+>r{ ztz)c<{sKcD!K*t3_A|fHo`jzs)b1|#3y>&Plsf>GZe!K=$yuyR5Pbb&rM~9D()83S<&*P=0xsQO15Q0k|J>{pz%USuF4?hssv6eJPdACWI zpD?-R@9C}|gKPjcW`5`g8j(%Y|x0C%R*QheJP%47B8fc}YIxI()RSRoh z0)Fn624IM((M9 ztr7XL@vShO9?22VA?(5LPR2J)ncIt@yb5W_QOOd6xcyRjhGVW9uOe|@gyMIl#_i&5 z&}eTQtQs-ZCzIo&fWm3* z*&y*Y&izrlj>jz?hhKr>mZ&>ClA+HXej7yhWlM%RB?G?d9s6^V-RY9VE9EO+-*UZp zPSBVyupgD~`43#;doQ&rGp{sV;7H{lhXNWdB~AjLqBy;!+w_pVM{OtbBaRlguA%Lb z_w62{_G?K-m)w0fwuIY7EL+#czwYlfSTX2Z0w0v}g~*1HYWd%Yt^g3psnPqh&7uAK z*LV1^XL2gpVHz%9oHDqst=y8g{XJx-9Zp6sbh&eA)Ip7LCY|;fl&Ot0fo)r9w+n3x2M0Xz-V23n{|-dObIN#&cZ`+iUDEOe{KcXJ z7)5n6n7Z$%o78GG#&6*!Svbf*HGsyo6bqd9yRc*tU4l8?+W_s6Beyvs38zd_<9!1tWpQT8;| zDF8P+aW|MQm!d7Y5XyHhNtsvQ>#u=c;aYG7eU;i06 zQrhz!6G*4oT@%*LaYl2J^=mkrd>rV?%Fb^C*q{!o!|lXBSS?OO#Bmo`^Yttk zCOXrkQsSNtA{F6KYH}MX!~<|BESg0;DWAV)yih){fe$vLy1`t#29(L4lzyApTL!_) zm{m)lYmIR1N|Gf2K)9}o!D$3}1Djh6pJ%)J%wb|k$lK>lJc_b({^MqujwU@?BpNZ( z`Iqw0CIGV-Uq@j6*+)nqzY~s6bwI35R_m5E9eUsJ?iunztsGC`J)aLYAq^|QlVZ5M zZU;r^mDa2H<9FRN!f?j0a>B5n595sVKJs0P?t4>3?*o|$D+`HSmnm~*!te^?L~S4X zV`y|#vTOC7%wd@1&+K>#m52k3+^GBlaC-Mn#5<$Jen|1Q88?wVqsJIKbwmsHT26bL z5-99)Btj}sxFgd^0l(yxwE{vZ*~}mP{vqgVptY}|_tMf0E-q`$PM~p{Gpy3l>pj(W>~*`D z=&_3{lSC(-we+d1r%DeM>q-xD0_~>6KzJ@df`b+BvR>-U=HsRf(Ji3COt3Yw1S4zN z=VP=+8&w8wW9U1AEBW65^q5E>sIkZXNv1xYm2hN<5tB+gzo$h5mj!~g*yl(^OkDF` z=rWI|vY7;>H`dM&4MkL$@sj=$U9*L?6AE`5H=)q`RbEVmcR0g6#fT7s)|RpO9o`SH z1^Pm$ejW{<-?yHRe2TPVOFG+1vD@02{N{Cgw_o9mKeOq8v+%8oZ3T~wD(YIC=fc_W zI1Er=W=Tx9lq!;eVpf zWPD%X6PlTquCtNp3&DQ*EtqC}!9ie*{_7`IfOA=Y1CaPRvm-zct;Fd> zCpFMGg;pYQdmacGe@J?`bSQzBq_H{GV5{psLH~{Xs6Dt+ zzB3~sY`0;CO$_3_pzHn6#`((%p;gNeJ*-$Xo5jhLDgy{j3bYRc~K2(n5dc zwbWBJ1y2nBttmM9H7Uk4Cb@tXN#Ez6thwTSeb_$=Blf?L{}z28nujkFg@Q!;B&E14 z?&J|8qJo&Y>`#YlKPR-L&(Uj0(SW~qobLm~9M&eTDzSkoy~83@*fIyp4Md-fA$;Hy zX}BTJaK5IHFtY?`v(a(WmOI=F!xD}T6ugg^>ujiq@|`1di1JwsN~wi?ly38Z5K`U5 za{ZP!bMKRY)LnX`+7E4(+SbuXN;MU**1*OL^a+(uBa8Tp*GZm_piA_9}o8SsJyw$u`5=3WHeT^|BP;`MxeC!rn(M3rj{i#>R-P2dDABcjLHmo(Is58>zDOquAVScwyE3`AE22!0r+F}J;@J2JFC<}n<@j?OvbJj>bVO3s54@DoDC)^S}>hR+1{ z9jPSP<+tFw8sp^~oMgcHya%xgV z7J3?K;Sk0g-8W*SFTihryS%AFM>@A%`su_Y2}9R~r8)f`P)|tt^lM|YR2R^-$+@&i z_y>Zwf4qa8=e=jSvgD-RNRuk8-K&0Q}v+>r}Gfryg@kzyd4hVCL(fE^Nfen?vIiXQ0VRzzs38 z`N5jKFGws9er@9J$5&xIzvgRU0ZMt^3fHAQ(|fGeQcb(jK8uA|H!sC`)@A>@8|_+@ zUs@IFnV&}3!hrlDr$5xOM0_wQCI4J*Zl65gAA5b%j4+`6tsvdB=cg=x~w+^<_8=$#U? z1qqKGM~pA1G?>?OxIo>}EGpJr5q~&Q2QS5gFveY8 zQ~Cw|EPr}D_C@HT{9p*&n~}RK14jrEKaB=#11$@OQalGIz;bDE44X|Qn9nYgzaY?Y zw3h>3Uf$tYI^(k+xph6jwtWS#hIv0P9+Vq1tl8Q4Z>B(8uom_HkhIBnT3B1Uk5No; zd0Ht&o?Qb-@G%5p!xvJ*9XG$iE;GqU(8u0{v+7{ffK_yb_J3O>u&fJV8l%&5M8KYh z2N>9QA>Fm}`u_HM{0i#c!NEX&|AdCe4N1qsbUtwVGVdKO3_0=(kn+cEH%i6GX?8OP zoX19}TK92W*h{+OC|N)JmwDJkLxiHz@J^2iLu)u(y1s!BC_ofhA?Q?FK+ITIDG*nk zG(!#**n{7n3{{$^vXV}XIy6fduF5KAIi zhv9R;A6X-m-7fON(BWLR{m=>;JQfBR($_1MQCu&9a^DC~R0PRoUcP6}LQ$noFfoEd z?xH4FnEHOEXm?sXJ&`Tyy&ChC@_7_{;WW8`n~F7da+eoG5&JS7J&S+OUz?d_72^R7 z*xSgkF4_Z2Wh@f?=abVd$~fqZZRX>Pju#3mBG%kfry&i^bpFEkwc90Ms$L7>XqmuP z35mF?*go{m5y!Gu_JPB@?ci7&2~&&|ehOKlma%}$AS`dL%={S{k|rvJgI(&X7T~Ux zT4z7kjLws_tR?xKq8`uB&$3N;CnF@<%-{-s$1n#XQ705>Q6OSWfIdUno2LaC?_^5@ zqS#K=2iX_~oZVoF4c$(#OlLgYeJvAqdap1r^}p!|vJrg)f3_ z{O2hS*b&V?>_@!ERj1$mw`JoW@8B@N3-Y!xU90&VMq+2tt*2!Lzdxq3d^lfI(D?=Y zAE@1bDRCn2|Ine(X7OO80CINlWn2&SKlb|XkAOVx${6~&q?7Nze*Pa_kM@sl0p4@0 zX8Wg*_irgs1h{IgMzqpr|Cn)%f7&QO>94g=5w>w}GT+c#`<3pu{nw@m zeA$j_FB@YgghBUj$^9SiP`^JYCMrUNI@Q<$ipO5XR z8`or{!dYg)J<9rTCj}{jHCDB3?FtXkBGA-Y@V=eQKP|O=-SQglC7@H(#jDC1SaN;V zlzy-c9SePI3|TpzH#F(M4pQxwIPP$ntBhLAiX(M+zkA*3lhoqPVvNYr6c&>gD{=sq zfu-0m3vRq`Fz@mC@wMt0+40@n=(DUB!VY+Kt2G@kWeSYE{E!9TLx?d&gE(W;ub%J6 z&`0*`d(y<`o4>h?F#kFjg2REbL3I(GC;eODK$jSz$K*r#(y3IbH#tp%?{u0COo!5K zb^r$k^D1q%iEq7O8fQ#3orI6B_d9(RWH|;$T3|;Y3SGesE?^1r(ak;pkItoMF1Y#f`Rz#=Zj}s zW|XZzx(PerCReY+M~Bn+uSb?n-5!#Uu`ykb+O|_YkNY}4ZKbY0rme<&B4Ft+TYSw< z%OoF!%^Dqg=2&H>{E{g)HC1JDVq)P{A_<9EcKRqexa!!z&gyH*9g(IgwR=-jIn&N1 zt6>63!^eR(&$O??%*t}1p}F=qCnsD>M6ht;7v~s9oJ$lpi0#czvOqqr2{|o#v!)7V zZ;o^@#jv{p?a5wGXH?(0`p zA&j$p5N1|ZJ^Yd7NzT~X5v{J@+GU?&Ye}bg<+gB7CfOE`nnQRNC3g50eqKfLe@#qe zT2~iFm&QnBnk`Riew%w(@S^sffWUA=`&|5!{G z{p?(E8O?knF`RyF)~-_JVZk&NdxBm^@HOk}cVyF8wuz}NZf{ix&}z$UEo~<~)(8=u z@*K8Ki<#1{`8V%=q}2Bp+RDDIvfR(XatucF0yQq~mzGkoi`|cnylK?FpW#li8*rO8 zD@dJbzi+HEQCuXESWR=kZ97KAunHKm?qKEXpM*8PtyQC9Z;;z4(3NO^asfREcTk@# zb4#wQlHH06G{~6FE5s1|W^_7;=m2Y<7x%B=QDZCP-u@i2a=Ja2@wms_Hh4mhS@1aA zvi5D1xj#1J!@8O22=(&n%$HleNS!7on1FF`pc$!$hQ;?U8l!Prz zEa9^^ZWQC&{D$`HbJddC;1DIhuKxWtCTNK2*(A4S&|s3#+g!=>)F$vkM|OuWXJeoi zM%)ts-e5`*D#67NW1H&{0mGu2I6m}01b;~C>-0P6E?ZQOs>wYGd9lzGiD415))tYn z(N6qvETpS`{ejHHzRJvZeZCHMGhP&w6tO7G@$Aqla z-QTt(#J+(@eY6^qqrqkMer{1yk-)9OFd! z<@3v{sB}YC@#gTP$i?+pQ6;wa5D7z5J9vC^E_Kd!P+BvQgU}nZ&u>Xtt-=KF=%@wzx891B0}vgGQqZ+LwAAjVvD9ram?mzK?WLycyRI67?rl>g4rQf z#?M3rS{#YKhlQTzbq3Sh??~)*+1ZObu*8G`yf6yXZRx&_qn?46tgPm3=nNYKU=@VZ zJIs&;)BQ(+T*W}D&9N#EcZ-GEm)OkP6jX+7s2RGqf#)hWo~_O7b??8*Hpm)MM-boo zF{cXhr$!mdP--KLToJPhuHJTF?s56>+w`NW8sKJVCIckg zh&V7&M43$xq{c|eeR(LDUuC=y9gmjA2X70j4TRb{}$nm$JJG+s;H@t>h(| zbq4WQo0R0xc5~(fA+HlrJNu*}som+l*DXqhBM(20L%mcMJ!_47>_21ew1s)O#Nj0vh3DM`6cIzhQs z91uXbX;}~0b?}*3SjnFZ4N9K;u(oFvr>O9J+PlPaOwp}P%aZ3hKFNRE9Fci^*PYAr zYH&QZfKy7O3|XY@-}2iO$;F zTFz&7{{B^ZjUsGO2MyKlPoYJ>Au>a>#rs(lR^+%d>xSyXn(DD&6tQnv%w%xgX#y-u z`C0Zx3q(Z4m(osLn+}=WUEuc5yGkrW!2Nr(twb<)@<@CiyozY-m-U%Cntcio%FpLdH0v!*QAZ zH~644?fkB`CI3ukkOJB$0SJRXcz+-1XvfD<*94i)bn>CgE=sP^dd8#1R1AJ({p)whQxf~z3rJXPUAhQzgy!t z)P0SYxI1Ew^4QHCzhC{d)l0N9x7c)-@Hpe!;PdR!*HakWjZ}h7b{7MqEy67dYgIpv z4VH^9T0Mt(ek%)ZGijt8Jw>PXy^dA+NLVOz)7~E>n5EpxzPzpK&Eo35JAX~FRIu&g zt!Z`m`!StBT1Cn2n`sH1ulmfZnTY6Pf zzEt{j)5OTTcaSvDv$uq1VvehBV@p;uO(jCYZwS@bBVHh6=xAr1A}%p8&3|$s$+fMq zY&!Hsd~hOY{`%Q>FW$fZH|SkG%^xwxqVi~m zc{gkKyk0gv5-9O$SIQH1gDpoF3BhPYr2aM@UiF^;-N6wJ}x=n zPo^#P%3ViE*Q2>G;o@vJzzhrR^V~}i7|M$Dd_T}1;ByJDw#)W;=k5nRmpb>*>}>hr zn+!Lga^n77IVj#^dJGdK#8db~{K_w}i1Z*4`Lxx<*|Iv>YH1Fw479@7pUyn8b5~xk z%X3K?f6iv3VhCPoLD*H#)}AOxp66xM$Rx1x78~ovP31 zKeA%(=<&NG&EF|UpfMjRj2;6c3r@u@hGj>U^E;6`rV9qjnv6rde~Cuwv?n%`qw%yt3x*K(Y5?UU$fI@;ksd+U)Xa#3M* zY|x@v{zhF-4=s_!wl~lU8ZwAU@_kH=2+P9It_Tp3p6TVU_;^!AT|8*aK9}oua z6~}^c94KRwE~_Ad;Pz_rbm*)_syWi+*4%S-Zo!ix=eotHxO$gZjdINHv&Y(}fo-Qp zx;yixZ%XQ!qB66BO%oEQ(zL!_kg^>K&6A~9`n^aij9Rb}G#}8CKLrxAGy1GPNe&Xz zpb_6VvHthjgoxJy&y2o6*Mf7@3TTWgt=DxraW?QDWPUbZ1u!Z+2ixOyQl7SY6dG+Z zf$~SF=y9*IG{!ZBnjigmC3g71e3kr?H_2Bn?S?)8&zd#ScGRdu#j zmT#*lgOKuflgwtE_i*yv7Bpat@3jKU>^&1Rv`_9W+QLSfH+2=yv|;V(EV z^sc(zRI;V>-!qQfpG>-%6Z;(NBJd$nES+^HN}fQc_L)OwS0V|)m2qbsUb-7Oz8GoJ z(Tj#Q1h?1NV)q75iN(^xRkJka$vP6n?JpKw)2*i@8CARC#n+6yN-16B zH<_p>8NNIeup|m9bvrH1%qc>Y+H`5EB~4mY*n{E1UlCd~n+@iMsMgqJXs@{UoFG7h zyDFyiXTM+(|0Fv3aY-DrKzEYag*{M^;mcwo75ViO0qZv{$k80WR%pYAW1(}CfH^k# zEn#L|*W-jJ*8?1`;}q59>&un=sO)lNR^rB5HJMIXxS%Mr^X;KG5oP|AV}vp+?;aPj z?yicEU4q6ufBiQfNwh-W3|WCfpIKe|hm?RlEE#l2B$$pOErrp1&xQ!21u1 zW%aVz^f&MKg|s=eNMsEY02HO8_&7b{O5an|F!;-AsZKY8N03hti} z-pD*zJyue{3nO27ElIq(8QNYOJf6o*JFUe~Bv7$>-qnr7^xSywU7vo3`e{_bo!+VZ z_PiuU0g83+Qj-!|no#NWUgIl?P2Ge zsmM^igqk`J>$C73obny|Os*|$+Gij(%TvDX$YNOBI9j1Oqbp`Aiu=(@8;t?|t;+DV z$vpp(9i?jy-hsx}z6#YdC;d&nr4&a6wr2Ud3BCE>#OXi!^c@HiB!4$o zZ3^BYK*V7V6GM0w1Ly2Y`Fq-JvhG$rh#aDYy(}sP$6p`x5G}$CPptPo>Ey4^c!opGmGDDO yj5}fD_}c}+q4t0?yXgM^q5rGo|1TH#jjuIq;0+e$GXXf@PgYV%qFl_#|9=2PPH-0h literal 0 HcmV?d00001 diff --git a/images/nomad_ha.png b/images/nomad_ha.png new file mode 100644 index 0000000000000000000000000000000000000000..3297d7aa0eb1e3d29dab6c535d33162a72ff08d7 GIT binary patch literal 36526 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 literal 0 HcmV?d00001 diff --git a/images/vault-ha-consul.png b/images/vault-ha-consul.png new file mode 100644 index 0000000000000000000000000000000000000000..77260deccdbe8e5f8281a4829c3eaed5841a8720 GIT binary patch literal 89923 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 Ns>+&5#R?{Y{~yhWl@tH~ literal 0 HcmV?d00001 diff --git a/nomad/client.hcl b/nomad/client.hcl new file mode 100644 index 0000000..0272aa7 --- /dev/null +++ b/nomad/client.hcl @@ -0,0 +1,11 @@ +datacenter = "us-west-1" +data_dir = "/etc/nomad.d" + +client { + enabled = true + servers = ["SERVERIP:4647"] +} +bind_addr = "0.0.0.0" # the default +consul { + address = "SERVERIP:8500" +} diff --git a/nomad/jobs/countdash.nomad b/nomad/jobs/countdash.nomad new file mode 100644 index 0000000..e4d0177 --- /dev/null +++ b/nomad/jobs/countdash.nomad @@ -0,0 +1,74 @@ +job "countdash3" { + datacenters = ["us-west-1"] + + group "api" { + network { + mode = "bridge" + port "http" { + to = "9001" + } + } + + service { + name = "count-api" + port = "http" + check { + port = "http" + type = "http" + path = "/" + interval = "5s" + timeout = "2s" + address_mode = "driver" + } + connect { + sidecar_service {} + } + } + + task "web" { + driver = "docker" + + config { + image = "hashicorpnomad/counter-api:v1" + } + } + } + + group "dashboard" { + network { + mode = "bridge" + + port "http" { + static = 9002 + to = 9002 + } + } + + service { + name = "count-dashboard" + port = "9002" + + connect { + sidecar_service { + proxy { + upstreams { + destination_name = "count-api" + local_bind_port = 8080 + } + } + } + } + } + + task "dashboard" { + driver = "docker" + + env { + COUNTING_SERVICE_URL = "http://${NOMAD_UPSTREAM_ADDR_count_api}" + } + + config { + image = "hashicorpnomad/counter-dashboard:v1" + } + } + } diff --git a/nomad/jobs/nginx.nomad b/nomad/jobs/nginx.nomad new file mode 100644 index 0000000..2a27cf3 --- /dev/null +++ b/nomad/jobs/nginx.nomad @@ -0,0 +1,48 @@ +job "nginx" { + region = "eu" + datacenters = ["us-west-1"] + + group "webserver" { + count = 4 + + restart { + attempts = 10 + interval = "5m" + delay = "25s" + + mode = "delay" + } + + task "nginx" { + driver = "docker" + + config { + image = "nginx:latest" + port_map { + web = 80 + } + } + + service { + name = "nginx" + port = "web" + check { + name = "alive" + type = "tcp" + interval = "10s" + timeout = "2s" + } + } + + resources { + cpu = 500 # 500 Mhz + memory = 64 # 64MB + network { + mbits = 10 + port "web" { + } + } + } + } + } +} diff --git a/nomad/jobs/python-app.nomad b/nomad/jobs/python-app.nomad new file mode 100644 index 0000000..68b00af --- /dev/null +++ b/nomad/jobs/python-app.nomad @@ -0,0 +1,52 @@ +job "docker-app" { + region = "global" + datacenters = [ + "dc1"] + type = "service" + + group "server" { + count = 1 + + task "docker-app" { + driver = "docker" + + constraint { + attribute = "${attr.kernel.name}" + value = "linux" + } + + config { + image = "anguda/python-flask-app:latest" + port_map { + python_server = 5000 + } + } + + service { + name = "docker-app" + port = "python_server" + + tags = [ + "docker", + "app"] + + check { + type = "http" + path = "/test" + interval = "10s" + timeout = "2s" + } + } + + resources { + memory = 256 + network { + mbits = 20 + port "python_server" { + } + } + } + + } + } +} diff --git a/nomad/jobs/simple.nomad b/nomad/jobs/simple.nomad new file mode 100644 index 0000000..3a9abd1 --- /dev/null +++ b/nomad/jobs/simple.nomad @@ -0,0 +1,35 @@ +job "http-echo-dynamic-service" { + datacenters = ["us-west-1"] group "echo" { + count = 2 + task "server" { + driver = "docker" + config { + image = "hashicorp/http-echo:latest" + args = [ + "-listen", ":${NOMAD_PORT_http}", + "-text", "Moin ich lausche ${NOMAD_IP_http} auf Port ${NOMAD_PORT_http}", + ] + } + resources { + network { + mbits = 15 + port "http" {} + } + } + service { + name = "http-echo" + port = "http" + tags = [ + "vagrant", + "urlprefix-/http-echo", + ] + check { + type = "http" + path = "/health" + interval = "2s" + timeout = "2s" + } + } + } + } +} diff --git a/nomad/nomad.service b/nomad/nomad.service new file mode 100644 index 0000000..c2c8b84 --- /dev/null +++ b/nomad/nomad.service @@ -0,0 +1,19 @@ +[Unit] +Description=Nomad +Documentation=https://nomadproject.io/docs/ +Wants=network-online.target +After=network-online.target +[Service] +ExecReload=/bin/kill -HUP $MAINPID +ExecStart=/usr/local/bin/nomad agent -config /etc/nomad.d +KillMode=process +KillSignal=SIGINT +LimitNOFILE=infinity +LimitNPROC=infinity +Restart=on-failure +RestartSec=2 +StartLimitBurst=3 +StartLimitIntervalSec=10 +TasksMax=infinity +[Install] +WantedBy=multi-user.target diff --git a/nomad/server.hcl b/nomad/server.hcl new file mode 100644 index 0000000..3cee4a2 --- /dev/null +++ b/nomad/server.hcl @@ -0,0 +1,23 @@ +# /etc/nomad.d/server.hcl + +datacenter = "us-west-1" +data_dir = "/etc/nomad.d/" + +server { + enabled = true + bootstrap_expect = 1 +} + +name = "NODENAME" + +bind_addr = "PRIVATEIP" + +consul { + address = "SERVERIP:8500" +} + +advertise { + http = "SERVERIP" + rpc = "SERVERIP" + serf = "SERVERIP" +} diff --git a/nomad/servers.hcl b/nomad/servers.hcl new file mode 100644 index 0000000..460e429 --- /dev/null +++ b/nomad/servers.hcl @@ -0,0 +1,28 @@ +# /etc/nomad.d/server.hcl + +datacenter = "us-west-1" +data_dir = "/etc/nomad.d/" + +server { + enabled = true + bootstrap_expect = count + server_join { + retry_join = [ servers ] + retry_max = 3 + retry_interval = "15s" + } +} + +bind_addr = "PRIVATEIP" + +name = "NODENAME" + +consul { + address = "SERVERIP:8500" +} + +advertise { + http = "SERVERIP" + rpc = "SERVERIP" + serf = "SERVERIP" +} diff --git a/packer/hashi.json b/packer/hashi.json new file mode 100644 index 0000000..900c60e --- /dev/null +++ b/packer/hashi.json @@ -0,0 +1,28 @@ +{ + "variables": { + "aws_access_key": "AKIA4EGCAX2PFMZ6JRUP", + "aws_secret_key": "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", + "ssh_keypair_name": "anurag-aws" + }, + "builders": [ + { + "type": "amazon-ebs", + "access_key": "{{user `aws_access_key`}}", + "secret_key": "{{user `aws_secret_key`}}", + "source_ami" : "ami-003634241a8fcdec0", + "region": "us-west-2", + "instance_type": "t2.micro", + "ssh_username": "ubuntu", + "ssh_keypair_name": "{{user `ssh_keypair_name`}}", + "ssh_private_key_file":"~/Downloads/AWS/anurag-aws.pem", + "ami_name": "hashi-example {{timestamp}}" + } + ], + "provisioners": [{ + "type": "shell", + "scripts": [ + "prereqs.sh" + ], + "execute_command" : "echo 'vagrant' | sudo -S -E bash '{{ .Path }}'" + }] +} diff --git a/packer/prereqs.sh b/packer/prereqs.sh new file mode 100644 index 0000000..1f6782d --- /dev/null +++ b/packer/prereqs.sh @@ -0,0 +1,61 @@ +set -e + +CONSUL_VERSION=1.7.3 +NOMAD_VERSION=0.11.1 +VAULT_VERSION=1.4.1 + +echo "System update..." +sudo apt update -y +echo "Installting tools.." +sudo apt install -y wget curl vim unzip jq apt-transport-https ca-certificates gnupg-agent software-properties-common +curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add - +sudo apt-key fingerprint 0EBFCD88 +sudo add-apt-repository \ + "deb [arch=amd64] https://download.docker.com/linux/ubuntu \ + bionic \ + stable" +sudo apt-get update +sudo apt-get install -y docker-ce docker-ce-cli containerd.io +sudo systemctl start docker +sudo systemctl enable docker + +wget --quiet https://releases.hashicorp.com/consul/${CONSUL_VERSION}/consul_${CONSUL_VERSION}_linux_amd64.zip +unzip consul_${CONSUL_VERSION}_linux_amd64.zip +sudo mv consul /usr/local/bin/ +sudo rm consul_${CONSUL_VERSION}_linux_amd64.zip +sudo groupadd --system consul +sudo useradd -s /sbin/nologin --system -g consul consul +sudo mkdir -p /var/lib/consul /etc/consul.d +sudo chown -R consul:consul /var/lib/consul /etc/consul.d +sudo chmod -R 775 /var/lib/consul /etc/consul.d +#sudo rm -rf /etc/systemd/system/consul.service +#sudo touch /etc/systemd/system/consul.service + +echo "Installing NOMAD" +wget --quiet https://releases.hashicorp.com/nomad/${NOMAD_VERSION}/nomad_${NOMAD_VERSION}_linux_amd64.zip +unzip nomad_${NOMAD_VERSION}_linux_amd64.zip +sudo ls -lrt +sudo mv nomad /usr/local/bin/ +sudo mkdir -p /etc/nomad.d +sudo rm nomad_${NOMAD_VERSION}_linux_amd64.zip +sudo groupadd --system nomad +sudo useradd -s /sbin/nologin --system -g nomad nomad +sudo mkdir -p /var/lib/nomad /etc/nomad.d +sudo chown -R nomad:nomad /var/lib/nomad /etc/nomad.d +sudo chmod -R 775 /var/lib/nomad /etc/nomad.d + +#sudo touch /etc/nomad.d/nomad.hcl +echo "Installing Vault" +sudo wget --quiet https://releases.hashicorp.com/vault/${VAULT_VERSION}/vault_${VAULT_VERSION}_linux_amd64.zip +sudo unzip vault_${VAULT_VERSION}_linux_amd64.zip +sudo mv vault /usr/local/bin/ +sudo rm vault_${VAULT_VERSION}_linux_amd64.zip +sudo chmod +x /usr/local/bin/vault +sudo mkdir --parents /etc/vault.d +sudo groupadd --system vault +sudo useradd -s /sbin/nologin --system -g vault vault +sudo mkdir -p /var/lib/vault /etc/vault.d +sudo chown -R vault:vault /var/lib/vault /etc/vault.d +sudo chmod -R 775 /var/lib/vault /etc/vault.d + + diff --git a/setup.sh b/setup.sh new file mode 100644 index 0000000..56ab467 --- /dev/null +++ b/setup.sh @@ -0,0 +1,17 @@ +#!/bin/bash +set -e +cd packer +packer build hashi.json > packerbuild.log +ami=$(cat packerbuild.log | grep -i 'ami' | tail -1f | awk -F ':' '{print $2}') +echo $ami +if [[ ! -z "$ami" ]]; then +sed -ie "s/ami-.*/$ami\"/g" terraform/variables.tf +cd ../terraform +terraform init +terraform plan +terraform apply +else +echo "Something went wrong, please check packerbuild.log and retry" +fi + + diff --git a/terraform/iplist b/terraform/iplist new file mode 100644 index 0000000..3beeefd --- /dev/null +++ b/terraform/iplist @@ -0,0 +1,4 @@ +SERVER_IP0=172.31.25.119 +SERVER_IP2=172.31.26.12 +count=3 +SERVER_IP1=172.31.25.211 diff --git a/terraform/main.tf b/terraform/main.tf new file mode 100644 index 0000000..ddc0f1d --- /dev/null +++ b/terraform/main.tf @@ -0,0 +1,148 @@ +provider "aws" { + access_key= var.access_key + secret_key= var.secret_key + region= var.region +} + +resource "aws_instance" "master" { + ami= var.ami + key_name= var.key_name + instance_type= var.master_instance_type + associate_public_ip_address = true + count = var.master_count + tags = { + Name = "${var.master_tags}-${count.index}" + } + connection { + host = self.public_ip + user = "ubuntu" + type = "ssh" + private_key = file(var.private_key_path) + timeout = "1m" + } + provisioner "local-exec" { + command = "sed -ie '/SERVER_IP${count.index}=.*/d' provision.sh" + } + provisioner "local-exec" { + command = "sed -ie '/SERVER_IP${count.index}=.*/d' iplist" + } + provisioner "local-exec" { + command = "sed -ie '/count=.*/d' iplist" + } + provisioner "local-exec" { + command = "echo count=${var.master_count} >> iplist" + } + provisioner "local-exec" { + command = "echo SERVER_IP${count.index}=${self.private_ip} >> iplist" + } + provisioner "local-exec" { + command = "sed -ie '/privateip=.*/r iplist' provision.sh" + } + provisioner "remote-exec" { + inline = [ + "sudo mkdir -p /etc/nomad.d", + "sudo mkdir -p /etc/consul.d", + "sudo mkdir -p /etc/vault.d", + "sudo chmod 777 /etc/nomad.d", + "sudo chmod 777 /etc/consul.d", + "sudo chmod 777 /etc/vault.d", + ] + } + provisioner "file" { + source = "../nomad/servers.hcl" + destination = "/etc/nomad.d/servers.hcl" + } + provisioner "file" { + source = "../nomad/nomad.service" + destination = "/etc/nomad.d/nomad.service" + } + provisioner "file" { + source = "../consul/servers.json" + destination = "/etc/consul.d/servers.json" + } + provisioner "file" { + source = "../consul/consul.service" + destination = "/etc/consul.d/consul.service" + } + provisioner "file" { + source = "provision.sh" + destination = "/home/ubuntu/provision.sh" + } + provisioner "file" { + source = "../hashi-ui/hashi-ui.service" + destination = "/tmp/hashi-ui.service" + } + provisioner "remote-exec" { + inline = [ + "chmod a+x /home/ubuntu/provision.sh", + "sudo /home/ubuntu/provision.sh", + ] + } +} + + +resource "aws_instance" "worker" { + ami= var.ami + key_name= var.key_name + instance_type= var.node_instance_type + associate_public_ip_address = true + count = var.worker_count + tags = { + Name = "${var.worker_tags}-${count.index}" + } + provisioner "local-exec" { + command = "echo The server IP address is ${self.private_ip}" + } + connection { + host = self.public_ip + user = "ubuntu" + type = "ssh" + private_key = file(var.private_key_path) + timeout = "1m" + } + provisioner "remote-exec" { + inline = [ + "sudo mkdir -p /etc/nomad.d", + "sudo mkdir -p /etc/consul.d", + "sudo mkdir -p /etc/vault.d", + "sudo chmod 777 /etc/nomad.d", + "sudo chmod 777 /etc/consul.d", + "sudo chmod 777 /etc/vault.d", + ] + } + provisioner "file" { + source = "../nomad/client.hcl" + destination = "/etc/nomad.d/client.hcl" + } + provisioner "file" { + source = "../nomad/nomad.service" + destination = "/etc/nomad.d/nomad.service" + } + provisioner "file" { + source = "../consul/client.json" + destination = "/etc/consul.d/client.json" + } + provisioner "file" { + source = "../consul/consul.service" + destination = "/etc/consul.d/consul.service" + } + provisioner "file" { + source = "../vault/vault.service" + destination = "/etc/vault.d/vault.service" + } + provisioner "file" { + source = "../vault/server.hcl" + destination = "/etc/vault.d/server.hcl" + } + provisioner "file" { + source = "provision.sh" + destination = "/home/ubuntu/provision.sh" + } + + provisioner "remote-exec" { + inline = [ + "chmod a+x /home/ubuntu/provision.sh", + "sudo /home/ubuntu/provision.sh", + ] + } +} diff --git a/terraform/output.tf b/terraform/output.tf new file mode 100644 index 0000000..f9bea69 --- /dev/null +++ b/terraform/output.tf @@ -0,0 +1,4 @@ +output "public_ip" { + description = "Access Hashi Ui with port 3000" + value = "${aws_instance.master[0].*.public_ip}" +} diff --git a/terraform/provision.sh b/terraform/provision.sh new file mode 100644 index 0000000..5ab53bb --- /dev/null +++ b/terraform/provision.sh @@ -0,0 +1,64 @@ +privateip=$(hostname -i) +SERVER_IP0=172.31.25.119 +count=3 +SERVER_IP1=172.31.25.211 +SERVER_IP2=172.31.26.12 + +servers='"'$SERVER_IP0'","'$SERVER_IP1'","'$SERVER_IP2'"' + +if [ -f "/etc/nomad.d/servers.hcl" ]; then +sed -ie "s/PRIVATEIP/$privateip/" /etc/nomad.d/servers.hcl +sed -ie "s/PRIVATEIP/$privateip/" /etc/consul.d/servers.json +sed -ie "s/SERVERIP/$privateip/" /etc/nomad.d/servers.hcl +sed -ie "s/SERVERIP/$privateip/" /etc/consul.d/servers.json +sed -ie "s/SERVERIP/$SERVER_IP0/" /tmp/hashi-ui.service +sed -ie "s/count/$count/" /etc/nomad.d/servers.hcl +sed -ie "s/count/$count/" /etc/consul.d/servers.json +sed -ie "s/NODENAME/$HOSTNAME/" /etc/nomad.d/servers.hcl +sed -ie "s/NODENAME/$HOSTNAME/" /etc/consul.d/servers.json + +sed -ie "s/servers/$servers/" /etc/consul.d/servers.json +sed -ie "s/servers/$servers/" /etc/nomad.d/servers.hcl + +sudo cp -r /etc/nomad.d/nomad.service /etc/systemd/system/nomad.service +sudo cp -r /etc/consul.d/consul.service /etc/systemd/system/consul.service + +# Start Consul +systemctl daemon-reload +systemctl enable consul.service +systemctl restart consul + +# Start Nomad +systemctl enable nomad.service +systemctl restart nomad + +sudo cp -r /tmp/hashi-ui.service /etc/systemd/system/hashi-ui.service +systemctl daemon-reload +systemctl enable docker +systemctl restart docker +systemctl enable hashi-ui.service +systemctl restart hashi-ui +else +sed -ie "s/PRIVATEIP/$privateip/" /etc/nomad.d/client.hcl +sed -ie "s/PRIVATEIP/$privateip/" /etc/consul.d/client.json +sed -ie "s/SERVERIP/$SERVER_IP0/" /etc/consul.d/client.json +sed -ie "s/SERVERIP/$SERVER_IP0/" /etc/nomad.d/client.hcl +sed -ie "s/servers/$servers/" /etc/consul.d/client.json +sed -ie "s/NODENAME/$HOSTNAME/" /etc/consul.d/client.json + +sed -ie "s/PRIVATEIP/$privateip/" /etc/vault.d/server.hcl + +sudo cp -r /etc/vault.d/vault.service /etc/systemd/system/vault.service +sudo cp -r /etc/nomad.d/nomad.service /etc/systemd/system/nomad.service +sudo cp -r /etc/consul.d/consul.service /etc/systemd/system/consul.service + +systemctl daemon-reload +systemctl enable consul.service +systemctl restart consul + +systemctl enable vault.service +systemctl restart vault +# Start Nomad +systemctl enable nomad.service +systemctl restart nomad +fi diff --git a/terraform/variables.tf b/terraform/variables.tf new file mode 100644 index 0000000..2d0f253 --- /dev/null +++ b/terraform/variables.tf @@ -0,0 +1,43 @@ +variable "access_key" { + default = "KFGH8GAja0JHDgaLJ" +} +variable "secret_key" { + default = "Hahs5HGDkjah9hdhannsG5jagdj4vgsgGKH" +} +variable "key_name" { + default = "anurag-aws" +} +variable "worker_count" { + default = 2 +} +variable "master_count" { + default = 3 +} +variable "region" { + default = "us-west-2" +} +variable "ami" { + default = "ami-06cb848001176ed5a" +} +variable "node_instance_type" { + default = "t2.micro" +} + +variable "master_instance_type" { + default = "t2.micro" +} +variable "master_tags" { + default = "master" +} + +variable "worker_tags" { + default = "worker" +} + +variable "private_key_path" { + default = "~/Downloads/AWS/anurag-aws.pem" +} + +variable "state" { + default = "running" +} diff --git a/vagrant/.vagrant/bundler/global.sol b/vagrant/.vagrant/bundler/global.sol new file mode 100644 index 0000000..a24ff54 --- /dev/null +++ b/vagrant/.vagrant/bundler/global.sol @@ -0,0 +1 @@ +{"dependencies":[["vagrant-ignition",["= 0.0.3"]],["ruby_dep",["<= 1.3.1"]],["netrc",["~> 0.8"]],["mime-types-data",["~> 3.2015"]],["mime-types",[">= 1.16","< 4.0"]],["unf_ext",[">= 0"]],["unf",[">= 0.0.5","< 1.0.0"]],["domain_name",["~> 0.5"]],["http-cookie",[">= 1.0.2","< 2.0"]],["rest-client",[">= 1.6.0"]],["vagrant_cloud",["~> 2.0.3"]],["rubyntlm",["~> 0.6.0",">= 0.6.1"]],["nori",["~> 2.0"]],["multi_json",["~> 1.10"]],["little-plugger",["~> 1.1"]],["logging",[">= 1.6.1","< 3.0"]],["httpclient",["~> 2.2",">= 2.2.0.2"]],["builder",[">= 2.1.2"]],["gyoku",["~> 1.0"]],["ffi",[">= 0.5.0"]],["gssapi",["~> 1.2"]],["erubi",["~> 1.8"]],["winrm",[">= 2.3.4","< 3.0"]],["rubyzip",["~> 2.0"]],["winrm-fs",[">= 1.3.4","< 2.0"]],["winrm-elevated",[">= 1.2.1","< 2.0"]],["wdm",["~> 0.1.0"]],["rb-kqueue",["~> 0.2.0"]],["net-ssh",["~> 5.2.0"]],["net-scp",["~> 1.2.0"]],["net-sftp",["~> 2.1"]],["log4r",[">= 0"]],["hashicorp-checkpoint",["~> 0.1.5"]],["rb-inotify",["~> 0.9",">= 0.9.7"]],["rb-fsevent",["~> 0.9",">= 0.9.4"]],["listen",["~> 3.1.5"]],["concurrent-ruby",["~> 1.0"]],["i18n",[">= 0"]],["erubis",["~> 2.7.0"]],["ed25519",["~> 1.2.4"]],["childprocess",["~> 3.0.0"]],["bcrypt_pbkdf",["~> 1.0.0"]],["vagrant",[">= 1.9.2"]],["vagrant-share",["= 1.1.10"]],["micromachine",[">= 2","< 4"]],["vagrant-vbguest",["= 0.24.0"]]],"checksum":"d2980923a94947fbc443d9ce313812c43fafc9c5fde0867a46d81856681c4ce7","vagrant_version":"2.2.8"} \ No newline at end of file diff --git a/vagrant/.vagrant/provisioners/ansible/inventory/vagrant_ansible_inventory b/vagrant/.vagrant/provisioners/ansible/inventory/vagrant_ansible_inventory new file mode 100644 index 0000000..a6ed874 --- /dev/null +++ b/vagrant/.vagrant/provisioners/ansible/inventory/vagrant_ansible_inventory @@ -0,0 +1,3 @@ +# Generated by Vagrant + +default ansible_host=127.0.0.1 ansible_port=2222 ansible_user='vagrant' ansible_ssh_private_key_file='/Users/aguda/Downloads/harshicorp/vagrant/.vagrant/machines/default/virtualbox/private_key' diff --git a/vagrant/.vagrant/rgloader/loader.rb b/vagrant/.vagrant/rgloader/loader.rb new file mode 100644 index 0000000..c3c05b0 --- /dev/null +++ b/vagrant/.vagrant/rgloader/loader.rb @@ -0,0 +1,9 @@ +# This file loads the proper rgloader/loader.rb file that comes packaged +# with Vagrant so that encoded files can properly run with Vagrant. + +if ENV["VAGRANT_INSTALLER_EMBEDDED_DIR"] + require File.expand_path( + "rgloader/loader", ENV["VAGRANT_INSTALLER_EMBEDDED_DIR"]) +else + raise "Encoded files can't be read outside of the Vagrant installer." +end diff --git a/vagrant/Vagrantfile b/vagrant/Vagrantfile new file mode 100644 index 0000000..4d6c07e --- /dev/null +++ b/vagrant/Vagrantfile @@ -0,0 +1,74 @@ +#sudo docker run -e NOMAD_ENABLE=1 -e NOMAD_ADDR=http://172.20.20.10:4646 -e CONSUL_ENABLE=1 -e CONSUL_ADDR=http://172.20.20.10:8500 -p 8000:3000 jippi/hashi-ui + +SERVER_COUNT = 3 +AGENT_COUNT = 2 + +def serverIP(num) + return "172.20.20.#{num+10}" +end + +def agentIP(num) + return "172.20.20.#{num+100}" +end + +Vagrant.configure("2") do |config| + + config.vm.box = "ubuntu/bionic64" + config.vm.synced_folder "../", "/vagrant" + + (1..SERVER_COUNT).each do |i| + + config.vm.define vm_agent_name = "server-%d" % i do |server| + PRIVATE_IP = serverIP(i) + + server.vm.hostname = vm_agent_name + server.vm.network :private_network, ip: "#{PRIVATE_IP}" + + server.vm.provision :shell, :privileged => true, + inline: <<-EOF + echo "#{vm_agent_name}" | tee /tmp/nodename + echo "NODE_NAME=#{vm_agent_name}" >> /etc/environment + echo "PRIVATE_IP=#{PRIVATE_IP}" >> /etc/environment + echo "SERVER_IP=#{serverIP(i)}" >> /etc/environment + echo "count=#{SERVER_COUNT}" >> /etc/environment + echo "#{serverIP(1)}" | tee /tmp/server + EOF + + server.vm.provision :shell, :path => "scripts/setup.sh", :privileged => true + server.vm.provision :file, :source => "../nomad/jobs", :destination => "/tmp/" + server.vm.provision :file, :source => "scripts/serverlist.sh", :destination => "/tmp/" + server.vm.provision :file, :source => "scripts/serverstart.sh", :destination => "/tmp/" + server.vm.provision :shell, :inline => "/bin/bash /tmp/serverlist.sh", :privileged => true + server.vm.provision :shell, :inline => "/bin/bash /tmp/serverstart.sh", :privileged => true + end + end + + (1..AGENT_COUNT).each do |i| + config.vm.define vm_agent_name = "agent-%d" % i do |agent| + + agent.vm.hostname = vm_agent_name + agent.vm.network :private_network, ip: agentIP(i) + + agent.vm.provision :shell, :privileged => true, + inline: <<-EOF + echo "NODE_NAME=#{vm_agent_name}" >> /etc/environment + echo "PRIVATE_IP=#{agentIP(i)}" >> /etc/environment + echo "SERVER_IP=#{serverIP(1)}" >> /etc/environment + echo "count=#{SERVER_COUNT}" >> /etc/environment + echo "#{serverIP(1)}" | tee /tmp/server + EOF + agent.vm.provision :shell, :path => "scripts/setup.sh", :privileged => true + agent.vm.provision :file, :source => "scripts/serverlist.sh", :destination => "/tmp/" + agent.vm.provision :file, :source => "scripts/clientstart.sh", :destination => "/tmp/" + agent.vm.provision :file, :source => "scripts/vaultinit.sh", :destination => "/tmp/" + agent.vm.provision :shell, :inline => "/bin/bash /tmp/serverlist.sh", :privileged => true + agent.vm.provision :shell, :inline => "/bin/bash /tmp/clientstart.sh", :privileged => true + agent.vm.provision :shell, :inline => "/bin/bash /tmp/vaultinit.sh", :privileged => true + end + end + + config.vm.provider "virtualbox" do |vb| + vb.memory = "1536" + end + +end diff --git a/vagrant/scripts/clientstart.sh b/vagrant/scripts/clientstart.sh new file mode 100644 index 0000000..27f7f05 --- /dev/null +++ b/vagrant/scripts/clientstart.sh @@ -0,0 +1,33 @@ +SERVER_IP=$(awk -F= '/SERVER_IP/ {print $2}' /etc/environment) +PRIVATE_IP=$(awk -F= '/PRIVATE_IP/ {print $2}' /etc/environment) +count=$(awk -F= '/count/ {print $2}' /etc/environment) +sudo mv -f /tmp/consul/client.json /etc/consul.d/client.json +sudo mv -f /tmp/consul/consul.service /etc/systemd/system/consul.service +sudo mv -f /tmp/nomad/nomad.service /etc/systemd/system/nomad.service +sudo mv -f /tmp/nomad/client.hcl /etc/nomad.d/client.hcl + +sudo systemctl daemon-reload +sudo systemctl restart consul +sudo systemctl enable consul +sudo systemctl restart nomad +sudo systemctl enable nomad + +sleep 10 + +#sudo mv -f /tmp/consul/client.json /etc/consul.d/client.json +sudo mv -f /tmp/vault/vault.service /etc/systemd/system/vault.service +#sudo mv -f /tmp/consul/consul.service /etc/systemd/system/consul.service +#sudo mv -f /tmp/nomad/nomad.service /etc/systemd/system/nomad.service +#sudo mv -f /tmp/nomad/client.hcl /etc/nomad.d/client.hcl +sudo mv -f /tmp/vault/server.hcl /etc/vault.d/server.hcl + +sudo systemctl daemon-reload +sudo systemctl restart consul +sudo systemctl enable consul +sudo systemctl restart nomad +sudo systemctl enable nomad +sudo systemctl enable vault +sudo systemctl restart vault + +echo -e "vagrant ssh server1\n nomad -address=http://$SERVER_IP:4646 job run /tmp/jobs/sample.nomad\n nomad -address=http://$SERVER_IP:4646 job run /tmp/jobs/python-app.nomad" + diff --git a/vagrant/scripts/serverlist.sh b/vagrant/scripts/serverlist.sh new file mode 100644 index 0000000..3dffddd --- /dev/null +++ b/vagrant/scripts/serverlist.sh @@ -0,0 +1,70 @@ +PRIVATE_IP=$(awk -F= '/PRIVATE_IP/ {print $2}' /etc/environment) +SERVER_IP=$(awk -F= '/SERVER_IP/ {print $2}' /etc/environment) +NODE_NAME=$(awk -F= '/NODE_NAME/ {print $2}' /etc/environment) +count=$(awk -F= '/count/ {print $2}' /etc/environment) +echo $PRIVATE_IP +echo $SERVER_IP +echo $NODE_NAME +echo $count + +SERVER=$(cat /tmp/server) +echo "Generating IP list for master server" +ip0=$(echo $SERVER | awk -F'.' '{print $4}') +ip1=$(echo $SERVER | awk -F'.' '{print $1"."$2"."$3}') +i=0 +ips=$(while [ $count -gt "$i" ] +do + ip=$(echo "$ip1.$((ip0 + i))") + echo $ip + let i++ +done) +lists=( $ips ) + +declare -a nodeips=() +for item in "${lists[@]}" +do + nodeips+=("'$item'") + done +servers=$(echo ${nodeips[@]} | sed "s/ /,/g;s/'/\"/g") +echo $servers + +sudo cp -r /vagrant/consul /tmp/ +sudo cp -r /vagrant/nomad /tmp/ +sudo cp -r /vagrant/vault /tmp/ +sudo cp -r /vagrant/hashi-ui /tmp/ + +sudo mkdir -p /etc/consul.d +sudo mkdir -p /etc/nomad.d +sudo mkdir -p /etc/vault.d + +sudo chmod 755 /etc/nomad.d +sudo chmod 755 /etc/consul.d +sudo chmod 755 /etc/vault.d + +sudo ls -lrt /tmp/ + +sed -ie "s/servers/$servers/" /tmp/consul/client.json +sed -ie "s/servers/$servers/" /tmp/consul/servers.json +sed -ie "s/servers/$servers/" /tmp/nomad/servers.hcl + +sed -ie "s/NODENAME/$NODE_NAME/" /tmp/consul/client.json +sed -ie "s/NODENAME/$NODE_NAME/" /tmp/consul/server.json +sed -ie "s/NODENAME/$NODE_NAME/" /tmp/consul/servers.json +sed -ie "s/NODENAME/$NODE_NAME/" /tmp/nomad/server.hcl +sed -ie "s/NODENAME/$NODE_NAME/" /tmp/nomad/servers.hcl +sed -ie "s/NODENAME/$NODE_NAME/" /tmp/nomad/client.hcl + +sed -ie "s/PRIVATEIP/$PRIVATE_IP/" /tmp/consul/client.json +sed -ie "s/PRIVATEIP/$PRIVATE_IP/" /tmp/consul/server.json +sed -ie "s/PRIVATEIP/$PRIVATE_IP/" /tmp/consul/servers.json +sed -ie "s/PRIVATEIP/$PRIVATE_IP/" /tmp/nomad/server.hcl +sed -ie "s/PRIVATEIP/$PRIVATE_IP/" /tmp/nomad/servers.hcl +sed -ie "s/PRIVATEIP/$PRIVATE_IP/" /tmp/vault/server.hcl + +sed -ie "s/SERVERIP/$SERVER_IP/" /tmp/nomad/client.hcl +sed -ie "s/SERVERIP/$SERVER/" /tmp/nomad/server.hcl +sed -ie "s/SERVERIP/$SERVER_IP/" /tmp/nomad/servers.hcl +sed -ie "s/SERVERIP/$SERVER/" /tmp/hashi-ui/hashi-ui.service + +sed -ie "s/count/$count/" /tmp/nomad/servers.hcl +sed -ie "s/count/$count/" /tmp/consul/servers.json diff --git a/vagrant/scripts/serverstart.sh b/vagrant/scripts/serverstart.sh new file mode 100644 index 0000000..af961a0 --- /dev/null +++ b/vagrant/scripts/serverstart.sh @@ -0,0 +1,38 @@ +count=$(awk -F= '/count/ {print $2}' /etc/environment) +echo "Recreating Nomad and Consul Services" +echo $count +sudo cp -r /tmp/hashi-ui/hashi-ui.service /etc/systemd/system/hashi-ui.service +sudo cp -r /tmp/consul/consul.service /etc/systemd/system/consul.service +sudo cp -r /tmp/consul/server.json /etc/consul.d/server.json +sudo cp -r /tmp/nomad/nomad.service /etc/systemd/system/nomad.service +sudo cp -r /tmp/nomad/server.hcl /etc/nomad.d/ + +sudo cat /tmp/hashi-ui/hashi-ui.service + +sudo systemctl daemon-reload +sudo systemctl enable consul +sudo systemctl enable hashi-ui +sudo systemctl enable nomad + +sudo systemctl restart consul +sudo systemctl restart hashi-ui +sudo systemctl restart nomad + + +sudo cat /etc/nomad.d/server.hcl + +sleep 10 + +if [ $count -gt "1" ]; then +sudo mv -f /tmp/consul/servers.json /etc/consul.d/server.json +sudo mv -f /tmp/nomad/servers.hcl /etc/nomad.d/server.hcl +sudo systemctl daemon-reload +sudo systemctl enable consul +sudo systemctl enable hashi-ui +sudo systemctl enable nomad + +sudo systemctl restart consul +sudo systemctl restart hashi-ui +sudo systemctl restart nomad + +fi diff --git a/vagrant/scripts/setup.sh b/vagrant/scripts/setup.sh new file mode 100644 index 0000000..5346054 --- /dev/null +++ b/vagrant/scripts/setup.sh @@ -0,0 +1,67 @@ +set -e + +CONSUL_VERSION=1.7.3 +NOMAD_VERSION=0.11.1 +VAULT_VERSION=1.4.1 + +echo "System update..." +sudo apt update -y +echo "Installting tools.." +sudo apt install wget -y +sudo apt install curl -y +sudo apt install vim -y +sudo apt install unzip -y +sudo apt install jq -y +sudo apt-get install -y \ + apt-transport-https \ + ca-certificates \ + curl \ + gnupg-agent \ + software-properties-common +curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add - +sudo apt-key fingerprint 0EBFCD88 +sudo add-apt-repository \ + "deb [arch=amd64] https://download.docker.com/linux/ubuntu \ + bionic \ + stable" +sudo apt-get update +sudo apt-get install -y docker-ce docker-ce-cli containerd.io +sudo systemctl start docker +sudo systemctl enable docker + +wget --quiet https://releases.hashicorp.com/consul/${CONSUL_VERSION}/consul_${CONSUL_VERSION}_linux_amd64.zip +unzip consul_${CONSUL_VERSION}_linux_amd64.zip +sudo mv consul /usr/local/bin/ +sudo groupadd --system consul +sudo useradd -s /sbin/nologin --system -g consul consul +sudo mkdir -p /var/lib/consul /etc/consul.d +sudo chown -R consul:consul /var/lib/consul /etc/consul.d +sudo chmod -R 775 /var/lib/consul /etc/consul.d +#sudo rm -rf /etc/systemd/system/consul.service +#sudo touch /etc/systemd/system/consul.service + +echo "Installing NOMAD" +wget --quiet https://releases.hashicorp.com/nomad/${NOMAD_VERSION}/nomad_${NOMAD_VERSION}_linux_amd64.zip +unzip nomad_${NOMAD_VERSION}_linux_amd64.zip +sudo ls -lrt +sudo mv nomad /usr/local/bin/ +sudo mkdir -p /etc/nomad.d +sudo groupadd --system nomad +sudo useradd -s /sbin/nologin --system -g nomad nomad +sudo mkdir -p /var/lib/nomad /etc/nomad.d +sudo chown -R nomad:nomad /var/lib/nomad /etc/nomad.d +sudo chmod -R 775 /var/lib/nomad /etc/nomad.d + +#sudo touch /etc/nomad.d/nomad.hcl +echo "Installing Vault" +sudo wget --quiet https://releases.hashicorp.com/vault/${VAULT_VERSION}/vault_${VAULT_VERSION}_linux_amd64.zip +sudo unzip vault_${VAULT_VERSION}_linux_amd64.zip +sudo mv vault /usr/local/bin/ +sudo rm vault_${VAULT_VERSION}_linux_amd64.zip +sudo chmod +x /usr/local/bin/vault +sudo mkdir --parents /etc/vault.d +sudo groupadd --system vault +sudo useradd -s /sbin/nologin --system -g vault vault +sudo mkdir -p /var/lib/vault /etc/vault.d +sudo chown -R vault:vault /var/lib/vault /etc/vault.d +sudo chmod -R 775 /var/lib/vault /etc/vault.d diff --git a/vagrant/scripts/vaultinit.sh b/vagrant/scripts/vaultinit.sh new file mode 100644 index 0000000..b7c578c --- /dev/null +++ b/vagrant/scripts/vaultinit.sh @@ -0,0 +1,9 @@ +PRIVATE_IP=$(awk -F= '/PRIVATE_IP/ {print $2}' /etc/environment) +curl --request PUT -d '{"secret_shares": 3,"secret_threshold": 2}' -vs http://${PRIVATE_IP}:8200/v1/sys/init | jq -r '.' > ~/init.json +for item in `cat ~/init.json | jq -r '.keys_base64[]'` +do +echo $item +curl --request PUT --data '{"key":"'$item'"}' -vs http://${PRIVATE_IP}:8200/v1/sys/unseal +done + +echo "Login vault http://${PRIVATE_IP}:8200 with token $(cat ~/init.json | jq -r '.root_token')" diff --git a/vault/server.hcl b/vault/server.hcl new file mode 100644 index 0000000..dc1c09d --- /dev/null +++ b/vault/server.hcl @@ -0,0 +1,19 @@ +# VAULT SERVER CONFIG + +ui = "true" +cluster_name = "us-west-1" + +storage "consul" { + address = "127.0.0.1:8500" + path = "vault/" +} + +listener "tcp" { + address = "0.0.0.0:8200" + cluster_address = "PRIVATEIP:8201" + tls_disable = "true" +} + +api_addr = "http://PRIVATEIP:8200" +cluster_addr = "https://PRIVATEIP:8201" + diff --git a/vault/vault.service b/vault/vault.service new file mode 100644 index 0000000..04b7c39 --- /dev/null +++ b/vault/vault.service @@ -0,0 +1,16 @@ +[Unit] +Description=Vault +Documentation=https://vaultproject.io/docs/ + +[Service] +Restart=on-failure +ExecStart=/usr/local/bin/vault server -config /etc/vault.d/server.hcl +ExecReload=/bin/kill -HUP $MAINPID +LimitMEMLOCK=infinity +KillSignal=SIGTERM +User=vault +Group=vault +RestartSec=42s + +[Install] +WantedBy=multi-user.target