Compare commits

...

3 Commits

Author SHA1 Message Date
ef98355d71
feat: support multiple routes and addresses, support wireguard
All checks were successful
continuous-integration/drone/push Build is passing
2022-04-18 16:35:41 +02:00
1141bf02a8
fix: description of tasks 2022-04-18 14:42:07 +02:00
ac49d7d3d5
fix: meta information 2022-04-18 14:39:21 +02:00
5 changed files with 108 additions and 65 deletions

View File

@ -16,6 +16,7 @@ systemd_networkd_netdev: []
# - key: LACPRransmitRate # - key: LACPRransmitRate
# value: fast # value: fast
# filename: 10-bo0.netdev # filename: 10-bo0.netdev
#
# - netdev_options: # - netdev_options:
# - key: Name # - key: Name
# value: br0 # value: br0
@ -23,6 +24,31 @@ systemd_networkd_netdev: []
# value: Bridge # value: Bridge
# bridge_options: {} # bridge_options: {}
# filename: 10-br0.netdev # filename: 10-br0.netdev
#
# - netdev_options:
# - key: Name
# value: wg0
# - key: Kind
# value: wireguard
# wireguard_options:
# - key: PrivateKey
# value: "my-priv-key"
# - key: ListenPort
# value: "51820"
# wireguard_peers:
# - name: "a description"
# options:
# - key: PublicKey
# value: "public-key-of-remote-peer"
# - key: PresharedKey
# value: "preshared-key"
# - key: AllowedIPs
# value: "allowd-ips"
# - key: PersistentKeepalive
# value: "25"
# - key: Endpoint
# value: my-endpoint
# filename: 10-wireguard.netdev
systemd_networkd_network: [] systemd_networkd_network: []
# - match_options: # - match_options:
@ -42,6 +68,7 @@ systemd_networkd_network: []
# - key: RouteMetric # - key: RouteMetric
# value: 20 # value: 20
# filename: 20-wlp.network # filename: 20-wlp.network
#
# - match_options: # - match_options:
# - key: Name # - key: Name
# value: bo0 # value: bo0
@ -60,5 +87,26 @@ systemd_networkd_network: []
# dhcp_options: # dhcp_options:
# - key: RouteMetric # - key: RouteMetric
# value: 10 # value: 10
#
# - match_options:
# - key: Name
# value: wg0
# network_options:
# - key: DNS
# value: "1.2.3.4"
# - key: DNSDefaultRoute
# value: "false"
# addresses:
# - options:
# - key: Address
# value: "192.168.178.100/32"
# routes:
# - name: VPN-Network
# options:
# - key: Destination
# value: "192.168.178.0/24"
# - key: Gateway
# value: "192.168.178.100"
# filename: "50-wireguard.network"
systemd_timesyncd_timezone: Europe/Berlin systemd_timesyncd_timezone: Europe/Berlin

View File

@ -1,52 +1,24 @@
galaxy_info: galaxy_info:
author: your name role_name: networking
description: your role description author: Markus Pesch
company: your company (optional) description: Role to configure network interfaces via systemd on different distributions
company: Cryptic Systems
license: MIT
min_ansible_version: "2.9"
platforms:
- name: ArchLinux
versions:
- all
- name: Ubuntu
versions:
- all
- name: Fedora
versions:
- "35"
# If the issue tracker for your role is not on github, uncomment the galaxy_tags:
# next line and provide a value - systemd-networkd
# issue_tracker_url: http://example.com/issue/tracker - wiregurd
- resolvectl
# Choose a valid license ID from https://spdx.org - some suggested licenses:
# - BSD-3-Clause (default)
# - MIT
# - GPL-2.0-or-later
# - GPL-3.0-only
# - Apache-2.0
# - CC-BY-4.0
license: license (GPL-2.0-or-later, MIT, etc)
min_ansible_version: 2.1
# If this a Container Enabled role, provide the minimum Ansible Container version.
# min_ansible_container_version:
#
# Provide a list of supported platforms, and for each platform a list of versions.
# If you don't wish to enumerate all versions for a particular platform, use 'all'.
# To view available platforms and versions (or releases), visit:
# https://galaxy.ansible.com/api/v1/platforms/
#
# platforms:
# - name: Fedora
# versions:
# - all
# - 25
# - name: SomePlatform
# versions:
# - all
# - 1.0
# - 7
# - 99.99
galaxy_tags: []
# List tags for your role here, one per line. A tag is a keyword that describes
# and categorizes the role. Users find roles by searching for tags. Be sure to
# remove the '[]' above, if you add tags to this list.
#
# NOTE: A tag is limited to a single word comprised of alphanumeric characters.
# Maximum 20 tags per role.
dependencies: [] dependencies: []
# List your role dependencies here, one per line. Be sure to remove the '[]' above,
# if you add dependencies to this list.

View File

