almost completly implemented type emulator in python
Signed-off-by: Nico Schottelius <nico@kr.ethz.ch>
This commit is contained in:
		
					parent
					
						
							
								b7b48414e1
							
						
					
				
			
			
				commit
				
					
						4e8f99b01d
					
				
			
		
					 2 changed files with 1 additions and 182 deletions
				
			
		|  | @ -645,6 +645,7 @@ def emulator(): | ||||||
|       if object_id[0] == '/': |       if object_id[0] == '/': | ||||||
|          object_id = object_id[1:] |          object_id = object_id[1:] | ||||||
| 
 | 
 | ||||||
|  |    # FIXME: verify object id | ||||||
|    log.debug(args) |    log.debug(args) | ||||||
| 
 | 
 | ||||||
|    object_dir = os.path.join(global_dir, "object", type, |    object_dir = os.path.join(global_dir, "object", type, | ||||||
|  |  | ||||||
|  | @ -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 <http://www.gnu.org/licenses/>. |  | ||||||
| # |  | ||||||
| #  |  | ||||||
| # 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 "<id> <options>" |  | ||||||
|    __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}" |  | ||||||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue