1 min read

Automate Ansible Tower cli

I’ve used Ansible for years, but only started using their web-front end, Tower more recently. (Note, the upstream code was open-sourced last year, and it’s worth checking out, they call it AWX) So while I’m never a big fan of UI tools, Tower has proven quite helpful in allowing other teams access to deploying to their own dev servers from my Ansible code. There also have a cli tool to control Tower called (suprise) tower-cli that allows you to interact with Tower’s API. While it’s helpful, it’s lacking a few features, so I worked up a wrapper script to handle my workflow. Here’s the gist, with docs on how to install tower-cli, and run the tool. Give me some feedback if you have questions, of find it helpful.

#!/bin/bash
# tower-job
# https://gist.github.com/philcryer/fdce90d0b06517a49ff2fdba41b579df
# Variables
tower_template_id=574
# Directions
#
# install tower-cli
# sudo pip install tower-cli
#
# put this file in a root of your project
# {{ project_root }}/tower-job
#
# create a file ~/.tower-cli.cfg with contents:
#
# [general]
# host = fqdn.yourhost.com
# username = your-username
# password = ssssshhhhhhhh
#
# add variables from your tower survey to a vars file. we'll use group_vars/tower-job.yml
# ---
# survey_env: "DEV"
# survey_version: "2.0"
# survey_mychart_customer: "bob"
#
# define your job template ID # in variables above
# job_template_id=574
#
# make this file executable
# chmod 755 tower-job
#
# then run it
# ./tower-job
set -e
if [ ! -d 'group_vars' ]; then
echo "No group_vars found, run this out of root of project"; exit 1
fi
tower-cli job launch --job-template=$tower_template_id --extra-vars="@group_vars/tower-job.yml" | tee tower-job.pid
job_id=$(cat tower-job.pid | tail -n2 | head -n1 | awk '{print $1}')
rm tower-job.pid
while [ $(tower-cli job list --status=running | grep $job_id | wc -l) -lt '1' ]; do
echo -n "-"; sleep 5;
done;
tower-cli job monitor $job_id
exit 0
view raw tower-job hosted with ❤ by GitHub