#ToolTip - AWX (Ansible Tower)
Pra você que está mexendo com Ansible a um tempo, com certeza já deve conhecer essa ferramenta. Simplesmente uma das interfaces de gerenciamento mais conhecidas para o ansible. AWX também é o projeto upstream do Ansible Tower, que pertence a Red Hat.
Com base na documentação oficial, existem 3 formas de instalação, Openshift, Kubernetes e Docker compose. Irei mostrar o procedimento para instalação utilizando Containers(docker) em cima do CentOS 7. Vamos iniciar com os pre-requisitos para o correta instalação.
Agora instalação do Docker.
yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo
yum install docker-ce docker-ce-cli containerd.io -y
systemctl start docker
systemctl enable docker
Instalação do docker-compose (módulo python).
Instalação do Docker compose.
curl -L "https://github.com/docker/compose/releases/download/1.26.1/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
chmod +x /usr/local/bin/docker-compose
ln -s /usr/local/bin/docker-compose /usr/bin/docker-compose
Criação das regras de firewall necessárias para o funcionamento do serviço.
firewall-cmd --zone=public --add-masquerade --permanent
firewall-cmd --permanent --add-service=http
firewall-cmd --permanent --add-service=https
firewall-cmd --reload
Criação do diretório default do projeto para o postgres, conforme arquivo de configuração. E download dos arquivos do projeto oficial no github.
Execução do playbook de instalação.
Com isso você pode acessar no ip ou hostname da Máquina que você instalou. Irá aparecer uma página como esta.
Login e Senha padrão , admin / password.

Agora, é cadastrar os hosts, configurar os playbooks e os jobs.

Workaround1 – AWX is Upgrading
Caso após o procedimento de instalação tenha aparecido uma tela como esta e permaneça por muito tempo.

