diff --git a/conf/type/__file/gencode-local b/conf/type/__file/gencode-local index d9839a19..a55cfc2b 100755 --- a/conf/type/__file/gencode-local +++ b/conf/type/__file/gencode-local @@ -23,6 +23,9 @@ destination="/$__object_id" state_should="$(cat "$__object/parameter/state")" +exists="$(cat "$__object/explorer/exists")" + +[ "$state_should" = "exists" -a "$exists" = "yes" ] && exit 0 # nothing to do if [ "$state_should" = "present" ]; then if [ -f "$__object/parameter/source" ]; then diff --git a/conf/type/__file/man.text b/conf/type/__file/man.text index 5e91599f..0215027a 100644 --- a/conf/type/__file/man.text +++ b/conf/type/__file/man.text @@ -21,7 +21,11 @@ None. OPTIONAL PARAMETERS ------------------- state:: - 'present' or 'absent', defaults to 'present' + 'present', 'absent' or 'exists', defaults to 'present' + where: + present: the file is exactly the one from source + absent: the file does not exist + exists: the file from source but only if it doesn't already exist group:: Group to chgrp to. @@ -55,6 +59,11 @@ __file /etc/issue --source "$__type/files/archlinux" --state present __file /etc/shadow --source "$__type/files/shadow" \ --owner root --group shadow --mode 0640 \ --state present + +# Provide a default file, but let the user change it +__file /home/frodo/.bashrc --source "/etc/skel/.bashrc" \ + --state exists \ + --owner frodo --mode 0600 -------------------------------------------------------------------------------- diff --git a/conf/type/__package_yum/gencode-remote b/conf/type/__package_yum/gencode-remote index a10e60dd..df2bf405 100755 --- a/conf/type/__package_yum/gencode-remote +++ b/conf/type/__package_yum/gencode-remote @@ -22,7 +22,7 @@ # if [ -f "$__object/parameter/name" ]; then - name="$__object/parameter/name" + name="$(cat "$__object/parameter/name")" else name="$__object_id" fi diff --git a/conf/type/__start_on_boot/gencode-remote b/conf/type/__start_on_boot/gencode-remote index 974abb30..a64c1096 100755 --- a/conf/type/__start_on_boot/gencode-remote +++ b/conf/type/__start_on_boot/gencode-remote @@ -32,7 +32,7 @@ case "$state_should" in present) case "$os" in archlinux) - echo "sed -i /etc/rc.conf \'s/^\\(DAEMONS=.*\\))/\\1 $name)/\'" + echo "sed -i 's/^\\(DAEMONS=.*\\))/\\1 $name)/' /etc/rc.conf" ;; debian|ubuntu) echo "update-rc.d \"$name\" defaults >/dev/null" diff --git a/doc/changelog b/doc/changelog index ce9f798b..e3f7d1a5 100644 --- a/doc/changelog +++ b/doc/changelog @@ -7,6 +7,10 @@ Changelog 2.0.10: * Cleanup __group: No getent gshadow in old Redhat, use groupmod -g (Matt Coddington) + * Bugfix __package_yum: Missing cat + * Bugfix __start_on_boot: Correctly use sed and quotes (Steven Armstrong) + * Feature __file: Support for --state exists (Steven Armstrong) + * Feature core: Make variable __manifest available to type manifests 2.0.9: 2012-03-12 * Cleanup documentation: Fix environment variable list to be properly diff --git a/doc/man/cdist-reference.text.sh b/doc/man/cdist-reference.text.sh index 6bd5f1b8..2aa87aa1 100755 --- a/doc/man/cdist-reference.text.sh +++ b/doc/man/cdist-reference.text.sh @@ -173,7 +173,7 @@ __explorer:: Available for: explorer, type explorer __manifest:: Directory that contains the initial manifest. - Available for: initial manifest + Available for: initial manifest, type manifest __global:: Directory that contains generic output like explorer. Available for: initial manifest, type manifest, type gencode diff --git a/lib/cdist/core/manifest.py b/lib/cdist/core/manifest.py index 8b784229..4b798883 100644 --- a/lib/cdist/core/manifest.py +++ b/lib/cdist/core/manifest.py @@ -92,6 +92,7 @@ class Manifest(object): env = os.environ.copy() env.update(self.env) env.update({ + '__manifest': self.local.manifest_path, '__object': cdist_object.absolute_path, '__object_id': cdist_object.object_id, '__object_name': cdist_object.name,