Ansible Teil 6 – Installation und Ersteinrichtung + Foreman (CentOS)
In meiner bisherigen Reihe zum Thema Ansible, bin ich stets auf die Installation, Konfiguration und Erweiterung auf einem Ubuntu-Server eingegangen. Um nun auch eine Anleitung für CentOS zu bieten, soll dieser Beitrag ein Leitfaden sein. Genauer gesagt, beziehe ich mich auf die CentOS Version 8 Stram (rolling release), sodass eine entsprechende Vorinstallation des Betriebssystems vorausgesetzt ist.
Installation und Ersteinrichtung von Ansible
Sorgt zunächst dafür, dass euer Server stets dieselbe IP-Adresse erhält. Entweder über eine fix gesetzte IP-Adresse in der Netzwerkkonfiguration oder (wie in meinem Fall) einem DHCP-Server, der stets dieselbe IP vergibt.
Installiert dann Ansible folgendermaßen:
sudo yum install epel-release
sudo yum install ansible
Um im Anschluß eine vollständige Konfigurationsdatei von Ansible zu erzeugen, ist uns der folgende Befehl dienlich:
ansible-config init --disabled -t all > /etc/ansible/ansible.cfg
Um hinterher bei der Ausführung der Playbooks Fehler zu vermeiden, editieren wir diese neue ansible.cfg-Datei …
nano /etc/ansible/ansible.cfg
… suchen innerhalb der Punktes [ssh_connection] die Zeile ;host_key_checking=True und setzen diese auf …
[ssh_connection]
...
host_key_checking=False
Damit Ansible automatisiert arbeiten kann, benötigen wir ein SSH-Schlüsselpaar (generiert als root-Benutzer) und legen dieses auf die jeweilige Zielmaschine ab. Zunächst werden wir zu root und erstellen wir ein passwortloses SSH-Schlüsselpaar unter dem Standardpfad /root/.ssh/id_rsa.pub.
sudo su -
ssh-keygen
Nun muss der eben erzeugte Public-Key auf die Maschine abgelegt werden. Standardmäßig liegt dieser unter /root/.ssh/id_rsa.pub. Dessen Inhalt wird auf der Zielmaschine unter …
/root/.ssh/authorized_keys
… abgelegt.
Für gewöhnlich werden die Zielmaschinen in Gruppen inventarisiert und liegen in dieser Datei:
nano /etc/ansible/hosts
Um eine erste Maschine hinzuzufügen wird in der letzten Zeile folgender Zweizeiler angefügt:
[linux]
ubuntu-computer.fritz.box
Wichtig ist, dass die Hosts mit ihrem FQDN ausgeschrieben werden, da es auf der Foreman-Oberfläche hinterher sonst zu mehrfachen Einträgen der Hosts kommen kann. Passt die Namen der Gruppe und des Hosts entsprechend eurer eigenen Infrastruktur an. Alternativ lassen sich auch IP-Adressen anstelle des Hostnamens verwenden.
Um die Einrichtung bis dahin zu testen, lässt sich das Ping-Modul nutzen:
ansible all -m ping
Foreman Installation
Für die Foreman Installation in der Version 3.1 wird den Repositories zunächst eine aktuelle Version von Puppet hinzugefügt.
sudo yum -y install https://yum.puppet.com/puppet6-release-el-8.noarch.rpm
Anschließend wird Ruby installiert.
sudo dnf module reset ruby
sudo dnf module enable ruby:2.7
Es fehlt nun nur noch das Foreman-Repository …
sudo yum -y install https://yum.theforeman.org/releases/3.1/el8/x86_64/foreman-release.rpm
… mit dem anschließend anschließend der foreman-installer installiert wird:
sudo yum -y install foreman-installer
Wichtig ist vor der Ausführung des foreman-installers, dass unser Ansible-/ bzw. Foreman-Server einen FQDN gesetzt hat, da sonst der Prozess abbricht.
Dies kann beispielsweise folgendermaßen durchgeführt werden:
sudo hostnamectl set-hostname centos-server.fritz.box
Der Foreman-Installer übernimmt ab hier die Installationsroutine für uns:
sudo foreman-installer
Sollte der Fehler Forward DNS points to … which is not configured on this server erscheinen, fehlt noch eine Namensauflösung in der /etc/hosts mit dem Localhost und dem Hostnamen (ergänzt im folgenden Beispiel den Namen eures Servers mit dem unten aufgeführten):
nano /etc/hosts
127.0.0.1 centos-server.fritz.box centos-server
Sollte die Installation in Fehler laufen, lassen sich diese korrigieren und die Routine erneut starten.
Nach erfolgreichem Abschluß, wird uns die Foreman Adresse samt Login-Informationen präsentiert:
Die hier angezeigte Adresse https://centos-server.fritz.box führt zur nun aktiven Foreman-Oberfläche. Testweise kann sie einmal geöffnet werden.
Sollte es dabei zu Problemen kommen, müsste ggf. noch die Firewall angepasst werden:
sudo firewall-cmd --zone=public --add-port=80/tcp --permanent
sudo firewall-cmd --zone=public --add-port=443/tcp --permanent
sudo firewall-cmd --reload
Möchten wir, dass Ansible die Aufnahme der Hosts in die Foreman Oberfläche für uns übernimmt, so editieren wir noch die ansible.cfg und schalten innerhalb der Kategorie [defaults] die callback_whitelist Methode auf foreman um:
nano /etc/ansible/ansible.cfg
### Innerhalb der Kategorie [defaults]
[defaults]
callback_whitelist = foreman
Außerdem erstellen wir eine weitere Kategorie, die wir innerhalb derselben Datei am Ende einfügen und dort die URL, das Zertifikat vom kürzlich dazu installierten Puppetserver, dem Private Key vom Puppetserver und das Zertifikat der Zertifizierungsstelle vom Puppetserver angeben:
[callback_foreman]
url = 'https://centos-server.fritz.box'
ssl_cert = /etc/puppetlabs/puppet/ssl/certs/centos-server.fritz.box.pem
ssl_key = /etc/puppetlabs/puppet/ssl/private_keys/centos-server.fritz.box.pem
verify_certs = /etc/puppetlabs/puppet/ssl/certs/ca.pem
Auch hier ändert ihr die Namen der Zertifikate und Ablageorte entsprechend eurem Setup.
Als letztes wird noch das Python Modul Requests benötigt.
sudo yum install python39-requests
Und damit wäre die Installation auf einem CentOS vollständig und geglückt!