From 63b5800d9f35777f9b529da5e50705aa28145a5e Mon Sep 17 00:00:00 2001 From: Dennis Camera Date: Mon, 29 Jun 2020 13:25:41 +0200 Subject: [PATCH] [type/__interface] Draft ifcfg backend --- .../__interface/files/backends/ifcfg/manifest | 105 ++++++++++++++++++ .../files/backends/redhat/manifest | 22 ---- cdist/conf/type/__interface/manifest | 4 +- 3 files changed, 107 insertions(+), 24 deletions(-) create mode 100755 cdist/conf/type/__interface/files/backends/ifcfg/manifest delete mode 100755 cdist/conf/type/__interface/files/backends/redhat/manifest diff --git a/cdist/conf/type/__interface/files/backends/ifcfg/manifest b/cdist/conf/type/__interface/files/backends/ifcfg/manifest new file mode 100755 index 00000000..9d46b24f --- /dev/null +++ b/cdist/conf/type/__interface/files/backends/ifcfg/manifest @@ -0,0 +1,105 @@ +#!/bin/sh -e +# -*- mode: sh; indent-tabs-mode: t -*- +# +# 2020 Dennis Camera (dennis.camera at ssrq-sds-fds.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 . +# + +opt_format() { + printf '%s="%s"\n' "${1:?'option name missing'}" "${2:?'option value missing'}" +} + +opt_from_param() { + # Only first line will be read. + opt_format \ + "${1:?'option name missing'}" \ + "$(head -n 1 "${__object}/parameter/${2:?'parameter name missing'}")" +} + + +set -- --state "$(cat "${__object}/parameter/state")" --family inet + +# Boolean flags +if test -f "${__object}/parameter/onboot" +then + set -- "$@" --onboot +fi +if test -f "${__object}/parameter/hotplug" +then + set -- "$@" --hotplug +fi + + +if test -f "${__object}/parameter/name" +then + set -- "$@" --name "$(cat "${__object}/parameter/name")" +fi + + +# Generate appropriate parameters based on bootproto +bootproto=$(cat "${__object}/parameter/bootproto") +case $bootproto +in + (dhcp) + set -- "$@" --bootproto dhcp + ;; + (static) + set -- "$@" --bootproto static + + if test -s "${__object}/parameter/address" + then + while read -r _addr + do + set -- "$@" --address "${_addr}" + done <"${__object}/parameter/address" + unset _addr + fi + + if test -s "${__object}/parameter/gateway" + then + set -- "$@" --option "$(opt_from_param GATEWAY gateway)" + fi + ;; + (manual) + set -- "$@" --bootproto none + ;; + (*) + exit 1 + ;; +esac + +if test -s "${__object}/parameter/comment" +then + set -- "$@" --comment "$(cat "${__object}/parameter/comment")" +fi + +if test -s "${__object}/parameter/onchange" +then + set -- "$@" --onchange "$(cat "${__object}/parameter/onchange")" +fi + +if test -s "${__object}/parameter/extra-config" +then + while read -r _opt + do + set -- "$@" --option "${_opt}" + done <"${__object}/parameter/extra-config" + unset _opt +fi + +# Instantiate backend type +__interface_ifcfg "${__object_id}" "$@" diff --git a/cdist/conf/type/__interface/files/backends/redhat/manifest b/cdist/conf/type/__interface/files/backends/redhat/manifest deleted file mode 100755 index 79156e40..00000000 --- a/cdist/conf/type/__interface/files/backends/redhat/manifest +++ /dev/null @@ -1,22 +0,0 @@ -#!/bin/sh -e -# -*- mode: sh; indent-tabs-mode: t -*- -# -# 2020 Dennis Camera (dennis.camera at ssrq-sds-fds.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 . -# - -# TODO diff --git a/cdist/conf/type/__interface/manifest b/cdist/conf/type/__interface/manifest index 661674cc..6cf71bb3 100755 --- a/cdist/conf/type/__interface/manifest +++ b/cdist/conf/type/__interface/manifest @@ -69,8 +69,8 @@ else (devuan) impl_type=ifupdown.d ;; - (centos|redhat) - impl_type=redhat + (centos|redhat|scientific|suse) + impl_type=ifcfg ;; (openwrt) impl_type=uci