avinetworks.network_interface
网络接口
警告:使用此角色可能会很危险。如果您通过错误配置网络而失去与目标主机的网络连接,在没有物理访问机器的情况下,可能无法恢复。
此角色使用户能够在目标机器上配置各种网络组件。该角色可用于配置:
- 以太网接口
- 网桥接口
- Bonded 接口
- VLAN 标签接口
- 网络路由
要求
此角色需要 Ansible 1.4 或更高版本,平台要求在元数据文件中列出。
角色变量
可以传递给此角色的变量及其简要描述如下:
变量 | 必需 | 默认值 | 备注 |
---|---|---|---|
network_pkgs |
否 | [] |
通常需要的包,例如 selinux、bridge-utils、ifenslave 和 iproute |
network_ether_interfaces |
否 | [] |
要添加到系统的以太网接口列表。 |
network_bridge_interfaces |
否 | [] |
要添加到系统的网桥接口列表。 |
network_bond_interfaces |
否 | [] |
要添加到系统的 Bonded 接口列表。 |
network_vlan_interfaces |
否 | [] |
要添加到系统的 VLAN 接口列表。 |
network_check_packages |
否 | true |
安装在 network_pkgs 中列出的包。 |
network_allow_service_restart |
否 | true |
是否应重新配置和重启接口/网络。 |
network_modprobe_persist |
否 | true |
持久化模块加载。 |
network_configured_interfaces_only |
否 | false |
启用时,完全移除未通过此角色配置的接口。 |
network_interface_file_prefix |
否 | ifcfg- |
接口配置文件的前缀。 |
network_interface_file_postfix |
否 | `` | 接口配置文件的后缀。 |
注:列表的值在下面的示例中列出。
示例
Debian (而不是 RedHat) 的网络配置可以选择使用 CIDR 表示法来表示 IPv4 地址,而不是分别指定地址和子网掩码。在 Debian 上,IPv6 地址要求使用 CIDR 表示法。
使用 CIDR 表示法的 IPv4 示例:
cidr: 192.168.10.18/24
# 可选:为该网络指定一个网关,或使用 auto 自动分配网络+1
gateway: auto
使用经典 IPv4 的 IPv4 示例:
address: 192.168.10.18
netmask: 255.255.255.0
network: 192.168.10.0
broadcast: 192.168.10.255
gateway: 192.168.10.1
如果您想为接口使用不同的 MAC 地址,您可以简单地添加:
hwaddress: aa:bb:cc:dd:ee:ff
在某些情况下,您可能希望设置任意选项。因此,可以使用:
options:
- "up /execute/my/command"
- "down /execute/my/other/command"
以及 IPv6 版本:
ipv6_options:
- "up /execute/my/command"
- "down /execute/my/other/command"
- 在主机上配置 eth1 和 eth2,其中一个为静态 IP,另一个为 DHCP IP。同时定义静态路由和网关。
- hosts: myhost
roles:
- role: network
network_ether_interfaces:
- device: eth1
bootproto: static
cidr: 192.168.10.18/24
gateway: auto
route:
- network: 192.168.200.0
netmask: 255.255.255.0
gateway: 192.168.10.1
- network: 192.168.100.0
netmask: 255.255.255.0
gateway: 192.168.10.1
- device: eth2
bootproto: dhcp
注:添加路由不是必需的,默认路由会自动添加。
- 配置一个有多个 NICs 添加到网桥的网桥接口。
- hosts: myhost
roles:
- role: network
network_bridge_interfaces:
- device: br1
type: bridge
cidr: 192.168.10.10/24
bridge_ports: [eth1, eth2]
# 可选值
bridge_ageing: 300
bridge_bridgeprio: 32768
bridge_fd: 15
bridge_gcint: 4
bridge_hello: 2
bridge_maxage: 20
bridge_maxwait: 0
bridge_pathcost: "eth1 100"
bridge_portprio: "eth1 128"
bridge_stp: "on"
bridge_waitport: "5 eth1 eth2"
注:也可以按照与以太网接口相同的方式为该接口添加路由。
- 配置一个具有“主动-备份”从属配置的 Bond 接口。
- hosts: myhost
roles:
- role: network
network_bond_interfaces:
- device: bond0
address: 192.168.10.128
netmask: 255.255.255.0
bond_mode: active-backup
bond_slaves: [eth1, eth2]
# 可选值
bond_miimon: 100
bond_lacp_rate: slow
bond_xmit_hash_policy: layer3+4
- 配置一个 Bond 接口,使用 DHCP 获取 IP 地址,Bond 模式为“802.3ad”。
- hosts: myhost
roles:
- role: network
network_bond_interfaces:
- device: bond0
bootproto: dhcp
bond_mode: 802.3ad
bond_miimon: 100
bond_slaves: [eth1, eth2]
bond_ad_select: 2
- 配置一个具有 VLAN 标签 2 的以太网接口的 VLAN 接口。
- hosts: myhost
roles:
- role: network
network_ether_interfaces:
- device: eth1
bootproto: static
cidr: 192.168.10.18/24
gateway: auto
network_vlan_interfaces:
- device: eth1.2
bootproto: static
cidr: 192.168.20.18/24
- 上述所有示例都展示了如何配置单个主机,下面的示例展示了如何为所有机器定义网络配置。
假设您的主机库存如下:
/etc/ansible/hosts
[dc1]
host1
host2
在主机变量中描述每个主机的网络配置:
host_vars/host1
network_ether_interfaces:
- device: eth1
bootproto: static
address: 192.168.10.18
netmask: 255.255.255.0
gateway: 192.168.10.1
route:
- network: 192.168.200.0
netmask: 255.255.255.0
gateway: 192.168.10.1
network_bond_interfaces:
- device: bond0
bootproto: dhcp
bond_mode: 802.3ad
bond_miimon: 100
bond_slaves: [eth2, eth3]
host_vars/host2
network_ether_interfaces:
- device: eth0
bootproto: static
address: 192.168.10.18
netmask: 255.255.255.0
gateway: 192.168.10.1
- 如果需要使用 resolvconf 包,可以添加一些 DNS 配置:
dns-nameserver: [ "8.8.8.8", "8.8.4.4" ]
dns-search: "search.mydomain.tdl"
dns-domain: "mydomain.tdl"
- 您可以在以太网、Bond 或网桥接口上添加 IPv6 静态 IP 配置:
ipv6_address: "aaaa:bbbb:cccc:dddd:dead:beef::1/64"
ipv6_gateway: "aaaa:bbbb:cccc:dddd::1"
创建一个适用于所有主机的剧本,如下所示,运行剧本。所有服务器将配置它们的网络接口和更新路由。
- hosts: all
roles:
- role: network
- 此角色还可以选择性地将网络接口添加到 firewalld 区域。核心 firewalld 模块 (http://docs.ansible.com/ansible/latest/firewalld_module.html) 可以执行相同的功能,因此如果您同时使用这两个模块,则您的剧本可能不是幂等的。考虑这个情况,仅使用 firewalld 模块:
- network_interface 角色运行;如果没有设置
firewalld_zone
主机变量,则任何 ZONE 行将从 ifcfg-* 中删除。 firewalld
模块运行;向 ifcfg-* 中添加ZONE
行。- 在下一个剧本运行时,network_interface 角色再次运行并删除 ZONE 行,因此循环重复。
为了让此角色管理 firewalld 区域,系统必须运行基于 RHEL 的发行版,并使用 NetworkManager 来管理网络接口。如果满足这些条件,以下示例展示了如何将 eth0 接口添加到公共 firewalld 区域:
- device: eth0
bootproto: static
address: 192.168.10.18
netmask: 255.255.255.0
gateway: 192.168.10.1
firewalld_zone: public
注:Ansible 需要在整个剧本过程中保持网络连接,您可能需要有一个不使用此方法修改的控制接口,以便在更改 IP 地址时确保 Ansible 与目标系统的稳定连接。所有网络更改都在一个生成的脚本中完成,网络连接仅会丢失几秒钟。
依赖
python-netaddr
许可证
BSD
作者信息
该项目最初由 Benno Joy 创建。
Debian 升级由:
- Martin Verges (croit, GmbH)
- Eric Anderson (Avi Networks, Inc.)
RedHat 升级由:
- Eric Anderson (Avi Networks, Inc.)
- Luke Short (Red Hat, Inc.)
- Wei Tie, (Cisco Systems, Inc.)
完整的贡献者列表可以在 这里 找到。
This roles enables users to configure various network components on target machines.
ansible-galaxy install avinetworks.network_interface