Ansible azure module 測試小記
OS: openSUSE Leap 42.3 in Azure
參考
微軟的文件上面是列出 SLES 12, 然後安裝比較多的套件, 但是他列出的套件本來就有相依性, 例如 python-pip 與 python-setuptools , 所以我就先按照 Ansible 官方的 方式, 我先安裝 pip 來處理
安裝 pip ( 先使用 sudo su - 切換成管理者 root )
# zypper install python-pip
預設的 pip 是 7.1.2 所以如果沒有升級, 後續安裝會失敗, 先來升級 pip
# pip install --upgrade pip
觀察 pip 版本
# pip --version
pip 9.0.1 from /usr/lib/python2.7/site-packages (python 2.7)
安裝相關套件
# pip install ansible[azure]
確認相關資訊
# ansible --version
ansible 2.4.2.0
config file = None
configured module search path = [u'/root/.ansible/plugins/modules', u'/usr/share/ansible/plugins/modules']
ansible python module location = /usr/lib/python2.7/site-packages/ansible
executable location = /usr/bin/ansible
python version = 2.7.13 (default, Jan 03 2017, 17:41:54) [GCC]
# pip list --format=columns azure | grep azure
azure-cli-core 2.0.24
azure-cli-nspkg 3.0.1
azure-common 1.1.8
azure-mgmt-batch 4.1.0
azure-mgmt-compute 2.1.0
azure-mgmt-containerservice 1.0.0
azure-mgmt-dns 1.2.0
azure-mgmt-keyvault 0.40.0
azure-mgmt-network 1.7.1
azure-mgmt-nspkg 2.0.0
azure-mgmt-resource 1.2.2
azure-mgmt-sql 0.7.1
azure-mgmt-storage 1.5.0
azure-mgmt-web 0.32.0
azure-nspkg 2.0.0
azure-storage 0.35.1
msrestazure 0.4.20
接下來要來處理 Azure 驗證的問題
Ansible 官方的方式我覺得步驟太多, 所以先採用 Azure-Cli 方式
Azure-Cli 可以使用兩種方式
- Azure Cloud-shell
- Azure-Cli
- 這個之後再來嘗試
目前先以 Cloud-shell 方式來進行
於 Azure portal 上面點選 >_ 按鈕
就會被提示安裝 Cloud-shell , 我是選 bash 方式
他會需要一個儲存體來使用, 選取訂用帳戶之後就會建立 Cloud-shell
測試一下 az 指令來列出目前的 VM ( 覺得加上--output table 這個方式很方便 )
==== 以下操作是在 cloud-shell 的終端機 ====
$ az vm list --output table
Name ResourceGroup Location
------------------------- --------------- ----------
kong-0-11-1-test-20171118 SAKANATEST eastus
test20180113 SAKANATEST eastus
接下來回到微軟官方說的
az ad sp create-for-rbac --query [client_id: appId, secret: password, tenant: tenant]
- az - Azure 工具指令
- ad : Synchronize on-premises directories and manage Azure Active Directory resources
- sp : Manage Azure Active Directory service principals for automation authentication
- create-for-rbac : Create a service principal and configure its access to Azure resources.
如果直接在 cloud-shell 執行會出現錯誤
$ az ad sp create-for-rbac --query [client_id: appId, secret: password, tenant: tenant]
az ad sp create-for-rbac: error: argument --query: invalid query value: '[client_id:'
嘗試方式 1:
這樣的方式可行
$ az ad sp create-for-rbac --query '[appId, password, tenant]'
Retrying role assignment creation: 1/36
Retrying role assignment creation: 2/36
[
"d69d8f91-XXXX-XXXX-XXXX-b90b15d8107d",
"65f16417-XXXX-XXXX-XXXX-296e19bebf4c",
"4cd326d7-XXXX-XXXX-XXXX-df56dc9dabd4"
]
所以用這樣的想法來推論, 應該是微軟官方文件上面的格式錯誤
上 Azure Taiwan Users Group 上面詢問, 與保哥討論後的方式
$ 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"
}
- 果然兇手是符號 應該配合大括號, 以及單引號與雙引號
如何知道有建立完成呢?
可以使用 az ad sp list 指令檢查, 會有 azure-cli-日期方式的 AppId
$ az ad sp list --output table
AppId DisplayName ObjectId ObjectType
------------------------------------ ---------------------------------------- ------------------------------------ ----------------
7b427a33-XXX-XXXX-XXXX-XXXXa7d8a60c azure-cli-2018-01-13-04-22-35 f29caeda-XXXX-XXXX-XXXX-97dc15849728 ServicePrincipal
如果要刪除也是使用 az ad sp 指令來處理, 例如
$ az ad sp delete --id 80027916-XXXX-XXXX-XXXX-778cddb9e155
建立的時候, password 的值請好好保存 ( 不然就刪除掉再建立一個 :p )
因為以 az ad sp show 方式是查不到 password 的喔
$ az ad sp show --id 647f8726-XXXX-XXXX-XXXX-5f2e03e8f2c8
接下來還要有 subscription_id
使用 az account 指令取得
$ az account show --query "{ subscription_id: id }"
{
"subscription_id": "6a2bdf3b-XXXX-XXXX-XXXX-3371d3401feb"
}
- 這邊微軟官方文件上面的符號就是正確的 QQ
==== 以上操作是在 cloud-shell 的終端機, 操作結束 ====
接下來會到 openSUSE Leap 42.3 in Azure 這邊
建立 存放認証的目錄
# mkdir ~/.azure
使用剛剛的資料建立認証的檔案
# vi ~/.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
建立好了就可以開始測試了
首先就從最簡單的管理 IP 開始吧 :)
Module name: azure_rm_publicipaddress
目標要從 sakanatest 這個資源群組, 建立一個 mypublic_ip 的固定 IP
先以單一指令的方式來實施吧
# ansible localhost -m azure_rm_publicipaddress -a 'resource_group=sakanatest name=mypublic_ip allocation_method=Static'
[WARNING]: Unable to parse /etc/ansible/hosts as an inventory source
[WARNING]: No inventory was parsed, only implicit localhost is available
[WARNING]: Could not match supplied host pattern, ignoring: all
[WARNING]: provided hosts list is empty, only localhost is available
localhost | SUCCESS => {
"changed": true,
"state": {
"dns_settings": {},
"etag": "W/\"ff593fe3-XXXX-XXXX-XXXX-a3eb90006d47\"",
"idle_timeout_in_minutes": 4,
"ip_address": "213.192.72.82",
"location": "eastus",
"name": "mypublic_ip",
"provisioning_state": "Succeeded",
"public_ip_allocation_method": "Static",
"tags": null,
"type": "Microsoft.Network/publicIPAddresses"
}
}
可以到 Azure Portal 上面確認 :)
接下來測試移除這個 IP
# ansible localhost -m azure_rm_publicipaddress -a 'resource_group=sakanatest name=mypublic_ip state=absent'
[WARNING]: Unable to parse /etc/ansible/hosts as an inventory source
[WARNING]: No inventory was parsed, only implicit localhost is available
[WARNING]: Could not match supplied host pattern, ignoring: all
[WARNING]: provided hosts list is empty, only localhost is available
localhost | SUCCESS => {
"changed": true,
"state": {
"status": "Deleted"
}
}
總算是跨出 Ansible azure module 第一步 :)
Reference
~ enjoy it
沒有留言:
張貼留言