forked from ungleich-public/cdist
		
	Merge branches 'preos' and 'install_integration' into 4.0-pre-not-stable
This commit is contained in:
		
				commit
				
					
						5f9eef3bbb
					
				
			
		
					 55 changed files with 765 additions and 182 deletions
				
			
		
							
								
								
									
										8
									
								
								Makefile
									
										
									
									
									
								
							
							
						
						
									
										8
									
								
								Makefile
									
										
									
									
									
								
							|  | @ -20,6 +20,13 @@ | ||||||
| 
 | 
 | ||||||
| A2XM=a2x -f manpage --no-xmllint -a encoding=UTF-8 | A2XM=a2x -f manpage --no-xmllint -a encoding=UTF-8 | ||||||
| A2XH=a2x -f xhtml --no-xmllint -a encoding=UTF-8 | A2XH=a2x -f xhtml --no-xmllint -a encoding=UTF-8 | ||||||
|  | # Create cross-links in html man pages
 | ||||||
|  | # We look for something like "cdist-type(7)" and make a href out of it
 | ||||||
|  | # The first matching group is the man page name and the second group
 | ||||||
|  | # is the man page section (1 or 7). The first three lines of the input
 | ||||||
|  | # (xml, DOCTYPE, head tags) are ignored, since the head tags contains
 | ||||||
|  | # the title of the page and should not contain a href.
 | ||||||
|  | CROSSLINK=sed --in-place '1,3!s/\([[:alnum:]_-]*\)(\([17]\))/<a href="..\/man\2\/\1.html">&<\/a>/g' | ||||||
| helper=./bin/build-helper | helper=./bin/build-helper | ||||||
| 
 | 
 | ||||||
| MANDIR=docs/man | MANDIR=docs/man | ||||||
|  | @ -86,6 +93,7 @@ MANSTATICALL=$(MANSTATICMAN) $(MANSTATICHTML) | ||||||
| # Creating the type html page
 | # Creating the type html page
 | ||||||
| %.html: %.text | %.html: %.text | ||||||
| 	$(A2XH) $^ | 	$(A2XH) $^ | ||||||
|  | 	$(CROSSLINK) $@ | ||||||
| 
 | 
 | ||||||
| man: $(MANTYPEALL) $(MANREFALL) $(MANSTATICALL) | man: $(MANTYPEALL) $(MANREFALL) $(MANSTATICALL) | ||||||
| 
 | 
 | ||||||
|  |  | ||||||
|  | @ -104,6 +104,11 @@ eof | ||||||
|     ;; |     ;; | ||||||
| 
 | 
 | ||||||
|     ml-release) |     ml-release) | ||||||
|  |         if [ $# -ne 1 ]; then | ||||||
|  |             echo "$0 ml-release version" >&2 | ||||||
|  |             exit 1 | ||||||
|  |         fi | ||||||
|  | 
 | ||||||
|         version=$1; shift |         version=$1; shift | ||||||
| 
 | 
 | ||||||
|         to_a=cdist |         to_a=cdist | ||||||
|  | @ -142,35 +147,17 @@ eof | ||||||
| 
 | 
 | ||||||
|     freecode-release) |     freecode-release) | ||||||
|         version=$1; shift |         version=$1; shift | ||||||
|         api_token=$(awk '/machine freecode login/ { print $8 }' ~/.netrc) |  | ||||||
| 
 |  | ||||||
|         printf "Enter tag list for freecode release %s> " "$version" |         printf "Enter tag list for freecode release %s> " "$version" | ||||||
|         read taglist |         read taglist | ||||||
| 
 | 
 | ||||||
|         printf "Enter changelog for freecode release %s> " "$version" |         printf "Enter changelog for freecode release %s> " "$version" | ||||||
|         read changelog |         read changelog | ||||||
| 
 | 
 | ||||||
|         echo "Submit preview" |         echo "Submitting to freecode ..." | ||||||
|         cat << eof |         python2 ~/p/foreign/freecode-submit-2.7/freecode-submit -P cdist \ | ||||||
| tag_list = $taglist |             -v "$version" -c "$changelog" \ | ||||||
| changelog = $changelog |             -t "$taglist" \ | ||||||
| version = $version |             -n | ||||||
| eof |  | ||||||
|         printf "Press enter to submit to freecode> " |  | ||||||
|         read dummy |  | ||||||
| 
 |  | ||||||
|         cat << eof | cfreecode-api release-add cdist |  | ||||||
|         { |  | ||||||
|             "auth_code": "$api_token", |  | ||||||
|             "release": { |  | ||||||
|                 "tag_list": "$taglist", |  | ||||||
|                 "version": "$version", |  | ||||||
|                 "changelog": "$changelog", |  | ||||||
|                 "hidden_from_frontpage": false |  | ||||||
|             } |  | ||||||
|         } |  | ||||||
| eof |  | ||||||
| 
 |  | ||||||
|     ;; |     ;; | ||||||
| 
 | 
 | ||||||
|     release-git-tag) |     release-git-tag) | ||||||
|  |  | ||||||
|  | @ -24,12 +24,12 @@ | ||||||
| # | # | ||||||
| 
 | 
 | ||||||
| # Use ip, if available | # Use ip, if available | ||||||
| if command -v ip; then | if command -v ip >/dev/null; then | ||||||
|     ip -o link show | sed -n 's/^[0-9]\+: \(.\+\): <.*/\1/p' |     ip -o link show | sed -n 's/^[0-9]\+: \(.\+\): <.*/\1/p' | ||||||
|     exit 0 |     exit 0 | ||||||
| fi | fi | ||||||
| 
 | 
 | ||||||
| if ! command -v ifconfig; then | if ! command -v ifconfig >/dev/null; then | ||||||
|    # no ifconfig, nothing we could do |    # no ifconfig, nothing we could do | ||||||
|    exit 0 |    exit 0 | ||||||
| fi | fi | ||||||
|  |  | ||||||
|  | @ -25,7 +25,7 @@ destination="/$__object_id" | ||||||
| 
 | 
 | ||||||
| os=$("$__explorer/os") | os=$("$__explorer/os") | ||||||
| case "$os" in | case "$os" in | ||||||
|    "freebsd") |    "freebsd"|"openbsd") | ||||||
|       # FIXME: should be something like this based on man page, but can not test |       # FIXME: should be something like this based on man page, but can not test | ||||||
|       stat -f "type: %ST |       stat -f "type: %ST | ||||||
| owner: %Du %Su | owner: %Du %Su | ||||||
|  | @ -33,6 +33,15 @@ group: %Dg %Sg | ||||||
| mode: %Op %Sp | mode: %Op %Sp | ||||||
| size: %Dz | size: %Dz | ||||||
| links: %Dl | links: %Dl | ||||||
|  | " "$destination" | ||||||
|  |    ;; | ||||||
|  |     "macosx") | ||||||
|  |        stat -f "type: %HT | ||||||
|  |  owner: %Du %Su | ||||||
|  |  group: %Dg %Sg | ||||||
|  |  mode: %Lp %Sp | ||||||
|  |  size: %Dz | ||||||
|  |  links: %Dl | ||||||
|  " "$destination" |  " "$destination" | ||||||
|     ;; |     ;; | ||||||
|    *) |    *) | ||||||
|  |  | ||||||
|  | @ -25,12 +25,19 @@ destination="/$__object_id" | ||||||
| 
 | 
 | ||||||
| os=$("$__explorer/os") | os=$("$__explorer/os") | ||||||
| case "$os" in | case "$os" in | ||||||
|    "freebsd") |    "freebsd"|"openbsd") | ||||||
|       # FIXME: should be something like this based on man page, but can not test |       # FIXME: should be something like this based on man page, but can not test | ||||||
|       stat -f "type: %ST |       stat -f "type: %ST | ||||||
| owner: %Du %Su | owner: %Du %Su | ||||||
| group: %Dg %Sg | group: %Dg %Sg | ||||||
| mode: %Op %Sp | mode: %Op %Sp | ||||||
|  | " "$destination" | ||||||
|  |    ;; | ||||||
|  |     "macosx") | ||||||
|  |        stat -f "type: %HT | ||||||
|  |  owner: %Du %Su | ||||||
|  |  group: %Dg %Sg | ||||||
|  |  mode: %Lp %Sp | ||||||
|  " "$destination" |  " "$destination" | ||||||
|     ;; |     ;; | ||||||
|    *) |    *) | ||||||
|  |  | ||||||
|  | @ -33,6 +33,15 @@ group: %Dg %Sg | ||||||
| mode: %Op %Sp | mode: %Op %Sp | ||||||
| size: %Dz | size: %Dz | ||||||
| links: %Dl | links: %Dl | ||||||
|  | " "$destination" | ||||||
|  |    ;; | ||||||
|  |    "macosx") | ||||||
|  |      stat -f "type: %HT | ||||||
|  | owner: %Du %Su | ||||||
|  | group: %Dg %Sg | ||||||
|  | mode: %Lp %Sp | ||||||
|  | size: %Dz | ||||||
|  | links: %Dl | ||||||
| " "$destination" | " "$destination" | ||||||
|    ;; |    ;; | ||||||
|    *) |    *) | ||||||
|  |  | ||||||
|  | @ -21,6 +21,10 @@ | ||||||
| # Retrieve the contents of /etc/hostname | # Retrieve the contents of /etc/hostname | ||||||
| # | # | ||||||
| 
 | 
 | ||||||
|  | # Almost any distribution | ||||||
| if [ -f /etc/hostname ]; then | if [ -f /etc/hostname ]; then | ||||||
|     cat /etc/hostname |     cat /etc/hostname | ||||||
|  | # SuSE | ||||||
|  | elif [ -f /etc/HOSTNAME ]; then | ||||||
|  |     cat /etc/HOSTNAME | ||||||
| fi | fi | ||||||
|  |  | ||||||
							
								
								
									
										26
									
								
								cdist/conf/type/__hostname/explorer/hostname_sysconfig
									
										
									
									
									
										Executable file
									
								
							
							
						
						
									
										26
									
								
								cdist/conf/type/__hostname/explorer/hostname_sysconfig
									
										
									
									
									
										Executable file
									
								
							|  | @ -0,0 +1,26 @@ | ||||||
|  | #!/bin/sh | ||||||
|  | # | ||||||
|  | # 2014 Nico Schottelius (nico-cdist at schottelius.org) | ||||||
|  | # | ||||||
|  | # 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/>. | ||||||
|  | # | ||||||
|  | # | ||||||
|  | # Retrieve the contents of /etc/hostname | ||||||
|  | # | ||||||
|  | 
 | ||||||
