File manager - Edit - /opt/saltstack/salt/lib/python3.10/site-packages/salt/states/__pycache__/network.cpython-310.pyc
Back
o ;j�_ � @ s\ d Z ddlZddlZddlZddlZddlZe�e�Z dd� Z ddd�Zdd � Zd d� Z dS ) a#) Configuration of network interfaces =================================== The network module is used to create and manage network settings, interfaces can be set as either managed or ignored. By default all interfaces are ignored unless specified. .. note:: RedHat-based systems (RHEL, CentOS, Scientific, etc.) have been supported since version 2014.1.0. Debian-based systems (Debian, Ubuntu, etc.) have been supported since version 2017.7.0. The following options are not supported: ipaddr_start, and ipaddr_end. Other platforms are not yet supported. .. note:: On Debian-based systems, networking configuration can be specified in `/etc/network/interfaces` or via included files such as (by default) `/etc/network/interfaces.d/*`. This can be problematic for configuration management. It is recommended to use either `file.managed` *or* `network.managed`. If using ``network.managed``, it can be useful to ensure ``interfaces.d/`` is empty. This can be done using the following state .. code-block:: yaml /etc/network/interfaces.d: file.directory: - clean: True Configuring Global Network Settings ----------------------------------- Use the :py:func:`network.system <salt.states.network.system>` state to set global network settings: .. code-block:: yaml system: network.system: - enabled: True - hostname: server1.example.com - gateway: 192.168.0.1 - gatewaydev: eth0 - nozeroconf: True - nisdomain: example.com - require_reboot: True - apply_hostname: True .. note:: The use of ``apply_hostname`` above will apply changes to the hostname immediately. .. versionchanged:: 2015.5.0 ``apply_hostname`` added retain_settings *************** .. versionadded:: 2016.11.0 Use `retain_settings` to retain current network settings that are not otherwise specified in the state. Particularly useful if only setting the hostname. Default behavior is to delete unspecified network settings. .. code-block:: yaml system: network.system: - hostname: server2.example.com - apply_hostname: True - retain_settings: True Configuring Network Routes -------------------------- Use the :py:func:`network.routes <salt.states.network.routes>` state to set network routes. .. code-block:: yaml routes: network.routes: - name: eth0 - routes: - name: secure_network ipaddr: 10.2.0.0 netmask: 255.255.255.0 gateway: 10.1.0.3 - name: HQ_network ipaddr: 10.100.0.0 netmask: 255.255.0.0 gateway: 10.1.0.10 Managing Network Interfaces --------------------------- The :py:func:`network.managed <salt.states.network.managed>` state is used to configure network interfaces. Here are several examples: Ethernet Interface ****************** .. code-block:: yaml eth0: network.managed: - enabled: True - type: eth - proto: static - ipaddr: 10.1.0.7 - netmask: 255.255.255.0 - gateway: 10.1.0.1 - enable_ipv6: true - ipv6proto: static - ipv6addrs: - 2001:db8:dead:beef::3/64 - 2001:db8:dead:beef::7/64 - ipv6gateway: 2001:db8:dead:beef::1 - ipv6netmask: 64 - dns: - 8.8.8.8 - 8.8.4.4 - channels: rx: 4 tx: 4 other: 4 combined: 4 Ranged Interfaces (RHEL/CentOS Only) ************************************ .. versionadded:: 2015.8.0 Ranged interfaces can be created by including the word ``range`` in the interface name. .. important:: The interface type must be ``eth``. .. code-block:: yaml eth0-range0: network.managed: - type: eth - ipaddr_start: 192.168.1.1 - ipaddr_end: 192.168.1.10 - clonenum_start: 10 - mtu: 9000 bond0-range0: network.managed: - type: eth - ipaddr_start: 192.168.1.1 - ipaddr_end: 192.168.1.10 - clonenum_start: 10 - mtu: 9000 eth1.0-range0: network.managed: - type: eth - ipaddr_start: 192.168.1.1 - ipaddr_end: 192.168.1.10 - clonenum_start: 10 - vlan: True - mtu: 9000 bond0.1-range0: network.managed: - type: eth - ipaddr_start: 192.168.1.1 - ipaddr_end: 192.168.1.10 - clonenum_start: 10 - vlan: True - mtu: 9000 Bond Interfaces *************** To configure a bond, you must do the following: - Configure the bond slaves with a ``type`` of ``slave``, and a ``master`` option set to the name of the bond interface. - Configure the bond interface with a ``type`` of ``bond``, and a ``slaves`` option defining the bond slaves for the bond interface. .. code-block:: yaml eth2: network.managed: - enabled: True - type: slave - master: bond0 eth3: network.managed: - enabled: True - type: slave - master: bond0 bond0: network.managed: - type: bond - ipaddr: 10.1.0.1 - netmask: 255.255.255.0 - mode: gre - proto: static - dns: - 8.8.8.8 - 8.8.4.4 - enabled: False - slaves: eth2 eth3 - require: - network: eth2 - network: eth3 - miimon: 100 - arp_interval: 250 - downdelay: 200 - lacp_rate: fast - max_bonds: 1 - updelay: 0 - use_carrier: on - hashing-algorithm: layer2 - mtu: 9000 - autoneg: on - speed: 1000 - duplex: full - rx: on - tx: off - sg: on - tso: off - ufo: off - gso: off - gro: off - lro: off VLANs ***** Set ``type`` to ``vlan`` to configure a VLANs. These VLANs are configured on the bond interface defined above. .. code-block:: yaml bond0.2: network.managed: - type: vlan - ipaddr: 10.1.0.2 - use: - network: bond0 - require: - network: bond0 bond0.3: network.managed: - type: vlan - ipaddr: 10.1.0.3 - use: - network: bond0 - require: - network: bond0 bond0.10: network.managed: - type: vlan - ipaddr: 10.1.0.4 - use: - network: bond0 - require: - network: bond0 bond0.12: network.managed: - type: vlan - ipaddr: 10.1.0.5 - use: - network: bond0 - require: - network: bond0 Bridge Interfaces ***************** .. code-block:: yaml eth4: network.managed: - enabled: True - type: eth - proto: dhcp - bridge: br0 br0: network.managed: - enabled: True - type: bridge - proto: dhcp - bridge: br0 - delay: 0 - ports: eth4 - bypassfirewall: True - use: - network: eth4 - require: - network: eth4 .. note:: When managing bridged interfaces on a Debian/Ubuntu based system, the ``ports`` argument is required. RedHat-based systems will ignore the argument. Network Teaming (RHEL/CentOS 7 and later) ***************************************** .. versionadded:: 3002 - Configure the members of the team interface with a ``type`` of ``teamport``, and a ``team_master`` option set to the name of the bond interface. - ``master`` also works, but will be ignored if both ``team_master`` and ``master`` are present. - If applicable, include a ``team_port_config`` option. This should be formatted as a dictionary. Keep in mind that due to a quirk of PyYAML, dictionaries nested under a list item must be double-indented (see example below for interface ``eth5``). - Configure the team interface with a ``type`` of ``team``. The team configuration should be passed via the ``team_config`` option. As with ``team_port_config``, the dictionary should be double-indented. .. code-block:: yaml eth5: network.managed: - type: teamport - team_master: team0 - team_port_config: prio: 100 eth6: network.managed: - type: teamport - team_master: team0 team0: network.managed: - type: team - ipaddr: 172.24.90.42 - netmask: 255.255.255.128 - enable_ipv6: True - ipv6addr: 'fee1:dead:beef:af43::' - team_config: runner: hwaddr_policy: by_active name: activebackup link_watch: name: ethtool .. note:: While ``teamd`` must be installed to manage a team interface, it is not required to configure a separate :py:func:`pkg.installed <salt.states.pkg.installed>` state for it, as it will be silently installed if needed. Configuring the Loopback Interface ********************************** Use :py:func:`network.managed <salt.states.network.managed>` with a ``type`` of ``eth`` and a ``proto`` of ``loopback``. .. code-block:: yaml lo: network.managed: - name: lo - type: eth - proto: loopback - onboot: yes - userctl: no - ipv6_autoconf: no - enable_ipv6: true Other Useful Options -------------------- noifupdown ********** The ``noifupdown`` option, if set to ``True``, will keep Salt from restart the interface if changes are made, requiring them to be restarted manually. Here are a couple examples: .. code-block:: yaml eth7: network.managed: - enabled: True - type: eth # Automatic IP/DNS - proto: dhcp - noifupdown: True eth8: network.managed: - type: eth - noifupdown: True # IPv4 - proto: static - ipaddr: 192.168.4.9 - netmask: 255.255.255.0 - gateway: 192.168.4.1 - enable_ipv6: True # IPv6 - ipv6proto: static - ipv6addr: 2001:db8:dead:c0::3 - ipv6netmask: 64 - ipv6gateway: 2001:db8:dead:c0::1 # override shared; makes those options v4-only - ipv6ttl: 15 # Shared - mtu: 1480 - ttl: 18 - dns: - 8.8.8.8 - 8.8.4.4 � Nc C s t jj�� rdS dtv rdS dS )zf Confine this module to non-Windows systems with the required execution module available. )Fz!Only supported on non-Windows OSs�ip.get_interfaceT)Fzip module could not be loaded)�salt�utils�platformZ is_windows�__salt__� r r �G/opt/saltstack/salt/lib/python3.10/site-packages/salt/states/network.py�__virtual__� s r Tc K s� | i dd| � d�d�}d|vrt �dd�|d<