@ -3,12 +3,12 @@
- name: Load variables - name: Load variables
include_vars: "{{ ansible_os_family }}.yml" include_vars: "{{ ansible_os_family }}.yml"
- name: "remove existing systemd-networkd configuration" - name: "Remove existing systemd-networkd configuration"
file: file:
path: "/etc/systemd/network" path: "/etc/systemd/network"
state: absent state: absent
- name: "create systemd-networkd directory" - name: "Create systemd-networkd directory"
file: file:
path: "/etc/systemd/network" path: "/etc/systemd/network"
owner: root owner: root
@ -27,7 +27,7 @@
mode: 0644 mode: 0644
when: item.netdev_options is defined and when: item.netdev_options is defined and
item.netdev_options | selectattr("key", "==", "Kind") and item.netdev_options | selectattr("key", "==", "Kind") and
item.netdev_options | selectattr("value", "!=", "WireGuard") item.netdev_options | selectattr("value", "!=", "wireguard")
with_items: "{{ systemd_networkd_netdev }}" with_items: "{{ systemd_networkd_netdev }}"
- name: Create sensitive systemd.netdev files - name: Create sensitive systemd.netdev files
@ -39,8 +39,9 @@
mode: 0600 mode: 0600
when: item.netdev_options is defined and when: item.netdev_options is defined and
item.netdev_options | selectattr("key", "equalto", "Kind") and item.netdev_options | selectattr("key", "equalto", "Kind") and
item.netdev_options | selectattr("value", "equalto", "WireGuard") item.netdev_options | selectattr("value", "equalto", "wireguard")
with_items: "{{ systemd_networkd_netdev }}" with_items: "{{ systemd_networkd_netdev }}"
no_log: true
notify: restart networkd notify: restart networkd
- name: Create systemd.networkd files - name: Create systemd.networkd files
@ -63,25 +64,25 @@
owner: root owner: root
group: root group: root
- name: start and enable networkd - name: Start and enable systemd-networkd
service: service:
name: systemd-networkd name: systemd-networkd
state: started state: started
enabled: yes enabled: yes
daemon_reload: yes daemon_reload: yes
- name: start and enable resolved - name: Start and enable systemd-resolved
service: service:
name: systemd-resolved name: systemd-resolved
state: started state: started
enabled: yes enabled: yes
daemon_reload: yes daemon_reload: yes
- name: set timezone - name: Set system timezone
timezone: timezone:
name: "{{ systemd_timesyncd_timezone }}" name: "{{ systemd_timesyncd_timezone }}"
- name: start and enable timesyncd - name: Start and enable systemd-timesyncd
service: service:
name: systemd-timesyncd name: systemd-timesyncd
state: started state: started

View File

@ -1,3 +1,4 @@
#jinja2: lstrip_blocks: "True", trim_blocks: "True"
# #
# {{ ansible_managed }} # {{ ansible_managed }}
# #
@ -30,9 +31,17 @@
{% endfor %} {% endfor %}
{% endif %} {% endif %}
{% if item.wireguard_peer_options is defined and item.wireguard_peer_options | length > 0 %} {% if item.wireguard_peers is defined %}
{% for wireguard_peer in item.wireguard_peers %}
{% if wireguard_peer.options is defined and wireguard_peer.options | length > 0 %}
{% if wireguard_peer.name is defined and wireguard_peer.name | length > 0 %}
# {{ wireguard_peer.name }}
{% endif %}
[WireGuardPeer] [WireGuardPeer]
{% for wireguard_peer_option in item.wireguard_peer_options %} {% for option in wireguard_peer.options %}
{{ wireguard_peer_option.key }}={{ wireguard_peer_option.value }} {{ option.key }}={{ option.value }}
{% endfor %} {% endfor %}
{% endif %} {% endif %}
{% endfor %}
{% endif %}

View File

@ -24,19 +24,32 @@
{% endfor %} {% endfor %}
{% endif %} {% endif %}
{% if item.addresses is defined and item.addresses | length > 0 %} {% if item.addresses is defined %}
{% for address in item.addresses %} {% for address in item.addresses %}
{% if address.options is defined and address.options | length > 0 %}
{% if address.name is defined and address.name | length > 0 %}
# {{ address.name }}
{% endif %}
[Address] [Address]
{% for address_option in address.options %} {% for option in address.options %}
{{ address_option.key }}={{ address_option.value }} {{ option.key }}={{ option.value }}
{% endfor %} {% endfor %}
{% endif %}
{% endfor %} {% endfor %}
{% endif %} {% endif %}
{% if item.route_options is defined and item.route_options | length > 0 %} {% if item.routes is defined %}
{% for route in item.routes %}
{% if route.options is defined and route.options | length > 0 %}
{% if route.name is defined and route.name | length > 0 %}
# {{ route.name }}
{% endif %}
[Route] [Route]
{% for route_option in item.route_options %} {% for option in route.options %}
{{ route_option.key }}={{ route_option.value }} {{ option.key }}={{ option.value }}
{% endfor %}
{% endif %}
{% endfor %} {% endfor %}
{% endif %} {% endif %}