
我需要一些有關使用變數檔案配置多個 cloud_init_nic 的幫助。這是我的變數文件,例如:files/dict
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"
每個虛擬機器可以有最少 1 個網卡到 N 個網卡。
這是我的劇本(顯然不起作用),因為它會將第二個網卡作為不同的任務循環。
- 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
因為每個虛擬機器都有不同數量的 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