| 
									
										
										
										
											2011-02-23 00:12:34 +01:00
										 |  |  | #!/bin/sh | 
					
						
							|  |  |  | # | 
					
						
							| 
									
										
										
										
											2011-02-23 00:19:16 +01:00
										 |  |  | # 2011 Nico Schottelius (nico-cdist at schottelius.org) | 
					
						
							| 
									
										
										
										
											2011-02-23 00:12: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/>. | 
					
						
							|  |  |  | # | 
					
						
							|  |  |  | #  | 
					
						
							| 
									
										
										
										
											2011-02-23 00:19:16 +01:00
										 |  |  | # For each created object check the explorers and run them if needed. | 
					
						
							| 
									
										
										
										
											2011-02-23 00:12:34 +01:00
										 |  |  | # | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | . cdist-config | 
					
						
							| 
									
										
										
										
											2011-02-23 00:19:16 +01:00
										 |  |  | [ $# -eq 2 ] || __cdist_usage "<target host> <object_base_dir>" | 
					
						
							| 
									
										
										
										
											2011-02-24 16:33:08 +01:00
										 |  |  | set -eux | 
					
						
							| 
									
										
										
										
											2011-02-23 00:12:34 +01:00
										 |  |  | 
 | 
					
						
							|  |  |  | __cdist_target_host="$1"; shift | 
					
						
							|  |  |  | __cdist_object_base_dir="$1"; shift | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2011-02-24 14:24:47 +01:00
										 |  |  | object_listing="$__cdist_tmp_dir/objects" | 
					
						
							|  |  |  | type_listing_all="$__cdist_tmp_dir/types_all" | 
					
						
							|  |  |  | type_listing="$__cdist_tmp_dir/types" | 
					
						
							| 
									
										
										
										
											2011-02-24 10:06:56 +01:00
										 |  |  | 
 | 
					
						
							|  |  |  | # Get listing of objects | 
					
						
							| 
									
										
										
										
											2011-02-24 16:33:08 +01:00
										 |  |  | __cdist_object_list "$__cdist_object_base_dir" > "$object_listing" | 
					
						
							| 
									
										
										
										
											2011-02-24 10:06:56 +01:00
										 |  |  | 
 | 
					
						
							|  |  |  | # Get listing of types used | 
					
						
							| 
									
										
										
										
											2011-02-24 14:24:47 +01:00
										 |  |  | while read object; do | 
					
						
							|  |  |  |    echo "$(__cdist_type_from_object "$object")" >> "$type_listing_all" | 
					
						
							| 
									
										
										
										
											2011-02-24 16:33:08 +01:00
										 |  |  | done < "$object_listing" | 
					
						
							| 
									
										
										
										
											2011-02-24 14:24:47 +01:00
										 |  |  | sort "$type_listing_all" | uniq > "$type_listing" | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2011-02-24 16:33:08 +01:00
										 |  |  | # Create pseudo array to avoid issues with ssh | 
					
						
							|  |  |  | tc=0 | 
					
						
							|  |  |  | while read type; do | 
					
						
							|  |  |  |    eval type_$tc=\"\$type\" | 
					
						
							|  |  |  |    tc=$((tc+1)) | 
					
						
							|  |  |  | done < "$type_listing" | 
					
						
							| 
									
										
										
										
											2011-02-24 10:06:56 +01:00
										 |  |  | 
 | 
					
						
							|  |  |  | # For every type that has explorers, Transfer the explorers | 
					
						
							| 
									
										
										
										
											2011-02-24 16:33:08 +01:00
										 |  |  | i=0 | 
					
						
							| 
									
										
										
										
											2011-02-24 21:41:03 +01:00
										 |  |  | while [ "$i" -lt "$tc" ]; do | 
					
						
							|  |  |  |    eval cur_type=\"\$type_$i\" | 
					
						
							| 
									
										
										
										
											2011-02-24 10:06:56 +01:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2011-02-24 16:33:08 +01:00
										 |  |  |    src_dir="$(__cdist_type_explorer_dir "$cur_type")" | 
					
						
							|  |  |  |    dst_dir="$(__cdist_remote_type_explorer_dir "$cur_type")" | 
					
						
							| 
									
										
										
										
											2011-02-24 10:06:56 +01:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2011-02-24 16:33:08 +01:00
										 |  |  |    if [ -d "$src_dir" ]; then | 
					
						
							|  |  |  |       cdist-dir push "$__cdist_target_host" "$src_dir" "$dst_dir" | 
					
						
							|  |  |  |    fi | 
					
						
							|  |  |  |    i=$((i+1)) | 
					
						
							|  |  |  | done | 
					
						
							| 
									
										
										
										
											2011-02-24 14:24:47 +01:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2011-02-24 10:06:56 +01:00
										 |  |  | ################################################################################ | 
					
						
							| 
									
										
										
										
											2011-02-24 16:33:08 +01:00
										 |  |  | # Explorer execution per object | 
					
						
							| 
									
										
										
										
											2011-02-24 10:06:56 +01:00
										 |  |  | # | 
					
						
							| 
									
										
										
										
											2011-02-23 09:02:57 +01:00
										 |  |  | # need to create pseudo array, as ssh in cdist-explorer-run will destroy while-read loops | 
					
						
							| 
									
										
										
										
											2011-02-23 00:12:34 +01:00
										 |  |  | while read object; do | 
					
						
							| 
									
										
										
										
											2011-02-23 00:19:16 +01:00
										 |  |  |    set -- "$@" "$object" | 
					
						
							| 
									
										
										
										
											2011-02-24 16:33:08 +01:00
										 |  |  | done < "$object_listing" | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2011-02-23 00:19:16 +01:00
										 |  |  | while [ $# -gt 0 ]; do | 
					
						
							|  |  |  |    object="$1"; shift | 
					
						
							| 
									
										
										
										
											2011-02-23 09:56:25 +01:00
										 |  |  |    object_id="$(__cdist_object_id_from_object "$object")" | 
					
						
							|  |  |  |    type="$(__cdist_type_from_object "$object")" | 
					
						
							| 
									
										
										
										
											2011-02-24 17:28:14 +01:00
										 |  |  | 
 | 
					
						
							|  |  |  |    # Always copy object parameters (looks weired if done only for the ones with explorer) | 
					
						
							|  |  |  |    # Really always? | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |    # Check if type of object has >= 1 explorer | 
					
						
							|  |  |  |    has_explorer="$(__cdist_type_has_explorer "$type")" | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |    # If so, run explorers on remote side | 
					
						
							|  |  |  |    if [ "$has_explorer" ]; then | 
					
						
							| 
									
										
										
										
											2011-02-24 21:24:21 +01:00
										 |  |  |       cdist-run-remote "$__cdist_target_host"            \ | 
					
						
							|  |  |  |          cdist-remote-explorer-run                       \ | 
					
						
							|  |  |  |          "$__cdist_name_var_type_explorer"               \ | 
					
						
							|  |  |  |          "$(__cdist_remote_type_explorer_dir "$type")"   \ | 
					
						
							|  |  |  |          "$(__cdist_remote_object_type_explorer_dir "$object")" | 
					
						
							| 
									
										
										
										
											2011-02-24 17:28:14 +01:00
										 |  |  |     | 
					
						
							|  |  |  |       # Copy back results | 
					
						
							| 
									
										
										
										
											2011-02-24 21:24:21 +01:00
										 |  |  |       cdist-dir pull "$__cdist_target_host"                       \ | 
					
						
							|  |  |  |          "$(__cdist_remote_object_type_explorer_dir "$object")"   \ | 
					
						
							|  |  |  |          "$(__cdist_object_type_explorer_dir "$object")" | 
					
						
							| 
									
										
										
										
											2011-02-23 09:02:57 +01:00
										 |  |  |    fi | 
					
						
							|  |  |  | done |