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