forked from ungleich-public/cdist
		
	Merge remote-tracking branch 'telmich/master' into nfs
This commit is contained in:
		
				commit
				
					
						a511461d9b
					
				
			
		
					 47 changed files with 615 additions and 197 deletions
				
			
		
							
								
								
									
										6
									
								
								README
									
										
									
									
									
								
							
							
						
						
									
										6
									
								
								README
									
										
									
									
									
								
							| 
						 | 
					@ -53,8 +53,6 @@ UNIX, simplicity, familar environment | cdist is configured in POSIX shell
 | 
				
			||||||
The cdist documentation is included as manpages in the distribution.
 | 
					The cdist documentation is included as manpages in the distribution.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 * You can [browse the documentation of the latest version online](man) as well.
 | 
					 * You can [browse the documentation of the latest version online](man) as well.
 | 
				
			||||||
 * Or you can watch the youtube **video**
 | 
					 | 
				
			||||||
[cdist installation and first usage in less than 60 seconds][http://www.youtube.com/watch?v=PRMjzy48eTI).
 | 
					 | 
				
			||||||
 * Have a look at the [given speeches](speeches)
 | 
					 * Have a look at the [given speeches](speeches)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
### OS support
 | 
					### OS support
 | 
				
			||||||
| 
						 | 
					@ -133,7 +131,7 @@ To install cdist, execute the following commands:
 | 
				
			||||||
    export PATH=$PATH:$(pwd -P)/bin
 | 
					    export PATH=$PATH:$(pwd -P)/bin
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    # If you want the manpages
 | 
					    # If you want the manpages
 | 
				
			||||||
    ./build.sh man
 | 
					    ./build man
 | 
				
			||||||
    export MANPATH=$MANPATH:$(pwd -P)/doc/man
 | 
					    export MANPATH=$MANPATH:$(pwd -P)/doc/man
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					@ -180,7 +178,7 @@ To upgrade cdist in the current branch use
 | 
				
			||||||
    git pull
 | 
					    git pull
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    # Also update the manpages
 | 
					    # Also update the manpages
 | 
				
			||||||
    ./build.sh man
 | 
					    ./build man
 | 
				
			||||||
    export MANPATH=$MANPATH:$(pwd -P)/doc/man
 | 
					    export MANPATH=$MANPATH:$(pwd -P)/doc/man
 | 
				
			||||||
 | 
					
 | 
				
			||||||
If you stay on a version branche (i.e. 1.0, 1.1., ...), nothing should break.
 | 
					If you stay on a version branche (i.e. 1.0, 1.1., ...), nothing should break.
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
							
								
								
									
										22
									
								
								build
									
										
									
									
									
								
							
							
						
						
									
										22
									
								
								build
									
										
									
									
									
								
							| 
						 | 
					@ -26,13 +26,16 @@
 | 
				
			||||||
# exit on any error
 | 
					# exit on any error
 | 
				
			||||||
#set -e
 | 
					#set -e
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					version=$(git describe)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
# Manpage and HTML
 | 
					# Manpage and HTML
 | 
				
			||||||
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"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
# Developer webbase
 | 
					# Developer webbase
 | 
				
			||||||
WEBDIR=$HOME/niconetz
 | 
					WEBDIR=$HOME/niconetz
 | 
				
			||||||
WEBBASE=software/cdist
 | 
					WEBBASE=$WEBDIR/software/cdist
 | 
				
			||||||
 | 
					WEBMAN=$WEBBASE/man/$version
 | 
				
			||||||
WEBPAGE=${WEBBASE}.mdwn
 | 
					WEBPAGE=${WEBBASE}.mdwn
 | 
				
			||||||
 | 
					
 | 
				
			||||||
# Documentation
 | 
					# Documentation
 | 
				
			||||||
| 
						 | 
					@ -95,17 +98,18 @@ case "$1" in
 | 
				
			||||||
   ;;
 | 
					   ;;
 | 
				
			||||||
      
 | 
					      
 | 
				
			||||||
   web)
 | 
					   web)
 | 
				
			||||||
      cp README ${WEBDIR}/${WEBPAGE}
 | 
					      cp README ${WEBPAGE}
 | 
				
			||||||
      rm -rf ${WEBDIR}/${WEBBASE}/man 
 | 
					      rm -rf ${WEBMAN}
 | 
				
			||||||
      mkdir -p ${WEBDIR}/${WEBBASE}/man/man1 ${WEBDIR}/${WEBBASE}/man/man7
 | 
					      mkdir -p ${WEBMAN}/man1 ${WEBMAN}/man7
 | 
				
			||||||
 | 
					
 | 
				
			||||||
      rm -rf ${WEBDIR}/${WEBBASE}/speeches && mkdir ${WEBDIR}/${WEBBASE}/speeches
 | 
					      # old stuff
 | 
				
			||||||
 | 
					      # rm -rf ${WEBDIR}/${WEBBASE}/speeches && mkdir ${WEBDIR}/${WEBBASE}/speeches
 | 
				
			||||||
 | 
					      # cp ${SPEECHESDIR}/*.pdf ${WEBDIR}/${WEBBASE}/speeches
 | 
				
			||||||
 | 
					      # git describe > ${WEBDIR}/${WEBBASE}/man/VERSION
 | 
				
			||||||
 | 
					
 | 
				
			||||||
      cp ${MAN1DSTDIR}/*.html ${WEBDIR}/${WEBBASE}/man/man1
 | 
					      cp ${MAN1DSTDIR}/*.html ${WEBMAN}/man1 
 | 
				
			||||||
      cp ${MAN7DSTDIR}/*.html ${WEBDIR}/${WEBBASE}/man/man7
 | 
					      cp ${MAN7DSTDIR}/*.html ${WEBMAN}/man7
 | 
				
			||||||
      cp ${SPEECHESDIR}/*.pdf ${WEBDIR}/${WEBBASE}/speeches
 | 
					 | 
				
			||||||
      
 | 
					      
 | 
				
			||||||
      git describe > ${WEBDIR}/${WEBBASE}/man/VERSION
 | 
					 | 
				
			||||||
      cd ${WEBDIR} && git add ${WEBBASE}
 | 
					      cd ${WEBDIR} && git add ${WEBBASE}
 | 
				
			||||||
      cd ${WEBDIR} && git commit -m "cdist update" ${WEBBASE} ${WEBPAGE}
 | 
					      cd ${WEBDIR} && git commit -m "cdist update" ${WEBBASE} ${WEBPAGE}
 | 
				
			||||||
      cd ${WEBDIR} && make pub
 | 
					      cd ${WEBDIR} && make pub
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -49,7 +49,7 @@ if grep -q ^Fedora /etc/redhat-release 2>/dev/null; then
 | 
				
			||||||
   exit 0
 | 
					   exit 0
 | 
				
			||||||
fi
 | 
					fi
 | 
				
			||||||
 | 
					
 | 
				
			||||||
# CentOS is also based on Redhat, this return before redhat!
 | 
					# CentOS is also based on Redhat, thus return before redhat!
 | 
				
			||||||
if grep -q ^CentOS /etc/redhat-release 2>/dev/null; then
 | 
					if grep -q ^CentOS /etc/redhat-release 2>/dev/null; then
 | 
				
			||||||
    echo centos
 | 
					    echo centos
 | 
				
			||||||
    exit 0
 | 
					    exit 0
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -26,12 +26,18 @@ else
 | 
				
			||||||
   file="/$__object_id"
 | 
					   file="/$__object_id"
 | 
				
			||||||
fi
 | 
					fi
 | 
				
			||||||
 | 
					
 | 
				
			||||||
regex=$(cat "$__object/parameter/line")
 | 
					if [ -f "$__object/parameter/regex" ]; then
 | 
				
			||||||
 | 
					    regex=$(cat "$__object/parameter/regex")
 | 
				
			||||||
 | 
					else
 | 
				
			||||||
 | 
					    wrap=$(cat "$__object/parameter/line")
 | 
				
			||||||
 | 
					    regex="^$wrap\$"
 | 
				
			||||||
 | 
					fi
 | 
				
			||||||
 | 
					
 | 
				
			||||||
if [ -f "$file" ]; then
 | 
					if [ -f "$file" ]; then
 | 
				
			||||||
   # sh -e is our environment, we know what we do,
 | 
					   # sh -e is our environment, we know what we do,
 | 
				
			||||||
   # skip error detection for now
 | 
					   # skip error detection for now
 | 
				
			||||||
   set +e
 | 
					   set +e
 | 
				
			||||||
   grep -q "^$regex\$" "$file"
 | 
					   grep -q "$regex" "$file"
 | 
				
			||||||
   if [ $? -eq 1 ]; then
 | 
					   if [ $? -eq 1 ]; then
 | 
				
			||||||
      echo "NOTFOUND"
 | 
					      echo "NOTFOUND"
 | 
				
			||||||
   else
 | 
					   else
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -25,7 +25,9 @@ OPTIONAL PARAMETERS
 | 
				
			||||||
file::
 | 
					file::
 | 
				
			||||||
   If supplied, use this as the destination file.
 | 
					   If supplied, use this as the destination file.
 | 
				
			||||||
   Otherwise the object_id is used.
 | 
					   Otherwise the object_id is used.
 | 
				
			||||||
 | 
					regex::
 | 
				
			||||||
 | 
					   If supplied, search for this regex.
 | 
				
			||||||
 | 
					   Otherwise entire line must be matched.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
EXAMPLES
 | 
					EXAMPLES
 | 
				
			||||||
--------
 | 
					--------
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -1 +1,2 @@
 | 
				
			||||||
file
 | 
					file
 | 
				
			||||||
 | 
					regex
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -27,4 +27,4 @@ require="__package/python-software-properties" \
 | 
				
			||||||
   --source "$__type/files/remove-apt-repository" \
 | 
					   --source "$__type/files/remove-apt-repository" \
 | 
				
			||||||
   --mode 0755
 | 
					   --mode 0755
 | 
				
			||||||
 | 
					
 | 
				
			||||||
require="$__self" __apt_update_index
 | 
					require="$__object_name" __apt_update_index
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -38,5 +38,5 @@ if [ -f "$__object/parameter/comment" ]; then
 | 
				
			||||||
fi
 | 
					fi
 | 
				
			||||||
echo "$entry" >> "$__object/parameter/entry"
 | 
					echo "$entry" >> "$__object/parameter/entry"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
require="$__self" __autofs_master
 | 
					require="$__object_name" __autofs_master
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -24,7 +24,7 @@ if [ ! -f "$__object/parameter/header" ]; then
 | 
				
			||||||
fi
 | 
					fi
 | 
				
			||||||
 | 
					
 | 
				
			||||||
[ -d "$__object/files" ] || mkdir "$__object/files"
 | 
					[ -d "$__object/files" ] || mkdir "$__object/files"
 | 
				
			||||||
require="$__self" __file /etc/auto.master --source "$__object/files/auto.master" \
 | 
					require="$__object_name" __file /etc/auto.master --source "$__object/files/auto.master" \
 | 
				
			||||||
   --mode 644 \
 | 
					   --mode 644 \
 | 
				
			||||||
   --owner root \
 | 
					   --owner root \
 | 
				
			||||||
   --group root
 | 
					   --group root
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -49,4 +49,4 @@ for property in $(ls .); do
 | 
				
			||||||
   fi
 | 
					   fi
 | 
				
			||||||
done
 | 
					done
 | 
				
			||||||
 | 
					
 | 
				
			||||||
require="$__self" __package_$type "$@"
 | 
					require="$__object_name" __package_$type "$@"
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
							
								
								
									
										31
									
								
								conf/type/__package_luarocks/explorer/pkg_status
									
										
									
									
									
										Executable file
									
								
							
							
						
						
									
										31
									
								
								conf/type/__package_luarocks/explorer/pkg_status
									
										
									
									
									
										Executable file
									
								
							| 
						 | 
					@ -0,0 +1,31 @@
 | 
				
			||||||
 | 
					#!/bin/sh
 | 
				
			||||||
 | 
					#
 | 
				
			||||||
 | 
					# 2012 SwellPath, Inc.
 | 
				
			||||||
 | 
					# Christian G. Warden <cwarden@xerus.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 status of a rock
 | 
				
			||||||
 | 
					#
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					if [ -f "$__object/parameter/name" ]; then
 | 
				
			||||||
 | 
					   name="$(cat "$__object/parameter/name")"
 | 
				
			||||||
 | 
					else
 | 
				
			||||||
 | 
					   name="$__object_id"
 | 
				
			||||||
 | 
					fi
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# Accept luarocks failing if package is not known/installed
 | 
				
			||||||
 | 
					luarocks list "$name" | egrep -A1 "^$name$" || exit 0
 | 
				
			||||||
							
								
								
									
										52
									
								
								conf/type/__package_luarocks/gencode-remote
									
										
									
									
									
										Executable file
									
								
							
							
						
						
									
										52
									
								
								conf/type/__package_luarocks/gencode-remote
									
										
									
									
									
										Executable file
									
								
							| 
						 | 
					@ -0,0 +1,52 @@
 | 
				
			||||||
 | 
					#!/bin/sh
 | 
				
			||||||
 | 
					#
 | 
				
			||||||
 | 
					# 2012 SwellPath, Inc.
 | 
				
			||||||
 | 
					# Christian G. Warden <cwarden@xerus.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/>.
 | 
				
			||||||
 | 
					#
 | 
				
			||||||
 | 
					#
 | 
				
			||||||
 | 
					# Manage LuaRocks packages
 | 
				
			||||||
 | 
					#
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					if [ -f "$__object/parameter/name" ]; then
 | 
				
			||||||
 | 
					   name="$(cat "$__object/parameter/name")"
 | 
				
			||||||
 | 
					else
 | 
				
			||||||
 | 
					   name="$__object_id"
 | 
				
			||||||
 | 
					fi
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					state="$(cat "$__object/parameter/state")"
 | 
				
			||||||
 | 
					is_installed="$(grep "(installed)" "$__object/explorer/pkg_status" || true)"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					case "$state" in
 | 
				
			||||||
 | 
					   installed)
 | 
				
			||||||
 | 
					      # Install only if non-existent
 | 
				
			||||||
 | 
					      if [ -z "$is_installed" ]; then
 | 
				
			||||||
 | 
					         echo luarocks install \"$name\"
 | 
				
			||||||
 | 
					      fi
 | 
				
			||||||
 | 
					   ;;
 | 
				
			||||||
 | 
					   removed)
 | 
				
			||||||
 | 
					      # Remove only if existent
 | 
				
			||||||
 | 
					      if [ -n "$is_installed" ]; then
 | 
				
			||||||
 | 
					         echo luarocks remove \"$name\"
 | 
				
			||||||
 | 
					      fi
 | 
				
			||||||
 | 
					   ;;
 | 
				
			||||||
 | 
					   *)
 | 
				
			||||||
 | 
					      echo "Unknown state: $state" >&2
 | 
				
			||||||
 | 
					      exit 1
 | 
				
			||||||
 | 
					   ;;
 | 
				
			||||||
 | 
					esac
 | 
				
			||||||
							
								
								
									
										49
									
								
								conf/type/__package_luarocks/man.text
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										49
									
								
								conf/type/__package_luarocks/man.text
									
										
									
									
									
										Normal file
									
								
							| 
						 | 
					@ -0,0 +1,49 @@
 | 
				
			||||||
 | 
					cdist-type__package_luarocks(7)
 | 
				
			||||||
 | 
					==============================
 | 
				
			||||||
 | 
					Christian G. Warden <cwarden@xerus.org>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					NAME
 | 
				
			||||||
 | 
					----
 | 
				
			||||||
 | 
					cdist-type__package_luarocks - Manage luarocks packages
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					DESCRIPTION
 | 
				
			||||||
 | 
					-----------
 | 
				
			||||||
 | 
					LuaRocks is a deployment and management system for Lua modules.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					REQUIRED PARAMETERS
 | 
				
			||||||
 | 
					-------------------
 | 
				
			||||||
 | 
					state::
 | 
				
			||||||
 | 
					   Either "installed" or "removed".
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					OPTIONAL PARAMETERS
 | 
				
			||||||
 | 
					-------------------
 | 
				
			||||||
 | 
					name::
 | 
				
			||||||
 | 
					   If supplied, use the name and not the object id as the package name.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					EXAMPLES
 | 
				
			||||||
 | 
					--------
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					--------------------------------------------------------------------------------
 | 
				
			||||||
 | 
					# Ensure luasocket is installed
 | 
				
			||||||
 | 
					__package_luarocks luasocket --state installed
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# Remove package
 | 
				
			||||||
 | 
					__package_luarocks luasocket --state removed
 | 
				
			||||||
 | 
					--------------------------------------------------------------------------------
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					SEE ALSO
 | 
				
			||||||
 | 
					--------
 | 
				
			||||||
 | 
					- cdist-type(7)
 | 
				
			||||||
 | 
					- cdist-type__package(7)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					COPYING
 | 
				
			||||||
 | 
					-------
 | 
				
			||||||
 | 
					Copyright \(C) 2012 SwellPath, Inc. Free use of this software is
 | 
				
			||||||
 | 
					granted under the terms of the GNU General Public License version 3 (GPLv3).
 | 
				
			||||||
							
								
								
									
										23
									
								
								conf/type/__package_luarocks/manifest
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										23
									
								
								conf/type/__package_luarocks/manifest
									
										
									
									
									
										Normal file
									
								
							| 
						 | 
					@ -0,0 +1,23 @@
 | 
				
			||||||
 | 
					#!/bin/sh
 | 
				
			||||||
 | 
					#
 | 
				
			||||||
 | 
					# 2012 SwellPath, Inc.
 | 
				
			||||||
 | 
					# Christian G. Warden <cwarden@xerus.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/>.
 | 
				
			||||||
 | 
					#
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					__package luarocks --state installed
 | 
				
			||||||
 | 
					__package make --state installed
 | 
				
			||||||
							
								
								
									
										1
									
								
								conf/type/__package_luarocks/parameter/optional
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										1
									
								
								conf/type/__package_luarocks/parameter/optional
									
										
									
									
									
										Normal file
									
								
							| 
						 | 
					@ -0,0 +1 @@
 | 
				
			||||||
 | 
					name
 | 
				
			||||||
							
								
								
									
										1
									
								
								conf/type/__package_luarocks/parameter/required
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										1
									
								
								conf/type/__package_luarocks/parameter/required
									
										
									
									
									
										Normal file
									
								
							| 
						 | 
					@ -0,0 +1 @@
 | 
				
			||||||
 | 
					state
 | 
				
			||||||
| 
						 | 
					@ -38,4 +38,4 @@ if [ ! -f "$__object/parameter/size" ]; then
 | 
				
			||||||
fi
 | 
					fi
 | 
				
			||||||
 | 
					
 | 
				
			||||||
# pull in the type that actually does something with the above parameters
 | 
					# pull in the type that actually does something with the above parameters
 | 
				
			||||||
require="$__self" __partition_msdos_apply
 | 
					require="$__object_name" __partition_msdos_apply
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -24,7 +24,7 @@
 | 
				
			||||||
if [ -f "$__object/parameter/name" ]; then
 | 
					if [ -f "$__object/parameter/name" ]; then
 | 
				
			||||||
   name="$(cat "$__object/parameter/name")"
 | 
					   name="$(cat "$__object/parameter/name")"
 | 
				
			||||||
else
 | 
					else
 | 
				
			||||||
   name="/$__object_id"
 | 
					   name="$__object_id"
 | 
				
			||||||
fi
 | 
					fi
 | 
				
			||||||
 | 
					
 | 
				
			||||||
pgrep -x -f "$name" || true
 | 
					pgrep -x -f "$name" || true
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -50,6 +50,10 @@ __process /usr/sbin/sshd --state stopped --stop "/etc/rc.d/sshd stop"
 | 
				
			||||||
# Ensure cups is running, which runs with -C ...:
 | 
					# Ensure cups is running, which runs with -C ...:
 | 
				
			||||||
__process cups --start "/etc/rc.d/cups start" --state running \
 | 
					__process cups --start "/etc/rc.d/cups start" --state running \
 | 
				
			||||||
   --name "/usr/sbin/cupsd -C /etc/cups/cupsd.conf"
 | 
					   --name "/usr/sbin/cupsd -C /etc/cups/cupsd.conf"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# Ensure rpc.statd is running (which usually runs with -L) using a regexp
 | 
				
			||||||
 | 
					__process rpcstatd --state running --start "/etc/init.d/statd start" \
 | 
				
			||||||
 | 
					    --name "rpc.statd.*"
 | 
				
			||||||
--------------------------------------------------------------------------------
 | 
					--------------------------------------------------------------------------------
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -1,8 +1,16 @@
 | 
				
			||||||
2.0.4:
 | 
					2.0.5:
 | 
				
			||||||
 | 
						* New Type: __package_luarocks (Christian G. Warden)
 | 
				
			||||||
 | 
						* Feature: __addifnosuchline supports matching on regular expressions (dan)
 | 
				
			||||||
 | 
						* Documentation: (Re)write of the tutorial
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					2.0.4: 2011-11-18
 | 
				
			||||||
	* Bugfix core: Remove traceback when sending SIGINT (aka Ctrl-C)
 | 
						* Bugfix core: Remove traceback when sending SIGINT (aka Ctrl-C)
 | 
				
			||||||
 | 
						* Bugfix core: Accept parameters with - in the name (Steven Armstrong)
 | 
				
			||||||
	* Cleanup: __object_fq variable removed (never used)
 | 
						* Cleanup: __object_fq variable removed (never used)
 | 
				
			||||||
	* Cleanup: Environment variable __self DEPRECATED, use __object_name instead
 | 
						* Cleanup: Environment variable __self DEPRECATED, use __object_name instead
 | 
				
			||||||
	* Cleanup: Environment variable __self scheduled for removal in cdist 2.1
 | 
						* Cleanup: Environment variable __self scheduled for removal in cdist 2.1
 | 
				
			||||||
 | 
						* Documentation: Many examples for use of __remote_* (Steven Armstrong)
 | 
				
			||||||
 | 
						* Feature: Automatically require all used objects (Steven Armstrong)
 | 
				
			||||||
	* New Type: __cron (Steven Armstrong)
 | 
						* New Type: __cron (Steven Armstrong)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
2.0.3: 2011-10-18
 | 
					2.0.3: 2011-10-18
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -1,35 +1,50 @@
 | 
				
			||||||
#!/bin/sh -e
 | 
					#!/bin/sh
 | 
				
			||||||
 | 
					# Nico Schottelius
 | 
				
			||||||
 | 
					
 | 
				
			||||||
files="bin/cdist-config doc/changelog"
 | 
					files="doc/changelog lib/cdist/__init__.py"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
# Stuff to take care of when doing a release
 | 
					# Stuff to take care of when doing a release
 | 
				
			||||||
echo "Preparing next release"
 | 
					echo "Preparing next release"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
# Ensure documentation builds cleanly
 | 
					# Ensure documentation builds cleanly
 | 
				
			||||||
./build.sh clean && ./build.sh man
 | 
					echo "Testing documentation..."
 | 
				
			||||||
 | 
					./build clean && ./build man || exit 1
 | 
				
			||||||
 | 
					
 | 
				
			||||||
# get version
 | 
					# get version
 | 
				
			||||||
version=$(awk -F'=' '/^__cdist_version/ { print $2 }' bin/cdist-config | sed 's/"//g')
 | 
					changelog_version=$(head -n1 doc/changelog | sed 's/:.*//')
 | 
				
			||||||
 | 
					#git_version=$(git describe)
 | 
				
			||||||
 | 
					lib_version=$(grep ^VERSION lib/cdist/__init__.py | sed -e 's/.*= //' -e 's/"//g')
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					echo "Ensure you fixed/prepared version files: $files"
 | 
				
			||||||
 | 
					echo "changelog: $changelog_version"
 | 
				
			||||||
 | 
					#echo "git: $git_version"
 | 
				
			||||||
 | 
					echo "lib: $lib_version"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					if [ "$lib_version" != "$changelog_version" ]; then
 | 
				
			||||||
 | 
					    echo "Messed up versions, not releasing"
 | 
				
			||||||
 | 
					    exit 1
 | 
				
			||||||
 | 
					else
 | 
				
			||||||
 | 
					    echo "Versions are sane, continuing"
 | 
				
			||||||
 | 
					fi
 | 
				
			||||||
 | 
					echo "Press enter to continue"
 | 
				
			||||||
 | 
					read wait
 | 
				
			||||||
 | 
					version=$lib_version
 | 
				
			||||||
 | 
					
 | 
				
			||||||
# get target branch
 | 
					# get target branch
 | 
				
			||||||
branch=${version%.?}
 | 
					branch=${version%.?}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
# adjust version and release date
 | 
					 | 
				
			||||||
vi $files
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
# Commit stuff
 | 
					 | 
				
			||||||
git commit $files
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
# add tag
 | 
					# add tag
 | 
				
			||||||
printf "Enter description for %s>" "$version"
 | 
					printf "Enter tag description for %s> " "$version"
 | 
				
			||||||
read tagmessage
 | 
					read tagmessage
 | 
				
			||||||
git tag "$version" -m "$tagmessage"
 | 
					git tag "$version" -m "$tagmessage"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
# Import into current version branch
 | 
					# Import into current version branch
 | 
				
			||||||
 | 
					echo "git merge into $branch"
 | 
				
			||||||
git checkout $branch
 | 
					git checkout $branch
 | 
				
			||||||
git merge master
 | 
					git merge master
 | 
				
			||||||
git checkout master
 | 
					git checkout master
 | 
				
			||||||
 | 
					
 | 
				
			||||||
# Publish manpages and sourcecode
 | 
					# Publish manpages and sourcecode
 | 
				
			||||||
./build.sh web
 | 
					echo "publising doc/ and code/"
 | 
				
			||||||
./build.sh pub
 | 
					./build web
 | 
				
			||||||
 | 
					./build pub
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -13,6 +13,10 @@ TESTS
 | 
				
			||||||
- multiple defines of object:
 | 
					- multiple defines of object:
 | 
				
			||||||
   - fail if different parameters
 | 
					   - fail if different parameters
 | 
				
			||||||
   - succeed if same parameters
 | 
					   - succeed if same parameters
 | 
				
			||||||
 | 
					- verify that all env variables in doc/man/cdist-reference.text.sh
 | 
				
			||||||
 | 
					    exist in the right stages
 | 
				
			||||||
 | 
					- test DependencyResolver
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
USER INTERFACE
 | 
					USER INTERFACE
 | 
				
			||||||
--------------
 | 
					--------------
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -1,6 +1,10 @@
 | 
				
			||||||
 | 
					- check speech publishing
 | 
				
			||||||
 | 
					    - and speeches, which may be outdated as well
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					- write tutorial
 | 
				
			||||||
 | 
					
 | 
				
			||||||
- Fix / rewrite cdist-quickstart
 | 
					- Fix / rewrite cdist-quickstart
 | 
				
			||||||
 | 
					
 | 
				
			||||||
- write tutorial!!!!!!!!!
 | 
					 | 
				
			||||||
   - like ccollect!
 | 
					   - like ccollect!
 | 
				
			||||||
      - include ssh control master!
 | 
					      - include ssh control master!
 | 
				
			||||||
   - add local/ hint (and add to git)
 | 
					   - add local/ hint (and add to git)
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -1,3 +1,10 @@
 | 
				
			||||||
 | 
					autorequire:
 | 
				
			||||||
 | 
					   - objects defined in type manifests should be automatically prerequisites of the current object
 | 
				
			||||||
 | 
					   - __foo/some-id
 | 
				
			||||||
 | 
					      __other other-id --state present
 | 
				
			||||||
 | 
					      => require="__other/other-id" __foo/some-id
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
metaparameters:
 | 
					metaparameters:
 | 
				
			||||||
   - steal the metaparameters from puppet:
 | 
					   - steal the metaparameters from puppet:
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -188,9 +188,6 @@ __object_name::
 | 
				
			||||||
__target_host::
 | 
					__target_host::
 | 
				
			||||||
   The host we are deploying to.
 | 
					   The host we are deploying to.
 | 
				
			||||||
   Available for: initial manifest, type manifest, type gencode
 | 
					   Available for: initial manifest, type manifest, type gencode
 | 
				
			||||||
__target_user::
 | 
					 | 
				
			||||||
   User to use for authentication on remote host.
 | 
					 | 
				
			||||||
   Currently static in core.
 | 
					 | 
				
			||||||
__type::
 | 
					__type::
 | 
				
			||||||
   Path to the current type.
 | 
					   Path to the current type.
 | 
				
			||||||
   Available for: type manifest, type gencode
 | 
					   Available for: type manifest, type gencode
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -8,38 +8,137 @@ NAME
 | 
				
			||||||
cdist-tutorial - a guided introduction into cdist
 | 
					cdist-tutorial - a guided introduction into cdist
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					INTRODUCTION
 | 
				
			||||||
 | 
					------------
 | 
				
			||||||
 | 
					This tutorial is aimed at people learning cdist and shows
 | 
				
			||||||
 | 
					typical approaches as well as gives an easy start into
 | 
				
			||||||
 | 
					the world of configuration management.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
PREPARING YOUR MACHINE / SETUP
 | 
					This tutorial assumes you are configuring **localhost**, because
 | 
				
			||||||
------------------------------
 | 
					it is always available. Just replace **localhost** with your target
 | 
				
			||||||
 | 
					host for real life usage.
 | 
				
			||||||
- ensure sshd is running on the target host:
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
ssh target_host
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
- ensure you can login as root
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
ssh root@target host
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
- ensure login as root works without keys
 | 
					 | 
				
			||||||
(see ssh... manpage)
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
cdist will do a lot of requests to the target
 | 
					 | 
				
			||||||
host, thus you'll have to enter your password
 | 
					 | 
				
			||||||
many times, if you don't do this :-)
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
- speedup processing with ControlMaster option of
 | 
					 | 
				
			||||||
ssh
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
YOUR FIRST CONFIGURATION
 | 
					
 | 
				
			||||||
------------------------
 | 
					QUICK START - GET YOUR HANDS DIRTY NOW
 | 
				
			||||||
 | 
					--------------------------------------
 | 
				
			||||||
 | 
					For those who just want to configure a system with the
 | 
				
			||||||
 | 
					cdist configuration management and do not need (or want)
 | 
				
			||||||
 | 
					to understand everything.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					Cdist uses **ssh** for communication and transportation
 | 
				
			||||||
 | 
					and usually logs into the **target host** as the
 | 
				
			||||||
 | 
					**root** user. So you need to configure the **ssh server**
 | 
				
			||||||
 | 
					of the target host to allow root logins: Edit
 | 
				
			||||||
 | 
					the file **/etc/ssh/sshd_config** and add one of the following
 | 
				
			||||||
 | 
					lines:
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					--------------------------------------------------------------------------------
 | 
				
			||||||
 | 
					# Allow login only via public key
 | 
				
			||||||
 | 
					PermitRootLogin without-password
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# Allow login via password and public key
 | 
				
			||||||
 | 
					PermitRootLogin yes
 | 
				
			||||||
 | 
					--------------------------------------------------------------------------------
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					As cdist uses ssh intensively, it is recommended to setup authentication
 | 
				
			||||||
 | 
					with public keys:
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					--------------------------------------------------------------------------------
 | 
				
			||||||
 | 
					# Generate pubkey pair as a normal user
 | 
				
			||||||
 | 
					ssh-keygen
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# Copy pubkey over to target host
 | 
				
			||||||
 | 
					ssh-copy-id root@localhost
 | 
				
			||||||
 | 
					--------------------------------------------------------------------------------
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					Have a look at ssh-agent(1) and ssh-add(1) on how to cache the password for
 | 
				
			||||||
 | 
					your public key.  Usually it looks like this:
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					--------------------------------------------------------------------------------
 | 
				
			||||||
 | 
					# Start agent and export variables
 | 
				
			||||||
 | 
					eval `ssh-agent`
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# Add keys (requires password for every identity file)
 | 
				
			||||||
 | 
					ssh-add
 | 
				
			||||||
 | 
					--------------------------------------------------------------------------------
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					At this point you should be able to ***ssh root@localhost*** without
 | 
				
			||||||
 | 
					re-entering the password. If something failed until here, ensure that
 | 
				
			||||||
 | 
					all steps went successfully and you have read and understood the
 | 
				
			||||||
 | 
					documentation.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					As soon as you are able to login without passwort to the target host,
 | 
				
			||||||
 | 
					we can use cdist to configure it. You can copy and paste the following
 | 
				
			||||||
 | 
					code into your shell to get started and configure localhost:
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					--------------------------------------------------------------------------------
 | 
				
			||||||
 | 
					# Get cdist
 | 
				
			||||||
 | 
					git clone git://git.schottelius.org/cdist
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# Create manifest (maps configuration to host(s)
 | 
				
			||||||
 | 
					cd cdist
 | 
				
			||||||
 | 
					echo '__file /etc/cdist-configured' > conf/manifest/init
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# Configure localhost in verbose mode
 | 
				
			||||||
 | 
					./bin/cdist config -v localhost
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# Find out that cdist created /etc/cdist-configured
 | 
				
			||||||
 | 
					ls -l /etc/cdist-configured
 | 
				
			||||||
 | 
					--------------------------------------------------------------------------------
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					That's it, you've successfully used cdist to configure your first host!
 | 
				
			||||||
 | 
					Continue reading the next sections, to understand what you did and how
 | 
				
			||||||
 | 
					to create a more sophisticated configuration.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					The file 'conf/manifest/init' is usually the entry point for cdist,
 | 
				
			||||||
 | 
					to find out what to configure on which host. All manifests are
 | 
				
			||||||
 | 
					essentially shell scripts. Every manifest can use the types known to
 | 
				
			||||||
 | 
					cdist, which are usually underline prefixed (__).
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
DEFINE STATE IN THE INITAL MANIFEST
 | 
					 | 
				
			||||||
-----------------------------------
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
The initial manifest is used to map
 | 
					DEFINE STATE IN THE INITIAL MANIFEST
 | 
				
			||||||
configurations to a host.
 | 
					------------------------------------
 | 
				
			||||||
 | 
					The **initial manifest** is the entry point for cdist to find out, which
 | 
				
			||||||
 | 
					**objects** to configure on the selected host. Objects are instances of
 | 
				
			||||||
 | 
					**types**, like in object orientated programming. An object is represented
 | 
				
			||||||
 | 
					by the type + slash + object name: ***__file/etc/cdist-configured*** is an
 | 
				
			||||||
 | 
					object of the type ***__file*** with the name ***etc/cdist-configured***.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					Cdist searches for the initial manifest at **conf/manifest/init** and
 | 
				
			||||||
 | 
					executes it as a shell script using **/bin/sh -e**.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					Within this initial manifest, you define, which objects should be
 | 
				
			||||||
 | 
					created on which host. To distinguish between hosts, you can use the
 | 
				
			||||||
 | 
					environment variable **__target_host**. Let's have a look at a simple
 | 
				
			||||||
 | 
					example:
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					--------------------------------------------------------------------------------
 | 
				
			||||||
 | 
					__file /etc/cdist-configured
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					case "$__target_host" in
 | 
				
			||||||
 | 
					   localhost)
 | 
				
			||||||
 | 
					        __directory /home/services/kvm-vm --parents yes
 | 
				
			||||||
 | 
					   ;;
 | 
				
			||||||
 | 
					esac
 | 
				
			||||||
 | 
					--------------------------------------------------------------------------------
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					This manifest says: Independent of the host, always create the (empty) file
 | 
				
			||||||
 | 
					***/etc/cdist-configured***, but create the directory ***/home/services/kvm-vm***,
 | 
				
			||||||
 | 
					including all parent directories, only on the host ***localhost***.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					As you can see, there is no magic involved, the manifest is simple shell code that
 | 
				
			||||||
 | 
					utilises cdist types.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					PARTS BELOW HERE ARE TO-BE-DONE
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					MORE ABOUT TYPES AND OBJECTS
 | 
				
			||||||
 | 
					----------------------------
 | 
				
			||||||
 | 
					All available types in cdist can be called like normal executables. 
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
USING SOME BASIC TYPES
 | 
					USING SOME BASIC TYPES
 | 
				
			||||||
----------------------
 | 
					----------------------
 | 
				
			||||||
| 
						 | 
					@ -71,128 +170,14 @@ __debug::
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					BRANCHES IN HERE?
 | 
				
			||||||
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
INTRODUCTION
 | 
					 | 
				
			||||||
------------
 | 
					------------
 | 
				
			||||||
This tutorial is aimed at people learning cdist and shows
 | 
					 | 
				
			||||||
typical approaches as well as gives an easy start into
 | 
					 | 
				
			||||||
the world of configuration management.
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
This tutorial assumes you are configuring **localhost**, because
 | 
					TUNING CDIST
 | 
				
			||||||
it is always available. Just repace **localhost** with your target
 | 
					------------
 | 
				
			||||||
host for real life usage.
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					- speedup processing with ControlMaster option of
 | 
				
			||||||
 | 
					ssh
 | 
				
			||||||
QUICK START
 | 
					 | 
				
			||||||
-----------
 | 
					 | 
				
			||||||
For those who just want to configure a system with the
 | 
					 | 
				
			||||||
cdist configuration management and do not need (or want)
 | 
					 | 
				
			||||||
to understand everything.
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
Cdist uses **ssh** for communication and transportation
 | 
					 | 
				
			||||||
and usually logs into the **target host** as the
 | 
					 | 
				
			||||||
**root** user. So you need to configure the **ssh server**
 | 
					 | 
				
			||||||
of the target host to allow root logins: Edit
 | 
					 | 
				
			||||||
the file **/etc/ssh/sshd_config** and add one of the following
 | 
					 | 
				
			||||||
lines:
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
--------------------------------------------------------------------------------
 | 
					 | 
				
			||||||
# Allow login only via public key
 | 
					 | 
				
			||||||
PermitRootLogin without-password
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
# Allow login via password and public key
 | 
					 | 
				
			||||||
PermitRootLogin yes
 | 
					 | 
				
			||||||
--------------------------------------------------------------------------------
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
As cdist uses ssh intensively, it is recommended to setup authentication
 | 
					 | 
				
			||||||
with public keys:
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
--------------------------------------------------------------------------------
 | 
					 | 
				
			||||||
# Generate pubkey pair as a normal user
 | 
					 | 
				
			||||||
ssh-keygen
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
# Copy pubkey over to target host
 | 
					 | 
				
			||||||
ssh-copy-id root@localhost
 | 
					 | 
				
			||||||
--------------------------------------------------------------------------------
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
As soon as you are able to login without passwort to the target host,
 | 
					 | 
				
			||||||
we can use cdist, to configure it. You can copy and paste the following
 | 
					 | 
				
			||||||
code into your shell to get started and configure localhost:
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
--------------------------------------------------------------------------------
 | 
					 | 
				
			||||||
# Get cdist
 | 
					 | 
				
			||||||
git clone git://git.schottelius.org/cdist
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
# Create manifest (maps configuration to host(s)
 | 
					 | 
				
			||||||
cd cdist
 | 
					 | 
				
			||||||
echo '__file /etc/cdist-configured' > conf/manifest/init
 | 
					 | 
				
			||||||
chmod 0700 conf/manifest/init
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
# Configure localhost
 | 
					 | 
				
			||||||
./bin/cdist config localhost
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
# Find out that cdist created /etc/cdist-configured
 | 
					 | 
				
			||||||
ls -l /etc/cdist-configured
 | 
					 | 
				
			||||||
--------------------------------------------------------------------------------
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
The file 'conf/manifest/init' is usually the entry point for cdist,
 | 
					 | 
				
			||||||
to find out what to configure on which host. All manifests are
 | 
					 | 
				
			||||||
essentially shell scripts. Every manifest can use the types known to
 | 
					 | 
				
			||||||
cdist, which are usually underline prefixed (__).
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
SEE ALSO
 | 
					SEE ALSO
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -34,7 +34,7 @@ BANNER = """
 | 
				
			||||||
   "P'        ""         ""
 | 
					   "P'        ""         ""
 | 
				
			||||||
"""
 | 
					"""
 | 
				
			||||||
DOT_CDIST   = ".cdist"
 | 
					DOT_CDIST   = ".cdist"
 | 
				
			||||||
VERSION     = "2.0.3"
 | 
					VERSION     = "2.0.4"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
import os
 | 
					import os
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -75,6 +75,7 @@ class Emulator(object):
 | 
				
			||||||
        self.commandline()
 | 
					        self.commandline()
 | 
				
			||||||
        self.setup_object()
 | 
					        self.setup_object()
 | 
				
			||||||
        self.record_requirements()
 | 
					        self.record_requirements()
 | 
				
			||||||
 | 
					        self.record_auto_requirements()
 | 
				
			||||||
        self.log.debug("Finished %s %s" % (self.cdist_object.path, self.parameters))
 | 
					        self.log.debug("Finished %s %s" % (self.cdist_object.path, self.parameters))
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    def __init_log(self):
 | 
					    def __init_log(self):
 | 
				
			||||||
| 
						 | 
					@ -97,10 +98,10 @@ class Emulator(object):
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        for parameter in self.cdist_type.optional_parameters:
 | 
					        for parameter in self.cdist_type.optional_parameters:
 | 
				
			||||||
            argument = "--" + parameter
 | 
					            argument = "--" + parameter
 | 
				
			||||||
            parser.add_argument(argument, action='store', required=False)
 | 
					            parser.add_argument(argument, dest=parameter, action='store', required=False)
 | 
				
			||||||
        for parameter in self.cdist_type.required_parameters:
 | 
					        for parameter in self.cdist_type.required_parameters:
 | 
				
			||||||
            argument = "--" + parameter
 | 
					            argument = "--" + parameter
 | 
				
			||||||
            parser.add_argument(argument, action='store', required=True)
 | 
					            parser.add_argument(argument, dest=parameter, action='store', required=True)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        # If not singleton support one positional parameter
 | 
					        # If not singleton support one positional parameter
 | 
				
			||||||
        if not self.cdist_type.is_singleton:
 | 
					        if not self.cdist_type.is_singleton:
 | 
				
			||||||
| 
						 | 
					@ -181,3 +182,14 @@ class Emulator(object):
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        # Record / Append source
 | 
					        # Record / Append source
 | 
				
			||||||
        self.cdist_object.source.append(self.object_source)
 | 
					        self.cdist_object.source.append(self.object_source)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    def record_auto_requirements(self):
 | 
				
			||||||
 | 
					        """An object shall automatically depend on all objects that it defined in it's type manifest.
 | 
				
			||||||
 | 
					        """
 | 
				
			||||||
 | 
					        # __object_name is the name of the object whose type manifest is currenlty executed
 | 
				
			||||||
 | 
					        __object_name = os.environ.get('__object_name', None)
 | 
				
			||||||
 | 
					        if __object_name:
 | 
				
			||||||
 | 
					            _object = self.cdist_object.object_from_name(__object_name)
 | 
				
			||||||
 | 
					            # prevent circular dependencies
 | 
				
			||||||
 | 
					            if not _object.name in self.cdist_object.requirements:
 | 
				
			||||||
 | 
					                _object.requirements.append(self.cdist_object.name)
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -95,6 +95,12 @@ class Local(object):
 | 
				
			||||||
        """
 | 
					        """
 | 
				
			||||||
        assert isinstance(command, (list, tuple)), "list or tuple argument expected, got: %s" % command
 | 
					        assert isinstance(command, (list, tuple)), "list or tuple argument expected, got: %s" % command
 | 
				
			||||||
        self.log.debug("Local run: %s", command)
 | 
					        self.log.debug("Local run: %s", command)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        if env is None:
 | 
				
			||||||
 | 
					            env = os.environ.copy()
 | 
				
			||||||
 | 
					        # Export __target_host for use in __remote_{copy,exec} scripts
 | 
				
			||||||
 | 
					        env['__target_host'] = self.target_host
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        try:
 | 
					        try:
 | 
				
			||||||
            if return_output:
 | 
					            if return_output:
 | 
				
			||||||
                return subprocess.check_output(command, env=env).decode()
 | 
					                return subprocess.check_output(command, env=env).decode()
 | 
				
			||||||
| 
						 | 
					@ -114,7 +120,12 @@ class Local(object):
 | 
				
			||||||
        command.append(script)
 | 
					        command.append(script)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        self.log.debug("Local run script: %s", command)
 | 
					        self.log.debug("Local run script: %s", command)
 | 
				
			||||||
        if env:
 | 
					
 | 
				
			||||||
 | 
					        if env is None:
 | 
				
			||||||
 | 
					            env = os.environ.copy()
 | 
				
			||||||
 | 
					        # Export __target_host for use in __remote_{copy,exec} scripts
 | 
				
			||||||
 | 
					        env['__target_host'] = self.target_host
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        self.log.debug("Local run script env: %s", env)
 | 
					        self.log.debug("Local run script env: %s", env)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        try:
 | 
					        try:
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -91,7 +91,7 @@ class Remote(object):
 | 
				
			||||||
        self.rmdir(destination)
 | 
					        self.rmdir(destination)
 | 
				
			||||||
        command = self._copy.split()
 | 
					        command = self._copy.split()
 | 
				
			||||||
        command.extend(["-r", source, self.target_host + ":" + destination])
 | 
					        command.extend(["-r", source, self.target_host + ":" + destination])
 | 
				
			||||||
        self.run_command(command)
 | 
					        self._run_command(command)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    def run(self, command, env=None, return_output=False):
 | 
					    def run(self, command, env=None, return_output=False):
 | 
				
			||||||
        """Run the given command with the given environment on the remote side.
 | 
					        """Run the given command with the given environment on the remote side.
 | 
				
			||||||
| 
						 | 
					@ -102,9 +102,9 @@ class Remote(object):
 | 
				
			||||||
        cmd = self._exec.split()
 | 
					        cmd = self._exec.split()
 | 
				
			||||||
        cmd.append(self.target_host)
 | 
					        cmd.append(self.target_host)
 | 
				
			||||||
        cmd.extend(command)
 | 
					        cmd.extend(command)
 | 
				
			||||||
        return self.run_command(cmd, env=env, return_output=return_output)
 | 
					        return self._run_command(cmd, env=env, return_output=return_output)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    def run_command(self, command, env=None, return_output=False):
 | 
					    def _run_command(self, command, env=None, return_output=False):
 | 
				
			||||||
        """Run the given command with the given environment.
 | 
					        """Run the given command with the given environment.
 | 
				
			||||||
        Return the output as a string.
 | 
					        Return the output as a string.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -22,6 +22,7 @@
 | 
				
			||||||
import os
 | 
					import os
 | 
				
			||||||
import shutil
 | 
					import shutil
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					import cdist
 | 
				
			||||||
from cdist import test
 | 
					from cdist import test
 | 
				
			||||||
from cdist.exec import local
 | 
					from cdist.exec import local
 | 
				
			||||||
from cdist import emulator
 | 
					from cdist import emulator
 | 
				
			||||||
| 
						 | 
					@ -29,7 +30,6 @@ from cdist import core
 | 
				
			||||||
 | 
					
 | 
				
			||||||
local_base_path = test.cdist_base_path
 | 
					local_base_path = test.cdist_base_path
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					 | 
				
			||||||
class EmulatorTestCase(test.CdistTestCase):
 | 
					class EmulatorTestCase(test.CdistTestCase):
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    def setUp(self):
 | 
					    def setUp(self):
 | 
				
			||||||
| 
						 | 
					@ -88,3 +88,67 @@ class EmulatorTestCase(test.CdistTestCase):
 | 
				
			||||||
        emu = emulator.Emulator(argv)
 | 
					        emu = emulator.Emulator(argv)
 | 
				
			||||||
        emu.run()
 | 
					        emu.run()
 | 
				
			||||||
        # if we get here all is fine
 | 
					        # if we get here all is fine
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					import os.path as op
 | 
				
			||||||
 | 
					my_dir = op.abspath(op.dirname(__file__))
 | 
				
			||||||
 | 
					fixtures = op.join(my_dir, 'fixtures')
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					class AutoRequireEmulatorTestCase(test.CdistTestCase):
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    def setUp(self):
 | 
				
			||||||
 | 
					        self.temp_dir = self.mkdtemp()
 | 
				
			||||||
 | 
					        self.target_host = 'localhost'
 | 
				
			||||||
 | 
					        out_path = self.temp_dir
 | 
				
			||||||
 | 
					        _local_base_path = fixtures
 | 
				
			||||||
 | 
					        self.local = local.Local(self.target_host, _local_base_path, out_path)
 | 
				
			||||||
 | 
					        self.local.create_directories()
 | 
				
			||||||
 | 
					        self.local.link_emulator(cdist.test.cdist_exec_path)
 | 
				
			||||||
 | 
					        self.manifest = core.Manifest(self.target_host, self.local)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    def tearDown(self):
 | 
				
			||||||
 | 
					        shutil.rmtree(self.temp_dir)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    def test_autorequire(self):
 | 
				
			||||||
 | 
					        initial_manifest = os.path.join(self.local.manifest_path, "init")
 | 
				
			||||||
 | 
					        self.manifest.run_initial_manifest(initial_manifest)
 | 
				
			||||||
 | 
					        cdist_type = core.Type(self.local.type_path, '__saturn')
 | 
				
			||||||
 | 
					        cdist_object = core.Object(cdist_type, self.local.object_path, 'singleton')
 | 
				
			||||||
 | 
					        self.manifest.run_type_manifest(cdist_object)
 | 
				
			||||||
 | 
					        expected = ['__planet/Saturn', '__moon/Prometheus']
 | 
				
			||||||
 | 
					        self.assertEqual(sorted(cdist_object.requirements), sorted(expected))
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					class ArgumentsWithDashesTestCase(test.CdistTestCase):
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    def setUp(self):
 | 
				
			||||||
 | 
					        self.temp_dir = self.mkdtemp()
 | 
				
			||||||
 | 
					        self.target_host = 'localhost'
 | 
				
			||||||
 | 
					        out_path = self.temp_dir
 | 
				
			||||||
 | 
					        handle, self.script = self.mkstemp(dir=self.temp_dir)
 | 
				
			||||||
 | 
					        os.close(handle)
 | 
				
			||||||
 | 
					        _local_base_path = fixtures
 | 
				
			||||||
 | 
					        self.local = local.Local(self.target_host, _local_base_path, out_path)
 | 
				
			||||||
 | 
					        self.local.create_directories()
 | 
				
			||||||
 | 
					        self.local.link_emulator(test.cdist_exec_path)
 | 
				
			||||||
 | 
					        self.env = {
 | 
				
			||||||
 | 
					            'PATH': "%s:%s" % (self.local.bin_path, os.environ['PATH']),
 | 
				
			||||||
 | 
					            '__target_host': self.target_host,
 | 
				
			||||||
 | 
					            '__global': self.local.out_path,
 | 
				
			||||||
 | 
					            '__cdist_type_base_path': self.local.type_path, # for use in type emulator
 | 
				
			||||||
 | 
					            '__manifest': self.local.manifest_path,
 | 
				
			||||||
 | 
					            '__cdist_manifest': self.script,
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    def tearDown(self):
 | 
				
			||||||
 | 
					        shutil.rmtree(self.temp_dir)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    def test_arguments_with_dashes(self):
 | 
				
			||||||
 | 
					        argv = ['__arguments_with_dashes', 'some-id', '--with-dash', 'some value']
 | 
				
			||||||
 | 
					        os.environ.update(self.env)
 | 
				
			||||||
 | 
					        emu = emulator.Emulator(argv)
 | 
				
			||||||
 | 
					        emu.run()
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        cdist_type = core.Type(self.local.type_path, '__arguments_with_dashes')
 | 
				
			||||||
 | 
					        cdist_object = core.Object(cdist_type, self.local.object_path, 'some-id')
 | 
				
			||||||
 | 
					        self.assertTrue('with-dash' in cdist_object.parameters)
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
							
								
								
									
										3
									
								
								lib/cdist/test/emulator/fixtures/conf/manifest/init
									
										
									
									
									
										Executable file
									
								
							
							
						
						
									
										3
									
								
								lib/cdist/test/emulator/fixtures/conf/manifest/init
									
										
									
									
									
										Executable file
									
								
							| 
						 | 
					@ -0,0 +1,3 @@
 | 
				
			||||||
 | 
					#!/bin/sh
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					__saturn
 | 
				
			||||||
| 
						 | 
					@ -0,0 +1 @@
 | 
				
			||||||
 | 
					with-dash
 | 
				
			||||||
							
								
								
									
										8
									
								
								lib/cdist/test/emulator/fixtures/conf/type/__moon/manifest
									
										
									
									
									
										Executable file
									
								
							
							
						
						
									
										8
									
								
								lib/cdist/test/emulator/fixtures/conf/type/__moon/manifest
									
										
									
									
									
										Executable file
									
								
							| 
						 | 
					@ -0,0 +1,8 @@
 | 
				
			||||||
 | 
					#!/bin/sh
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					if [ -f "$__object/parameter/name" ]; then
 | 
				
			||||||
 | 
					   name="(cat "$__object/parameter/name")"
 | 
				
			||||||
 | 
					else
 | 
				
			||||||
 | 
					   name="$__object_id"
 | 
				
			||||||
 | 
					   echo "$name" > "$__object/parameter/name"
 | 
				
			||||||
 | 
					fi
 | 
				
			||||||
| 
						 | 
					@ -0,0 +1 @@
 | 
				
			||||||
 | 
					name
 | 
				
			||||||
| 
						 | 
					@ -0,0 +1 @@
 | 
				
			||||||
 | 
					planet
 | 
				
			||||||
							
								
								
									
										8
									
								
								lib/cdist/test/emulator/fixtures/conf/type/__planet/manifest
									
										
									
									
									
										Executable file
									
								
							
							
						
						
									
										8
									
								
								lib/cdist/test/emulator/fixtures/conf/type/__planet/manifest
									
										
									
									
									
										Executable file
									
								
							| 
						 | 
					@ -0,0 +1,8 @@
 | 
				
			||||||
 | 
					#!/bin/sh
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					if [ -f "$__object/parameter/name" ]; then
 | 
				
			||||||
 | 
					   name="(cat "$__object/parameter/name")"
 | 
				
			||||||
 | 
					else
 | 
				
			||||||
 | 
					   name="$__object_id"
 | 
				
			||||||
 | 
					   echo "$name" > "$__object/parameter/name"
 | 
				
			||||||
 | 
					fi
 | 
				
			||||||
| 
						 | 
					@ -0,0 +1 @@
 | 
				
			||||||
 | 
					name
 | 
				
			||||||
							
								
								
									
										4
									
								
								lib/cdist/test/emulator/fixtures/conf/type/__saturn/manifest
									
										
									
									
									
										Executable file
									
								
							
							
						
						
									
										4
									
								
								lib/cdist/test/emulator/fixtures/conf/type/__saturn/manifest
									
										
									
									
									
										Executable file
									
								
							| 
						 | 
					@ -0,0 +1,4 @@
 | 
				
			||||||
 | 
					#!/bin/sh
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					__planet Saturn
 | 
				
			||||||
 | 
					require="__planet/Saturn" __moon Prometheus --planet Saturn
 | 
				
			||||||
| 
						 | 
					@ -49,7 +49,7 @@ my_name="${0##*/}"
 | 
				
			||||||
mode="$1"; shift
 | 
					mode="$1"; shift
 | 
				
			||||||
 | 
					
 | 
				
			||||||
log() {
 | 
					log() {
 | 
				
			||||||
   #echo "$@" | logger -t "cdist-$my_name-$mode"
 | 
					   echo "$@" | logger -t "cdist-$my_name-$mode"
 | 
				
			||||||
   :
 | 
					   :
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					@ -112,7 +112,9 @@ fi
 | 
				
			||||||
 | 
					
 | 
				
			||||||
case "$mode" in
 | 
					case "$mode" in
 | 
				
			||||||
   exec)
 | 
					   exec)
 | 
				
			||||||
      code="$exec_prefix schroot -c $schroot_name -- $@"
 | 
					      # In exec mode the first argument is the __target_host which we already got from env. Get rid of it.
 | 
				
			||||||
 | 
					      shift
 | 
				
			||||||
 | 
					      code="$exec_prefix schroot -c $schroot_name -- sh -c '$@'"
 | 
				
			||||||
   ;;
 | 
					   ;;
 | 
				
			||||||
   copy)
 | 
					   copy)
 | 
				
			||||||
      # get directory for given chroot_name
 | 
					      # get directory for given chroot_name
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
							
								
								
									
										2
									
								
								other/examples/types/__ethz_dinfk_ldap/README
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										2
									
								
								other/examples/types/__ethz_dinfk_ldap/README
									
										
									
									
									
										Normal file
									
								
							| 
						 | 
					@ -0,0 +1,2 @@
 | 
				
			||||||
 | 
					This type is used in production in the ETH and utilises a template to generate
 | 
				
			||||||
 | 
					the config file.
 | 
				
			||||||
							
								
								
									
										46
									
								
								other/examples/types/__ethz_dinfk_ldap/files/nslcd.conf.template
									
										
									
									
									
										Executable file
									
								
							
							
						
						
									
										46
									
								
								other/examples/types/__ethz_dinfk_ldap/files/nslcd.conf.template
									
										
									
									
									
										Executable file
									
								
							| 
						 | 
					@ -0,0 +1,46 @@
 | 
				
			||||||
 | 
					#!/bin/sh
 | 
				
			||||||
 | 
					cat << DONE 
 | 
				
			||||||
 | 
					#
 | 
				
			||||||
 | 
					# D-INFK SANS MANAGED FILE
 | 
				
			||||||
 | 
					# ========================
 | 
				
			||||||
 | 
					#
 | 
				
			||||||
 | 
					# Do not change this file. Changes will be overwritten.
 | 
				
			||||||
 | 
					#
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# /etc/nslcd.conf
 | 
				
			||||||
 | 
					# nslcd configuration file. See nslcd.conf(5)
 | 
				
			||||||
 | 
					# for details.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# The user and group nslcd should run as.
 | 
				
			||||||
 | 
					uid nslcd
 | 
				
			||||||
 | 
					gid nslcd
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# The location at which the LDAP server(s) should be reachable.
 | 
				
			||||||
 | 
					uri ldaps://ldaps01.ethz.ch
 | 
				
			||||||
 | 
					uri ldaps://ldaps02.ethz.ch
 | 
				
			||||||
 | 
					uri ldaps://ldaps03.ethz.ch
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# The search base
 | 
				
			||||||
 | 
					base ou=${ou},ou=inf,ou=auth,o=ethz,c=ch
 | 
				
			||||||
 | 
					base passwd ou=users,ou=${ou},ou=inf,ou=auth,o=ethz,c=ch
 | 
				
			||||||
 | 
					base group ou=Group,ou=inf,ou=auth,o=ethz,c=ch
 | 
				
			||||||
 | 
					base netgroup ou=netgroup,ou=inf,ou=auth,o=ethz,c=ch
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					binddn cn=REPLACE,ou=ME,ou=WITH,ou=YOUR,o=DETAILS,c=ch
 | 
				
			||||||
 | 
					bindpw VERYSECRETPASSWORD
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# The LDAP protocol version to use.
 | 
				
			||||||
 | 
					#ldap_version 3
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# The DN to bind with for normal lookups.
 | 
				
			||||||
 | 
					#binddn cn=annonymous,dc=example,dc=net
 | 
				
			||||||
 | 
					#bindpw secret
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# SSL options
 | 
				
			||||||
 | 
					ssl on
 | 
				
			||||||
 | 
					tls_reqcert never
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# The search scope.
 | 
				
			||||||
 | 
					#scope sub
 | 
				
			||||||
 | 
					DONE
 | 
				
			||||||
							
								
								
									
										22
									
								
								other/examples/types/__ethz_dinfk_ldap/files/nsswitch.conf
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										22
									
								
								other/examples/types/__ethz_dinfk_ldap/files/nsswitch.conf
									
										
									
									
									
										Normal file
									
								
							| 
						 | 
					@ -0,0 +1,22 @@
 | 
				
			||||||
 | 
					#
 | 
				
			||||||
 | 
					# D-INFK SANS MANAGED FILE
 | 
				
			||||||
 | 
					# ========================
 | 
				
			||||||
 | 
					#
 | 
				
			||||||
 | 
					# Do not change this file. Changes will be overwritten.
 | 
				
			||||||
 | 
					#
 | 
				
			||||||
 | 
					# /etc/nsswitch.conf
 | 
				
			||||||
 | 
					#
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					passwd:      files ldap
 | 
				
			||||||
 | 
					group:       files ldap
 | 
				
			||||||
 | 
					shadow:      files ldap
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					hosts:       files dns
 | 
				
			||||||
 | 
					networks:    files
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					services:    db files
 | 
				
			||||||
 | 
					protocols:   db files
 | 
				
			||||||
 | 
					rpc:         db files
 | 
				
			||||||
 | 
					ethers:      db files
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					netgroup:    files ldap
 | 
				
			||||||
							
								
								
									
										39
									
								
								other/examples/types/__ethz_dinfk_ldap/manifest
									
										
									
									
									
										Executable file
									
								
							
							
						
						
									
										39
									
								
								other/examples/types/__ethz_dinfk_ldap/manifest
									
										
									
									
									
										Executable file
									
								
							| 
						 | 
					@ -0,0 +1,39 @@
 | 
				
			||||||
 | 
					#!/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/>.
 | 
				
			||||||
 | 
					#
 | 
				
			||||||
 | 
					#
 | 
				
			||||||
 | 
					# Configure nss_ldap for a machine at DINFK.
 | 
				
			||||||
 | 
					#
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					ou="$(cat "$__object/parameter/ou")"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					ldap_config="/etc/nslcd.conf"
 | 
				
			||||||
 | 
					ldap_package="libnss-ldapd"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# Install required packages
 | 
				
			||||||
 | 
					__package "$ldap_package" --state installed
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# Generate nss-ldap config file from template
 | 
				
			||||||
 | 
					mkdir "$__object/files"
 | 
				
			||||||
 | 
					. "$__type/files/nslcd.conf.template" > "$__object/files/nslcd.conf"
 | 
				
			||||||
 | 
					__file "$ldap_config" --source "$__object/files/nslcd.conf"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# Configure nsswitch to use ldap
 | 
				
			||||||
 | 
					require="__package/$ldap_package __file/$ldap_config" \
 | 
				
			||||||
 | 
					   __file /etc/nsswitch.conf --source "$__type/files/nsswitch.conf"
 | 
				
			||||||
| 
						 | 
					@ -0,0 +1 @@
 | 
				
			||||||
 | 
					ou
 | 
				
			||||||
							
								
								
									
										0
									
								
								other/examples/types/__ethz_dinfk_ldap/singleton
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										0
									
								
								other/examples/types/__ethz_dinfk_ldap/singleton
									
										
									
									
									
										Normal file
									
								
							
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue