LoginSignup
2
2

More than 5 years have passed since last update.

Ansible Tower(AWX)で実行したジョブのextra_varsを取得するツールを作ってみた

Last updated at Posted at 2018-07-14

Ansible Tower(AWX)のジョブを実行する時に渡した extra_vars をGUI上から確認・コピペすることができますが取得するツールを勉強がてら作ってみました。
コピペできるとは知らなかったのはヒミツ

1. 作った理由

ジョブ実行者からうまく動作しなかったなどのデバッグをお願いされる時に大量の extra_vars があった時にいちいち小さい画面から見るのが面倒だったためです。
最新版のAWXであれば EXPAND が追加されており、クリックすれば別窓で EXTRA VARIABLES が確認できるようになりました。
ただ、一個一個確認するのもめんどうなのでジョブIDが分かれば extra_vars を取得できたら便利かなと思い作ってみました。

スクリーンショット 2018-07-14 20.58.19.png

スクリーンショット 2018-07-14 20.58.50.png

Ansible Tower 3.2.5 には、まだこの機能はないようです。

2. awx-get-job-extv.py

#!/usr/bin/env python3
from getpass import getpass
import sys
import argparse
import json
import requests
from requests.packages.urllib3.exceptions import InsecureRequestWarning
requests.packages.urllib3.disable_warnings(InsecureRequestWarning)

def options():
    parser = argparse.ArgumentParser(prog="awx-get-job-extv.py",
                                     add_help=True,
                                     description="Get extra_vars from the job result executed with Ansible Tower(AWX).")

    parser.add_argument("--server", "-s",
                        type=str, required=True,
                        help="Specify IP or host name of Ansible Tower(AWX).")
    parser.add_argument("--user", "-u",
                        type=str, default="admin",
                        help="Specify Ansible Tower(AWX) user.")
    parser.add_argument("--password", "-p",
                        type=str,
                        help="Specify ANsible Tower(AWX) user password.")
    parser.add_argument("--job-id", "-id",
                        type=int, required=True,
                        help="Specify job id of get extra_vars.")
    parser.add_argument("--json-indent",
                        type=int,
                        help="Specify JSON indent number.")
    parser.add_argument("--ssl",
                        action="store_true",
                        help="Specify when using SSL connection.")
    parser.add_argument("--ssl-verify",
                        action="store_true",
                        help="Enable server certificate check.")

    args = parser.parse_args()
    if(not(args.password)):
        args.password = getpass()

    return args

def create_url(args, path):
    if(args.ssl):
        url = "https://%s%s" % (args.server, path)
    else:
        url = "http://%s%s" % (args.server, path)

    return url

def main():
    args = options()
    url = create_url(args, "/api/v2/jobs")
    headers = {"Content-Type": "application/json"}

    results = []
    ssl_verify = True if(args.ssl_verify) else False
    while True:
        try:
            r = requests.get(url,
                             headers=headers,
                             auth=(args.user, args.password),
                             verify=ssl_verify)
        except Exception as e:
            print("Error: %s" % e)

        if(r.status_code == 200):
            next_path = json.loads(r.text)["next"]
            if(next_path):
                url = create_url(args, next_path)
                for r in json.loads(r.text)["results"]:
                    results.append(r)
            else:
                for r in json.loads(r.text)["results"]:
                    results.append(r)
                break
        else:
            print("Error")
            print("status code: %s" % r.status_code)
            print(r.text)
            sys.exit(1)

    for job in results:
        if(args.job_id == job["id"]):
            if (args.json_indent):
                print(json.dumps(json.loads(job["extra_vars"]), indent=args.json_indent))
                sys.exit(0)
            else:
                print(job["extra_vars"])
                sys.exit(0)

    print("job id %s not found." % args.job_id)

if __name__ == "__main__":
    main()

3. 使い方

Ansible Towerで使う場合でジョブIDが4のものを指定した例

スクリーンショット 2018-07-14 21.05.10.png

$ ./awx-get-job-extv.py -s 192.168.0.234 -id 4 --ssl --json-indent 2
Password:
{
  "MSG": [
    "HOGE",
    "FUGA",
    "TEST"
  ]
}

AWXで使う場合でジョブIDが5のものを指定した例

スクリーンショット 2018-07-14 21.07.52.png

$ ./awx-get-job-extv.py -s 192.168.0.237 -id 5 --json-indent 2
Password:
{
  "MSG": [
    "HOGE",
    "FUGA",
    "TEST"
  ]
}
2
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
2