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
|
||||
TYPEDIR=./cdist/conf/type
|
||||
|
||||
SPHINXM=make -C $(DOCS_SRC_DIR) man
|
||||
SPHINXH=make -C $(DOCS_SRC_DIR) html
|
||||
SPHINXC=make -C $(DOCS_SRC_DIR) clean
|
||||
SPHINXM=$(MAKE) -C $(DOCS_SRC_DIR) man
|
||||
SPHINXH=$(MAKE) -C $(DOCS_SRC_DIR) html
|
||||
SPHINXC=$(MAKE) -C $(DOCS_SRC_DIR) clean
|
||||
|
||||
################################################################################
|
||||
# Manpages
|
||||
|
|
|
@ -27,19 +27,18 @@
|
|||
str2bytes() {
|
||||
awk -F' ' '
|
||||
$2 == "B" || !$2 { print $1 }
|
||||
$2 == "kB" { print $1 * 1000 }
|
||||
$2 == "MB" { print $1 * 1000 * 1000 }
|
||||
$2 == "GB" { print $1 * 1000 * 1000 * 1000 }
|
||||
$2 == "TB" { print $1 * 1000 * 1000 * 1000 * 1000 }
|
||||
$2 == "kiB" { print $1 * 1024 }
|
||||
$2 == "MiB" { print $1 * 1024 * 1024 }
|
||||
$2 == "GiB" { print $1 * 1024 * 1024 * 1024 }
|
||||
$2 == "TiB" { print $1 * 1024 * 1024 * 1024 * 1024 }'
|
||||
$2 == "kB" { printf "%.f\n", ($1 * 1000) }
|
||||
$2 == "MB" { printf "%.f\n", ($1 * 1000 * 1000) }
|
||||
$2 == "GB" { printf "%.f\n", ($1 * 1000 * 1000 * 1000) }
|
||||
$2 == "TB" { printf "%.f\n", ($1 * 1000 * 1000 * 1000 * 1000) }
|
||||
$2 == "kiB" { printf "%.f\n", ($1 * 1024) }
|
||||
$2 == "MiB" { printf "%.f\n", ($1 * 1024 * 1024) }
|
||||
$2 == "GiB" { printf "%.f\n", ($1 * 1024 * 1024 * 1024) }
|
||||
$2 == "TiB" { printf "%.f\n", ($1 * 1024 * 1024 * 1024 * 1024) }'
|
||||
}
|
||||
|
||||
bytes2kib() {
|
||||
set -- "$(cat)"
|
||||
test "$1" -gt 0 && echo $(($1 / 1024))
|
||||
awk '$0 > 0 { printf "%.f\n", ($0 / 1024) }'
|
||||
}
|
||||
|
||||
|
||||
|
|
|
@ -1,6 +1,7 @@
|
|||
#!/bin/sh
|
||||
#!/bin/sh -e
|
||||
#
|
||||
# 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.
|
||||
#
|
||||
|
@ -17,12 +18,22 @@
|
|||
# You should have received a copy of the GNU General Public License
|
||||
# along with cdist. If not, see <http://www.gnu.org/licenses/>.
|
||||
#
|
||||
#
|
||||
# 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)
|
||||
cat /etc/system-release
|
||||
;;
|
||||
|
@ -43,6 +54,8 @@ case "$("$__explorer/os")" in
|
|||
# sid versions don't have a number, so we decode by codename:
|
||||
case $(expr "$debian_version" : '\([a-z]\{1,\}\)/')
|
||||
in
|
||||
trixie) echo 12.99 ;;
|
||||
bookworm) echo 11.99 ;;
|
||||
bullseye) echo 10.99 ;;
|
||||
buster) echo 9.99 ;;
|
||||
stretch) echo 8.99 ;;
|
||||
|
@ -50,7 +63,7 @@ case "$("$__explorer/os")" in
|
|||
wheezy) echo 6.99 ;;
|
||||
squeeze) echo 5.99 ;;
|
||||
lenny) echo 4.99 ;;
|
||||
*) exit 1
|
||||
*) echo 99.99 ;;
|
||||
esac
|
||||
;;
|
||||
*)
|
||||
|
@ -59,7 +72,23 @@ case "$("$__explorer/os")" in
|
|||
esac
|
||||
;;
|
||||
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)
|
||||
cat /etc/fedora-release
|
||||
|
@ -68,12 +97,20 @@ case "$("$__explorer/os")" in
|
|||
cat /etc/gentoo-release
|
||||
;;
|
||||
macosx)
|
||||
sw_vers -productVersion
|
||||
# NOTE: Legacy versions (< 10.3) do not support options
|
||||
sw_vers | awk -F ':[ \t]+' '$1 == "ProductVersion" { print $2 }'
|
||||
;;
|
||||
freebsd)
|
||||
# Apparently uname -r is not a reliable way to get the patch level.
|
||||
# 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)
|
||||
uname -r
|
||||
|
@ -98,7 +135,20 @@ case "$("$__explorer/os")" in
|
|||
fi
|
||||
;;
|
||||
ubuntu)
|
||||
lsb_release -sr
|
||||
if command -v lsb_release >/dev/null 2>&1
|
||||
then
|
||||
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)
|
||||
cat /etc/alpine-release
|
||||
|
|
|
@ -28,6 +28,7 @@
|
|||
# lsb_release may not be given in all installations
|
||||
codename_os_release() {
|
||||
# shellcheck disable=SC1090
|
||||
# shellcheck disable=SC1091
|
||||
. "$__global/explorer/os_release"
|
||||
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
|
||||
|
||||
case "$os" in
|
||||
alpine|centos|fedora|redhat|suse|gentoo)
|
||||
alpine|centos|fedora|gentoo|redhat|suse|ubuntu)
|
||||
if [ ! -x "$(command -v lsblk)" ]; then
|
||||
echo "lsblk is required for __filesystem type" >&2
|
||||
exit 1
|
||||
|
|
|
@ -37,6 +37,7 @@ assert () # If condition false,
|
|||
then
|
||||
echo "Assertion failed: \"$1\""
|
||||
# shellcheck disable=SC2039
|
||||
# shellcheck disable=SC3044
|
||||
echo "File \"$0\", line $lineno, called by $(caller 0)"
|
||||
exit $E_ASSERT_FAILED
|
||||
fi
|
||||
|
|
|
@ -1,41 +1,104 @@
|
|||
#!/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")
|
||||
remote_user=$(cat "$__object/parameter/remote-user")
|
||||
if ! command -v rsync > /dev/null
|
||||
then
|
||||
echo 'rsync is missing in local machine' >&2
|
||||
exit 1
|
||||
fi
|
||||
|
||||
if [ -f "$__object/parameter/destination" ]; then
|
||||
destination=$(cat "$__object/parameter/destination")
|
||||
src="$( cat "$__object/parameter/source" )"
|
||||
|
||||
if [ ! -e "$src" ]
|
||||
then
|
||||
echo "$src not found" >&2
|
||||
exit 1
|
||||
fi
|
||||
|
||||
if [ -f "$__object/parameter/destination" ]
|
||||
then
|
||||
dst="$( cat "$__object/parameter/destination" )"
|
||||
else
|
||||
destination="/$__object_id"
|
||||
dst="/$__object_id"
|
||||
fi
|
||||
|
||||
set --
|
||||
if [ -f "$__object/parameter/rsync-opts" ]; then
|
||||
while read -r opts; do
|
||||
set -- "$@" "--$opts"
|
||||
done < "$__object/parameter/rsync-opts"
|
||||
# if source is directory, then make sure that
|
||||
# source and destination are ending with slash,
|
||||
# because this is what you almost always want when
|
||||
# rsyncing two directories.
|
||||
|
||||
if [ -d "$src" ]
|
||||
then
|
||||
if ! echo "$src" | grep -Eq '/$'
|
||||
then
|
||||
src="$src/"
|
||||
fi
|
||||
|
||||
if ! echo "$dst" | grep -Eq '/$'
|
||||
then
|
||||
dst="$dst/"
|
||||
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
|
||||
echo rsync -a \
|
||||
--no-owner --no-group \
|
||||
-e \"${__remote_exec}\" \
|
||||
-q "$@" "${source}/" "${remote_user}@${__target_host}:${destination}"
|
||||
if ! rsync --dry-run --itemize-changes $options "$src" "$remote_user@$__target_host:$dst" \
|
||||
| grep -E '^(<|>|c|h|\.|\*)[fdL][cstTpogunbax\.\+\?]+\s' >&2
|
||||
then
|
||||
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
|
||||
----
|
||||
cdist-type__rsync - Mirror directories using rsync
|
||||
cdist-type__rsync - Mirror directories using ``rsync``
|
||||
|
||||
|
||||
DESCRIPTION
|
||||
-----------
|
||||
WARNING: This type is of BETA quality:
|
||||
|
||||
- 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.
|
||||
The purpose of this type is to bring power of ``rsync`` into ``cdist``.
|
||||
|
||||
|
||||
REQUIRED PARAMETERS
|
||||
-------------------
|
||||
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
|
||||
-------------------
|
||||
group
|
||||
Group to chgrp to.
|
||||
destination
|
||||
Destination directory. Defaults to ``$__object_id``.
|
||||
|
||||
owner
|
||||
User to chown to.
|
||||
Will be passed to ``rsync`` as ``--chown=OWNER``.
|
||||
Read ``rsync(1)`` for more details.
|
||||
|
||||
destination
|
||||
Use this as the base destination instead of the object id
|
||||
group
|
||||
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
|
||||
Use this user instead of the default "root" for rsync operations.
|
||||
Defaults to ``root``.
|
||||
|
||||
|
||||
OPTIONAL MULTIPLE PARAMETERS
|
||||
----------------------------
|
||||
rsync-opts
|
||||
Use this option to give rsync options with.
|
||||
See rsync(1) for available options.
|
||||
Only "--" options are supported.
|
||||
Write the options without the beginning "--"
|
||||
Can be specified multiple times.
|
||||
|
||||
|
||||
MESSAGES
|
||||
--------
|
||||
NONE
|
||||
option
|
||||
Pass additional options to ``rsync``.
|
||||
See ``rsync(1)`` for all possible options.
|
||||
Due to `bug in Python's argparse<https://bugs.python.org/issue9334>`_, value must be prefixed with ``\``.
|
||||
|
||||
|
||||
EXAMPLES
|
||||
--------
|
||||
|
||||
.. code-block:: sh
|
||||
|
||||
# You can use any source directory
|
||||
__rsync /tmp/testdir \
|
||||
--source /etc
|
||||
|
||||
# Use source from type
|
||||
__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)
|
||||
__rsync /var/www/example.com \
|
||||
--owner root \
|
||||
--group www-data \
|
||||
--mode 'D750,F640' \
|
||||
--source "$__files/example.com/www"
|
||||
|
||||
|
||||
AUTHORS
|
||||
-------
|
||||
Nico Schottelius <nico-cdist--@--schottelius.org>
|
||||
Ander Punnar <ander-at-kvlt-dot-ee>
|
||||
|
||||
|
||||
COPYING
|
||||
-------
|
||||
Copyright \(C) 2015 Nico Schottelius. 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.
|
||||
Copyright \(C) 2021 Ander Punnar. 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.
|
||||
|
|
|
@ -1,21 +1,3 @@
|
|||
#!/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
|
||||
|
|
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
|
||||
owner
|
||||
group
|
||||
mode
|
||||
options
|
||||
owner
|
||||
remote-user
|
||||
|
|
|
@ -1 +1 @@
|
|||
rsync-opts
|
||||
option
|
||||
|
|
|
@ -38,6 +38,7 @@ cert-path
|
|||
EXAMPLES
|
||||
--------
|
||||
.. code-block:: sh
|
||||
|
||||
__snakeoil_cert localhost-rsa \
|
||||
--common-name localhost \
|
||||
--key-type rsa:4096
|
||||
|
|
|
@ -1,6 +1,7 @@
|
|||
#!/bin/sh -e
|
||||
|
||||
# shellcheck disable=SC1090
|
||||
# shellcheck disable=SC1091
|
||||
file="$( . "$__type_explorer/file" )"
|
||||
|
||||
if [ -f "$file" ]
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
#!/bin/sh -e
|
||||
|
||||
update-alternatives --display "$__object_id" 2>/dev/null \
|
||||
| awk -F ' - ' '/priority [0-9]+$/ { print $1 }'
|
||||
LC_ALL=C update-alternatives --display "${__object_id:?}" 2>/dev/null \
|
||||
| awk -F ' - ' '/priority [0-9]+$/ { print $1 }'
|
||||
|
|
|
@ -18,12 +18,12 @@ for altdir in \
|
|||
/var/lib/dpkg/alternatives \
|
||||
/var/lib/alternatives
|
||||
do
|
||||
if [ ! -f "$altdir/$__object_id" ]
|
||||
if [ ! -f "$altdir/${__object_id:?}" ]
|
||||
then
|
||||
continue
|
||||
fi
|
||||
|
||||
link="$( awk 'NR==2' "$altdir/$__object_id" )"
|
||||
link="$( awk 'NR==2' "$altdir/${__object_id:?}" )"
|
||||
|
||||
if [ -n "$link" ]
|
||||
then
|
||||
|
@ -31,9 +31,12 @@ do
|
|||
fi
|
||||
done
|
||||
|
||||
if [ -z "$link" ]
|
||||
if [ -z "$link" ] && [ -z "${__cdist_dry_run+dry run}" ]
|
||||
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
|
||||
fi
|
||||
|
||||
|
|
|
@ -1,11 +1,15 @@
|
|||
#!/bin/sh -e
|
||||
|
||||
path_is="$( update-alternatives --display "$__object_id" 2>/dev/null \
|
||||
| awk '/link currently points to/ {print $5}' )"
|
||||
path_is=$(
|
||||
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
|
||||
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
|
||||
fi
|
||||
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
#!/bin/sh -e
|
||||
|
||||
if [ -f "$( cat "$__object/parameter/path" )" ]
|
||||
if [ -f "$( cat "${__object:?}/parameter/path" )" ]
|
||||
then
|
||||
echo 'present'
|
||||
else
|
||||
|
|
|
@ -18,37 +18,39 @@
|
|||
# You should have received a copy of the GNU General Public License
|
||||
# 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" ]
|
||||
then
|
||||
exit 0
|
||||
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
|
||||
echo "$path_should does not exist in target" >&2
|
||||
exit 1
|
||||
fi
|
||||
|
||||
name="$__object_id"
|
||||
name=${__object_id:?}
|
||||
|
||||
alternatives="$( cat "$__object/explorer/alternatives" )"
|
||||
|
||||
if ! echo "$alternatives" | grep -Fxq "$path_should"
|
||||
if ! grep -Fxq "$path_should" "${__object:?}/explorer/alternatives"
|
||||
then
|
||||
if [ ! -f "$__object/parameter/install" ]
|
||||
if [ -f "${__object:?}/parameter/install" ]
|
||||
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 'Please install missing packages or use --install to add path to alternatives.' >&2
|
||||
exit 1
|
||||
fi
|
||||
|
||||
link="$( cat "$__object/explorer/link" )"
|
||||
|
||||
echo "update-alternatives --install '$link' '$name' '$path_should' 1000"
|
||||
fi
|
||||
|
||||
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.addLevelName(logging.OFF, 'OFF')
|
||||
|
||||
|
||||
logging.VERBOSE = logging.INFO - 5
|
||||
logging.addLevelName(logging.VERBOSE, 'VERBOSE')
|
||||
|
||||
|
||||
def _verbose(msg, *args, **kwargs):
|
||||
logging.log(logging.VERBOSE, msg, *args, **kwargs)
|
||||
def _verbose(self, msg, *args, **kwargs):
|
||||
self.log(logging.VERBOSE, msg, args, **kwargs)
|
||||
|
||||
|
||||
logging.verbose = _verbose
|
||||
logging.Logger.verbose = _verbose
|
||||
|
||||
|
||||
logging.TRACE = logging.DEBUG - 5
|
||||
logging.addLevelName(logging.TRACE, 'TRACE')
|
||||
|
||||
|
||||
def _trace(msg, *args, **kwargs):
|
||||
logging.log(logging.TRACE, msg, *args, **kwargs)
|
||||
def _trace(self, msg, *args, **kwargs):
|
||||
self.log(logging.TRACE, msg, *args, **kwargs)
|
||||
|
||||
|
||||
logging.trace = _trace
|
||||
logging.Logger.trace = _trace
|
||||
|
||||
|
||||
class CdistFormatter(logging.Formatter):
|
||||
|
|
|
@ -5,6 +5,19 @@ next:
|
|||
* Core: Add trigger functionality (Nico Schottelius, 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
|
||||
* New type: __postgres_conf (Beni Ruef, 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_apply: Deprecate type (Kamila Součková, 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)
|
||||
|
||||
6.5.4: 2020-04-11
|
||||
|
@ -211,7 +224,7 @@ next:
|
|||
* Documentation: PreOS english nitpicking (Evil Ham)
|
||||
* 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)
|
||||
* 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)
|
||||
|
||||
6.2.0: 2019-11-30
|
||||
|
@ -1070,9 +1083,9 @@ next:
|
|||
* Removed type __removeline (replaced by __line) (Nico Schottelius)
|
||||
* Type __directory: Parameter --parents and --recursive are now boolean (Nico Schottelius)
|
||||
* Type __package_apt, __package_luarocks, __package_opkg,
|
||||
__package_pacman, __package_pkg_freebsd, __package_pkg_openbsd,
|
||||
__package_rubygem, __package_yum, __process:
|
||||
Parameter state accepts only "present" and "absent" (Nico Schottelius)
|
||||
__package_pacman, __package_pkg_freebsd, __package_pkg_openbsd,
|
||||
__package_rubygem, __package_yum, __process:
|
||||
Parameter state accepts only "present" and "absent" (Nico Schottelius)
|
||||
* Dist: Initial support for pypi packaging (Nico Schottelius)
|
||||
|
||||
2.0.15: 2012-11-02
|
||||
|
|
|
@ -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)
|
||||
* Python >= 3.5
|
||||
* 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
|
||||
~~~~~~~~~~~~
|
||||
|
|
|
@ -57,6 +57,7 @@ resolved name to stdout - if any. The script must be executable.
|
|||
Simplest script:
|
||||
|
||||
.. code-block:: sh
|
||||
|
||||
#!/bin/sh
|
||||
|
||||
case "$1" in
|
||||
|
@ -71,6 +72,7 @@ Simplest script:
|
|||
Resolving name from `PTR` DNS record:
|
||||
|
||||
.. code-block:: sh
|
||||
|
||||
#!/bin/sh
|
||||
|
||||
for cmd in dig sed; do
|
||||
|
|
|
@ -56,7 +56,7 @@ master_doc = 'index'
|
|||
|
||||
# General information about the project.
|
||||
project = 'cdist'
|
||||
copyright = 'ungleich GmbH 2020'
|
||||
copyright = 'ungleich GmbH 2021'
|
||||
# author = 'Darko Poljak'
|
||||
|
||||
# The version info for the project you're documenting, acts as replacement for
|
||||
|
|
Loading…
Reference in a new issue