在Ansible中如何创建Azure VM并将NIC放在不同的资源组中

47次阅读
没有评论

问题描述

正在创建一个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}}"

这适用于任何在不同资源组中的资源,包括虚拟网络。

正文完