Ansible gebruikt yaml scripts om software te installeren en configuratie bestanden aan te passen. Door het uitvoeren van zo'n script wordt alles gedownload, geïnstalleerd en aangepast. Het enige wat je vooraf moet doen is dit alles mogelijk maken.
1. Installeer een Operating systeem
Ik werk al jaren met Red Hat, maar voor dit project heb ik gekozen voor CentOS 7.
Installeer niet teveel. Een minimal install die sommige hosters zelfs hebben als sjabloon is genoeg.
2. Ansible config en uitwisseling SSH keys.
Er wordt verondersteld dat je al een ansible ready server hebt. Vanaf nu zal ik die ook refereren als Ansible-server. Heb je nog geen Ansible-server, dan is dit snel gefixt. Ansible is te vinden in de epel repo.
rpm -iUvh http://dl.fedoraproject.org/pub/epel/7/x86_64/e/epel-release-7-5.noarch.rpm yum -y update yum -y install ansible
Installeer dit op een CentOS 7 server die connectie kan maken met je nieuwe mailserver.
Uitwisseling van ssh-keys
Ansible kan alleen maar commando's uitvoeren op een target wanneer het toegang heeft.
Het gemakkelijkste is te werken als root, maar via sudo kan je ook alles doen. De scrips zijn gemaakt om alles uit te voeren als root.
Voeg de client toe (op Ansible-server) in /etc/hosts zodat de client kan aangesproken worden per hostname. Bewerk /etc/hosts en vul de lijst aan.
vi /etc/hosts
10.11.94.58 Madison7 10.11.94.59 Memphis7
Voeg de key toe aan de authorized_keys file
Via keys kan de ansible-server communiceren met de client. Voorwaarde is dat de client dit toe laat. Een typische locactie (op de client) is /etc/ssh/sshd_config.
De belangrijkste parameters zijn:
PermitRootLogin yes AuthorizedKeysFile .ssh/authorized_keys AllowUsers root
Copieer nu de public key van de Ansible-server naar de client
scp /root/.ssh/id_rsa.pub root@Madison7:/root/.ssh/id_rsa.pub
Vervang Madison7 met de naam van je client (zoals je hebt gededinieerd in de hosts file)
Voeg die public key nu toe op de client (naar het voorbeeld dus Madison7) in de authorized_keys file
cat /root/.ssh/id_rsa.pub >> /root/.ssh/authorized_keys
Verplichte test.
De test gaat twee dingen gaan doen.
Ten eerste zijn we zeker dat de verbinding mogelijk is via ssh-keys, zonder een paswoord te moeten invoeren.
Ten tweede, en daarom schrijf ik "verplicht", is het noodzakelijk om de client toe te voegen aan de know_hosts.
Voer uit:
ssh root@Madison7
De eerste keer zal je gevraagd worden om Madison7 te bewaren als een gekende host.
De volgende keren zal deze vraag niet meer gesteld worden en zit je zo zonder een paswoord in te voeren op de client.
Keer terug naar de Ansible server door exit te typen
Ansible-server gaat alleen scripts gaan uitvoeren op de clients die hij kent. In deze stap gaan we de clients toevoegen aan de hosts config van Ansible.
vi /etc/ansible/hosts
voeg bv toe onder de rubriek/sectie [webserver]
Madison7
3. Share keys tussen de client en de te migreren server.
Log in op de client (via ssh), zet de naam, genereer een ssh-key
hostname Madison7 ssh-keygen vi /root/.ssh/id_rsa.pub scp /root/.ssh/id_rsa.pub root@ip.old.server:/root/.ssh/id_rsa.pub
Log nu in op de te migreren server
cat /root/.ssh/id_rsa.pub >> /root/.ssh/authorized_keys
Log terug in op de client en probeer de verbinding. Opgelet terug verplicht (zie vorige procedure)
ssh root@ip.old.server
Je bent nu klaar om het ansible script te laten uitvoeren
4. Het werk
a) Laat ansible postfix installeren en configureren
Bekijk de variabelen, in de de directory variables, en de tasks vooraleer uit te voeren. Pas aan waar nodig. Run vervolgens het ansible script
ansible-playbook -l Madison7 Postfix.yml
b) MailScanner
Ik heb het MailScanner script niet nagemaakt en opgenomen in ansible. We kiezen voor de kennis van MailScanner en laten alles over aan hen.
Ondertussen werd Mailscanner gedownload en staat deze klaar op de client in de folder tmp/MailScanner-versie...
Let op bij de vragen die gesteld worden. Een MTA, spamassassin en Clam AV zijn reeds geinstalleerd en geconfigureerd. Antwoord dan ook met een Nee (N) wanneer die optie wordt voorgesteld.
Voer uit op de nieuwe host/client!!
cd /tmp/MailScanner-4.85.2-3 && ./install.sh
Answer Y except for installing an MTA, Spamassassin and Clam AV
c) Voeg features toe aan MailScanner
Terug op de ansible-server
ansible-playbook -l Madison7 MailScanner.yml
d) Ansible - System
Copieer de data van de te migreren server naar de client
ansible-playbook -l Madison7 SystemMadison.yml
e) Postfixadmin staat klaar.
Waneer je een upgrade hebt gedaan dan moet je het volgende uitvoeren op de client.
-> login
-> /upgrade.php
g) Reboot
Een reboot kan nooit geen kwaad.
That's it.
De yaml files
De Ansible scripts kan je hier downloaden.
Vergeet niet de variabelen na te kijken en aan te passen naar jouw noden.