As you probably read we did opensource ansible tower
https://github.com/ansible/awx . This was a big and necessary step to follow the red hat way of being truly opensource. Thanks to Jeff Geerling we also have a role https://galaxy.ansible.com/geerlingguy/awx/ to install awx.
To install AWX on RHEL (remember this is not supported by GSS) you need to do the following:
Step1: register your host with Red Hat
[root@host141 ~]# subscription-manager register
Step2: now add the needed channels
[root@host141 ~]# subscription manager attach --pool YOURPOOLFORRHEL
Step3: enable the repos extras and optional
[root@host141 ~]# subscription-manager repos --disable=* [root@host141 ~]# subscription-manager repos --enable=rhel-7-server-rpms --enable=rhel-7-server-extras-rpms --enable=rhel-7-server-optional-rpms
Step4: to be able to run the build correctly you will have to do the following
[root@host141 ~]# mkdir -p /etc/docker
Step 5: add the following file. Without that you build will fail complaining that you cannot connect to github
[root@host141 ~]# cat << EOF > /etc/docker/daemon.json { "dns": ["8.8.8.8"] } EOF
Step 6: install ansible
[root@host141 ~]# yum install -y ansible
Step 7: install all the necessary roles
[root@host141 ~]# cat << EOF > roles-for-awx.sh ansible-galaxy install geerlingguy.git ansible-galaxy install geerlingguy.ansible ansible-galaxy install geerlingguy.docker ansible-galaxy install geerlingguy.pip ansible-galaxy install geerlingguy.nodejs ansible-galaxy install geerlingguy.repo-epel ansible-galaxy install geerlingguy.awx EOF chmod +x roles-for-awx.sh
Step 8: install the roles:
[root@host141 ~]# ./roles-for-awx.sh
Step 9: create the inventory add your host
[root@host141 ~]# mkdir inventory [root@host141 ~]# touch hosts inventory/ [root@host141 ~]# echo '192.168.1.55' > inventory/hosts
Step 10: create the play to install awx
[root@host141 ~]# echo << EOF > install.yml --- - hosts: all become: yes vars: nodejs_version: "6.x" pip_install_packages: - name: docker-py pre_tasks: - name: Update apt cache. apt: update_cache=yes cache_valid_time=600 when: ansible_os_family == 'Debian' changed_when: false roles: - name: geerlingguy.repo-epel when: ansible_os_family == "RedHat" - geerlingguy.git - geerlingguy.ansible - geerlingguy.docker - geerlingguy.pip - geerlingguy.nodejs - geerlingguy.awx EOF
Step 11: run the playbook
[root@host141 ~]# ansible-playbook -i inventory install.yml -vv
Step 12: If the install is successful you will see the following
[root@host141 ~]# docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 5bd777f861d5 awx_task:1.0.0.337 "/tini -- /bin/sh ..." About an hour ago Up About an hour 8052/tcp awx_task b56359a39b98 awx_web:1.0.0.337 "/tini -- /bin/sh ..." About an hour ago Up About an hour 0.0.0.0:80->8052/tcp awx_web 243a135f35bc memcached:alpine "docker-entrypoint..." About an hour ago Up About an hour 11211/tcp memcached 19d622b223b3 rabbitmq:3 "docker-entrypoint..." About an hour ago Up About an hour 4369/tcp, 5671-5672/tcp, 25672/tcp rabbitmq f6eede4708f5 postgres:9.6 "docker-entrypoint..." About an hour ago Up About an hour 5432/tcp postgres
Step 13: It will take a while until the instance comes up. You can check it like this
[root@host141 awx]# docker logs -f awx_task Using /etc/ansible/ansible.cfg as config file 127.0.0.1 | SUCCESS => { "changed": true, "db": "awx" } Operations to perform: Synchronize unmigrated apps: solo, api, staticfiles, messages, channels, django_extensions, ui, rest_framework, polymorphic Apply all migrations: sso, taggit, sessions, djcelery, sites, kombu_transport_django, social_auth, contenttypes, auth, conf, main Synchronizing apps without migrations: Creating tables... Running deferred SQL... Installing custom SQL... Running migrations: Rendering model states... DONE Applying contenttypes.0001_initial... OK Applying contenttypes.0002_remove_content_type_name... OK Applying auth.0001_initial... OK Applying auth.0002_alter_permission_name_max_length... OK Applying auth.0003_alter_user_email_max_length... OK Applying auth.0004_alter_user_username_opts... OK Applying auth.0005_alter_user_last_login_null... OK Applying auth.0006_require_contenttypes_0002... OK Applying taggit.0001_initial... OK Applying taggit.0002_auto_20150616_2121... OK Applying main.0001_initial... OK Applying main.0002_squashed_v300_release... OK Applying main.0003_squashed_v300_v303_updates... OK Applying main.0004_squashed_v310_release... OK Applying conf.0001_initial... OK Applying conf.0002_v310_copy_tower_settings... OK Applying conf.0003_v310_JSONField_changes... OK Applying conf.0004_v320_reencrypt... OK Applying djcelery.0001_initial... OK Applying kombu_transport_django.0001_initial... OK Applying main.0005_squashed_v310_v313_updates... OK Applying main.0006_v320_release... OK 2017-09-12 14:18:40,999 DEBUG awx.main.migrations Removing all Rackspace InventorySource from database. 2017-09-12 14:18:41,028 DEBUG awx.main.migrations Removing all InventorySource that have no link to an Inventory from database. Applying main.0007_v320_data_migrations... OK Applying main.0008_v320_drop_v1_credential_fields... OK Applying sessions.0001_initial... OK Applying sites.0001_initial... OK Applying social_auth.0001_initial... OK Applying social_auth.0002_add_related_name... OK Applying social_auth.0003_alter_email_max_length... OK Applying social_auth.0004_auto_20160423_0400... OK Applying social_auth.0005_auto_20160727_2333... OK Applying sso.0001_initial... OK Applying sso.0002_expand_provider_options... OK Python 2.7.5 (default, Nov 6 2016, 00:28:07) [GCC 4.8.5 20150623 (Red Hat 4.8.5-11)] on linux2 Type "help", "copyright", "credits" or "license" for more information. (InteractiveConsole) >>> <User: admin> >>> Default organization added. Demo Credential, Inventory, and Job Template added. Successfully registered instance awx (changed: True) Creating instance group tower Added instance awx to tower (changed: True)
Step 14: Login to tower via http://yourip (username is admin, pass is password)
Step 15: Once logged in you should see