Merge branch 'master' of github.com:ungleich/cdist

Signed-off-by: Nico Schottelius <nico@nico-notebook.schottelius.org>
This commit is contained in:
Nico Schottelius 2018-10-09 19:43:41 +02:00
commit 256c8324a0
266 changed files with 3317 additions and 1132 deletions

6
.gitattributes vendored Normal file
View File

@ -0,0 +1,6 @@
.gitignore export-ignore
.gitattributes export-ignore
.gitkeep export-ignore
docs/speeches export-ignore
docs/video export-ignore
docs/src/man7 export-ignore

View File

@ -39,6 +39,11 @@ PYTHON_VERSION=cdist/version.py
SPHINXM=make -C $(DOCS_SRC_DIR) man SPHINXM=make -C $(DOCS_SRC_DIR) man
SPHINXH=make -C $(DOCS_SRC_DIR) html SPHINXH=make -C $(DOCS_SRC_DIR) html
SPHINXC=make -C $(DOCS_SRC_DIR) clean SPHINXC=make -C $(DOCS_SRC_DIR) clean
SHELLCHECKCMD=shellcheck -s sh -f gcc -x
# Skip SC2154 for variables starting with __ since such variables are cdist
# environment variables.
SHELLCHECK_SKIP=grep -v ': __.*is referenced but not assigned.*\[SC2154\]'
################################################################################ ################################################################################
# Manpages # Manpages
# #
@ -54,6 +59,7 @@ MANTYPES=$(subst /man.rst,.rst,$(MANTYPEPREFIX))
# Link manpage: do not create man.html but correct named file # Link manpage: do not create man.html but correct named file
$(MAN7DSTDIR)/cdist-type%.rst: $(TYPEDIR)/%/man.rst $(MAN7DSTDIR)/cdist-type%.rst: $(TYPEDIR)/%/man.rst
mkdir -p $(MAN7DSTDIR)
ln -sf "../../../$^" $@ ln -sf "../../../$^" $@
# Manpages #2: reference # Manpages #2: reference
@ -247,5 +253,34 @@ pub:
test: test:
$(helper) $@ $(helper) $@
test-remote:
$(helper) $@
pep8: pep8:
$(helper) $@ $(helper) $@
shellcheck-global-explorers:
@find cdist/conf/explorer -type f -exec $(SHELLCHECKCMD) {} + | $(SHELLCHECK_SKIP) || exit 0
shellcheck-type-explorers:
@find cdist/conf/type -type f -path "*/explorer/*" -exec $(SHELLCHECKCMD) {} + | $(SHELLCHECK_SKIP) || exit 0
shellcheck-manifests:
@find cdist/conf/type -type f -name manifest -exec $(SHELLCHECKCMD) {} + | $(SHELLCHECK_SKIP) || exit 0
shellcheck-local-gencodes:
@find cdist/conf/type -type f -name gencode-local -exec $(SHELLCHECKCMD) {} + | $(SHELLCHECK_SKIP) || exit 0
shellcheck-remote-gencodes:
@find cdist/conf/type -type f -name gencode-remote -exec $(SHELLCHECKCMD) {} + | $(SHELLCHECK_SKIP) || exit 0
shellcheck-gencodes: shellcheck-local-gencodes shellcheck-remote-gencodes
shellcheck-types: shellcheck-type-explorers shellcheck-manifests shellcheck-gencodes
shellcheck: shellcheck-global-explorers shellcheck-types
shellcheck-type-files:
@find cdist/conf/type -type f -path "*/files/*" -exec $(SHELLCHECKCMD) {} + | $(SHELLCHECK_SKIP) || exit 0
shellcheck-with-files: shellcheck shellcheck-type-files

View File

@ -250,6 +250,7 @@ eof
"$0" check-date "$0" check-date
"$0" check-unittest "$0" check-unittest
"$0" check-pep8 "$0" check-pep8
"$0" shellcheck
# Generate version file to be included in packaging # Generate version file to be included in packaging
"$0" target-version "$0" target-version
@ -359,13 +360,40 @@ eof
fi fi
;; ;;
test-remote)
export PYTHONPATH="$(pwd -P)"
python3 -m cdist.test.exec.remote
;;
pep8) pep8)
pep8 "${basedir}" "${basedir}/scripts/cdist" | less pep8 "${basedir}" "${basedir}/scripts/cdist" | less
;; ;;
check-pep8) check-pep8)
"$0" pep8 "$0" pep8
echo "Please review pep8 report." printf "\\nPlease review pep8 report.\\n"
while true
do
echo "Continue (yes/no)?"
any=
read any
case "$any" in
yes)
break
;;
no)
exit 1
;;
*)
echo "Please answer with 'yes' or 'no' explicitly."
;;
esac
done
;;
shellcheck)
make helper=${helper} WEBDIR=${WEBDIR} shellcheck
printf "\\nPlease review shellcheck report.\\n"
while true while true
do do
echo "Continue (yes/no)?" echo "Continue (yes/no)?"

View File

@ -285,6 +285,7 @@ eof
"$0" check-date "$0" check-date
"$0" check-unittest "$0" check-unittest
"$0" check-pep8 "$0" check-pep8
"$0" shellcheck
# Generate version file to be included in packaging # Generate version file to be included in packaging
"$0" target-version "$0" target-version
@ -421,13 +422,40 @@ eof
fi fi
;; ;;
test-remote)
export PYTHONPATH="$(pwd -P)"
python3 -m cdist.test.exec.remote
;;
pep8) pep8)
pep8 "${basedir}" "${basedir}/scripts/cdist" | less pep8 "${basedir}" "${basedir}/scripts/cdist" | less
;; ;;
check-pep8) check-pep8)
"$0" pep8 "$0" pep8
echo "Please review pep8 report." printf "\\nPlease review pep8 report.\\n"
while true
do
echo "Continue (yes/no)?"
any=
read any
case "$any" in
yes)
break
;;
no)
exit 1
;;
*)
echo "Please answer with 'yes' or 'no' explicitly."
;;
esac
done
;;
shellcheck)
make helper=${helper} WEBDIR=${WEBDIR} shellcheck
printf "\\nPlease review shellcheck report.\\n"
while true while true
do do
echo "Continue (yes/no)?" echo "Continue (yes/no)?"

View File

@ -83,41 +83,78 @@ class CdistBetaRequired(cdist.Error):
class CdistEntityError(Error): class CdistEntityError(Error):
"""Something went wrong while executing cdist entity""" """Something went wrong while executing cdist entity"""
def __init__(self, entity_name, entity_params, stderr_paths, subject=''): def __init__(self, entity_name, entity_params, stdout_paths,
stderr_paths, subject=''):
self.entity_name = entity_name self.entity_name = entity_name
self.entity_params = entity_params self.entity_params = entity_params
self.stderr_paths = stderr_paths self.stderr_paths = stderr_paths
self.stdout_paths = stdout_paths
if isinstance(subject, Error): if isinstance(subject, Error):
self.original_error = subject self.original_error = subject
else: else:
self.original_error = None self.original_error = None
self.message = str(subject) self.message = str(subject)
def _stdpath(self, stdpaths, header_name):
result = {}
for name, path in stdpaths:
if name not in result:
result[name] = []
try:
if os.path.exists(path) and os.path.getsize(path) > 0:
output = []
label_begin = name + ":" + header_name
output.append(label_begin)
output.append('\n')
output.append('-' * len(label_begin))
output.append('\n')
with open(path, 'r') as fd:
output.append(fd.read())
output.append('\n')
result[name].append(''.join(output))
except UnicodeError as ue:
result[name].append(('Cannot output {}:{} due to: {}.\n'
'You can try to read the error file "{}"'
' yourself.').format(
name, header_name, ue, path))
return result
def _stderr(self):
return self._stdpath(self.stderr_paths, 'stderr')
def _stdout(self):
return self._stdpath(self.stdout_paths, 'stdout')
def _update_dict_list(self, target, source):
for x in source:
if x not in target:
target[x] = []
target[x].extend(source[x])
@property @property
def stderr(self): def std_streams(self):
output = [] std_dict = {}
for stderr_name, stderr_path in self.stderr_paths: self._update_dict_list(std_dict, self._stdout())
if (os.path.exists(stderr_path) and self._update_dict_list(std_dict, self._stderr())
os.path.getsize(stderr_path) > 0): return std_dict
label_begin = '---- BEGIN ' + stderr_name + ':stderr ----'
label_end = '---- END ' + stderr_name + ':stderr ----'
output.append('\n' + label_begin)
with open(stderr_path, 'r') as fd:
output.append(fd.read())
output.append(label_end)
return '\n'.join(output)
def __str__(self): def __str__(self):
output = [] output = []
output.append(self.message) output.append(self.message)
header = "\nError processing " + self.entity_name output.append('\n\n')
header = "Error processing " + self.entity_name
under_header = '=' * len(header) under_header = '=' * len(header)
output.append(header) output.append(header)
output.append('\n')
output.append(under_header) output.append(under_header)
output.append('\n')
for param_name, param_value in self.entity_params: for param_name, param_value in self.entity_params:
output.append(param_name + ': ' + str(param_value)) output.append(param_name + ': ' + str(param_value))
output.append(self.stderr + '\n') output.append('\n')
return '\n'.join(output) output.append('\n')
for x in self.std_streams:
output.append(''.join(self.std_streams[x]))
return ''.join(output)
class CdistObjectError(CdistEntityError): class CdistObjectError(CdistEntityError):
@ -127,28 +164,39 @@ class CdistObjectError(CdistEntityError):
('name', cdist_object.name, ), ('name', cdist_object.name, ),
('path', cdist_object.absolute_path, ), ('path', cdist_object.absolute_path, ),
('source', " ".join(cdist_object.source), ), ('source', " ".join(cdist_object.source), ),
('type', cdist_object.cdist_type.absolute_path, ), ('type', os.path.realpath(
cdist_object.cdist_type.absolute_path), ),
] ]
stderr_paths = [] stderr_paths = []
for stderr_name in os.listdir(cdist_object.stderr_path): for stderr_name in os.listdir(cdist_object.stderr_path):
stderr_path = os.path.join(cdist_object.stderr_path, stderr_path = os.path.join(cdist_object.stderr_path,
stderr_name) stderr_name)
stderr_paths.append((stderr_name, stderr_path, )) stderr_paths.append((stderr_name, stderr_path, ))
stdout_paths = []
for stdout_name in os.listdir(cdist_object.stdout_path):
stdout_path = os.path.join(cdist_object.stdout_path,
stdout_name)
stdout_paths.append((stdout_name, stdout_path, ))
super().__init__("object '{}'".format(cdist_object.name), super().__init__("object '{}'".format(cdist_object.name),
params, stderr_paths, subject) params, stdout_paths, stderr_paths, subject)
class InitialManifestError(CdistEntityError): class InitialManifestError(CdistEntityError):
"""Something went wrong while executing initial manifest""" """Something went wrong while executing initial manifest"""
def __init__(self, initial_manifest, stderr_path, subject=''): def __init__(self, initial_manifest, stdout_path, stderr_path, subject=''):
params = [ params = [
('path', initial_manifest, ), ('path', initial_manifest, ),
] ]
stdout_paths = []
stdout_paths = [
('init', stdout_path, ),
]
stderr_paths = [] stderr_paths = []
stderr_paths = [ stderr_paths = [
('init', stderr_path, ), ('init', stderr_path, ),
] ]
super().__init__('initial manifest', params, stderr_paths, subject) super().__init__('initial manifest', params, stdout_paths,
stderr_paths, subject)
def file_to_list(filename): def file_to_list(filename):

View File

@ -251,6 +251,11 @@ def get_parsers():
'line). If no host or host file is specified then, by ' 'line). If no host or host file is specified then, by '
'default, read hosts from stdin.'), 'default, read hosts from stdin.'),
dest='hostfile', required=False) dest='hostfile', required=False)
parser['config_args'].add_argument(
'-P', '--timestamp',
help=('Timestamp log messages with the current local date and time '
'in the format: YYYYMMDDHHMMSS.us.'),
action='store_true', dest='timestamp')
parser['config_args'].add_argument( parser['config_args'].add_argument(
'-p', '--parallel', nargs='?', metavar='HOST_MAX', '-p', '--parallel', nargs='?', metavar='HOST_MAX',
type=functools.partial(check_lower_bounded_int, lower_bound=1, type=functools.partial(check_lower_bounded_int, lower_bound=1,
@ -434,7 +439,7 @@ def get_parsers():
def handle_loglevel(args): def handle_loglevel(args):
if args.quiet: if hasattr(args, 'quiet') and args.quiet:
args.verbose = _verbosity_level_off args.verbose = _verbosity_level_off
logging.root.setLevel(_verbosity_level[args.verbose]) logging.root.setLevel(_verbosity_level[args.verbose])

View File

@ -25,13 +25,13 @@
os=$("$__explorer/os") os=$("$__explorer/os")
case "$os" in case "$os" in
"macosx") "macosx")
echo "$(sysctl -n hw.physicalcpu)" sysctl -n hw.physicalcpu
;; ;;
*) *)
if [ -r /proc/cpuinfo ]; then if [ -r /proc/cpuinfo ]; then
cores="$(grep "core id" /proc/cpuinfo | sort | uniq | wc -l)" cores="$(grep "core id" /proc/cpuinfo | sort | uniq | wc -l)"
if [ ${cores} -eq 0 ]; then if [ "${cores}" -eq 0 ]; then
cores="1" cores="1"
fi fi
echo "$cores" echo "$cores"

View File

@ -25,14 +25,14 @@
os=$("$__explorer/os") os=$("$__explorer/os")
case "$os" in case "$os" in
"macosx") "macosx")
echo "$(system_profiler SPHardwareDataType | grep "Number of Processors" | awk -F': ' '{print $2}')" system_profiler SPHardwareDataType | grep "Number of Processors" | awk -F': ' '{print $2}'
;; ;;
*) *)
if [ -r /proc/cpuinfo ]; then if [ -r /proc/cpuinfo ]; then
sockets="$(grep "physical id" /proc/cpuinfo | sort | uniq | wc -l)" sockets="$(grep "physical id" /proc/cpuinfo | sort -u | wc -l)"
if [ ${sockets} -eq 0 ]; then if [ "${sockets}" -eq 0 ]; then
sockets="$(cat /proc/cpuinfo | grep "processor" | wc -l)" sockets="$(grep -c "processor" /proc/cpuinfo)"
fi fi
echo "${sockets}" echo "${sockets}"
fi fi

3
cdist/conf/explorer/disks Normal file → Executable file
View File

@ -1,2 +1,3 @@
cd /dev #!/bin/sh
cd /dev || exit 0
echo sd? hd? vd? echo sd? hd? vd?

View File

@ -0,0 +1,2 @@
#!/bin/sh
sysctl -n security.jail.jailed 2>/dev/null | grep "1" || true

1
cdist/conf/explorer/kernel_name Normal file → Executable file
View File

@ -1 +1,2 @@
#!/bin/sh
uname -s uname -s

View File

@ -20,8 +20,9 @@
# #
set +e set +e
case "$($__explorer/os)" in case "$("$__explorer/os")" in
openwrt) openwrt)
# shellcheck disable=SC1091
(. /etc/openwrt_release && echo "$DISTRIB_CODENAME") (. /etc/openwrt_release && echo "$DISTRIB_CODENAME")
;; ;;
*) *)

View File

@ -20,8 +20,9 @@
# #
set +e set +e
case "$($__explorer/os)" in case "$("$__explorer/os")" in
openwrt) openwrt)
# shellcheck disable=SC1091
(. /etc/openwrt_release && echo "$DISTRIB_DESCRIPTION") (. /etc/openwrt_release && echo "$DISTRIB_DESCRIPTION")
;; ;;
*) *)

View File

@ -20,8 +20,9 @@
# #
set +e set +e
case "$($__explorer/os)" in case "$("$__explorer/os")" in
openwrt) openwrt)
# shellcheck disable=SC1091
(. /etc/openwrt_release && echo "$DISTRIB_ID") (. /etc/openwrt_release && echo "$DISTRIB_ID")
;; ;;
*) *)

View File

@ -20,8 +20,9 @@
# #
set +e set +e
case "$($__explorer/os)" in case "$("$__explorer/os")" in
openwrt) openwrt)
# shellcheck disable=SC1091
(. /etc/openwrt_release && echo "$DISTRIB_RELEASE") (. /etc/openwrt_release && echo "$DISTRIB_RELEASE")
;; ;;
*) *)

View File

@ -22,6 +22,6 @@
# #
# #
if command -v uname 2>&1 >/dev/null; then if command -v uname >/dev/null 2>&1 ; then
uname -m uname -m
fi fi

View File

@ -22,13 +22,13 @@
# FIXME: other system types (not linux ...) # FIXME: other system types (not linux ...)
if [ -d "/proc/vz" -a ! -d "/proc/bc" ]; then if [ -d "/proc/vz" ] && [ ! -d "/proc/bc" ]; then
echo openvz echo openvz
exit exit
fi fi
if [ -e "/proc/1/environ" ] && if [ -e "/proc/1/environ" ] &&
cat "/proc/1/environ" | tr '\000' '\n' | grep -Eiq '^container='; then tr '\000' '\n' < "/proc/1/environ" | grep -Eiq '^container='; then
echo lxc echo lxc
exit exit
fi fi

View File

@ -0,0 +1,26 @@
#!/bin/sh
#
# 2018 Adam Dej (dejko.a 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/>.
#
#
# See os-release(5) and http://0pointer.de/blog/projects/os-release
set +e
cat /etc/os-release || cat /usr/lib/os-release || true

View File

@ -22,7 +22,7 @@
# #
# #
case "$($__explorer/os)" in case "$("$__explorer/os")" in
amazon) amazon)
cat /etc/system-release cat /etc/system-release
;; ;;

View File

@ -1,6 +1,6 @@
#!/bin/sh -e #!/bin/sh -e
# #
# 2011 Steven Armstrong (steven-cdist at armstrong.cc) # 2018 Ander Punnar (ander-at-kvlt-dot-ee)
# #
# This file is part of cdist. # This file is part of cdist.
# #
@ -18,6 +18,6 @@
# along with cdist. If not, see <http://www.gnu.org/licenses/>. # along with cdist. If not, see <http://www.gnu.org/licenses/>.
# #
# set defaults if [ -e "/$__object_id" ]
options="$(cat "$__object/parameter/options" 2>/dev/null \ then getfacl "/$__object_id" | grep -E '^((default:|)(user|group)):[a-z]' || true
|| echo "" | tee "$__object/parameter/options")" fi

View File

@ -0,0 +1,81 @@
#!/bin/sh -e
#
# 2018 Ander Punnar (ander-at-kvlt-dot-ee)
#
# This file is part of cdist.
#
# cdist is free software: you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation, either version 3 of the License, or
# (at your option) any later version.
#
# cdist is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with cdist. If not, see <http://www.gnu.org/licenses/>.
#
os="$( cat "$__global/explorer/os" )"
acl_path="/$__object_id"
acl_is="$( cat "$__object/explorer/acl_is" )"
acl_should="$( for parameter in user group
do
if [ ! -f "$__object/parameter/$parameter" ]
then continue
fi
while read -r l
do
echo "$parameter:$l"
if [ -f "$__object/parameter/default" ]
then echo "default:$parameter:$l"
fi
done < "$__object/parameter/$parameter"
done )"
setfacl_exec='setfacl'
if [ -f "$__object/parameter/recursive" ]
then
if echo "$os" | grep -E 'macosx|netbsd|freebsd|openbsd'
then
echo "$os setfacl do not support recursive operations" >&2
else
setfacl_exec="$setfacl_exec -R"
fi
fi
if [ -f "$__object/parameter/remove" ]
then
if echo "$os" | grep 'solaris'
then
# Solaris setfacl behaves differently.
# We will not support Solaris for now, because no way to test it.
# But adding support should be easy (use -s instead of -m on modify).
echo "$os setfacl do not support -x flag for ACL remove" >&2
else
echo "$acl_is" | while read -r acl
do
if echo "$acl_should" | grep -Fq "$acl"
then continue
fi
no_bits="$( echo "$acl" | sed -r 's/:[rwx-]+$//' )"
echo "$setfacl_exec -x \"$no_bits\" \"$acl_path\""
done
fi
fi
for acl in $acl_should
do
if ! echo "$acl_is" | grep -Eq "^$acl"
then echo "$setfacl_exec -m \"$acl\" \"$acl_path\""
fi
done

View File

@ -0,0 +1,62 @@
cdist-type__acl(7)
==================
NAME
----
cdist-type__acl - Basic wrapper around `setfacl`
DESCRIPTION
-----------
ACL must be defined as 3-symbol combination, using `r`, `w`, `x` and `-`.
See setfacl(1) and acl(5) for more details.
OPTIONAL MULTIPLE PARAMETERS
----------------------------
user
Add user ACL entry.
group
Add group ACL entry.
BOOLEAN PARAMETERS
------------------
recursive
Operate recursively (Linux only).
default
Add default ACL entries.
remove
Remove undefined ACL entries (Solaris not supported).
EXAMPLES
--------
.. code-block:: sh
__acl /srv/project \
--recursive \
--default \
--remove \
--user alice:rwx \
--user bob:r-x \
--group project-group:rwx \
--group some-other-group:r-x
AUTHORS
-------
Ander Punnar <ander-at-kvlt-dot-ee>
COPYING
-------
Copyright \(C) 2018 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.

View File

@ -0,0 +1,3 @@
recursive
default
remove

View File

@ -0,0 +1,2 @@
user
group

View File

@ -23,10 +23,11 @@
name="$__object_id" name="$__object_id"
# shellcheck disable=SC1091
. /etc/lsb-release . /etc/lsb-release
repo_name="${name#ppa:}" repo_name="${name#ppa:}"
repo_file_name="$(echo "$repo_name" | sed -e "s|[/:]|-|" -e "s|\.|_|")-${DISTRIB_CODENAME}.list" repo_file_name="$(echo "$repo_name" | sed -e 's|[/:]|-|' -e 's|\.|_|')-${DISTRIB_CODENAME}.list"
[ -s "/etc/apt/sources.list.d/${repo_file_name}" ] \ [ -s "/etc/apt/sources.list.d/${repo_file_name}" ] \
&& echo present || echo absent && echo present || echo absent

View File

@ -29,9 +29,9 @@ fi
case "$state_should" in case "$state_should" in
present) present)
echo add-apt-repository \"$name\" echo "add-apt-repository '$name'"
;; ;;
absent) absent)
echo remove-apt-repository \"$name\" echo "remove-apt-repository '$name'"
;; ;;
esac esac

View File

@ -18,8 +18,6 @@
# along with cdist. If not, see <http://www.gnu.org/licenses/>. # along with cdist. If not, see <http://www.gnu.org/licenses/>.
# #
name="$__object_id"
__package software-properties-common __package software-properties-common
require="__package/software-properties-common" \ require="__package/software-properties-common" \

View File

View File

@ -18,8 +18,6 @@
# along with cdist. If not, see <http://www.gnu.org/licenses/>. # along with cdist. If not, see <http://www.gnu.org/licenses/>.
# #
file="$(cat "$__object/parameter/file" 2>/dev/null || echo "/$__object_id")"
prefix=$(cat "$__object/parameter/prefix" 2>/dev/null || echo "#cdist:__block/$__object_id") prefix=$(cat "$__object/parameter/prefix" 2>/dev/null || echo "#cdist:__block/$__object_id")
suffix=$(cat "$__object/parameter/suffix" 2>/dev/null || echo "#/cdist:__block/$__object_id") suffix=$(cat "$__object/parameter/suffix" 2>/dev/null || echo "#/cdist:__block/$__object_id")
text=$(cat "$__object/parameter/text") text=$(cat "$__object/parameter/text")

View File

@ -42,21 +42,20 @@ get_current_value() {
} }
set_group() { set_group() {
echo chgrp \"$1\" \"$destination\" echo "chgrp '$1' '$destination'"
echo chgrp $1 >> "$__messages_out" echo "chgrp '$1'" >> "$__messages_out"
} }
set_owner() { set_owner() {
echo chown \"$1\" \"$destination\" echo "chown '$1' '$destination'"
echo chown $1 >> "$__messages_out" echo "chown '$1'" >> "$__messages_out"
} }
set_mode() { set_mode() {
echo chmod \"$1\" \"$destination\" echo "chmod '$1' '$destination'"
echo chmod $1 >> "$__messages_out" echo "chmod '$1'" >> "$__messages_out"
} }
set_attributes=
case "$state_should" in case "$state_should" in
present|exists) present|exists)
# Note: Mode - needs to happen last as a chown/chgrp can alter mode by # Note: Mode - needs to happen last as a chown/chgrp can alter mode by
@ -67,11 +66,11 @@ case "$state_should" in
# change 0xxx format to xxx format => same as stat returns # change 0xxx format to xxx format => same as stat returns
if [ "$attribute" = mode ]; then if [ "$attribute" = mode ]; then
value_should="$(echo $value_should | sed 's/^0\(...\)/\1/')" value_should="$(echo "$value_should" | sed 's/^0\(...\)/\1/')"
fi fi
value_is="$(get_current_value "$attribute" "$value_should")" value_is="$(get_current_value "$attribute" "$value_should")"
if [ -f "$__object/files/set-attributes" -o "$value_should" != "$value_is" ]; then if [ -f "$__object/files/set-attributes" ] || [ "$value_should" != "$value_is" ]; then
"set_$attribute" "$value_should" "set_$attribute" "$value_should"
fi fi
fi fi
@ -81,7 +80,7 @@ case "$state_should" in
absent) absent)
if [ "$type" = "file" ]; then if [ "$type" = "file" ]; then
echo rm -f \"$destination\" echo "rm -f '$destination'"
echo remove >> "$__messages_out" echo remove >> "$__messages_out"
fi fi
;; ;;

View File

@ -22,7 +22,7 @@ name="$__object_id"
state="$(cat "$__object/parameter/state")" state="$(cat "$__object/parameter/state")"
source="$(cat "$__object/parameter/source")" source="$(cat "$__object/parameter/source")"
destination="$(cat "$__object/parameter/destination")" destination="$(cat "$__object/parameter/destination")"
ccollectconf="$(cat "$__object/parameter/ccollectconf" | sed 's,/$,,')" ccollectconf="$(sed 's,/$,,' "$__object/parameter/ccollectconf")"
sourcedir="$ccollectconf/sources" sourcedir="$ccollectconf/sources"
basedir="$sourcedir/$name" basedir="$sourcedir/$name"
@ -55,5 +55,5 @@ if [ -f "$__object/parameter/exclude" ]; then
fi fi
if [ -f "$__object/parameter/create-destination" ]; then if [ -f "$__object/parameter/create-destination" ]; then
__directory "${destination}" --parents --state ${state} __directory "${destination}" --parents --state "${state}"
fi fi

View File

@ -19,7 +19,8 @@
# #
set -- "/${__object_id}" set -- "/${__object_id}"
for param in $(ls "$__object/parameter/"); do cd "$__object/parameter/"
for param in *; do
case "$param" in case "$param" in
source) source)
source="$(cat "$__object/parameter/source")" source="$(cat "$__object/parameter/source")"

View File

@ -39,7 +39,7 @@ version_dir="$versions_dir/$version"
source=$(cat "$version_dir/source") source=$(cat "$version_dir/source")
source_file_name="${source##*/}" source_file_name="${source##*/}"
cksum_should=$(cat "$version_dir/cksum" | cut -d' ' -f1,2) cksum_should=$(cut -d' ' -f1,2 "$version_dir/cksum")
cat << eof cat << eof
tmpdir=\$(mktemp -d --tmpdir="/tmp" "${__type##*/}.XXXXXXXXXX") tmpdir=\$(mktemp -d --tmpdir="/tmp" "${__type##*/}.XXXXXXXXXX")

View File

@ -40,9 +40,11 @@ MESSAGES
If consul binary is created using __staged_file then underlaying __file type messages are emitted. If consul binary is created using __staged_file then underlaying __file type messages are emitted.
If consul binary is created by direct method then the following messages are emitted: If consul binary is created by direct method then the following messages are emitted:
/usr/local/bin/consul created /usr/local/bin/consul created
consul binary was created consul binary was created
EXAMPLES EXAMPLES
-------- --------

View File

@ -20,14 +20,14 @@
# #
### BEGIN INIT INFO ### BEGIN INIT INFO
# Provides: consul # Provides: consul
# Required-Start: $remote_fs # Required-Start: $network $local_fs $remote_fs
# Required-Stop: $remote_fs # Required-Stop: $local_fs
# Should-Start: $all # Should-Start:
# Should-Stop: $all # Should-Stop:
# Default-Start: 2 3 4 5
# Default-Stop: 0 1 6
# Short-Description: consul # Short-Description: consul
# Description: consul agent # Description: consul agent
# Default-Start: 2 3 4 5
# Default-Stop: 0 1 6
### END INIT INFO ### END INIT INFO
if [ -f "/etc/default/consul" ]; then if [ -f "/etc/default/consul" ]; then

View File

@ -66,7 +66,7 @@ require="__directory/etc/consul" \
__directory "$conf_dir" \ __directory "$conf_dir" \
--owner root --group "$group" --mode 750 --state "$state" --owner root --group "$group" --mode 750 --state "$state"
if [ -f "$__object/parameter/ca-file-source" -o -f "$__object/parameter/cert-file-source" -o -f "$__object/parameter/key-file-source" ]; then if [ -f "$__object/parameter/ca-file-source" ] || [ -f "$__object/parameter/cert-file-source" ] || [ -f "$__object/parameter/key-file-source" ]; then
# create directory for ssl certs # create directory for ssl certs
require="__directory/etc/consul" \ require="__directory/etc/consul" \
__directory /etc/consul/ssl \ __directory /etc/consul/ssl \
@ -84,7 +84,8 @@ echo "{"
# parameters we define ourself # parameters we define ourself
printf ' "data_dir": "%s"\n' "$data_dir" printf ' "data_dir": "%s"\n' "$data_dir"
for param in $(ls "$__object/parameter/"); do cd "$__object/parameter/"
for param in *; do
case "$param" in case "$param" in
state|user|group|json-config) continue ;; state|user|group|json-config) continue ;;
ca-file-source|cert-file-source|key-file-source) ca-file-source|cert-file-source|key-file-source)

View File

@ -40,7 +40,7 @@ if [ ! -f "$__object/parameter/interval" ]; then
fi fi
done done
fi fi
if [ -f "$__object/parameter/docker-container-id" -a ! -f "$__object/parameter/script" ]; then if [ -f "$__object/parameter/docker-container-id" ] && [ ! -f "$__object/parameter/script" ]; then
echo "When using --docker-container-id you must also define --script." >&2 echo "When using --docker-container-id you must also define --script." >&2
exit 1 exit 1
fi fi
@ -50,7 +50,8 @@ fi
echo "{" echo "{"
printf ' "check": {\n' printf ' "check": {\n'
printf ' "name": "%s"\n' "$name" printf ' "name": "%s"\n' "$name"
for param in $(ls "$__object/parameter/"); do cd "$__object/parameter/"
for param in *; do
case "$param" in case "$param" in
state|name) continue ;; state|name) continue ;;
*) *)

View File

@ -24,15 +24,15 @@ conf_file="service_${name}.json"
state="$(cat "$__object/parameter/state")" state="$(cat "$__object/parameter/state")"
# Sanity checks # Sanity checks
if [ -f "$__object/parameter/check-script" -a -f "$__object/parameter/check-ttl" ]; then if [ -f "$__object/parameter/check-script" ] && [ -f "$__object/parameter/check-ttl" ]; then
echo "Use either --check-script together with --check-interval OR --check-ttl, but not both" >&2 echo "Use either --check-script together with --check-interval OR --check-ttl, but not both" >&2
exit 1 exit 1
fi fi
if [ -f "$__object/parameter/check-script" -a ! -f "$__object/parameter/check-interval" ]; then if [ -f "$__object/parameter/check-script" ] && [ ! -f "$__object/parameter/check-interval" ]; then
echo "When using --check-script you must also define --check-interval" >&2 echo "When using --check-script you must also define --check-interval" >&2
exit 1 exit 1
fi fi
if [ -f "$__object/parameter/check-http" -a ! -f "$__object/parameter/check-interval" ]; then if [ -f "$__object/parameter/check-http" ] && [ ! -f "$__object/parameter/check-interval" ]; then
echo "When using --check-http you must also define --check-interval" >&2 echo "When using --check-http you must also define --check-interval" >&2
exit 1 exit 1
fi fi
@ -42,7 +42,8 @@ fi
echo "{" echo "{"
printf ' "service": {\n' printf ' "service": {\n'
printf ' "name": "%s"\n' "$name" printf ' "name": "%s"\n' "$name"
for param in $(ls "$__object/parameter/"); do cd "$__object/parameter/"
for param in *; do
case "$param" in case "$param" in
state|name|check-interval) continue ;; state|name|check-interval) continue ;;
check-script) check-script)

View File

@ -75,7 +75,8 @@ require="__directory/etc/consul-template" \
# Generate hcl config file # Generate hcl config file
( (
for param in $(ls "$__object/parameter/"); do cd "$__object/parameter/"
for param in *; do
case "$param" in case "$param" in
auth-password|state|ssl-*|syslog-*|version|vault-token|vault-ssl*) continue ;; auth-password|state|ssl-*|syslog-*|version|vault-token|vault-ssl*) continue ;;
auth-username) auth-username)

View File

@ -26,32 +26,36 @@ template_dir="/etc/consul-template/template"
require="" require=""
# Sanity checks # Sanity checks
if [ -f "$__object/parameter/source" -a -f "$__object/parameter/source-file" ]; then if [ -f "$__object/parameter/source" ] && [ -f "$__object/parameter/source-file" ]; then
echo "Use either --source OR --source-file, but not both." >&2 echo "Use either --source OR --source-file, but not both." >&2
exit 1 exit 1
fi fi
if [ ! -f "$__object/parameter/source" -a ! -f "$__object/parameter/source-file" ]; then if [ ! -f "$__object/parameter/source" ] && [ ! -f "$__object/parameter/source-file" ]; then
echo "Either --source OR --source-file must be given." >&2 echo "Either --source OR --source-file must be given." >&2
exit 1 exit 1
fi fi
if [ -f "$__object/parameter/source-file" ]; then
destination="${template_dir}/${name}"
require="__file${destination}"
fi
# Generate hcl config file # Generate hcl config file
( {
printf 'template {\n' printf 'template {\n'
for param in $(ls "$__object/parameter/"); do cd "$__object/parameter/"
for param in *; do
case "$param" in case "$param" in
source-file) source-file)
source="$(cat "$__object/parameter/$param")" source="$(cat "$__object/parameter/$param")"
if [ "$source" = "-" ]; then if [ "$source" = "-" ]; then
source="$__object/stdin" source="$__object/stdin"
fi fi
destination="${template_dir}/${name}"
require="__directory${template_dir}" \ require="__directory${template_dir}" \
__file "$destination" \ __file "$destination" \
--owner root --group root --mode 640 \ --owner root --group root --mode 640 \
--source "$source" \ --source "$source" \
--state "$state" --state "$state"
export require="__file${destination}"
printf ' source = "%s"\n' "$destination" printf ' source = "%s"\n' "$destination"
;; ;;
@ -65,7 +69,7 @@ for param in $(ls "$__object/parameter/"); do
esac esac
done done
printf '}\n' printf '}\n'
) | \ } | \
require="$require __directory${conf_dir}" \ require="$require __directory${conf_dir}" \
__config_file "${conf_dir}/${conf_file}" \ __config_file "${conf_dir}/${conf_file}" \
--owner root --group root --mode 640 \ --owner root --group root --mode 640 \

View File

@ -25,7 +25,7 @@ conf_file="watch_${watch_type}_${__object_id}.json"
state="$(cat "$__object/parameter/state")" state="$(cat "$__object/parameter/state")"
# Sanity checks # Sanity checks
if [ -f "$__object/parameter/filter-service" -a -f "$__object/parameter/filter-state" ]; then if [ -f "$__object/parameter/filter-service" ] && [ -f "$__object/parameter/filter-state" ]; then
echo "Use either --filter-service or --filter-state but not both." >&2 echo "Use either --filter-service or --filter-state but not both." >&2
exit 1 exit 1
fi fi
@ -35,7 +35,8 @@ fi
echo "{" echo "{"
printf ' "watches": [{\n' printf ' "watches": [{\n'
printf ' "type": "%s"\n' "$watch_type" printf ' "type": "%s"\n' "$watch_type"
for param in $(ls "$__object/parameter/"); do cd "$__object/parameter/"
for param in *; do
case "$param" in case "$param" in
state) continue ;; state) continue ;;
filter-*) filter-*)

View File

@ -29,7 +29,8 @@ state="$(cat "$__object/parameter/state")"
echo "{" echo "{"
printf ' "watches": [{\n' printf ' "watches": [{\n'
printf ' "type": "%s"\n' "$watch_type" printf ' "type": "%s"\n' "$watch_type"
for param in $(ls "$__object/parameter/"); do cd "$__object/parameter/"
for param in *; do
case "$param" in case "$param" in
state) continue ;; state) continue ;;
*) *)

View File

@ -29,7 +29,8 @@ state="$(cat "$__object/parameter/state")"
echo "{" echo "{"
printf ' "watches": [{\n' printf ' "watches": [{\n'
printf ' "type": "%s"\n' "$watch_type" printf ' "type": "%s"\n' "$watch_type"
for param in $(ls "$__object/parameter/"); do cd "$__object/parameter/"
for param in *; do
case "$param" in case "$param" in
state) continue ;; state) continue ;;
*) *)

View File

@ -29,7 +29,8 @@ state="$(cat "$__object/parameter/state")"
echo "{" echo "{"
printf ' "watches": [{\n' printf ' "watches": [{\n'
printf ' "type": "%s"\n' "$watch_type" printf ' "type": "%s"\n' "$watch_type"
for param in $(ls "$__object/parameter/"); do cd "$__object/parameter/"
for param in *; do
case "$param" in case "$param" in
state) continue ;; state) continue ;;
*) *)

View File

@ -29,7 +29,8 @@ state="$(cat "$__object/parameter/state")"
echo "{" echo "{"
printf ' "watches": [{\n' printf ' "watches": [{\n'
printf ' "type": "%s"\n' "$watch_type" printf ' "type": "%s"\n' "$watch_type"
for param in $(ls "$__object/parameter/"); do cd "$__object/parameter/"
for param in *; do
case "$param" in case "$param" in
state) continue ;; state) continue ;;
*) *)

View File

@ -29,7 +29,8 @@ state="$(cat "$__object/parameter/state")"
echo "{" echo "{"
printf ' "watches": [{\n' printf ' "watches": [{\n'
printf ' "type": "%s"\n' "$watch_type" printf ' "type": "%s"\n' "$watch_type"
for param in $(ls "$__object/parameter/"); do cd "$__object/parameter/"
for param in *; do
case "$param" in case "$param" in
state) continue ;; state) continue ;;
passingonly) passingonly)

View File

@ -29,7 +29,8 @@ state="$(cat "$__object/parameter/state")"
echo "{" echo "{"
printf ' "watches": [{\n' printf ' "watches": [{\n'
printf ' "type": "%s"\n' "$watch_type" printf ' "type": "%s"\n' "$watch_type"
for param in $(ls "$__object/parameter/"); do cd "$__object/parameter/"
for param in *; do
case "$param" in case "$param" in
state) continue ;; state) continue ;;
*) *)

View File

@ -24,7 +24,7 @@ user="$(cat "$__object/parameter/user")"
if [ -f "$__object/parameter/raw_command" ]; then if [ -f "$__object/parameter/raw_command" ]; then
command="$(cat "$__object/parameter/command")" command="$(cat "$__object/parameter/command")"
crontab -u $user -l 2>/dev/null | grep "^$command\$" || true crontab -u "$user" -l 2>/dev/null | grep "^$command\$" || true
else else
crontab -u $user -l 2>/dev/null | grep "# $name\$" || true crontab -u "$user" -l 2>/dev/null | grep "# $name\$" || true
fi fi

View File

@ -58,7 +58,7 @@ state_should="$(cat "$__object/parameter/state" 2>/dev/null || echo "present")"
# These are the old markers # These are the old markers
prefix="#cdist:__cron/$__object_id" prefix="#cdist:__cron/$__object_id"
suffix="#/cdist:__cron/$__object_id" suffix="#/cdist:__cron/$__object_id"
filter="^# DO NOT EDIT THIS FILE|^# \(.* installed on |^# \(Cron version V|^# \(Cronie version .\..\)$" filter='^# DO NOT EDIT THIS FILE|^# \(.* installed on |^# \(Cron version V|^# \(Cronie version .\..\)$'
cat << DONE cat << DONE
crontab -u $user -l 2>/dev/null | grep -v -E "$filter" | awk -v prefix="$prefix" -v suffix="$suffix" ' crontab -u $user -l 2>/dev/null | grep -v -E "$filter" | awk -v prefix="$prefix" -v suffix="$suffix" '
{ {

View File

@ -3,12 +3,13 @@
pkg=$(cat "$__object/parameter/from-package") pkg=$(cat "$__object/parameter/from-package")
servicedir=$(cat "$__object/parameter/servicedir") servicedir=$(cat "$__object/parameter/servicedir")
__package $pkg __package "$pkg"
__directory $servicedir --mode 700 __directory "$servicedir" --mode 700
os=$(cat "$__global/explorer/os") os=$(cat "$__global/explorer/os")
init=$(cat "$__global/explorer/init") init=$(cat "$__global/explorer/init")
require=""
case $os in case $os in
freebsd) freebsd)
# TODO change to __start_on_boot once it supports freebsd # TODO change to __start_on_boot once it supports freebsd

1
cdist/conf/type/__daemontools_service/explorer/svc Normal file → Executable file
View File

@ -1 +1,2 @@
#!/bin/sh
command -v svc || true command -v svc || true

View File

@ -25,14 +25,14 @@ badusage() {
[ -z "$run$runfile" ] && badusage [ -z "$run$runfile" ] && badusage
[ -n "$run" ] && [ -n "$runfile" ] && badusage [ -n "$run" ] && [ -n "$runfile" ] && badusage
__directory $servicedir/$name/log/main --parents __directory "$servicedir/$name/log/main" --parents
echo "$RUN_PREFIX$run" | require="__directory/$servicedir/$name/log/main" __config_file "$servicedir/$name/run" \ echo "$RUN_PREFIX$run" | require="__directory/$servicedir/$name/log/main" __config_file "$servicedir/$name/run" \
--onchange "svc -t '$servicedir/$name' 2>/dev/null" \ --onchange "svc -t '$servicedir/$name' 2>/dev/null" \
--mode 755 \ --mode 755 \
--source "${runfile:--}" --source "${runfile:--}"
echo "$RUN_PREFIX$logrun" | require="__directory/$servicedir/$name/log/main" __config_file $servicedir/$name/log/run \ echo "$RUN_PREFIX$logrun" | require="__directory/$servicedir/$name/log/main" __config_file "$servicedir/$name/log/run" \
--onchange "svc -t '$servicedir/$name/log' 2>/dev/null" \ --onchange "svc -t '$servicedir/$name/log' 2>/dev/null" \
--mode 755 \ --mode 755 \
--source "-" --source "-"

View File

@ -57,18 +57,18 @@ get_current_value() {
} }
set_group() { set_group() {
echo chgrp $recursive \"$1\" \"$destination\" echo "chgrp $recursive '$1' '$destination'"
echo chgrp $recursive $1 >> "$__messages_out" echo "chgrp $recursive '$1'" >> "$__messages_out"
} }
set_owner() { set_owner() {
echo chown $recursive \"$1\" \"$destination\" echo "chown $recursive '$1' '$destination'"
echo chown $recursive $1 >> "$__messages_out" echo "chown $recursive '$1'" >> "$__messages_out"
} }
set_mode() { set_mode() {
echo chmod $recursive \"$1\" \"$destination\" echo "chmod $recursive '$1' '$destination'"
echo chmod $recursive $1 >> "$__messages_out" echo "chmod $recursive '$1'" >> "$__messages_out"
} }
case "$state_should" in case "$state_should" in
@ -78,10 +78,10 @@ case "$state_should" in
if [ "$type" != "none" ]; then if [ "$type" != "none" ]; then
# our destination is not a directory, remove whatever is there # our destination is not a directory, remove whatever is there
# and then create our directory and set all attributes # and then create our directory and set all attributes
echo rm -f "\"$destination\"" echo "rm -f '$destination'"
echo "remove non directory" >> "$__messages_out" echo "remove non directory" >> "$__messages_out"
fi fi
echo "mkdir $mkdiropt \"$destination\"" echo "mkdir $mkdiropt '$destination'"
echo "create" >> "$__messages_out" echo "create" >> "$__messages_out"
fi fi
@ -94,7 +94,7 @@ case "$state_should" in
# change 0xxx format to xxx format => same as stat returns # change 0xxx format to xxx format => same as stat returns
if [ "$attribute" = mode ]; then if [ "$attribute" = mode ]; then
value_should="$(echo $value_should | sed 's/^0\(...\)/\1/')" value_should="$(echo "$value_should" | sed 's/^0\(...\)/\1/')"
fi fi
if [ "$set_attributes" = 1 ] || [ "$value_should" != "$value_is" ]; then if [ "$set_attributes" = 1 ] || [ "$value_should" != "$value_is" ]; then
@ -105,7 +105,7 @@ case "$state_should" in
;; ;;
absent) absent)
if [ "$type" = "directory" ]; then if [ "$type" = "directory" ]; then
echo rm -rf \"$destination\" echo "rm -rf '$destination'"
echo remove >> "$__messages_out" echo remove >> "$__messages_out"
fi fi
;; ;;

View File

@ -3,12 +3,12 @@ cdist-type__docker(7)
NAME NAME
---- ----
cdist-type__docker - install docker-engine cdist-type__docker - install Docker CE
DESCRIPTION DESCRIPTION
----------- -----------
Installs latest docker-engine package from dockerproject.org. Installs latest Docker Community Edition package.
REQUIRED PARAMETERS REQUIRED PARAMETERS
@ -18,16 +18,13 @@ None.
OPTIONAL PARAMETERS OPTIONAL PARAMETERS
------------------- -------------------
None. state
'present' or 'absent', defaults to 'present'
BOOLEAN PARAMETERS BOOLEAN PARAMETERS
------------------ ------------------
experimental None.
Install the experimental docker-engine package instead of the latest stable release.
state
'present' or 'absent', defaults to 'present'
EXAMPLES EXAMPLES
@ -38,9 +35,6 @@ EXAMPLES
# Install docker # Install docker
__docker __docker
# Install experimental
__docker --experimental
# Remove docker # Remove docker
__docker --state absent __docker --state absent

View File

@ -24,57 +24,38 @@ state=$(cat "$__object/parameter/state")
case "$os" in case "$os" in
centos) centos)
component="main" # shellcheck source=/dev/null
if [ -f "$__object/parameter/experimental" ]; then if (. "$__global/explorer/os_release" && [ "${VERSION_ID}" = "7" ]); then
component="experimental" __yum_repo docker-ce-stable \
--name 'Docker CE Stable' \
--baseurl "https://download.docker.com/linux/centos/7/\$basearch/stable" \
--enabled \
--gpgcheck 1 \
--gpgkey 'https://download.docker.com/linux/centos/gpg' \
--state "${state}"
require="__yum_repo/docker-ce-stable" __package docker-ce --state "${state}"
else
echo "CentOS version 7 is required!" >&2
exit 1
fi fi
__yum_repo docker \
--name 'Docker Repository' \
--baseurl "https://yum.dockerproject.org/repo/$component/centos/\$releasever/" \
--enabled \
--gpgcheck 1 \
--gpgkey 'https://yum.dockerproject.org/gpg' \
--state ${state}
require="__yum_repo/docker" __package docker-engine --state ${state}
;; ;;
ubuntu) ubuntu|debian)
component="main" if [ "${state}" = "present" ]; then
if [ -f "$__object/parameter/experimental" ]; then __package apt-transport-https
component="experimental" __package ca-certificates
__package gnupg2
fi fi
__package apparmor --state ${state} __apt_key_uri docker --name "Docker Release (CE deb) <docker@docker.com>" \
__package ca-certificates --state ${state} --uri "https://download.docker.com/linux/${os}/gpg" --state "${state}"
__package apt-transport-https --state ${state}
__apt_key docker --keyid 58118E89F3A912897C070ADBF76221572C52609D --state ${state}
export CDIST_ORDER_DEPENDENCY=on export CDIST_ORDER_DEPENDENCY=on
__apt_source docker \ __apt_source docker \
--uri https://apt.dockerproject.org/repo \ --uri "https://download.docker.com/linux/${os}" \
--distribution "ubuntu-$(cat "$__global/explorer/lsb_codename")" \ --distribution "$(cat "$__global/explorer/lsb_codename")" \
--state ${state} \ --state "${state}" \
--component "$component" --component "stable"
__package docker-engine --state ${state} __package docker-ce --state "${state}"
unset CDIST_ORDER_DEPENDENCY unset CDIST_ORDER_DEPENDENCY
;; ;;
debian)
component="main"
if [ -f "$__object/parameter/experimental" ]; then
component="experimental"
fi
__package apt-transport-https --state ${state}
__package ca-certificates --state ${state}
__package gnupg2 --state ${state}
__apt_key docker --keyid 58118E89F3A912897C070ADBF76221572C52609D --state ${state}
export CDIST_ORDER_DEPENDENCY=on
__apt_source docker \
--uri https://apt.dockerproject.org/repo \
--distribution "debian-$(cat "$__global/explorer/lsb_codename")" \
--state ${state} \
--component "$component"
__package docker-engine --state ${state}
unset CDIST_ORDER_DEPENDENCY
;;
*) *)
echo "Your operating system ($os) is currently not supported by this type (${__type##*/})." >&2 echo "Your operating system ($os) is currently not supported by this type (${__type##*/})." >&2
echo "Please contribute an implementation for it if you can." >&2 echo "Please contribute an implementation for it if you can." >&2

View File

@ -1 +0,0 @@
experimental

View File

@ -22,10 +22,11 @@
version="$(cat "$__object/parameter/version")" version="$(cat "$__object/parameter/version")"
state="$(cat "$__object/parameter/state")" state="$(cat "$__object/parameter/state")"
if [ ${state} = "present" ]; then if [ "${state}" = "present" ]; then
# Download docker-compose file # Download docker-compose file
echo 'curl -L "https://github.com/docker/compose/releases/download/'${version}'/docker-compose-$(uname -s)-$(uname -m)" -o /tmp/docker-compose' #shellcheck disable=SC2016
echo 'mv /tmp/docker-compose /usr/local/bin/docker-compose' echo 'curl -L "https://github.com/docker/compose/releases/download/'"${version}"'/docker-compose-$(uname -s)-$(uname -m)" -o /tmp/docker-compose'
echo 'mv /tmp/docker-compose /usr/local/bin/docker-compose'
# Change permissions # Change permissions
echo 'chmod +x /usr/local/bin/docker-compose' echo 'chmod +x /usr/local/bin/docker-compose'
fi fi

View File

@ -22,10 +22,10 @@
state="$(cat "$__object/parameter/state")" state="$(cat "$__object/parameter/state")"
# Needed packages # Needed packages
if [ ${state} = "present" ]; then if [ "${state}" = "present" ]; then
__docker __docker
__package curl __package curl
elif [ ${state} = "absent" ]; then elif [ "${state}" = "absent" ]; then
__file /usr/local/bin/docker-compose --state absent __file /usr/local/bin/docker-compose --state absent
else else
echo "Unknown state: ${state}" >&2 echo "Unknown state: ${state}" >&2

View File

@ -1,6 +1,6 @@
#!/bin/sh -e #!/bin/sh -e
# #
# 2011 Steven Armstrong (steven-cdist at armstrong.cc) # 2018 Ľubomír Kučera <lubomir.kucera.jr at gmail.com>
# #
# This file is part of cdist. # This file is part of cdist.
# #
@ -18,6 +18,5 @@
# along with cdist. If not, see <http://www.gnu.org/licenses/>. # along with cdist. If not, see <http://www.gnu.org/licenses/>.
# #
# set defaults docker config inspect "${__object_id:?}" --format '{{json .Spec.Data}}' \
target="$(cat "$__object/parameter/target" 2>/dev/null \ 2>/dev/null | tr -d '"' | base64 -d
|| echo "/target" | tee "$__object/parameter/target")"

View File

@ -0,0 +1,25 @@
#!/bin/sh -e
#
# 2018 Ľubomír Kučera <lubomir.kucera.jr 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 docker config ls | grep -q " ${__object_id:?} "; then
echo yes
else
echo no
fi

View File

@ -0,0 +1,69 @@
#!/bin/sh -e
#
# 2018 Ľubomír Kučera <lubomir.kucera.jr 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/>.
#
config="${__object_id:?}"
config_exists=$(cat "${__object:?}/explorer/config-exists")
state=$(cat "${__object:?}/parameter/state")
case "${state}" in
absent)
if [ "${config_exists}" != "yes" ]; then
exit 0
fi
echo "docker config rm \"${config}\""
;;
present)
source=$(cat "${__object}/parameter/source")
if [ -z "${source}" ]; then
exit 0
fi
if [ "${source}" = "-" ]; then
source="${__object}/stdin"
fi
if [ "${config_exists}" = "yes" ]; then
if cmp -s "${source}" "${__object}/explorer/config-data"; then
exit 0
else
echo "docker config rm \"${config}\""
fi
fi
cat <<-EOF
source_file="\$(mktemp cdist.XXXXXXXXXX)"
base64 -d > "\${source_file}" << eof
$(base64 "${source}")
eof
docker config create "${config}" "\${source_file}"
rm "\${source_file}"
EOF
;;
*)
echo "Unsupported state: ${state}" >&2
exit 1
;;
esac

View File

@ -0,0 +1,55 @@
cdist-type__docker_config(7)
============================
NAME
----
cdist-type__docker_config - Manage Docker configs
DESCRIPTION
-----------
This type manages Docker configs.
OPTIONAL PARAMETERS
-------------------
source
Path to the source file. If it is '-' (dash), read standard input.
state
'present' or 'absent', defaults to 'present' where:
present
if the config does not exist, it is created
absent
the config is removed
CAVEATS
-------
Since Docker configs cannot be updated once created, this type tries removing
and recreating the config if it changes. If the config is used by a service at
the time of removing, then this type will fail.
EXAMPLES
--------
.. code-block:: sh
# Creates "foo" config from "bar" source file
__docker_config foo --source bar
AUTHORS
-------
Ľubomír Kučera <lubomir.kucera.jr at gmail.com>
COPYING
-------
Copyright \(C) 2018 Ľubomír Kučera. 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.

View File

@ -0,0 +1 @@
present

View File

@ -0,0 +1,2 @@
source
state

View File

@ -0,0 +1,25 @@
#!/bin/sh -e
#
# 2018 Ľubomír Kučera <lubomir.kucera.jr 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 docker secret ls | grep -q " ${__object_id:?} "; then
echo yes
else
echo no
fi

View File

@ -0,0 +1,65 @@
#!/bin/sh -e
#
# 2018 Ľubomír Kučera <lubomir.kucera.jr 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/>.
#
secret="${__object_id:?}"
secret_exists=$(cat "${__object:?}/explorer/secret-exists")
state=$(cat "${__object:?}/parameter/state")
case "${state}" in
absent)
if [ "${secret_exists}" != "yes" ]; then
exit 0
fi
echo "docker secret rm ${secret}"
;;
present)
if [ "${secret_exists}" = "yes" ]; then
exit 0
fi
source=$(cat "${__object}/parameter/source")
if [ -z "${source}" ]; then
exit 0
fi
if [ "${source}" = "-" ]; then
source="${__object}/stdin"
fi
cat <<-EOF
source_file="\$(mktemp cdist.XXXXXXXXXX)"
base64 -d > "\${source_file}" << eof
$(base64 "${source}")
eof
docker secret create "${secret}" "\${source_file}"
rm "\${source_file}"
EOF
;;
*)
echo "Unsupported state: ${state}" >&2
exit 1
;;
esac

View File

@ -0,0 +1,54 @@
cdist-type__docker_secret(7)
============================
NAME
----
cdist-type__docker_secret - Manage Docker secrets
DESCRIPTION
-----------
This type manages Docker secrets.
OPTIONAL PARAMETERS
-------------------
source
Path to the source file. If it is '-' (dash), read standard input.
state
'present' or 'absent', defaults to 'present' where:
present
if the secret does not exist, it is created
absent
the secret is removed
CAVEATS
-------
Since Docker secrets cannot be updated once created, this type takes no action
if the specified secret already exists.
EXAMPLES
--------
.. code-block:: sh
# Creates "foo" secret from "bar" source file
__docker_secret foo --source bar
AUTHORS
-------
Ľubomír Kučera <lubomir.kucera.jr at gmail.com>
COPYING
-------
Copyright \(C) 2018 Ľubomír Kučera. 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.

View File

@ -0,0 +1 @@
present

View File

@ -0,0 +1,2 @@
source
state

View File

@ -0,0 +1,25 @@
#!/bin/sh -e
#
# 2018 Ľubomír Kučera <lubomir.kucera.jr 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 docker stack ls | grep -q "^${__object_id:?} "; then
echo 1
else
echo 0
fi

View File

@ -0,0 +1,63 @@
#!/bin/sh -e
#
# 2018 Ľubomír Kučera <lubomir.kucera.jr 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/>.
#
stack="${__object_id:?}"
state=$(cat "${__object:?}/parameter/state")
case "${state}" in
absent)
stack_exists=$(cat "${__object:?}/explorer/stack-exists")
if [ "${stack_exists}" -ne 1 ]; then
exit 0
fi
echo "docker stack rm ${stack}"
;;
present)
compose_file=$(cat "${__object}/parameter/compose-file")
if [ -z "${compose_file}" ]; then
exit 0
fi
if [ "${compose_file}" = "-" ]; then
compose_file="${__object}/stdin"
fi
cat <<-EOF
compose_file="\$(mktemp cdist.XXXXXXXXXX)"
base64 -d > "\${compose_file}" << eof
$(base64 "${compose_file}")
eof
docker stack deploy --compose-file "\${compose_file}" \
--prune --with-registry-auth ${stack}
rm "\${compose_file}"
EOF
;;
*)
echo "Unsupported state: ${state}" >&2
exit 1
;;
esac

View File

@ -0,0 +1,54 @@
cdist-type__docker_stack(7)
===========================
NAME
----
cdist-type__docker_stack - Manage Docker stacks
DESCRIPTION
-----------
This type manages service stacks.
.. note::
Since there is no easy way to tell whether a stack needs to be updated,
`docker stack deploy` is being run every time this type is invoked.
However, it does not mean this type is not idempotent. If Docker does not
detect changes, the existing stack will not be updated.
OPTIONAL PARAMETERS
-------------------
compose-file
Path to the compose file. If it is '-' (dash), read standard input.
state
'present' or 'absent', defaults to 'present' where:
present
the stack is deployed
absent
the stack is removed
EXAMPLES
--------
.. code-block:: sh
# Deploys 'foo' stack defined in 'docker-compose.yml' compose file
__docker_stack foo --compose-file docker-compose.yml
AUTHORS
-------
Ľubomír Kučera <lubomir.kucera.jr at gmail.com>
COPYING
-------
Copyright \(C) 2018 Ľubomír Kučera. 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.

View File

@ -0,0 +1 @@
present

View File

@ -0,0 +1,2 @@
compose-file
state

View File

@ -0,0 +1,21 @@
#!/bin/sh -e
#
# 2018 Ľubomír Kučera <lubomir.kucera.jr 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/>.
#
docker info 2>/dev/null | grep "^Swarm: " | cut -d " " -f 2-

View File

@ -0,0 +1,46 @@
#!/bin/sh -e
#
# 2018 Ľubomír Kučera <lubomir.kucera.jr 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/>.
#
state=$(cat "${__object:?}/parameter/state")
swarm_state="$(cat "${__object}/explorer/swarm-state")"
if [ -z "${swarm_state}" ]; then
echo "Unable to determine Swarm state. Is compatible version of Docker installed?" >&2
exit 1
fi
case "${state}" in
absent)
if [ "${swarm_state}" = "active" ]; then
echo "docker swarm leave --force"
fi
;;
present)
if [ "${swarm_state}" = "inactive" ]; then
echo "docker swarm init"
fi
;;
*)
echo "Unsupported state: ${state}" >&2
exit 1
;;
esac

View File

@ -0,0 +1,49 @@
cdist-type__docker_swarm(7)
===========================
NAME
----
cdist-type__docker_swarm - Manage Swarm
DESCRIPTION
-----------
This type can initialize Docker swarm mode. For more information about swarm
mode, see `Swarm mode overview <https://docs.docker.com/engine/swarm/>`_.
OPTIONAL PARAMETERS
-------------------
state
'present' or 'absent', defaults to 'present' where:
present
Swarm is initialized
absent
Swarm is left
EXAMPLES
--------
.. code-block:: sh
# Initializes a swarm
__docker_swarm
# Leaves a swarm
__docker_swarm --state absent
AUTHORS
-------
Ľubomír Kučera <lubomir.kucera.jr at gmail.com>
COPYING
-------
Copyright \(C) 2018 Ľubomír Kučera. 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.

View File

@ -0,0 +1 @@
present

View File

@ -0,0 +1 @@
state

View File

View File

@ -19,7 +19,7 @@ set -eu
user="$(cat "${__object}/parameter/user")" user="$(cat "${__object}/parameter/user")"
if which getent >/dev/null 2>&1; then if command -v getent >/dev/null 2>&1; then
line=$(getent passwd "${user}") line=$(getent passwd "${user}")
else else
line=$(grep "^${user}:" /etc/passwd) line=$(grep "^${user}:" /etc/passwd)

View File

@ -23,7 +23,7 @@ destination="/$__object_id"
state_should="$(cat "$__object/parameter/state")" state_should="$(cat "$__object/parameter/state")"
type="$(cat "$__object/explorer/type")" type="$(cat "$__object/explorer/type")"
[ "$state_should" = "exists" -a "$type" = "file" ] && exit 0 # nothing to do [ "$state_should" = "exists" ] && [ "$type" = "file" ] && exit 0 # nothing to do
if [ "$state_should" = "pre-exists" ]; then if [ "$state_should" = "pre-exists" ]; then
if [ -f "$__object/parameter/source" ]; then if [ -f "$__object/parameter/source" ]; then
@ -41,7 +41,7 @@ fi
upload_file= upload_file=
create_file= create_file=
if [ "$state_should" = "present" -o "$state_should" = "exists" ]; then if [ "$state_should" = "present" ] || [ "$state_should" = "exists" ]; then
if [ ! -f "$__object/parameter/source" ]; then if [ ! -f "$__object/parameter/source" ]; then
remote_stat="$(cat "$__object/explorer/stat")" remote_stat="$(cat "$__object/explorer/stat")"
if [ -z "$remote_stat" ]; then if [ -z "$remote_stat" ]; then
@ -70,7 +70,7 @@ if [ "$state_should" = "present" -o "$state_should" = "exists" ]; then
fi fi
fi fi
fi fi
if [ "$create_file" -o "$upload_file" ]; then if [ "$create_file" ] || [ "$upload_file" ]; then
# tell gencode-remote that we created or uploaded a file and that it must # tell gencode-remote that we created or uploaded a file and that it must
# set all attributes no matter what the explorer retreived # set all attributes no matter what the explorer retreived
mkdir "$__object/files" mkdir "$__object/files"
@ -84,7 +84,7 @@ DONE
if [ "$upload_file" ]; then if [ "$upload_file" ]; then
echo upload >> "$__messages_out" echo upload >> "$__messages_out"
# IPv6 fix # IPv6 fix
if $(echo "${__target_host}" | grep -q -E '^[0-9a-fA-F:]+$') if echo "${__target_host}" | grep -q -E '^[0-9a-fA-F:]+$'
then then
my_target_host="[${__target_host}]" my_target_host="[${__target_host}]"
else else

View File

@ -43,21 +43,20 @@ get_current_value() {
} }
set_group() { set_group() {
echo chgrp \"$1\" \"$destination\" echo "chgrp '$1' '$destination'"
echo chgrp $1 >> "$__messages_out" echo "chgrp '$1'" >> "$__messages_out"
} }
set_owner() { set_owner() {
echo chown \"$1\" \"$destination\" echo "chown '$1' '$destination'"
echo chown $1 >> "$__messages_out" echo "chown '$1'" >> "$__messages_out"
} }
set_mode() { set_mode() {
echo chmod \"$1\" \"$destination\" echo "chmod '$1' '$destination'"
echo chmod $1 >> "$__messages_out" echo "chmod '$1'" >> "$__messages_out"
} }
set_attributes=
case "$state_should" in case "$state_should" in
present|exists|pre-exists) present|exists|pre-exists)
# Note: Mode - needs to happen last as a chown/chgrp can alter mode by # Note: Mode - needs to happen last as a chown/chgrp can alter mode by
@ -68,11 +67,11 @@ case "$state_should" in
# change 0xxx format to xxx format => same as stat returns # change 0xxx format to xxx format => same as stat returns
if [ "$attribute" = mode ]; then if [ "$attribute" = mode ]; then
value_should="$(echo $value_should | sed 's/^0\(...\)/\1/')" value_should="$(echo "$value_should" | sed 's/^0\(...\)/\1/')"
fi fi
value_is="$(get_current_value "$attribute" "$value_should")" value_is="$(get_current_value "$attribute" "$value_should")"
if [ -f "$__object/files/set-attributes" -o "$value_should" != "$value_is" ]; then if [ -f "$__object/files/set-attributes" ] || [ "$value_should" != "$value_is" ]; then
"set_$attribute" "$value_should" "set_$attribute" "$value_should"
fi fi
fi fi
@ -82,7 +81,7 @@ case "$state_should" in
absent) absent)
if [ "$type" = "file" ]; then if [ "$type" = "file" ]; then
echo rm -f \"$destination\" echo "rm -f '$destination'"
echo remove >> "$__messages_out" echo remove >> "$__messages_out"
fi fi
;; ;;

View File

@ -25,7 +25,7 @@ chain="$(cat "$__object/parameter/chain")"
priority="$(cat "$__object/parameter/priority")" priority="$(cat "$__object/parameter/priority")"
rule="$(cat "$__object/parameter/rule")" rule="$(cat "$__object/parameter/rule")"
if firewall-cmd --permanent --direct --query-rule "$protocol" "$table" "$chain" "$priority" $rule >/dev/null; then if firewall-cmd --permanent --direct --query-rule "$protocol" "$table" "$chain" "$priority" "$rule" >/dev/null; then
echo present echo present
else else
echo absent echo absent

View File

@ -19,7 +19,6 @@
# #
# #
name="$__object_id"
state_should="$(cat "$__object/parameter/state")" state_should="$(cat "$__object/parameter/state")"
state_is="$(cat "$__object/explorer/rule")" state_is="$(cat "$__object/explorer/rule")"
@ -33,13 +32,13 @@ rule="$(cat "$__object/parameter/rule")"
case "$state_should" in case "$state_should" in
present) present)
echo firewall-cmd --quiet --permanent --direct --add-rule \"$protocol\" \"$table\" \"$chain\" \"$priority\" $rule echo "firewall-cmd --quiet --permanent --direct --add-rule '$protocol' '$table' '$chain' '$priority' $rule"
echo firewall-cmd --quiet --direct --add-rule \"$protocol\" \"$table\" \"$chain\" \"$priority\" $rule echo "firewall-cmd --quiet --direct --add-rule '$protocol' '$table' '$chain' '$priority' $rule"
;; ;;
absent) absent)
echo firewall-cmd --quiet --permanent --direct --remove-rule \"$protocol\" \"$table\" \"$chain\" \"$priority\" $rule echo "firewall-cmd --quiet --permanent --direct --remove-rule '$protocol' '$table' '$chain' '$priority' $rule"
echo firewall-cmd --quiet --direct --remove-rule \"$protocol\" \"$table\" \"$chain\" \"$priority\" $rule echo "firewall-cmd --quiet --direct --remove-rule '$protocol' '$table' '$chain' '$priority' $rule"
;; ;;
*) *)
echo "Unknown state $state_should" >&2 echo "Unknown state $state_should" >&2

View File

@ -2,4 +2,4 @@
destination="/$__object_id/.git" destination="/$__object_id/.git"
stat --print "%G" ${destination} 2>/dev/null || exit 0 stat --print "%G" "${destination}" 2>/dev/null || exit 0

View File

@ -2,4 +2,4 @@
destination="/$__object_id/.git" destination="/$__object_id/.git"
stat --print "%U" ${destination} 2>/dev/null || exit 0 stat --print "%U" "${destination}" 2>/dev/null || exit 0

View File

@ -35,10 +35,10 @@ owner="$(cat "$__object/parameter/owner")"
group="$(cat "$__object/parameter/group")" group="$(cat "$__object/parameter/group")"
mode="$(cat "$__object/parameter/mode")" mode="$(cat "$__object/parameter/mode")"
[ "$state_should" = "$state_is" -a \ [ "$state_should" = "$state_is" ] && \
"$owner" = "$owner_is" -a \ [ "$owner" = "$owner_is" ] && \
"$group" = "$group_is" -a \ [ "$group" = "$group_is" ] && \
-n "$mode" ] && exit 0 [ -n "$mode" ] && exit 0
case $state_should in case $state_should in
present) present)
@ -46,8 +46,8 @@ case $state_should in
if [ "$state_should" != "$state_is" ]; then if [ "$state_should" != "$state_is" ]; then
echo git clone --quiet --branch "$branch" "$source" "$destination" echo git clone --quiet --branch "$branch" "$source" "$destination"
fi fi
if [ \( -n "$owner" -a "$owner_is" != "$owner" \) -o \ if { [ -n "$owner" ] && [ "$owner_is" != "$owner" ]; } || \
\( -n "$group" -a "$group_is" != "$group" \) ]; then { [ -n "$group" ] && [ "$group_is" != "$group" ]; }; then
echo chown -R "${owner}:${group}" "$destination" echo chown -R "${owner}:${group}" "$destination"
fi fi
if [ -n "$mode" ]; then if [ -n "$mode" ]; then

3
cdist/conf/type/__go_get/explorer/go-executable Normal file → Executable file
View File

@ -1,3 +1,6 @@
#!/bin/sh
# shellcheck disable=SC1091
[ -f /etc/environment ] && . /etc/environment [ -f /etc/environment ] && . /etc/environment
# shellcheck disable=SC1091
[ -f /etc/profile ] && . /etc/profile [ -f /etc/profile ] && . /etc/profile
go version 2>/dev/null || true go version 2>/dev/null || true

View File

@ -2,7 +2,7 @@
version=$(cat "$__object/parameter/version") version=$(cat "$__object/parameter/version")
kernel_name=$(cat "$__global/explorer/kernel_name" | tr '[:upper:]' '[:lower:]') kernel_name=$(tr '[:upper:]' '[:lower:]' < "$__global/explorer/kernel_name")
machine=$(cat "$__global/explorer/machine") machine=$(cat "$__global/explorer/machine")
case $machine in case $machine in
x86_64|amd64) x86_64|amd64)

View File

@ -1,3 +1,4 @@
#!/bin/sh -e #!/bin/sh -e
# shellcheck disable=SC2016
__line go_in_path --line 'export PATH=/usr/local/go/bin:$PATH' --file /etc/profile __line go_in_path --line 'export PATH=/usr/local/go/bin:$PATH' --file /etc/profile

View File

@ -1,50 +1,41 @@
#!/bin/sh -e #!/bin/sh -e
os=$(cat $__global/explorer/os) os=$(cat "$__global/explorer/os")
os_version=$(cat $__global/explorer/os_version) os_version=$(cat "$__global/explorer/os_version")
require=""
case $os in case $os in
debian|devuan) debian|devuan)
case $os_version in case $os_version in
8*|jessie) 8*|jessie)
__apt_key_uri grafana \ apt_source_distribution=jessie
--name 'Grafana Release Signing Key' \
--uri https://packagecloud.io/gpg.key
require="__apt_key_uri/grafana" __apt_source grafana \
--uri https://packagecloud.io/grafana/stable/debian/ \
--distribution jessie \
--component main
__package apt-transport-https
require="__apt_source/grafana __package/apt-transport-https" __package grafana
require="__package/grafana" __start_on_boot grafana-server
;; ;;
9*|ascii/ceres) 9*|ascii/ceres|ascii)
__apt_key_uri grafana \ apt_source_distribution=stretch
--name 'Grafana Release Signing Key' \
--uri https://packagecloud.io/gpg.key
require="__apt_key_uri/grafana" __apt_source grafana \
--uri https://packagecloud.io/grafana/stable/debian/ \
--distribution stretch \
--component main
__package apt-transport-https
require="__apt_source/grafana __package/apt-transport-https" __package grafana
require="__package/grafana" __start_on_boot grafana-server
;; ;;
*) *)
echo "Don't know how to install Grafana on $os $os_version. Send us a pull request!" echo "Don't know how to install Grafana on $os $os_version. Send us a pull request!" >&2
exit 1 exit 1
;; ;;
esac esac
;;
__apt_key_uri grafana \
--name 'Grafana Release Signing Key' \
--uri https://packagecloud.io/gpg.key
require="$require __apt_key_uri/grafana" __apt_source grafana \
--uri https://packagecloud.io/grafana/stable/debian/ \
--distribution $apt_source_distribution \
--component main
__package apt-transport-https
require="$require __apt_source/grafana __package/apt-transport-https" __package grafana
require="$require __package/grafana" __start_on_boot grafana-server
require="$require __start_on_boot/grafana-server" __process grafana-server --start "service grafana-server start"
;;
*) *)
echo "Don't know how to install Grafana on $os. Send us a pull request!" echo "Don't know how to install Grafana on $os. Send us a pull request!" >&2
exit 1 exit 1
;; ;;
esac esac

View File

@ -22,7 +22,7 @@
# #
name=$__object_id name=$__object_id
os="$($__explorer/os)" os="$("$__explorer/os")"
case "$os" in case "$os" in
"freebsd"|"netbsd") "freebsd"|"netbsd")

View File

@ -30,9 +30,9 @@ state="$(cat "$__object/parameter/state")"
# Use short option names for portability # Use short option names for portability
shorten_property() { shorten_property() {
case "$1" in case "$1" in
gid) echo "-g";; gid) echo -- "-g";;
password) echo "-p";; password) echo -- "-p";;
system) echo "-r";; system) echo -- "-r";;
esac esac
} }
@ -40,11 +40,9 @@ shorten_property() {
if [ "$state" = "present" ]; then if [ "$state" = "present" ]; then
case "$os" in case "$os" in
freebsd) freebsd)
supported_add_properties="gid"
supported_change_properties="gid" supported_change_properties="gid"
;; ;;
*) *)
supported_add_properties="gid password system"
supported_change_properties="gid password" supported_change_properties="gid password"
;; ;;
esac esac
@ -63,8 +61,8 @@ if [ "$state" = "present" ]; then
;; ;;
esac esac
if [ "$new_value" != "$current_value" ]; then if [ "$new_value" != "$current_value" ]; then
set -- "$@" "$(shorten_property $property)" \'$new_value\' set -- "$@" "$(shorten_property "$property")" \'"$new_value"\'
echo change $property $new_value $current_value >> "$__messages_out" echo "change $property $new_value $current_value" >> "$__messages_out"
fi fi
fi fi
done done
@ -83,9 +81,9 @@ if [ "$state" = "present" ]; then
new_value="$(cat "$__object/parameter/$property")" new_value="$(cat "$__object/parameter/$property")"
if [ -z "$new_value" ]; then if [ -z "$new_value" ]; then
# Boolean parameters have no value # Boolean parameters have no value
set -- "$@" "$(shorten_property $property)" set -- "$@" "$(shorten_property "$property")"
else else
set -- "$@" "$(shorten_property $property)" \'$new_value\' set -- "$@" "$(shorten_property "$property")" \'"$new_value"\'
fi fi
fi fi
done done

View File

@ -22,7 +22,7 @@
if [ -f "$__object/parameter/name" ]; then if [ -f "$__object/parameter/name" ]; then
name_should="$(cat "$__object/parameter/name")" name_should="$(cat "$__object/parameter/name")"
else else
name_should="$(echo "${__target_host%%.*}")" name_should="${__target_host%%.*}"
fi fi
os=$(cat "$__global/explorer/os") os=$(cat "$__global/explorer/os")
@ -36,12 +36,12 @@ has_hostnamectl=$(cat "$__object/explorer/has_hostnamectl")
# #
case "$os" in case "$os" in
archlinux|debian|suse|ubuntu|devuan|coreos) archlinux|debian|suse|ubuntu|devuan|coreos)
if [ "$name_config" = "$name_should" -a "$name_running" = "$name_should" ]; then if [ "$name_config" = "$name_should" ] && [ "$name_running" = "$name_should" ]; then
exit 0 exit 0
fi fi
;; ;;
scientific|centos|openbsd) scientific|centos|freebsd|openbsd)
if [ "$name_sysconfig" = "$name_should" -a "$name_running" = "$name_should" ]; then if [ "$name_sysconfig" = "$name_should" ] && [ "$name_running" = "$name_should" ]; then
exit 0 exit 0
fi fi
;; ;;
@ -59,15 +59,15 @@ echo changed >> "$__messages_out"
# Use the good old way to set the hostname even on machines running systemd. # Use the good old way to set the hostname even on machines running systemd.
case "$os" in case "$os" in
archlinux|debian|ubuntu|devuan|centos|coreos) archlinux|debian|ubuntu|devuan|centos|coreos)
echo "printf '%s\n' '$name_should' > /etc/hostname" printf "printf '%s\\n' '$name_should' > /etc/hostname\\n"
echo "hostname -F /etc/hostname" echo "hostname -F /etc/hostname"
;; ;;
openbsd) freebsd|openbsd)
echo "hostname '$name_should'" echo "hostname '$name_should'"
;; ;;
suse) suse)
echo "hostname '$name_should'" echo "hostname '$name_should'"
echo "printf '%s\n' '$name_should' > /etc/HOSTNAME" printf "printf '%s\\n' '$name_should' > /etc/HOSTNAME\\n"
;; ;;
esac esac

View File

@ -25,10 +25,10 @@ if [ -f "$__object/parameter/name" ]; then
else else
case "$os" in case "$os" in
openbsd) openbsd)
name_should="$(echo "${__target_host}")" name_should="${__target_host}"
;; ;;
*) *)
name_should="$(echo "${__target_host%%.*}")" name_should="${__target_host%%.*}"
;; ;;
esac esac
fi fi
@ -52,6 +52,13 @@ case "$os" in
--key HOSTNAME \ --key HOSTNAME \
--value "$name_should" --exact_delimiter --value "$name_should" --exact_delimiter
;; ;;
freebsd)
__key_value rcconf-hostname \
--file /etc/rc.conf \
--delimiter '=' \
--key 'hostname' \
--value "$name_should"
;;
openbsd) openbsd)
echo "$name_should" | __file /etc/myname --source - echo "$name_should" | __file /etc/myname --source -
;; ;;

View File

@ -28,7 +28,7 @@ install_script="$__object/files/install_script"
# Link file descriptor #6 with stdout # Link file descriptor #6 with stdout
exec 6>&1 exec 6>&1
# Link stdout with $install_script # Link stdout with $install_script
exec > $install_script exec > "$install_script"
# Generate script to install bootloader on distro # Generate script to install bootloader on distro
printf '#!/bin/sh -l\n' printf '#!/bin/sh -l\n'

Some files were not shown because too many files have changed in this diff Show More