forked from ungleich-public/cdist
		
	new type to manage a block of text in a file
Signed-off-by: Steven Armstrong <steven@icarus.ethz.ch>
This commit is contained in:
		
					parent
					
						
							
								746d9ec12b
							
						
					
				
			
			
				commit
				
					
						a787d2b27b
					
				
			
		
					 7 changed files with 229 additions and 0 deletions
				
			
		
							
								
								
									
										21
									
								
								cdist/conf/type/__block/explorer/block
									
										
									
									
									
										Executable file
									
								
							
							
						
						
									
										21
									
								
								cdist/conf/type/__block/explorer/block
									
										
									
									
									
										Executable file
									
								
							|  | @ -0,0 +1,21 @@ | ||||||
|  | #!/bin/sh | ||||||
|  | # 2013 Steven Armstrong (steven-cdist at armstrong.cc) | ||||||
|  | 
 | ||||||
|  | file="$(cat "$__object/parameter/file" 2>/dev/null || echo "/$__object_id")" | ||||||
|  | 
 | ||||||
|  | # file does not exist, nothing we could do | ||||||
|  | [ -f "$file" ] || exit 0 | ||||||
|  | 
 | ||||||
|  | prefix=$(cat "$__object/parameter/prefix" 2>/dev/null || echo "#cdist:__block/$__object_id") | ||||||
|  | suffix=$(cat "$__object/parameter/suffix" 2>/dev/null || echo "#/cdist:__block/$__object_id") | ||||||
|  | awk -v prefix="$prefix" -v suffix="$suffix" '{ | ||||||
|  |    if (index($0,prefix)) { | ||||||
|  |       triggered=1 | ||||||
|  |    } | ||||||
|  |    if (triggered) { | ||||||
|  |       if (index($0,suffix)) { | ||||||
|  |             triggered=0 | ||||||
|  |       } | ||||||
|  |       print | ||||||
|  |    } | ||||||
|  | }' "$file" | ||||||
							
								
								
									
										84
									
								
								cdist/conf/type/__block/gencode-remote
									
										
									
									
									
										Executable file
									
								
							
							
						
						
									
										84
									
								
								cdist/conf/type/__block/gencode-remote
									
										
									
									
									
										Executable file
									
								
							|  | @ -0,0 +1,84 @@ | ||||||
|  | #!/bin/sh | ||||||
|  | # | ||||||
|  | # 2013 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 <http://www.gnu.org/licenses/>. | ||||||
|  | # | ||||||
|  | 
 | ||||||
|  | file="$(cat "$__object/parameter/file" 2>/dev/null || echo "/$__object_id")" | ||||||
|  | state_should=$(cat "$__object/parameter/state") | ||||||
|  | prefix=$(cat "$__object/parameter/prefix" 2>/dev/null || echo "#cdist:__block/$__object_id") | ||||||
|  | suffix=$(cat "$__object/parameter/suffix" 2>/dev/null || echo "#/cdist:__block/$__object_id") | ||||||
|  | 
 | ||||||
|  | block="$__object/files/block" | ||||||
|  | if [ ! -s "$__object/explorer/block" ]; then | ||||||
|  |    state_is='absent' | ||||||
|  | else | ||||||
|  |    state_is=$(diff -q "$block" "$__object/explorer/block" >/dev/null \ | ||||||
|  |       && echo present \ | ||||||
|  |       || echo changed | ||||||
|  |    ) | ||||||
|  | fi | ||||||
|  | 
 | ||||||
|  | state_should="$(cat "$__object/parameter/state")" | ||||||
|  | if [ "$state_should" = "$state_is" ]; then | ||||||
|  |    # Nothing to do, move along | ||||||
|  |    exit 0 | ||||||
|  | fi | ||||||
|  | 
 | ||||||
|  | remove_block() { | ||||||
|  |    cat << DONE | ||||||
|  | tmpfile=\$(mktemp ${file}.cdist.XXXXXXXXXX) | ||||||
|  | # preserve ownership and permissions of existing file | ||||||
|  | if [ -f "$file" ]; then | ||||||
|  |    cp -p "$file" "\$tmpfile" | ||||||
|  | fi | ||||||
|  | awk -v prefix="$prefix" -v suffix="$suffix" ' | ||||||
|  | { | ||||||
|  |    if (index(\$0,prefix)) { | ||||||
|  |       triggered=1 | ||||||
|  |    } | ||||||
|  |    if (triggered) { | ||||||
|  |       if (index(\$0,suffix)) { | ||||||
|  |          triggered=0 | ||||||
|  |       } | ||||||
|  |    } else { | ||||||
|  |       print | ||||||
|  |    } | ||||||
|  | }' "$file" > "\$tmpfile" | ||||||
|  | mv -f "\$tmpfile" "$file" | ||||||
|  | DONE | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | case "$state_should" in | ||||||
|  |    present) | ||||||
|  |       if [ "$state_is" = "changed" ]; then | ||||||
|  |          echo update >> "$__messages_out" | ||||||
|  |          remove_block | ||||||
|  |       else | ||||||
|  |          echo add >> "$__messages_out" | ||||||
|  |       fi | ||||||
|  |       cat << DONE | ||||||
|  | cat >> "$file" << ${__type##*/}_DONE | ||||||
|  | $(cat "$block") | ||||||
|  | ${__type##*/}_DONE | ||||||
|  | DONE | ||||||
|  |    ;; | ||||||
|  |    absent) | ||||||
|  |       echo remove >> "$__messages_out" | ||||||
|  |       remove_block | ||||||
|  |    ;; | ||||||
|  | esac | ||||||
							
								
								
									
										82
									
								
								cdist/conf/type/__block/man.text
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										82
									
								
								cdist/conf/type/__block/man.text
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,82 @@ | ||||||
|  | cdist-type__block(7) | ||||||
|  | ==================== | ||||||
|  | Steven Armstrong <steven-cdist--@--armstrong.cc> | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | NAME | ||||||
|  | ---- | ||||||
|  | cdist-type__block - Manage blocks of text in files | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | DESCRIPTION | ||||||
|  | ----------- | ||||||
|  | Manage a block of text in an existing file. | ||||||
|  | The block is identified using the prefix and suffix parameters. | ||||||
|  | Everything between prefix and suffix is considered to be a managed block | ||||||
|  | of text. | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | REQUIRED PARAMETERS | ||||||
|  | ------------------- | ||||||
|  | text:: | ||||||
|  |    the text to manage. | ||||||
|  |    If text is '-' (dash), take what was written to stdin as the text. | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | OPTIONAL PARAMETERS | ||||||
|  | ------------------- | ||||||
|  | file:: | ||||||
|  |    the file in which to manage the text block. | ||||||
|  |    Defaults to object_id. | ||||||
|  | 
 | ||||||
|  | prefix:: | ||||||
|  |    the prefix to add before the text. | ||||||
|  |    Defaults to #cdist:__block/$__object_id | ||||||
|  | 
 | ||||||
|  | suffix:: | ||||||
|  |    the prefix to add after the text. | ||||||
|  |    Defaults to #/cdist:__block/$__object_id | ||||||
|  | 
 | ||||||
|  | state:: | ||||||
|  |    'present' or 'absent', defaults to 'present' | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | MESSAGES | ||||||
|  | -------- | ||||||
|  | add:: | ||||||
|  |    block was added | ||||||
|  | update:: | ||||||
|  |    block was updated/changed | ||||||
|  | remove:: | ||||||
|  |    block was removed | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | EXAMPLES | ||||||
|  | -------- | ||||||
|  | 
 | ||||||
|  | -------------------------------------------------------------------------------- | ||||||
|  | # text from argument | ||||||
|  | __block /path/to/file \ | ||||||
|  |    --prefix '#start' \ | ||||||
|  |    --suffix '#end' \ | ||||||
|  |    --text 'some\nblock of\ntext' | ||||||
|  | 
 | ||||||
|  | # text from stdin | ||||||
|  | __block some-id \ | ||||||
|  |    --file /path/to/file \ | ||||||
|  |    --text - << DONE | ||||||
|  | here some block | ||||||
|  | of text | ||||||
|  | DONE | ||||||
|  | -------------------------------------------------------------------------------- | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | SEE ALSO | ||||||
|  | -------- | ||||||
|  | - cdist-type(7) | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | COPYING | ||||||
|  | ------- | ||||||
|  | Copyright \(C) 2013 Steven Armstrong. Free use of this software is | ||||||
|  | granted under the terms of the GNU General Public License version 3 (GPLv3). | ||||||
							
								
								
									
										36
									
								
								cdist/conf/type/__block/manifest
									
										
									
									
									
										Executable file
									
								
							
							
						
						
									
										36
									
								
								cdist/conf/type/__block/manifest
									
										
									
									
									
										Executable file
									
								
							|  | @ -0,0 +1,36 @@ | ||||||
|  | #!/bin/sh | ||||||
|  | # | ||||||
|  | # 2013-2014 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 <http://www.gnu.org/licenses/>. | ||||||
|  | # | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | file="$(cat "$__object/parameter/file" 2>/dev/null || echo "/$__object_id")" | ||||||
|  | prefix=$(cat "$__object/parameter/prefix" 2>/dev/null || echo "#cdist:__block/$__object_id") | ||||||
|  | suffix=$(cat "$__object/parameter/suffix" 2>/dev/null || echo "#/cdist:__block/$__object_id") | ||||||
|  | text=$(cat "$__object/parameter/text") | ||||||
|  | 
 | ||||||
|  | mkdir "$__object/files" | ||||||
|  | # Generate text block for inclusion in file | ||||||
|  | block="$__object/files/block" | ||||||
|  | echo "$prefix" > "$block" | ||||||
|  | if [ "$text" = "-" ]; then | ||||||
|  |    cat "$__object/stdin" >> "$block" | ||||||
|  | else | ||||||
|  |    cat "$text" >> "$block" | ||||||
|  | fi | ||||||
|  | echo "$suffix" >> "$block" | ||||||
							
								
								
									
										1
									
								
								cdist/conf/type/__block/parameter/default/state
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										1
									
								
								cdist/conf/type/__block/parameter/default/state
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1 @@ | ||||||
|  | present | ||||||
							
								
								
									
										4
									
								
								cdist/conf/type/__block/parameter/optional
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										4
									
								
								cdist/conf/type/__block/parameter/optional
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,4 @@ | ||||||
|  | file | ||||||
|  | prefix | ||||||
|  | state | ||||||
|  | suffix | ||||||
							
								
								
									
										1
									
								
								cdist/conf/type/__block/parameter/required
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										1
									
								
								cdist/conf/type/__block/parameter/required
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1 @@ | ||||||
|  | text | ||||||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue