Merge branch 'jool' into 'master'

Implement __jool type.

See merge request ungleich-public/cdist-contrib!28
This commit is contained in:
fnux 2021-04-21 16:03:43 +02:00
commit 5581cbabf9
5 changed files with 159 additions and 0 deletions

View File

@ -0,0 +1,19 @@
#!/bin/sh
# Explorer for the __jool type to determine if we need the -virt or the -lts modules.
[ "$(sh -e "${__explorer:?}"/os)" = 'alpine' ] || exit 0
case $(uname -r) in
*-virt)
printf "jool-modules-virt"
;;
*-lts)
printf "jool-modules-lts"
;;
*)
cat <<- EOF >&2
Incompatible kernel version found - could not install jool kernel
modules. Please use one of linux-lts or linux-virt.
EOF
exit 1
esac

69
type/__jool/man.rst Normal file
View File

@ -0,0 +1,69 @@
cdist-type__jool(7)
===================
NAME
----
cdist-type__jool - Configures a NAT64 instance using jool.
DESCRIPTION
-----------
This type configures an instance of a NAT64 using jool. This type **does not**
configure anything related to the other capacities of the jool project, such as
SIIT (see the `jool_siit` daemon / `__jool_siit` type - unimplemented at this
time). See https://jool.mx
Note that this type is only implemented for the Alpine Linux operating system.
Note that this type currently does not implement running several parallel
instances of jool NAT64. Please contribute your implementation if you do so.
REQUIRED PARAMETERS
-------------------
None.
OPTIONAL PARAMETERS
-------------------
instance
The instance name, `default` if unspecified.
framework
The used translation framework, `netfilter` if unspecified.
pool6
The IPv6 prefix used to map IPv4 addresses, `64:ff9b::/96` if unspecified.
EXAMPLES
--------
.. code-block:: sh
__jool # Everything default
# or, if you're feeling contrary
__jool --instance "prettysoup" \
--framework "iptables" \
--pool6 "2001:DB8:dead:beef::/96"
SEE ALSO
--------
`cdist-type__jool_siit(7)` - yet to be written
`cdist-type__joold(7)` - yet to be written
AUTHORS
-------
Joachim Desroches <joachim.desroches@epfl.ch>
COPYING
-------
Copyright \(C) 2021 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.

68
type/__jool/manifest Executable file
View File

@ -0,0 +1,68 @@
#!/bin/sh -e
#
# 2021 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
'alpine')
packages="jool-tools jool-tools-openrc $(cat "${__object:?}"/explorer/alpine-kernel-modules)"
;;
*)
printf "This type has no implementation for %s. Please contribute one if you can.\n" "$os"
exit 1
;;
esac
for pkg in $packages;
do
__package "$pkg"
done
instance="default"
if [ -f "${__object:?}/parameter/instance" ];
then
instance="$(cat "${__object:?}/parameter/instance")"
fi
framework="netfilter"
if [ -f "${__object:?}/parameter/framework" ];
then
framework="$(cat "${__object:?}/parameter/framework")"
fi
pool6="64:ff9b::/96"
if [ -f "${__object:?}/parameter/pool6" ];
then
pool6="$(cat "${__object:?}/parameter/pool6")"
fi
require='__package/jool-tools' __file /etc/jool/jool.conf \
--source - <<- EOF
{
"instance": "$instance",
"framework": "$framework",
"global": {
"pool6": "$pool6"
}
}
EOF
__start_on_boot 'jool'

View File

@ -0,0 +1,3 @@
instance
framework
pool6

0
type/__jool/singleton Normal file
View File