forked from ungleich-public/cdist
		
	Merge branch '__download_improvements' into 'master'
__download improvements See merge request ungleich-public/cdist!895
This commit is contained in:
		
				commit
				
					
						fde5627721
					
				
			
		
					 10 changed files with 173 additions and 27 deletions
				
			
		
							
								
								
									
										19
									
								
								cdist/conf/type/__download/explorer/remote_cmd
									
										
									
									
									
										Executable file
									
								
							
							
						
						
									
										19
									
								
								cdist/conf/type/__download/explorer/remote_cmd
									
										
									
									
									
										Executable file
									
								
							|  | @ -0,0 +1,19 @@ | |||
| #!/bin/sh -e | ||||
| 
 | ||||
| if [ -f "$__object/parameter/cmd-get" ] | ||||
| then | ||||
|     cmd="$( cat "$__object/parameter/cmd-get" )" | ||||
| 
 | ||||
| elif command -v curl > /dev/null | ||||
| then | ||||
|     cmd="curl -L -o - '%s'" | ||||
| 
 | ||||
| elif command -v fetch > /dev/null | ||||
| then | ||||
|     cmd="fetch -o - '%s'" | ||||
| 
 | ||||
| else | ||||
|     cmd="wget -O - '%s'" | ||||
| fi | ||||
| 
 | ||||
| echo "$cmd" | ||||
|  | @ -2,19 +2,71 @@ | |||
| 
 | ||||
| dst="/$__object_id" | ||||
| 
 | ||||
| # shellcheck disable=SC2059 | ||||
| cmd="$( printf "$( cat "$__object/parameter/cmd-sum" )" "$dst" )" | ||||
| 
 | ||||
| sum="$( cat "$__object/parameter/sum" )" | ||||
| 
 | ||||
| if [ -f "$dst" ] | ||||
| if [ ! -f "$dst" ] | ||||
| then | ||||
|     if [ "$( eval "$cmd" )" = "$sum" ] | ||||
|     echo 'absent' | ||||
|     exit 0 | ||||
| fi | ||||
| 
 | ||||
| sum_should="$( cat "$__object/parameter/sum" )" | ||||
| 
 | ||||
| if [ -f "$__object/parameter/cmd-sum" ] | ||||
| then | ||||
|     # shellcheck disable=SC2059 | ||||
|     sum_is="$( eval "$( printf \ | ||||
|         "$( cat "$__object/parameter/cmd-sum" )" \ | ||||
|         "$dst" )" )" | ||||
| else | ||||
|     os="$( "$__explorer/os" )" | ||||
| 
 | ||||
|     if echo "$sum_should" | grep -Eq '^[0-9]+\s[0-9]+$' | ||||
|     then | ||||
|         sum_is="$( cksum "$dst" | awk '{print $1" "$2}' )" | ||||
| 
 | ||||
|     elif echo "$sum_should" | grep -Eiq '^md5:[a-f0-9]{32}$' | ||||
|     then | ||||
|         case "$os" in | ||||
|             freebsd) | ||||
|                 sum_is="md5:$( md5 -q "$dst" )" | ||||
|             ;; | ||||
|             *) | ||||
|                 sum_is="md5:$( md5sum "$dst" | awk '{print $1}' )" | ||||
|             ;; | ||||
|         esac | ||||
| 
 | ||||
|     elif echo "$sum_should" | grep -Eiq '^sha1:[a-f0-9]{40}$' | ||||
|     then | ||||
|         case "$os" in | ||||
|             freebsd) | ||||
|                 sum_is="sha1:$( sha1 -q "$dst" )" | ||||
|             ;; | ||||
|             *) | ||||
|                 sum_is="sha1:$( sha1sum "$dst" | awk '{print $1}' )" | ||||
|             ;; | ||||
|         esac | ||||
| 
 | ||||
|     elif echo "$sum_should" | grep -Eiq '^sha256:[a-f0-9]{64}$' | ||||
|     then | ||||
|         case "$os" in | ||||
|             freebsd) | ||||
|                 sum_is="sha256:$( sha256 -q "$dst" )" | ||||
|             ;; | ||||
|             *) | ||||
|                 sum_is="sha256:$( sha256sum "$dst" | awk '{print $1}' )" | ||||
|             ;; | ||||
|         esac | ||||
|     fi | ||||
| fi | ||||
| 
 | ||||
