Skip to content

awx ansible on rhel

  • by

As you probably read we did opensource ansible tower . 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 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": [""]

Step 6: install ansible

[root@host141 ~]# yum install -y ansible

Step 7: install all the necessary roles

[root@host141 ~]# cat << EOF >
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

chmod +x

Step 8: install the roles:

[root@host141 ~]# ./

Step 9: create the inventory add your host

[root@host141 ~]# mkdir inventory
[root@host141 ~]# touch hosts inventory/
[root@host141 ~]# echo '' > inventory/hosts

Step 10: create the play to install awx

[root@host141 ~]# echo << EOF > install.yml
- hosts: all
  become: yes

    nodejs_version: "6.x"
      - name: docker-py

    - name: Update apt cache.
      apt: update_cache=yes cache_valid_time=600
      when: ansible_os_family == 'Debian'
      changed_when: false

    - name: geerlingguy.repo-epel
      when: ansible_os_family == "RedHat"
    - geerlingguy.git
    - geerlingguy.ansible
    - geerlingguy.docker
    - geerlingguy.pip
    - geerlingguy.nodejs
    - geerlingguy.awx

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:   "/tini -- /bin/sh ..."   About an hour ago   Up About an hour    8052/tcp                             awx_task
b56359a39b98        awx_web:    "/tini -- /bin/sh ..."   About an hour ago   Up About an hour>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 | 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.

>>> <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