From e27501218f5629b281b86f2dbea988c3d39bebaf Mon Sep 17 00:00:00 2001 From: Steven Armstrong Date: Thu, 24 Mar 2011 23:16:25 +0100 Subject: [PATCH] new type __key_value Signed-off-by: Steven Armstrong --- conf/type/__key_value/explorer/value | 33 +++++++++++++ conf/type/__key_value/gencode-remote | 52 +++++++++++++++++++++ conf/type/__key_value/man.text | 59 ++++++++++++++++++++++++ conf/type/__key_value/manifest | 26 +++++++++++ conf/type/__key_value/parameter/optional | 1 + conf/type/__key_value/parameter/required | 3 ++ 6 files changed, 174 insertions(+) create mode 100755 conf/type/__key_value/explorer/value create mode 100755 conf/type/__key_value/gencode-remote create mode 100644 conf/type/__key_value/man.text create mode 100755 conf/type/__key_value/manifest create mode 100644 conf/type/__key_value/parameter/optional create mode 100644 conf/type/__key_value/parameter/required diff --git a/conf/type/__key_value/explorer/value b/conf/type/__key_value/explorer/value new file mode 100755 index 00000000..b1d7983f --- /dev/null +++ b/conf/type/__key_value/explorer/value @@ -0,0 +1,33 @@ +#!/bin/sh +# +# 2011 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 . +# +# +# Get the current value of key or __NOTSET__ if the key doesn't exist. +# + +key="$(cat "$__object/parameter/key")" +file="$(cat "$__object/parameter/file")" +delimiter="$(cat "$__object/parameter/delimiter")" + +awk -F "$delimiter" ' +BEGIN { found=0 } +/^'$key'/ { print $2; found=1 } +END { if (found) exit 0; else exit 1 }' "$file" \ +|| echo "__NOTSET__" + diff --git a/conf/type/__key_value/gencode-remote b/conf/type/__key_value/gencode-remote new file mode 100755 index 00000000..e41cd9b5 --- /dev/null +++ b/conf/type/__key_value/gencode-remote @@ -0,0 +1,52 @@ +#!/bin/sh +# +# 2011 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 . +# + +value_is="$(cat "$__object/explorer/value")" +value_should="$(cat "$__object/parameter/value")" + +key="$(cat "$__object/parameter/key")" +file="$(cat "$__object/parameter/file")" +delimiter="$(cat "$__object/parameter/delimiter")" + +if [ "$value_is" != "$value_should" ]; then + case "$value_is" in + __NOTSET__) + # add key and value + echo "echo \"${key}${delimiter}${value_should}\" >> \"$file\"" + ;; + *) + if [ "$value_should" = '__NOTSET__' ]; then + # remove key and value + cat << DONE +sed -i '/^${key}/d' "$file" +DONE + else + # change value + cat << DONE +awk -F "$delimiter" ' +/${key}${delimiter}*/{gsub(/$value_is/, $value_should)};{print}' "$file" > "${file}+" \ +&& mv "${file}+" "$file" + +DONE + fi + ;; + esac +fi + diff --git a/conf/type/__key_value/man.text b/conf/type/__key_value/man.text new file mode 100644 index 00000000..78ba09a5 --- /dev/null +++ b/conf/type/__key_value/man.text @@ -0,0 +1,59 @@ +cdist-type__key_value(7) +========================== +Steven Armstrong + + +NAME +---- +cdist-type__key_value - Change property values in files + + +DESCRIPTION +----------- +This cdist type allows you to change values in a key value based config +file. + + +REQUIRED PARAMETERS +------------------- +value:: + The value for the key. Setting the value to __NOTSET__ will remove the key + from the file. +file:: + The file to operate on. +delimiter:: + The delimiter which seperates the key from the value. + + +OPTIONAL PARAMETERS +------------------- +key:: + The key to change. Defaults to object_id. + + +EXAMPLES +-------- + +-------------------------------------------------------------------------------- +# Set the maximum system user id +__key_value SYS_UID_MAX --file /etc/login.defs --value 666 --delimiter ' ' + +# Same with fancy id +__key_value my-fancy-id --file /etc/login.defs --key SYS_UID_MAX --value 666 \ + --delimiter ' ' + +# Enable packet forwarding +__key_value net.ipv4.ip_forward --file /etc/sysctl.conf --value 1 \ + --delimiter '=' +-------------------------------------------------------------------------------- + + +SEE ALSO +-------- +- cdist-type(7) + + +COPYING +------- +Copyright \(C) 2011 Steven Armstrong. Free use of this software is +granted under the terms of the GNU General Public License version 3 (GPLv3). diff --git a/conf/type/__key_value/manifest b/conf/type/__key_value/manifest new file mode 100755 index 00000000..706b0b0d --- /dev/null +++ b/conf/type/__key_value/manifest @@ -0,0 +1,26 @@ +#!/bin/sh +# +# 2011 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 . +# + +if [ -f "$__object/parameter/key" ]; then + key="$(cat "$__object/parameter/key")" +else + echo "$__object_id" > "$__object/parameter/key" +fi + diff --git a/conf/type/__key_value/parameter/optional b/conf/type/__key_value/parameter/optional new file mode 100644 index 00000000..06bfde49 --- /dev/null +++ b/conf/type/__key_value/parameter/optional @@ -0,0 +1 @@ +key diff --git a/conf/type/__key_value/parameter/required b/conf/type/__key_value/parameter/required new file mode 100644 index 00000000..8f4aa53c --- /dev/null +++ b/conf/type/__key_value/parameter/required @@ -0,0 +1,3 @@ +value +file +delimiter