diff --git a/Makefile b/Makefile
index f89ac1e7..3712511c 100644
--- a/Makefile
+++ b/Makefile
@@ -81,7 +81,7 @@ version:
}
# Manpages #3: generic part
-man: version $(MANTYPES) $(DOCSREF)
+man: version configskel $(MANTYPES) $(DOCSREF) $(DOCSTYPESREF)
$(SPHINXM)
html: version configskel $(MANTYPES) $(DOCSREF) $(DOCSTYPESREF)
@@ -104,7 +104,7 @@ DOTMANTYPES=$(subst /man.rst,.rst,$(DOTMANTYPEPREFIX))
$(DOTMAN7DSTDIR)/cdist-type%.rst: $(DOTTYPEDIR)/%/man.rst
ln -sf "$^" $@
-dotman: version $(DOTMANTYPES)
+dotman: version configskel $(DOTMANTYPES) $(DOCSREF) $(DOCSTYPESREF)
$(SPHINXM)
################################################################################
diff --git a/cdist/conf/explorer/os b/cdist/conf/explorer/os
index 2d2aede6..46d87f3e 100755
--- a/cdist/conf/explorer/os
+++ b/cdist/conf/explorer/os
@@ -144,7 +144,9 @@ esac
if [ -f /etc/os-release ]; then
# after sles15, suse don't provide an /etc/SuSE-release anymore, but there is almost no difference between sles and opensuse leap, so call it suse
- if grep -q ^ID_LIKE=\"suse\" /etc/os-release 2>/dev/null; then
+ # shellcheck disable=SC1091
+ if (. /etc/os-release && echo "${ID_LIKE}" | grep -q '\(^\|\ \)suse\($\|\ \)')
+ then
echo suse
exit 0
fi
diff --git a/cdist/conf/explorer/os_version b/cdist/conf/explorer/os_version
index 1d54ea60..a7b1d3bc 100755
--- a/cdist/conf/explorer/os_version
+++ b/cdist/conf/explorer/os_version
@@ -31,7 +31,32 @@ case "$("$__explorer/os")" in
cat /etc/arch-release
;;
debian)
- cat /etc/debian_version
+ debian_version=$(cat /etc/debian_version)
+ case $debian_version
+ in
+ testing/unstable)
+ # previous to Debian 4.0 testing/unstable was used
+ # cf. https://metadata.ftp-master.debian.org/changelogs/main/b/base-files/base-files_11_changelog
+ echo 3.99
+ ;;
+ */sid)
+ # sid versions don't have a number, so we decode by codename:
+ case $(expr "$debian_version" : '\([a-z]\{1,\}\)/')
+ in
+ bullseye) echo 10.99 ;;
+ buster) echo 9.99 ;;
+ stretch) echo 8.99 ;;
+ jessie) echo 7.99 ;;
+ wheezy) echo 6.99 ;;
+ squeeze) echo 5.99 ;;
+ lenny) echo 4.99 ;;
+ *) exit 1
+ esac
+ ;;
+ *)
+ echo "$debian_version"
+ ;;
+ esac
;;
devuan)
cat /etc/devuan_version
@@ -73,4 +98,4 @@ case "$("$__explorer/os")" in
alpine)
cat /etc/alpine-release
;;
-esac
\ No newline at end of file
+esac
diff --git a/cdist/conf/type/__download/man.rst b/cdist/conf/type/__download/man.rst
index 6ec0b19a..eb3ac971 100644
--- a/cdist/conf/type/__download/man.rst
+++ b/cdist/conf/type/__download/man.rst
@@ -30,9 +30,6 @@ sum
By default output of ``cksum`` without filename is expected.
Other hash formats supported with prefixes: ``md5:``, ``sha1:`` and ``sha256:``.
-onchange
- Execute this command after download.
-
OPTIONAL PARAMETERS
-------------------
@@ -54,6 +51,9 @@ cmd-sum
format specification ``%s`` which will become destination.
For example: ``md5sum '%s' | awk '{print $1}'``.
+onchange
+ Execute this command after download.
+
EXAMPLES
--------
diff --git a/cdist/conf/type/__filesystem/explorer/lsblk b/cdist/conf/type/__filesystem/explorer/lsblk
index 9ae544ac..9be3c575 100644
--- a/cdist/conf/type/__filesystem/explorer/lsblk
+++ b/cdist/conf/type/__filesystem/explorer/lsblk
@@ -18,16 +18,16 @@
# along with cdist. If not, see .
#
-os=$("$__explorer/os")
+os=$("${__explorer:?}/os")
-if [ -f "$__object/parameter/device" ]; then
+if [ -f "${__object:?}/parameter/device" ]; then
blkdev="$(cat "$__object/parameter/device")"
else
- blkdev="$__object_id"
+ blkdev="${__object_id:?}"
fi
case "$os" in
- centos|fedora|redhat|suse|gentoo)
+ alpine|centos|fedora|redhat|suse|gentoo)
if [ ! -x "$(command -v lsblk)" ]; then
echo "lsblk is required for __filesystem type" >&2
exit 1
diff --git a/cdist/conf/type/__locale_system/manifest b/cdist/conf/type/__locale_system/manifest
index e4286ef6..4b996ebc 100755
--- a/cdist/conf/type/__locale_system/manifest
+++ b/cdist/conf/type/__locale_system/manifest
@@ -24,6 +24,22 @@
# Configure system-wide locale by modifying i18n file.
#
+version_ge() {
+ awk -F '[^0-9.]' -v target="${1:?}" '
+ function max(x, y) { return x > y ? x : y }
+ BEGIN {
+ getline
+ nx = split($1, x, ".")
+ ny = split(target, y, ".")
+ for (i = 1; i <= max(nx, ny); ++i) {
+ diff = int(x[i]) - int(y[i])
+ if (diff == 0) continue
+ exit (diff < 0)
+ }
+ }'
+}
+
+
key=$__object_id
onchange_cmd= # none, by default
quote_value=false
@@ -40,8 +56,7 @@ os=$(cat "$__global/explorer/os")
case $os
in
debian)
- os_version=$(cat "${__global}/explorer/os_version")
- if expr "${os_version}" '>=' 4 >/dev/null
+ if version_ge 4 <"${__global}/explorer/os_version"
then
# Debian 4 (etch) and later
locale_conf="/etc/default/locale"
@@ -53,8 +68,7 @@ in
locale_conf="/etc/default/locale"
;;
ubuntu)
- os_version=$(cat "${__global}/explorer/os_version")
- if expr "${os_version}" '>=' 6.10 >/dev/null
+ if version_ge 6.10 <"${__global}/explorer/os_version"
then
# Ubuntu 6.10 (edgy) and later
locale_conf="/etc/default/locale"
@@ -68,7 +82,7 @@ in
centos|redhat|scientific)
# shellcheck source=/dev/null
version_id=$(. "${__global}/explorer/os_release" && echo "${VERSION_ID:-0}")
- if expr "${version_id}" '>=' 7 >/dev/null
+ if echo "${version_id}" | version_ge 7
then
locale_conf="/etc/locale.conf"
else
@@ -78,7 +92,7 @@ in
fedora)
# shellcheck source=/dev/null
version_id=$(. "${__global}/explorer/os_release" && echo "${VERSION_ID:-0}")
- if expr "${version_id}" '>=' 18 >/dev/null
+ if echo "${version_id}" | version_ge 18
then
locale_conf="/etc/locale.conf"
quote_value=false
@@ -113,7 +127,7 @@ in
locale_conf="/etc/default/init"
locale_conf_group="sys"
- if expr "$(cat "${__global}/explorer/os_version")" '>=' 5.11 >/dev/null
+ if version_ge 5.11 <"${__global}/explorer/os_version"
then
# mode on Oracle Solaris 11 is actually 0444,
# but the write bit makes sense, IMO
@@ -149,7 +163,13 @@ in
key="export ${__object_id}"
;;
suse)
- os_version=$(cat "${__global}/explorer/os_version")
+ if test -s "${__global}/explorer/os_release"
+ then
+ # shellcheck source=/dev/null
+ os_version=$(. "${__global}/explorer/os_release" && echo "${VERSION}")
+ else
+ os_version=$(sed -n 's/^VERSION\ *=\ *//p' "${__global}/explorer/os_version")
+ fi
os_major=$(expr "${os_version}" : '\([0-9]\{1,\}\)')
# https://documentation.suse.com/sles/15-SP2/html/SLES-all/cha-suse.html#sec-suse-l10n
diff --git a/cdist/conf/type/__openldap_server/man.rst b/cdist/conf/type/__openldap_server/man.rst
index a96c7dad..fa714ec0 100644
--- a/cdist/conf/type/__openldap_server/man.rst
+++ b/cdist/conf/type/__openldap_server/man.rst
@@ -31,8 +31,8 @@ manager-password-hash
Generate e.g. with: `slappasswd -s weneedgoodsecurity`.
See `slappasswd(8C)`, `slapd.conf(5)`.
TODO: implement this: http://blog.adamsbros.org/2015/06/09/openldap-ssha-salted-hashes-by-hand/
- to derive from the manager-password parameter and ensure idempotency (care with salts).
- At that point, manager-password-hash should be deprecated and ignored.
+ to derive from the manager-password parameter and ensure idempotency (care with salts).
+ At that point, manager-password-hash should be deprecated and ignored.
serverid
The server for the directory.
diff --git a/cdist/conf/type/__systemd_service/man.rst b/cdist/conf/type/__systemd_service/man.rst
index 7eca398b..cd14c985 100644
--- a/cdist/conf/type/__systemd_service/man.rst
+++ b/cdist/conf/type/__systemd_service/man.rst
@@ -1,9 +1,10 @@
-cdist-type__systemd-service(7)
+cdist-type__systemd_service(7)
==============================
NAME
----
-cdist-type__systemd-service - Controls a systemd service state
+cdist-type__systemd_service - Controls a systemd service state
+
DESCRIPTION
-----------
@@ -14,11 +15,12 @@ service after configuration applied or shutdown one service.
The activation or deactivation is out of scope. Look for the
:strong:`cdist-type__systemd_util`\ (7) type instead.
+
REQUIRED PARAMETERS
-------------------
-
None.
+
OPTIONAL PARAMETERS
-------------------
@@ -31,12 +33,12 @@ state
running
Service should run (default)
- stoppend
- Service should stopped
+ stopped
+ Service should be stopped
action
Executes an action on on the service. It will only execute it if the
- service keeps the state **running**. There are following actions, where:
+ service keeps the state ``running``. There are following actions, where:
reload
Reloads the service
@@ -48,11 +50,12 @@ BOOLEAN PARAMETERS
------------------
if-required
- Only execute the action if minimum one required type outputs a message to
- **$__messages_out**. Through this, the action should only executed if a
+ Only execute the action if at minimum one required type outputs a message
+ to ``$__messages_out``. Through this, the action should only executed if a
dependency did something. The action will not executed if no dependencies
given.
+
MESSAGES
--------
@@ -68,12 +71,14 @@ restart
reload
Reloaded the service
+
ABORTS
------
Aborts in following cases:
systemd or the service does not exist
+
EXAMPLES
--------
.. code-block:: sh
@@ -95,13 +100,15 @@ EXAMPLES
# reload the service for a modified configuration file
# only reloads the service if the file really changed
- require="__config_file/etc/foo.conf" __systemd_service foo \
+ require="__file/etc/foo.conf" __systemd_service foo \
--action reload --if-required
+
AUTHORS
-------
Matthias Stecher
+
COPYRIGHT
---------
Copyright \(C) 2020 Matthias Stecher. You can redistribute it
diff --git a/cdist/conf/type/__timezone/gencode-remote b/cdist/conf/type/__timezone/gencode-remote
index 5299f548..b685c990 100755
--- a/cdist/conf/type/__timezone/gencode-remote
+++ b/cdist/conf/type/__timezone/gencode-remote
@@ -22,7 +22,7 @@
# This type allows to configure the desired localtime timezone.
timezone_is=$(cat "$__object/explorer/timezone_is")
-timezone_should="$__object_id"
+timezone_should=$(cat "$__object/parameter/tz")
os=$(cat "$__global/explorer/os")
if [ "$timezone_is" = "$timezone_should" ]; then
diff --git a/cdist/conf/type/__timezone/man.rst b/cdist/conf/type/__timezone/man.rst
index 8a945c16..6012c552 100644
--- a/cdist/conf/type/__timezone/man.rst
+++ b/cdist/conf/type/__timezone/man.rst
@@ -14,7 +14,8 @@ This type creates a symlink (/etc/localtime) to the selected timezone
REQUIRED PARAMETERS
-------------------
-None.
+tz
+ The name of timezone to set.
OPTIONAL PARAMETERS
@@ -27,19 +28,24 @@ EXAMPLES
.. code-block:: sh
- #Set up Europe/Andorra as our timezone.
- __timezone Europe/Andorra
+ # Set up Europe/Andorra as our timezone.
+ __timezone --tz Europe/Andorra
- #Set up US/Central as our timezone.
- __timezone US/Central
+ # Set up US/Central as our timezone.
+ __timezone --tz US/Central
AUTHORS
-------
-Ramon Salvadó
+| Steven Armstrong
+| Nico Schottelius
+| Ramon Salvadó
+| Dennis Camera
COPYING
-------
-Free use of this software is
-granted under the terms of the GNU General Public License version 3 (GPLv3).
+Copyright \(C) 2012-2020 the `AUTHORS`_. 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.
diff --git a/cdist/conf/type/__timezone/manifest b/cdist/conf/type/__timezone/manifest
index 3d28ccba..0eb7fb9c 100755
--- a/cdist/conf/type/__timezone/manifest
+++ b/cdist/conf/type/__timezone/manifest
@@ -22,7 +22,7 @@
#
# This type allows to configure the desired localtime timezone.
-timezone="$__object_id"
+timezone=$(cat "$__object/parameter/tz")
os=$(cat "$__global/explorer/os")
case "$os" in
diff --git a/cdist/conf/type/__timezone/parameter/required b/cdist/conf/type/__timezone/parameter/required
new file mode 100644
index 00000000..975445e4
--- /dev/null
+++ b/cdist/conf/type/__timezone/parameter/required
@@ -0,0 +1 @@
+tz
diff --git a/cdist/conf/type/__timezone/singleton b/cdist/conf/type/__timezone/singleton
new file mode 100644
index 00000000..e69de29b
diff --git a/cdist/conf/type/__unpack/gencode-remote b/cdist/conf/type/__unpack/gencode-remote
index 45c7173a..c4451f73 100755
--- a/cdist/conf/type/__unpack/gencode-remote
+++ b/cdist/conf/type/__unpack/gencode-remote
@@ -23,6 +23,13 @@ case "$src" in
cmd="$cmd --strip-components=$tar_strip"
fi
+
+ if [ -f "$__object/parameter/tar-extra-args" ]
+ then
+ tar_extra_args="$( cat "$__object/parameter/tar-extra-args" )"
+
+ cmd="$cmd $tar_extra_args"
+ fi
;;
*.7z)
case "$os" in
@@ -73,3 +80,8 @@ if [ ! -f "$__object/parameter/preserve-archive" ]
then
echo "rm -f '$src'"
fi
+
+if [ -f "$__object/parameter/onchange" ]
+then
+ cat "$__object/parameter/onchange"
+fi
diff --git a/cdist/conf/type/__unpack/man.rst b/cdist/conf/type/__unpack/man.rst
index 8fe96e43..daa03814 100644
--- a/cdist/conf/type/__unpack/man.rst
+++ b/cdist/conf/type/__unpack/man.rst
@@ -33,6 +33,10 @@ sum-file
tar-strip
Tarball specific. See ``man tar`` for ``--strip-components``.
+tar-extra-args
+ Tarball sepcific. Append additional arguments to ``tar`` command.
+ See ``man tar`` for possible arguments.
+
OPTIONAL BOOLEAN PARAMETERS
---------------------------
@@ -46,6 +50,9 @@ backup-destination
preserve-archive
Don't delete archive after unpacking.
+onchange
+ Execute this command after unpack.
+
EXAMPLES
--------
@@ -65,6 +72,13 @@ EXAMPLES
--preserve-archive \
--destination /opt/cpma/server
+ # example usecase for --tar-* args
+ __unpack /root/strelaysrv.tar.gz \
+ --preserve-archive \
+ --destination /usr/local/bin \
+ --tar-strip 1 \
+ --tar-extra-args '--wildcards "*/strelaysrv"'
+
AUTHORS
-------
diff --git a/cdist/conf/type/__unpack/parameter/optional b/cdist/conf/type/__unpack/parameter/optional
index d136dd0c..d846ac75 100644
--- a/cdist/conf/type/__unpack/parameter/optional
+++ b/cdist/conf/type/__unpack/parameter/optional
@@ -1,2 +1,4 @@
sum-file
tar-strip
+tar-extra-args
+onchange
diff --git a/cdist/emulator.py b/cdist/emulator.py
index 6b461f0b..cf934281 100644
--- a/cdist/emulator.py
+++ b/cdist/emulator.py
@@ -25,6 +25,7 @@ import argparse
import logging
import os
import sys
+import re
import cdist
from cdist import core
@@ -412,12 +413,15 @@ class Emulator:
if "require" in self.env:
requirements = self.env['require']
self.log.debug("reqs = " + requirements)
- for requirement in requirements.split(" "):
+ for requirement in self._parse_require(requirements):
# Ignore empty fields - probably the only field anyway
if len(requirement) == 0:
continue
self.record_requirement(requirement)
+ def _parse_require(self, require):
+ return re.split(r'[ \t\n]+', require)
+
def record_auto_requirements(self):
"""An object shall automatically depend on all objects that it
defined in it's type manifest.
diff --git a/cdist/test/emulator/__init__.py b/cdist/test/emulator/__init__.py
index e375676c..befd7b57 100644
--- a/cdist/test/emulator/__init__.py
+++ b/cdist/test/emulator/__init__.py
@@ -685,6 +685,16 @@ class EmulatorAlreadyExistingRequirementsWarnTestCase(test.CdistTestCase):
self.env['require'] = '__directory/spam'
emu = emulator.Emulator(argv, env=self.env)
+ def test_parse_require(self):
+ require = " \t \n \t\t\n\t\na\tb\nc d \te\t\nf\ng\t "
+ expected = ['', 'a', 'b', 'c', 'd', 'e', 'f', 'g', '', ]
+
+ argv = ['__directory', 'spam']
+ emu = emulator.Emulator(argv, env=self.env)
+ requirements = emu._parse_require(require)
+
+ self.assertEqual(expected, requirements)
+
if __name__ == '__main__':
import unittest
diff --git a/docs/changelog b/docs/changelog
index 088c89df..e50db2a3 100644
--- a/docs/changelog
+++ b/docs/changelog
@@ -5,6 +5,19 @@ next:
* Core: Add trigger functionality (Nico Schottelius, Darko Poljak)
* Core: Implement core support for python types (Darko Poljak)
+6.8.0: 2020-09-11
+ * Type __locale_system: Fix for debian and ubuntu (Ander Punnar)
+ * Type __unpack: Add --tar-extra-args parameter (Ander Punnar)
+ * Explorer os: Fix OS detection for openSUSE (Dennis Camera)
+ * Type __filesystem: Support Alpine Linux (Joachim Desroches)
+ * Type __locale_system: Fix version comparison (Dennis Camera)
+ * Type __unpack: Add --onchange parameter (Ander Punnar)
+ * Type __download: Fix manual (Ander Punnar)
+ * Explorer os_version: Convert Debian sid to version number (Dennis Camera)
+ * Core: Expand require delimiter characters, split by consecutive delimiters (Darko Poljak)
+ * Type __timezone: Make singleton (Dennis Camera)
+ * Type __systemd_service: Fix manpage typos (Matthias Stecher)
+
6.7.0: 2020-07-28
* Delete deprecated type: __pf_apply (Darko Poljak)
* New type: __download (Ander Punnar)
diff --git a/docs/src/cdist-manifest.rst b/docs/src/cdist-manifest.rst
index 5dbca479..2e49a721 100644
--- a/docs/src/cdist-manifest.rst
+++ b/docs/src/cdist-manifest.rst
@@ -95,7 +95,8 @@ Dependencies
------------
If you want to describe that something requires something else, just
setup the variable "require" to contain the requirements. Multiple
-requirements can be added white space separated.
+requirements can be added separated with (optionally consecutive)
+delimiters including space, tab and newline.
::