forked from ungleich-public/cdist
Merge branch 'master' into beta
This commit is contained in:
commit
ed6d26245b
31 changed files with 419 additions and 221 deletions
6
Makefile
6
Makefile
|
@ -35,9 +35,9 @@ DOCS_SRC_DIR=./docs/src
|
||||||
SPEECHDIR=./docs/speeches
|
SPEECHDIR=./docs/speeches
|
||||||
TYPEDIR=./cdist/conf/type
|
TYPEDIR=./cdist/conf/type
|
||||||
|
|
||||||
SPHINXM=make -C $(DOCS_SRC_DIR) man
|
SPHINXM=$(MAKE) -C $(DOCS_SRC_DIR) man
|
||||||
SPHINXH=make -C $(DOCS_SRC_DIR) html
|
SPHINXH=$(MAKE) -C $(DOCS_SRC_DIR) html
|
||||||
SPHINXC=make -C $(DOCS_SRC_DIR) clean
|
SPHINXC=$(MAKE) -C $(DOCS_SRC_DIR) clean
|
||||||
|
|
||||||
################################################################################
|
################################################################################
|
||||||
# Manpages
|
# Manpages
|
||||||
|
|
|
@ -27,19 +27,18 @@
|
||||||
str2bytes() {
|
str2bytes() {
|
||||||
awk -F' ' '
|
awk -F' ' '
|
||||||
$2 == "B" || !$2 { print $1 }
|
$2 == "B" || !$2 { print $1 }
|
||||||
$2 == "kB" { print $1 * 1000 }
|
$2 == "kB" { printf "%.f\n", ($1 * 1000) }
|
||||||
$2 == "MB" { print $1 * 1000 * 1000 }
|
$2 == "MB" { printf "%.f\n", ($1 * 1000 * 1000) }
|
||||||
$2 == "GB" { print $1 * 1000 * 1000 * 1000 }
|
$2 == "GB" { printf "%.f\n", ($1 * 1000 * 1000 * 1000) }
|
||||||
$2 == "TB" { print $1 * 1000 * 1000 * 1000 * 1000 }
|
$2 == "TB" { printf "%.f\n", ($1 * 1000 * 1000 * 1000 * 1000) }
|
||||||
$2 == "kiB" { print $1 * 1024 }
|
$2 == "kiB" { printf "%.f\n", ($1 * 1024) }
|
||||||
$2 == "MiB" { print $1 * 1024 * 1024 }
|
$2 == "MiB" { printf "%.f\n", ($1 * 1024 * 1024) }
|
||||||
$2 == "GiB" { print $1 * 1024 * 1024 * 1024 }
|
$2 == "GiB" { printf "%.f\n", ($1 * 1024 * 1024 * 1024) }
|
||||||
$2 == "TiB" { print $1 * 1024 * 1024 * 1024 * 1024 }'
|
$2 == "TiB" { printf "%.f\n", ($1 * 1024 * 1024 * 1024 * 1024) }'
|
||||||
}
|
}
|
||||||
|
|
||||||
bytes2kib() {
|
bytes2kib() {
|
||||||
set -- "$(cat)"
|
awk '$0 > 0 { printf "%.f\n", ($0 / 1024) }'
|
||||||
test "$1" -gt 0 && echo $(($1 / 1024))
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -1,6 +1,7 @@
|
||||||
#!/bin/sh
|
#!/bin/sh -e
|
||||||
#
|
#
|
||||||
# 2010-2011 Nico Schottelius (nico-cdist at schottelius.org)
|
# 2010-2011 Nico Schottelius (nico-cdist at schottelius.org)
|
||||||
|
# 2020-2021 Dennis Camera (dennis.camera at ssrq-sds-fds.ch)
|
||||||
#
|
#
|
||||||
# This file is part of cdist.
|
# This file is part of cdist.
|
||||||
#
|
#
|
||||||
|
@ -17,12 +18,22 @@
|
||||||
# You should have received a copy of the GNU General Public License
|
# You should have received a copy of the GNU General Public License
|
||||||
# along with cdist. If not, see <http://www.gnu.org/licenses/>.
|
# along with cdist. If not, see <http://www.gnu.org/licenses/>.
|
||||||
#
|
#
|
||||||
#
|
|
||||||
# All os variables are lower case
|
# All os variables are lower case
|
||||||
#
|
#
|
||||||
#
|
|
||||||
|
|
||||||
case "$("$__explorer/os")" in
|
rc_getvar() {
|
||||||
|
awk -F= -v varname="$2" '
|
||||||
|
function unquote(s) {
|
||||||
|
if (s ~ /^".*"$/ || s ~ /^'\''.*'\''$/)
|
||||||
|
return substr(s, 2, length(s) - 2)
|
||||||
|
else
|
||||||
|
return s
|
||||||
|
}
|
||||||
|
$1 == varname { print unquote(substr($0, index($0, "=") + 1)) }' "$1"
|
||||||
|
}
|
||||||
|
|
||||||
|
case $("${__explorer:?}/os")
|
||||||
|
in
|
||||||
amazon)
|
amazon)
|
||||||
cat /etc/system-release
|
cat /etc/system-release
|
||||||
;;
|
;;
|
||||||
|
@ -43,6 +54,8 @@ case "$("$__explorer/os")" in
|
||||||
# sid versions don't have a number, so we decode by codename:
|
# sid versions don't have a number, so we decode by codename:
|
||||||
case $(expr "$debian_version" : '\([a-z]\{1,\}\)/')
|
case $(expr "$debian_version" : '\([a-z]\{1,\}\)/')
|
||||||
in
|
in
|
||||||
|
trixie) echo 12.99 ;;
|
||||||
|
bookworm) echo 11.99 ;;
|
||||||
bullseye) echo 10.99 ;;
|
bullseye) echo 10.99 ;;
|
||||||
buster) echo 9.99 ;;
|
buster) echo 9.99 ;;
|
||||||
stretch) echo 8.99 ;;
|
stretch) echo 8.99 ;;
|
||||||
|
@ -50,7 +63,7 @@ case "$("$__explorer/os")" in
|
||||||
wheezy) echo 6.99 ;;
|
wheezy) echo 6.99 ;;
|
||||||
squeeze) echo 5.99 ;;
|
squeeze) echo 5.99 ;;
|
||||||
lenny) echo 4.99 ;;
|
lenny) echo 4.99 ;;
|
||||||
*) exit 1
|
*) echo 99.99 ;;
|
||||||
esac
|
esac
|
||||||
;;
|
;;
|
||||||
*)
|
*)
|
||||||
|
@ -59,7 +72,23 @@ case "$("$__explorer/os")" in
|
||||||
esac
|
esac
|
||||||
;;
|
;;
|
||||||
devuan)
|
devuan)
|
||||||
cat /etc/devuan_version
|
devuan_version=$(cat /etc/devuan_version)
|
||||||
|
case ${devuan_version}
|
||||||
|
in
|
||||||
|
(*/ceres)
|
||||||
|
# ceres versions don't have a number, so we decode by codename:
|
||||||
|
case ${devuan_version}
|
||||||
|
in
|
||||||
|
(chimaera/ceres) echo 3.99 ;;
|
||||||
|
(beowulf/ceres) echo 2.99 ;;
|
||||||
|
(ascii/ceres) echo 1.99 ;;
|
||||||
|
(*) exit 1
|
||||||
|
esac
|
||||||
|
;;
|
||||||
|
(*)
|
||||||
|
echo "${devuan_version}"
|
||||||
|
;;
|
||||||
|
esac
|
||||||
;;
|
;;
|
||||||
fedora)
|
fedora)
|
||||||
cat /etc/fedora-release
|
cat /etc/fedora-release
|
||||||
|
@ -68,12 +97,20 @@ case "$("$__explorer/os")" in
|
||||||
cat /etc/gentoo-release
|
cat /etc/gentoo-release
|
||||||
;;
|
;;
|
||||||
macosx)
|
macosx)
|
||||||
sw_vers -productVersion
|
# NOTE: Legacy versions (< 10.3) do not support options
|
||||||
|
sw_vers | awk -F ':[ \t]+' '$1 == "ProductVersion" { print $2 }'
|
||||||
;;
|
;;
|
||||||
freebsd)
|
freebsd)
|
||||||
# Apparently uname -r is not a reliable way to get the patch level.
|
# Apparently uname -r is not a reliable way to get the patch level.
|
||||||
# See: https://bugs.freebsd.org/bugzilla/show_bug.cgi?id=251743
|
# See: https://bugs.freebsd.org/bugzilla/show_bug.cgi?id=251743
|
||||||
freebsd-version
|
if command -v freebsd-version >/dev/null 2>&1
|
||||||
|
then
|
||||||
|
# get userland version
|
||||||
|
freebsd-version -u
|
||||||
|
else
|
||||||
|
# fallback to kernel release for FreeBSD < 10.0
|
||||||
|
uname -r
|
||||||
|
fi
|
||||||
;;
|
;;
|
||||||
*bsd|solaris)
|
*bsd|solaris)
|
||||||
uname -r
|
uname -r
|
||||||
|
@ -98,7 +135,20 @@ case "$("$__explorer/os")" in
|
||||||
fi
|
fi
|
||||||
;;
|
;;
|
||||||
ubuntu)
|
ubuntu)
|
||||||
|
if command -v lsb_release >/dev/null 2>&1
|
||||||
|
then
|
||||||
lsb_release -sr
|
lsb_release -sr
|
||||||
|
elif test -r /usr/lib/os-release
|
||||||
|
then
|
||||||
|
# fallback to /usr/lib/os-release if lsb_release is not present (like
|
||||||
|
# on minimized Ubuntu installations)
|
||||||
|
rc_getvar /usr/lib/os-release VERSION_ID
|
||||||
|
elif test -r /etc/lsb-release
|
||||||
|
then
|
||||||
|
# extract DISTRIB_RELEASE= variable from /etc/lsb-release on old
|
||||||
|
# versions without /usr/lib/os-release.
|
||||||
|
rc_getvar /etc/lsb-release DISTRIB_RELEASE
|
||||||
|
fi
|
||||||
;;
|
;;
|
||||||
alpine)
|
alpine)
|
||||||
cat /etc/alpine-release
|
cat /etc/alpine-release
|
||||||
|
|
|
@ -28,6 +28,7 @@
|
||||||
# lsb_release may not be given in all installations
|
# lsb_release may not be given in all installations
|
||||||
codename_os_release() {
|
codename_os_release() {
|
||||||
# shellcheck disable=SC1090
|
# shellcheck disable=SC1090
|
||||||
|
# shellcheck disable=SC1091
|
||||||
. "$__global/explorer/os_release"
|
. "$__global/explorer/os_release"
|
||||||
printf "%s" "$VERSION_CODENAME"
|
printf "%s" "$VERSION_CODENAME"
|
||||||
}
|
}
|
||||||
|
|
79
cdist/conf/type/__apt_pin/man.rst
Normal file
79
cdist/conf/type/__apt_pin/man.rst
Normal file
|
@ -0,0 +1,79 @@
|
||||||
|
cdist-type__apt_pin(7)
|
||||||
|
======================
|
||||||
|
|
||||||
|
NAME
|
||||||
|
----
|
||||||
|
cdist-type__apt_pin - Manage apt pinning rules
|
||||||
|
|
||||||
|
|
||||||
|
DESCRIPTION
|
||||||
|
-----------
|
||||||
|
Adds/removes/edits rules to pin some packages to a specific distribution. Useful if using multiple debian repositories at the same time. (Useful, if one wants to use a few specific packages from backports or perhaps Debain testing... or even sid.)
|
||||||
|
|
||||||
|
|
||||||
|
REQUIRED PARAMETERS
|
||||||
|
-------------------
|
||||||
|
distribution
|
||||||
|
Specifies what distribution the package should be pinned to. Accepts both codenames (buster/bullseye/sid) and suite names (stable/testing/...).
|
||||||
|
|
||||||
|
|
||||||
|
OPTIONAL PARAMETERS
|
||||||
|
-------------------
|
||||||
|
package
|
||||||
|
Package name, glob or regular expression to match (multiple) packages. If not specified `__object_id` is used.
|
||||||
|
|
||||||
|
priority
|
||||||
|
The priority value to assign to matching packages. Deafults to 500. (To match the default target distro's priority)
|
||||||
|
|
||||||
|
state
|
||||||
|
Will be passed to underlying `__file` type; see there for valid values and defaults.
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
BOOLEAN PARAMETERS
|
||||||
|
------------------
|
||||||
|
None.
|
||||||
|
|
||||||
|
|
||||||
|
EXAMPLES
|
||||||
|
--------
|
||||||
|
|
||||||
|
.. code-block:: sh
|
||||||
|
|
||||||
|
# Add the bullseye repo to buster, but do not install any packages by default,
|
||||||
|
# only if explicitely asked for (-1 means "never" for apt)
|
||||||
|
__apt_pin bullseye-default \
|
||||||
|
--package "*" \
|
||||||
|
--distribution bullseye \
|
||||||
|
--priority -1
|
||||||
|
|
||||||
|
require="__apt_pin/bullseye-default" __apt_source bullseye \
|
||||||
|
--uri http://deb.debian.org/debian/ \
|
||||||
|
--distribution bullseye \
|
||||||
|
--component main
|
||||||
|
|
||||||
|
__apt_pin foo --package "foo foo-*" --distribution bullseye
|
||||||
|
|
||||||
|
__foo # Assuming, this installs the `foo` package internally
|
||||||
|
|
||||||
|
__package foo-plugin-extras # Assuming we also need some extra stuff
|
||||||
|
|
||||||
|
|
||||||
|
SEE ALSO
|
||||||
|
--------
|
||||||
|
:strong:`apt_preferences`\ (5)
|
||||||
|
:strong:`cdist-type__apt_source`\ (7)
|
||||||
|
:strong:`cdist-type__apt_backports`\ (7)
|
||||||
|
:strong:`cdist-type__file`\ (7)
|
||||||
|
|
||||||
|
AUTHORS
|
||||||
|
-------
|
||||||
|
Daniel Fancsali <fancsali@gmail.com>
|
||||||
|
|
||||||
|
|
||||||
|
COPYING
|
||||||
|
-------
|
||||||
|
Copyright \(C) 2021 Daniel Fancsali. 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.
|
63
cdist/conf/type/__apt_pin/manifest
Executable file
63
cdist/conf/type/__apt_pin/manifest
Executable file
|
@ -0,0 +1,63 @@
|
||||||
|
#!/bin/sh -e
|
||||||
|
#
|
||||||
|
# 2021 Daniel Fancsali (fancsali@gmail.com)
|
||||||
|
#
|
||||||
|
# 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/>.
|
||||||
|
#
|
||||||
|
|
||||||
|
|
||||||
|
name="$__object_id"
|
||||||
|
|
||||||
|
os=$(cat "$__global/explorer/os")
|
||||||
|
state="$(cat "$__object/parameter/state")"
|
||||||
|
|
||||||
|
if [ -f "$__object/parameter/package" ]; then
|
||||||
|
package="$(cat "$__object/parameter/package")"
|
||||||
|
else
|
||||||
|
package=$name
|
||||||
|
fi
|
||||||
|
|
||||||
|
distribution="$(cat "$__object/parameter/distribution")"
|
||||||
|
priority="$(cat "$__object/parameter/priority")"
|
||||||
|
|
||||||
|
|
||||||
|
case "$os" in
|
||||||
|
debian|ubuntu|devuan)
|
||||||
|
;;
|
||||||
|
*)
|
||||||
|
printf "This type is specific to Debian and it's derivatives" >&2
|
||||||
|
exit 1
|
||||||
|
;;
|
||||||
|
esac
|
||||||
|
|
||||||
|
case $distribution in
|
||||||
|
stable|testing|unstable|experimental)
|
||||||
|
pin="release a=$distribution"
|
||||||
|
;;
|
||||||
|
*)
|
||||||
|
pin="release n=$distribution"
|
||||||
|
;;
|
||||||
|
esac
|
||||||
|
|
||||||
|
|
||||||
|
__file "/etc/apt/preferences.d/$name" \
|
||||||
|
--owner root --group root --mode 0644 \
|
||||||
|
--state "$state" \
|
||||||
|
--source - << EOF
|
||||||
|
Package: $package
|
||||||
|
Pin: $pin
|
||||||
|
Pin-Priority: $priority
|
||||||
|
EOF
|
0
cdist/conf/type/__apt_pin/nonparallel
Normal file
0
cdist/conf/type/__apt_pin/nonparallel
Normal file
1
cdist/conf/type/__apt_pin/parameter/default/state
Normal file
1
cdist/conf/type/__apt_pin/parameter/default/state
Normal file
|
@ -0,0 +1 @@
|
||||||
|
present
|
2
cdist/conf/type/__apt_pin/parameter/optional
Normal file
2
cdist/conf/type/__apt_pin/parameter/optional
Normal file
|
@ -0,0 +1,2 @@
|
||||||
|
state
|
||||||
|
package
|
2
cdist/conf/type/__apt_pin/parameter/required
Normal file
2
cdist/conf/type/__apt_pin/parameter/required
Normal file
|
@ -0,0 +1,2 @@
|
||||||
|
distribution
|
||||||
|
priority
|
|
@ -27,7 +27,7 @@ else
|
||||||
fi
|
fi
|
||||||
|
|
||||||
case "$os" in
|
case "$os" in
|
||||||
alpine|centos|fedora|redhat|suse|gentoo)
|
alpine|centos|fedora|gentoo|redhat|suse|ubuntu)
|
||||||
if [ ! -x "$(command -v lsblk)" ]; then
|
if [ ! -x "$(command -v lsblk)" ]; then
|
||||||
echo "lsblk is required for __filesystem type" >&2
|
echo "lsblk is required for __filesystem type" >&2
|
||||||
exit 1
|
exit 1
|
||||||
|
|
|
@ -37,6 +37,7 @@ assert () # If condition false,
|
||||||
then
|
then
|
||||||
echo "Assertion failed: \"$1\""
|
echo "Assertion failed: \"$1\""
|
||||||
# shellcheck disable=SC2039
|
# shellcheck disable=SC2039
|
||||||
|
# shellcheck disable=SC3044
|
||||||
echo "File \"$0\", line $lineno, called by $(caller 0)"
|
echo "File \"$0\", line $lineno, called by $(caller 0)"
|
||||||
exit $E_ASSERT_FAILED
|
exit $E_ASSERT_FAILED
|
||||||
fi
|
fi
|
||||||
|
|
|
@ -1,41 +1,104 @@
|
||||||
#!/bin/sh -e
|
#!/bin/sh -e
|
||||||
#
|
|
||||||
# 2015 Dominique Roux (dominique.roux4 at gmail.com)
|
|
||||||
#
|
|
||||||
# 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/>.
|
|
||||||
#
|
|
||||||
|
|
||||||
source=$(cat "$__object/parameter/source")
|
if ! command -v rsync > /dev/null
|
||||||
remote_user=$(cat "$__object/parameter/remote-user")
|
then
|
||||||
|
echo 'rsync is missing in local machine' >&2
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
|
||||||
if [ -f "$__object/parameter/destination" ]; then
|
src="$( cat "$__object/parameter/source" )"
|
||||||
destination=$(cat "$__object/parameter/destination")
|
|
||||||
|
if [ ! -e "$src" ]
|
||||||
|
then
|
||||||
|
echo "$src not found" >&2
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
if [ -f "$__object/parameter/destination" ]
|
||||||
|
then
|
||||||
|
dst="$( cat "$__object/parameter/destination" )"
|
||||||
else
|
else
|
||||||
destination="/$__object_id"
|
dst="/$__object_id"
|
||||||
fi
|
fi
|
||||||
|
|
||||||
set --
|
# if source is directory, then make sure that
|
||||||
if [ -f "$__object/parameter/rsync-opts" ]; then
|
# source and destination are ending with slash,
|
||||||
while read -r opts; do
|
# because this is what you almost always want when
|
||||||
set -- "$@" "--$opts"
|
# rsyncing two directories.
|
||||||
done < "$__object/parameter/rsync-opts"
|
|
||||||
|
if [ -d "$src" ]
|
||||||
|
then
|
||||||
|
if ! echo "$src" | grep -Eq '/$'
|
||||||
|
then
|
||||||
|
src="$src/"
|
||||||
|
fi
|
||||||
|
|
||||||
|
if ! echo "$dst" | grep -Eq '/$'
|
||||||
|
then
|
||||||
|
dst="$dst/"
|
||||||
|
fi
|
||||||
fi
|
fi
|
||||||
|
|
||||||
|
remote_user="$( cat "$__object/parameter/remote-user" )"
|
||||||
|
|
||||||
|
options="$( cat "$__object/parameter/options" )"
|
||||||
|
|
||||||
|
if [ -f "$__object/parameter/option" ]
|
||||||
|
then
|
||||||
|
while read -r l
|
||||||
|
do
|
||||||
|
# there's a limitation in argparse: value can't begin with '-'.
|
||||||
|
# to workaround this, let's prefix opts with '\' in manifest and remove here.
|
||||||
|
# read more about argparse issue: https://bugs.python.org/issue9334
|
||||||
|
|
||||||
|
options="$options $( echo "$l" | sed 's/\\//g' )"
|
||||||
|
done \
|
||||||
|
< "$__object/parameter/option"
|
||||||
|
fi
|
||||||
|
|
||||||
|
if [ -f "$__object/parameter/owner" ] || [ -f "$__object/parameter/group" ]
|
||||||
|
then
|
||||||
|
options="$options --chown="
|
||||||
|
|
||||||
|
if [ -f "$__object/parameter/owner" ]
|
||||||
|
then
|
||||||
|
owner="$( cat "$__object/parameter/owner" )"
|
||||||
|
options="$options$owner"
|
||||||
|
fi
|
||||||
|
|
||||||
|
if [ -f "$__object/parameter/group" ]
|
||||||
|
then
|
||||||
|
group="$( cat "$__object/parameter/group" )"
|
||||||
|
options="$options:$group"
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
|
||||||
|
if [ -f "$__object/parameter/mode" ]
|
||||||
|
then
|
||||||
|
mode="$( cat "$__object/parameter/mode" )"
|
||||||
|
options="$options --chmod=$mode"
|
||||||
|
fi
|
||||||
|
|
||||||
|
# IMPORTANT
|
||||||
|
#
|
||||||
|
# 1. we first dry-run rsync with change summary to find out
|
||||||
|
# if there are any changes and code generation is needed.
|
||||||
|
# 2. normally, to get current state or target host, we run
|
||||||
|
# such operations in type explorers, but that's not
|
||||||
|
# possible due to how rsync works.
|
||||||
|
# 3. redirecting output of dry-run to stderr to ease debugging.
|
||||||
|
# 4. to understand how that cryptic regex works, please
|
||||||
|
# open rsync manpage and read about --itemize-changes.
|
||||||
|
|
||||||
|
export RSYNC_RSH="$__remote_exec"
|
||||||
|
|
||||||
# shellcheck disable=SC2086
|
# shellcheck disable=SC2086
|
||||||
echo rsync -a \
|
if ! rsync --dry-run --itemize-changes $options "$src" "$remote_user@$__target_host:$dst" \
|
||||||
--no-owner --no-group \
|
| grep -E '^(<|>|c|h|\.|\*)[fdL][cstTpogunbax\.\+\?]+\s' >&2
|
||||||
-e \"${__remote_exec}\" \
|
then
|
||||||
-q "$@" "${source}/" "${remote_user}@${__target_host}:${destination}"
|
exit 0
|
||||||
|
fi
|
||||||
|
|
||||||
|
echo "export RSYNC_RSH='$__remote_exec'"
|
||||||
|
|
||||||
|
echo "rsync $options $src $remote_user@$__target_host:$dst"
|
||||||
|
|
|
@ -1,37 +0,0 @@
|
||||||
#!/bin/sh -e
|
|
||||||
#
|
|
||||||
# 2015 Dominique Roux (dominique.roux4 at gmail.com)
|
|
||||||
#
|
|
||||||
# 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/>.
|
|
||||||
#
|
|
||||||
|
|
||||||
if [ -f "$__object/parameter/destination" ]; then
|
|
||||||
destination=$(cat "$__object/parameter/destination")
|
|
||||||
else
|
|
||||||
destination="/$__object_id"
|
|
||||||
fi
|
|
||||||
|
|
||||||
ownergroup=""
|
|
||||||
if [ -f "$__object/parameter/owner" ]; then
|
|
||||||
ownergroup=$(cat "$__object/parameter/owner")
|
|
||||||
fi
|
|
||||||
if [ -f "$__object/parameter/group" ]; then
|
|
||||||
ownergroup="${ownergroup}:$(cat "$__object/parameter/group")"
|
|
||||||
fi
|
|
||||||
|
|
||||||
if [ "$ownergroup" ]; then
|
|
||||||
echo chown -R "$ownergroup" "$destination"
|
|
||||||
fi
|
|
|
@ -3,112 +3,73 @@ cdist-type__rsync(7)
|
||||||
|
|
||||||
NAME
|
NAME
|
||||||
----
|
----
|
||||||
cdist-type__rsync - Mirror directories using rsync
|
cdist-type__rsync - Mirror directories using ``rsync``
|
||||||
|
|
||||||
|
|
||||||
DESCRIPTION
|
DESCRIPTION
|
||||||
-----------
|
-----------
|
||||||
WARNING: This type is of BETA quality:
|
The purpose of this type is to bring power of ``rsync`` into ``cdist``.
|
||||||
|
|
||||||
- it has not been tested widely
|
|
||||||
- interfaces *may* change
|
|
||||||
- if there is a better approach to solve the problem -> the type may even vanish
|
|
||||||
|
|
||||||
If you are fine with these constraints, please read on.
|
|
||||||
|
|
||||||
|
|
||||||
This cdist type allows you to mirror local directories to the
|
|
||||||
target host using rsync. Rsync will be installed in the manifest of the type.
|
|
||||||
If group or owner are giveng, a recursive chown will be executed on the
|
|
||||||
target host.
|
|
||||||
|
|
||||||
A slash will be appended to the source directory so that only the contents
|
|
||||||
of the directory are taken and not the directory name itself.
|
|
||||||
|
|
||||||
|
|
||||||
REQUIRED PARAMETERS
|
REQUIRED PARAMETERS
|
||||||
-------------------
|
-------------------
|
||||||
source
|
source
|
||||||
Where to take files from
|
Source directory in local machine.
|
||||||
|
If source is directory, slash (``/``) will be added to source and destination paths.
|
||||||
|
|
||||||
|
|
||||||
OPTIONAL PARAMETERS
|
OPTIONAL PARAMETERS
|
||||||
-------------------
|
-------------------
|
||||||
group
|
destination
|
||||||
Group to chgrp to.
|
Destination directory. Defaults to ``$__object_id``.
|
||||||
|
|
||||||
owner
|
owner
|
||||||
User to chown to.
|
Will be passed to ``rsync`` as ``--chown=OWNER``.
|
||||||
|
Read ``rsync(1)`` for more details.
|
||||||
|
|
||||||
destination
|
group
|
||||||
Use this as the base destination instead of the object id
|
Will be passed to ``rsync`` as ``--chown=:GROUP``.
|
||||||
|
Read ``rsync(1)`` for more details.
|
||||||
|
|
||||||
|
mode
|
||||||
|
Will be passed to ``rsync`` as ``--chmod=MODE``.
|
||||||
|
Read ``rsync(1)`` for more details.
|
||||||
|
|
||||||
|
options
|
||||||
|
Defaults to ``--recursive --links --perms --times``.
|
||||||
|
Due to `bug in Python's argparse<https://bugs.python.org/issue9334>`_, value must be prefixed with ``\``.
|
||||||
|
|
||||||
remote-user
|
remote-user
|
||||||
Use this user instead of the default "root" for rsync operations.
|
Defaults to ``root``.
|
||||||
|
|
||||||
|
|
||||||
OPTIONAL MULTIPLE PARAMETERS
|
OPTIONAL MULTIPLE PARAMETERS
|
||||||
----------------------------
|
----------------------------
|
||||||
rsync-opts
|
option
|
||||||
Use this option to give rsync options with.
|
Pass additional options to ``rsync``.
|
||||||
See rsync(1) for available options.
|
See ``rsync(1)`` for all possible options.
|
||||||
Only "--" options are supported.
|
Due to `bug in Python's argparse<https://bugs.python.org/issue9334>`_, value must be prefixed with ``\``.
|
||||||
Write the options without the beginning "--"
|
|
||||||
Can be specified multiple times.
|
|
||||||
|
|
||||||
|
|
||||||
MESSAGES
|
|
||||||
--------
|
|
||||||
NONE
|
|
||||||
|
|
||||||
|
|
||||||
EXAMPLES
|
EXAMPLES
|
||||||
--------
|
--------
|
||||||
|
|
||||||
.. code-block:: sh
|
.. code-block:: sh
|
||||||
|
|
||||||
# You can use any source directory
|
__rsync /var/www/example.com \
|
||||||
__rsync /tmp/testdir \
|
--owner root \
|
||||||
--source /etc
|
--group www-data \
|
||||||
|
--mode 'D750,F640' \
|
||||||
# Use source from type
|
--source "$__files/example.com/www"
|
||||||
__rsync /etc \
|
|
||||||
--source "$__type/files/package"
|
|
||||||
|
|
||||||
# Allow multiple __rsync objects to write to the same dir
|
|
||||||
__rsync mystuff \
|
|
||||||
--destination /usr/local/bin \
|
|
||||||
--source "$__type/files/package"
|
|
||||||
|
|
||||||
__rsync otherstuff \
|
|
||||||
--destination /usr/local/bin \
|
|
||||||
--source "$__type/files/package2"
|
|
||||||
|
|
||||||
# Use rsync option --exclude
|
|
||||||
__rsync /tmp/testdir \
|
|
||||||
--source /etc \
|
|
||||||
--rsync-opts exclude=sshd_conf
|
|
||||||
|
|
||||||
# Use rsync with multiple options --exclude --dry-run
|
|
||||||
__rsync /tmp/testing \
|
|
||||||
--source /home/tester \
|
|
||||||
--rsync-opts exclude=id_rsa \
|
|
||||||
--rsync-opts dry-run
|
|
||||||
|
|
||||||
|
|
||||||
SEE ALSO
|
|
||||||
--------
|
|
||||||
:strong:`rsync`\ (1)
|
|
||||||
|
|
||||||
|
|
||||||
AUTHORS
|
AUTHORS
|
||||||
-------
|
-------
|
||||||
Nico Schottelius <nico-cdist--@--schottelius.org>
|
Ander Punnar <ander-at-kvlt-dot-ee>
|
||||||
|
|
||||||
|
|
||||||
COPYING
|
COPYING
|
||||||
-------
|
-------
|
||||||
Copyright \(C) 2015 Nico Schottelius. You can redistribute it
|
Copyright \(C) 2021 Ander Punnar. You can redistribute it and/or modify it
|
||||||
and/or modify it under the terms of the GNU General Public License as
|
under the terms of the GNU General Public License as published by the Free
|
||||||
published by the Free Software Foundation, either version 3 of the
|
Software Foundation, either version 3 of the License, or (at your option)
|
||||||
License, or (at your option) any later version.
|
any later version.
|
||||||
|
|
|
@ -1,21 +1,3 @@
|
||||||
#!/bin/sh -e
|
#!/bin/sh -e
|
||||||
#
|
|
||||||
# 2015 Dominique Roux (dominique.roux4 at gmail.com)
|
|
||||||
#
|
|
||||||
# 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/>.
|
|
||||||
#
|
|
||||||
|
|
||||||
__package rsync
|
__package rsync
|
||||||
|
|
1
cdist/conf/type/__rsync/parameter/default/options
Normal file
1
cdist/conf/type/__rsync/parameter/default/options
Normal file
|
@ -0,0 +1 @@
|
||||||
|
--recursive --links --perms --times
|
|
@ -1,4 +1,6 @@
|
||||||
destination
|
destination
|
||||||
owner
|
|
||||||
group
|
group
|
||||||
|
mode
|
||||||
|
options
|
||||||
|
owner
|
||||||
remote-user
|
remote-user
|
||||||
|
|
|
@ -1 +1 @@
|
||||||
rsync-opts
|
option
|
||||||
|
|
|
@ -38,6 +38,7 @@ cert-path
|
||||||
EXAMPLES
|
EXAMPLES
|
||||||
--------
|
--------
|
||||||
.. code-block:: sh
|
.. code-block:: sh
|
||||||
|
|
||||||
__snakeoil_cert localhost-rsa \
|
__snakeoil_cert localhost-rsa \
|
||||||
--common-name localhost \
|
--common-name localhost \
|
||||||
--key-type rsa:4096
|
--key-type rsa:4096
|
||||||
|
|
|
@ -1,6 +1,7 @@
|
||||||
#!/bin/sh -e
|
#!/bin/sh -e
|
||||||
|
|
||||||
# shellcheck disable=SC1090
|
# shellcheck disable=SC1090
|
||||||
|
# shellcheck disable=SC1091
|
||||||
file="$( . "$__type_explorer/file" )"
|
file="$( . "$__type_explorer/file" )"
|
||||||
|
|
||||||
if [ -f "$file" ]
|
if [ -f "$file" ]
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
#!/bin/sh -e
|
#!/bin/sh -e
|
||||||
|
|
||||||
update-alternatives --display "$__object_id" 2>/dev/null \
|
LC_ALL=C update-alternatives --display "${__object_id:?}" 2>/dev/null \
|
||||||
| awk -F ' - ' '/priority [0-9]+$/ { print $1 }'
|
| awk -F ' - ' '/priority [0-9]+$/ { print $1 }'
|
||||||
|
|
|
@ -18,12 +18,12 @@ for altdir in \
|
||||||
/var/lib/dpkg/alternatives \
|
/var/lib/dpkg/alternatives \
|
||||||
/var/lib/alternatives
|
/var/lib/alternatives
|
||||||
do
|
do
|
||||||
if [ ! -f "$altdir/$__object_id" ]
|
if [ ! -f "$altdir/${__object_id:?}" ]
|
||||||
then
|
then
|
||||||
continue
|
continue
|
||||||
fi
|
fi
|
||||||
|
|
||||||
link="$( awk 'NR==2' "$altdir/$__object_id" )"
|
link="$( awk 'NR==2' "$altdir/${__object_id:?}" )"
|
||||||
|
|
||||||
if [ -n "$link" ]
|
if [ -n "$link" ]
|
||||||
then
|
then
|
||||||
|
@ -31,9 +31,12 @@ do
|
||||||
fi
|
fi
|
||||||
done
|
done
|
||||||
|
|
||||||
if [ -z "$link" ]
|
if [ -z "$link" ] && [ -z "${__cdist_dry_run+dry run}" ]
|
||||||
then
|
then
|
||||||
echo "unable to get link for $__object_id" >&2
|
# NOTE: ignore error for dry-runs because a package providing the link
|
||||||
|
# might be managed by another cdist object (which wasn't executed,
|
||||||
|
# because dry run…).
|
||||||
|
echo "unable to get link for ${__object_id:?}" >&2
|
||||||
exit 1
|
exit 1
|
||||||
fi
|
fi
|
||||||
|
|
||||||
|
|
|
@ -1,11 +1,15 @@
|
||||||
#!/bin/sh -e
|
#!/bin/sh -e
|
||||||
|
|
||||||
path_is="$( update-alternatives --display "$__object_id" 2>/dev/null \
|
path_is=$(
|
||||||
| awk '/link currently points to/ {print $5}' )"
|
LC_ALL=C update-alternatives --display "${__object_id?}" 2>/dev/null \
|
||||||
|
| awk '/link currently points to/ { print $5 }')
|
||||||
|
|
||||||
if [ -z "$path_is" ]
|
if [ -z "$path_is" ] && [ -z "${__cdist_dry_run+dry run}" ]
|
||||||
then
|
then
|
||||||
echo "unable to get current path for $__object_id" >&2
|
# NOTE: ignore error for dry-runs because a package providing the
|
||||||
|
# alternative might be managed by another cdist object (which
|
||||||
|
# wasn't executed, because dry run…).
|
||||||
|
echo "unable to get current path for ${__object_id:?}" >&2
|
||||||
exit 1
|
exit 1
|
||||||
fi
|
fi
|
||||||
|
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
#!/bin/sh -e
|
#!/bin/sh -e
|
||||||
|
|
||||||
if [ -f "$( cat "$__object/parameter/path" )" ]
|
if [ -f "$( cat "${__object:?}/parameter/path" )" ]
|
||||||
then
|
then
|
||||||
echo 'present'
|
echo 'present'
|
||||||
else
|
else
|
||||||
|
|
|
@ -18,37 +18,39 @@
|
||||||
# You should have received a copy of the GNU General Public License
|
# You should have received a copy of the GNU General Public License
|
||||||
# along with cdist. If not, see <http://www.gnu.org/licenses/>.
|
# along with cdist. If not, see <http://www.gnu.org/licenses/>.
|
||||||
|
|
||||||
path_is="$( cat "$__object/explorer/path_is" )"
|
path_is="$( cat "${__object:?}/explorer/path_is" )"
|
||||||
|
|
||||||
path_should="$( cat "$__object/parameter/path" )"
|
path_should="$( cat "${__object:?}/parameter/path" )"
|
||||||
|
|
||||||
if [ "$path_is" = "$path_should" ]
|
if [ "$path_is" = "$path_should" ]
|
||||||
then
|
then
|
||||||
exit 0
|
exit 0
|
||||||
fi
|
fi
|
||||||
|
|
||||||
if [ "$( cat "$__object/explorer/path_should_state" )" = 'absent' ] && [ -z "$__cdist_dry_run" ]
|
if [ "$( cat "${__object:?}/explorer/path_should_state" )" = 'absent' ] \
|
||||||
|
&& [ -z "${__cdist_dry_run+dry run}" ]
|
||||||
then
|
then
|
||||||
echo "$path_should does not exist in target" >&2
|
echo "$path_should does not exist in target" >&2
|
||||||
exit 1
|
exit 1
|
||||||
fi
|
fi
|
||||||
|
|
||||||
name="$__object_id"
|
name=${__object_id:?}
|
||||||
|
|
||||||
alternatives="$( cat "$__object/explorer/alternatives" )"
|
if ! grep -Fxq "$path_should" "${__object:?}/explorer/alternatives"
|
||||||
|
|
||||||
if ! echo "$alternatives" | grep -Fxq "$path_should"
|
|
||||||
then
|
then
|
||||||
if [ ! -f "$__object/parameter/install" ]
|
if [ -f "${__object:?}/parameter/install" ]
|
||||||
then
|
then
|
||||||
|
link="$( cat "${__object:?}/explorer/link" )"
|
||||||
|
echo "update-alternatives --install '$link' '$name' '$path_should' 1000"
|
||||||
|
elif [ -z "${__cdist_dry_run+dry run}" ]
|
||||||
|
then
|
||||||
|
# NOTE: ignore error for dry-runs because a package providing the link
|
||||||
|
# to be installed might be managed by another cdist object (which
|
||||||
|
# wasn't executed, because dry run…).
|
||||||
echo "$path_should is not in $name alternatives." >&2
|
echo "$path_should is not in $name alternatives." >&2
|
||||||
echo 'Please install missing packages or use --install to add path to alternatives.' >&2
|
echo 'Please install missing packages or use --install to add path to alternatives.' >&2
|
||||||
exit 1
|
exit 1
|
||||||
fi
|
fi
|
||||||
|
|
||||||
link="$( cat "$__object/explorer/link" )"
|
|
||||||
|
|
||||||
echo "update-alternatives --install '$link' '$name' '$path_should' 1000"
|
|
||||||
fi
|
fi
|
||||||
|
|
||||||
echo "update-alternatives --set '$name' '$path_should'"
|
echo "update-alternatives --set '$name' '$path_should'"
|
||||||
|
|
14
cdist/log.py
14
cdist/log.py
|
@ -36,25 +36,27 @@ import threading
|
||||||
logging.OFF = logging.CRITICAL + 10 # disable logging
|
logging.OFF = logging.CRITICAL + 10 # disable logging
|
||||||
logging.addLevelName(logging.OFF, 'OFF')
|
logging.addLevelName(logging.OFF, 'OFF')
|
||||||
|
|
||||||
|
|
||||||
logging.VERBOSE = logging.INFO - 5
|
logging.VERBOSE = logging.INFO - 5
|
||||||
logging.addLevelName(logging.VERBOSE, 'VERBOSE')
|
logging.addLevelName(logging.VERBOSE, 'VERBOSE')
|
||||||
|
|
||||||
|
|
||||||
def _verbose(msg, *args, **kwargs):
|
def _verbose(self, msg, *args, **kwargs):
|
||||||
logging.log(logging.VERBOSE, msg, *args, **kwargs)
|
self.log(logging.VERBOSE, msg, args, **kwargs)
|
||||||
|
|
||||||
|
|
||||||
logging.verbose = _verbose
|
logging.Logger.verbose = _verbose
|
||||||
|
|
||||||
|
|
||||||
logging.TRACE = logging.DEBUG - 5
|
logging.TRACE = logging.DEBUG - 5
|
||||||
logging.addLevelName(logging.TRACE, 'TRACE')
|
logging.addLevelName(logging.TRACE, 'TRACE')
|
||||||
|
|
||||||
|
|
||||||
def _trace(msg, *args, **kwargs):
|
def _trace(self, msg, *args, **kwargs):
|
||||||
logging.log(logging.TRACE, msg, *args, **kwargs)
|
self.log(logging.TRACE, msg, *args, **kwargs)
|
||||||
|
|
||||||
|
|
||||||
logging.trace = _trace
|
logging.Logger.trace = _trace
|
||||||
|
|
||||||
|
|
||||||
class CdistFormatter(logging.Formatter):
|
class CdistFormatter(logging.Formatter):
|
||||||
|
|
|
@ -5,6 +5,19 @@ next:
|
||||||
* Core: Add trigger functionality (Nico Schottelius, Darko Poljak)
|
* Core: Add trigger functionality (Nico Schottelius, Darko Poljak)
|
||||||
* Core: Implement core support for python types (Darko Poljak)
|
* Core: Implement core support for python types (Darko Poljak)
|
||||||
|
|
||||||
|
6.9.8: 2021-08-24
|
||||||
|
* Type __rsync: Rewrite (Ander Punnar)
|
||||||
|
* New type: __apt_pin (Daniel Fancsali)
|
||||||
|
* Explorer os_version: Convert Devuan ceres to version number (Dennis Camera)
|
||||||
|
* Core: Fix logging bug (Dennis Camera)
|
||||||
|
* Build: Improve Makefile compatibility (Evilham)
|
||||||
|
* Type __filesystem: Support ubuntu (Joachim Desroches)
|
||||||
|
* Explorer os_version: Fall back to os-release/lsb-release file on Ubuntu (Dennis Camera)
|
||||||
|
* Explorer memory: Fix conversion of large numbers (>= 2GiB) (Dennis Camera)
|
||||||
|
* Type __update_alternatives: Fix dry run and non-English systems (Dennis Camera)
|
||||||
|
* Explorer os_version: Fix for FreeBSD < 10.0 and for legacy Mac OS X versions (Dennis Camera)
|
||||||
|
* Explorer os_version: Add bookworm and trixie debian code names, fallback to 99.99 for unknown code name in sid (Ander Punnar)
|
||||||
|
|
||||||
6.9.7: 2021-07-10
|
6.9.7: 2021-07-10
|
||||||
* New type: __postgres_conf (Beni Ruef, Dennis Camera)
|
* New type: __postgres_conf (Beni Ruef, Dennis Camera)
|
||||||
* Types __postgres_*: Improve OS support and do some cleanup (Dennis Camera)
|
* Types __postgres_*: Improve OS support and do some cleanup (Dennis Camera)
|
||||||
|
@ -146,7 +159,7 @@ next:
|
||||||
* Type __pf_ruleset: Refactor (Kamila Součková, Evil Ham)
|
* Type __pf_ruleset: Refactor (Kamila Součková, Evil Ham)
|
||||||
* Type __pf_apply: Deprecate type (Kamila Součková, Evil Ham)
|
* Type __pf_apply: Deprecate type (Kamila Součková, Evil Ham)
|
||||||
* Configuration: Add notes to cdist.cfg.skeleton (Evil Ham)
|
* Configuration: Add notes to cdist.cfg.skeleton (Evil Ham)
|
||||||
* Explorers cpu_cores, memory: Improve *BSD support (Evil Ham)
|
* Explorers cpu_cores, memory: Improve BSD support (Evil Ham)
|
||||||
* Core: Remove debug logging noise (Evil Ham)
|
* Core: Remove debug logging noise (Evil Ham)
|
||||||
|
|
||||||
6.5.4: 2020-04-11
|
6.5.4: 2020-04-11
|
||||||
|
@ -211,7 +224,7 @@ next:
|
||||||
* Documentation: PreOS english nitpicking (Evil Ham)
|
* Documentation: PreOS english nitpicking (Evil Ham)
|
||||||
* Documentation: Add installing from source with signature verification (Darko Poljak)
|
* Documentation: Add installing from source with signature verification (Darko Poljak)
|
||||||
* Core: preos: Support top command logging options, custom conf-dir option and CDIST_PATH env var (Darko Poljak)
|
* Core: preos: Support top command logging options, custom conf-dir option and CDIST_PATH env var (Darko Poljak)
|
||||||
* Type __start_on_boot: Docs: remove unsupported *BSD claim (Evil Ham)
|
* Type __start_on_boot: Docs: remove unsupported BSD claim (Evil Ham)
|
||||||
* New type: __openldap_server (Evil Ham)
|
* New type: __openldap_server (Evil Ham)
|
||||||
|
|
||||||
6.2.0: 2019-11-30
|
6.2.0: 2019-11-30
|
||||||
|
|
|
@ -12,7 +12,7 @@ This is the machine from which you will configure target hosts.
|
||||||
* /bin/sh: A POSIX like shell (for instance bash, dash, zsh)
|
* /bin/sh: A POSIX like shell (for instance bash, dash, zsh)
|
||||||
* Python >= 3.5
|
* Python >= 3.5
|
||||||
* SSH client
|
* SSH client
|
||||||
* sphinx (for building html docs and/or the man pages)
|
* sphinx with the rtd theme (for building html docs and/or the man pages)
|
||||||
|
|
||||||
Target Hosts
|
Target Hosts
|
||||||
~~~~~~~~~~~~
|
~~~~~~~~~~~~
|
||||||
|
|
|
@ -57,6 +57,7 @@ resolved name to stdout - if any. The script must be executable.
|
||||||
Simplest script:
|
Simplest script:
|
||||||
|
|
||||||
.. code-block:: sh
|
.. code-block:: sh
|
||||||
|
|
||||||
#!/bin/sh
|
#!/bin/sh
|
||||||
|
|
||||||
case "$1" in
|
case "$1" in
|
||||||
|
@ -71,6 +72,7 @@ Simplest script:
|
||||||
Resolving name from `PTR` DNS record:
|
Resolving name from `PTR` DNS record:
|
||||||
|
|
||||||
.. code-block:: sh
|
.. code-block:: sh
|
||||||
|
|
||||||
#!/bin/sh
|
#!/bin/sh
|
||||||
|
|
||||||
for cmd in dig sed; do
|
for cmd in dig sed; do
|
||||||
|
|
|
@ -56,7 +56,7 @@ master_doc = 'index'
|
||||||
|
|
||||||
# General information about the project.
|
# General information about the project.
|
||||||
project = 'cdist'
|
project = 'cdist'
|
||||||
copyright = 'ungleich GmbH 2020'
|
copyright = 'ungleich GmbH 2021'
|
||||||
# author = 'Darko Poljak'
|
# author = 'Darko Poljak'
|
||||||
|
|
||||||
# The version info for the project you're documenting, acts as replacement for
|
# The version info for the project you're documenting, acts as replacement for
|
||||||
|
|
Loading…
Reference in a new issue