Azure Vnet에서 Ansible 사실을 수집하고 플레이북에서 추가 사용을 위해 등록합니다.

Azure Vnet에서 Ansible 사실을 수집하고 플레이북에서 추가 사용을 위해 등록합니다.

내 요구 사항은 Azure에서 VNET ID를 수집하고 해당 ID를 역할 기반 액세스를 할당하는 범위로 사용하는 것입니다. 이를 위해 azure_rm_virtualnetwork_info 및 azure_rm_role할당을 사용하겠습니다.

azure_rm_virtualnetwork_info를 사용하고 해당 사실을 변수에 등록하려고 하면 데이터 유형 "dict"로 저장됩니다. 사실은 이렇습니다.

범위로 사용되는 VNET ID에 관심이 있습니다.

ok: [localhost] => changed=false
  invocation:
    module_args:
      ad_user: null
      adfs_authority_url: null
      api_profile: latest
      auth_source: null
      cert_validation_mode: null
      client_id: null
      cloud_environment: AzureCloud
      name: VNT-NAME
      password: null
      profile: NPE
      resource_group: ARG
      secret: null
      subscription_id: null
      tags: null
      tenant: null
  virtualnetworks:
  - address_prefixes:
    - 111.41.240.0/22
    dns_servers:
    - 11.4.0.36
    - 11.4.0.37
    - 174.31.43.92
    - 174.23.43.92
    id: /subscriptions/SUB-ID/resourceGroups/ARG/providers/Microsoft.Network/virtualNetworks/VNT-NAME
    location: australiaeast
    name: VNT-NAME
    provisioning_state: Succeeded
    subnets:
    - address_prefix: 10.4.240.0/24
      id: /subscriptions/SUB-ID/resourceGroups/ARG/providers/Microsoft.Network/virtualNetworks/VNT-NAME/subnets/SUB-001
      name: SUB-001
      network_security_group: null
      provisioning_state: Succeeded
      route_table: null
      service_endpoints:
      - locations:
        - '*'
        service: Microsoft.KeyVault
      - locations:
        - australiaeast
        - australiasoutheast
        service: Microsoft.Storage
    - address_prefix: 10.4.241.0/25
      id: /subscriptions/SUB-ID/resourceGroups/ARG/providers/Microsoft.Network/virtualNetworks/VNT-NAME/subnets/SUB-001
      name: BGL-NPE-SND-SYD-SUB-APG-INT-Cluster01
      network_security_group: /subscriptions/SUB-ID/resourceGroups/ARG/providers/Microsoft.Network/virtualNetworks/VNT-NAME/subnets/SUB-001
      provisioning_state: Succeeded
      route_table: null
    tags:
      Environment: General-Non-Production
      Owner: BGL IT

이것이 내 코드의 모습입니다

  - name: Get facts for one virtual network
    azure_rm_virtualnetwork_info:
      resource_group: "{{ npe_vnet_resource_group }}"
      name: "{{ snd_syd_vnet }}"
      profile: "{{ profilename }}"
    register: snd_mel_vnet_reg

  - debug:
        var: snd_mel_vnet_reg.virtualnetworks.id

하지만 아래와 같이 오류가 발생합니다.

TASK [debug] *****************************************************************************************************************************************************************************************************************************
task path: /home/devans/AZ-vnet-role-assignment.yml:39
ok: [localhost] =>
  snd_mel_vnet_reg.virtualnetworks.id: 'VARIABLE IS NOT DEFINED!: ''list object'' has no attribute ''id'''

도움을 주시면 감사하겠습니다.

답변1

나는 똑같은 문제가 있습니다. 나는 새로운 사실을 만들고 json_query.

상황에 따라 다음을 추가해야 합니다.

- set_fact: 
    myvnetid: "{{ snd_mel_vnet_reg| json_query('virtualnetworks[0].id') }}"

디버깅을 사용하여 출력이 올바른지 확인합니다.

- debug: var=myvnetid 

관련 정보