| if [ -z "$sum_is" ] | ||||
| then | ||||
|     echo 'no checksum from target' >&2 | ||||
|     exit 1 | ||||
| fi | ||||
| 
 | ||||
| if [ "$sum_is" = "$sum_should" ] | ||||
| then | ||||
|     echo 'present' | ||||
| else | ||||
|     echo 'mismatch' | ||||
| fi | ||||
| else | ||||
|     echo 'absent' | ||||
| fi | ||||
|  |  | |||
|  | @ -1,20 +1,41 @@ | |||
| #!/bin/sh -e | ||||
| 
 | ||||
| download="$( cat "$__object/parameter/download" )" | ||||
| 
 | ||||
| state_is="$( cat "$__object/explorer/state" )" | ||||
| 
 | ||||
| if [ "$state_is" = 'present' ] | ||||
| if [ "$download" != 'local' ] || [ "$state_is" = 'present' ] | ||||
| then | ||||
|     exit 0 | ||||
| fi | ||||
| 
 | ||||
| url="$( cat "$__object/parameter/url" )" | ||||
| 
 | ||||
| cmd="$( cat "$__object/parameter/cmd-get" )" | ||||
| 
 | ||||
| tmp="$( mktemp )" | ||||
| 
 | ||||
| dst="/$__object_id" | ||||
| 
 | ||||
| if [ -f "$__object/parameter/cmd-get" ] | ||||
| then | ||||
|     cmd="$( cat "$__object/parameter/cmd-get" )" | ||||
| 
 | ||||
| elif command -v wget > /dev/null | ||||
| then | ||||
|     cmd="wget -O - '%s'" | ||||
| 
 | ||||
| elif command -v curl > /dev/null | ||||
| then | ||||
|     cmd="curl -L -o - '%s'" | ||||
| 
 | ||||
| elif command -v fetch > /dev/null | ||||
| then | ||||
|     cmd="fetch -o - '%s'" | ||||
| 
 | ||||
| else | ||||
|     echo 'no usable locally installed utility for downloading' >&2 | ||||
|     exit 1 | ||||
| fi | ||||
| 
 | ||||
| printf "$cmd > %s\n" \ | ||||
|     "$url" \ | ||||
|     "$tmp" | ||||
|  | @ -33,3 +54,5 @@ printf '%s %s %s:%s\n' \ | |||
|     "$dst" | ||||
| 
 | ||||
| echo "rm -f '$tmp'" | ||||
| 
 | ||||
| echo 'downloaded' > "$__messages_out" | ||||
|  |  | |||
							
								
								
									
										25
									
								
								cdist/conf/type/__download/gencode-remote
									
										
									
									
									
										Executable file
									
								
							
							
						
						
									
										25
									
								
								cdist/conf/type/__download/gencode-remote
									
										
									
									
									
										Executable file
									
								
							|  | @ -0,0 +1,25 @@ | |||
| #!/bin/sh -e | ||||
| 
 | ||||
| download="$( cat "$__object/parameter/download" )" | ||||
| 
 | ||||
| state_is="$( cat "$__object/explorer/state" )" | ||||
| 
 | ||||
| if [ "$download" = 'remote' ] && [ "$state_is" != 'present' ] | ||||
| then | ||||
|     cmd="$( cat "$__object/explorer/remote_cmd" )" | ||||
| 
 | ||||
|     url="$( cat "$__object/parameter/url" )" | ||||
| 
 | ||||
|     dst="/$__object_id" | ||||
| 
 | ||||
|     printf "$cmd > %s\n" \ | ||||
|         "$url" \ | ||||
|         "$dst" | ||||
| 
 | ||||
|     echo 'downloaded' > "$__messages_out" | ||||
| fi | ||||
| 
 | ||||
| if [ -f "$__object/parameter/onchange" ] && [ "$state" != "present" ] | ||||
| then | ||||
|     cat "$__object/parameter/onchange" | ||||
| fi | ||||
|  | @ -3,36 +3,56 @@ cdist-type__download(7) | |||
| 
 | ||||
| NAME | ||||
| ---- | ||||
| cdist-type__download - Download file to local storage and copy it to target host | ||||
| cdist-type__download - Download a file | ||||
| 
 | ||||
| 
 | ||||
| DESCRIPTION | ||||
| ----------- | ||||
| You must use persistent storage in target host for destination file | ||||
| (``$__object_id``) because it will be used for checksum calculation | ||||
| in order to decide if file must be downloaded. | ||||
| Destination (``$__object_id``) in target host must be persistent storage | ||||
| in order to calculate checksum and decide if file must be (re-)downloaded. | ||||
| 
 | ||||
| By default type will try to use ``wget``, ``curl`` or ``fetch``. | ||||
| If download happens in target (see ``--download``) then type will | ||||
| fallback to (and install) ``wget``. | ||||
| 
 | ||||
| If download happens in local machine, then environment variables like | ||||
| ``{http,https,ftp}_proxy`` etc can be used on cdist execution | ||||
| (``http_proxy=foo cdist config ...``). | ||||
| 
 | ||||
| 
 | ||||
| REQUIRED PARAMETERS | ||||
| ------------------- | ||||
| url | ||||
|    URL from which to download the file. | ||||
|    File's URL. | ||||
| 
 | ||||
| sum | ||||
|    Checksum of downloaded file. | ||||
|    Checksum of file going to be downloaded. | ||||
|    By default output of ``cksum`` without filename is expected. | ||||
|    Other hash formats supported with prefixes: ``md5:``, ``sha1:`` and ``sha256:``. | ||||
| 
 | ||||
| onchange | ||||
|    Execute this command after download. | ||||
| 
 | ||||
| 
 | ||||
| OPTIONAL PARAMETERS | ||||
| ------------------- | ||||
| download | ||||
|    If ``local`` (default), then download file to local storage and copy | ||||
|    it to target host. If ``remote``, then download happens in target. | ||||
| 
 | ||||
| cmd-get | ||||
|    Command used for downloading. | ||||
|    Default is ``wget -O- '%s'``. | ||||
|    Command must output to ``stdout``. | ||||
|    Parameter will be used for ``printf`` and must include only one | ||||
|    format specification ``%s`` which will become URL. | ||||
|    For example: ``wget -O - '%s'``. | ||||
| 
 | ||||
| cmd-sum | ||||
|    Command used for checksum calculation. | ||||
|    Default is ``md5sum '%s' | awk '{print $1}'``. | ||||
|    Command output and ``--sum`` parameter must match. | ||||
|    Parameter will be used for ``printf`` and must include only one | ||||
|    format specification ``%s`` which will become destination. | ||||
|    For example: ``md5sum '%s' | awk '{print $1}'``. | ||||
| 
 | ||||
| 
 | ||||
| EXAMPLES | ||||
|  | @ -45,7 +65,7 @@ EXAMPLES | |||
|     require='__directory/opt/cpma' \ | ||||
|         __download /opt/cpma/cnq3.zip \ | ||||
|             --url https://cdn.playmorepromode.com/files/cnq3/cnq3-1.51.zip \ | ||||
|             --sum 46da3021ca9eace277115ec9106c5b46 | ||||
|             --sum md5:46da3021ca9eace277115ec9106c5b46 | ||||
| 
 | ||||
|     require='__download/opt/cpma/cnq3.zip' \ | ||||
|         __unpack /opt/cpma/cnq3.zip \ | ||||
|  |  | |||
							
								
								
									
										6
									
								
								cdist/conf/type/__download/manifest
									
										
									
									
									
										Executable file
									
								
							
							
						
						
									
										6
									
								
								cdist/conf/type/__download/manifest
									
										
									
									
									
										Executable file
									
								
							|  | @ -0,0 +1,6 @@ | |||
| #!/bin/sh -e | ||||
| 
 | ||||
| if grep -Eq '^wget' "$__object/explorer/remote_cmd" | ||||
| then | ||||
|     __package wget | ||||
| fi | ||||
|  | @ -1 +0,0 @@ | |||
| wget -O- '%s' | ||||
|  | @ -1 +0,0 @@ | |||
| md5sum '%s' | awk '{print $1}' | ||||
							
								
								
									
										1
									
								
								cdist/conf/type/__download/parameter/default/download
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										1
									
								
								cdist/conf/type/__download/parameter/default/download
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1 @@ | |||
| local | ||||
|  | @ -1,2 +1,4 @@ | |||
| cmd-get | ||||
| cmd-sum | ||||
| download | ||||
| onchange | ||||
|  |  | |||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue