IDCFクラウドは価格がお手頃なので個人的によく使っているのですが、Ansibleを使うときにIPをinventoryファイルに直書きするのが不便なのでシェルスクリプトでDynamic Inventoryを簡易的に実装してみました。
実装したスクリプト
idcf.sh
#!/bin/bash -e
groups="$(idcfcloud compute listVirtualMachines | jq -r '.data.virtualmachine[].group' | uniq)"
for group in $groups ; do
ips=$(idcfcloud compute listVirtualMachines | jq -r ".data.virtualmachine[] | select(.group == \"$group\") | .nic[0].ipaddress")
jo_params=$jo_params\ $group=$(jo hosts="$(jo -a $ips)")
done
jo -p $jo_params
実行に必要なツール
実行するにはidcfcloudとjqとjoコマンドがインストールされている必要があります。
スクリプト実行結果例
仮想マシンに設定したグループ名毎にIPのリストが出力されるようにしました。
$ ./idcf.sh
{
"group1": {
"hosts": [
"10.13.0.250",
"10.13.0.199"
]
},
"group2": {
"hosts": [
"10.13.0.149"
]
}
}
配置例
Inventoryとして指定してあげればAnsibleが実行してくれます。
├── ansible.cfg
├── playbook.yml
├── group_vars
│ ├── all.yml
│ ├── group1.yml
│ └── group2.yml
├── hosts
│ ├── base
│ └── idcf.sh