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"
  1. 在主机上配置 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

注:添加路由不是必需的,默认路由会自动添加。

  1. 配置一个有多个 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"

注:也可以按照与以太网接口相同的方式为该接口添加路由。

  1. 配置一个具有“主动-备份”从属配置的 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
  1. 配置一个 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
  1. 配置一个具有 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
  1. 上述所有示例都展示了如何配置单个主机,下面的示例展示了如何为所有机器定义网络配置。

假设您的主机库存如下:

/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
  1. 如果需要使用 resolvconf 包,可以添加一些 DNS 配置:
dns-nameserver: [ "8.8.8.8", "8.8.4.4" ]
dns-search: "search.mydomain.tdl"
dns-domain: "mydomain.tdl"
  1. 您可以在以太网、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
  1. 此角色还可以选择性地将网络接口添加到 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
许可证
Unknown
下载
7.3k
拥有者