forked from ungleich-public/cdist
		
	Merge branch 'master' into ander/__sed
This commit is contained in:
		
				commit
				
					
						fcd730f905
					
				
			
		
					 32 changed files with 1432 additions and 302 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
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
										
											
												File diff suppressed because it is too large
												Load diff
											
										
									
								
							| 
						 | 
				
			
			@ -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,39 +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
 | 
			
		||||
 | 
			
		||||
echo rsync -a \
 | 
			
		||||
    --no-owner --no-group \
 | 
			
		||||
    -q "$@" "${source}/" "${remote_user}@${__target_host}:${destination}"
 | 
			
		||||
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
 | 
			
		||||
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):
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -2,6 +2,22 @@ Changelog
 | 
			
		|||
---------
 | 
			
		||||
 | 
			
		||||
next:
 | 
			
		||||
	* Explorer machine_type: Rewrite (Dennis Camera)
 | 
			
		||||
 | 
			
		||||
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)
 | 
			
		||||
	* Type __apt_key_uri: Deprecate in favour of __apt_key --uri (Evilham)
 | 
			
		||||
| 
						 | 
				
			
			@ -13,6 +29,7 @@ next:
 | 
			
		|||
	* Type __debconf_set_selections: Add state explorer (Dennis Camera)
 | 
			
		||||
	* Core: Implement usable cdist scan (Timothée Floure)
 | 
			
		||||
	* New type: __snakeoil_cert (Ander Punnar)
 | 
			
		||||
	* Type __rsync: Honour $__remote_exec env var (Daniel Fancsali)
 | 
			
		||||
 | 
			
		||||
6.9.6: 2021-04-20
 | 
			
		||||
	* Type __pyvenv: Fix user example in man page (Dennis Camera)
 | 
			
		||||
| 
						 | 
				
			
			@ -141,7 +158,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
 | 
			
		||||
| 
						 | 
				
			
			@ -206,7 +223,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
 | 
			
		||||
| 
						 | 
				
			
			@ -1065,9 +1082,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…
	
	Add table
		Add a link
		
	
		Reference in a new issue