This blog is the continuation of Ansible with DellEMC storage multi-part blog.
In this 5th part, we will discuss about Ansible Tower (using AWX) and how to install and configure the same.
Overview
In my posts till now you might noticed that I have only used command line option to run any Ansible commands. There’s a reason for that. By default, when you install Ansible it only installs Ansible Engine, which only has Ansible CLI option. This is where Ansible Tower comes in picture. Note that AWX is the open source project for Ansible Tower.
While Ansible Tower has many features, below are few features which are my personal favorites. Since data storage management operations can be data destructive, below features are the reasons I am highly recommending using Tower / AWX for automating storage tasks.
- Web Interface – To manage Ansible using Web interface
- REST API Support – To manage and integrate Ansible Tower in other platforms. For example – integrating Ansible Tower with Jenkins
- Task Engine – To create scheduled job and centralized operations.
- Role Based Access Control – To control Enterprise level access across different team member and limit their visibility to information. This will make sure only designated users are having access to critical data/tasks.
Installing Ansible Tower (using AWX)
Make sure that you’ve supported operating systems installed and running. In my case I am using CentOS V7 virtual machine
Prerequisites –
Make sure below packages are installed on your machine
- Make sure you have set the selinux to permissive
sudo setenforce permissive
- Ansible – min version 2.8+
- yum install -y ansible
- Docker – Recent version
- yum install -y docker
- Docker Python Module
- Follow below steps for installing docker-compose
[root@dw-test-1 installer]# sudo curl -L "https://github.com/docker/compose/releases/download/1.25.4/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
[root@dw-test-1 installer]# sudo chmod +x /usr/local/bin/docker-compose
[root@dw-test-1 installer]# sudo ln -s /usr/local/bin/docker-compose /usr/bin/docker-compose
[root@dw-test-1 installer]# docker-compose --version
- GNU Make
- Git Requires Version 1.8.4+
- Node 10.x LTS version and NPM 6.x LTS
- yum install -y nodejs will install node.js and NPM as well
Once all the prerequisites are in place run below tasks
- Clone the Git AWX repository using below command
[root@dw-test-1 installer]# git clone https://github.com/ansible/awx.git
This will create awx
directory. cd
into the awx/installer
directory.
[root@dw-test-1 installer]# cd awx/installer
This folder has inventory
file which has all the AWX parameters. Most important details in this file are passwords which are needed for logging into the AWX post installation. Note that AWX supports installation on Kubernetes and Openshift as well. In this example we will be using docker-compose.
Most important parameters in inventory
file are as mentioned below. In my case I created the vars.yml
file with below inputs and used the same while running the installation.
[root@dw-test-1 installer]# cat vars.yml
admin_password: 'admin'
pg_password: 'admin'
secret_key: 'mysecret'
Once you’ve checked and verified all the parameters in the inventory file, go ahead and run below command.
[root@dw-test-1 installer]# ansible-playbook -i inventory install.yml -e @vars.yml
Note – I faced couple of errors which running this playbook. I suggest taking a look at this link if you face the same.
Once playbook execution is completed you can run below command to validate the installation.
[root@dw-test-1 installer]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
23b236356057 ansible/awx_task:10.0.0 "/tini -- /bin/sh ..." 6 minutes ago Up 2 minutes 8052/tcp awx_task
a23edc05283e ansible/awx_web:10.0.0 "/tini -- /bin/sh ..." 6 minutes ago Up 2 minutes 0.0.0.0:80->8052/tcp awx_web
385de9d395da postgres:10 "docker-entrypoint..." 6 minutes ago Up 2 minutes 5432/tcp awx_postgres
125b9e551823 redis "docker-entrypoint..." 2 hours ago Up 2 minutes 6379/tcp awx_redis
2a8ad285e2d5 memcached:alpine "docker-entrypoint..." 2 hours ago Up 2 minutes 11211/tcp awx_memcached
At this point AWX is installed. It takes some time for container to start and configure the AWX. Run the below command and wait till the time you see similar output
[root@dw-test-1 installer]# docker logs -f awx_task
...
2020-04-12 12:23:18,458 DEBUG awx.main.dispatch task 7b92a5a8-efa9-4b5e-8dc7-d4ca1d974508 starting awx.main.scheduler.tasks.run_task_manager(*[])
2020-04-12 12:23:18,466 DEBUG awx.main.scheduler Running Tower task manager.
2020-04-12 12:23:18,472 DEBUG awx.main.scheduler Starting Scheduler
2020-04-12 12:23:28,468 DEBUG awx.main.dispatch task ba9a6c3e-24b3-49e4-8cf1-62f90f315780 starting awx.main.tasks.awx_periodic_scheduler(*[])
2020-04-12 12:23:28,478 DEBUG awx.main.tasks Starting periodic scheduler
2020-04-12 12:23:28,480 DEBUG awx.main.tasks Last scheduler run was: 2020-04-12 12:22:58.567745+00:00
2020-04-12 12:23:38,483 DEBUG awx.main.dispatch task 7f4ac140-7231-4c6e-901f-34be80529707 starting awx.main.scheduler.tasks.run_task_manager(*[])
2020-04-12 12:23:38,493 DEBUG awx.main.scheduler Running Tower task manager.
2020-04-12 12:23:38,502 DEBUG awx.main.scheduler Starting Scheduler
2020-04-12 12:23:58,522 DEBUG awx.main.dispatch task 7ed5d956-ba67-4219-9509-1405713fa155 starting awx.main.tasks.cluster_node_heartbeat(*[])
2020-04-12 12:23:58,632 DEBUG awx.main.tasks Cluster node heartbeat task.
2020-04-12 12:23:58,508 DEBUG awx.main.dispatch task 7ca00dc2-ab9c-4c65-b505-f880afc47f65 starting awx.main.tasks.gather_analytics(*[])
2020-04-12 12:23:58,560 DEBUG awx.main.dispatch task 0e539914-105c-462f-89c6-20f1a50b1ec8 starting awx.main.tasks.awx_periodic_scheduler(*[])
2020-04-12 12:23:58,693 DEBUG awx.main.tasks Starting periodic scheduler
2020-04-12 12:23:58,696 DEBUG awx.main.tasks Last scheduler run was: 2020-04-12 12:23:28.480007+00:00
2020-04-12 12:23:58,536 DEBUG awx.main.dispatch task 5ec695f4-80f2-44a0-a18f-cdaa62215b10 starting awx.main.tasks.awx_k8s_reaper(*[])
2020-04-12 12:23:58,622 WARNING awx.main.dispatch scaling up worker pid:159
2020-04-12 12:23:58,738 DEBUG awx.main.dispatch task a643c365-145c-4bde-9536-d2f647d243f0 starting awx.main.scheduler.tasks.run_task_manager(*[])
2020-04-12 12:23:58,747 DEBUG awx.main.scheduler Running Tower task manager.
2020-04-12 12:23:58,752 DEBUG awx.main.scheduler Starting Scheduler
RESULT 2
OKREADY
Now we will need to install prerequisites for DellEMC Ansible module – PyU4V package. Follow below steps to install DellEMC Ansible module dependencies.
Connect to the container awx_task
[root@dw-test-1 installer]# docker exec -it awx_task bash
On the container prompt run below command to install PyU4V package
bash-4.4# pip3 install PyU4V==9.1.1.0
WARNING: Running pip install with root privileges is generally not a good idea. Try `pip3 install --user` instead.
Collecting PyU4V==9.1.1.0
Downloading https://files.pythonhosted.org/packages/38/83/34e7d4b823f84b74f6ac959b3cc5302882022f65c78e9f91593d531ebd1d/PyU4V-9.1.1.0-py3-none-any.whl (79kB)
100% |████████████████████████████████| 81kB 2.4MB/s
Collecting urllib3 (from PyU4V==9.1.1.0)
Downloading https://files.pythonhosted.org/packages/e8/74/6e4f91745020f967d09332bb2b8b9b10090957334692eb88ea4afe91b77f/urllib3-1.25.8-py2.py3-none-any.whl (125kB)
100% |████████████████████████████████| 133kB 3.4MB/s
Collecting prettytable (from PyU4V==9.1.1.0)
Downloading https://files.pythonhosted.org/packages/ef/30/4b0746848746ed5941f052479e7c23d2b56d174b82f4fd34a25e389831f5/prettytable-0.7.2.tar.bz2
Requirement already satisfied: six in /usr/lib/python3.6/site-packages (from PyU4V==9.1.1.0)
Requirement already satisfied: setuptools in /usr/lib/python3.6/site-packages (from PyU4V==9.1.1.0)
Collecting requests (from PyU4V==9.1.1.0)
Downloading https://files.pythonhosted.org/packages/1a/70/1935c770cb3be6e3a8b78ced23d7e0f3b187f5cbfab4749523ed65d7c9b1/requests-2.23.0-py2.py3-none-any.whl (58kB)
100% |████████████████████████████████| 61kB 4.4MB/s
Collecting chardet<4,>=3.0.2 (from requests->PyU4V==9.1.1.0)
Downloading https://files.pythonhosted.org/packages/bc/a9/01ffebfb562e4274b6487b4bb1ddec7ca55ec7510b22e4c51f14098443b8/chardet-3.0.4-py2.py3-none-any.whl (133kB)
100% |████████████████████████████████| 143kB 3.8MB/s
Collecting certifi>=2017.4.17 (from requests->PyU4V==9.1.1.0)
Downloading https://files.pythonhosted.org/packages/57/2b/26e37a4b034800c960a00c4e1b3d9ca5d7014e983e6e729e33ea2f36426c/certifi-2020.4.5.1-py2.py3-none-any.whl (157kB)
100% |████████████████████████████████| 163kB 3.8MB/s
Requirement already satisfied: idna<3,>=2.5 in /usr/lib/python3.6/site-packages (from requests->PyU4V==9.1.1.0)
Installing collected packages: urllib3, prettytable, chardet, certifi, requests, PyU4V
Running setup.py install for prettytable ... done
Successfully installed PyU4V-9.1.1.0 certifi-2020.4.5.1 chardet-3.0.4 prettytable-0.7.2 requests-2.23.0 urllib3-1.25.8
Once completed you can check installed version using
bash-4.4# pip3 list | grep PyU4V
PyU4V (9.1.1.0)
At this point you have AWX up and running and can be reached on http://localhost:80.
Tower is now running on the host at port 80. The rest of the setup is handled by the web interface . If you did this on the system you are using you can use http://localhost.
If everything went well then you can see login prompt similar to the below screenshot. Login credentials for AWX are as per inventory file.
This concludes Ansible Tower (AWX) installation process. In next posts we will discuss on configuring Ansible Tower / AWX.
1 reply »