Ansible Tower(AWX)の初期操作(1/3) プロジェクトの作成まで – GUI, CLI, API3通りの操作を紹介

スポンサーリンク

Ansible TowerまたはAWXのプロジェクト作成までの初期設定の流れを説明します。様々な運用形態に対応できるようGUI, CLI, APIの3通りの設定手順をまとめます。

組織の作成

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

Ansible Tower 組織の追加01

必須入力項目は「名前」です。必要な情報を入力し「保存」を押下します。

Ansible Tower 組織の追加02

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

CLI操作
awx organization create --name "スピードワゴン財団" --description "Speedwagon Foundation"
API操作
curl -XPOST -u admin:P@ssw0rd \
  --header "Content-Type: application/json" \
  -d @- http://localhost/api/v2/organizations/ << EOF
{
  "name": "スピードワゴン財団",
  "description": "Speedwagon Foundation"
}
EOF

プロジェクトの作成

ローカルファイルを使用する場合

商用運用や集団開発では不適切ですが、個人レベルで「とりあえず動かしてみたい」場合はAnsible Tower内に保存されたPlaybookを実行する事もできます。この動けば良いレベルの設定はAnsible TowerとAWXの場合で、若干の勝手が異なります。まずは簡単に動くAnsible Towerの場合を説明します。

Ansible Towerを使用する場合

ローカルのplaybookを使う場合は、予め/var/lib/awx/projects配下にplaybookを格納します。

mkdir /var/lib/awx/projects/stone_ocean
cat << EOF > /var/lib/awx/projects/stone_ocean/ping_centos.yaml 
---
- hosts: centos
  gather_facts: no

  tasks:
    - ping:
EOF
chown awx:awx -R /var/lib/awx/projects/stone_ocean

「プロジェクト」の画面に遷移し、「+(追加)」ボタンを押下します。

Ansible Tower 手動リポジトリのプロジェクト01

ローカルのplaybookを使う場合はSCMを「手動」にします。必要な情報を入力し「保存」を押下します。

Ansible Tower 手動リポジトリのプロジェクト02

この操作をGUIを使わず、CLIで操作する場合は以下の通りです。CSMを「手動」にするには、scm_typeに空文字列を指定します。

CLI操作
awx projects create \
  --name "ストーンオーシャン" \
  --description "Stone Ocean" \
  --organization 'スピードワゴン財団' \
  --scm_type "" \
  --local_path "stone_ocean"

APIの場合は「組織」は名前ではなくidで指定する必要があります。

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/projects/ << EOF
{
  "name":"ストーンオーシャン",
  "description":"Stone Ocean",
  "organization":${ORGANIZATION_ID},
  "scm_type":"",
  "local_path":"stone_ocean"
}
EOF

AWXを使用する場合の注意点

ローカルのplaybookを使う場合は、予め/var/lib/awx/projects配下にplaybookを格納します。このディレクトリはホストOS側ではなく、コンテナ内部のディレクトリを指している事に注意が必要です。

/bin/bashでawx_webのコンテナ内部に入ります。

docker exec -i -t awx_web /bin/bash

コンテナ内でAnsible Towerと同様にplaybookを作成します。Ansible Towerと異なり、AWXではコンテナ内のrootユーザで実行されるためowner変更操作は不要です。

mkdir -p /var/lib/awx/projects/stone_ocean
cat << EOF > /var/lib/awx/projects/stone_ocean/ping_centos.yaml 
---
- hosts: centos
  gather_facts: no

  tasks:
    - ping:
EOF

以降の操作はAnsible Towerと同じです。「プロジェクト」の画面に遷移し、「+(追加)」ボタンを押下します。

Ansible Tower 手動リポジトリのプロジェクト01

ローカルのplaybookを使う場合はSCMを「手動」にします。必要な情報を入力し「保存」を押下します。

Ansible Tower 手動リポジトリのプロジェクト02

この操作をGUIを使わず、CLIで操作する場合は以下の通りです。CSMを「手動」にするには、scm_typeに空文字列を指定します。

CLI操作
awx projects create \
  --name "ストーンオーシャン" \
  --description "Stone Ocean" \
  --organization "スピードワゴン財団" \
  --scm_type "" \
  --local_path "stone_ocean"

APIの場合は「組織」は名前ではなくidで指定する必要があります。

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/projects/ << EOF
{
  "name":"ストーンオーシャン",
  "description":"Stone Ocean",
  "organization":${ORGANIZATION_ID},
  "scm_type":"",
  "local_path":"stone_ocean"
}
EOF

リモートリポジトリを使用する場合

認証情報

Git, SVNなどのSCM(Source Control Management)にアクセスするための認証情報を定義します。

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

Ansible Tower SCM向け認証情報01

SCMに対する認証情報を定義する場合は、認証情報タイプを「ソースコントロール」にします。必要な情報を入力し「保存」を押下します。

Ansible Tower SCM向け認証情報02

この操作をGUIを使わず、CLIまたはAPIで操作する場合は以下の通りです。inputsに認証情報をYAML形式またはJSON形式で与えます。

CLI操作
awx credentials create \
  --name "SCM Credential" \
  --description "SCM Credential" \
  --organization 'スピードワゴン財団' \
  --credential_type 'Source Control' \
  --inputs '{"username": "root","ssh_key_data":"-----BEGIN OPENSSH PRIVATE KEY-----
b3BlbnNzaC1rZXktdjEAAAAABG5vbmUAAAAEbm9uZQAAAAAAAAABAAABlwAAAAdzc2gtcn
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

 <omitted>

XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
LHeQxsUBl7Jwe9egKemOUoF5Sgx4bu1OqS3R1plwnxoDgr/w4+K6YXICjNJdMQxjBhwssY
CQGsEc9E9pSxMAAAAZcm9vdEBhbnNpYmxlODAuZ29rYXRlaS5nbwEC
-----END OPENSSH PRIVATE KEY-----",}'

CLIを使う場合は、秘密鍵は標準入力ではなくファイルパスで指定する事もできます。ファイルパスで秘密鍵を指定する例は以下の通りです。

CLI操作
awx credentials create \
  --name "SCM Credential" \
  --description "SCM Credential" \
  --organization 'スピードワゴン財団' \
  --credential_type 'Source Control' \
  --inputs '{"username": "root","ssh_key_data":"@~/.ssh/id_rsa",}'

APIで操作する場合は以下の通りです。inputsに認証情報をYAML形式またはJSON形式で与えます。

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 == "Source Control")' | jq ".id")

curl -XPOST -u admin:P@ssw0rd \
  --header "Content-Type: application/json" \
  -d @- http://localhost/api/v2/credentials/ << EOF
{
  "name":"SCM Credential",
  "description":"SCM Credential",
  "organization":${ORGANIZATION_ID},
  "credential_type":${CREDENTIAL_TYPE_ID},
  "inputs": {
        "username": "root",
        "ssh_key_data": "$(cat ~/.ssh/id_rsa)"
      }
}
EOF

ベアリポジトリの作成

動作確認のためGitのベアリポジトリを作成します。

mkdir /tmp/stone_ocean.git
cd /tmp/stone_ocean.git
git init --bare --shared

ベアリポジトリに動作確認用のplaybookをpushします。

mkdir /tmp/stone_ocean
cd /tmp/stone_ocean
git init
cat << EOF > /tmp/stone_ocean/ping_centos.yaml 
---
- hosts: centos
  gather_facts: no

  tasks:
    - ping:
EOF
git add .
git commit -m 'init'
git remote add origin ssh://root@localhost:/tmp/stone_ocean.git
git push origin master

プロジェクトの作成

「プロジェクト」の画面に遷移し、「+(追加)」ボタンを押下します。

Ansible Tower GIt連動のプロジェクト作成01

リモートリポジトリとしてGitを使用する場合はSCMを「Git」にします。必要な情報を入力し「保存」を押下します。

Ansible Tower GIt連動のプロジェクト作成02

設定後、プロジェクトのトップ画面に戻り、最新リビジョンのGitと同期しているかを確認します。プロジェクトの左側に緑色のボタンが表示されている事を確認します。

Ansible Tower GIt連動のプロジェクト作成03

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

CLI操作
awx projects create \
  --name "ストーンオーシャン" \
  --description "Stone Ocean" \
  --organization "スピードワゴン財団" \
  --scm_type "git" \
  --scm_url "ssh://root@192.168.9.80:/tmp/stone_ocean.git" \
  --scm_branch "master" \
  --credential "SCM Credential"
API操作
ORGANIZATION_ID=$(curl -u admin:P@ssw0rd \
  http://localhost/api/v2/organizations/ | \
  jq  '.results[] | select(.name == "スピードワゴン財団")' | jq ".id")

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

curl -XPOST -u admin:P@ssw0rd \
  --header "Content-Type: application/json" \
  -d @- http://localhost/api/v2/projects/ << EOF
{
  "name":"ストーンオーシャン",
  "description":"Stone Ocean",
  "organization":${ORGANIZATION_ID},
  "scm_type":"git",
  "scm_url":"ssh://root@192.168.9.80:/tmp/stone_ocean.git",
  "scm_branch":"master",
  "credential":${CREDENTIAL_ID}
}
EOF

設定後、最新リビジョンのGitと同期しているかを確認します。ステータスがsuccessfulになっている事を確認します。

CLI操作
# awx projects list

 <omitted>


               "created": "2020-08-15T16:42:44.909230Z",
               "modified": "2020-08-15T16:44:37.287583Z",
               "name": "\u30b9\u30c8\u30fc\u30f3\u30aa\u30fc\u30b7\u30e3\u30f3",
               "description": "Stone Ocean",
               "local_path": "_12__",
               "scm_type": "git",
               "scm_url": "ssh://root@192.168.9.80:/tmp/stone_ocean.git",
               "scm_branch": "",
               "scm_refspec": "",
               "scm_clean": false,
               "scm_delete_on_update": false,
               "credential": 5,
               "timeout": 0,
               "scm_revision": "8ef5126ea7d947900b06835c21bb8d10dcc6bafc",
               "last_job_run": "2020-08-15T16:45:06.511189Z",
               "last_job_failed": false,
               "next_job_run": null,
               "status": "successful",
               "organization": 2,
               "scm_update_on_launch": false,
               "scm_update_cache_timeout": 0,
               "allow_override": false,
               "custom_virtualenv": null,
               "last_update_failed": false,
               "last_updated": "2020-08-15T16:45:06.511189Z"

 <omitted>

API操作
# curl -u admin:P@ssw0rd \
    http://localhost/api/v2/projects/ | \
    jq  '.results[] | {id,name,status} | select(.name == "ストーンオーシャン")'
{
  "id": 14,
  "name": "ストーンオーシャン",
  "status": "successful"
}
タイトルとURLをコピーしました