forked from ungleich-public/cdist
		
	Add pre-exists state to __file (#641)
This allows checking whether a file exists, but erroring out instead of creating the file if it does not (or is not a regular file).
This commit is contained in:
		
					parent
					
						
							
								2b85e4f14b
							
						
					
				
			
			
				commit
				
					
						a9a359d542
					
				
			
		
					 3 changed files with 24 additions and 1 deletions
				
			
		| 
						 | 
				
			
			@ -25,6 +25,20 @@ type="$(cat "$__object/explorer/type")"
 | 
			
		|||
 | 
			
		||||
[ "$state_should" = "exists" -a "$type" = "file" ] && exit 0 # nothing to do
 | 
			
		||||
 | 
			
		||||
if [ "$state_should" = "pre-exists" ]; then
 | 
			
		||||
   if [ -f "$__object/parameter/source" ]; then
 | 
			
		||||
      echo "--source cannot be used with --state pre-exists"
 | 
			
		||||
      exit 1
 | 
			
		||||
   fi
 | 
			
		||||
 | 
			
		||||
   if [ "$type" = "file" ]; then
 | 
			
		||||
      exit 0 # nothing to do
 | 
			
		||||
   else
 | 
			
		||||
      echo "File \"$destination\" does not exist"
 | 
			
		||||
      exit 1
 | 
			
		||||
   fi
 | 
			
		||||
fi
 | 
			
		||||
 | 
			
		||||
upload_file=
 | 
			
		||||
create_file=
 | 
			
		||||
if [ "$state_should" = "present" -o "$state_should" = "exists" ]; then
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -59,7 +59,7 @@ set_mode() {
 | 
			
		|||
 | 
			
		||||
set_attributes=
 | 
			
		||||
case "$state_should" in
 | 
			
		||||
    present|exists)
 | 
			
		||||
    present|exists|pre-exists)
 | 
			
		||||
    # Note: Mode - needs to happen last as a chown/chgrp can alter mode by
 | 
			
		||||
    #  clearing S_ISUID and S_ISGID bits (see chown(2))
 | 
			
		||||
    for attribute in group owner mode; do
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -23,6 +23,10 @@ symlink
 | 
			
		|||
directory
 | 
			
		||||
  replace it with the source file
 | 
			
		||||
 | 
			
		||||
One exception is that when state is pre-exists, an error is raised if
 | 
			
		||||
the file would have been created otherwise (e.g. it is not present or
 | 
			
		||||
not a regular file).
 | 
			
		||||
 | 
			
		||||
In any case, make sure that the file attributes are as specified.
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -41,6 +45,9 @@ state
 | 
			
		|||
      the file does not exist
 | 
			
		||||
   exists
 | 
			
		||||
      the file from source but only if it doesn't already exist
 | 
			
		||||
   pre-exists
 | 
			
		||||
      check that the file exists and is a regular file, but do not
 | 
			
		||||
      create or modify it
 | 
			
		||||
 | 
			
		||||
group
 | 
			
		||||
   Group to chgrp to.
 | 
			
		||||
| 
						 | 
				
			
			@ -93,6 +100,8 @@ EXAMPLES
 | 
			
		|||
    __file /home/frodo/.bashrc --source "/etc/skel/.bashrc" \
 | 
			
		||||
       --state exists \
 | 
			
		||||
       --owner frodo --mode 0600
 | 
			
		||||
    # Check that the file is present, show an error when it is not
 | 
			
		||||
    __file /etc/somefile --state pre-exists
 | 
			
		||||
    # Take file content from stdin
 | 
			
		||||
    __file /tmp/whatever --owner root --group root --mode 644 --source - << DONE
 | 
			
		||||
        Here goes the content for /tmp/whatever
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue