Description
ISSUE TYPE
- Bug Report
SUMMARY
This is closely related to #5221, since that time, now the postgres_db module of ansible has the maintenance_db option, but it's missing from the /usr/bin/launch_awx(_task).sh script.
The problem is the same, as in the previous ticket: when an external postgres db is used, it will try to connect first to the 'postgres' db as it's the default of the maintenance_db variable.
bash-4.2$ source /etc/tower/conf.d/environment.sh
bash-4.2$ ANSIBLE_REMOTE_TEMP=/tmp ANSIBLE_LOCAL_TEMP=/tmp ansible -i "127.0.0.1," -c local -v -m postgresql_db --become-user $DATABASE_USER -a "name=$DATABASE_NAME owner=$DATABASE_USER login_user=$DATABASE_USER login_host=$DATABASE_HOST login_password=$DATABASE_PASSWORD port=$DATABASE_PORT" all
Using /etc/ansible/ansible.cfg as config file An exception occurred during task execution. To see the full traceback, use -vvv. The error was: OperationalError: FATAL: no pg_hba.conf entry for host "172.22.0.5", user "awx_test", database "postgres", SSL off 127.0.0.1 | FAILED! => { "ansible_facts": { "discovered_interpreter_python": "/usr/bin/python" }, "changed": false, "msg": "unable to connect to database: FATAL: no pg_hba.conf entry for host \"172.22.0.5\", user \"awx_test\", database \"postgres\", SSL off\n" }
ENVIRONMENT
- AWX version: 9.1.0
- AWX install method: docker on linux
- Ansible version: 2.8.4
- Operating System: Centos7
- Web Browser: N/A
STEPS TO REPRODUCE
-
Set an external postgresql server in the environment.sh config file:
DATABASE_USER=awx_test
DATABASE_NAME=awx_test
DATABASE_HOST=XXXXX
DATABASE_PORT=5432
DATABASE_PASSWORD=XXXXX -
Start the awx_web containers
EXPECTED RESULTS
The reconfiguration of the containers is done without problems.
ACTUAL RESULTS
The initial reconfiguration will fail, as it can't connect to the maintenance_db (postgres by default)
ADDITIONAL INFORMATION
Possible Solution:
Following file should be changed:
installer/roles/image_build/files/launch_awx.sh
From:
ANSIBLE_REMOTE_TEMP=/tmp ANSIBLE_LOCAL_TEMP=/tmp ansible -i "127.0.0.1," -c local -v -m postgresql_db --become-user $DATABASE_USER -a "name=$DATABASE_NAME owner=$DATABASE_USER login_user=$DATABASE_USER login_host=$DATABASE_HOST login_password=$DATABASE_PASSWORD port=$DATABASE_PORT" all
To:
ANSIBLE_REMOTE_TEMP=/tmp ANSIBLE_LOCAL_TEMP=/tmp ansible -i "127.0.0.1," -c local -v -m postgresql_db --become-user $DATABASE_USER -a "name=$DATABASE_NAME owner=$DATABASE_USER login_user=$DATABASE_USER login_host=$DATABASE_HOST login_password=$DATABASE_PASSWORD port=$DATABASE_PORT maintenance_db=$DATABASE_NAME" all
Or define a DATABASE_MAINTENANCE_DB variable in environment.sh and make it to default to the database name.
Thanks