Installeren Ansible Tower (AWX) op CentOS 8

Ansible Tower heeft een open source upstream project genaamd ‘AWX‘ dat op een CentOS server geïnstalleerd kan worden. Ansible Tower helpt een devOps team om de Ansible omgeving te beheren.

Een virtuele machine is aangemaakt op Proxmox, maar dat kan ook Hyper-V, VMWare, KVM, of welke hypervisor dan ook zijn. 4Gb geheugen (ballooned van 1Gb-4Gb), 4 cores en 32Gb hard disk.

De host heeft als naam ‘awx.digitalinfo.local’ en verder is het een basic-CentOS 8 installatie met een gebruiker genaamd ‘ansible‘ die tevens ‘sudoer‘ is.

Met ‘ssh-copy-id ansible@awx.digitalinfo.local‘ is de ssh-key op de host geplaatst, veilig met inloggen! Plain text password login voor ssh is uitgeschakeld.

Voorbereiding

Na de installatie van CentOS 8 op een VM dient de ‘epel-release‘ geïnstalleerd te worden. Daarna zijn diverse packages nodig om straks via git de awx software op te halen die dan m.b.v. ansible in een docker container gaat draaien. Ook voor docker halen we een repo erbij zodat ‘docker-ce‘ geinstalleerd kan worden. De commando’s ter voorbereiding:

sudo dnf install epel-release -y
sudo dnf install git gcc gcc-c++ ansible nodejs gettext device-mapper-persistent-data lvm2 bzip2 python3-pip -y
sudo dnf config-manager --add-repo=https://download.docker.com/linux/centos/docker-ce.repo
sudo dnf install docker-ce-3:18.09.1-3.el7 -y
sudo systemctl enable docker --help
sudo systemctl enable docker --now
sudo systemctl status docker
sudo usermod -aG docker $USER

Op dit punt aangekomen hebben we een CentOS 8 server met docker ‘up-and-running‘ om containers te draaien. Nu even de versie voor python goed zetten. Dit is de reden dat ik voor CentOS 8 heb gekozen, zodoende dus geen ‘last’ van de versie-conflicten van python in Centos 7. Anyways, enter de volgende commando’s:

sudo pip3 install docker-compose
sudo alternatives --set python /usr/bin/python3

Nu gaan we de git-repository voor AWX ophalen vanuit de github repo van ansible:

git clone https://github.com/ansible/awx.git
cd awx/installer

In de inventory file staan een aantal opties die gewijzigd dienen te worden. De eerste is een key die we eerst gaan genereren met openssl:

openssl rand -base64 30

Kopeieer de key en edit het inventory bestand. Wijzig de volgende opties:

secret_key=[de key van het commando hierboven]
admin_password=[een very secret password]
awx_alternate_dns_servers="8.8.8.8,8.8.4.4"

Maak nog even een directory voordat ansible begint:

sudo mkdir /var/lib/pgdocker

Hierna kan ansible de installatie van de docker-containers uitvoeren met:

sudo ansible-playbook -i inventory install.yml

Tijd voor koffie…

Nadat de ansible-playbooks gereed zijn draaien er een aantal docker containers:

$ docker ps
CONTAINER ID        IMAGE                COMMAND                  CREATED             STATUS              PORTS                  NAMES
0d12eea25bb1        ansible/awx:14.1.0   "/usr/bin/tini -- /u…"   52 minutes ago      Up About an hour    8052/tcp               awx_task
4565f74f982d        ansible/awx:14.1.0   "/usr/bin/tini -- /b…"   52 minutes ago      Up About an hour    0.0.0.0:80->8052/tcp   awx_web
aeee05c93fa5        redis                "docker-entrypoint.s…"   52 minutes ago      Up About an hour    6379/tcp               awx_redis
be5516f16ecb        postgres:10          "docker-entrypoint.s…"   52 minutes ago      Up About an hour    5432/tcp               awx_postgres

Wellicht is het nodig om selinux te disabled, zet deze dan op disabled via

sudo sed -i 's/SELINUX=enforcing/SELINUX=disabled/g' /etc/sysconfig/selinux
sudo setenforce 0

Ook is het nodig om http en https verkeer door de firewall toe te laten:

sudo firewall-cmd --zone=public --add-masquerade --permanent
sudo firewall-cmd --permanent --add-service=http
sudo firewall-cmd --permanent --add-service=https
sudo firewall-cmd --reload

Tenslotte kan nu met een browser naar de nieuwe AWX host gegaan worden.

http://awx.digitalinfo.local
eerst even een upgrade uitvoeren…

Inloggen kan met username ‘admin’ en het wachtwoord zoals eerder ingesteld in de inventory file.