ansible의 변수를 사용하여 cloud_init_nics에 대한 다중 인터페이스를 구성하는 방법

ansible의 변수를 사용하여 cloud_init_nics에 대한 다중 인터페이스를 구성하는 방법

변수 파일을 사용하여 여러 cloud_init_nics를 구성하는 데 도움이 필요합니다. 예를 들어 내 변수 파일은 다음과 같습니다.

vm:
  all:
    - name: rhel7
      hostname: rhel7
      dns: "8.8.8.8 8.8.4.4"
      nic:
        - nic_name: eth0
          ip: "10.10.10.10"
          netmask: "255.255.255.0"
          gateway: "10.10.10.1"
          bootproto: "static"
          onboot: "true"
        - nic_name: "eth1"
          ip: "10.10.10.11"
          netmask: "255.255.255.0"
          bootproto: "static"
          onboot: "true"

    - name: rhel8
      hostname: rhel8
      dns: "8.8.8.8 8.8.4.4"
      nic:
        - ip: "10.10.10.12"
          netmask: "255.255.255.0"
          gateway: "10.10.10.1"
          nic_name: "ens7"
          bootproto: "static"
          onboot: "true"

각 VM은 최소 1개의 nic에서 N개의 nic 카드를 가질 수 있습니다.

여기에 내 플레이북이 있습니다(분명히 작동하지 않았습니다). 두 번째 nic을 다른 작업으로 반복하기 때문입니다.

- name: include vards
  include_vars: files/dict

- name: readvar
  ovirt_vm:
    cloud_init_nics:
    - nic_name: "{{item.nic|json_query('[*].nic_name') }}"
      nic_boot_protocol: "{{item.nic|json_query('[*].ip') }}"
    cloud_init_persist: no
    wait: false
  with_items: "{{vm.all}}"

문서에 따르면 동일한 작업에 여러 개의 "- nic_name"이 필요한 것 같습니다.

  cloud_init_nics:
    - nic_name: eth0
      nic_boot_protocol: dhcp
    - nic_name: eth1
      nic_boot_protocol: static
      nic_ip_address: 10.34.60.86
      nic_netmask: 255.255.252.0

각 vm에는 nic 수가 다르기 때문에 문서의 예제를 사용할 수 없습니다.

그래서 내 질문은 다음과 같습니다. cloud_init_nics를 여러 번 반복하지만 여전히 1개의 작업으로 실행하려면 어떻게 해야 합니까? 그게 가능합니까? 그렇지 않다면 내가 존경해야 할 어떤 생각이라도 있는 걸까?

item.all.nic을 변수로 등록한 다음 cloud_init_nics: {{ var }} 을 등록할 수 있습니까? 감사해요

답변1

번역하다필수 항목을 유지하기 위한 목록속성그리고모듈의 목록

- name: readvar
  ovirt_vm:
    cloud_init_nics: "{{ item.nic }}"
    cloud_init_persist: no
    wait: false
  loop: "{{ vm.all }}"

올바른 데이터를 직접 생성할 수 있습니다. 예를 들어

    - set_fact:
        vm2: "{{ vm2|default([]) + [item|combine({'nic': nic|from_yaml})] }}"
      loop: "{{ vm.all }}"
      vars:
        nic: |
          {% for i in item.nic %}
            - nic_boot_protocol: {{ i.bootproto|default(omit) }}
              nic_boot_protocol_v6: {{ i.nic_boot_protocol_v6|default(omit) }}
              nic_gateway: {{ i.gateway|default(omit) }}
              nic_gateway_v6: {{ i.nic_gateway_v6|default(omit) }}
              nic_ip_address: {{ i.ip|default(omit) }}
              nic_ip_address_v6: {{ i.nic_ip_address_v6|default(omit) }}
              nic_name: {{ i.nic_name|default(omit) }}
              nic_netmask: {{ i.netmask|default(omit) }}
              nic_netmask_v6: {{ i.nic_netmask_v6|default(omit) }}
          {% endfor %}
    - debug:
        var: vm2

준다

vm2:
  - dns: 8.8.8.8 8.8.4.4
    hostname: rhel7
    name: rhel7
    nic:
    - nic_boot_protocol: static
      nic_gateway: 10.10.10.1
      nic_ip_address: 10.10.10.10
      nic_name: eth0
      nic_netmask: 255.255.255.0
    - nic_boot_protocol: static
      nic_ip_address: 10.10.10.11
      nic_name: eth1
      nic_netmask: 255.255.255.0
  - dns: 8.8.8.8 8.8.4.4
    hostname: rhel8
    name: rhel8
    nic:
    - nic_boot_protocol: static
      nic_gateway: 10.10.10.1
      nic_ip_address: 10.10.10.12
      nic_name: ens7
      nic_netmask: 255.255.255.0

관련 정보