Ansible TowerまたはAWXのプロジェクト作成までの初期設定の流れを説明します。様々な運用形態に対応できるようGUI, CLI, APIの3通りの設定手順をまとめます。
組織の作成
「組織」の画面に遷移し、「+(追加)」ボタンを押下します。
必須入力項目は「名前」です。必要な情報を入力し「保存」を押下します。
この操作を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
「プロジェクト」の画面に遷移し、「+(追加)」ボタンを押下します。
ローカルのplaybookを使う場合はSCMを「手動」にします。必要な情報を入力し「保存」を押下します。
この操作を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と同じです。「プロジェクト」の画面に遷移し、「+(追加)」ボタンを押下します。
ローカルのplaybookを使う場合はSCMを「手動」にします。必要な情報を入力し「保存」を押下します。
この操作を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)にアクセスするための認証情報を定義します。
「認証情報」の画面に遷移し、「+(追加)」ボタンを押下します。
SCMに対する認証情報を定義する場合は、認証情報タイプを「ソースコントロール」にします。必要な情報を入力し「保存」を押下します。
この操作を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
プロジェクトの作成
「プロジェクト」の画面に遷移し、「+(追加)」ボタンを押下します。
リモートリポジトリとしてGitを使用する場合はSCMを「Git」にします。必要な情報を入力し「保存」を押下します。
設定後、プロジェクトのトップ画面に戻り、最新リビジョンのGitと同期しているかを確認します。プロジェクトの左側に緑色のボタンが表示されている事を確認します。
この操作を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"
}