openstack-ansible-nspawn_hosts/templates/nspawn-macvlan-systemd-init.j2

41 lines
1.8 KiB
Django/Jinja

# {{ ansible_managed }}
[Unit]
Description=nspawn macvlan service
After=syslog.target
After=network.target
[Service]
Type=oneshot
User=root
RemainAfterExit=yes
{% set seen_start_interfaces = [] %}
{% for key, value in (container_networks | combine(nspawn_networks)).items() %}
{% set interface = value.bridge.split('br-')[-1] %}
{% set mv_interface = 'mv-' + interface %}
{% if value.bridge not in seen_start_interfaces %}
{% if value.private_device | default(false) | bool %}
ExecStart=-/sbin/ip link add dev "{{ value.bridge }}" type dummy
ExecStart=-/sbin/ip link set dev "{{ value.bridge }}" up
{% endif %}
{% set interface_from_ansible = 'ansible_' + value.bridge | replace('-', '_') %}
{% set interface_data = hostvars[inventory_hostname][interface_from_ansible] | default({'type': none}) %}
{% if interface_data['type'] == 'bridge' %}
ExecStart=-/sbin/ip link add dev "veth-{{ interface }}1" type veth peer name "veth-{{ interface }}2"
ExecStart=-/sbin/ip link set dev "veth-{{ interface }}1" up
ExecStart=-/sbin/ip link set dev "veth-{{ interface }}1" mtu {{ interface_data['mtu'] | default(1500) }}
ExecStart=-/sbin/ip link set dev "veth-{{ interface }}2" up
ExecStart=-/sbin/ip link set dev "veth-{{ interface }}2" mtu {{ interface_data['mtu'] | default(1500) }}
ExecStart=-/sbin/ip link set "veth-{{ interface }}1" master "{{ value.bridge }}"
ExecStart=-/sbin/ip link add "{{ mv_interface }}" link "veth-{{ interface }}2" type macvlan mode {{ value.macvlan_mode | default(nspawn_macvlan_mode) }}
{% else %}
ExecStart=-/sbin/ip link add "{{ mv_interface }}" link "{{ value.bridge }}" type macvlan mode {{ value.macvlan_mode | default(nspawn_macvlan_mode) }}
{% endif %}
{% set _ = seen_start_interfaces.append(value.bridge) %}
{% endif %}
{% endfor %}
[Install]
WantedBy=multi-user.target