Você pode enviar o comando a partir da máquina onde está instalado:
Com isso você irá acompanhar os logs do container, awx_task. Caso você encontre repetidamente a existência do seguinte trecho nos logs, significa que algo ocorreu durante o boot dos containers e não está comunicando corretamente
django.db.utils.ProgrammingError: relation "main_instance" does not exist
LINE 1: SELECT (1) AS "a" FROM "main_instance" WHERE "main_instance"...
^
2020-07-03 20:16:21,353 INFO exited: dispatcher (exit status 1; not expected)
2020-07-03 20:16:21,353 INFO exited: dispatcher (exit status 1; not expected)
2020-07-03 20:16:22,357 INFO spawned: 'dispatcher' with pid 237
2020-07-03 20:16:22,357 INFO spawned: 'dispatcher' with pid 237
2020-07-03 20:16:23,359 INFO success: dispatcher entered RUNNING state, process has stayed up for > than 1 seconds (startsecs)
2020-07-03 20:16:23,359 INFO success: dispatcher entered RUNNING state, process has stayed up for > than 1 seconds (startsecs)
2020-07-03 20:16:25,793 WARNING awx.main.dispatch.periodic periodic beat started
Traceback (most recent call last):
File "/var/lib/awx/venv/awx/lib/python3.6/site-packages/django/db/backends/utils.py", line 84, in _execute
return self.cursor.execute(sql, params)
psycopg2.errors.UndefinedTable: relation "main_instance" does not exist
LINE 1: SELECT (1) AS "a" FROM "main_instance" WHERE "main_instance"...
^
The above exception was the direct cause of the following exception:
Traceback (most recent call last):
File "/usr/bin/awx-manage", line 8, in <module>
sys.exit(manage())
File "/var/lib/awx/venv/awx/lib/python3.6/site-packages/awx/__init__.py", line 154, in manage
execute_from_command_line(sys.argv)
File "/var/lib/awx/venv/awx/lib/python3.6/site-packages/django/core/management/__init__.py", line 381, in execute_from_command_line
utility.execute()
File "/var/lib/awx/venv/awx/lib/python3.6/site-packages/django/core/management/__init__.py", line 375, in execute
self.fetch_command(subcommand).run_from_argv(self.argv)
File "/var/lib/awx/venv/awx/lib/python3.6/site-packages/django/core/management/base.py", line 323, in run_from_argv
self.execute(*args, **cmd_options)
File "/var/lib/awx/venv/awx/lib/python3.6/site-packages/django/core/management/base.py", line 364, in execute
output = self.handle(*args, **options)
File "/var/lib/awx/venv/awx/lib/python3.6/site-packages/awx/main/management/commands/run_dispatcher.py", line 55, in handle
reaper.reap()
File "/var/lib/awx/venv/awx/lib/python3.6/site-packages/awx/main/dispatch/reaper.py", line 38, in reap
(changed, me) = Instance.objects.get_or_register()
File "/var/lib/awx/venv/awx/lib/python3.6/site-packages/awx/main/managers.py", line 144, in get_or_register
return (False, self.me())
File "/var/lib/awx/venv/awx/lib/python3.6/site-packages/awx/main/managers.py", line 100, in me
if node.exists():
File "/var/lib/awx/venv/awx/lib/python3.6/site-packages/django/db/models/query.py", line 766, in exists
return self.query.has_results(using=self.db)
File "/var/lib/awx/venv/awx/lib/python3.6/site-packages/django/db/models/sql/query.py", line 522, in has_results
return compiler.has_results()
File "/var/lib/awx/venv/awx/lib/python3.6/site-packages/django/db/models/sql/compiler.py", line 1110, in has_results
return bool(self.execute_sql(SINGLE))
File "/var/lib/awx/venv/awx/lib/python3.6/site-packages/django/db/models/sql/compiler.py", line 1140, in execute_sql
cursor.execute(sql, params)
File "/var/lib/awx/venv/awx/lib/python3.6/site-packages/django/db/backends/utils.py", line 67, in execute
return self._execute_with_wrappers(sql, params, many=False, executor=self._execute)
File "/var/lib/awx/venv/awx/lib/python3.6/site-packages/django/db/backends/utils.py", line 76, in _execute_with_wrappers
return executor(sql, params, many, context)
File "/var/lib/awx/venv/awx/lib/python3.6/site-packages/django/db/backends/utils.py", line 84, in _execute
return self.cursor.execute(sql, params)
File "/var/lib/awx/venv/awx/lib/python3.6/site-packages/django/db/utils.py", line 89, in __exit__
raise dj_exc_value.with_traceback(traceback) from exc_value
File "/var/lib/awx/venv/awx/lib/python3.6/site-packages/django/db/backends/utils.py", line 84, in _execute
return self.cursor.execute(sql, params)
django.db.utils.ProgrammingError: relation "main_instance" does not exist
LINE 1: SELECT (1) AS "a" FROM "main_instance" WHERE "main_instance"...
^
Uma solução que encontrei para isso foi, reiniciar o serviço docker. Após o reboot, os serviços normalizaram e subiram corretamente, e o log do awx_task ficou, assim:
RESULT 2
OKREADY
2020-07-04 02:44:02,426 DEBUG awx.main.dispatch task f6eee5e4-5a28-4b36-81e0-0742d680a54e starting awx.main.tasks.awx_periodic_scheduler(*[])
2020-07-04 02:44:02,433 DEBUG awx.main.tasks Starting periodic scheduler
2020-07-04 02:44:02,436 DEBUG awx.main.tasks Last scheduler run was: 2020-07-04 02:43:32.404286+00:00
2020-07-04 02:44:12,437 DEBUG awx.main.dispatch task d38b3829-0bc3-4476-a164-c9b8017e8711 starting awx.main.scheduler.tasks.run_task_manager(*[])
2020-07-04 02:44:12,438 DEBUG awx.main.scheduler Running Tower task manager.
2020-07-04 02:44:12,452 DEBUG awx.main.scheduler Starting Scheduler
2020-07-04 02:44:12,479 DEBUG awx.main.scheduler Finishing Scheduler
2020-07-04 02:44:32,477 DEBUG awx.main.dispatch task e9f7f38b-5638-41d9-bf20-daa04b43f792 starting awx.main.tasks.awx_periodic_scheduler(*[])
2020-07-04 02:44:32,595 DEBUG awx.main.tasks Starting periodic scheduler
2020-07-04 02:44:32,473 DEBUG awx.main.dispatch task 68163837-51b6-4b4b-ac7d-569206898d86 starting awx.main.tasks.awx_k8s_reaper(*[])
2020-07-04 02:44:32,472 DEBUG awx.main.dispatch task f5352616-419a-42fb-a13f-0606d3764423 starting awx.main.tasks.cluster_node_heartbeat(*[])
2020-07-04 02:44:32,598 DEBUG awx.main.tasks Cluster node heartbeat task.
2020-07-04 02:44:32,599 DEBUG awx.main.tasks Last scheduler run was: 2020-07-04 02:44:02.434157+00:00
2020-07-04 02:44:32,486 DEBUG awx.main.dispatch task 6dbd2e92-0279-4557-b70a-edd2f40da337 starting awx.main.scheduler.tasks.run_task_manager(*[])
2020-07-04 02:44:32,611 DEBUG awx.main.scheduler Running Tower task manager.
2020-07-04 02:44:32,618 DEBUG awx.main.scheduler Starting Scheduler
2020-07-04 02:44:32,643 DEBUG awx.main.scheduler Finishing Scheduler
2020-07-04 02:44:52,502 DEBUG awx.main.dispatch task ab829c24-ce33-4f25-aece-2a5fab0eecea starting awx.main.scheduler.tasks.run_task_manager(*[])
2020-07-04 02:44:52,504 DEBUG awx.main.scheduler Running Tower task manager.
2020-07-04 02:44:52,518 DEBUG awx.main.scheduler Starting Scheduler
2020-07-04 02:44:52,545 DEBUG awx.main.scheduler Finishing Scheduler
RESULT 2
Caso queira automatizar ainda mais a instalação, segue o link de um playbook em ansible, assim como outros projetos.