Merge remote branch 'nico/master' into changerunningorder
This commit is contained in:
		
				commit
				
					
						c7ebbb4125
					
				
			
		
					 21 changed files with 411 additions and 241 deletions
				
			
		|  | @ -3,21 +3,12 @@ cat << eof | ||||||
| Hey hackers, | Hey hackers, | ||||||
| 
 | 
 | ||||||
| this README is for you, for those who want to dig into cdist, hack it or try | this README is for you, for those who want to dig into cdist, hack it or try | ||||||
| to get a deeper understanding. | to get a deeper understanding. Please read doc/man/cdist-hacker.text. | ||||||
| 
 |  | ||||||
| A lot of documentation is still missing, but running cdist-quickstart should |  | ||||||
| give you an impression of how cdist works. |  | ||||||
| 
 | 
 | ||||||
| I hope you have a lot of fun with cdist, because it was also a lot of fun to | I hope you have a lot of fun with cdist, because it was also a lot of fun to | ||||||
| develop it! | develop it! | ||||||
| 
 | 
 | ||||||
|    -- Nico, 20110304 |    -- Nico, 20110324 | ||||||
| 
 |  | ||||||
| 
 |  | ||||||
| ## Conventions |  | ||||||
| 
 |  | ||||||
| - All variables exported by cdist are prefixed with a double underscore (__) |  | ||||||
| - All cdist-internal variables are prefixed with __cdist_ and are generally not exported. |  | ||||||
| 
 | 
 | ||||||
| ## Running cdist when developing | ## Running cdist when developing | ||||||
| 
 | 
 | ||||||
|  |  | ||||||
							
								
								
									
										126
									
								
								Makefile
									
										
									
									
									
								
							
							
						
						
									
										126
									
								
								Makefile
									
										
									
									
									
								
							|  | @ -1,126 +0,0 @@ | ||||||
| # General
 |  | ||||||
| PREFIX=/usr |  | ||||||
| BINDIR=$(PREFIX)/bin |  | ||||||
| MANDIR=$(PREFIX)/share/man |  | ||||||
| 
 |  | ||||||
| # Manpage and HTML
 |  | ||||||
| A2XM=a2x -f manpage --no-xmllint |  | ||||||
| # A2XH=a2x -f xhtml --no-xmllint
 |  | ||||||
| A2XH=asciidoc -b xhtml11 |  | ||||||
| 
 |  | ||||||
| # Developer only
 |  | ||||||
| WEBDIR=$$HOME/niconetz |  | ||||||
| WEBBASE=software/cdist |  | ||||||
| WEBPAGE=$(WEBBASE).mdwn |  | ||||||
| 
 |  | ||||||
| 
 |  | ||||||
| # Documentation
 |  | ||||||
| MANDIR=doc/man |  | ||||||
| MANGENERATED=$(MANDIR)/cdist-reference.text |  | ||||||
| 
 |  | ||||||
| MANSRC=$(MANDIR)/cdist.text						\
 |  | ||||||
| 	$(MANDIR)/cdist-best-practise.text			\
 |  | ||||||
| 	$(MANDIR)/cdist-code-run.text					\
 |  | ||||||
| 	$(MANDIR)/cdist-code-run-all.text			\
 |  | ||||||
| 	$(MANDIR)/cdist-config.text 					\
 |  | ||||||
|    $(MANDIR)/cdist-dir.text         			\
 |  | ||||||
|    $(MANDIR)/cdist-env.text         			\
 |  | ||||||
|    $(MANDIR)/cdist-explorer-run-global.text 	\
 |  | ||||||
|    $(MANDIR)/cdist-deploy-to.text 				\
 |  | ||||||
| 	$(MANDIR)/cdist-explorer.text					\
 |  | ||||||
| 	$(MANDIR)/cdist-manifest.text 				\
 |  | ||||||
| 	$(MANDIR)/cdist-manifest-run.text			\
 |  | ||||||
|    $(MANDIR)/cdist-manifest-run-all.text	 	\
 |  | ||||||
|    $(MANDIR)/cdist-manifest-run-init.text		\
 |  | ||||||
| 	$(MANDIR)/cdist-object-explorer-all.text	\
 |  | ||||||
| 	$(MANDIR)/cdist-object-gencode.text    	\
 |  | ||||||
| 	$(MANDIR)/cdist-object-gencode-all.text	\
 |  | ||||||
| 	$(MANDIR)/cdist-quickstart.text 				\
 |  | ||||||
|    $(MANDIR)/cdist-remote-explorer-run.text 	\
 |  | ||||||
| 	$(MANDIR)/cdist-run-remote.text				\
 |  | ||||||
| 	$(MANDIR)/cdist-stages.text					\
 |  | ||||||
| 	$(MANDIR)/cdist-type.text						\
 |  | ||||||
| 	$(MANDIR)/cdist-type-build-emulation.text \
 |  | ||||||
| 	$(MANDIR)/cdist-type-emulator.text			\
 |  | ||||||
| 	$(MANDIR)/cdist-type-template.text			\
 |  | ||||||
| 
 |  | ||||||
| 
 |  | ||||||
| ################################################################################
 |  | ||||||
| # User targets
 |  | ||||||
| #
 |  | ||||||
| 
 |  | ||||||
| all: |  | ||||||
| 	@echo '' |  | ||||||
| 	@echo 'Welcome to cdist!' |  | ||||||
| 	@echo '' |  | ||||||
| 	@echo 'Here are the possible targets:' |  | ||||||
| 	@echo '' |  | ||||||
| 	@echo '	man: Build manpages (requires Asciidoc)' |  | ||||||
| 	@echo '	clean: Remove build stuff' |  | ||||||
| 	@echo '' |  | ||||||
| 	@echo '' |  | ||||||
| 
 |  | ||||||
| man: doc/man/.marker |  | ||||||
| 
 |  | ||||||
| doc/man/.marker: $(MANDIR)/cdist-reference.text |  | ||||||
| 	touch $@ |  | ||||||
| 
 |  | ||||||
| # Manual from core
 |  | ||||||
| mancore: $(MANSRC) |  | ||||||
| 	for mansrc in $^; do $(A2XM) $$mansrc; $(A2XH) $$mansrc; done |  | ||||||
| 
 |  | ||||||
| # Manuals from types
 |  | ||||||
| mantype: |  | ||||||
| 	for man in conf/type/*/man.text; do $(A2XM) $$man; $(A2XH) $$man; done |  | ||||||
| 
 |  | ||||||
| # Move into manpath directories
 |  | ||||||
| manmove: mantype mancore |  | ||||||
| 	for manpage in $(MANDIR)/*.[1-9] conf/type/*/*.7; do \
 |  | ||||||
| 		cat=$${manpage##*.}; \
 |  | ||||||
| 		mandir=$(MANDIR)/man$$cat; \
 |  | ||||||
| 		mkdir -p $$mandir; \
 |  | ||||||
| 		mv $$manpage $$mandir; \
 |  | ||||||
| 	done |  | ||||||
| 	mkdir -p doc/html |  | ||||||
| 	mv doc/man/*.html doc/html |  | ||||||
| 
 |  | ||||||
| 	for mantype in conf/type/*/man.html; do \
 |  | ||||||
| 	mannew=$$(echo $$mantype | sed -e 's;conf/;cdist-;'  -e 's;/;;' -e 's;/man;;');\
 |  | ||||||
| 	mv $$mantype doc/html/$$mannew; \
 |  | ||||||
| 	done |  | ||||||
| 
 |  | ||||||
| # Reference depends on conf/type/*/man.text - HOWTO with posix make?
 |  | ||||||
| $(MANDIR)/cdist-reference.text: manmove $(MANDIR)/cdist-reference.text.sh |  | ||||||
| 	$(MANDIR)/cdist-reference.text.sh |  | ||||||
| 	$(A2XM) $(MANDIR)/cdist-reference.text |  | ||||||
| 	$(A2XH) $(MANDIR)/cdist-reference.text |  | ||||||
| 	# Move us to the destination as well |  | ||||||
| 	make manmove |  | ||||||
| 	 |  | ||||||
| clean: |  | ||||||
| 	rm -rf doc/man/*.html doc/man/*.[1-9] doc/man/man[1-9] $(MANGENERATED) |  | ||||||
| 	rm -f conf/type/*/man.html |  | ||||||
| 	rm -rf doc/html |  | ||||||
| 
 |  | ||||||
| ################################################################################
 |  | ||||||
| # Developer targets
 |  | ||||||
| #
 |  | ||||||
| 
 |  | ||||||
| test: |  | ||||||
| 	# ubuntu |  | ||||||
| 	.rsync lyni@tablett:cdist |  | ||||||
| 	# redhat |  | ||||||
| 	.rsync nicosc@free.ethz.ch:cdist |  | ||||||
| 	# gentoo |  | ||||||
| 	.rsync nicosc@ru3.inf.ethz.ch:cdist |  | ||||||
| 
 |  | ||||||
| #web: manmove
 |  | ||||||
| web: |  | ||||||
| 	cp README $(WEBDIR)/$(WEBPAGE) |  | ||||||
| 	cp -r doc/html/* $(WEBDIR)/$(WEBBASE)/man |  | ||||||
| 	cd $(WEBDIR) && git commit -m "cdist update" $(WEBBASE) $(WEBPAGE) |  | ||||||
| 	cd $(WEBDIR) && make pub |  | ||||||
| 
 |  | ||||||
| pub: |  | ||||||
| 	git push --mirror |  | ||||||
| 	git push --mirror github |  | ||||||
							
								
								
									
										4
									
								
								README
									
										
									
									
									
								
							
							
						
						
									
										4
									
								
								README
									
										
									
									
									
								
							|  | @ -107,7 +107,7 @@ To install cdist, execute the following commands: | ||||||
|     cd cdist |     cd cdist | ||||||
|     export PATH=$PATH:$(pwd -P)/bin |     export PATH=$PATH:$(pwd -P)/bin | ||||||
| 
 | 
 | ||||||
|     # If you want the manpages (requires asciidoc to be installed) |     # If you want the manpages (requires gmake and asciidoc to be installed) | ||||||
|     make man |     make man | ||||||
|     export MANPATH=$MANPATH:$(pwd -P)/doc/man |     export MANPATH=$MANPATH:$(pwd -P)/doc/man | ||||||
| 
 | 
 | ||||||
|  | @ -136,7 +136,7 @@ may vanish at any point. To select a specific branch use | ||||||
|     git checkout -b <name> origin/<name> |     git checkout -b <name> origin/<name> | ||||||
|      |      | ||||||
|     # Stay on a specific version |     # Stay on a specific version | ||||||
|     git checkout -b 1.3 origin/1.3 |     git checkout -b 1.4 origin/1.4 | ||||||
| 
 | 
 | ||||||
| ### Mirrors | ### Mirrors | ||||||
| 
 | 
 | ||||||
|  |  | ||||||
|  | @ -19,7 +19,7 @@ | ||||||
| # | # | ||||||
| # | # | ||||||
| 
 | 
 | ||||||
| __cdist_version="1.4.0" | __cdist_version="1.4.1" | ||||||
| 
 | 
 | ||||||
| # Fail if something bogus is going on | # Fail if something bogus is going on | ||||||
| set -u | set -u | ||||||
|  |  | ||||||
							
								
								
									
										131
									
								
								build.sh
									
										
									
									
									
										Executable file
									
								
							
							
						
						
									
										131
									
								
								build.sh
									
										
									
									
									
										Executable file
									
								
							|  | @ -0,0 +1,131 @@ | ||||||
|  | #!/bin/sh | ||||||
|  | # | ||||||
|  | # 2011 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/>. | ||||||
|  | # | ||||||
|  | # | ||||||
|  | # Push a directory to a target, both sides have the same name (i.e. explorers) | ||||||
|  | # or | ||||||
|  | # Pull a directory from a target, both sides have the same name (i.e. explorers) | ||||||
|  | # | ||||||
|  | 
 | ||||||
|  | # Manpage and HTML | ||||||
|  | A2XM="a2x -f manpage --no-xmllint" | ||||||
|  | A2XH="a2x -f xhtml --no-xmllint" | ||||||
|  | 
 | ||||||
|  | # Developer webbase | ||||||
|  | WEBDIR=$HOME/niconetz | ||||||
|  | WEBBASE=software/cdist | ||||||
|  | WEBPAGE=${WEBBASE}.mdwn | ||||||
|  | 
 | ||||||
|  | # Documentation | ||||||
|  | MANDIR=doc/man | ||||||
|  | MAN1DSTDIR=${MANDIR}/man1 | ||||||
|  | MAN7DSTDIR=${MANDIR}/man7 | ||||||
|  | 
 | ||||||
|  | case "$1" in | ||||||
|  |    man) | ||||||
|  |       set -e | ||||||
|  |       "$0" mandirs | ||||||
|  |       "$0" mantype | ||||||
|  |       "$0" man1 | ||||||
|  |       "$0" man7 | ||||||
|  |       "$0" manbuild | ||||||
|  |    ;; | ||||||
|  | 
 | ||||||
|  |    manbuild) | ||||||
|  |       for src in ${MAN1DSTDIR}/*.text ${MAN7DSTDIR}/*.text; do | ||||||
|  |          echo "Compiling manpage and html for $src" | ||||||
|  |          $A2XM "$src" | ||||||
|  |          $A2XH "$src" | ||||||
|  |       done | ||||||
|  |    ;; | ||||||
|  | 
 | ||||||
|  |    mandirs) | ||||||
|  |       # Create destination directories | ||||||
|  |       mkdir -p "${MAN1DSTDIR}" "${MAN7DSTDIR}" | ||||||
|  |    ;; | ||||||
|  | 
 | ||||||
|  |    mantype) | ||||||
|  | 	   for mansrc in ${MAN7TYPESRC}; do | ||||||
|  |          dst="$(echo $mansrc | sed -e 's;conf/;cdist-;'  -e 's;/;;' -e 's;/man;;' -e 's;^;doc/man/man7/;')" | ||||||
|  |          ln -sf "../../../$mansrc" "$dst" | ||||||
|  |       done | ||||||
|  |    ;; | ||||||
|  | 
 | ||||||
|  |    man1) | ||||||
|  |       for man in cdist-code-run.text cdist-code-run-all.text cdist-config.text \ | ||||||
|  |          cdist-dir.text cdist-env.text cdist-explorer-run-global.text          \ | ||||||
|  |          cdist-deploy-to.text cdist-explorer.text cdist-manifest.text          \ | ||||||
|  |          cdist-manifest-run.text cdist-manifest-run-init.text                  \ | ||||||
|  |          cdist-manifest-run-all.text cdist-object-explorer-all.text            \ | ||||||
|  |          cdist-object-gencode.text cdist-object-gencode-all.text               \ | ||||||
|  |          cdist-remote-explorer-run.text cdist-run-remote.text                  \ | ||||||
|  |          cdist-type-build-emulation.text cdist-type-emulator.text              \ | ||||||
|  |          cdist-type-template.text | ||||||
|  |          do | ||||||
|  |          ln -sf ../$man ${MAN1DSTDIR} | ||||||
|  |       done | ||||||
|  |    ;; | ||||||
|  | 
 | ||||||
|  |    man7) | ||||||
|  |       for man in cdist.text cdist-best-practise.text cdist-hacker.text         \ | ||||||
|  |       cdist-quickstart.text cdist-reference.text cdist-stages.text             \ | ||||||
|  |       cdist-type.text | ||||||
|  |          do | ||||||
|  |          ln -sf ../$man ${MAN7DSTDIR} | ||||||
|  |       done | ||||||
|  |    ;; | ||||||
|  | 
 | ||||||
|  |    mangen) | ||||||
|  |       ${MANDIR}/cdist-reference.text.sh | ||||||
|  |    ;; | ||||||
|  | 
 | ||||||
|  |    web) | ||||||
|  |       cp README ${WEBDIR}/${WEBPAGE} | ||||||
|  |       rm -rf ${WEBDIR}/${WEBBASE}/man && mkdir ${WEBDIR}/${WEBBASE}/man | ||||||
|  |       cp ${MAN1DSTDIR}/*.html ${MAN7DSTDIR}/*.html ${WEBDIR}/${WEBBASE}/man | ||||||
|  |       cd ${WEBDIR} && git add ${WEBBASE}/man | ||||||
|  |       cd ${WEBDIR} && git commit -m "cdist update" ${WEBBASE} ${WEBPAGE} | ||||||
|  |       cd ${WEBDIR} && make pub | ||||||
|  |    ;; | ||||||
|  | 
 | ||||||
|  |    pub) | ||||||
|  |       git push --mirror | ||||||
|  |       git push --mirror github | ||||||
|  |    ;; | ||||||
|  | 
 | ||||||
|  |    clean) | ||||||
|  |       rm -rf "$MAN1DSTDIR" "$MAN7DSTDIR" | ||||||
|  |       rm -f  ${MANDIR}/cdist-reference.text | ||||||
|  |    ;; | ||||||
|  | 
 | ||||||
|  |    *) | ||||||
|  |       echo '' | ||||||
|  |       echo 'Welcome to cdist!' | ||||||
|  |       echo '' | ||||||
|  |       echo 'Here are the possible targets:' | ||||||
|  |       echo '' | ||||||
|  |       echo '	man: Build manpages (requires Asciidoc)' | ||||||
|  |       echo '	manhtml: Build html-manpages (requires Asciidoc)' | ||||||
|  |       echo '	clean: Remove build stuff' | ||||||
|  |       echo '' | ||||||
|  |       echo '' | ||||||
|  |       echo "Unknown target, \"$1\"" >&2 | ||||||
|  |       exit 1 | ||||||
|  |    ;; | ||||||
|  | esac | ||||||
|  | @ -27,8 +27,3 @@ require="__package/python-software-properties" \ | ||||||
|    --source "$__type/files/remove-apt-repository" \ |    --source "$__type/files/remove-apt-repository" \ | ||||||
|    --mode 0755 |    --mode 0755 | ||||||
| 
 | 
 | ||||||
| # FIXME: rewrite to use $__self once that exists |  | ||||||
| # FIXME: only run if something changed. currently working arround this in |  | ||||||
| #    __apt_update_index/gencode-remote |  | ||||||
| require="__apt_ppa/$__object_id" __apt_update_index |  | ||||||
| 
 |  | ||||||
|  |  | ||||||
|  | @ -1,44 +0,0 @@ | ||||||
| cdist-type__apt_update_index(7) |  | ||||||
| ========================== |  | ||||||
| Steven Armstrong <steven-cdist--@--armstrong.cc> |  | ||||||
| 
 |  | ||||||
| 
 |  | ||||||
| NAME |  | ||||||
| ---- |  | ||||||
| cdist-type__apt_update_index - resynchronize the apt package index |  | ||||||
| 
 |  | ||||||
| 
 |  | ||||||
| DESCRIPTION |  | ||||||
| ----------- |  | ||||||
| This cdist type allows you to resynchronize the package index files from their |  | ||||||
| sources. In other words, it runs `apt-get update`. |  | ||||||
| 
 |  | ||||||
| FIXME: currently hard coded to work together with the __apt_ppa type |  | ||||||
| 
 |  | ||||||
| 
 |  | ||||||
| REQUIRED PARAMETERS |  | ||||||
| ------------------- |  | ||||||
| None. |  | ||||||
| 
 |  | ||||||
| OPTIONAL PARAMETERS |  | ||||||
| ------------------- |  | ||||||
| None. |  | ||||||
| 
 |  | ||||||
| 
 |  | ||||||
| EXAMPLES |  | ||||||
| -------- |  | ||||||
| 
 |  | ||||||
| -------------------------------------------------------------------------------- |  | ||||||
| __apt_update_index |  | ||||||
| -------------------------------------------------------------------------------- |  | ||||||
| 
 |  | ||||||
| 
 |  | ||||||
| SEE ALSO |  | ||||||
| -------- |  | ||||||
| - cdist-type(7) |  | ||||||
| 
 |  | ||||||
| 
 |  | ||||||
| COPYING |  | ||||||
| ------- |  | ||||||
| Copyright \(C) 2011 Steven Armstrong. Free use of this software is |  | ||||||
| granted under the terms of the GNU General Public License version 3 (GPLv3). |  | ||||||
|  | @ -17,19 +17,17 @@ | ||||||
| # You should have received a copy of the GNU General Public License | # You should have received a copy of the GNU General Public License | ||||||
| # along with cdist. If not, see <http://www.gnu.org/licenses/>. | # along with cdist. If not, see <http://www.gnu.org/licenses/>. | ||||||
| # | # | ||||||
|  | # | ||||||
|  | # Get the current value of key or __NOTSET__ if the key doesn't exist. | ||||||
|  | # | ||||||
| 
 | 
 | ||||||
| # BIG FAT FIXME: there must be a better way to do this! | key="$(cat "$__object/parameter/key")" | ||||||
| tmpdir=$(mktemp -d) | file="$(cat "$__object/parameter/file")" | ||||||
| cleanup() { | delimiter="$(cat "$__object/parameter/delimiter")" | ||||||
|    rm -rf "$tmpdir" |  | ||||||
| } |  | ||||||
| trap cleanup EXIT |  | ||||||
| 
 | 
 | ||||||
| should="$tmpdir/should" | awk -F "$delimiter" ' | ||||||
| is="$tmpdir/is" | BEGIN { found=0 } | ||||||
| 
 | /^'$key'/ { print $2; found=1 } | ||||||
| find "$__global/object/__apt_ppa" -path "*.cdist/parameter/state" | xargs cat > "$should" | END { if (found) exit 0; else exit 1 }' "$file" \ | ||||||
| find "$__global/object/__apt_ppa" -path "*.cdist/explorer/state" | xargs cat > "$is" | || echo "__NOTSET__" | ||||||
| 
 |  | ||||||
| diff -ru "$is" "$should" || echo apt-get update |  | ||||||
| 
 | 
 | ||||||
							
								
								
									
										52
									
								
								conf/type/__key_value/gencode-remote
									
										
									
									
									
										Executable file
									
								
							
							
						
						
									
										52
									
								
								conf/type/__key_value/gencode-remote
									
										
									
									
									
										Executable file
									
								
							|  | @ -0,0 +1,52 @@ | ||||||
|  | #!/bin/sh | ||||||
|  | # | ||||||
|  | # 2011 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/>. | ||||||
|  | # | ||||||
|  | 
 | ||||||
|  | value_is="$(cat "$__object/explorer/value")" | ||||||
|  | value_should="$(cat "$__object/parameter/value")" | ||||||
|  | 
 | ||||||
|  | key="$(cat "$__object/parameter/key")" | ||||||
|  | file="$(cat "$__object/parameter/file")" | ||||||
|  | delimiter="$(cat "$__object/parameter/delimiter")" | ||||||
|  | 
 | ||||||
|  | if [ "$value_is" != "$value_should" ]; then | ||||||
|  |    case "$value_is" in | ||||||
|  |       __NOTSET__) | ||||||
|  |          # add key and value | ||||||
|  |          echo "echo \"${key}${delimiter}${value_should}\" >> \"$file\"" | ||||||
|  |       ;; | ||||||
|  |       *) | ||||||
|  |          if [ "$value_should" = '__NOTSET__' ]; then | ||||||
|  |             # remove key and value | ||||||
|  |             cat << DONE | ||||||
|  | sed -i '/^${key}/d' "$file" | ||||||
|  | DONE | ||||||
|  |          else  | ||||||
|  |             # change value | ||||||
|  |             cat << DONE | ||||||
|  | awk -F "$delimiter" ' | ||||||
|  | /${key}${delimiter}*/{gsub(/$value_is/, $value_should)};{print}' "$file" > "${file}+" \ | ||||||
|  | && mv "${file}+" "$file" | ||||||
|  | 
 | ||||||
|  | DONE | ||||||
|  |          fi | ||||||
|  |       ;; | ||||||
|  |    esac | ||||||
|  | fi | ||||||
|  | 
 | ||||||
							
								
								
									
										59
									
								
								conf/type/__key_value/man.text
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										59
									
								
								conf/type/__key_value/man.text
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,59 @@ | ||||||
|  | cdist-type__key_value(7) | ||||||
|  | ======================== | ||||||
|  | Steven Armstrong <steven-cdist--@--armstrong.cc> | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | NAME | ||||||
|  | ---- | ||||||
|  | cdist-type__key_value - Change property values in files | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | DESCRIPTION | ||||||
|  | ----------- | ||||||
|  | This cdist type allows you to change values in a key value based config | ||||||
|  | file. | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | REQUIRED PARAMETERS | ||||||
|  | ------------------- | ||||||
|  | value:: | ||||||
|  |    The value for the key. Setting the value to __NOTSET__ will remove the key | ||||||
|  |    from the file. | ||||||
|  | file:: | ||||||
|  |    The file to operate on. | ||||||
|  | delimiter:: | ||||||
|  |    The delimiter which seperates the key from the value. | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | OPTIONAL PARAMETERS | ||||||
|  | ------------------- | ||||||
|  | key:: | ||||||
|  |    The key to change. Defaults to object_id. | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | EXAMPLES | ||||||
|  | -------- | ||||||
|  | 
 | ||||||
|  | -------------------------------------------------------------------------------- | ||||||
|  | # Set the maximum system user id  | ||||||
|  | __key_value SYS_UID_MAX --file /etc/login.defs --value 666 --delimiter ' ' | ||||||
|  | 
 | ||||||
|  | # Same with fancy id | ||||||
|  | __key_value my-fancy-id --file /etc/login.defs --key SYS_UID_MAX --value 666 \ | ||||||
|  |    --delimiter ' ' | ||||||
|  | 
 | ||||||
|  | # Enable packet forwarding | ||||||
|  | __key_value net.ipv4.ip_forward --file /etc/sysctl.conf --value 1 \ | ||||||
|  |    --delimiter '=' | ||||||
|  | -------------------------------------------------------------------------------- | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | SEE ALSO | ||||||
|  | -------- | ||||||
|  | - cdist-type(7) | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | COPYING | ||||||
|  | ------- | ||||||
|  | Copyright \(C) 2011 Steven Armstrong. Free use of this software is | ||||||
|  | granted under the terms of the GNU General Public License version 3 (GPLv3). | ||||||
							
								
								
									
										26
									
								
								conf/type/__key_value/manifest
									
										
									
									
									
										Executable file
									
								
							
							
						
						
									
										26
									
								
								conf/type/__key_value/manifest
									
										
									
									
									
										Executable file
									
								
							|  | @ -0,0 +1,26 @@ | ||||||
|  | #!/bin/sh | ||||||
|  | # | ||||||
|  | # 2011 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/>. | ||||||
|  | # | ||||||
|  | 
 | ||||||
|  | if [ -f "$__object/parameter/key" ]; then | ||||||
|  |    key="$(cat "$__object/parameter/key")" | ||||||
|  | else | ||||||
|  |    echo "$__object_id" > "$__object/parameter/key" | ||||||
|  | fi | ||||||
|  | 
 | ||||||
							
								
								
									
										1
									
								
								conf/type/__key_value/parameter/optional
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										1
									
								
								conf/type/__key_value/parameter/optional
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1 @@ | ||||||
|  | key | ||||||
							
								
								
									
										3
									
								
								conf/type/__key_value/parameter/required
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										3
									
								
								conf/type/__key_value/parameter/required
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,3 @@ | ||||||
|  | value | ||||||
|  | file | ||||||
|  | delimiter | ||||||
|  | @ -1,3 +1,9 @@ | ||||||
|  | 1.4.1: 2011-03-25 | ||||||
|  | 	* New type __key_value (Steven Armstrong) | ||||||
|  | 	* New type __apt_ppa (Steven Armstrong) | ||||||
|  | 	* Documentation: Manpage generation cleanup | ||||||
|  | 	* Documentation: Manpage fix for __apt_ppa | ||||||
|  | 
 | ||||||
| 1.4.0: 2011-03-24 | 1.4.0: 2011-03-24 | ||||||
| 	* Add --recursive to __directory | 	* Add --recursive to __directory | ||||||
| 	* Move cdist generated stuff to .cdist of an object | 	* Move cdist generated stuff to .cdist of an object | ||||||
|  |  | ||||||
							
								
								
									
										19
									
								
								doc/dev/todo/TAKEME
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										19
									
								
								doc/dev/todo/TAKEME
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,19 @@ | ||||||
|  | UNASSIGNED TODOS | ||||||
|  | ---------------- | ||||||
|  | The following list of todos has not been assigned to any developer. | ||||||
|  | Feel free to pick one! | ||||||
|  | 
 | ||||||
|  | CORE | ||||||
|  | ---- | ||||||
|  | Only build manpages if necessary for types as well as for the core! | ||||||
|  | 
 | ||||||
|  | TYPES | ||||||
|  | ------ | ||||||
|  | Types to be written/extended: | ||||||
|  |    - __ssh-keys (host/user) | ||||||
|  |    - Think about __service - necessary? | ||||||
|  |    - __file_edit | ||||||
|  |       - regexp replace (can probably cover all?) | ||||||
|  |          -> aka sed. | ||||||
|  |    - __cron | ||||||
|  | 
 | ||||||
|  | @ -1,3 +1,23 @@ | ||||||
| Document redefine behaviour | Core: | ||||||
| release cdist 1.4.0 |    - support $__self = relative_type/object_id | ||||||
|    perhaps include __self |    - cache | ||||||
|  | 
 | ||||||
|  | Cache: | ||||||
|  |    Assume you want to configure stuff one host ("monitor node"), | ||||||
|  |    depending on the configuration of other hosts ("cluster nodes"). | ||||||
|  | 
 | ||||||
|  |    For instance, the monitor host would like to know, | ||||||
|  |    which hosts are configured with the provider | ||||||
|  |    "apache" and option --start true. | ||||||
|  | 
 | ||||||
|  |    This requires the monitor node to be able to | ||||||
|  |    query all other configured nodes. It can't | ||||||
|  |    ask for all hosts, because cdist does not | ||||||
|  |    know which hosts are configured or may exist. | ||||||
|  | 
 | ||||||
|  |    Example implementation | ||||||
|  | 
 | ||||||
|  |    If cdist keeps ("caches") the configuration of every | ||||||
|  |    node it configures, each new node can query the | ||||||
|  |    cache for existing nodes that acquired the given | ||||||
|  |    configuration. | ||||||
|  |  | ||||||
|  | @ -1,35 +0,0 @@ | ||||||
| Core: |  | ||||||
|    - allow redefine object, if everything same |  | ||||||
|    - support $__self = relative_type/object_id |  | ||||||
|    - .cdist |  | ||||||
|    - cache |  | ||||||
|    - display changes if object cannot be merged to user |  | ||||||
| 
 |  | ||||||
| Cache: |  | ||||||
|    Assume you want to configure stuff one host ("monitor node"), |  | ||||||
|    depending on the configuration of other hosts ("cluster nodes"). |  | ||||||
| 
 |  | ||||||
|    For instance, the monitor host would like to know, |  | ||||||
|    which hosts are configured with the provider |  | ||||||
|    "apache" and option --start true. |  | ||||||
| 
 |  | ||||||
|    This requires the monitor node to be able to |  | ||||||
|    query all other configured nodes. It can't |  | ||||||
|    ask for all hosts, because cdist does not |  | ||||||
|    know which hosts are configured or may exist. |  | ||||||
| 
 |  | ||||||
|    Example implementation |  | ||||||
| 
 |  | ||||||
|    If cdist keeps ("caches") the configuration of every |  | ||||||
|    node it configures, each new node can query the |  | ||||||
|    cache for existing nodes that acquired the given |  | ||||||
|    configuration. |  | ||||||
| 
 |  | ||||||
| Types to be written/extended: |  | ||||||
|    - __ssh-keys (host/user) |  | ||||||
|    - __service |  | ||||||
|    - __file_edit |  | ||||||
|       - regexp replace (can probably cover all?) |  | ||||||
|          -> aka sed. |  | ||||||
|    - __cron |  | ||||||
| 
 |  | ||||||
|  | @ -32,7 +32,7 @@ in csh variants (csh, tcsh): | ||||||
| eval `./bin/cdist-env` | eval `./bin/cdist-env` | ||||||
| -------------------------------------------------------------------------------- | -------------------------------------------------------------------------------- | ||||||
| 
 | 
 | ||||||
| For bourne shell, the is also a shorter version: | For bourne shell, there is also a shorter version: | ||||||
| -------------------------------------------------------------------------------- | -------------------------------------------------------------------------------- | ||||||
| . ./bin/cdist-env | . ./bin/cdist-env | ||||||
| -------------------------------------------------------------------------------- | -------------------------------------------------------------------------------- | ||||||
|  |  | ||||||
							
								
								
									
										73
									
								
								doc/man/cdist-hacker.text
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										73
									
								
								doc/man/cdist-hacker.text
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,73 @@ | ||||||
|  | cdist-hacker(7) | ||||||
|  | =============== | ||||||
|  | Nico Schottelius <nico-cdist--@--schottelius.org> | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | NAME | ||||||
|  | ---- | ||||||
|  | cdist-hacker - How to get (stuff) into cdist | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | WELCOME | ||||||
|  | ------- | ||||||
|  | Welcome dear hacker! I invite you to a tour of pointers to | ||||||
|  | get into the usable configuration mangament system, cdist. | ||||||
|  | 
 | ||||||
|  | The first thing to know is probably that cdist is brought to | ||||||
|  | you by people who care about how code looks like and who think | ||||||
|  | twice before merging or implementing a feature: Less features | ||||||
|  | with good usability are far better than the opposite. | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | UNDERSTANDING CDIST INTERNALS | ||||||
|  | ----------------------------- | ||||||
|  | IF you are interested in how cdist internally works, you can open | ||||||
|  | bin/cdist-config and bin/cdist-deploy-to in your favorite editor and | ||||||
|  | read the scripts bin/cdist-deploy-to calls. The magnificent HACKERS_README | ||||||
|  | may be of great help as well. | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | CODING CONVENTIONS (CORE) | ||||||
|  | ------------------------- | ||||||
|  | - All variables exported by cdist are prefixed with a double underscore (__) | ||||||
|  | - All cdist-internal variables are prefixed with __cdist_ and are generally not exported. | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | HOW TO SUBMIT STUFF FOR INCLUSION INTO UPSTREAM CDIST | ||||||
|  | ----------------------------------------------------- | ||||||
|  | If you did some cool changes to cdist, which you value as a benefit for | ||||||
|  | everybody using cdist, you're welcome to propose inclusion into upstream. | ||||||
|  | 
 | ||||||
|  | There are though some requirements to ensure your changes don't break others | ||||||
|  | work nor kill the authors brain: | ||||||
|  | 
 | ||||||
|  | - Code submission must be done via git | ||||||
|  | - Code to be included should be branched of the upstream "master" branch | ||||||
|  |    - Exception: Bugfixes to a version branch | ||||||
|  | - Code submissions must be in your master branch | ||||||
|  |    - Exception: If you only want a comment on your code, but not an inclusion. | ||||||
|  | - Do not add conf/manifest/init - This file should only be touched in your | ||||||
|  |   private branch! | ||||||
|  | 
 | ||||||
|  | As soon as your work meets these requirements, you can contact me | ||||||
|  | (IRC, Mailinglist, Phone, RFC 1149) and I'll check your code before | ||||||
|  | including it. | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | HOW TO SUBMIT A NEW TYPE | ||||||
|  | ------------------------ | ||||||
|  | Submitting a type works as described above, with the additional requirement | ||||||
|  | that a corresponding manpage named man.text in asciidoc format with | ||||||
|  | the manpage-name "cdist-type__NAME" is included in the type directory | ||||||
|  | AND asciidoc is able to compile it. | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | SEE ALSO | ||||||
|  | -------- | ||||||
|  | - cdist(7) | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | COPYING | ||||||
|  | ------- | ||||||
|  | Copyright \(C) 2011 Nico Schottelius. Free use of this software is | ||||||
|  | granted under the terms of the GNU General Public License version 3 (GPLv3). | ||||||
|  | @ -32,6 +32,7 @@ SEE ALSO | ||||||
| - Website: http://www.nico.schottelius.org/cdist/[] | - Website: http://www.nico.schottelius.org/cdist/[] | ||||||
| - cdist-best-practise(7) | - cdist-best-practise(7) | ||||||
| - cdist-deploy-to(1) | - cdist-deploy-to(1) | ||||||
|  | - cdist-hacker(7) | ||||||
| - cdist-manifest(7) | - cdist-manifest(7) | ||||||
| - cdist-quickstart(1) | - cdist-quickstart(1) | ||||||
| - cdist-type(7) | - cdist-type(7) | ||||||
|  |  | ||||||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue