| 
									
										
										
										
											2010-12-01 19:52:34 +01:00
										 |  |  | #!/bin/sh | 
					
						
							|  |  |  | # | 
					
						
							| 
									
										
										
										
											2011-02-02 15:02:26 +01:00
										 |  |  | # 2010-2011 Nico Schottelius (nico-cdist at schottelius.org) | 
					
						
							| 
									
										
										
										
											2010-12-01 19:52:34 +01:00
										 |  |  | # | 
					
						
							|  |  |  | # 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/>. | 
					
						
							|  |  |  | # | 
					
						
							|  |  |  | #  | 
					
						
							|  |  |  | # Wrapper script that generates cconfig from arguments | 
					
						
							|  |  |  | # | 
					
						
							| 
									
										
										
										
											2011-01-14 12:46:51 +01:00
										 |  |  | # This script will be called everytime the manifest decides to create | 
					
						
							|  |  |  | # a new type | 
					
						
							|  |  |  | # | 
					
						
							| 
									
										
										
										
											2010-12-01 19:52:34 +01:00
										 |  |  | 
 | 
					
						
							|  |  |  | . cdist-config | 
					
						
							| 
									
										
										
										
											2011-02-05 19:10:48 +01:00
										 |  |  | set -eu | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2011-03-23 10:47:13 +01:00
										 |  |  | ################################################################################ | 
					
						
							|  |  |  | # Prepare object and type | 
					
						
							|  |  |  | # | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2011-02-23 09:20:34 +01:00
										 |  |  | __cdist_type="$__cdist_myname" | 
					
						
							| 
									
										
										
										
											2010-12-01 20:33:25 +01:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2011-03-10 13:21:21 +01:00
										 |  |  | # Find out whether type is a singleton or regular type | 
					
						
							| 
									
										
										
										
											2011-03-09 22:09:44 +01:00
										 |  |  | if [ -f "$(__cdist_type_singleton "$__cdist_type")" ]; then | 
					
						
							| 
									
										
										
										
											2011-03-23 10:47:13 +01:00
										 |  |  |    __cdist_object_id="$__cdist_name_singleton" | 
					
						
							| 
									
										
										
										
											2011-03-09 22:09:44 +01:00
										 |  |  | else | 
					
						
							|  |  |  |    [ $# -ge 1 ] || __cdist_usage "<id> <options>" | 
					
						
							|  |  |  |    __cdist_object_id="$1"; shift | 
					
						
							|  |  |  | fi | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2011-03-23 10:47:13 +01:00
										 |  |  | # Verify object id | 
					
						
							|  |  |  | __cdist_object_id_sane=$(echo "$__cdist_object_id" | grep "^${__cdist_sane_regexp}\$") | 
					
						
							|  |  |  | if [ -z "$__cdist_object_id_sane" ]; then | 
					
						
							| 
									
										
										
										
											2011-02-07 23:59:21 +01:00
										 |  |  |    __cdist_usage "Insane object id, ${__cdist_object_id}." | 
					
						
							| 
									
										
										
										
											2011-03-23 10:47:13 +01:00
										 |  |  | fi | 
					
						
							| 
									
										
										
										
											2010-12-01 20:33:25 +01:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2011-03-23 10:47:13 +01:00
										 |  |  | # Prevent double slash if id begins with / | 
					
						
							| 
									
										
										
										
											2011-03-22 08:57:19 +01:00
										 |  |  | if [ "$(echo $__cdist_object_id | grep "^/")" ]; then | 
					
						
							| 
									
										
										
										
											2011-03-23 10:47:13 +01:00
										 |  |  |    __cdist_object_self="${__cdist_type}${__cdist_object_id}" | 
					
						
							| 
									
										
										
										
											2011-03-22 08:57:19 +01:00
										 |  |  | else | 
					
						
							| 
									
										
										
										
											2011-03-23 10:47:13 +01:00
										 |  |  |    __cdist_object_self="${__cdist_type}/${__cdist_object_id}" | 
					
						
							| 
									
										
										
										
											2011-03-22 08:57:19 +01:00
										 |  |  | fi | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2011-03-23 10:47:13 +01:00
										 |  |  | ################################################################################ | 
					
						
							| 
									
										
										
										
											2011-03-23 11:05:02 +01:00
										 |  |  | # Internal quirks | 
					
						
							| 
									
										
										
										
											2011-03-23 10:47:13 +01:00
										 |  |  | # | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2011-03-23 11:05:02 +01:00
										 |  |  | # Append id for error messages | 
					
						
							|  |  |  | __cdist_myname="$__cdist_myname ($__cdist_object_id)" | 
					
						
							| 
									
										
										
										
											2011-03-23 10:47:13 +01:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2011-03-23 11:05:02 +01:00
										 |  |  | ################################################################################ | 
					
						
							| 
									
										
										
										
											2011-03-23 11:39:17 +01:00
										 |  |  | # Create object in tmpdir first | 
					
						
							| 
									
										
										
										
											2011-03-23 11:05:02 +01:00
										 |  |  | # | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2011-03-23 11:39:17 +01:00
										 |  |  | # Save original destination | 
					
						
							|  |  |  | __cdist_out_object_dir_orig="$__cdist_out_object_dir" | 
					
						
							| 
									
										
										
										
											2011-03-23 11:05:02 +01:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2011-03-23 11:39:17 +01:00
										 |  |  | # Store to tmp now | 
					
						
							|  |  |  | __cdist_out_object_dir="$__cdist_tmp_dir" | 
					
						
							| 
									
										
										
										
											2011-03-23 10:47:13 +01:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2011-03-23 11:39:17 +01:00
										 |  |  | __cdist_object_dir="$(__cdist_object_dir "$__cdist_object_self")" | 
					
						
							| 
									
										
										
										
											2010-12-01 20:53:26 +01:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2011-03-23 11:39:17 +01:00
										 |  |  | # Record source | 
					
						
							|  |  |  | mkdir -p "${__cdist_object_dir}" | 
					
						
							|  |  |  | __cdist_object_source_add "${__cdist_object_dir}" | 
					
						
							| 
									
										
										
										
											2011-03-23 11:05:02 +01:00
										 |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2011-03-23 11:39:17 +01:00
										 |  |  | # Record parameter | 
					
						
							| 
									
										
										
										
											2011-03-23 11:44:33 +01:00
										 |  |  | __cdist_parameter_dir="$(__cdist_object_parameter_dir "$__cdist_object_self")" | 
					
						
							| 
									
										
										
										
											2011-02-24 21:37:55 +01:00
										 |  |  | mkdir -p "${__cdist_parameter_dir}" | 
					
						
							| 
									
										
										
										
											2010-12-01 20:48:15 +01:00
										 |  |  | 
 | 
					
						
							|  |  |  | while [ $# -gt 0 ]; do | 
					
						
							|  |  |  |    opt="$1"; shift | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2011-02-16 23:04:33 +01:00
										 |  |  |    echo "$opt" | grep -q "^--${__cdist_sane_regexp}\$" || \ | 
					
						
							|  |  |  |       __cdist_usage "Provide sane options" | 
					
						
							| 
									
										
										
										
											2010-12-01 20:48:15 +01:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2011-03-23 11:44:33 +01:00
										 |  |  |    opt_file="${opt#--}" | 
					
						
							| 
									
										
										
										
											2010-12-01 20:48:15 +01:00
										 |  |  | 
 | 
					
						
							|  |  |  |    [ $# -ge 1 ] || __cdist_usage "Missing value for $opt" | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |    value="$1"; shift | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2011-03-23 11:44:33 +01:00
										 |  |  |    echo "${value}" > "${__cdist_parameter_dir}/${opt_file}" | 
					
						
							| 
									
										
										
										
											2010-12-01 20:48:15 +01:00
										 |  |  | done | 
					
						
							| 
									
										
										
										
											2011-02-16 23:04:33 +01:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2011-03-23 11:56:19 +01:00
										 |  |  | # Record requirements | 
					
						
							|  |  |  | # it's fine, if it's not set | 
					
						
							|  |  |  | set +u | 
					
						
							|  |  |  | for requirement in $require; do | 
					
						
							|  |  |  |    echo $requirement >> "$(__cdist_object_require "$__cdist_object_self")" | 
					
						
							|  |  |  |    echo Object $__cdist_object_self requires $requirement | 
					
						
							|  |  |  | done | 
					
						
							| 
									
										
										
										
											2011-03-23 12:12:03 +01:00
										 |  |  | set -u | 
					
						
							| 
									
										
										
										
											2011-03-23 11:39:17 +01:00
										 |  |  | 
 | 
					
						
							|  |  |  | ################################################################################ | 
					
						
							| 
									
										
										
										
											2011-03-23 11:56:19 +01:00
										 |  |  | # Check newly created object | 
					
						
							| 
									
										
										
										
											2011-03-23 11:39:17 +01:00
										 |  |  | # | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2011-03-23 12:12:03 +01:00
										 |  |  | set -x | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | # | 
					
						
							| 
									
										
										
										
											2011-02-16 23:04:33 +01:00
										 |  |  | # Ensure required parameters are given | 
					
						
							| 
									
										
										
										
											2011-03-23 12:12:03 +01:00
										 |  |  | # | 
					
						
							| 
									
										
										
										
											2011-03-10 17:41:08 +01:00
										 |  |  | if [ -f "$(__cdist_type_parameter_required "$__cdist_type")" ]; then | 
					
						
							|  |  |  |    while read required; do | 
					
						
							| 
									
										
										
										
											2011-03-23 12:12:03 +01:00
										 |  |  |       if [ ! -f "${__cdist_parameter_dir}/${required}" ]; then | 
					
						
							| 
									
										
										
										
											2011-03-10 17:41:08 +01:00
										 |  |  |          __cdist_usage "Missing required parameter $required" | 
					
						
							|  |  |  |       fi | 
					
						
							|  |  |  |    done < "$(__cdist_type_parameter_required "$__cdist_type")" | 
					
						
							|  |  |  | fi | 
					
						
							| 
									
										
										
										
											2011-02-16 23:04:33 +01:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2011-03-23 12:12:03 +01:00
										 |  |  | # | 
					
						
							|  |  |  | # Ensure that only optional or required parameters are given | 
					
						
							|  |  |  | # | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2011-03-10 17:41:08 +01:00
										 |  |  | if [ -f "$(__cdist_type_parameter_optional "$__cdist_type")" ]; then | 
					
						
							| 
									
										
										
										
											2011-03-23 12:12:03 +01:00
										 |  |  |    cat "$(__cdist_type_parameter_optional "$__cdist_type")" > \ | 
					
						
							|  |  |  |       "$__cdist_tmp_file" | 
					
						
							|  |  |  | fi | 
					
						
							|  |  |  |   | 
					
						
							|  |  |  | if [ -f "$(__cdist_type_parameter_required "$__cdist_type")" ]; then | 
					
						
							|  |  |  |    cat "$(__cdist_type_parameter_required "$__cdist_type")" >> \ | 
					
						
							|  |  |  |       "$__cdist_tmp_file" | 
					
						
							| 
									
										
										
										
											2011-03-10 17:41:08 +01:00
										 |  |  | fi | 
					
						
							| 
									
										
										
										
											2011-03-23 12:12:03 +01:00
										 |  |  |     | 
					
						
							|  |  |  | cd "$__cdist_parameter_dir" | 
					
						
							|  |  |  | for parameter in $(ls -1); do | 
					
						
							|  |  |  |    is_valid=$(grep "^$parameter\$" "$__cdist_tmp_file") | 
					
						
							| 
									
										
										
										
											2011-02-16 23:04:33 +01:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2011-03-23 12:12:03 +01:00
										 |  |  |    [ "$is_valid" ] ||  "Unknown parameter $parameter" | 
					
						
							|  |  |  | done | 
					
						
							| 
									
										
										
										
											2011-02-16 23:04:33 +01:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2011-03-23 11:56:19 +01:00
										 |  |  | exit 1 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2011-03-23 12:12:03 +01:00
										 |  |  | ################################################################################ | 
					
						
							|  |  |  | # Merge object | 
					
						
							|  |  |  | # | 
					
						
							| 
									
										
										
										
											2011-03-23 12:15:00 +01:00
										 |  |  | # Save original destination | 
					
						
							|  |  |  | __cdist_out_object_dir="$__cdist_out_object_dir_orig" | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | __cdist_object_destination_dir="$(__cdist_object_dir "$__cdist_object_self")" | 
					
						
							| 
									
										
										
										
											2011-03-23 11:39:17 +01:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2011-03-23 12:12:03 +01:00
										 |  |  | # | 
					
						
							| 
									
										
										
										
											2011-03-23 12:15:00 +01:00
										 |  |  | # If the object already exists and is exactly the same, merge it. Otherwise fail. | 
					
						
							| 
									
										
										
										
											2011-03-23 12:12:03 +01:00
										 |  |  | # | 
					
						
							| 
									
										
										
										
											2011-03-23 12:15:00 +01:00
										 |  |  | if [ -e "${__cdist_new_object_dir}" ]; then | 
					
						
							|  |  |  |    source="$(__cdist_object_source "${__cdist_new_object_dir}")" | 
					
						
							|  |  |  |    __cdist_exit_err "${__cdist_object} already exists (source: $source)" | 
					
						
							| 
									
										
										
										
											2011-03-23 11:39:17 +01:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2011-03-23 12:15:00 +01:00
										 |  |  | 
 | 
					
						
							|  |  |  | fi | 
					
						
							| 
									
										
										
										
											2011-03-23 11:39:17 +01:00
										 |  |  | 
 |