【发布时间】:2018-06-08 08:20:56
【问题描述】:
我正在尝试使用 Ansible (=> 2.5) 创建一个任务,该任务将配置如下网络接口:
- name: Set up network interfaces addr
interfaces_file:
dest: "/etc/network/interfaces.d/{{ item.device }}"
iface: "{{ item.device }}"
state: present
option: address
value: "{{ item.addr }}"
with_items:
- "{{ network }}"
when: item.addr is defined
notify: Restart interface
- name: Set up network interfaces netmask
interfaces_file:
dest: "/etc/network/interfaces.d/{{ item.device }}"
iface: "{{ item.device }}"
state: present
option: netmask
value: "{{ item.netmask }}"
with_items:
- "{{ network }}"
when: item.netmask is defined
notify: Restart interface
- name: Set up network interfaces dns
interfaces_file:
dest: "/etc/network/interfaces.d/{{ item.device }}"
iface: "{{ item.device }}"
state: present
option: dns-nameservers
value: "{{ item.dns }}"
with_items:
- "{{ network }}"
when: item.dns is defined
notify: Restart interface
- name: Set up network interfaces dns-search
interfaces_file:
dest: "/etc/network/interfaces.d/{{ item.device }}"
iface: "{{ item.device }}"
state: present
option: dns-search
value: "{{ item.dns_search }}"
with_items:
- "{{ network }}"
when: item.dns_search is defined
notify: Restart interface
这行得通。 但从我的角度来看,这不是那么干净.. 所以我正在尝试使用 2 个循环......这显然不起作用。
- name: Set up network interfaces
interfaces_file:
dest: "/etc/network/interfaces.d/{{ item.iDunnoWhatToPutHere }}"
iface: "{{ item.iDunnoWhatToPutHere }}"
state: present
option: {{ item.option }}
value: "{{ item.value }}"
with_together:
- "{{ network }}"
- { option: address, value: item.0.addr }
- { option: netmask, value: item.0.netmask }
- { option: dns-nameservers, value: item.0.dns }
when: item.dns_search is defined
notify: Restart interface
[...]
编辑:这很好,但很严格。我应该循环 vars 应该循环每个选项及其任何选项的值。因为我也有桥接选项,例如“vlan_raw_device、bridge_ports、bridge_stp ...”。所以它应该在一个选项和值的字典上盲目循环。
Edit2:使用可变网络
network:
- name: admin
device: admin
method: static
address: X.X.X.X/X
netmask: X.X.X.X
up:
net: X.X.X.X/X
gateway: X.X.X.X/X
down:
net: X.X.X.X/X
gateway: X.X.X.X/X
我为什么要尝试这一切?
- 因为如果必须更改,我需要更改所有值。
- 因为我想重启(ifup,ifdown)只有那个界面
- 因为我很惊讶我必须多次使用同一个模块。
你们能帮我看看如何使用它吗? 也许不可能?
谢谢大家!
【问题讨论】:
-
在带有 3 个任务的原始剧本中,您能提供
network变量的样子吗? -
当然,我编辑了问题。
标签: networking ansible