|  | if [ -f /etc/sysconfig/network ]; then | ||||||
|  |     awk -F= '/^HOSTNAME=/ { print $2 }' /etc/sysconfig/network | ||||||
|  | fi | ||||||
|  | @ -28,14 +28,28 @@ fi | ||||||
| os=$(cat "$__global/explorer/os") | os=$(cat "$__global/explorer/os") | ||||||
| name_running=$(cat "$__global/explorer/hostname") | name_running=$(cat "$__global/explorer/hostname") | ||||||
| name_config=$(cat "$__object/explorer/hostname_file") | name_config=$(cat "$__object/explorer/hostname_file") | ||||||
|  | name_sysconfig=$(cat "$__object/explorer/hostname_sysconfig") | ||||||
| has_hostnamectl=$(cat "$__object/explorer/has_hostnamectl") | has_hostnamectl=$(cat "$__object/explorer/has_hostnamectl") | ||||||
| 
 | 
 | ||||||
| ################################################################################ | ################################################################################ | ||||||
| # If everything is ok -> exit | # If everything is ok -> exit | ||||||
| # | # | ||||||
|  | case "$os" in | ||||||
|  |     archlinux|debian|suse|ubuntu) | ||||||
|         if [ "$name_config" = "$name_should" -a "$name_running" = "$name_should" ]; then |         if [ "$name_config" = "$name_should" -a "$name_running" = "$name_should" ]; then | ||||||
|             exit 0 |             exit 0 | ||||||
|         fi |         fi | ||||||
|  |     ;; | ||||||
|  |     centos) | ||||||
|  |         if [ "$name_sysconfig" = "$name_should" -a "$name_running" = "$name_should" ]; then | ||||||
|  |             exit 0 | ||||||
|  |         fi | ||||||
|  |     ;; | ||||||
|  |     *) | ||||||
|  |         echo "Unsupported os: $os" >&2 | ||||||
|  |         exit 1 | ||||||
|  |     ;; | ||||||
|  | esac | ||||||
| 
 | 
 | ||||||
| ################################################################################ | ################################################################################ | ||||||
| # Setup hostname | # Setup hostname | ||||||
|  | @ -45,6 +59,17 @@ echo changed >> "$__messages_out" | ||||||
| if [ "$has_hostnamectl" ]; then | if [ "$has_hostnamectl" ]; then | ||||||
|     echo "hostnamectl set-hostname '$name_should'" |     echo "hostnamectl set-hostname '$name_should'" | ||||||
| else | else | ||||||
|  |     case "$os" in | ||||||
|  |         archlinux|debian|ubuntu) | ||||||
|             echo "hostname '$name_should'" |             echo "hostname '$name_should'" | ||||||
|             echo "printf '%s\n' '$name_should' > /etc/hostname" |             echo "printf '%s\n' '$name_should' > /etc/hostname" | ||||||
|  |         ;; | ||||||
|  |         centos) | ||||||
|  |             echo "hostname '$name_should'" | ||||||
|  |         ;; | ||||||
|  |         suse) | ||||||
|  |             echo "hostname '$name_should'" | ||||||
|  |             echo "printf '%s\n' '$name_should' > /etc/HOSTNAME" | ||||||
|  |         ;; | ||||||
|  |     esac | ||||||
| fi | fi | ||||||
|  |  | ||||||
|  | @ -20,6 +20,12 @@ | ||||||
| # | # | ||||||
| 
 | 
 | ||||||
| os=$(cat "$__global/explorer/os") | os=$(cat "$__global/explorer/os") | ||||||
|  | if [ -f "$__object/parameter/name" ]; then | ||||||
|  |     name_should="$(cat "$__object/parameter/name")" | ||||||
|  | else | ||||||
|  |     name_should="$(echo "${__target_host%%.*}")" | ||||||
|  | fi | ||||||
|  | 
 | ||||||
| 
 | 
 | ||||||
| not_supported() { | not_supported() { | ||||||
|    echo "Your operating system ($os) is currently not supported by this type (${__type##*/})." >&2 |    echo "Your operating system ($os) is currently not supported by this type (${__type##*/})." >&2 | ||||||
|  | @ -28,10 +34,17 @@ not_supported() { | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| case "$os" in | case "$os" in | ||||||
|    archlinux|debian|ubuntu) |     archlinux|debian|suse|ubuntu) | ||||||
|         # handled in gencode-remote |         # handled in gencode-remote | ||||||
|         : |         : | ||||||
|     ;; |     ;; | ||||||
|  |     centos) | ||||||
|  |         __key_value sysconfig-hostname \ | ||||||
|  |             --file /etc/sysconfig/network \ | ||||||
|  |             --delimiter '=' \ | ||||||
|  |             --key HOSTNAME \ | ||||||
|  |             --value "$name_should" --exact_delimiter | ||||||
|  |     ;; | ||||||
|     *) |     *) | ||||||
|         not_supported |         not_supported | ||||||
|     ;; |     ;; | ||||||
|  |  | ||||||
|  | @ -39,7 +39,7 @@ fi | ||||||
| # backslash-escaped $jaildir | # backslash-escaped $jaildir | ||||||
| sjaildir="$(echo ${jaildir} | sed 's#/#\\/#g')" | sjaildir="$(echo ${jaildir} | sed 's#/#\\/#g')" | ||||||
| 
 | 
 | ||||||
| jls_output="$(jls | grep "[ ^I]${sjaildir}\/${name}\$")" || true | jls_output="$(jls | grep "[ 	]${sjaildir}\/${name}\$")" || true | ||||||
| 
 | 
 | ||||||
| if [ -n "${jls_output}" ]; then | if [ -n "${jls_output}" ]; then | ||||||
|    echo "STARTED" |    echo "STARTED" | ||||||
|  |  | ||||||
|  | @ -1,6 +1,6 @@ | ||||||
| #!/bin/sh | #!/bin/sh | ||||||
| # | # | ||||||
| # 2012 Jake Guffey (jake.guffey at eprotex.com) | # 2012,2014 Jake Guffey (jake.guffey at eprotex.com) | ||||||
| # | # | ||||||
| # This file is part of cdist. | # This file is part of cdist. | ||||||
| # | # | ||||||
|  | @ -104,6 +104,7 @@ stopJail() { | ||||||
| # Check $status before issuing command | # Check $status before issuing command | ||||||
|    if [ "$status" = "STARTED" ]; then |    if [ "$status" = "STARTED" ]; then | ||||||
|       echo "/etc/rc.d/jail stop ${name}" |       echo "/etc/rc.d/jail stop ${name}" | ||||||
|  |       echo "stop" >> "$__messages_out" | ||||||
|    fi |    fi | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
|  | @ -111,6 +112,7 @@ startJail() { | ||||||
| # Check $status before issuing command | # Check $status before issuing command | ||||||
|    if [ "$status" = "NOTSTART" ]; then |    if [ "$status" = "NOTSTART" ]; then | ||||||
|       echo "/etc/rc.d/jail start ${name}" |       echo "/etc/rc.d/jail start ${name}" | ||||||
|  |       echo "start" >> "$__messages_out" | ||||||
|    fi |    fi | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
|  | @ -162,6 +164,7 @@ EOF | ||||||
|          rm -f /etc/rc.conf.bak |          rm -f /etc/rc.conf.bak | ||||||
|       fi |       fi | ||||||
| EOF | EOF | ||||||
|  |    echo "delete" >> "$__messages_out" | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| createJail() { | createJail() { | ||||||
|  | @ -215,6 +218,7 @@ cat <<EOF | ||||||
|    fi |    fi | ||||||
| 
 | 
 | ||||||
| EOF | EOF | ||||||
|  |    echo "create" >> "$__messages_out" | ||||||
| 
 | 
 | ||||||
| # Create the ro+rw mountpoint entries in fstab | # Create the ro+rw mountpoint entries in fstab | ||||||
| cat <<EOF | cat <<EOF | ||||||
|  | @ -310,6 +314,7 @@ if [ "$onboot" = "yes" ]; then | ||||||
|       fi |       fi | ||||||
|       unset jail_list |       unset jail_list | ||||||
| EOF | EOF | ||||||
|  |    echo "onboot" >> "$__messages_out" | ||||||
| fi | fi | ||||||
| 
 | 
 | ||||||
| # Add the normal entries into the jail's rc.conf | # Add the normal entries into the jail's rc.conf | ||||||
|  |  | ||||||
|  | @ -67,6 +67,19 @@ be removed then re-added with the correct IP address/netmask or the appropriate | ||||||
| line (jail_<name>_ip="...") modified within rc.conf through some alternate | line (jail_<name>_ip="...") modified within rc.conf through some alternate | ||||||
| means. | means. | ||||||
| 
 | 
 | ||||||
|  | MESSAGES | ||||||
|  | -------- | ||||||
|  | start:: | ||||||
|  |    The jail was started | ||||||
|  | stop:: | ||||||
|  |    The jail was stopped | ||||||
|  | create: | ||||||
|  |    The jail was created | ||||||
|  | delete:: | ||||||
|  |    The jail was deleted | ||||||
|  | onboot:: | ||||||
|  |    The jail was configured to start on boot | ||||||
|  | 
 | ||||||
| EXAMPLES | EXAMPLES | ||||||
| -------- | -------- | ||||||
| 
 | 
 | ||||||
|  |  | ||||||
|  | @ -1,6 +1,7 @@ | ||||||
| #!/bin/sh | #!/bin/sh | ||||||
| # | # | ||||||
| # 2011 Steven Armstrong (steven-cdist at armstrong.cc) | # 2011 Steven Armstrong (steven-cdist at armstrong.cc) | ||||||
|  | # 2014 Daniel Heule     (hda at sfs.biz) | ||||||
| # | # | ||||||
| # This file is part of cdist. | # This file is part of cdist. | ||||||
| # | # | ||||||
|  | @ -18,36 +19,85 @@ | ||||||
| # along with cdist. If not, see <http://www.gnu.org/licenses/>. | # along with cdist. If not, see <http://www.gnu.org/licenses/>. | ||||||
| # | # | ||||||
| 
 | 
 | ||||||
| key="$(cat "$__object/parameter/key" 2>/dev/null \ | export key="$(cat "$__object/parameter/key" 2>/dev/null \ | ||||||
|    || echo "$__object_id")" |    || echo "$__object_id")" | ||||||
| state="$(cat "$__object/parameter/state" 2>/dev/null \ | export state="$(cat "$__object/parameter/state")" | ||||||
|    || echo "present")" |  | ||||||
| file="$(cat "$__object/parameter/file")" |  | ||||||
| delimiter="$(cat "$__object/parameter/delimiter")" |  | ||||||
| value="$(cat "$__object/parameter/value" 2>/dev/null \ |  | ||||||
|    || echo "__CDIST_NOTSET__")" |  | ||||||
| 
 | 
 | ||||||
| case "$state" in | file="$(cat "$__object/parameter/file")" | ||||||
|    absent) | 
 | ||||||
|       if grep -q -E "^$key$delimiter+" "$file"; then | if [ ! -f "$file" ]; then | ||||||
|          # if the key exists, with whatever value, we will have to remove it |     echo "nosuchfile" | ||||||
|          # so report it as present |     exit | ||||||
|          echo present |  | ||||||
|       else |  | ||||||
|          # key does not exist |  | ||||||
|          echo absent |  | ||||||
| fi | fi | ||||||
|    ;; | 
 | ||||||
|    present) | export delimiter="$(cat "$__object/parameter/delimiter")" | ||||||
|       if grep -q -E "^$key$delimiter+$value$" "$file"; then | export value="$(cat "$__object/parameter/value" 2>/dev/null \ | ||||||
|          # key exists and value is same |    || echo "__CDIST_NOTSET__")" | ||||||
|          echo present | if [ -f "$__object/parameter/exact_delimiter" ]; then | ||||||
|       elif grep -q -E "^$key$delimiter+" "$file"; then |     export exact_delimiter=1 | ||||||
|          # key exists, but value is empty or different |  | ||||||
|          echo wrongvalue |  | ||||||
| else | else | ||||||
|          # key does not exist |     export exact_delimiter=0 | ||||||
|          echo absent |  | ||||||
| fi | fi | ||||||
|    ;; | 
 | ||||||
| esac | awk -f - "$file" <<"AWK_EOF" | ||||||
|  | BEGIN { | ||||||
|  |     state=ENVIRON["state"] | ||||||
|  |     key=ENVIRON["key"] | ||||||
|  |     delimiter=ENVIRON["delimiter"] | ||||||
|  |     value=ENVIRON["value"] | ||||||
|  |     exact_delimiter=ENVIRON["exact_delimiter"] | ||||||
|  |     found=0 | ||||||
|  | } | ||||||
|  | # enter the main loop | ||||||
|  | { | ||||||
|  |     i = index($0,key) | ||||||
|  |     if(i == 1) { | ||||||
|  |         delval = substr($0,length(key)+1) | ||||||
|  |         delpos = index(delval,delimiter) | ||||||
|  |         if(delpos == 0) { | ||||||
|  |             # in this case, the delimiter was not found | ||||||
|  |             next | ||||||
|  |         } | ||||||
|  |         if(delpos > 1) { | ||||||
|  |             spaces = substr(delval,1,delpos-1) | ||||||
|  |             sub(/[ \t]*/,"",spaces) | ||||||
|  |             if( length(spaces) > 0 ) { | ||||||
|  |                 # if there are not only spaces between key and delimiter, | ||||||
|  |                 # continue since we we are on the wrong line | ||||||
|  |                 next | ||||||
|  |             } | ||||||
|  |             if( exact_delimiter == 1) { | ||||||
|  |                 # we have key and delimiter, but since additional spaces are not alowed | ||||||
|  |                 # return wrongformat | ||||||
|  |                 found=1 | ||||||
|  |                 print "wrongformat" | ||||||
|  |                 exit | ||||||
|  |             } | ||||||
|  |         } | ||||||
|  |         found=1 | ||||||
|  |         if(state == "absent") { | ||||||
|  |             # on state absent, only the ocurance is relevant, so exit here | ||||||
|  |             print "present" | ||||||
|  |             exit | ||||||
|  |         } | ||||||
|  |         linevalue=substr(delval,delpos + length(delimiter)) | ||||||
|  |         if(exact_delimiter == 0){ | ||||||
|  |             #ok, now strip tabs and whitespaces at the beginning of the value | ||||||
|  |             sub(/[ \t]*/,"",linevalue) | ||||||
|  |         } | ||||||
|  |         # Key with separator found | ||||||
|  |         if(linevalue == value) { | ||||||
|  |             # exact match found, so state is present | ||||||
|  |             print "present" | ||||||
|  |         } | ||||||
|  |         else { | ||||||
|  |             print "wrongvalue" | ||||||
|  |         } | ||||||
|  |         exit | ||||||
|  |     } | ||||||
|  | } | ||||||
|  | END { | ||||||
|  |     if(found == 0) | ||||||
|  |         print "absent" | ||||||
|  | } | ||||||
|  | AWK_EOF | ||||||
|  |  | ||||||
							
								
								
									
										102
									
								
								cdist/conf/type/__key_value/files/remote_script.sh
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										102
									
								
								cdist/conf/type/__key_value/files/remote_script.sh
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,102 @@ | ||||||
|  | export key="$(cat "$__object/parameter/key" 2>/dev/null \ | ||||||
|  |    || echo "$__object_id")" | ||||||
|  | export state="$(cat "$__object/parameter/state")" | ||||||
|  | 
 | ||||||
|  | file="$(cat "$__object/parameter/file")" | ||||||
|  | 
 | ||||||
|  | export delimiter="$(cat "$__object/parameter/delimiter")" | ||||||
|  | export value="$(cat "$__object/parameter/value" 2>/dev/null \ | ||||||
|  |    || echo "__CDIST_NOTSET__")" | ||||||
|  | if [ -f "$__object/parameter/exact_delimiter" ]; then | ||||||
|  |     export exact_delimiter=1 | ||||||
|  | else | ||||||
|  |     export exact_delimiter=0 | ||||||
|  | fi | ||||||
|  | 
 | ||||||
|  | tmpfile=$(mktemp "${file}.cdist.XXXXXXXXXX") | ||||||
|  | # preserve ownership and permissions by copying existing file over tmpfile | ||||||
|  | if [ -f "$file" ]; then | ||||||
|  |     cp -p "$file" "$tmpfile" | ||||||
|  | else | ||||||
|  |     touch "$file" | ||||||
|  | fi | ||||||
|  | awk -f - "$file" >"$tmpfile" <<"AWK_EOF" | ||||||
|  | BEGIN { | ||||||
|  |     # import variables in a secure way .. | ||||||
|  |     state=ENVIRON["state"] | ||||||
|  |     key=ENVIRON["key"] | ||||||
|  |     delimiter=ENVIRON["delimiter"] | ||||||
|  |     value=ENVIRON["value"] | ||||||
|  |     comment=ENVIRON["comment"] | ||||||
|  |     exact_delimiter=ENVIRON["exact_delimiter"] | ||||||
|  |     inserted=0 | ||||||
|  |     lastline="" | ||||||
|  |     lastlinepopulated=0 | ||||||
|  |     line=key delimiter value | ||||||
|  | } | ||||||
|  | # enter the main loop | ||||||
|  | { | ||||||
|  |     # I dont use regex, this is by design, so we can match against every value without special meanings of chars ... | ||||||
|  |     i = index($0,key) | ||||||
|  |     if(i == 1) { | ||||||
|  |         delval = substr($0,length(key)+1) | ||||||
|  |         delpos = index(delval,delimiter) | ||||||
|  |         if(delpos > 1) { | ||||||
|  |             spaces = substr(delval,1,delpos-1) | ||||||
|  |             sub(/[ \t]*/,"",spaces) | ||||||
|  |             if( length(spaces) > 0 ) { | ||||||
|  |                 # if there are not only spaces between key and delimiter, | ||||||
|  |                 # continue since we we are on the wrong line | ||||||
|  |                 if(lastlinepopulated == 1) { | ||||||
|  |                     print lastline | ||||||
|  |                 } | ||||||
|  |                 lastline=$0 | ||||||
|  |                 lastlinepopulated=1 | ||||||
|  |                 next | ||||||
|  |             } | ||||||
|  |         } | ||||||
|  |         if(state == "absent") { | ||||||
|  |             if(lastline == comment) { | ||||||
|  |                 # if comment is present, clear lastlinepopulated flag | ||||||
|  |                 lastlinepopulated=0 | ||||||
|  |             } | ||||||
|  |             # if absent, simple yump over this line | ||||||
|  |             next | ||||||
|  |         } | ||||||
|  |         else { | ||||||
|  |             # if comment is present and not present in last line | ||||||
|  |             if (lastlinepopulated == 1) { | ||||||
|  |                 print lastline | ||||||
|  |                 if( comment != "" && lastline != comment) { | ||||||
|  |                     print comment | ||||||
|  |                 } | ||||||
|  |                 lastlinepopulated=0 | ||||||
|  |             } | ||||||
|  |             inserted=1 | ||||||
|  |             # state is present, so insert correct line here | ||||||
|  |             print line | ||||||
|  |             lastline=line | ||||||
|  |             next | ||||||
|  |         } | ||||||
|  |     } | ||||||
|  |     else { | ||||||
|  |         if(lastlinepopulated == 1) { | ||||||
|  |             print lastline | ||||||
|  |         } | ||||||
|  |         lastline=$0 | ||||||
|  |         lastlinepopulated=1 | ||||||
|  |     } | ||||||
|  | } | ||||||
|  | END { | ||||||
|  |     if(lastlinepopulated == 1) { | ||||||
|  |         print lastline | ||||||
|  |     } | ||||||
|  |     if(inserted == 0 && state == "present" ) { | ||||||
|  |         if(comment != "" && lastline != comment){ | ||||||
|  |             print comment | ||||||
|  |         } | ||||||
|  |         print line | ||||||
|  |     } | ||||||
|  | } | ||||||
|  | AWK_EOF | ||||||
|  | mv -f "$tmpfile" "$file" | ||||||
|  | @ -2,6 +2,7 @@ | ||||||
| # | # | ||||||
| # 2011 Steven Armstrong (steven-cdist at armstrong.cc) | # 2011 Steven Armstrong (steven-cdist at armstrong.cc) | ||||||
| # 2012-2014 Nico Schottelius (nico-cdist at schottelius.org) | # 2012-2014 Nico Schottelius (nico-cdist at schottelius.org) | ||||||
|  | # 2014 Daniel Heule     (hda at sfs.biz) | ||||||
| # | # | ||||||
| # This file is part of cdist. | # This file is part of cdist. | ||||||
| # | # | ||||||
|  | @ -19,55 +20,56 @@ | ||||||
| # along with cdist. If not, see <http://www.gnu.org/licenses/>. | # along with cdist. If not, see <http://www.gnu.org/licenses/>. | ||||||
| # | # | ||||||
| 
 | 
 | ||||||
| key="$__object_id" |  | ||||||
| [ -f "$__object/parameter/key" ] && key="$(cat "$__object/parameter/key")" |  | ||||||
| 
 | 
 | ||||||
| state_should="$(cat "$__object/parameter/state")" | state_should="$(cat "$__object/parameter/state")" | ||||||
| 
 |  | ||||||
| file="$(cat "$__object/parameter/file")" |  | ||||||
| delimiter="$(cat "$__object/parameter/delimiter")" |  | ||||||
| # escape double quotes, as that is what we use ourself below |  | ||||||
| value_escaped="$(cat "$__object/parameter/value" | sed -e "s/\([\"]\)/\\\\\1/g")" |  | ||||||
| state_is="$(cat "$__object/explorer/state")" | state_is="$(cat "$__object/explorer/state")" | ||||||
| 
 | 
 | ||||||
| [ "$state_is" = "$state_should" ] && exit 0 | if [  "$state_is" = "$state_should" ]; then | ||||||
|  |     exit 0 | ||||||
|  | fi | ||||||
| 
 | 
 | ||||||
|  | # here we check only if the states are valid, | ||||||
|  | # emmit messages and  | ||||||
|  | # let awk do the work ... | ||||||
| case "$state_should" in | case "$state_should" in | ||||||
|     absent) |     absent) | ||||||
|         # remove lines starting with key |  | ||||||
|         cat << DONE |  | ||||||
| tmpfile=\$(mktemp ${file}.cdist.XXXXXXXXXX) |  | ||||||
| # preserve ownership and permissions by copying existing file over tmpfile |  | ||||||
| cp -p "$file" "\$tmpfile" |  | ||||||
| sed '/^$key\($delimiter\+\)/d' "$file" > "\$tmpfile" |  | ||||||
| mv -f "\$tmpfile" "$file" |  | ||||||
| DONE |  | ||||||
|         echo "remove" >> "$__messages_out" |  | ||||||
|     ;; |  | ||||||
|     present) |  | ||||||
|         case "$state_is" in |         case "$state_is" in | ||||||
|             absent) |             absent|nosuchfile) | ||||||
|                 # add new key and value |                 # nothing to do | ||||||
|                 printf 'echo "%s%s%s" >> "%s"' "$key" "$delimiter" "$value_escaped" "$file" |  | ||||||
|                 echo "add" >> "$__messages_out" |  | ||||||
|             ;; |             ;; | ||||||
|             wrongvalue) |             wrongformat|wrongvalue|present) | ||||||
|                 # change exisiting value |                 echo "remove" >> "$__messages_out" | ||||||
|                 cat << DONE |  | ||||||
| tmpfile=\$(mktemp ${file}.cdist.XXXXXXXXXX) |  | ||||||
| # preserve ownership and permissions by copying existing file over tmpfile |  | ||||||
| cp -p "$file" "\$tmpfile" |  | ||||||
| sed "s|^$key\($delimiter\+\).*|$key\\1$value_escaped|" "$file" > "\$tmpfile" |  | ||||||
| mv -f "\$tmpfile" "$file" |  | ||||||
| DONE |  | ||||||
|                 echo "changevalue" >> "$__messages_out" |  | ||||||
|             ;; |             ;; | ||||||
|             *) |             *) | ||||||
|                 echo "Unknown explorer state: $state_is" >&2 |                 echo "Unknown explorer state: $state_is" >&2 | ||||||
|                 exit 1 |                 exit 1 | ||||||
|  |             ;; | ||||||
|  |         esac | ||||||
|  |     ;; | ||||||
|  |     present) | ||||||
|  |         case "$state_is" in | ||||||
|  |             nosuchfile) | ||||||
|  |                 echo "create" >> "$__messages_out" | ||||||
|  |             ;; | ||||||
|  |             absent) | ||||||
|  |                 echo "insert" >> "$__messages_out" | ||||||
|  |             ;; | ||||||
|  |             wrongformated|wrongvalue) | ||||||
|  |                 echo "change" >> "$__messages_out" | ||||||
|  |             ;; | ||||||
|  |             present) | ||||||
|  |                 # nothing to do | ||||||
|  |             ;; | ||||||
|  |             *) | ||||||
|  |                 echo "Unknown explorer state: $state_is" >&2 | ||||||
|  |                 exit 1 | ||||||
|  |             ;; | ||||||
|         esac |         esac | ||||||
|     ;; |     ;; | ||||||
|     *) |     *) | ||||||
|        echo "Unknown state: $state_should" >&2 |        echo "Unknown state: $state_should" >&2 | ||||||
|        exit 1 |        exit 1 | ||||||
|  |     ;; | ||||||
| esac | esac | ||||||
|  | 
 | ||||||
|  | cat "$__type/files/remote_script.sh" | ||||||
|  |  | ||||||
|  | @ -31,15 +31,30 @@ key:: | ||||||
|     The key to change. Defaults to object_id. |     The key to change. Defaults to object_id. | ||||||
| value:: | value:: | ||||||
|     The value for the key. Optional if state=absent, required otherwise. |     The value for the key. Optional if state=absent, required otherwise. | ||||||
|  | comment:: | ||||||
|  |     If supplied, the value will be inserted before the line with the key, | ||||||
|  |     but only if the key or value must be changed. | ||||||
|  |     You need to ensure yourself that the line is prefixed with the correct | ||||||
|  |     comment sign. (for example # or ; or wathever ..) | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | BOOLEAN PARAMETERS | ||||||
|  | ------------------ | ||||||
|  | exact_delimiter:: | ||||||
|  |     If supplied, treat additional whitespaces between key, delimiter and value | ||||||
|  |     as wrong value. | ||||||
|  | 
 | ||||||
| 
 | 
 | ||||||
| MESSAGES | MESSAGES | ||||||
| -------- | -------- | ||||||
| create:: | remove:: | ||||||
|  |     Removed existing key and value | ||||||
|  | insert:: | ||||||
|     Added key and value |     Added key and value | ||||||
| change:: | change:: | ||||||
|     Changed value of existing key |     Changed value of existing key | ||||||
| remove:: | create:: | ||||||
|     Removed existing key and value |     A new line was inserted in a new file | ||||||
| 
 | 
 | ||||||
| 
 | 
 | ||||||
| EXAMPLES | EXAMPLES | ||||||
|  | @ -55,13 +70,19 @@ __key_value my-fancy-id --file /etc/login.defs --key SYS_UID_MAX --value 666 \ | ||||||
| 
 | 
 | ||||||
| # Enable packet forwarding | # Enable packet forwarding | ||||||
| __key_value net.ipv4.ip_forward --file /etc/sysctl.conf --value 1 \ | __key_value net.ipv4.ip_forward --file /etc/sysctl.conf --value 1 \ | ||||||
|    --delimiter '=' |    --delimiter ' = ' --comment '# my linux kernel should act as a router' | ||||||
| 
 | 
 | ||||||
| # Remove existing key/value | # Remove existing key/value | ||||||
| __key_value LEGACY_KEY --file /etc/somefile --state absent --delimiter '='  | __key_value LEGACY_KEY --file /etc/somefile --state absent --delimiter '='  | ||||||
| -------------------------------------------------------------------------------- | -------------------------------------------------------------------------------- | ||||||
| 
 | 
 | ||||||
| 
 | 
 | ||||||
|  | MORE INFORMATION | ||||||
|  | ---------------- | ||||||
|  | This type try to handle as many values as possible, so it doesn't use regexes. | ||||||
|  | So you need to exactly specify the key and delimiter. Delimiter can be of any lenght. | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
| SEE ALSO | SEE ALSO | ||||||
| -------- | -------- | ||||||
| - cdist-type(7) | - cdist-type(7) | ||||||
|  |  | ||||||
							
								
								
									
										1
									
								
								cdist/conf/type/__key_value/parameter/boolean
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										1
									
								
								cdist/conf/type/__key_value/parameter/boolean
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1 @@ | ||||||
|  | exact_delimiter | ||||||
							
								
								
									
										1
									
								
								cdist/conf/type/__key_value/parameter/default/comment
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										1
									
								
								cdist/conf/type/__key_value/parameter/default/comment
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1 @@ | ||||||
|  | 
 | ||||||
|  | @ -1,3 +1,4 @@ | ||||||
| key | key | ||||||
| value | value | ||||||
| state | state | ||||||
|  | comment | ||||||
|  |  | ||||||
|  | @ -29,6 +29,9 @@ case "$os" in | ||||||
|         # Debian needs a seperate package |         # Debian needs a seperate package | ||||||
|         __package locales --state present |         __package locales --state present | ||||||
|     ;; |     ;; | ||||||
|  |     suse) | ||||||
|  |         : | ||||||
|  |     ;; | ||||||
|     *) |     *) | ||||||
|         echo "Sorry, do not know how to handle os: $os" >&2 |         echo "Sorry, do not know how to handle os: $os" >&2 | ||||||
|         echo "Please edit the type ${__type##*/} to fix this." >&2 |         echo "Please edit the type ${__type##*/} to fix this." >&2 | ||||||
|  |  | ||||||
|  | @ -1,6 +1,6 @@ | ||||||
| #!/bin/sh | #!/bin/sh | ||||||
| # | # | ||||||
| # 2011 Nico Schottelius (nico-cdist at schottelius.org) | # 2011-2014 Nico Schottelius (nico-cdist at schottelius.org) | ||||||
| # | # | ||||||
| # This file is part of cdist. | # This file is part of cdist. | ||||||
| # | # | ||||||
|  | @ -27,6 +27,14 @@ else | ||||||
|    name="$__object_id" |    name="$__object_id" | ||||||
| fi | fi | ||||||
| 
 | 
 | ||||||
|  | # Support installing from an URL | ||||||
|  | if [ -f "$__object/parameter/url" ]; then | ||||||
|  |    install_name="$(cat "$__object/parameter/url")" | ||||||
|  | else | ||||||
|  |    install_name="$name" | ||||||
|  | fi | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
| state_should="$(cat "$__object/parameter/state")" | state_should="$(cat "$__object/parameter/state")" | ||||||
| 
 | 
 | ||||||
| if grep -q -E "(centos|redhat|amazon)" "$__global/explorer/os"; then | if grep -q -E "(centos|redhat|amazon)" "$__global/explorer/os"; then | ||||||
|  | @ -47,7 +55,7 @@ fi | ||||||
| 
 | 
 | ||||||
| case "$state_should" in | case "$state_should" in | ||||||
|     present) |     present) | ||||||
|         echo yum $opts install \"$name\" |         echo yum $opts install \"$install_name\" | ||||||
|     ;; |     ;; | ||||||
|     absent) |     absent) | ||||||
|         echo yum $opts remove \"$name\" |         echo yum $opts remove \"$name\" | ||||||
|  |  | ||||||
|  | @ -27,6 +27,8 @@ name:: | ||||||
| 
 | 
 | ||||||
| state:: | state:: | ||||||
|     Either "present" or "absent", defaults to "present" |     Either "present" or "absent", defaults to "present" | ||||||
|  | url:: | ||||||
|  |     URL to use for the package | ||||||
| 
 | 
 | ||||||
| 
 | 
 | ||||||
| EXAMPLES | EXAMPLES | ||||||
|  | @ -41,6 +43,9 @@ __package_yum python --state present --name python2 | ||||||
| 
 | 
 | ||||||
| # Remove obsolete package | # Remove obsolete package | ||||||
| __package_yum puppet --state absent | __package_yum puppet --state absent | ||||||
|  | 
 | ||||||
|  | __package epel-release-6-8 \ | ||||||
|  |     --url http://mirror.switch.ch/ftp/mirror/epel/6/i386/epel-release-6-8.noarch.rpm | ||||||
| -------------------------------------------------------------------------------- | -------------------------------------------------------------------------------- | ||||||
| 
 | 
 | ||||||
| 
 | 
 | ||||||
|  |  | ||||||
|  | @ -1,2 +1,3 @@ | ||||||
| name | name | ||||||
| state | state | ||||||
|  | url | ||||||
|  |  | ||||||
|  | @ -27,13 +27,18 @@ os=$(cat "$__global/explorer/os") | ||||||
|          |          | ||||||
| case "$os" in | case "$os" in | ||||||
|     archlinux|debian|ubuntu) |     archlinux|debian|ubuntu) | ||||||
|         __package tzdata --state present |         package=tzdata | ||||||
|         require="__package/tzdata" __link /etc/localtime    \ |     ;; | ||||||
|             --source "/usr/share/zoneinfo/${timezone}"      \ |     suse) | ||||||
|             --type symbolic |         package=timezone | ||||||
|     ;; |     ;; | ||||||
|     *) |     *) | ||||||
|         echo "Unsupported OS $os" >&2 |         echo "Unsupported OS $os" >&2 | ||||||
|         exit 1 |         exit 1 | ||||||
|     ;; |     ;; | ||||||
| esac | esac | ||||||
|  | 
 | ||||||
|  | __package "$package" --state present | ||||||
|  | require="__package/$package" __link /etc/localtime    \ | ||||||
|  |     --source "/usr/share/zoneinfo/${timezone}"      \ | ||||||
|  |     --type symbolic | ||||||
|  |  | ||||||
							
								
								
									
										61
									
								
								cdist/conf/type/__yum_repo/files/repo.template
									
										
									
									
									
										Executable file
									
								
							
							
						
						
									
										61
									
								
								cdist/conf/type/__yum_repo/files/repo.template
									
										
									
									
									
										Executable file
									
								
							|  | @ -0,0 +1,61 @@ | ||||||
|  | #!/bin/sh | ||||||
|  | set -u | ||||||
|  | cat << DONE | ||||||
|  | # Created by cdist ${__type##*/} | ||||||
|  | # Do not change. Changes will be overwritten. | ||||||
|  | # | ||||||
|  | [$repo_name] | ||||||
|  | DONE | ||||||
|  | # single value properties | ||||||
|  | single_value='name | ||||||
|  | metalink | ||||||
|  | mirrorlist | ||||||
|  | gpgcakey | ||||||
|  | gpgcheck  | ||||||
|  | exclude | ||||||
|  | includepkgs | ||||||
|  | failovermethod | ||||||
|  | timeout | ||||||
|  | http_caching | ||||||
|  | retries | ||||||
|  | throttle | ||||||
|  | bandwidth | ||||||
|  | sslcacert | ||||||
|  | sslverify | ||||||
|  | sslclientcert | ||||||
|  | sslclientkey | ||||||
|  | ssl_check_cert_permissions | ||||||
|  | metadata_expire | ||||||
|  | mirrorlist_expire | ||||||
|  | proxy | ||||||
|  | proxy_username | ||||||
|  | proxy_password | ||||||
|  | username | ||||||
|  | password | ||||||
|  | cost' | ||||||
|  | for key in $single_value; do | ||||||
|  |    if [ -f "$__object/parameter/$key" ]; then | ||||||
|  |       printf '%s=%s\n' "$key" "$(cat "$__object/parameter/$key")" | ||||||
|  |    fi | ||||||
|  | done | ||||||
|  | # multi value properties | ||||||
|  | for key in baseurl gpgkey; do | ||||||
|  |    if [ -f "$__object/parameter/$key" ]; then | ||||||
|  |       printf '%s=' "$key" | ||||||
|  |       prefix='' | ||||||
|  |       while read line; do | ||||||
|  |          printf '%s%s\n' "$prefix" "$line" | ||||||
|  |          prefix='   ' | ||||||
|  |       done < "$__object/parameter/$key" | ||||||
|  |    fi | ||||||
|  | done | ||||||
|  | # boolean properties | ||||||
|  | for key in enabled repo_gpgcheck keepalive skip_if_unavailable; do | ||||||
|  |    if [ -f "$__object/parameter/$key" ]; then | ||||||
|  |       printf '%s=1\n' "$key" | ||||||
|  |    fi | ||||||
|  | done | ||||||
|  | # special cases | ||||||
|  | if [ -f "$__object/parameter/disablegroups" ]; then | ||||||
|  |    printf 'enablegroups=0\n' | ||||||
|  | fi | ||||||
							
								
								
									
										91
									
								
								cdist/conf/type/__yum_repo/man.text
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										91
									
								
								cdist/conf/type/__yum_repo/man.text
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,91 @@ | ||||||
|  | cdist-type__yum_repo(7) | ||||||
|  | ======================= | ||||||
|  | Steven Armstrong <steven-cdist--@--armstrong.cc> | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | NAME | ||||||
|  | ---- | ||||||
|  | cdist-type__yum_repo - manage yum repositories | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | DESCRIPTION | ||||||
|  | ----------- | ||||||
|  | For all undocumented parameters see yum.conf(5). | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | REQUIRED PARAMETERS | ||||||
|  | ------------------- | ||||||
|  | None. | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | OPTIONAL PARAMETERS | ||||||
|  | ------------------- | ||||||
|  | state:: | ||||||
|  |    'present' or 'absent'. Defaults to 'present' | ||||||
|  | repositoryid:: | ||||||
|  |    Defaults to __object_id. | ||||||
|  | name:: | ||||||
|  | baseurl:: | ||||||
|  |    Can be specified multiple times. | ||||||
|  | metalink:: | ||||||
|  | mirrorlist:: | ||||||
|  | gpgkey:: | ||||||
|  |    Can be specified multiple times. | ||||||
|  | gpgcakey:: | ||||||
|  | gpgcheck:: | ||||||
|  | exclude:: | ||||||
|  | includepkgs:: | ||||||
|  | failovermethod:: | ||||||
|  | timeout:: | ||||||
|  | http_caching:: | ||||||
|  | retries:: | ||||||
|  | throttle:: | ||||||
|  | bandwidth:: | ||||||
|  | sslcacert:: | ||||||
|  | sslverify:: | ||||||
|  | sslclientcert:: | ||||||
|  | sslclientkey:: | ||||||
|  | ssl_check_cert_permissions:: | ||||||
|  | metadata_expire:: | ||||||
|  | mirrorlist_expire:: | ||||||
|  | proxy:: | ||||||
|  | proxy_username:: | ||||||
|  | proxy_password:: | ||||||
|  | username:: | ||||||
|  | password:: | ||||||
|  | cost:: | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | BOOLEAN PARAMETERS | ||||||
|  | ------------------ | ||||||
|  | enabled:: | ||||||
|  | repo_gpgcheck:: | ||||||
|  | disablegroups:: | ||||||
|  |    ! enablegroups | ||||||
|  | keepalive:: | ||||||
|  | skip_if_unavailable:: | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | EXAMPLES | ||||||
|  | -------- | ||||||
|  | 
 | ||||||
|  | -------------------------------------------------------------------------------- | ||||||
|  | __yum_repo epel \ | ||||||
|  |    --name 'Extra Packages for Enterprise Linux 6 - $basearch' \ | ||||||
|  |    --mirrorlist 'https://mirrors.fedoraproject.org/metalink?repo=epel-$releasever&arch=$basearch' \ | ||||||
|  |    --failovermethod priority \ | ||||||
|  |    --enabled \ | ||||||
|  |    --gpgcheck 1 \ | ||||||
|  |    --gpgkey https://fedoraproject.org/static/0608B895.txt | ||||||
|  | -------------------------------------------------------------------------------- | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | SEE ALSO | ||||||
|  | -------- | ||||||
|  | - cdist-type(7) | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | COPYING | ||||||
|  | ------- | ||||||
|  | Copyright \(C) 2014 Steven Armstrong. Free use of this software is | ||||||
|  | granted under the terms of the GNU General Public License version 3 (GPLv3). | ||||||
							
								
								
									
										40
									
								
								cdist/conf/type/__yum_repo/manifest
									
										
									
									
									
										Executable file
									
								
							
							
						
						
									
										40
									
								
								cdist/conf/type/__yum_repo/manifest
									
										
									
									
									
										Executable file
									
								
							|  | @ -0,0 +1,40 @@ | ||||||
|  | #!/bin/sh | ||||||
|  | # | ||||||
|  | # 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/>. | ||||||
|  | # | ||||||
|  | 
 | ||||||
|  | os=$(cat "$__global/explorer/os") | ||||||
|  | state="$(cat "$__object/parameter/state")" | ||||||
|  | 
 | ||||||
|  | case "$os" in | ||||||
|  |    centos) | ||||||
|  |       repo_name="$__object_id" | ||||||
|  |       export repo_name | ||||||
|  |       repo_file="/etc/yum.repos.d/${repo_name}.repo" | ||||||
|  |       "$__type/files/repo.template" | \ | ||||||
|  |          __file "$repo_file" \ | ||||||
|  |             --owner root --group root --mode 644 \ | ||||||
|  |             --state "$state" \ | ||||||
|  |             --source - | ||||||
|  |    ;; | ||||||
|  |    *) | ||||||
|  |       echo "Your operating system ($os) is currently not supported by this type (${__type##*/})." >&2 | ||||||
|  |       echo "Please contribute an implementation for it if you can." >&2 | ||||||
|  |       exit 1 | ||||||
|  |    ;; | ||||||
|  | esac | ||||||
							
								
								
									
										3
									
								
								cdist/conf/type/__yum_repo/notes
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										3
									
								
								cdist/conf/type/__yum_repo/notes
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,3 @@ | ||||||
|  | https://access.redhat.com/site/documentation/en-US/Red_Hat_Enterprise_Linux/6/html/Deployment_Guide/sec-Configuring_Yum_and_Yum_Repositories.html | ||||||
|  | https://access.redhat.com/site/documentation/en-US/Red_Hat_Enterprise_Linux_OpenStack_Platform/2/html/Getting_Started_Guide/sect-Configuring_Software_Repositories.html | ||||||
|  | http://docs.puppetlabs.com/references/latest/type.html#yumrepo | ||||||
							
								
								
									
										5
									
								
								cdist/conf/type/__yum_repo/parameter/boolean
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										5
									
								
								cdist/conf/type/__yum_repo/parameter/boolean
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,5 @@ | ||||||
|  | enabled | ||||||
|  | repo_gpgcheck | ||||||
|  | disablegroups | ||||||
|  | keepalive | ||||||
|  | skip_if_unavailable | ||||||
							
								
								
									
										1
									
								
								cdist/conf/type/__yum_repo/parameter/default/state
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										1
									
								
								cdist/conf/type/__yum_repo/parameter/default/state
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1 @@ | ||||||
|  | present | ||||||
							
								
								
									
										27
									
								
								cdist/conf/type/__yum_repo/parameter/optional
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										27
									
								
								cdist/conf/type/__yum_repo/parameter/optional
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,27 @@ | ||||||
|  | bandwidth | ||||||
|  | cost | ||||||
|  | exclude | ||||||
|  | failovermethod | ||||||
|  | gpgcakey | ||||||
|  | gpgcheck | ||||||
|  | http_caching | ||||||
|  | includepkgs | ||||||
|  | metadata_expire | ||||||
|  | mirrorlist | ||||||
|  | mirrorlist_expire | ||||||
|  | name | ||||||
|  | password | ||||||
|  | proxy | ||||||
|  | proxy_password | ||||||
|  | proxy_username | ||||||
|  | repositoryid | ||||||
|  | retries | ||||||
|  | sslcacert | ||||||
|  | ssl_check_cert_permissions | ||||||
|  | sslclientcert | ||||||
|  | sslclientkey | ||||||
|  | sslverify | ||||||
|  | state | ||||||
|  | throttle | ||||||
|  | timeout | ||||||
|  | username | ||||||
							
								
								
									
										2
									
								
								cdist/conf/type/__yum_repo/parameter/optional_multiple
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										2
									
								
								cdist/conf/type/__yum_repo/parameter/optional_multiple
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,2 @@ | ||||||
|  | baseurl | ||||||
|  | gpgkey | ||||||
|  | @ -18,11 +18,11 @@ | ||||||
| # along with cdist. If not, see <http://www.gnu.org/licenses/>. | # along with cdist. If not, see <http://www.gnu.org/licenses/>. | ||||||
| # | # | ||||||
| # | # | ||||||
| # Retrieve the id from the repo with the uri from parameter repo_uri  - parsed zypper output | # Retrieve the id from the repo with the uri from parameter uri  - parsed zypper output | ||||||
| # | # | ||||||
| # | # | ||||||
| if [ -f "$__object/parameter/repo_uri" ]; then | if [ -f "$__object/parameter/uri" ]; then | ||||||
|    uri="$(cat "$__object/parameter/repo_uri")" |    uri="$(cat "$__object/parameter/uri")" | ||||||
| else | else | ||||||
|    uri="$__object_id" |    uri="$__object_id" | ||||||
| fi | fi | ||||||
|  |  | ||||||
|  | @ -25,7 +25,7 @@ | ||||||
| #exec >&2 | #exec >&2 | ||||||
| #set -x | #set -x | ||||||
| 
 | 
 | ||||||
| zypper_def_opts=" -q " | zypper_def_opts=" -q --non-interactive --gpg-auto-import-keys " | ||||||
| 
 | 
 | ||||||
| if [ -f "$__object/parameter/repo_desc" ]; then | if [ -f "$__object/parameter/repo_desc" ]; then | ||||||
|    desc="$(cat "$__object/parameter/repo_desc")" |    desc="$(cat "$__object/parameter/repo_desc")" | ||||||
|  | @ -33,8 +33,8 @@ else | ||||||
|    desc="$__object_id" |    desc="$__object_id" | ||||||
| fi | fi | ||||||
| 
 | 
 | ||||||
| if [ -f "$__object/parameter/repo_uri" ]; then | if [ -f "$__object/parameter/uri" ]; then | ||||||
|    uri="$(cat "$__object/parameter/repo_uri")" |    uri="$(cat "$__object/parameter/uri")" | ||||||
| else | else | ||||||
|    uri="$__object_id" |    uri="$__object_id" | ||||||
| fi | fi | ||||||
|  | @ -65,7 +65,7 @@ fi | ||||||
| case "$state" in | case "$state" in | ||||||
|    present) |    present) | ||||||
|          if [ -z "$desc" ] || [ -z "$uri" ]; then |          if [ -z "$desc" ] || [ -z "$uri" ]; then | ||||||
|              echo "parameter repo_desc and repo_uri for $state needed" >&2 |              echo "parameter repo_desc and uri for $state needed" >&2 | ||||||
|              exit 4 |              exit 4 | ||||||
|          fi |          fi | ||||||
|          if [ -z "$repo_id" ]; then |          if [ -z "$repo_id" ]; then | ||||||
|  |  | ||||||
|  | @ -22,13 +22,13 @@ OPTIONAL PARAMETERS | ||||||
| ------------------- | ------------------- | ||||||
| state:: | state:: | ||||||
|     Either "present" or "absent" or "enabled" or "disabled", defaults to "present" +  |     Either "present" or "absent" or "enabled" or "disabled", defaults to "present" +  | ||||||
|     #present#  - make sure that the repo is aviable, needs repo_uri and repo_desc +  |     #present#  - make sure that the repo is aviable, needs uri and repo_desc +  | ||||||
|          for all following states, the repo can be searched via repo_id or repo_uri +  |          for all following states, the repo can be searched via repo_id or uri +  | ||||||
|     #absent#   - drop the repo if found +  |     #absent#   - drop the repo if found +  | ||||||
|     #enabled#  - a repo can have state disabled if installed via zypper service (ris), in this case, you can enable the repo +  |     #enabled#  - a repo can have state disabled if installed via zypper service (ris), in this case, you can enable the repo +  | ||||||
|     #disabled# - instead of absent (drop), a repo can also set to disabled, wich makes it inaccessible +  |     #disabled# - instead of absent (drop), a repo can also set to disabled, wich makes it inaccessible +  | ||||||
| 
 | 
 | ||||||
| repo_uri:: | uri:: | ||||||
|     If supplied, use the uri and not the object id as repo uri. |     If supplied, use the uri and not the object id as repo uri. | ||||||
| 
 | 
 | ||||||
| repo_desc:: | repo_desc:: | ||||||
|  | @ -43,10 +43,10 @@ EXAMPLES | ||||||
| 
 | 
 | ||||||
| -------------------------------------------------------------------------------- | -------------------------------------------------------------------------------- | ||||||
| # Ensure testrepo in installed | # Ensure testrepo in installed | ||||||
| __zypper_repo testrepo --state present --repo_uri http://url.to.your.repo/with/path | __zypper_repo testrepo --state present --uri http://url.to.your.repo/with/path | ||||||
| 
 | 
 | ||||||
| # Drop repo by repo uri | # Drop repo by repo uri | ||||||
| __zypper_repo testrepo --state absent --repo_uri http://url.to.your.repo/with/path | __zypper_repo testrepo --state absent --uri http://url.to.your.repo/with/path | ||||||
| 
 | 
 | ||||||
| # Drop repo by id number (attention: repos are always numbered from 1 to max) | # Drop repo by id number (attention: repos are always numbered from 1 to max) | ||||||
| __zypper_repo testrepo --state absent --repo_id 1 | __zypper_repo testrepo --state absent --repo_id 1 | ||||||
|  | @ -55,7 +55,7 @@ __zypper_repo testrepo --state absent --repo_id 1 | ||||||
| __zypper_repo testrepo2 --state enabled --repo_id 2 | __zypper_repo testrepo2 --state enabled --repo_id 2 | ||||||
| 
 | 
 | ||||||
| # enable repo by uri | # enable repo by uri | ||||||
| __zypper_repo testrepo3 --state enabled --repo_uri http://url.to.your.repo/with/path | __zypper_repo testrepo3 --state enabled --uri http://url.to.your.repo/with/path | ||||||
| 
 | 
 | ||||||
| # disable a repo works like enabling it | # disable a repo works like enabling it | ||||||
| __zypper_repo testrepo4 --state disabled --repo_id 4 | __zypper_repo testrepo4 --state disabled --repo_id 4 | ||||||
|  |  | ||||||
|  | @ -1,4 +1,4 @@ | ||||||
| state | state | ||||||
| repo_uri | uri | ||||||
| repo_desc | repo_desc | ||||||
| repo_id | repo_id | ||||||
|  |  | ||||||
|  | @ -20,8 +20,8 @@ | ||||||
| # | # | ||||||
| # Manage services with Zypper (mostly suse) | # Manage services with Zypper (mostly suse) | ||||||
| # | # | ||||||
| if [ -f "$__object/parameter/service_uri" ]; then | if [ -f "$__object/parameter/uri" ]; then | ||||||
|    uri="$(cat "$__object/parameter/service_uri")" |    uri="$(cat "$__object/parameter/uri")" | ||||||
| else | else | ||||||
|    uri="/$__object_id" |    uri="/$__object_id" | ||||||
| fi | fi | ||||||
|  |  | ||||||
|  | @ -20,8 +20,8 @@ | ||||||
| # | # | ||||||
| # Manage services with Zypper (mostly suse) | # Manage services with Zypper (mostly suse) | ||||||
| # | # | ||||||
| if [ -f "$__object/parameter/service_uri" ]; then | if [ -f "$__object/parameter/uri" ]; then | ||||||
|    uri="$(cat "$__object/parameter/service_uri")" |    uri="$(cat "$__object/parameter/uri")" | ||||||
| else | else | ||||||
|    uri="/$__object_id" |    uri="/$__object_id" | ||||||
| fi | fi | ||||||
|  |  | ||||||
|  | @ -25,7 +25,7 @@ | ||||||
| #exec >&2 | #exec >&2 | ||||||
| #set -x | #set -x | ||||||
| 
 | 
 | ||||||
| zypper_def_opts=" -q " | zypper_def_opts=" -q --non-interactive --gpg-auto-import-keys " | ||||||
| 
 | 
 | ||||||
| if [ -f "$__object/parameter/service_desc" ]; then | if [ -f "$__object/parameter/service_desc" ]; then | ||||||
|    desc="$(cat "$__object/parameter/service_desc")" |    desc="$(cat "$__object/parameter/service_desc")" | ||||||
|  | @ -33,8 +33,8 @@ else | ||||||
|    desc="$__object_id" |    desc="$__object_id" | ||||||
| fi | fi | ||||||
| 
 | 
 | ||||||
| if [ -f "$__object/parameter/service_uri" ]; then | if [ -f "$__object/parameter/uri" ]; then | ||||||
|    uri="$(cat "$__object/parameter/service_uri")" |    uri="$(cat "$__object/parameter/uri")" | ||||||
| else | else | ||||||
|    uri="$__object_id" |    uri="$__object_id" | ||||||
| fi | fi | ||||||
|  | @ -73,10 +73,12 @@ case "$state_should" in | ||||||
|    present) |    present) | ||||||
|          echo zypper $zypper_def_opts addservice -t "$stype" "$uri" \"$desc\" |          echo zypper $zypper_def_opts addservice -t "$stype" "$uri" \"$desc\" | ||||||
|          echo zypper $zypper_def_opts refs |          echo zypper $zypper_def_opts refs | ||||||
|  |          echo zypper $zypper_def_opts ref | ||||||
|    ;; |    ;; | ||||||
|    absent) |    absent) | ||||||
|          echo zypper $zypper_def_opts removeservice "$service_id" |          echo zypper $zypper_def_opts removeservice "$service_id" | ||||||
|          echo zypper $zypper_def_opts refs |          echo zypper $zypper_def_opts refs | ||||||
|  |          echo zypper $zypper_def_opts ref | ||||||
|    ;; |    ;; | ||||||
|    *) |    *) | ||||||
|       echo "Unknown state: $state_should" >&2 |       echo "Unknown state: $state_should" >&2 | ||||||
|  |  | ||||||
|  | @ -15,7 +15,7 @@ zypper is usually used on SuSE systems to manage services. | ||||||
| 
 | 
 | ||||||
| REQUIRED PARAMETERS | REQUIRED PARAMETERS | ||||||
| ------------------- | ------------------- | ||||||
| service_uri:: | uri:: | ||||||
|     Uri of the service |     Uri of the service | ||||||
| 
 | 
 | ||||||
| 
 | 
 | ||||||
|  | @ -45,13 +45,13 @@ EXAMPLES | ||||||
| 
 | 
 | ||||||
| -------------------------------------------------------------------------------- | -------------------------------------------------------------------------------- | ||||||
| # Ensure that internal SLES11 SP3 RIS is in installed and all other services and repos are discarded | # Ensure that internal SLES11 SP3 RIS is in installed and all other services and repos are discarded | ||||||
| __zypper_service INTERNAL_SLES11_SP3 --service_desc "Internal SLES11 SP3 RIS" --service_uri "http://path/to/your/ris/dir" --remove-all-other-services --remove-all-repos | __zypper_service INTERNAL_SLES11_SP3 --service_desc "Internal SLES11 SP3 RIS" --uri "http://path/to/your/ris/dir" --remove-all-other-services --remove-all-repos | ||||||
| 
 | 
 | ||||||
| # Ensure that internal SLES11 SP3 RIS is in installed, no changes to ohter services or repos | # Ensure that internal SLES11 SP3 RIS is in installed, no changes to ohter services or repos | ||||||
| __zypper_service INTERNAL_SLES11_SP3 --service_desc "Internal SLES11 SP3 RIS" --service_uri "http://path/to/your/ris/dir" | __zypper_service INTERNAL_SLES11_SP3 --service_desc "Internal SLES11 SP3 RIS" --uri "http://path/to/your/ris/dir" | ||||||
| 
 | 
 | ||||||
| # Drop service by uri, no changes to ohter services or repos | # Drop service by uri, no changes to ohter services or repos | ||||||
| __zypper_service INTERNAL_SLES11_SP3 --state absent --service_uri "http://path/to/your/ris/dir" | __zypper_service INTERNAL_SLES11_SP3 --state absent --uri "http://path/to/your/ris/dir" | ||||||
| 
 | 
 | ||||||
| -------------------------------------------------------------------------------- | -------------------------------------------------------------------------------- | ||||||
| 
 | 
 | ||||||
|  |  | ||||||
|  | @ -25,10 +25,9 @@ | ||||||
| #exec >&2 | #exec >&2 | ||||||
| #set -x | #set -x | ||||||
| 
 | 
 | ||||||
| zypper_def_opts=" -q " |  | ||||||
| 
 | 
 | ||||||
| if [ -f "$__object/parameter/service_uri" ]; then | if [ -f "$__object/parameter/uri" ]; then | ||||||
|    uri="$(cat "$__object/parameter/service_uri")" |    uri="$(cat "$__object/parameter/uri")" | ||||||
| else | else | ||||||
|    uri="$__object_id" |    uri="$__object_id" | ||||||
| fi | fi | ||||||
|  |  | ||||||
|  | @ -1 +1 @@ | ||||||
| service_uri | uri | ||||||
|  |  | ||||||
|  | @ -143,6 +143,9 @@ class DirectoryDict(collections.MutableMapping): | ||||||
|                         fd.write(str(v) + '\n') |                         fd.write(str(v) + '\n') | ||||||
|                 else: |                 else: | ||||||
|                     fd.write(str(value)) |                     fd.write(str(value)) | ||||||
|  |                     # ensure file ends with a single newline | ||||||
|  |                     if value and value[-1] != '\n': | ||||||
|  |                         fd.write('\n') | ||||||
|         except EnvironmentError as e: |         except EnvironmentError as e: | ||||||
|             raise cdist.Error(str(e)) |             raise cdist.Error(str(e)) | ||||||
| 
 | 
 | ||||||
|  | @ -281,7 +284,7 @@ class FileStringProperty(FileBasedProperty): | ||||||
|         value = "" |         value = "" | ||||||
|         try: |         try: | ||||||
|             with open(path, "r") as fd: |             with open(path, "r") as fd: | ||||||
|                 value = fd.read() |                 value = fd.read().rstrip('\n') | ||||||
|         except EnvironmentError: |         except EnvironmentError: | ||||||
|             pass |             pass | ||||||
|         return value |         return value | ||||||
|  | @ -292,6 +295,9 @@ class FileStringProperty(FileBasedProperty): | ||||||
|             try: |             try: | ||||||
|                 with open(path, "w") as fd: |                 with open(path, "w") as fd: | ||||||
|                     fd.write(str(value)) |                     fd.write(str(value)) | ||||||
|  |                     # ensure file ends with a single newline | ||||||
|  |                     if value[-1] != '\n': | ||||||
|  |                         fd.write('\n') | ||||||
|             except EnvironmentError as e: |             except EnvironmentError as e: | ||||||
|                 raise cdist.Error(str(e)) |                 raise cdist.Error(str(e)) | ||||||
|         else: |         else: | ||||||
|  |  | ||||||
|  | @ -12,8 +12,31 @@ Changelog | ||||||
| 	* Core: Integrate initial preos support | 	* Core: Integrate initial preos support | ||||||
| 
 | 
 | ||||||
| 
 | 
 | ||||||
| 3.1.2: | 3.1.6: | ||||||
|  | 	* Type __package_yum: Support retrieving package via URL | ||||||
|  | 	* Type __hostname: Support SuSE and have CentOS use sysconfig value | ||||||
|  | 	* Type __locale: Support SuSE | ||||||
|  | 	* Type __timezone: Support SuSE | ||||||
|  | 	* Type __file: Support MacOS X (Manuel Hutter) | ||||||
|  | 
 | ||||||
|  | 3.1.5: 2014-05-05 | ||||||
|  | 	* Type __zypper_repo: Automatically import gpg keys (Daniel Heule) | ||||||
|  | 	* Type __zypper_service: Automatically import gpg keys (Daniel Heule) | ||||||
|  | 
 | ||||||
|  | 3.1.4: 2014-05-04 | ||||||
|  | 	* Core: Ensure all created files end in \n (Steven Armstrong) | ||||||
|  | 	* Documentation: Cleanup up, added HTML links (Tomas Pospisek) | ||||||
|  | 	* Explorer interfaces: Remove test output (Daniel Heule) | ||||||
|  | 	* Type __jail: Add messaging support (Jake Guffey) | ||||||
|  | 	 | ||||||
|  | 3.1.3: 2014-04-29 | ||||||
|  | 	* New Type: __yum_repo (Steven Armstrong) | ||||||
|  | 	* Type __hostname: Add support for CentOS | ||||||
|  | 
 | ||||||
|  | 3.1.2: 2014-04-12 | ||||||
|  | 	* Documentation: Add missing environment variables to reference | ||||||
| 	* Type __qemu_img: size is optional, if state is not present | 	* Type __qemu_img: size is optional, if state is not present | ||||||
|  | 	* Type __key_value: Rewrite using awk (Daniel Heule) | ||||||
| 	* New Type: __dog_vdi | 	* New Type: __dog_vdi | ||||||
| 
 | 
 | ||||||
| 3.1.1: 2014-03-26 | 3.1.1: 2014-03-26 | ||||||
|  |  | ||||||
|  | @ -1,6 +1,6 @@ | ||||||
| #!/bin/sh | #!/bin/sh | ||||||
| # | # | ||||||
| # 2010-2013 Nico Schottelius (nico-cdist at schottelius.org) | # 2010-2014 Nico Schottelius (nico-cdist at schottelius.org) | ||||||
| # 2014      Daniel Heule     (hda at sfs.biz) | # 2014      Daniel Heule     (hda at sfs.biz) | ||||||
| # | # | ||||||
| # This file is part of cdist. | # This file is part of cdist. | ||||||
|  | @ -237,6 +237,12 @@ The following environment variables influence the behaviour of cdist: | ||||||
| require:: | require:: | ||||||
|     Setup dependencies between objects (see cdist-manifest(7)) |     Setup dependencies between objects (see cdist-manifest(7)) | ||||||
| 
 | 
 | ||||||
|  | CDIST_LOCAL_SHELL:: | ||||||
|  |     Use this shell locally instead of /bin/sh to execute scripts | ||||||
|  | 
 | ||||||
|  | CDIST_REMOTE_SHELL:: | ||||||
|  |     Use this shell remotely instead of /bin/sh to execute scripts | ||||||
|  | 
 | ||||||
| CDIST_OVERRIDE:: | CDIST_OVERRIDE:: | ||||||
|     Allow overwriting type parameters (see cdist-manifest(7)) |     Allow overwriting type parameters (see cdist-manifest(7)) | ||||||
| 
 | 
 | ||||||
|  |  | ||||||
|  | @ -26,7 +26,7 @@ cdist supports different subcommands as explained below. | ||||||
| 
 | 
 | ||||||
| GENERAL | GENERAL | ||||||
| ------- | ------- | ||||||
| All commands except the following options: | All commands accept the following options: | ||||||
| 
 | 
 | ||||||
| -d, --debug:: | -d, --debug:: | ||||||
|     Set log level to debug |     Set log level to debug | ||||||
|  | @ -34,7 +34,7 @@ All commands except the following options: | ||||||
| -h, --help:: | -h, --help:: | ||||||
|    Show the help screen |    Show the help screen | ||||||
| 
 | 
 | ||||||
| -v, --verbose: | -v, --verbose:: | ||||||
|     Set log level to info, be more verbose |     Set log level to info, be more verbose | ||||||
| 
 | 
 | ||||||
| -V, --version:: | -V, --version:: | ||||||
|  | @ -72,10 +72,10 @@ Configure one or more hosts | ||||||
| -s, --sequential:: | -s, --sequential:: | ||||||
|     Operate on multiple hosts sequentially |     Operate on multiple hosts sequentially | ||||||
| 
 | 
 | ||||||
| --remote-copy REMOTE_COPY: | --remote-copy REMOTE_COPY:: | ||||||
|     Command to use for remote copy (should behave like scp) |     Command to use for remote copy (should behave like scp) | ||||||
| 
 | 
 | ||||||
| --remote-exec REMOTE_EXEC: | --remote-exec REMOTE_EXEC:: | ||||||
|     Command to use for remote execution (should behave like ssh) |     Command to use for remote execution (should behave like ssh) | ||||||
| 
 | 
 | ||||||
| SHELL | SHELL | ||||||
|  |  | ||||||
|  | @ -25,7 +25,7 @@ location. | ||||||
| For starters, having cdist (which includes the configuration database) on | For starters, having cdist (which includes the configuration database) on | ||||||
| your notebook should be fine. | your notebook should be fine. | ||||||
| Additionally an external copy of the git repository the configuration | Additionally an external copy of the git repository the configuration | ||||||
| relies in is recommended, for use as backup as well to allow easy collaboration | relies on is recommended, for use as backup as well as to allow easy collaboration | ||||||
| with others. | with others. | ||||||
| 
 | 
 | ||||||
| For more sophisticated setups developing cdist configurations with multiple | For more sophisticated setups developing cdist configurations with multiple | ||||||
|  |  | ||||||
|  | @ -13,7 +13,7 @@ DESCRIPTION | ||||||
| Manifests are used to define which objects to create. | Manifests are used to define which objects to create. | ||||||
| Objects are instances of **types**, like in object oriented programming languages. | Objects are instances of **types**, like in object oriented programming languages. | ||||||
| An object is represented by the combination of | An object is represented by the combination of | ||||||
| **type + slash + object name**: **__file/etc/cdist-configured** is an | **type + slash + object name**: **\__file/etc/cdist-configured** is an | ||||||
| object of the type ***__file*** with the name ***etc/cdist-configured***. | object of the type ***__file*** with the name ***etc/cdist-configured***. | ||||||
| 
 | 
 | ||||||
| All available types can be found in the **cdist/conf/type/** directory, | All available types can be found in the **cdist/conf/type/** directory, | ||||||
|  | @ -89,7 +89,7 @@ SPLITTING UP THE INITIAL MANIFEST | ||||||
| --------------------------------- | --------------------------------- | ||||||
| If you want to split up your initial manifest, you can create other shell | If you want to split up your initial manifest, you can create other shell | ||||||
| scripts in **cdist/conf/manifest/** and include them in **cdist/conf/manifest/init**. | scripts in **cdist/conf/manifest/** and include them in **cdist/conf/manifest/init**. | ||||||
| Cdist provides the environment variable ***__manifest*** to reference to | Cdist provides the environment variable ***__manifest*** to reference | ||||||
| the directory containing the initial manifest (see cdist-reference(7)). | the directory containing the initial manifest (see cdist-reference(7)). | ||||||
| 
 | 
 | ||||||
| The following example would include every file with a **.sh** suffix: | The following example would include every file with a **.sh** suffix: | ||||||
|  | @ -110,24 +110,39 @@ setup the variable "require" to contain the requirements. Multiple | ||||||
| requirements can be added white space separated. | requirements can be added white space separated. | ||||||
| 
 | 
 | ||||||
| -------------------------------------------------------------------------------- | -------------------------------------------------------------------------------- | ||||||
| # No dependency |  1 # No dependency | ||||||
| __file /etc/cdist-configured |  2 __file /etc/cdist-configured | ||||||
| 
 |  3  | ||||||
| # Require above object |  4 # Require above object | ||||||
| require="__file/etc/cdist-configured" __link /tmp/cdist-testfile \ |  5 require="__file/etc/cdist-configured" __link /tmp/cdist-testfile \ | ||||||
|    --source /etc/cdist-configured  --type symbolic |  6    --source /etc/cdist-configured  --type symbolic | ||||||
| 
 |  7  | ||||||
| # Require two objects |  8 # Require two objects | ||||||
| require="__file/etc/cdist-configured __link/tmp/cdist-testfile" \ |  9 require="__file/etc/cdist-configured __link/tmp/cdist-testfile" \ | ||||||
|    __file /tmp/cdist-another-testfile | 10    __file /tmp/cdist-another-testfile | ||||||
| 
 | 
 | ||||||
| 
 | 
 | ||||||
| -------------------------------------------------------------------------------- | -------------------------------------------------------------------------------- | ||||||
| 
 | 
 | ||||||
|  | Above the "require" variable is only set for the command that is  | ||||||
|  | immediately following it. Dependencies should allways be declared that way. | ||||||
|  | 
 | ||||||
|  | On line 4 you can see that the instantion of a type "__link" object needs | ||||||
|  | the object "__file/etc/cdist-configured" to be present, before it can proceed. | ||||||
|  | 
 | ||||||
|  | This also means that the "__link" command must make sure, that either | ||||||
|  | "__file/etc/cdist-configured" allready is present, or, if it's not, it needs | ||||||
|  | to be created. The task of cdist is to make sure, that the dependency will be | ||||||
|  | resolved appropriately and thus "__file/etc/cdist-configured" be created | ||||||
|  | if necessary before "__link" proceeds (or to abort execution with an error). | ||||||
|  | 
 | ||||||
| All objects that are created in a type manifest are automatically required | All objects that are created in a type manifest are automatically required | ||||||
| from the type that is calling them. This is called "autorequirement" in | from the type that is calling them. This is called "autorequirement" in | ||||||
| cdist jargon. | cdist jargon. | ||||||
| 
 | 
 | ||||||
|  | You can find an more in depth description of the flow execution of manifests | ||||||
|  | in cdist-stages(7) and of how types work in cdist-type(7). | ||||||
|  | 
 | ||||||
| CREATE DEPENDENCIES FROM EXECUTION ORDER | CREATE DEPENDENCIES FROM EXECUTION ORDER | ||||||
| ----------------------------------------- | ----------------------------------------- | ||||||
| You can tell cdist to execute all types in the order in which they are created  | You can tell cdist to execute all types in the order in which they are created  | ||||||
|  | @ -138,8 +153,6 @@ automatically depends on the previously created object. | ||||||
| It essentially helps you to build up blocks of code that build upon each other | It essentially helps you to build up blocks of code that build upon each other | ||||||
| (like first creating the directory xyz than the file below the directory). | (like first creating the directory xyz than the file below the directory). | ||||||
| 
 | 
 | ||||||
| THIS IS A BETA FEATURE AND MAY BE REMOVED OR CHANGED AT ANY TIME. |  | ||||||
| 
 |  | ||||||
| 
 | 
 | ||||||
| OVERRIDES | OVERRIDES | ||||||
| --------- | --------- | ||||||
|  | @ -149,15 +162,13 @@ If you whish, you can setup the environment variable CDIST_OVERRIDE | ||||||
| (any value or even empty is ok) to tell cdist, that this object override is  | (any value or even empty is ok) to tell cdist, that this object override is  | ||||||
| wanted and should be accepted. | wanted and should be accepted. | ||||||
| ATTENTION: Only use this feature if you are 100% sure in which order  | ATTENTION: Only use this feature if you are 100% sure in which order  | ||||||
| cdist encounter the affected objects, otherwhise this results  | cdist encounters the affected objects, otherwhise this results  | ||||||
| into an undefined situation.  | in an undefined situation.  | ||||||
| 
 | 
 | ||||||
| If CDIST_OVERRIDE and CDIST_ORDER_DEPENDENCY is set for an object, | If CDIST_OVERRIDE and CDIST_ORDER_DEPENDENCY are set for an object, | ||||||
| CDIST_ORDER_DEPENDENCY will be ignored, because adding a dependency in case of | CDIST_ORDER_DEPENDENCY will be ignored, because adding a dependency in case of | ||||||
| overrides would result in circular dependencies, which is an error. | overrides would result in circular dependencies, which is an error. | ||||||
| 
 | 
 | ||||||
| THIS IS A BETA FEATURE AND MAY BE REMOVED OR CHANGED AT ANY TIME. |  | ||||||
| 
 |  | ||||||
| 
 | 
 | ||||||
| 
 | 
 | ||||||
| 
 | 
 | ||||||
|  | @ -198,7 +209,7 @@ How to override objects: | ||||||
| -------------------------------------------------------------------------------- | -------------------------------------------------------------------------------- | ||||||
| # for example in the inital manifest | # for example in the inital manifest | ||||||
| 
 | 
 | ||||||
| # reate user account foobar with some hash for password | # create user account foobar with some hash for password | ||||||
| __user foobar --password 'some_fancy_hash' --home /home/foobarexample | __user foobar --password 'some_fancy_hash' --home /home/foobarexample | ||||||
| 
 | 
 | ||||||
| # ... many statements and includes in the manifest later ... | # ... many statements and includes in the manifest later ... | ||||||
|  | @ -210,8 +221,8 @@ __user foobar --password 'some_other_hash' | ||||||
| 
 | 
 | ||||||
| # this tells cdist, that you know that this is an override and should be accepted | # this tells cdist, that you know that this is an override and should be accepted | ||||||
| CDIST_OVERRIDE=yes __user foobar --password 'some_other_hash' | CDIST_OVERRIDE=yes __user foobar --password 'some_other_hash' | ||||||
| # its only an override, means the parameter --home is not touched  | # it's only an override, means the parameter --home is not touched  | ||||||
| # and stay at the original value of /home/foobarexample | # and stays at the original value of /home/foobarexample | ||||||
| -------------------------------------------------------------------------------- | -------------------------------------------------------------------------------- | ||||||
| 
 | 
 | ||||||
| Dependencies defined by execution order work as following: | Dependencies defined by execution order work as following: | ||||||
|  |  | ||||||
|  | @ -25,7 +25,7 @@ to use. | ||||||
| HOW TO USE A TYPE | HOW TO USE A TYPE | ||||||
| ----------------- | ----------------- | ||||||
| You can use types from the initial manifest or the type manifest like a | You can use types from the initial manifest or the type manifest like a | ||||||
| normal command: | normal shell command: | ||||||
| 
 | 
 | ||||||
| -------------------------------------------------------------------------------- | -------------------------------------------------------------------------------- | ||||||
| # Creates empty file /etc/cdist-configured | # Creates empty file /etc/cdist-configured | ||||||
|  |  | ||||||
							
								
								
									
										
											BIN
										
									
								
								docs/speeches/2014-05-08_linuxtag_berlin.odp
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										
											BIN
										
									
								
								docs/speeches/2014-05-08_linuxtag_berlin.odp
									
										
									
									
									
										Normal file
									
								
							
										
											Binary file not shown.
										
									
								
							
							
								
								
									
										
											BIN
										
									
								
								docs/speeches/2014-05-08_linuxtag_berlin.pdf
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										
											BIN
										
									
								
								docs/speeches/2014-05-08_linuxtag_berlin.pdf
									
										
									
									
									
										Normal file
									
								
							
										
											Binary file not shown.
										
									
								
							
							
								
								
									
										
											BIN
										
									
								
								docs/speeches/2014-05-19_cdi.st-zkb_linux_erfa.odp
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										
											BIN
										
									
								
								docs/speeches/2014-05-19_cdi.st-zkb_linux_erfa.odp
									
										
									
									
									
										Normal file
									
								
							
										
											Binary file not shown.
										
									
								
							
							
								
								
									
										
											BIN
										
									
								
								docs/speeches/2014-05-19_cdi.st-zkb_linux_erfa.pdf
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										
											BIN
										
									
								
								docs/speeches/2014-05-19_cdi.st-zkb_linux_erfa.pdf
									
										
									
									
									
										Normal file
									
								
							
										
											Binary file not shown.
										
									
								
							
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue