From f80501d65c3cad4dbdf899d555fa9c37fb5df2cf Mon Sep 17 00:00:00 2001 From: Nico Schottelius Date: Tue, 14 Jan 2014 08:44:41 +0100 Subject: [PATCH 01/20] ++changes(3.0.1) Signed-off-by: Nico Schottelius --- docs/changelog | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/changelog b/docs/changelog index c0cb9d65..87f864f6 100644 --- a/docs/changelog +++ b/docs/changelog @@ -4,7 +4,7 @@ Changelog * Changes are always commented with their author in (braces) * Exception: No braces means author == Nico Schottelius -3.0.1: +3.0.1: 2014-01-14 * Core: Copy only files, not directories (Steven Armstrong) * Core: Allow hostnames to start with / * Type __line: Remove unecessary backslash escape From 6afc4b82c2b064a15d1707cf293487fd4544be2f Mon Sep 17 00:00:00 2001 From: Daniel Heule Date: Tue, 14 Jan 2014 09:47:54 +0100 Subject: [PATCH 02/20] __cron should replace entrys with his id --- cdist/conf/type/__cron/explorer/entry | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/cdist/conf/type/__cron/explorer/entry b/cdist/conf/type/__cron/explorer/entry index c3bf02d2..15d9bdba 100644 --- a/cdist/conf/type/__cron/explorer/entry +++ b/cdist/conf/type/__cron/explorer/entry @@ -22,4 +22,4 @@ name="$__object_name" user="$(cat "$__object/parameter/user")" -crontab -u $user -l 2>/dev/null | grep "# $name\$" || true +crontab -u $user -l 2>/dev/null | grep "# $name\$" | head -n 1 || true From 5a114cf6ae50ddc9fa66d5cd140e5ad7ef6f71d5 Mon Sep 17 00:00:00 2001 From: Daniel Heule Date: Tue, 14 Jan 2014 10:11:33 +0100 Subject: [PATCH 03/20] __cron should replace entrys with his id, try 2 --- cdist/conf/type/__cron/explorer/entry | 2 +- cdist/conf/type/__cron/gencode-remote | 3 ++- 2 files changed, 3 insertions(+), 2 deletions(-) diff --git a/cdist/conf/type/__cron/explorer/entry b/cdist/conf/type/__cron/explorer/entry index 15d9bdba..c3bf02d2 100644 --- a/cdist/conf/type/__cron/explorer/entry +++ b/cdist/conf/type/__cron/explorer/entry @@ -22,4 +22,4 @@ name="$__object_name" user="$(cat "$__object/parameter/user")" -crontab -u $user -l 2>/dev/null | grep "# $name\$" | head -n 1 || true +crontab -u $user -l 2>/dev/null | grep "# $name\$" || true diff --git a/cdist/conf/type/__cron/gencode-remote b/cdist/conf/type/__cron/gencode-remote index 712eb1a1..77a63b9b 100755 --- a/cdist/conf/type/__cron/gencode-remote +++ b/cdist/conf/type/__cron/gencode-remote @@ -78,8 +78,9 @@ DONE case "$state_should" in present) + # if we insert new entry, filter also all entrys out with the same id echo "(" - echo "crontab -u $user -l 2>/dev/null | grep -v -E \"$filter\" 2>/dev/null || true" + echo "crontab -u $user -l 2>/dev/null | grep -v -E \"$filter\" | grep -v \"# $name\\$\" 2>/dev/null || true" echo "echo '$entry'" echo ") | crontab -u $user -" ;; From 3c0790f08045e1581bcaab93cba24837717f2fc2 Mon Sep 17 00:00:00 2001 From: Nico Schottelius Date: Tue, 14 Jan 2014 10:25:28 +0100 Subject: [PATCH 04/20] ++changes(3.0.2) Signed-off-by: Nico Schottelius --- docs/changelog | 3 +++ 1 file changed, 3 insertions(+) diff --git a/docs/changelog b/docs/changelog index 87f864f6..5271d512 100644 --- a/docs/changelog +++ b/docs/changelog @@ -4,6 +4,9 @@ Changelog * Changes are always commented with their author in (braces) * Exception: No braces means author == Nico Schottelius +3.0.2: + * Type __cron: Replace existing entry when changing it (Daniel Heule) + 3.0.1: 2014-01-14 * Core: Copy only files, not directories (Steven Armstrong) * Core: Allow hostnames to start with / From 746d9ec12bd59c2a4cc43c3354ccf94d9543bcbe Mon Sep 17 00:00:00 2001 From: Nico Schottelius Date: Tue, 14 Jan 2014 11:35:24 +0100 Subject: [PATCH 05/20] do not package .gitignore into pypi package (fixes #255) Signed-off-by: Nico Schottelius --- setup.py | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/setup.py b/setup.py index 25fc4820..32d734b8 100644 --- a/setup.py +++ b/setup.py @@ -5,6 +5,11 @@ import os def data_finder(data_dir): entries = [] for name in os.listdir(data_dir): + + # Skip .gitignore files + if name == ".gitignore": + continue + entry = os.path.join(data_dir, name) if os.path.isdir(entry): entries.extend(data_finder(entry)) From 33c8f83fa6e5cfb8b5765d95b6ca4dc396f44506 Mon Sep 17 00:00:00 2001 From: Steven Armstrong Date: Tue, 14 Jan 2014 21:39:24 +0100 Subject: [PATCH 06/20] new type to manage mounts, either via fstab or manually Signed-off-by: Steven Armstrong --- cdist/conf/type/__mount/explorer/mounted | 27 +++++++ cdist/conf/type/__mount/gencode-remote | 51 ++++++++++++ cdist/conf/type/__mount/man.text | 80 +++++++++++++++++++ cdist/conf/type/__mount/manifest | 42 ++++++++++ cdist/conf/type/__mount/parameter/boolean | 1 + .../type/__mount/parameter/default/device | 1 + .../conf/type/__mount/parameter/default/dump | 1 + .../conf/type/__mount/parameter/default/pass | 1 + .../conf/type/__mount/parameter/default/state | 1 + cdist/conf/type/__mount/parameter/optional | 7 ++ 10 files changed, 212 insertions(+) create mode 100755 cdist/conf/type/__mount/explorer/mounted create mode 100755 cdist/conf/type/__mount/gencode-remote create mode 100644 cdist/conf/type/__mount/man.text create mode 100755 cdist/conf/type/__mount/manifest create mode 100644 cdist/conf/type/__mount/parameter/boolean create mode 100644 cdist/conf/type/__mount/parameter/default/device create mode 100644 cdist/conf/type/__mount/parameter/default/dump create mode 100644 cdist/conf/type/__mount/parameter/default/pass create mode 100644 cdist/conf/type/__mount/parameter/default/state create mode 100644 cdist/conf/type/__mount/parameter/optional diff --git a/cdist/conf/type/__mount/explorer/mounted b/cdist/conf/type/__mount/explorer/mounted new file mode 100755 index 00000000..81f8e454 --- /dev/null +++ b/cdist/conf/type/__mount/explorer/mounted @@ -0,0 +1,27 @@ +#!/bin/sh +# +# 2014 Steven Armstrong (steven-cdist at armstrong.cc) +# +# 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 . +# + +path="$(cat "$__object/parameter/path" 2>/dev/null || echo "/$__object_id")" + +if mountpoint -q "$path"; then + echo yes +else + echo no +fi diff --git a/cdist/conf/type/__mount/gencode-remote b/cdist/conf/type/__mount/gencode-remote new file mode 100755 index 00000000..2626f3de --- /dev/null +++ b/cdist/conf/type/__mount/gencode-remote @@ -0,0 +1,51 @@ +#!/bin/sh +# +# 2014 Steven Armstrong (steven-cdist at armstrong.cc) +# +# 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 . +# + +path="$(cat "$__object/parameter/path" 2>/dev/null || echo "/$__object_id")" +state_should="$(cat "$__object/parameter/state")" +state_is="$(grep -q -x yes "$__object/explorer/mounted" && echo present || echo absent)" + +if [ "$state_should" = "$state_is" ]; then + # nothing to do + exit 0 +fi + +case "$state_should" in + present) + if [ -f "$__object/parameter/nofstab" ]; then + # mount manually + printf 'mount' + if [ -f "$__object/parameter/type" ]; then + printf ' -t %s' "$(cat "$__object/parameter/type")" + fi + if [ -f "$__object/parameter/options" ]; then + printf ' -o %s' "$(cat "$__object/parameter/options")" + fi + printf ' %s' "$(cat "$__object/parameter/device")" + printf " %s\n" "$path" + else + # mount using existing fstab entry + printf 'mount "%s"\n' "$path" + fi + ;; + absent) + printf 'umount "%s"\n' "$path" + ;; +esac diff --git a/cdist/conf/type/__mount/man.text b/cdist/conf/type/__mount/man.text new file mode 100644 index 00000000..89a7df77 --- /dev/null +++ b/cdist/conf/type/__mount/man.text @@ -0,0 +1,80 @@ +cdist-type__mount(7) +==================== +Steven Armstrong + + +NAME +---- +cdist-type__mount - manage filesystem mounts + + +DESCRIPTION +----------- +Manage filesystem mounts either via /etc/fstab or manually. + + +REQUIRED PARAMETERS +------------------- +None. + + +OPTIONAL PARAMETERS +------------------- +device:: + device to mount at path, defaults to 'none'. see mount(8) + +dump:: + value for the dump field in fstab. see fstab(5) + defaults to 0. + +options:: + comma separated string of options, see mount(8) + +pass:: + value for the pass field in fstab. see fstab(5) + defaults to 0. + +path:: + mount point where to mount the device, see mount(8). + Defaults to __object_id + +state:: + either present or absent. Defaults to present. + +type:: + vfstype, see mount(8) + + +BOOLEAN PARAMETERS +------------------ +nofstab:: + do not manage an entry in /etc/fstab + + +EXAMPLES +-------- + +-------------------------------------------------------------------------------- +__mount /some/dir \ + --device /dev/sdc3 \ + --type xfs \ + --options "defaults,ro" + --dump 0 \ + --pass 1 + +__mount /var/lib/one \ + --device mfsmount \ + --type fuse \ + --options "mfsmaster=mfsmaster.domain.tld,mfssubfolder=/one,nonempty,_netdev" +-------------------------------------------------------------------------------- + + +SEE ALSO +-------- +- cdist-type(7) + + +COPYING +------- +Copyright \(C) 2014 Steven Armstrong. Free use of this software is +granted under the terms of the GNU General Public License version 3 (GPLv3). diff --git a/cdist/conf/type/__mount/manifest b/cdist/conf/type/__mount/manifest new file mode 100755 index 00000000..ff891bb8 --- /dev/null +++ b/cdist/conf/type/__mount/manifest @@ -0,0 +1,42 @@ +#!/bin/sh +# +# 2014 Steven Armstrong (steven-cdist at armstrong.cc) +# +# 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 . +# + +path="$(cat "$__object/parameter/path" 2>/dev/null || echo "/$__object_id")" +state="$(cat "$__object/parameter/state")" + +if [ ! -f "$__object/parameter/nofstab" ]; then + # Generate an entry for /etc/fstab + ( +printf "%s" "$(cat "$__object/parameter/device")" +printf " %s" "$path" +type="$(cat "$__object/parameter/type" || echo "auto")" +printf " %s" "$type" +options="$(cat "$__object/parameter/options" || echo "defaults")" +printf " %s" "$options" +printf " %s" "$(cat "$__object/parameter/dump")" +printf " %s\n" "$(cat "$__object/parameter/pass")" +) | \ +__block "$__object_name" \ + --file "/etc/fstab" \ + --prefix "#cdist:$__object_name" \ + --suffix "#/cdist:$__object_name" \ + --state "$state" \ + --text - +fi diff --git a/cdist/conf/type/__mount/parameter/boolean b/cdist/conf/type/__mount/parameter/boolean new file mode 100644 index 00000000..ac6f41a8 --- /dev/null +++ b/cdist/conf/type/__mount/parameter/boolean @@ -0,0 +1 @@ +nofstab diff --git a/cdist/conf/type/__mount/parameter/default/device b/cdist/conf/type/__mount/parameter/default/device new file mode 100644 index 00000000..621e94f0 --- /dev/null +++ b/cdist/conf/type/__mount/parameter/default/device @@ -0,0 +1 @@ +none diff --git a/cdist/conf/type/__mount/parameter/default/dump b/cdist/conf/type/__mount/parameter/default/dump new file mode 100644 index 00000000..573541ac --- /dev/null +++ b/cdist/conf/type/__mount/parameter/default/dump @@ -0,0 +1 @@ +0 diff --git a/cdist/conf/type/__mount/parameter/default/pass b/cdist/conf/type/__mount/parameter/default/pass new file mode 100644 index 00000000..573541ac --- /dev/null +++ b/cdist/conf/type/__mount/parameter/default/pass @@ -0,0 +1 @@ +0 diff --git a/cdist/conf/type/__mount/parameter/default/state b/cdist/conf/type/__mount/parameter/default/state new file mode 100644 index 00000000..e7f6134f --- /dev/null +++ b/cdist/conf/type/__mount/parameter/default/state @@ -0,0 +1 @@ +present diff --git a/cdist/conf/type/__mount/parameter/optional b/cdist/conf/type/__mount/parameter/optional new file mode 100644 index 00000000..29d3e5ef --- /dev/null +++ b/cdist/conf/type/__mount/parameter/optional @@ -0,0 +1,7 @@ +device +dump +options +pass +path +state +type From a787d2b27bb9f0e21f2aab0b9a8f9f09f5abf1f6 Mon Sep 17 00:00:00 2001 From: Steven Armstrong Date: Tue, 14 Jan 2014 21:43:50 +0100 Subject: [PATCH 07/20] new type to manage a block of text in a file Signed-off-by: Steven Armstrong --- cdist/conf/type/__block/explorer/block | 21 +++++ cdist/conf/type/__block/gencode-remote | 84 +++++++++++++++++++ cdist/conf/type/__block/man.text | 82 ++++++++++++++++++ cdist/conf/type/__block/manifest | 36 ++++++++ .../conf/type/__block/parameter/default/state | 1 + cdist/conf/type/__block/parameter/optional | 4 + cdist/conf/type/__block/parameter/required | 1 + 7 files changed, 229 insertions(+) create mode 100755 cdist/conf/type/__block/explorer/block create mode 100755 cdist/conf/type/__block/gencode-remote create mode 100644 cdist/conf/type/__block/man.text create mode 100755 cdist/conf/type/__block/manifest create mode 100644 cdist/conf/type/__block/parameter/default/state create mode 100644 cdist/conf/type/__block/parameter/optional create mode 100644 cdist/conf/type/__block/parameter/required diff --git a/cdist/conf/type/__block/explorer/block b/cdist/conf/type/__block/explorer/block new file mode 100755 index 00000000..6c35bc46 --- /dev/null +++ b/cdist/conf/type/__block/explorer/block @@ -0,0 +1,21 @@ +#!/bin/sh +# 2013 Steven Armstrong (steven-cdist at armstrong.cc) + +file="$(cat "$__object/parameter/file" 2>/dev/null || echo "/$__object_id")" + +# file does not exist, nothing we could do +[ -f "$file" ] || exit 0 + +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") +awk -v prefix="$prefix" -v suffix="$suffix" '{ + if (index($0,prefix)) { + triggered=1 + } + if (triggered) { + if (index($0,suffix)) { + triggered=0 + } + print + } +}' "$file" diff --git a/cdist/conf/type/__block/gencode-remote b/cdist/conf/type/__block/gencode-remote new file mode 100755 index 00000000..0a5eea18 --- /dev/null +++ b/cdist/conf/type/__block/gencode-remote @@ -0,0 +1,84 @@ +#!/bin/sh +# +# 2013 Steven Armstrong (steven-cdist at armstrong.cc) +# +# 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 . +# + +file="$(cat "$__object/parameter/file" 2>/dev/null || echo "/$__object_id")" +state_should=$(cat "$__object/parameter/state") +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") + +block="$__object/files/block" +if [ ! -s "$__object/explorer/block" ]; then + state_is='absent' +else + state_is=$(diff -q "$block" "$__object/explorer/block" >/dev/null \ + && echo present \ + || echo changed + ) +fi + +state_should="$(cat "$__object/parameter/state")" +if [ "$state_should" = "$state_is" ]; then + # Nothing to do, move along + exit 0 +fi + +remove_block() { + cat << DONE +tmpfile=\$(mktemp ${file}.cdist.XXXXXXXXXX) +# preserve ownership and permissions of existing file +if [ -f "$file" ]; then + cp -p "$file" "\$tmpfile" +fi +awk -v prefix="$prefix" -v suffix="$suffix" ' +{ + if (index(\$0,prefix)) { + triggered=1 + } + if (triggered) { + if (index(\$0,suffix)) { + triggered=0 + } + } else { + print + } +}' "$file" > "\$tmpfile" +mv -f "\$tmpfile" "$file" +DONE +} + +case "$state_should" in + present) + if [ "$state_is" = "changed" ]; then + echo update >> "$__messages_out" + remove_block + else + echo add >> "$__messages_out" + fi + cat << DONE +cat >> "$file" << ${__type##*/}_DONE +$(cat "$block") +${__type##*/}_DONE +DONE + ;; + absent) + echo remove >> "$__messages_out" + remove_block + ;; +esac diff --git a/cdist/conf/type/__block/man.text b/cdist/conf/type/__block/man.text new file mode 100644 index 00000000..2312d293 --- /dev/null +++ b/cdist/conf/type/__block/man.text @@ -0,0 +1,82 @@ +cdist-type__block(7) +==================== +Steven Armstrong + + +NAME +---- +cdist-type__block - Manage blocks of text in files + + +DESCRIPTION +----------- +Manage a block of text in an existing file. +The block is identified using the prefix and suffix parameters. +Everything between prefix and suffix is considered to be a managed block +of text. + + +REQUIRED PARAMETERS +------------------- +text:: + the text to manage. + If text is '-' (dash), take what was written to stdin as the text. + + +OPTIONAL PARAMETERS +------------------- +file:: + the file in which to manage the text block. + Defaults to object_id. + +prefix:: + the prefix to add before the text. + Defaults to #cdist:__block/$__object_id + +suffix:: + the prefix to add after the text. + Defaults to #/cdist:__block/$__object_id + +state:: + 'present' or 'absent', defaults to 'present' + + +MESSAGES +-------- +add:: + block was added +update:: + block was updated/changed +remove:: + block was removed + + +EXAMPLES +-------- + +-------------------------------------------------------------------------------- +# text from argument +__block /path/to/file \ + --prefix '#start' \ + --suffix '#end' \ + --text 'some\nblock of\ntext' + +# text from stdin +__block some-id \ + --file /path/to/file \ + --text - << DONE +here some block +of text +DONE +-------------------------------------------------------------------------------- + + +SEE ALSO +-------- +- cdist-type(7) + + +COPYING +------- +Copyright \(C) 2013 Steven Armstrong. Free use of this software is +granted under the terms of the GNU General Public License version 3 (GPLv3). diff --git a/cdist/conf/type/__block/manifest b/cdist/conf/type/__block/manifest new file mode 100755 index 00000000..1fc9ec79 --- /dev/null +++ b/cdist/conf/type/__block/manifest @@ -0,0 +1,36 @@ +#!/bin/sh +# +# 2013-2014 Steven Armstrong (steven-cdist at armstrong.cc) +# +# 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 . +# + + +file="$(cat "$__object/parameter/file" 2>/dev/null || echo "/$__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") +text=$(cat "$__object/parameter/text") + +mkdir "$__object/files" +# Generate text block for inclusion in file +block="$__object/files/block" +echo "$prefix" > "$block" +if [ "$text" = "-" ]; then + cat "$__object/stdin" >> "$block" +else + cat "$text" >> "$block" +fi +echo "$suffix" >> "$block" diff --git a/cdist/conf/type/__block/parameter/default/state b/cdist/conf/type/__block/parameter/default/state new file mode 100644 index 00000000..e7f6134f --- /dev/null +++ b/cdist/conf/type/__block/parameter/default/state @@ -0,0 +1 @@ +present diff --git a/cdist/conf/type/__block/parameter/optional b/cdist/conf/type/__block/parameter/optional new file mode 100644 index 00000000..fa3abebf --- /dev/null +++ b/cdist/conf/type/__block/parameter/optional @@ -0,0 +1,4 @@ +file +prefix +state +suffix diff --git a/cdist/conf/type/__block/parameter/required b/cdist/conf/type/__block/parameter/required new file mode 100644 index 00000000..8e27be7d --- /dev/null +++ b/cdist/conf/type/__block/parameter/required @@ -0,0 +1 @@ +text From ad09a9258ec9c3b31d12de43bc061f02e7128509 Mon Sep 17 00:00:00 2001 From: Nico Schottelius Date: Wed, 15 Jan 2014 13:25:37 +0100 Subject: [PATCH 08/20] ++changes(3.0.2) Signed-off-by: Nico Schottelius --- docs/changelog | 3 +++ 1 file changed, 3 insertions(+) diff --git a/docs/changelog b/docs/changelog index 5271d512..08f7ff5f 100644 --- a/docs/changelog +++ b/docs/changelog @@ -5,8 +5,11 @@ Changelog * Exception: No braces means author == Nico Schottelius 3.0.2: + * New Type: __block (Steven Armstrong) + * New Type: __mount (Steven Armstrong) * Type __cron: Replace existing entry when changing it (Daniel Heule) + 3.0.1: 2014-01-14 * Core: Copy only files, not directories (Steven Armstrong) * Core: Allow hostnames to start with / From 2c30704ba791e38bfc459936dbf1fba62f60f840 Mon Sep 17 00:00:00 2001 From: Nico Schottelius Date: Wed, 15 Jan 2014 13:28:41 +0100 Subject: [PATCH 09/20] add hints about ignored parameters Signed-off-by: Nico Schottelius --- cdist/conf/type/__mount/man.text | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/cdist/conf/type/__mount/man.text b/cdist/conf/type/__mount/man.text index 89a7df77..7299bdf3 100644 --- a/cdist/conf/type/__mount/man.text +++ b/cdist/conf/type/__mount/man.text @@ -27,6 +27,8 @@ dump:: value for the dump field in fstab. see fstab(5) defaults to 0. + This parameter is ignored, if the nofstab parameter is given. + options:: comma separated string of options, see mount(8) @@ -34,6 +36,8 @@ pass:: value for the pass field in fstab. see fstab(5) defaults to 0. + This parameter is ignored, if the nofstab parameter is given. + path:: mount point where to mount the device, see mount(8). Defaults to __object_id From 095c5335c69a732bc54879a6a42e7162c59311bc Mon Sep 17 00:00:00 2001 From: Steven Armstrong Date: Thu, 16 Jan 2014 11:05:29 +0100 Subject: [PATCH 10/20] use default parameters Signed-off-by: Steven Armstrong --- cdist/conf/type/__ssh_authorized_keys/manifest | 2 +- cdist/conf/type/__ssh_authorized_keys/parameter/default/state | 1 + 2 files changed, 2 insertions(+), 1 deletion(-) create mode 100644 cdist/conf/type/__ssh_authorized_keys/parameter/default/state diff --git a/cdist/conf/type/__ssh_authorized_keys/manifest b/cdist/conf/type/__ssh_authorized_keys/manifest index 47cdf746..8b299d0a 100755 --- a/cdist/conf/type/__ssh_authorized_keys/manifest +++ b/cdist/conf/type/__ssh_authorized_keys/manifest @@ -19,7 +19,7 @@ # owner="$(cat "$__object/parameter/owner" 2>/dev/null || echo "$__object_id")" -state="$(cat "$__object/parameter/state" 2>/dev/null || echo "present")" +state="$(cat "$__object/parameter/state" 2>/dev/null)" if [ -f "$__object/parameter/file" ]; then file="$(cat "$__object/parameter/file")" else diff --git a/cdist/conf/type/__ssh_authorized_keys/parameter/default/state b/cdist/conf/type/__ssh_authorized_keys/parameter/default/state new file mode 100644 index 00000000..e7f6134f --- /dev/null +++ b/cdist/conf/type/__ssh_authorized_keys/parameter/default/state @@ -0,0 +1 @@ +present From 3b072a7abb08bdd4896ad425a0ce98700b73ebb6 Mon Sep 17 00:00:00 2001 From: Steven Armstrong Date: Thu, 16 Jan 2014 11:09:51 +0100 Subject: [PATCH 11/20] use __block type to manage keys Signed-off-by: Steven Armstrong --- .../type/__ssh_authorized_keys/explorer/entry | 45 ---------- .../type/__ssh_authorized_keys/gencode-remote | 84 ------------------- .../conf/type/__ssh_authorized_keys/manifest | 23 +++-- 3 files changed, 10 insertions(+), 142 deletions(-) delete mode 100755 cdist/conf/type/__ssh_authorized_keys/explorer/entry delete mode 100755 cdist/conf/type/__ssh_authorized_keys/gencode-remote diff --git a/cdist/conf/type/__ssh_authorized_keys/explorer/entry b/cdist/conf/type/__ssh_authorized_keys/explorer/entry deleted file mode 100755 index 9992d32d..00000000 --- a/cdist/conf/type/__ssh_authorized_keys/explorer/entry +++ /dev/null @@ -1,45 +0,0 @@ -#!/bin/sh -# -# 2012 Steven Armstrong (steven-cdist at armstrong.cc) -# -# 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 . -# - -owner="$(cat "$__object/parameter/owner" 2>/dev/null || echo "$__object_id")" -if [ -f "$__object/parameter/file" ]; then - file="$(cat "$__object/parameter/file")" -else - home="$("$__type_explorer/passwd" | cut -d':' -f 6)" - file="$home/.ssh/authorized_keys" -fi - -# no authorized_keys file, nothing we could do -[ -f "$file" ] || exit 0 - -# NOTE: keep variables in sync in manifest/explorer/gencode-* -prefix="#cdist:$__object_name" -suffix="#/cdist:$__object_name" -awk -v prefix="$prefix" -v suffix="$suffix" '{ - if (index($0,prefix)) { - triggered=1 - } - if (triggered) { - if (index($0,suffix)) { - triggered=0 - } - print - } -}' "$file" diff --git a/cdist/conf/type/__ssh_authorized_keys/gencode-remote b/cdist/conf/type/__ssh_authorized_keys/gencode-remote deleted file mode 100755 index 7fcb59c6..00000000 --- a/cdist/conf/type/__ssh_authorized_keys/gencode-remote +++ /dev/null @@ -1,84 +0,0 @@ -#!/bin/sh -# -# 2012-2013 Steven Armstrong (steven-cdist at armstrong.cc) -# -# 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 . -# - -owner="$(cat "$__object/parameter/owner" 2>/dev/null || echo "$__object_id")" -if [ -f "$__object/parameter/file" ]; then - file="$(cat "$__object/parameter/file")" -else - home="$(cut -d':' -f 6 "$__object/explorer/passwd")" - file="$home/.ssh/authorized_keys" -fi - -entry="$__object/files/entry" -if [ ! -s "$__object/explorer/entry" ]; then - state_is='absent' -else - state_is=$(diff -q "$entry" "$__object/explorer/entry" >/dev/null \ - && echo present \ - || echo changed - ) -fi - -state_should="$(cat "$__object/parameter/state" 2>/dev/null || echo present)" -if [ "$state_should" = "$state_is" ]; then - # Nothing to do, move along - exit 0 -fi - -remove_entry() { - # NOTE: keep variables in sync in manifest/explorer/gencode-* - prefix="#cdist:$__object_name" - suffix="#/cdist:$__object_name" - cat << DONE -tmpfile=\$(mktemp ${file}.cdist.XXXXXXXXXX) -# preserve ownership and permissions by copying existing file over tmpfile -cp -p "$file" "\$tmpfile" -awk -v prefix="$prefix" -v suffix="$suffix" ' -{ - if (index(\$0,prefix)) { - triggered=1 - } - if (triggered) { - if (index(\$0,suffix)) { - triggered=0 - } - } else { - print - } -}' "$file" > "\$tmpfile" -mv -f "\$tmpfile" "$file" -DONE -} - -case "$state_should" in - present) - if [ "$state_is" = "changed" ]; then - remove_entry - fi - cat << DONE -cat >> "$file" << ${__type##*/}_DONE -$(cat "$entry") -${__type##*/}_DONE -DONE - ;; - absent) - remove_entry - ;; -esac diff --git a/cdist/conf/type/__ssh_authorized_keys/manifest b/cdist/conf/type/__ssh_authorized_keys/manifest index 8b299d0a..8631d042 100755 --- a/cdist/conf/type/__ssh_authorized_keys/manifest +++ b/cdist/conf/type/__ssh_authorized_keys/manifest @@ -56,19 +56,16 @@ if [ ! -f "$__object/parameter/noparent" -o ! -f "$__object/parameter/nofile" ]; fi fi -# NOTE: keep variables in sync in manifest/explorer/gencode-* -prefix="#cdist:$__object_name" -suffix="#/cdist:$__object_name" - -mkdir "$__object/files" - # Generate entry for inclusion in authorized_keys file -entry="$__object/files/entry" -echo "$prefix" > "$entry" +( if [ -f "$__object/parameter/comment" ]; then - echo "# $(cat "$__object/parameter/comment")" >> "$entry" + echo "# $(cat "$__object/parameter/comment")" fi -cat "$__object/parameter/key" >> "$entry" -# ensure we have a newline after keys -echo >> "$entry" -echo "$suffix" >> "$entry" +cat "$__object/parameter/key" +) | \ +__block "$__object_name" \ + --file "$file" \ + --prefix "#cdist:$__object_name" \ + --suffix "#/cdist:$__object_name" \ + --state "$state" \ + --text - From 0b7d9babf6f4f13e65f03819887e99d7809309b0 Mon Sep 17 00:00:00 2001 From: Steven Armstrong Date: Thu, 16 Jan 2014 11:11:00 +0100 Subject: [PATCH 12/20] whitespace-- Signed-off-by: Steven Armstrong --- cdist/conf/type/__ssh_authorized_keys/manifest | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/cdist/conf/type/__ssh_authorized_keys/manifest b/cdist/conf/type/__ssh_authorized_keys/manifest index 8631d042..5a9cfbb3 100755 --- a/cdist/conf/type/__ssh_authorized_keys/manifest +++ b/cdist/conf/type/__ssh_authorized_keys/manifest @@ -39,7 +39,7 @@ if [ ! -f "$__object/parameter/noparent" -o ! -f "$__object/parameter/nofile" ]; fi if [ ! -f "$__object/parameter/noparent" ]; then - # Ensure that the directory in which the authorized_keys shall be exists and + # Ensure that the directory in which the authorized_keys shall be exists and # has the right permissions. ssh_directory="${file%/*}" __directory "$ssh_directory" --state present --parents \ From 36a330eb3c185efeedc35b4221ccae483340c027 Mon Sep 17 00:00:00 2001 From: Steven Armstrong Date: Thu, 16 Jan 2014 12:00:24 +0100 Subject: [PATCH 13/20] redirect stderr to /dev/null Signed-off-by: Steven Armstrong --- cdist/conf/type/__mount/manifest | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/cdist/conf/type/__mount/manifest b/cdist/conf/type/__mount/manifest index ff891bb8..8a1fa234 100755 --- a/cdist/conf/type/__mount/manifest +++ b/cdist/conf/type/__mount/manifest @@ -26,9 +26,9 @@ if [ ! -f "$__object/parameter/nofstab" ]; then ( printf "%s" "$(cat "$__object/parameter/device")" printf " %s" "$path" -type="$(cat "$__object/parameter/type" || echo "auto")" +type="$(cat "$__object/parameter/type" 2>/dev/null || echo "auto")" printf " %s" "$type" -options="$(cat "$__object/parameter/options" || echo "defaults")" +options="$(cat "$__object/parameter/options" 2>/dev/null || echo "defaults")" printf " %s" "$options" printf " %s" "$(cat "$__object/parameter/dump")" printf " %s\n" "$(cat "$__object/parameter/pass")" From 4e94713f07c557aeaf482ee71e7aab85d72fe05c Mon Sep 17 00:00:00 2001 From: Daniel Heule Date: Fri, 17 Jan 2014 10:27:21 +0100 Subject: [PATCH 14/20] documented all messages which I have found via grep --- cdist/conf/type/__group/man.text | 12 ++++++++++++ cdist/conf/type/__user/man.text | 9 +++++++++ 2 files changed, 21 insertions(+) diff --git a/cdist/conf/type/__group/man.text b/cdist/conf/type/__group/man.text index c57ae337..def0232f 100644 --- a/cdist/conf/type/__group/man.text +++ b/cdist/conf/type/__group/man.text @@ -26,6 +26,18 @@ password:: see above +MESSAGES +-------- +mod:: + group is modified +add:: + New group added +change :: + Changed group property from current_value to new_value +set :: + set property to new value, property was not set bevore + + EXAMPLES -------- diff --git a/cdist/conf/type/__user/man.text b/cdist/conf/type/__user/man.text index 47e63d3d..be70ec12 100644 --- a/cdist/conf/type/__user/man.text +++ b/cdist/conf/type/__user/man.text @@ -44,6 +44,15 @@ create-home:: remove-home:: see userdel(8), apply only on user delete + +MESSAGES +-------- +mod:: + User is modified +add:: + New user added + + EXAMPLES -------- From f23999c8d378f81bcb5e97604a220ce6d1b19cd1 Mon Sep 17 00:00:00 2001 From: Nico Schottelius Date: Fri, 17 Jan 2014 10:41:23 +0100 Subject: [PATCH 15/20] ++changes(3.0.2) Signed-off-by: Nico Schottelius --- docs/changelog | 1 + 1 file changed, 1 insertion(+) diff --git a/docs/changelog b/docs/changelog index 08f7ff5f..a12de32a 100644 --- a/docs/changelog +++ b/docs/changelog @@ -5,6 +5,7 @@ Changelog * Exception: No braces means author == Nico Schottelius 3.0.2: + * Documentation: Document all messages sent by types (Daniel Heule) * New Type: __block (Steven Armstrong) * New Type: __mount (Steven Armstrong) * Type __cron: Replace existing entry when changing it (Daniel Heule) From c4140a7c7bc0885f5d8581ba8b1097087494376f Mon Sep 17 00:00:00 2001 From: Nico Schottelius Date: Sat, 18 Jan 2014 15:57:39 +0100 Subject: [PATCH 16/20] ++changes(3.0.2) Signed-off-by: Nico Schottelius --- docs/changelog | 1 + 1 file changed, 1 insertion(+) diff --git a/docs/changelog b/docs/changelog index a12de32a..d9b1db51 100644 --- a/docs/changelog +++ b/docs/changelog @@ -9,6 +9,7 @@ Changelog * New Type: __block (Steven Armstrong) * New Type: __mount (Steven Armstrong) * Type __cron: Replace existing entry when changing it (Daniel Heule) + * Type __ssh_authorized_keys: Use new type __block (Steven Armstrong) 3.0.1: 2014-01-14 From f3b7fc15148058b51cf9f5bbea153123237a12ac Mon Sep 17 00:00:00 2001 From: Nico Schottelius Date: Sun, 19 Jan 2014 21:38:38 +0100 Subject: [PATCH 17/20] release 3.0.2 Signed-off-by: Nico Schottelius --- docs/changelog | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/changelog b/docs/changelog index d9b1db51..ca9cc9cf 100644 --- a/docs/changelog +++ b/docs/changelog @@ -4,7 +4,7 @@ Changelog * Changes are always commented with their author in (braces) * Exception: No braces means author == Nico Schottelius -3.0.2: +3.0.2: 2014-01-19 * Documentation: Document all messages sent by types (Daniel Heule) * New Type: __block (Steven Armstrong) * New Type: __mount (Steven Armstrong) From ce73cef4574dca1ad6dffa59d61c5546732df837 Mon Sep 17 00:00:00 2001 From: Nico Schottelius Date: Sun, 19 Jan 2014 23:22:48 +0100 Subject: [PATCH 18/20] explain that a requirement caused the error, otherwise you search until you die Signed-off-by: Nico Schottelius --- cdist/emulator.py | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/cdist/emulator.py b/cdist/emulator.py index b70ef956..899a710f 100644 --- a/cdist/emulator.py +++ b/cdist/emulator.py @@ -194,7 +194,9 @@ class Emulator(object): except core.cdist_type.NoSuchTypeError as e: self.log.error("%s requires object %s, but type %s does not exist (definded at %s)" % (self.cdist_object.name, requirement, e.name, self.object_source)) raise - + except core.cdist_object.MissingObjectIdError as e: + self.log.error("%s requires object %s (without object id), but type %s is not a singleton (definded at %s)" % (self.cdist_object.name, requirement, e.type_name, self.object_source)) + raise self.log.debug("Recording requirement: " + requirement) From ac0c88fe9f477b598b2662b589f7a7337b870cfb Mon Sep 17 00:00:00 2001 From: Nico Schottelius Date: Sun, 19 Jan 2014 23:28:45 +0100 Subject: [PATCH 19/20] remove some old typos and omit type details that follow anyway Signed-off-by: Nico Schottelius --- cdist/emulator.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/cdist/emulator.py b/cdist/emulator.py index 899a710f..63d3bbbc 100644 --- a/cdist/emulator.py +++ b/cdist/emulator.py @@ -192,10 +192,10 @@ class Emulator(object): try: cdist_object = self.cdist_object.object_from_name(requirement) except core.cdist_type.NoSuchTypeError as e: - self.log.error("%s requires object %s, but type %s does not exist (definded at %s)" % (self.cdist_object.name, requirement, e.name, self.object_source)) + self.log.error("%s requires object %s, but type %s does not exist. Defined at %s" % (self.cdist_object.name, requirement, e.name, self.object_source)) raise except core.cdist_object.MissingObjectIdError as e: - self.log.error("%s requires object %s (without object id), but type %s is not a singleton (definded at %s)" % (self.cdist_object.name, requirement, e.type_name, self.object_source)) + self.log.error("%s requires object %s without object id. Defined at %s" % (self.cdist_object.name, requirement, self.object_source)) raise self.log.debug("Recording requirement: " + requirement) From c47abb6af71ed9aa12f0be982f4277a9868e08aa Mon Sep 17 00:00:00 2001 From: Nico Schottelius Date: Sun, 19 Jan 2014 23:29:56 +0100 Subject: [PATCH 20/20] ++changes Signed-off-by: Nico Schottelius --- docs/changelog | 3 +++ 1 file changed, 3 insertions(+) diff --git a/docs/changelog b/docs/changelog index ca9cc9cf..a3d5c4fd 100644 --- a/docs/changelog +++ b/docs/changelog @@ -4,6 +4,9 @@ Changelog * Changes are always commented with their author in (braces) * Exception: No braces means author == Nico Schottelius +3.0.3: + * Core: Enhance error message when requirement is missing object id + 3.0.2: 2014-01-19 * Documentation: Document all messages sent by types (Daniel Heule) * New Type: __block (Steven Armstrong)