network: | network: | ||||
resolv: | resolv: | ||||
dns: | dns: | ||||
- 8.8.4.4 | |||||
- 8.8.8.8 | |||||
- 8.8.4.4 | |||||
- 8.8.8.8 | |||||
domain: my.example.com | domain: my.example.com | ||||
search: | search: | ||||
- my.example.com | |||||
- example.com | |||||
- my.example.com | |||||
- example.com | |||||
options: | options: | ||||
- ndots:5 | |||||
- timeout:2 | |||||
- attempts:2 | |||||
- ndots: 5 | |||||
- timeout: 2 | |||||
- attempts: 2 | |||||
DPDK OVS interfaces | |||||
-------------------- | |||||
**DPDK OVS NIC** | |||||
.. code-block:: yaml | |||||
linux: | |||||
network: | |||||
bridge: openvswitch | |||||
dpdk: | |||||
enabled: true | |||||
driver: uio/vfio-pci | |||||
openvswitch: | |||||
pmd_cpu_mask: "0x6" | |||||
dpdk_socket_mem: "1024,1024" | |||||
dpdk_lcore_mask: "0x400" | |||||
memory_channels: 2 | |||||
interface: | |||||
dpkd0: | |||||
name: ${_param:dpdk_nic} | |||||
pci: 0000:06:00.0 | |||||
driver: igb_uio/vfio | |||||
enabled: true | |||||
type: dpdk_ovs_port | |||||
n_rxq: 2 | |||||
bridge: br-prv | |||||
br-prv: | |||||
enabled: true | |||||
type: dpdk_ovs_bridge | |||||
**DPDK OVS Bond** | |||||
Linux storage pillars | |||||
--------------------- | |||||
.. code-block:: yaml | |||||
linux: | |||||
network: | |||||
bridge: openvswitch | |||||
dpdk: | |||||
enabled: true | |||||
driver: uio/vfio-pci | |||||
openvswitch: | |||||
pmd_cpu_mask: "0x6" | |||||
dpdk_socket_mem: "1024,1024" | |||||
dpdk_lcore_mask: "0x400" | |||||
memory_channels: 2 | |||||
interface: | |||||
dpdk_second_nic: | |||||
name: ${_param:primary_second_nic} | |||||
pci: 0000:06:00.0 | |||||
driver: igb_uio/vfio | |||||
bond: dpdkbond0 | |||||
enabled: true | |||||
type: dpdk_ovs_port | |||||
n_rxq: 2 | |||||
dpdk_first_nic: | |||||
name: ${_param:primary_first_nic} | |||||
pci: 0000:05:00.0 | |||||
driver: igb_uio/vfio | |||||
bond: dpdkbond0 | |||||
enabled: true | |||||
type: dpdk_ovs_port | |||||
n_rxq: 2 | |||||
dpdkbond0: | |||||
enabled: true | |||||
bridge: br-prv | |||||
type: dpdk_ovs_bond | |||||
mode: active-backup | |||||
br-prv: | |||||
enabled: true | |||||
type: dpdk_ovs_bridge | |||||
Linux storage | |||||
------------- | |||||
Linux with mounted Samba | Linux with mounted Samba | ||||
- file_system: cifs | - file_system: cifs | ||||
- options: guest,uid=myuser,iocharset=utf8,file_mode=0777,dir_mode=0777,noperm | - options: guest,uid=myuser,iocharset=utf8,file_mode=0777,dir_mode=0777,noperm | ||||
Linux with file swap | |||||
File swap configuration | |||||
.. code-block:: yaml | .. code-block:: yaml | ||||
device: /swapfile | device: /swapfile | ||||
size: 1024 | size: 1024 | ||||
Linux with partition swap | |||||
Partition swap configuration | |||||
.. code-block:: yaml | .. code-block:: yaml | ||||
{%- from "linux/map.jinja" import network with context %} | |||||
{%- for interface_name, interface in network.interface.iteritems() %} | |||||
{%- if 'dpdk' in interface.type and interface.pci is defined %} | |||||
pci {{ interface.pci }} {{ interface.driver }} | |||||
{%- endif %} | |||||
{%- endfor %} |
'repo': {}, | 'repo': {}, | ||||
'package': {}, | 'package': {}, | ||||
'autoupdates': { | 'autoupdates': { | ||||
'pkgs': [] | |||||
'pkgs': [] | |||||
}, | }, | ||||
'selinux': 'permissive', | 'selinux': 'permissive', | ||||
'ca_certs_dir': '/usr/local/share/ca-certificates', | 'ca_certs_dir': '/usr/local/share/ca-certificates', | ||||
'hostname_file': '/etc/hostname', | 'hostname_file': '/etc/hostname', | ||||
'bridge_pkgs': ['bridge-utils'], | 'bridge_pkgs': ['bridge-utils'], | ||||
'ovs_pkgs': ['openvswitch-switch', 'bridge-utils'], | 'ovs_pkgs': ['openvswitch-switch', 'bridge-utils'], | ||||
'dpdk_pkgs': ['dpdk', 'dpdk-dev', 'dpdk-dkms', 'dpdk-igb-uio-dkms', 'dpdk-rte-kni-dkms'], | |||||
'network_manager': False, | 'network_manager': False, | ||||
'interface': {}, | 'interface': {}, | ||||
'interface_params': interface_params, | 'interface_params': interface_params, |
{%- from "linux/map.jinja" import network with context %} | |||||
{%- from "linux/map.jinja" import system with context %} | |||||
{%- if network.dpdk.enabled %} | |||||
linux_dpdk_pkgs: | |||||
pkg.installed: | |||||
- pkgs: {{ network.dpdk_pkgs }} | |||||
linux_dpdk_kernel_module: | |||||
kmod.present: | |||||
- name: {{ network.dpdk.driver }} | |||||
- require: | |||||
- pkg: linux_dpdk_pkgs | |||||
- require_in: | |||||
- service: linux_network_dpdk_service | |||||
/etc/dpdk/interfaces: | |||||
file.managed: | |||||
- source: salt://linux/files/dpdk_interfaces | |||||
- template: jinja | |||||
- user: root | |||||
- group: root | |||||
- mode: 644 | |||||
- require: | |||||
- pkg: linux_dpdk_pkgs | |||||
linux_network_dpdk_service: | |||||
service.running: | |||||
- enable: true | |||||
- name: dpdk | |||||
- watch: | |||||
- file: /etc/dpdk/interfaces | |||||
{%- if network.openvswitch is defined %} | |||||
openvswitch_dpdk_pkgs: | |||||
pkg.installed: | |||||
- pkgs: | |||||
- openvswitch-switch-dpdk | |||||
- openvswitch-switch | |||||
- bridge-utils | |||||
linux_network_dpdk_ovs_service: | |||||
cmd.run: | |||||
- name: "ovs-vsctl --no-wait set Open_vSwitch . other_config:dpdk-init=true" | |||||
- require: | |||||
- service: linux_network_dpdk_service | |||||
- unless: 'ovs-vsctl get Open_vSwitch . other_config | grep "dpdk-init=\"true\""' | |||||
{%- set ovs_options = [ | |||||
"pmd-cpu-mask=\""+network.openvswitch.pmd_cpu_mask+"\"", | |||||
"dpdk-socket-mem=\""+network.openvswitch.dpdk_socket_mem+"\"", | |||||
"dpdk-lcore-mask=\""+network.openvswitch.dpdk_lcore_mask+"\"", | |||||
"dpdk-extra=\"-n "+network.openvswitch.memory_channels+" --vhost-owner libvirt-qemu:kvm --vhost-perm 0664\"" | |||||
] | |||||
%} | |||||
{%- for option in ovs_options %} | |||||
linux_network_dpdk_ovs_option_{{ option }}: | |||||
cmd.run: | |||||
- name: 'ovs-vsctl set Open_vSwitch . other_config:{{ option }}' | |||||
- watch_in: | |||||
- service: service_openvswitch | |||||
- require: | |||||
- cmd: linux_network_dpdk_ovs_service | |||||
- unless: | | |||||
ovs-vsctl get Open_vSwitch . other_config | grep '{{ option }}' | |||||
{%- endfor %} | |||||
service_openvswitch: | |||||
service.running: | |||||
- name: openvswitch-switch | |||||
- enable: true | |||||
- watch: | |||||
- cmd: linux_network_dpdk_ovs_service | |||||
{%- endif %} | |||||
{%- for interface_name, interface in network.interface.iteritems() if interface.get('enabled', True) %} | |||||
{%- if interface.type == "dpdk_ovs_bond" %} | |||||
{%- set bond_interfaces = {} %} | |||||
{%- for iface_name, iface in network.interface.iteritems() if iface.get('enabled', True) and iface.get('bond',"") == interface_name %} | |||||
{#- Get list of child interfaces #} | |||||
{%- do bond_interfaces.update({iface_name: iface}) %} | |||||
{%- endfor %} | |||||
linux_network_dpdk_bond_interface_{{ interface_name }}: | |||||
cmd.run: | |||||
- name: "ovs-vsctl add-bond {{ interface.bridge }} {{ interface_name }} {{ bond_interfaces.keys()|join(' ') }} {% for iface_name, iface in bond_interfaces.iteritems() %}-- set Interface {{ iface_name }} type=dpdk options:dpdk-devargs={{ iface.pci }} {% endfor %}" | |||||
- unless: "ovs-vsctl show | grep {{ interface_name }}" | |||||
- require: | |||||
- cmd: linux_network_dpdk_bridge_interface_{{ interface.bridge }} | |||||
linux_network_dpdk_bond_mode_{{ interface_name }}: | |||||
cmd.run: | |||||
- name: "ovs-vsctl set port {{ interface_name }} bond_mode={{ interface.mode }}" | |||||
- unless: "ovs-appctl bond/show {{ interface_name }} | grep {{ interface.mode }}" | |||||
- require: | |||||
- cmd: linux_network_dpdk_bond_interface_{{ interface_name }} | |||||
{%- elif interface.type == 'dpdk_ovs_bridge' %} | |||||
linux_network_dpdk_bridge_interface_{{ interface_name }}: | |||||
cmd.run: | |||||
- name: "ovs-vsctl add-br {{ interface_name }} -- set bridge {{ interface_name }} datapath_type=netdev" | |||||
- unless: "ovs-vsctl show | grep {{ interface_name }}" | |||||
{%- elif interface.type == 'dpdk_ovs_port' and interface.bridge is defined %} | |||||
linux_network_dpdk_bridge_port_interface_{{ interface_name }}: | |||||
cmd.run: | |||||
- name: "ovs-vsctl add-port {{ interface.bridge }} dpdk0 -- set Interface dpdk0 type=dpdk options:dpdk-devargs={{ interface.pci }}" | |||||
- unless: "ovs-vsctl show | grep dpdk0" | |||||
- require: | |||||
- cmd: linux_network_dpdk_bridge_interface_{{ interface.bridge }} | |||||
{# Multiqueue n_rxq setup on interfaces #} | |||||
{%- elif interface.type == 'dpdk_ovs_port' and interface.n_rxq is defined %} | |||||
linux_network_dpdk_bridge_port_interface_n_rxq_{{ interface_name }}: | |||||
cmd.run: | |||||
- name: "ovs-vsctl set Interface {{ interface_name }} options:n_rxq={{ interface.n_rxq }} " | |||||
- unless: | | |||||
ovs-vsctl get Interface {{ interface_name }} options | grep 'n_rxq="{{ interface.n_rxq }}"' | |||||
{%- endif %} | |||||
{%- endfor %} | |||||
{%- endif %} |
{%- if network.resolv is defined %} | {%- if network.resolv is defined %} | ||||
- linux.network.resolv | - linux.network.resolv | ||||
{%- endif %} | {%- endif %} | ||||
{%- if network.dpdk is defined %} | |||||
- linux.network.dpdk | |||||
{%- endif %} | |||||
{%- if network.interface|length > 0 %} | {%- if network.interface|length > 0 %} | ||||
- linux.network.interface | - linux.network.interface | ||||
{%- endif %} | {%- endif %} |
{%- set interface_name = interface.get('name', interface_name) %} | {%- set interface_name = interface.get('name', interface_name) %} | ||||
{%- if interface.get('managed', True) %} | |||||
{# it is not used for any interface with type preffix dpdk,eg. dpdk_ovs_port #} | |||||
{%- if interface.get('managed', True) and not 'dpdk' in interface.type %} | |||||
{%- if grains.os_family in ['RedHat', 'Debian'] %} | {%- if grains.os_family in ['RedHat', 'Debian'] %} | ||||
linux_resolvconf_disable: | linux_resolvconf_disable: | ||||
cmd.run: | cmd.run: | ||||
- name: resolvconf --disable-updates | |||||
- onlyif: resolvconf --updates-are-enabled | |||||
- name: resolvconf --disable-updates | |||||
- onlyif: resolvconf --updates-are-enabled | |||||
{%- endif %} | {%- endif %} |
- device: Hugetlbfs-kvm | - device: Hugetlbfs-kvm | ||||
- fstype: hugetlbfs | - fstype: hugetlbfs | ||||
- mkmnt: true | - mkmnt: true | ||||
- opts: mode=777,pagesize={{ hugepages.size }} | |||||
- opts: mode=775,gid=kvm,pagesize={{ hugepages.size }} | |||||
{%- endif %} | {%- endif %} | ||||
linux: | |||||
system: | |||||
enabled: true | |||||
domain: local | |||||
network: | |||||
enabled: true | |||||
hostname: test01 | |||||
fqdn: test01.local | |||||
network_manager: false | |||||
bridge: openvswitch | |||||
dpdk: | |||||
enabled: true | |||||
driver: uio | |||||
openvswitch: | |||||
pmd_cpu_mask: "0x6" | |||||
dpdk_socket_mem: "1024" | |||||
dpdk_lcore_mask: "0x400" | |||||
memory_channels: "2" | |||||
interface: | |||||
dpdk0: | |||||
name: enp5s0f1 | |||||
pci: "0000:05:00.1" | |||||
driver: igb_uio | |||||
bond: dpdkbond0 | |||||
enabled: true | |||||
type: dpdk_ovs_port | |||||
dpdk1: | |||||
name: enp5s0f2 | |||||
pci: "0000:05:00.2" | |||||
driver: igb_uio | |||||
bond: dpdkbond0 | |||||
enabled: true | |||||
type: dpdk_ovs_port | |||||
dpdkbond0: | |||||
enabled: true | |||||
bridge: br-prv | |||||
type: dpdk_ovs_bond | |||||
mode: active-backup | |||||
br-prv: | |||||
enabled: true | |||||
type: dpdk_ovs_bridge |