From 4e8f99b01daa49daa80a10da1546beeda799d23f Mon Sep 17 00:00:00 2001 From: Nico Schottelius Date: Mon, 19 Sep 2011 00:36:35 +0200 Subject: [PATCH] almost completly implemented type emulator in python Signed-off-by: Nico Schottelius --- bin/cdist | 1 + lib/cdist-type-emulator | 182 ---------------------------------------- 2 files changed, 1 insertion(+), 182 deletions(-) delete mode 100755 lib/cdist-type-emulator diff --git a/bin/cdist b/bin/cdist index 84ebd5f2..57c889f1 100755 --- a/bin/cdist +++ b/bin/cdist @@ -645,6 +645,7 @@ def emulator(): if object_id[0] == '/': object_id = object_id[1:] + # FIXME: verify object id log.debug(args) object_dir = os.path.join(global_dir, "object", type, diff --git a/lib/cdist-type-emulator b/lib/cdist-type-emulator deleted file mode 100755 index 8ff190ad..00000000 --- a/lib/cdist-type-emulator +++ /dev/null @@ -1,182 +0,0 @@ -#!/bin/sh -# -# 2010-2011 Nico Schottelius (nico-cdist at schottelius.org) -# -# 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 . -# -# -# Wrapper script that generates cconfig from arguments -# -# This script will be called everytime the manifest decides to create -# a new type -# - -. cdist-config -set -u - -################################################################################ -# Prepare object and type -# - -__cdist_type="$__cdist_myname" - -# Find out whether type is a singleton or regular type -if [ -f "$(__cdist_type_singleton "$__cdist_type")" ]; then - __cdist_object_id="$__cdist_name_singleton" -else - [ $# -ge 1 ] || __cdist_usage " " - __cdist_object_id="$1"; shift -fi - -# Verify object id -__cdist_object_id_sane=$(echo "$__cdist_object_id" | grep "^${__cdist_sane_regexp}\$") -if [ -z "$__cdist_object_id_sane" ]; then - __cdist_usage "Insane object id, ${__cdist_object_id}." -fi - -# Prevent double slash if id begins with / -if [ "$(echo $__cdist_object_id | grep "^/")" ]; then - __cdist_object_self="${__cdist_type}${__cdist_object_id}" -else - __cdist_object_self="${__cdist_type}/${__cdist_object_id}" -fi -################################################################################ -# Internal quirks -# - -# Append id for error messages -__cdist_myname="$__cdist_myname ($__cdist_object_id)" - -################################################################################ -# Create object in tmpdir first -# - -# Save original destination -__cdist_out_object_dir_orig="$__cdist_out_object_dir" - -# Store to tmp now -__cdist_out_object_dir="$__cdist_tmp_dir" - -__cdist_new_object_dir="$(__cdist_object_dir "$__cdist_object_self")" - -# Initialise object -mkdir -p "${__cdist_new_object_dir}" - -# Record parameter -__cdist_parameter_dir="$(__cdist_object_parameter_dir "$__cdist_object_self")" -mkdir -p "${__cdist_parameter_dir}" - -while [ $# -gt 0 ]; do - opt="$1"; shift - - echo "$opt" | grep -q "^--${__cdist_sane_regexp}\$" || \ - __cdist_usage "Provide sane options" - - opt_file="${opt#--}" - - [ $# -ge 1 ] || __cdist_usage "Missing value for $opt" - - value="$1"; shift - - echo "${value}" > "${__cdist_parameter_dir}/${opt_file}" -done - -# 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")" - __cdist_echo info "Recording requirement $requirement" -done -set -u - -################################################################################ -# Check newly created object -# - -# -# Ensure required parameters are given -# -if [ -f "$(__cdist_type_parameter_required "$__cdist_type")" ]; then - while read required; do - if [ ! -f "${__cdist_parameter_dir}/${required}" ]; then - __cdist_usage "Missing required parameter $required" - fi - done < "$(__cdist_type_parameter_required "$__cdist_type")" -fi - -# -# Ensure that only optional or required parameters are given -# - -if [ -f "$(__cdist_type_parameter_optional "$__cdist_type")" ]; then - 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" -fi - -cd "$__cdist_parameter_dir" -for parameter in $(ls -1); do - is_valid=$(grep "^$parameter\$" "$__cdist_tmp_file") - - [ "$is_valid" ] || __cdist_usage "Unknown parameter $parameter" -done - -################################################################################ -# Merge object -# -# Restore original destination -__cdist_out_object_dir="$__cdist_out_object_dir_orig" - -__cdist_object_dir="$(__cdist_object_dir "$__cdist_object_self")" - -# -# If the object already exists and is exactly the same, merge it. Otherwise fail. -# -if [ -e "${__cdist_object_dir}" ]; then - # Allow diff to fail - set +e - diff -ru "${__cdist_new_object_dir}/${__cdist_name_parameter}" \ - "${__cdist_object_dir}/${__cdist_name_parameter}" \ - > "$__cdist_tmp_file"; ret=$? - set -e - - if [ "$ret" != 0 ]; then - # Go to standard error - exec >&2 - echo "${__cdist_object_self} already exists differently." - echo "Recorded source(s):" - __cdist_object_source "${__cdist_object_dir}" - echo "Differences:" - cat "$__cdist_tmp_file" - __cdist_exit_err "Aborting due to object conflict." - fi -else - # - # Move object into tree: - # Create full path minus .cdist and move .cdist - # - __cdist_new_object_base_dir="$(__cdist_object_base_dir "$__cdist_object_self")" - mkdir -p "$__cdist_new_object_base_dir" - mv "$__cdist_new_object_dir" "$__cdist_new_object_base_dir" -fi - -# Add "I was here message" -__cdist_object_source_add "${__cdist_object_dir}"