__systemd-network: initial implementation.

This commit is contained in:
sparrowhawk 2022-02-02 14:01:47 +01:00
parent 4fdba43dd6
commit 3f52e758fc
No known key found for this signature in database
GPG key ID: 6778C9C29C02D691
6 changed files with 175 additions and 0 deletions

View file

@ -0,0 +1,20 @@
#!/bin/sh -e
#
# 2022 Joachim Desroches (joachim.desroches@epfl.ch)
#
# This file is part of cdist.
#
# cdist is free software: you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation, either version 3 of the License, or
# (at your option) any later version.
#
# cdist is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with cdist. If not, see <http://www.gnu.org/licenses/>.
systemctl enable systemd-networkd

View file

@ -0,0 +1,68 @@
cdist-type__systemd-network(7)
==============================
NAME
----
cdist-type__systemd-network - Configure systemd.network(5) file.
DESCRIPTION
-----------
This type allows you to configure network interfaces by generating a
systemd.network(5) file. It will enable systemd-networkd, so be sure to remove
any conflicting network configuration tool if appropriate!
Note that the systemd.network(5) system is very complete, and this type does
not aim at providing every possible option. Are currently available only the
most common options: feel free to add anything you need to this type which
hopefully will grow over time.
REQUIRED PARAMETERS
-------------------
None.
OPTIONAL PARAMETERS
-------------------
description
A text field used when displaying details about this network.
OPTIONAL MULTIPLE PARAMETERS
----------------------------
match-name
A text field that will be set in the `Name` option of the `[Match]` section.
BOOLEAN PARAMETERS
------------------
ipv6ra-usedomains
Set the `UseDomains` option of the `[IPv6AcceptRA]` section to `True`.
EXAMPLES
--------
.. code-block:: sh
# TODO
__systemd-network
SEE ALSO
--------
`cdist-type_systemd-resolved`\ (7)
`systemd.network`\ (5)
AUTHORS
-------
Joachim Desroches <joachim.desroches@epfl.ch>
COPYING
-------
Copyright \(C) 2022 Joachim Desroches. You can redistribute it
and/or modify it under the terms of the GNU General Public License as
published by the Free Software Foundation, either version 3 of the
License, or (at your option) any later version.

84
type/__systemd_network/manifest Executable file
View file

@ -0,0 +1,84 @@
#!/bin/sh -e
#
# 2022 Joachim Desroches (joachim.desroches@epfl.ch)
#
# This file is part of cdist.
#
# cdist is free software: you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation, either version 3 of the License, or
# (at your option) any later version.
#
# cdist is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with cdist. If not, see <http://www.gnu.org/licenses/>.
#
os=$(cat "${__global:?}/explorer/os")
case "$os" in
'debian' | 'ubuntu' | 'archlinux')
:
;;
*)
printf "Your operating system (%s) is currently not supported by systemd-network\n" "$os" >&2
printf "Please contribute an implementation for it if you can.\n" >&2
exit 1
;;
esac
# XXX: Please keep the option parsing organized in order per-section, with
# sections in the same order as they are in the manpage. This will make hacking
# and maintaining this type much easier.
output_file="${__object:?}/files/${__object_id:?}.network"
cat << EOF > "$output_file"
# This file is managed by cdist. Do not edit by hand!
EOF
# Match section
# Ensure section is needed, OR existence of optional params.
if [ -f "${__object:?}/parameter/match-name" ];
then
printf "\n[Match]\n" >> "$output_file"
if [ -f "${__object:?}/parameter/match-name" ];
then
sed -e 's/^/Name=/' \
"${__object:?}/parameter/match-name" >> "$output_file"
fi
fi
# Network section
# Ensure section is needed, OR existence of optional params.
if [ -f "${__object:?}/parameter/description" ];
then
printf "\n[Network]\n" >> "$output_file"
if [ -f "${__object:?}/parameter/description" ];
then
sed -e 's/^/Description=/' \
"${__object:?}/parameter/description" >> "$output_file"
fi
fi
# IPv6AcceptRA section
# Ensure section is needed, OR existence of optional params.
if [ -f "${__object:?}/parameter/ipv6ra-usedomains" ];
then
printf "\n[IPv6AcceptRA]\n" >> "$output_file"
if [ -f "${__object:?}/parameter/ipv6ra-usedomains" ];
then
printf "UseDomains=True\n" >> "$output_file"
fi
fi
__file "/etc/systemd/network/${__object_id:?}.network" \
--source "$output_file"

View file

@ -0,0 +1 @@
ipv6ra-usedomains

View file

@ -0,0 +1 @@
description

View file

@ -0,0 +1 @@
match-name