Хотя я использую ansible для создания некоторой инфраструктуры в Azure, я пытаюсь получить доступ к subscritpion_id
во время ANSIBLE. Я устанавливаю файл учетных данных, следуя
путеводитель по лазурной документации от 10000 *https://docs.ansible.com/ansible/2.6/scenario_guides/guide_azure.html
Когда я запускаю ansible playbook, я добавляю следующий аргумент -e ANSIBLE_PROFILE="new-env"
, который делает то, что ему нужно, и предоставляет надлежащие учетные данные для запуска для правильного выполнения модуля.
Но я пытаюсь использовать API-интерфейс REST Azure через модуль azure_rm_resource
и хочу отправить представление JSON в теле запроса, которое будет включать subscription_id
для форматирования идентификатора ресурса в Azure.
https://docs.ansible.com/ansible/2.6/modules/azure_rm_resource_module.html
Допустим, идентификатор VNet в Azure выглядит как "id": "/subscriptions/<subscription_id>/resourceGroups/myresourcegroup/providers/Microsoft.Network/virtualNetworks/my-vnet",
Я могу отформатировать имя виртуальной сети, но мне нужно получить информацию об идентификаторе подписки, который читается с помощью ansible из файла ~/.azure/credentials
во время запуска playbook.
Как мне получить доступ к этой информации? Есть ли специальная переменная? Я посмотрел на функцию lookup env
, а ее нет с переменной AZURE_SUBSCRIPTION_ID
.
В фактах я не пытался раскрыть факты, используя следующую команду AZURE_PROFILE="new-env" ansible localhost -m setup
Пример файла учетных данных
cat ~/.azure/credentials
[new-env]
subscription_id=****************************
client_id=****************************
secret=****************************
tenant=****************************
Спасибо
ОБНОВЛЕНИЕ # 1
В итоге я воспользовался поисковой функцией inible.
"{{ lookup('ini', 'subscription_id section={{ azure_profile }} file={{ ansible_env.HOME }}/.azure/credentials') }}"
Это возвращает точное значение, которое я искал, и я использую set_fact
, чтобы установить его во время моего отклика.