星期一, 5月 04, 2020

Azure Dynamic Inventory with Ansible 小記

Azure Dynamic Inventory with Ansible 小記

上次寫 Azure Dynamic Inventory 是 2018/2 的事情了 :)

在 Azure 的官方文件上說明, 如果 Ansible 版本 >= 2.8 , Dynamic Inventory 使用 plug-in 方式, 而不是使用之前的 azure_rm.py


今天就是來實驗 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 套件, 所以下次要來更新容器版本 :)

如果要更進一步
建議叄考官方的文件內容


這樣也算是又前進一步

~enjoy it



Reference:



沒有留言: