Ansible Tower(AWX)の初期操作(3/3) ジョブテンプレートの作成まで – GUI, CLI, API3通りの操作を紹介

スポンサーリンク

Ansible TowerまたはAWXのジョブテンプレート作成までの初期設定の流れを説明します。「Ansible Towerの初期操作(1/3) プロジェクトの作成まで」「Ansible Towerの初期操作(2/3) インベントリの作成まで」に基づいてプロジェクトの作成が終わっている事が前提条件です。様々な運用形態に対応できるようGUI, CLI, APIの3通りの設定手順をまとめます。

認証情報の設定

ジョブテンプレートで操作対象機器へログインする時の認証情報を定義します。

「認証情報」の画面に遷移し、「+(追加)」ボタンを押下します。

Ansible Tower マシンの認証情報作成01

機器に対する認証情報を設定する場合は「認証情報タイプ」を「マシン」にします。必要な情報を入力し「保存」を押下します。

Ansible Tower マシンの認証情報作成01

この操作をGUIを使わず、CLIで操作する場合は以下の通りです。

CLI操作
awx credentials create \
  --name "CentOS Credential" \
  --description "CentOS認証情報" \
  --organization "スピードワゴン財団" \
  --credential_type "Machine" \
  --input '{"username": "root","password":"P@ssw0rd"}'

APIで操作する場合は以下の通りです。

API操作
ORGANIZATION_ID=$(curl -u admin:P@ssw0rd \
  http://localhost/api/v2/organizations/ | \
  jq  '.results[] | select(.name == "スピードワゴン財団")' | jq ".id")
 
CREDENTIAL_TYPE_ID=$(curl -u admin:P@ssw0rd \
  http://localhost/api/v2/credential_types/ | \
  jq  '.results[] | select(.name == "Machine")' | jq ".id")

curl -XPOST -u admin:P@ssw0rd \
  --header "Content-Type: application/json" \
  -d @- http://localhost/api/v2/credentials/ << EOF
{
  "name": "CentOS Credential",
  "description": "CentOS認証情報",
  "organization": ${ORGANIZATION_ID},
  "credential_type": ${CREDENTIAL_TYPE_ID},
  "input": {
    "username":"root",
    "password":"P@ssw0rd"
  }
}
EOF

ジョブテンプレートの作成

「テンプレート」の画面に遷移し、「+(追加)」ボタンを押下します。

Ansible Tower ジョブテンプレートの作成01

必要な情報を入力し「保存」を押下します。同様の操作を繰り返し、動作確認のためにホストを2つ以上作成しておきましょう。

Ansible Tower ジョブテンプレートの作成02

この操作をGUIを使わず、CLIまたはAPIで操作する場合は以下の通りです。

まずジョブテンプレートを作成します。「インベントリ」などは名前ではなくidで指定します。

CLI操作
awx job_templates create \
  --name "Ping CentOS" \
  --description "Ping CentOS" \
  --job_type "run" \
  --inventory "逸般の誤家庭" \
  --organization "スピードワゴン財団" \
  --project "ストーンオーシャン" \
  --playbook "ping_centos.yaml"
API操作
ORGANIZATION_ID=$(curl -u admin:P@ssw0rd \
  http://localhost/api/v2/organizations/ | \
  jq  '.results[] | select(.name == "スピードワゴン財団")' | jq ".id")
INVENTORY_ID=$(curl -u admin:P@ssw0rd \
  http://localhost/api/v2/inventories/ | \
  jq  '.results[] | select(.name == "逸般の誤家庭")' | jq ".id")
PROJECT_ID=$(curl -u admin:P@ssw0rd \
  http://localhost/api/v2/projects/ | \
  jq  '.results[] | select(.name == "ストーンオーシャン")' | jq ".id")

curl -XPOST -u admin:P@ssw0rd \
  --header "Content-Type: application/json" \
  -d @- http://localhost/api/v2/job_templates/ << EOF
{
  "name": "Ping CentOS",
  "description": "Ping CentOS",
  "job_type": "run",
  "inventory": ${INVENTORY_ID},
  "organization": ${ORGANIZATION_ID},
  "project": ${PROJECT_ID},
  "playbook": "ping_centos.yaml"
}
EOF

ジョブテンプレートと認証情報を紐づけます。CLIを使用する場合は、「–credential」の後に認証情報を指定し、一番最後の引数にジョブテンプレートを指定します。

CLI操作
awx job_templates associate --credential "CentOS Credential" "Ping CentOS"

APIを使用する場合は、URLに「ジョブテンプレート」のidを指定し、HTTP REQUEST BODYに「認証情報」のidを指定します。

API操作
JOB_TEMPLATE_ID=$(curl -u admin:P@ssw0rd \
  http://localhost/api/v2/job_templates/ | \
  jq  '.results[] | select(.name == "Ping CentOS")' | jq ".id")
CREDENTIAL_ID=$(curl -u admin:P@ssw0rd \
  http://localhost/api/v2/credentials/ | \
  jq  '.results[] | select(.name == "CentOS Credential")' | jq ".id")

curl -XPOST -u admin:P@ssw0rd \
  --header "Content-Type: application/json" \
  -d @- http://localhost/api/v2/job_templates/${JOB_TEMPLATE_ID}/credentials/ << EOF
{
  "id": ${CREDENTIAL_ID}
}
EOF

ジョブテンプレートと認証情報の紐づけを解除する操作は以下の通りです。

CLI操作
awx job_templates disassociate --credential "CentOS Credential" "Ping CentOS"
API操作
curl -XPOST -u admin:P@ssw0rd \
  --header "Content-Type: application/json" \
  -d @- http://localhost/api/v2/job_templates/${JOB_TEMPLATE_ID}/credentials/ << EOF
{
  "id": ${CREDENTIAL_ID},
  "disassociate" : ${CREDENTIAL_ID}
}
EOF

ジョブテンプレートの実行

ジョブテンプレートの一覧画面にて、ロケットのようなアイコンを押下するとジョブを実行できます。

Ansible Tower ジョブの実行01

しばらく待つとジョブの実行結果が表示されます。

Ansible Tower ジョブの実行02

この操作をGUIを使わず、CLIまたはAPIで操作する場合は以下の通りです。実行が開始されると、ジョブに対するidが採番されるので、これをメモに控えます。

CLI操作
# JOB_TEMPLATE_ID=$(awx job_templates list -f jq --filter '.results[] | select(.name == "Ping CentOS")' | jq ".id")
# awx job_templates launch ${JOB_TEMPLATE_ID}
{
     "job": 10,
     "ignored_fields": {},
     "id": 10,
     "type": "job",
     "url": "/api/v2/jobs/10/",
     "summary_fields": {
          "organization": {
               "id": 5,
               "name": "\u30b9\u30d4\u30fc\u30c9\u30ef\u30b4\u30f3\u8ca1\u56e3",
               "description": "Speedwagon Foundation"

  <omitted>
API操作
# JOB_TEMPLATE_ID=$(curl -u admin:P@ssw0rd \
    http://localhost/api/v2/job_templates/ | \
    jq  '.results[] | select(.name == "Ping CentOS")' | jq ".id")
# curl -XPOST -u admin:P@ssw0rd \
    http://localhost/api/v2/job_templates/${JOB_TEMPLATE_ID}/launch/ | jq
{
  "job": 13,
  "ignored_fields": {},
  "id": 13,
  "type": "job",
  "url": "/api/v2/jobs/13/",

  <omitted>

ジョブidを指定すると、ジョブの実行結果を閲覧する事ができます。

CLI操作
# awx jobs stdout 10
SSH password:

PLAY [centos] ******************************************************************

TASK [ping] ********************************************************************
ok: [centos81]
ok: [centos80]

PLAY RECAP *********************************************************************
centos80                   : ok=1    changed=0    unreachable=0    failed=0    skipped=0    rescued=0    ignored=0
centos81                   : ok=1    changed=0    unreachable=0    failed=0    skipped=0    rescued=0    ignored=0
API操作
# curl -u admin:P@ssw0rd  http://localhost/api/v2/jobs/12/stdout/?format=txt
SSH password:

PLAY [centos] ******************************************************************

TASK [ping] ********************************************************************
ok: [centos81]
ok: [centos80]

PLAY RECAP *********************************************************************
centos80                   : ok=1    changed=0    unreachable=0    failed=0    skipped=0    rescued=0    ignored=0
centos81                   : ok=1    changed=0    unreachable=0    failed=0    skipped=0    rescued=0    ignored=0

ジョブ実行結果のAPIはデフォルトではHTML出力となるため、ターミナル上では非常に見づらい出力となります。出力形式はクエリパラメタformatで適宜変更できますので、以下の中から見やすいパラメタを選択ください。

表示形式 指定
Browsable API ?format=api
HTML ?format=html
Plain Text ?format=txt
Plain Text with ANSI color codes ?format=ansi
JSON structure ?format=json
Downloaded Plain Text ?format=txt_download
Downloaded Plain Text with ANSI color codes ?format=ansi_download
タイトルとURLをコピーしました