Ansible Tower(AWX)の初期操作(2/3) インベントリの作成まで – GUI, CLI, API3通りの操作を紹介

スポンサーリンク

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

インベントリ作成

まずはインベントリ名を定義します。以降、インベントリに紐づいたホストやグループを定義する事になります。誤解を恐れない言い方をすれば、「インベントリ」はホストやグループの入れ物です。

「インベントリ」の画面に遷移し、「+(追加)」ボタンを押下します。インベントリは「インベントリー」「スマートインベントリー」の2種類から選ぶ事ができますが、ここでは「インベントリー」の設定方法を紹介します。

Ansible Tower インベントリ作成01

必要な情報を入力し「保存」を押下します。

Ansible Tower インベントリ作成02

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

CLI操作
awx inventory create \
  --name "逸般の誤家庭" \
  --description "ありふれた家庭環境" \
  --organization "スピードワゴン財団"
API操作
ORGANIZATION_ID=$(curl -u admin:P@ssw0rd \
  http://localhost/api/v2/organizations/ | \
  jq  '.results[] | select(.name == "スピードワゴン財団")' | jq ".id")

curl -XPOST -u admin:P@ssw0rd \
  --header "Content-Type: application/json" \
  -d @- http://localhost/api/v2/inventories/ << EOF
{
  "name": "逸般の誤家庭",
  "description": "ありふれた家庭環境",
  "organization": ${ORGANIZATION_ID}
}
EOF

ホストの作成

インベントリー配下にグループを作成します。インベントリーを選択済となっている画面で、さらに「グループ」の画面へ遷移し、「+(追加)」ボタンを押下します。

Ansible Tower ホスト作成01

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

Ansible Tower ホスト作成02

この操作をGUIを使わず、CLIで操作する場合は以下の通りです。YAML形式またはJSON形式で与える変数内で改行を使いたい時は「\」を指定します。

CLI操作
awx hosts create \
  --name "centos81" \
  --description "centos81" \
  --inventory "逸般の誤家庭" \
  --variables "---\nansible_host : '192.168.9.81'"

APIで操作する場合は以下の通りです。「インベントリ」は名前ではなくidで指定します。

API操作
INVENTORY_ID=$(curl -u admin:P@ssw0rd \
  http://localhost/api/v2/inventories/ | \
  jq  '.results[] | select(.name == "逸般の誤家庭")' | jq ".id")

curl -XPOST -u admin:P@ssw0rd \
  --header "Content-Type: application/json" \
  -d @- http://localhost/api/v2/hosts/ << EOF
{
  "name": "centos81",
  "description": "centos81",
  "inventory": ${INVENTORY_ID},
  "variables": "---\nansible_host : '192.168.9.81'"
}
EOF

グループの作成

インベントリー配下にグループを作成します。インベントリーを選択済となっている画面で、さらに「グループ」の画面へ遷移し、「+(追加)」ボタンを押下します。

Ansible Tower グループ作成01

必要な情報を入力し「保存」を押下します。もし、グループ単位で設定するのが望ましい変数があれば、この画面で変数を設定しましょう。この動作確認シナリオではグループ単位で設定すべき変数はないため、入力を省略しています。

なお、機器への接続情報はグループ単位ではなく認証情報としても設定できるため、ここでは入力を省略しています。

Ansible Tower グループ作成02

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

CLI操作
awx groups create \
  --name "centos" \
  --description "centos" \
  --inventory "逸般の誤家庭"

APIで操作する場合は以下の通りです。「インベントリ」は名前ではなくidで指定します。

API操作
INVENTORY_ID=$(curl -u admin:P@ssw0rd \
  http://localhost/api/v2/inventories/ | \
  jq  '.results[] | select(.name == "逸般の誤家庭")' | jq ".id")

curl -XPOST -u admin:P@ssw0rd \
  --header "Content-Type: application/json" \
  -d @- http://localhost/api/v2/groups/ << EOF
{
  "name": "centos",
  "description": "centos",
  "inventory": ${INVENTORY_ID}
}
EOF

グループとホストの紐づけ

グループの作成が完了すると、グループとホストの紐づけ設定が可能になります。グループの設定画面で今までグレーアウトされていた「ホスト」のボタンが選択可能になります。「ホスト」を押下します。

Ansible Tower ホストとグループの紐づけ01

「+(追加)」ボタンを押下します。

Ansible Tower ホストとグループの紐づけ02

追加したいホストにチェックを入れ、「保存」を押下します。

Ansible Tower ホストとグループの紐づけ03

この操作をGUIを使わず、APIで操作する場合は以下の通りです。URLに「グループ」のidを指定し、HTTP REQUEST BODYに「ホスト」のidを指定します(awxkit 14.0.0時点ではCLIでホストとグループを紐づける操作は見当たりません)。

API操作
GROUP_ID=$(curl -u admin:P@ssw0rd \
  http://localhost/api/v2/groups/ | \
  jq  '.results[] | {id,name} | select(.name == "centos")' | jq ".id")

HOST_ID_1=$(curl -u admin:P@ssw0rd \
  http://localhost/api/v2/hosts/ | \
  jq  '.results[] | {id,name} | select(.name == "centos81")' | jq ".id")

HOST_ID_2=$(curl -u admin:P@ssw0rd \
  http://localhost/api/v2/hosts/ | \
  jq  '.results[] | {id,name} | select(.name == "centos82")' | jq ".id")

curl -XPOST -u admin:P@ssw0rd \
  --header "Content-Type: application/json" \
  -d @- http://localhost/api/v2/groups/${GROUP_ID}/hosts/ << EOF
{
  "id": ${HOST_ID_1}
}
EOF
curl -XPOST -u admin:P@ssw0rd \
  --header "Content-Type: application/json" \
  -d @- http://localhost/api/v2/groups/${GROUP_ID}/hosts/ << EOF
{
  "id": ${HOST_ID_2}
}
EOF

もし、ホストとグループの紐づけを解除したい場合は、idとdisassociateにホストIDを指定します。

API操作
curl -XPOST -u admin:P@ssw0rd \
  --header "Content-Type: application/json" \
  -d @- http://localhost/api/v2/groups/${GROUP_ID}/hosts/ << EOF
{
  "id": ${HOST_ID_1},
  "disassociate": ${HOST_ID_1}
}
EOF
タイトルとURLをコピーしました