问题描述
正在创建一个Ansible playbook,目标是确保Azure VM所需的网络资源存在,并创建一个连接到这些资源的Azure VM。由于组织结构的原因,所有的网络资源(如NIC、NSG、子网和公共IP)都放在Azure的一个名为“Networks”的资源组中,并由一个独立的团队管理。此外,要求在一个单独的资源组中创建Azure VM和所有非网络资源(称为“AZRVMRG”资源组)。在创建VM的playbook中,用户遇到了一个问题:如何在创建Azure VM时引用“Networks”资源组中的NIC。
解决方案
请注意以下操作注意版本差异及修改前做好备份。
根据Ansible官方文档,可以使用资源ID来引用其他资源组中的资源,例如虚拟网络或NIC。这样可以像RM模板一样指定任何资源。
要引用网络团队在另一个资源组中创建的NIC,可以使用类似以下的资源ID,其中networking_rg_name
变量设置为该资源组的名称:
- set_fact:
nic_id: "/subscriptions/{{ subscription_id }}/resourceGroups/{{ networking_rg_name }}/providers/Microsoft.Network/networkInterfaces/{{ nic_name }}"
- name: "Create VM {{vm_type}} - {{name}}"
azure_rm_virtualmachine:
resource_group: "{{rg_name}}"
name: "{{name}}"
vm_size: "{{size}}"
admin_username: "{{user}}"
admin_password: "{{pass}}"
os_type: "{{os_type}}"
network_interfaces: "{{nic_id}}" # 使用nic_id而不是name
image: "{{image}}"
tags: "{{tags}}"
这适用于任何在不同资源组中的资源,包括虚拟网络。
正文完