Azure Dynamic Inventory with Ansible 小記
上次寫 Azure Dynamic Inventory 是 2018/2 的事情了 :)
在 Azure 的官方文件上說明, 如果 Ansible 版本 >= 2.8 , Dynamic Inventory 使用 plug-in 方式, 而不是使用之前的 azure_rm.py
- Starting with Ansible 2.8, Ansible provides an Azure dynamic-inventory plug-in
今天就是來實驗 azure_rm – Azure Resource Manager inventory plugin
OS: container with openSUSE Leap 15.1
Ansible: 2.9.7
先來看看 Ansible 官方上面的說明
以及剛剛看到的微軟官方說明文件
不過在這之前先寫個小插曲
就是剛好又遇到 client secret keys are expired, 所以先寫一下, 更換認證檔案的部分
參考之前的文章
認證的資訊是透過 az ad sp create-for-rbac 指令來建立的
但是現在舊的認證資訊過期了, 想要先找出來
Azure 認證檔案的內容, 如下
~/.azure/credentials
[default]
subscription_id=6a2bdf3b-XXXX-XXXX-XXXX-3371d3401feb
client_id=d06f8905-XXXX-XXXX-XXXX-3e0bcf22a853
secret=b7f0df5b-XXXX-XXXX-XXXX-8aaca284f706
tenant=4cd326d7-XXXX-XXXX-XXXX-df56dc9dabd4
如何找出舊的認證呢? 下面的指令可以列出所有的資訊
> az ad sp list --output table
但是我們要過濾出我們建立的
# az ad sp list --output table | grep azure-cli
True azure-cli-2018-02-14-06-03-46 d06f8905-ad21-425b-9da5-3e0bcf22a853 False azure-cli-2018-02-14-06-03-46 0c2d3a46-847a-4292-a9ad-8b72baf02fb7 ServicePrincipal Microsoft.DirectoryServices.ServicePrincipal Application 4cd336d7-b5ad-40a7-83cc-df57dc9dabd4 sakana http://azure-cli-2018-02-14-06-03-46
- 我的做法是過濾 azure-cli 關鍵字
- 從輸出的 azure-cli-201x-xx-xx-xx-xx-xx 就可以知道建立的時間
- 比對輸出的第三欄位 AppId 與 ~/.azure/credentials 內的 client_id 就可以知道是那一個了
刪除舊的認證
# az ad sp delete --id d06f8905-ad21-425b-9da5-3e0bcf22a853
Removing role assignments
- --id 後面接 AppId
接下來建立新的認證資訊
# az ad sp create-for-rbac --query '{"client_id": appId, "secret": password, "tenant": tenant}'
Retrying role assignment creation: 1/36
{
"client_id": "d06f8905-XXXX-XXXX-XXXX-3e0bcf22a853",
"secret": "b7f0df5b-XXXX-XXXX-XXXX-8aaca284f706",
"tenant": "4cd326d7-XXXX-XXXX-XXXX-df56dc9dabd4"
}
接下來還要有 subscription_id
使用 az account 指令取得
$ az account show --query "{ subscription_id: id }"
{
"subscription_id": "6a2bdf3b-XXXX-XXXX-XXXX-3371d3401feb"
}
修改 ~/.azure/credentials , 主要是修改 client_id 與 secret
#vi ~/.azure/credentials
[default]
subscription_id=6a2bdf3b-XXXX-XXXX-XXXX-3371d3401feb
client_id=新的_client_id
secret=新的_secret
tenant=4cd326d7-XXXX-XXXX-XXXX-df56dc9dabd4
解決完認證問題之後就可以來進行小測試
首先用微軟官方的測試方式
建立一個 myazure_rm.yml 檔案
內容如下:
# vi myazure_rm.yml
plugin: azure_rm
include_vm_resource_groups:
- sakanastudy
auth_source: auto
keyed_groups:
- prefix: tag
key: tags
- sakanastudy 請換成自己的 Resource Group 名稱
# ansible all -m ping -i ./myazure_rm.yml -u YOUR_USER --ask-pass
SSH password:
test01_b7be | SUCCESS => {
"ansible_facts": {
"discovered_interpreter_python": "/usr/bin/python3.6"
},
"changed": false,
"ping": "pong"
}
- 這邊可以觀察到 有抓到 resource group 內的機器 test01
- 我的測試機不是用 key, 是用 password 方式, 所以我指定 -u 使用者, 以及 --ask-pass 來輸入密碼, 如果要這樣的方式, 機器要裝 sshpass 套件, 所以下次要來更新容器版本 :)
如果要更進一步
建議叄考官方的文件內容
- 這邊覺得有可能會用到的是
- plain_host_names
- Keyed_groups
- 然後預設是針對所有的 resource group, 是因為使用 include_vm_resource_groups 才去指定特定的 resource group
這樣也算是又前進一步
~enjoy it
Reference:
沒有留言:
張貼留言