forked from ungleich-public/cdist
		
	Merge branch 'master' into __jail
This commit is contained in:
		
				commit
				
					
						5989fedb3e
					
				
			
		
					 43 changed files with 637 additions and 221 deletions
				
			
		| 
						 | 
				
			
			@ -200,11 +200,13 @@ def emulator():
 | 
			
		|||
        sys.exit(1)
 | 
			
		||||
 | 
			
		||||
if __name__ == "__main__":
 | 
			
		||||
    # Sys is needed for sys.exit()
 | 
			
		||||
    import sys
 | 
			
		||||
 | 
			
		||||
    try:
 | 
			
		||||
        import logging
 | 
			
		||||
        import os
 | 
			
		||||
        import re
 | 
			
		||||
        import sys
 | 
			
		||||
 | 
			
		||||
        cdistpythonversion = '3.2'
 | 
			
		||||
        if sys.version < cdistpythonversion:
 | 
			
		||||
| 
						 | 
				
			
			@ -228,7 +230,7 @@ if __name__ == "__main__":
 | 
			
		|||
        else:
 | 
			
		||||
            commandline()
 | 
			
		||||
 | 
			
		||||
    except KeyboardInterrupt:
 | 
			
		||||
        sys.exit(0)
 | 
			
		||||
 | 
			
		||||
    sys.exit(0)
 | 
			
		||||
    except KeyboardInterrupt:
 | 
			
		||||
        sys.exit(0)
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
							
								
								
									
										1
									
								
								build
									
										
									
									
									
								
							
							
						
						
									
										1
									
								
								build
									
										
									
									
									
								
							| 
						 | 
				
			
			@ -130,6 +130,7 @@ case "$1" in
 | 
			
		|||
      git push --mirror
 | 
			
		||||
      git push --mirror github
 | 
			
		||||
      git push --mirror sf
 | 
			
		||||
      git push --mirror ethz
 | 
			
		||||
   ;;
 | 
			
		||||
 | 
			
		||||
   clean)
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -1,5 +1,5 @@
 | 
			
		|||
cdist-type__user(7)
 | 
			
		||||
===================
 | 
			
		||||
cdist-type__package(7)
 | 
			
		||||
======================
 | 
			
		||||
Steven Armstrong <steven-cdist--@--armstrong.cc>
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -17,22 +17,23 @@ It dispatches the actual work to the package system dependant types.
 | 
			
		|||
REQUIRED PARAMETERS
 | 
			
		||||
-------------------
 | 
			
		||||
state::
 | 
			
		||||
   The state the package should be in, either "installed" or "removed"
 | 
			
		||||
    The state the package should be in, either "present" or "absent"
 | 
			
		||||
    (the old values "installed" or "removed" will be removed in cdist 2.1).
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
OPTIONAL PARAMETERS
 | 
			
		||||
-------------------
 | 
			
		||||
name::
 | 
			
		||||
   The name of the package to install. Default is to use the object_id as the
 | 
			
		||||
   package name.
 | 
			
		||||
    The name of the package to install. Default is to use the object_id as the
 | 
			
		||||
    package name.
 | 
			
		||||
version::
 | 
			
		||||
   The version of the package to install. Default is to install the version
 | 
			
		||||
   choosen by the local package manager.
 | 
			
		||||
    The version of the package to install. Default is to install the version
 | 
			
		||||
    choosen by the local package manager.
 | 
			
		||||
type::
 | 
			
		||||
   The package type to use. Default is determined based on the $os explorer
 | 
			
		||||
   variable.
 | 
			
		||||
   e.g. __package_apt for Debian
 | 
			
		||||
        __package_emerge for Gentoo
 | 
			
		||||
    The package type to use. Default is determined based on the $os explorer
 | 
			
		||||
    variable.
 | 
			
		||||
    e.g. __package_apt for Debian
 | 
			
		||||
         __package_emerge for Gentoo
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
EXAMPLES
 | 
			
		||||
| 
						 | 
				
			
			@ -40,13 +41,13 @@ EXAMPLES
 | 
			
		|||
 | 
			
		||||
--------------------------------------------------------------------------------
 | 
			
		||||
# Install the package vim on the target
 | 
			
		||||
__package vim --state installed
 | 
			
		||||
__package vim --state present
 | 
			
		||||
 | 
			
		||||
# Same but install specific version
 | 
			
		||||
__package vim --state installed --version 7.3.50
 | 
			
		||||
__package vim --state present --version 7.3.50
 | 
			
		||||
 | 
			
		||||
# Force use of a specific package type
 | 
			
		||||
__package vim --state installed --type __package_apt
 | 
			
		||||
__package vim --state present --type __package_apt
 | 
			
		||||
--------------------------------------------------------------------------------
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -1,6 +1,6 @@
 | 
			
		|||
#!/bin/sh
 | 
			
		||||
#
 | 
			
		||||
# 2011 Nico Schottelius (nico-cdist at schottelius.org)
 | 
			
		||||
# 2011-2012 Nico Schottelius (nico-cdist at schottelius.org)
 | 
			
		||||
#
 | 
			
		||||
# This file is part of cdist.
 | 
			
		||||
#
 | 
			
		||||
| 
						 | 
				
			
			@ -28,11 +28,11 @@ else
 | 
			
		|||
fi
 | 
			
		||||
 | 
			
		||||
# Except dpkg failing, if package is not known / installed
 | 
			
		||||
packages="$(apt-cache showpkg "$name" | sed -e  "1,/Reverse Provides:/d" | cut -d ' ' -f 1) $name"
 | 
			
		||||
packages="$(apt-cache showpkg "$name" | sed -e "1,/Reverse Provides:/d" | cut -d ' ' -f 1) $name"
 | 
			
		||||
for p in $packages; do
 | 
			
		||||
    if [ -n "$(dpkg -s "$p" 2>/dev/null | grep "^Status: install ok installed$")" ]; then
 | 
			
		||||
       echo "installed $p"
 | 
			
		||||
       echo "present $p"
 | 
			
		||||
       exit 0
 | 
			
		||||
    fi
 | 
			
		||||
done
 | 
			
		||||
echo "removed"
 | 
			
		||||
echo absent
 | 
			
		||||
| 
						 | 
				
			
			@ -1,6 +1,6 @@
 | 
			
		|||
#!/bin/sh
 | 
			
		||||
#
 | 
			
		||||
# 2011 Nico Schottelius (nico-cdist at schottelius.org)
 | 
			
		||||
# 2011-2012 Nico Schottelius (nico-cdist at schottelius.org)
 | 
			
		||||
#
 | 
			
		||||
# This file is part of cdist.
 | 
			
		||||
#
 | 
			
		||||
| 
						 | 
				
			
			@ -28,28 +28,41 @@ else
 | 
			
		|||
fi
 | 
			
		||||
 | 
			
		||||
state_should="$(cat "$__object/parameter/state")"
 | 
			
		||||
state_is="$(cat "$__object/explorer/pkg_status")"
 | 
			
		||||
 | 
			
		||||
# Correct pre 2.1 naming - FIXME in 2.1
 | 
			
		||||
case "$state_should" in
 | 
			
		||||
    installed)
 | 
			
		||||
        echo "WARNING:  ${__object_name}: $state_should is deprecated and will be removed in cdist 2.1. Please change to present/absent." >&2
 | 
			
		||||
        state_should="present"
 | 
			
		||||
    ;;
 | 
			
		||||
    removed)
 | 
			
		||||
        echo "WARNING:  ${__object_name}: $state_should is deprecated and will be removed in cdist 2.1. Please change to present/absent." >&2
 | 
			
		||||
        state_should="absent"
 | 
			
		||||
    ;;
 | 
			
		||||
esac
 | 
			
		||||
 | 
			
		||||
# FIXME: use grep directly, state is a list, not a line!
 | 
			
		||||
state_is="$(cat "$__object/explorer/state")"
 | 
			
		||||
case "$state_is" in
 | 
			
		||||
    installed*)
 | 
			
		||||
    present*)
 | 
			
		||||
       name="$(echo "$state_is" | cut -d ' ' -f 2)"
 | 
			
		||||
       state_is="installed"
 | 
			
		||||
       state_is="present"
 | 
			
		||||
    ;;
 | 
			
		||||
esac
 | 
			
		||||
 | 
			
		||||
aptget="DEBIAN_FRONTEND=noninteractive apt-get --quiet --yes"
 | 
			
		||||
 | 
			
		||||
if [ "$state_is" != "$state_should" ]; then
 | 
			
		||||
   case "$state_should" in
 | 
			
		||||
      installed)
 | 
			
		||||
         echo $aptget install \"$name\"
 | 
			
		||||
      ;;
 | 
			
		||||
      removed)
 | 
			
		||||
         echo $aptget remove \"$name\"
 | 
			
		||||
      ;;
 | 
			
		||||
      *)
 | 
			
		||||
         echo "Unknown state: $state" >&2
 | 
			
		||||
         exit 1
 | 
			
		||||
      ;;
 | 
			
		||||
   esac
 | 
			
		||||
fi
 | 
			
		||||
[ "$state_is" = "$state_should" ] && exit 0
 | 
			
		||||
 | 
			
		||||
case "$state_should" in
 | 
			
		||||
    present)
 | 
			
		||||
        echo $aptget install \"$name\"
 | 
			
		||||
    ;;
 | 
			
		||||
    absent)
 | 
			
		||||
        echo $aptget remove \"$name\"
 | 
			
		||||
    ;;
 | 
			
		||||
    *)
 | 
			
		||||
        echo "Unknown state: $state_should" >&2
 | 
			
		||||
        exit 1
 | 
			
		||||
    ;;
 | 
			
		||||
esac
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -17,7 +17,8 @@ manage packages.
 | 
			
		|||
REQUIRED PARAMETERS
 | 
			
		||||
-------------------
 | 
			
		||||
state::
 | 
			
		||||
   Either "installed" or "removed".
 | 
			
		||||
    The state the package should be in, either "present" or "absent"
 | 
			
		||||
    (the old values "installed" or "removed" will be removed in cdist 2.1).
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
OPTIONAL PARAMETERS
 | 
			
		||||
| 
						 | 
				
			
			@ -31,13 +32,13 @@ EXAMPLES
 | 
			
		|||
 | 
			
		||||
--------------------------------------------------------------------------------
 | 
			
		||||
# Ensure zsh in installed
 | 
			
		||||
__package_apt zsh --state installed
 | 
			
		||||
__package_apt zsh --state present
 | 
			
		||||
 | 
			
		||||
# In case you only want *a* webserver, but don't care which one
 | 
			
		||||
__package_apt webserver --state installed --name nginx
 | 
			
		||||
__package_apt webserver --state present --name nginx
 | 
			
		||||
 | 
			
		||||
# Remove obsolete package
 | 
			
		||||
__package_apt puppet --state removed
 | 
			
		||||
__package_apt puppet --state absent
 | 
			
		||||
--------------------------------------------------------------------------------
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -24,29 +24,43 @@
 | 
			
		|||
 | 
			
		||||
 | 
			
		||||
if [ -f "$__object/parameter/name" ]; then
 | 
			
		||||
   name="$(cat "$__object/parameter/name")"
 | 
			
		||||
    name="$(cat "$__object/parameter/name")"
 | 
			
		||||
else
 | 
			
		||||
   name="$__object_id"
 | 
			
		||||
    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
 | 
			
		||||
   ;;
 | 
			
		||||
state_should="$(cat "$__object/parameter/state")"
 | 
			
		||||
# Correct pre 2.1 naming - FIXME in 2.1
 | 
			
		||||
case "$state_should" in
 | 
			
		||||
    installed)
 | 
			
		||||
        echo "WARNING:  ${__object_name}: $state_should is deprecated and will be removed in cdist 2.1. Please change to present/absent." >&2
 | 
			
		||||
        state_should="present"
 | 
			
		||||
    ;;
 | 
			
		||||
    removed)
 | 
			
		||||
        echo "WARNING:  ${__object_name}: $state_should is deprecated and will be removed in cdist 2.1. Please change to present/absent." >&2
 | 
			
		||||
        state_should="absent"
 | 
			
		||||
    ;;
 | 
			
		||||
esac
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
if grep -q "(installed)" "$__object/explorer/pkg_status"; then
 | 
			
		||||
    state_is="present"
 | 
			
		||||
else
 | 
			
		||||
    state_is="absent"
 | 
			
		||||
fi
 | 
			
		||||
 | 
			
		||||
# Leave if nothing is to be done
 | 
			
		||||
[ "$state_is" = "$state_should" ] && exit 0
 | 
			
		||||
 | 
			
		||||
case "$state_should" in
 | 
			
		||||
    present)
 | 
			
		||||
        echo luarocks install \"$name\"
 | 
			
		||||
    ;;
 | 
			
		||||
    absent)
 | 
			
		||||
        echo luarocks remove \"$name\"
 | 
			
		||||
    ;;
 | 
			
		||||
    *)
 | 
			
		||||
        echo "Unknown state: $state_should" >&2
 | 
			
		||||
        exit 1
 | 
			
		||||
    ;;
 | 
			
		||||
esac
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -1,5 +1,5 @@
 | 
			
		|||
cdist-type__package_luarocks(7)
 | 
			
		||||
==============================
 | 
			
		||||
===============================
 | 
			
		||||
Christian G. Warden <cwarden@xerus.org>
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -16,13 +16,14 @@ LuaRocks is a deployment and management system for Lua modules.
 | 
			
		|||
REQUIRED PARAMETERS
 | 
			
		||||
-------------------
 | 
			
		||||
state::
 | 
			
		||||
   Either "installed" or "removed".
 | 
			
		||||
    The state the package should be in, either "present" or "absent"
 | 
			
		||||
    (the old values "installed" or "removed" will be removed in cdist 2.1).
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
OPTIONAL PARAMETERS
 | 
			
		||||
-------------------
 | 
			
		||||
name::
 | 
			
		||||
   If supplied, use the name and not the object id as the package name.
 | 
			
		||||
    If supplied, use the name and not the object id as the package name.
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
EXAMPLES
 | 
			
		||||
| 
						 | 
				
			
			@ -30,10 +31,10 @@ EXAMPLES
 | 
			
		|||
 | 
			
		||||
--------------------------------------------------------------------------------
 | 
			
		||||
# Ensure luasocket is installed
 | 
			
		||||
__package_luarocks luasocket --state installed
 | 
			
		||||
__package_luarocks luasocket --state present
 | 
			
		||||
 | 
			
		||||
# Remove package
 | 
			
		||||
__package_luarocks luasocket --state removed
 | 
			
		||||
__package_luarocks luasocket --state absent
 | 
			
		||||
--------------------------------------------------------------------------------
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -1,6 +1,6 @@
 | 
			
		|||
#!/bin/sh
 | 
			
		||||
#
 | 
			
		||||
# 2011 Nico Schottelius (nico-cdist at schottelius.org)
 | 
			
		||||
# 2011-2012 Nico Schottelius (nico-cdist at schottelius.org)
 | 
			
		||||
#
 | 
			
		||||
# This file is part of cdist.
 | 
			
		||||
#
 | 
			
		||||
| 
						 | 
				
			
			@ -18,7 +18,7 @@
 | 
			
		|||
# along with cdist. If not, see <http://www.gnu.org/licenses/>.
 | 
			
		||||
#
 | 
			
		||||
#
 | 
			
		||||
# Retrieve the status of a package - parsed dpkg output
 | 
			
		||||
# Retrieve the status of a package - parsed pacman output
 | 
			
		||||
#
 | 
			
		||||
 | 
			
		||||
if [ -f "$__object/parameter/name" ]; then
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -1,6 +1,6 @@
 | 
			
		|||
#!/bin/sh
 | 
			
		||||
#
 | 
			
		||||
# 2011 Nico Schottelius (nico-cdist at schottelius.org)
 | 
			
		||||
# 2011-2012 Nico Schottelius (nico-cdist at schottelius.org)
 | 
			
		||||
#
 | 
			
		||||
# This file is part of cdist.
 | 
			
		||||
#
 | 
			
		||||
| 
						 | 
				
			
			@ -33,24 +33,37 @@ else
 | 
			
		|||
   name="$__object_id"
 | 
			
		||||
fi
 | 
			
		||||
 | 
			
		||||
state="$(cat "$__object/parameter/state")"
 | 
			
		||||
state_should="$(cat "$__object/parameter/state")"
 | 
			
		||||
case "$state_should" in
 | 
			
		||||
    installed)
 | 
			
		||||
        echo "WARNING:  ${__object_name}: $state_should is deprecated and will be removed in cdist 2.1. Please change to present/absent." >&2       
 | 
			
		||||
        state_should="present"
 | 
			
		||||
    ;;  
 | 
			
		||||
    removed)
 | 
			
		||||
        echo "WARNING:  ${__object_name}: $state_should is deprecated and will be removed in cdist 2.1. Please change to present/absent." >&2       
 | 
			
		||||
        state_should="absent"
 | 
			
		||||
    ;;  
 | 
			
		||||
esac
 | 
			
		||||
 | 
			
		||||
pkg_version="$(cat "$__object/explorer/pkg_version")"
 | 
			
		||||
if [ -z "$pkg_version" ]; then
 | 
			
		||||
    state_is="absent"
 | 
			
		||||
else
 | 
			
		||||
    state_is="present"
 | 
			
		||||
fi
 | 
			
		||||
 | 
			
		||||
case "$state" in
 | 
			
		||||
   installed)
 | 
			
		||||
# Exit if nothing is needed to be done
 | 
			
		||||
[ "$state_is" = "$state_should" ] && exit 0
 | 
			
		||||
 | 
			
		||||
      # Empty? Not installed.
 | 
			
		||||
      if [ -z "$pkg_version" ]; then
 | 
			
		||||
case "$state_should" in
 | 
			
		||||
   present)
 | 
			
		||||
         echo pacman "$pacopts" -S \"$name\"
 | 
			
		||||
      fi
 | 
			
		||||
   ;;
 | 
			
		||||
   removed)
 | 
			
		||||
      if [ "$pkg_version" ]; then
 | 
			
		||||
   absent)
 | 
			
		||||
         echo pacman "$pacopts" -R \"$name\"
 | 
			
		||||
      fi
 | 
			
		||||
   ;;
 | 
			
		||||
   *)
 | 
			
		||||
      echo "Unknown state: $state" >&2
 | 
			
		||||
      echo "Unknown state: $state_should" >&2
 | 
			
		||||
      exit 1
 | 
			
		||||
   ;;
 | 
			
		||||
esac
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -17,13 +17,14 @@ packages.
 | 
			
		|||
REQUIRED PARAMETERS
 | 
			
		||||
-------------------
 | 
			
		||||
state::
 | 
			
		||||
   Either "installed" or "removed".
 | 
			
		||||
    The state the package should be in, either "present" or "absent"
 | 
			
		||||
    (the old values "installed" or "removed" will be removed in cdist 2.1).
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
OPTIONAL PARAMETERS
 | 
			
		||||
-------------------
 | 
			
		||||
name::
 | 
			
		||||
   If supplied, use the name and not the object id as the package name.
 | 
			
		||||
    If supplied, use the name and not the object id as the package name.
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
EXAMPLES
 | 
			
		||||
| 
						 | 
				
			
			@ -31,13 +32,13 @@ EXAMPLES
 | 
			
		|||
 | 
			
		||||
--------------------------------------------------------------------------------
 | 
			
		||||
# Ensure zsh in installed
 | 
			
		||||
__package_pacman zsh --state installed
 | 
			
		||||
__package_pacman zsh --state present
 | 
			
		||||
 | 
			
		||||
# If you don't want to follow pythonX packages, but always use python
 | 
			
		||||
__package_pacman python --state installed --name python2
 | 
			
		||||
__package_pacman python --state present --name python2
 | 
			
		||||
 | 
			
		||||
# Remove obsolete package
 | 
			
		||||
__package_pacman puppet --state removed
 | 
			
		||||
__package_pacman puppet --state absent
 | 
			
		||||
--------------------------------------------------------------------------------
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -49,5 +50,5 @@ SEE ALSO
 | 
			
		|||
 | 
			
		||||
COPYING
 | 
			
		||||
-------
 | 
			
		||||
Copyright \(C) 2011 Nico Schottelius. Free use of this software is
 | 
			
		||||
Copyright \(C) 2011-2012 Nico Schottelius. Free use of this software is
 | 
			
		||||
granted under the terms of the GNU General Public License version 3 (GPLv3).
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -47,4 +47,8 @@ case "$state_should" in
 | 
			
		|||
    absent)
 | 
			
		||||
        echo $pip uninstall -q -y pyro
 | 
			
		||||
    ;;
 | 
			
		||||
    *)
 | 
			
		||||
        echo "Unknown state: $state_should" >&2
 | 
			
		||||
        exit 1
 | 
			
		||||
    ;;
 | 
			
		||||
esac
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -23,10 +23,10 @@ state::
 | 
			
		|||
OPTIONAL PARAMETERS
 | 
			
		||||
-------------------
 | 
			
		||||
name::
 | 
			
		||||
   If supplied, use the name and not the object id as the package name.
 | 
			
		||||
    If supplied, use the name and not the object id as the package name.
 | 
			
		||||
 | 
			
		||||
pip::
 | 
			
		||||
   Instead of using pip from PATH, use the specific pip path.
 | 
			
		||||
    Instead of using pip from PATH, use the specific pip path.
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
EXAMPLES
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -1,6 +1,7 @@
 | 
			
		|||
#!/bin/sh
 | 
			
		||||
#
 | 
			
		||||
# 2011 Andi Brönnimann (andi-cdist at v-net.ch)
 | 
			
		||||
# 2012 Nico Schottelius (nico-cdist at schottelius.org)
 | 
			
		||||
#
 | 
			
		||||
# This file is part of cdist.
 | 
			
		||||
#
 | 
			
		||||
| 
						 | 
				
			
			@ -28,7 +29,6 @@
 | 
			
		|||
os_version="$(cat "$__global/explorer/os_version")"
 | 
			
		||||
machine="$(cat "$__global/explorer/machine")"
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
if [ -f "$__object/parameter/flavor" ]; then
 | 
			
		||||
	flavor="$(cat "$__object/parameter/flavor")"
 | 
			
		||||
fi
 | 
			
		||||
| 
						 | 
				
			
			@ -42,44 +42,60 @@ else
 | 
			
		|||
   name="$__object_id"
 | 
			
		||||
fi
 | 
			
		||||
 | 
			
		||||
state="$(cat "$__object/parameter/state")"
 | 
			
		||||
state_should="$(cat "$__object/parameter/state")"
 | 
			
		||||
# Correct pre 2.1 naming - FIXME in 2.1
 | 
			
		||||
case "$state_should" in
 | 
			
		||||
    installed)
 | 
			
		||||
        echo "WARNING:  ${__object_name}: $state_should is deprecated and will be removed in cdist 2.1. Please change to present/absent." >&2
 | 
			
		||||
        state_should="present"
 | 
			
		||||
    ;;
 | 
			
		||||
    removed)
 | 
			
		||||
        echo "WARNING:  ${__object_name}: $state_should is deprecated and will be removed in cdist 2.1. Please change to present/absent." >&2
 | 
			
		||||
        state_should="absent"
 | 
			
		||||
    ;;
 | 
			
		||||
esac
 | 
			
		||||
 | 
			
		||||
pkg_version="$(cat "$__object/explorer/pkg_version")"
 | 
			
		||||
 | 
			
		||||
# TODO: Shouldn't be hardcoded
 | 
			
		||||
echo export PKG_PATH=ftp://ftp.openbsd.org/pub/OpenBSD/$os_version/packages/$machine/
 | 
			
		||||
 | 
			
		||||
case "$state" in
 | 
			
		||||
   installed)
 | 
			
		||||
      # Empty? Not installed.
 | 
			
		||||
      if [ -z "$pkg_version" ]; then
 | 
			
		||||
		  # use this because pkg_add doesn't properly handle errors
 | 
			
		||||
		  cat << eof
 | 
			
		||||
		  status=\$(pkg_add "$pkgopts" "$name--$flavor")
 | 
			
		||||
if [ "$pkg_version" ]; then
 | 
			
		||||
    state_is="present"
 | 
			
		||||
else
 | 
			
		||||
    state_is="absent"
 | 
			
		||||
fi
 | 
			
		||||
 | 
			
		||||
		  # no error
 | 
			
		||||
      	  if [ -n "\$status" ]; then
 | 
			
		||||
			  echo "Error: \$status"
 | 
			
		||||
			  exit 1
 | 
			
		||||
		  fi
 | 
			
		||||
eof
 | 
			
		||||
      fi
 | 
			
		||||
   ;;
 | 
			
		||||
   removed)
 | 
			
		||||
      if [ "$pkg_version" ]; then
 | 
			
		||||
		  # use this because pkg_add doesn't properly handle errors
 | 
			
		||||
		  cat << eof
 | 
			
		||||
		  status=\$(pkg_delete "$pkgopts" "$name--$flavor")
 | 
			
		||||
[ "$state_is" = "$state_should" ] && exit 0
 | 
			
		||||
 | 
			
		||||
		  # no error
 | 
			
		||||
      	  if [ -n "\$status" ]; then
 | 
			
		||||
			  echo "Error: \$status"
 | 
			
		||||
			  exit 1
 | 
			
		||||
		  fi
 | 
			
		||||
case "$state_should" in
 | 
			
		||||
    present)
 | 
			
		||||
        # use this because pkg_add doesn't properly handle errors
 | 
			
		||||
        cat << eof
 | 
			
		||||
status=\$(pkg_add "$pkgopts" "$name--$flavor")
 | 
			
		||||
 | 
			
		||||
# no error
 | 
			
		||||
if [ -n "\$status" ]; then
 | 
			
		||||
    echo "Error: \$status"
 | 
			
		||||
	exit 1
 | 
			
		||||
fi
 | 
			
		||||
eof
 | 
			
		||||
    ;;
 | 
			
		||||
 | 
			
		||||
    absent)
 | 
			
		||||
        # use this because pkg_add doesn't properly handle errors
 | 
			
		||||
        cat << eof
 | 
			
		||||
status=\$(pkg_delete "$pkgopts" "$name--$flavor")
 | 
			
		||||
 | 
			
		||||
# no error
 | 
			
		||||
if [ -n "\$status" ]; then
 | 
			
		||||
    echo "Error: \$status"
 | 
			
		||||
    exit 1
 | 
			
		||||
fi
 | 
			
		||||
eof
 | 
			
		||||
      fi
 | 
			
		||||
   ;;
 | 
			
		||||
   *)
 | 
			
		||||
		echo "Unknown state: $state" >&2
 | 
			
		||||
		echo "Unknown state: $state_should" >&2
 | 
			
		||||
		exit 1
 | 
			
		||||
   ;;
 | 
			
		||||
esac
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -16,16 +16,17 @@ This type is usually used on OpenBSD to manage packages.
 | 
			
		|||
REQUIRED PARAMETERS
 | 
			
		||||
-------------------
 | 
			
		||||
state::
 | 
			
		||||
   Either "installed" or "removed".
 | 
			
		||||
    The state the package should be in, either "present" or "absent"
 | 
			
		||||
    (the old values "installed" or "removed" will be removed in cdist 2.1).
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
OPTIONAL PARAMETERS
 | 
			
		||||
-------------------
 | 
			
		||||
name::
 | 
			
		||||
   If supplied, use the name and not the object id as the package name.
 | 
			
		||||
    If supplied, use the name and not the object id as the package name.
 | 
			
		||||
 | 
			
		||||
flavor::
 | 
			
		||||
   If supplied, use to avoid ambiguity.
 | 
			
		||||
    If supplied, use to avoid ambiguity.
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
EXAMPLES
 | 
			
		||||
| 
						 | 
				
			
			@ -33,16 +34,16 @@ EXAMPLES
 | 
			
		|||
 | 
			
		||||
--------------------------------------------------------------------------------
 | 
			
		||||
# Ensure zsh is installed
 | 
			
		||||
__package_pkg_openbsd zsh --state installed
 | 
			
		||||
__package_pkg_openbsd zsh --state present
 | 
			
		||||
 | 
			
		||||
# Ensure vim is installed, use flavor no_x11
 | 
			
		||||
__package_pkg_openbsd vim --state installed --flavor no_x11
 | 
			
		||||
__package_pkg_openbsd vim --state present --flavor no_x11
 | 
			
		||||
 | 
			
		||||
# If you don't want to follow pythonX packages, but always use python
 | 
			
		||||
__package_pkg_openbsd python --state installed --name python2
 | 
			
		||||
__package_pkg_openbsd python --state present --name python2
 | 
			
		||||
 | 
			
		||||
# Remove obsolete package
 | 
			
		||||
__package_pkg_openbsd puppet --state removed
 | 
			
		||||
__package_pkg_openbsd puppet --state absent
 | 
			
		||||
--------------------------------------------------------------------------------
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -21,31 +21,42 @@
 | 
			
		|||
# Manage Rubygem packages
 | 
			
		||||
#
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
if [ -f "$__object/parameter/name" ]; then
 | 
			
		||||
   name="$(cat "$__object/parameter/name")"
 | 
			
		||||
    name="$(cat "$__object/parameter/name")"
 | 
			
		||||
else
 | 
			
		||||
   name="$__object_id"
 | 
			
		||||
    name="$__object_id"
 | 
			
		||||
fi
 | 
			
		||||
 | 
			
		||||
state="$(cat "$__object/parameter/state")"
 | 
			
		||||
is_installed="$(grep "true" "$__object/explorer/pkg_status" || true)"
 | 
			
		||||
 | 
			
		||||
case "$state" in
 | 
			
		||||
   installed)
 | 
			
		||||
      # Install only if non-existent
 | 
			
		||||
      if [ -z "$is_installed" ]; then
 | 
			
		||||
         echo gem install \"$name\" --no-ri --no-rdoc
 | 
			
		||||
      fi
 | 
			
		||||
   ;;
 | 
			
		||||
   removed)
 | 
			
		||||
      # Remove only if existent
 | 
			
		||||
      if [ -n "$is_installed" ]; then
 | 
			
		||||
         echo gem uninstall \"$name\"
 | 
			
		||||
      fi
 | 
			
		||||
   ;;
 | 
			
		||||
   *)
 | 
			
		||||
      echo "Unknown state: $state" >&2
 | 
			
		||||
      exit 1
 | 
			
		||||
   ;;
 | 
			
		||||
state_should="$(cat "$__object/parameter/state")"
 | 
			
		||||
# Correct pre 2.1 naming - FIXME in 2.1
 | 
			
		||||
case "$state_should" in
 | 
			
		||||
    installed)
 | 
			
		||||
        echo "WARNING:  ${__object_name}: $state_should is deprecated and will be removed in cdist 2.1. Please change to present/absent." >&2
 | 
			
		||||
        state_should="present"
 | 
			
		||||
    ;;
 | 
			
		||||
    removed)
 | 
			
		||||
        echo "WARNING:  ${__object_name}: $state_should is deprecated and will be removed in cdist 2.1. Please change to present/absent." >&2
 | 
			
		||||
        state_should="absent"
 | 
			
		||||
    ;;
 | 
			
		||||
esac
 | 
			
		||||
 | 
			
		||||
if grep -q true "$__object/explorer/pkg_status"; then
 | 
			
		||||
    state_is="present"
 | 
			
		||||
else
 | 
			
		||||
    state_is="absent"
 | 
			
		||||
fi
 | 
			
		||||
 | 
			
		||||
[ "$state_is" = "$state_should" ] && exit 0
 | 
			
		||||
 | 
			
		||||
case "$state_should" in
 | 
			
		||||
    present)
 | 
			
		||||
        echo gem install \"$name\" --no-ri --no-rdoc
 | 
			
		||||
    ;;
 | 
			
		||||
    absent)
 | 
			
		||||
        echo gem uninstall \"$name\"
 | 
			
		||||
    ;;
 | 
			
		||||
    *)
 | 
			
		||||
        echo "Unknown state: $state_should" >&2
 | 
			
		||||
        exit 1
 | 
			
		||||
    ;;
 | 
			
		||||
esac
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -16,13 +16,14 @@ Rubygems is the default package management system for the Ruby programming langu
 | 
			
		|||
REQUIRED PARAMETERS
 | 
			
		||||
-------------------
 | 
			
		||||
state::
 | 
			
		||||
   Either "installed" or "removed".
 | 
			
		||||
    The state the package should be in, either "present" or "absent"
 | 
			
		||||
    (the old values "installed" or "removed" will be removed in cdist 2.1).
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
OPTIONAL PARAMETERS
 | 
			
		||||
-------------------
 | 
			
		||||
name::
 | 
			
		||||
   If supplied, use the name and not the object id as the package name.
 | 
			
		||||
    If supplied, use the name and not the object id as the package name.
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
EXAMPLES
 | 
			
		||||
| 
						 | 
				
			
			@ -30,10 +31,10 @@ EXAMPLES
 | 
			
		|||
 | 
			
		||||
--------------------------------------------------------------------------------
 | 
			
		||||
# Ensure sinatra is installed
 | 
			
		||||
__package_rubygem sinatra --state installed
 | 
			
		||||
__package_rubygem sinatra --state present
 | 
			
		||||
 | 
			
		||||
# Remove package
 | 
			
		||||
__package_rubygem rails --state removed
 | 
			
		||||
__package_rubygem rails --state absent
 | 
			
		||||
--------------------------------------------------------------------------------
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -27,7 +27,17 @@ else
 | 
			
		|||
   name="$__object_id"
 | 
			
		||||
fi
 | 
			
		||||
 | 
			
		||||
state="$(cat "$__object/parameter/state")"
 | 
			
		||||
state_should="$(cat "$__object/parameter/state")"
 | 
			
		||||
case "$state_should" in
 | 
			
		||||
    installed)
 | 
			
		||||
        echo "WARNING:  ${__object_name}: $state_should is deprecated and will be removed in cdist 2.1. Please change to present/absent." >&2       
 | 
			
		||||
        state_should="present"
 | 
			
		||||
    ;;
 | 
			
		||||
    removed)
 | 
			
		||||
        echo "WARNING:  ${__object_name}: $state_should is deprecated and will be removed in cdist 2.1. Please change to present/absent." >&2       
 | 
			
		||||
        state_should="absent"
 | 
			
		||||
    ;;
 | 
			
		||||
esac
 | 
			
		||||
 | 
			
		||||
if grep -q -E "(centos|redhat|amazon)" "$__global/explorer/os"; then
 | 
			
		||||
    opts="-y --quiet"
 | 
			
		||||
| 
						 | 
				
			
			@ -37,19 +47,23 @@ fi
 | 
			
		|||
 | 
			
		||||
not_installed="^no package provides"
 | 
			
		||||
 | 
			
		||||
case "$state" in
 | 
			
		||||
   installed)
 | 
			
		||||
      if grep -q "$not_installed" "$__object/explorer/pkg_version"; then
 | 
			
		||||
         echo yum $opts install \"$name\"
 | 
			
		||||
      fi
 | 
			
		||||
   ;;
 | 
			
		||||
   removed)
 | 
			
		||||
      if ! grep -q "$not_installed" "$__object/explorer/pkg_version"; then
 | 
			
		||||
         echo yum $opts remove \"$name\"
 | 
			
		||||
      fi
 | 
			
		||||
   ;;
 | 
			
		||||
   *)
 | 
			
		||||
      echo "Unknown state: $state" >&2
 | 
			
		||||
      exit 1
 | 
			
		||||
   ;;
 | 
			
		||||
if grep -q "$not_installed" "$__object/explorer/pkg_version"; then
 | 
			
		||||
    state_is="absent"
 | 
			
		||||
else
 | 
			
		||||
    state_is="present"
 | 
			
		||||
fi
 | 
			
		||||
 | 
			
		||||
[ "$state_is" = "$state_should" ] && exit 0
 | 
			
		||||
 | 
			
		||||
case "$state_should" in
 | 
			
		||||
    present)
 | 
			
		||||
        echo yum $opts install \"$name\"
 | 
			
		||||
    ;;
 | 
			
		||||
    absent)
 | 
			
		||||
        echo yum $opts remove \"$name\"
 | 
			
		||||
    ;;
 | 
			
		||||
    *)
 | 
			
		||||
        echo "Unknown state: $state_should" >&2
 | 
			
		||||
        exit 1
 | 
			
		||||
    ;;
 | 
			
		||||
esac
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -18,13 +18,14 @@ slightly confusing error message "Error: Nothing to do".
 | 
			
		|||
REQUIRED PARAMETERS
 | 
			
		||||
-------------------
 | 
			
		||||
state::
 | 
			
		||||
   Either "installed" or "removed".
 | 
			
		||||
    The state the package should be in, either "present" or "absent"
 | 
			
		||||
    (the old values "installed" or "removed" will be removed in cdist 2.1).
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
OPTIONAL PARAMETERS
 | 
			
		||||
-------------------
 | 
			
		||||
name::
 | 
			
		||||
   If supplied, use the name and not the object id as the package name.
 | 
			
		||||
    If supplied, use the name and not the object id as the package name.
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
EXAMPLES
 | 
			
		||||
| 
						 | 
				
			
			@ -32,13 +33,13 @@ EXAMPLES
 | 
			
		|||
 | 
			
		||||
--------------------------------------------------------------------------------
 | 
			
		||||
# Ensure zsh in installed
 | 
			
		||||
__package_yum zsh --state installed
 | 
			
		||||
__package_yum zsh --state present
 | 
			
		||||
 | 
			
		||||
# If you don't want to follow pythonX packages, but always use python
 | 
			
		||||
__package_yum python --state installed --name python2
 | 
			
		||||
__package_yum python --state present --name python2
 | 
			
		||||
 | 
			
		||||
# Remove obsolete package
 | 
			
		||||
__package_yum puppet --state removed
 | 
			
		||||
__package_yum puppet --state absent
 | 
			
		||||
--------------------------------------------------------------------------------
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -1,6 +1,6 @@
 | 
			
		|||
#!/bin/sh
 | 
			
		||||
#
 | 
			
		||||
# 2011 Nico Schottelius (nico-cdist at schottelius.org)
 | 
			
		||||
# 2011-2012 Nico Schottelius (nico-cdist at schottelius.org)
 | 
			
		||||
#
 | 
			
		||||
# This file is part of cdist.
 | 
			
		||||
#
 | 
			
		||||
| 
						 | 
				
			
			@ -25,33 +25,44 @@ else
 | 
			
		|||
   name="$__object_id"
 | 
			
		||||
fi
 | 
			
		||||
 | 
			
		||||
runs="$(cat "$__object/explorer/runs")"
 | 
			
		||||
state_should="$(cat "$__object/parameter/state")"
 | 
			
		||||
case "$state_should" in
 | 
			
		||||
    running)
 | 
			
		||||
        echo "WARNING:  ${__object_name}: $state_should is deprecated and will be removed in cdist 2.1. Please change to present/absent." >&2       
 | 
			
		||||
        state_should="present"
 | 
			
		||||
    ;;  
 | 
			
		||||
    stopped)
 | 
			
		||||
        echo "WARNING:  ${__object_name}: $state_should is deprecated and will be removed in cdist 2.1. Please change to present/absent." >&2       
 | 
			
		||||
        state_should="absent"
 | 
			
		||||
    ;;  
 | 
			
		||||
esac
 | 
			
		||||
 | 
			
		||||
runs="$(cat "$__object/explorer/runs")"
 | 
			
		||||
if [ "$runs" ]; then
 | 
			
		||||
    state_is="present"
 | 
			
		||||
else
 | 
			
		||||
    state_is="absent"
 | 
			
		||||
fi
 | 
			
		||||
 | 
			
		||||
[ "$state_is" = "$state_should" ] && exit 0
 | 
			
		||||
 | 
			
		||||
case "$state_should" in
 | 
			
		||||
   running|present)
 | 
			
		||||
      # Does not run, start it!
 | 
			
		||||
      if [ -z "$runs" ]; then
 | 
			
		||||
         if [ -f "$__object/parameter/start" ]; then
 | 
			
		||||
    present)
 | 
			
		||||
        if [ -f "$__object/parameter/start" ]; then
 | 
			
		||||
            cat "$__object/parameter/start"
 | 
			
		||||
         else
 | 
			
		||||
        else
 | 
			
		||||
            echo "$name"
 | 
			
		||||
         fi
 | 
			
		||||
      fi
 | 
			
		||||
   ;;
 | 
			
		||||
   stopped|absent)
 | 
			
		||||
      # Runs, kill it!
 | 
			
		||||
      if [ "$runs" ]; then
 | 
			
		||||
        fi
 | 
			
		||||
    ;;
 | 
			
		||||
    absent)
 | 
			
		||||
         if [ -f "$__object/parameter/stop" ]; then
 | 
			
		||||
            cat "$__object/parameter/stop"
 | 
			
		||||
         else
 | 
			
		||||
            echo kill "${runs}"
 | 
			
		||||
         fi
 | 
			
		||||
      fi
 | 
			
		||||
   ;;
 | 
			
		||||
   *)
 | 
			
		||||
      echo "Unknown state: $state_should" >&2
 | 
			
		||||
      exit 1
 | 
			
		||||
   ;;
 | 
			
		||||
 | 
			
		||||
    ;;
 | 
			
		||||
    *)
 | 
			
		||||
        echo "Unknown state: $state_should" >&2
 | 
			
		||||
        exit 1
 | 
			
		||||
    ;;
 | 
			
		||||
esac
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -16,7 +16,9 @@ This cdist type allows you to define the state of a process.
 | 
			
		|||
REQUIRED PARAMETERS
 | 
			
		||||
-------------------
 | 
			
		||||
state::
 | 
			
		||||
   State of the process: Either stopped or running.
 | 
			
		||||
   State of the process: Either present or absent
 | 
			
		||||
   (old values "stopped" and "running" are deprecated and will be removed in
 | 
			
		||||
   cdist 2.1).
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
OPTIONAL PARAMETERS
 | 
			
		||||
| 
						 | 
				
			
			@ -40,23 +42,23 @@ EXAMPLES
 | 
			
		|||
 | 
			
		||||
--------------------------------------------------------------------------------
 | 
			
		||||
# Start if not running
 | 
			
		||||
__process /usr/sbin/syslog-ng --state running
 | 
			
		||||
__process /usr/sbin/syslog-ng --state present
 | 
			
		||||
 | 
			
		||||
# Start if not running with a different binary
 | 
			
		||||
__process /usr/sbin/nginx --state running --start "/etc/rc.d/nginx start"
 | 
			
		||||
__process /usr/sbin/nginx --state present --start "/etc/rc.d/nginx start"
 | 
			
		||||
 | 
			
		||||
# Stop the process using kill (the type default) - DO NOT USE THIS
 | 
			
		||||
__process /usr/sbin/sshd --state stopped
 | 
			
		||||
__process /usr/sbin/sshd --state absent
 | 
			
		||||
 | 
			
		||||
# Stop the process using /etc/rc.d/sshd stop - THIS ONE NOT AS WELL
 | 
			
		||||
__process /usr/sbin/sshd --state stopped --stop "/etc/rc.d/sshd stop"
 | 
			
		||||
__process /usr/sbin/sshd --state absent --stop "/etc/rc.d/sshd stop"
 | 
			
		||||
 | 
			
		||||
# 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 present \
 | 
			
		||||
   --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" \
 | 
			
		||||
__process rpcstatd --state present --start "/etc/init.d/statd start" \
 | 
			
		||||
    --name "rpc.statd.*"
 | 
			
		||||
--------------------------------------------------------------------------------
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -68,5 +70,5 @@ SEE ALSO
 | 
			
		|||
 | 
			
		||||
COPYING
 | 
			
		||||
-------
 | 
			
		||||
Copyright \(C) 2011 Nico Schottelius. Free use of this software is
 | 
			
		||||
Copyright \(C) 2011-2012 Nico Schottelius. Free use of this software is
 | 
			
		||||
granted under the terms of the GNU General Public License version 3 (GPLv3).
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -4,11 +4,17 @@ Changelog
 | 
			
		|||
	* Changes are always commented with their author in (braces)
 | 
			
		||||
	* Exception: No braces means author == Nico Schottelius
 | 
			
		||||
 | 
			
		||||
2.0.8:
 | 
			
		||||
2.0.8: 2012-02-20
 | 
			
		||||
	* Bugfix core: Remove another nasty traceback when sending SIGINT (aka Ctrl-C)
 | 
			
		||||
	* Cleanup: Better hint to source of error
 | 
			
		||||
	* Cleanup: Do not output failing script, but path to script only
 | 
			
		||||
	* Cleanup: Remove support for __debug variable in manifests (Type != Core
 | 
			
		||||
		debugging)
 | 
			
		||||
	* Cleanup: Change __package_* to support absent/present (default state
 | 
			
		||||
		name now). The values removed/installed will be removed in cdist 2.1.
 | 
			
		||||
	* Cleanup: Change __process to support absent/present (default state
 | 
			
		||||
		name now). The values running/stopped will be removed in cdist 2.1.
 | 
			
		||||
	* Feature Core: Support boolean parameters (Steven Armstrong)
 | 
			
		||||
 | 
			
		||||
2.0.7: 2012-02-13
 | 
			
		||||
	* Bugfix __file: Use chmod after chown/chgrp (Matt Coddington)
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
							
								
								
									
										48
									
								
								doc/dev/logs/2012-02-17.keyboardirq
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										48
									
								
								doc/dev/logs/2012-02-17.keyboardirq
									
										
									
									
									
										Normal file
									
								
							| 
						 | 
				
			
			@ -0,0 +1,48 @@
 | 
			
		|||
Somewhere there is still a race condition:
 | 
			
		||||
 | 
			
		||||
INFO: monitoring03: Running manifest and explorers for __file/etc/yum.repos.d/epel.repo
 | 
			
		||||
^C^CTraceback (most recent call last):
 | 
			
		||||
  File "./bin/cdist", line 204, in <module>
 | 
			
		||||
    import logging
 | 
			
		||||
  File "/usr/lib/python3.2/logging/__init__.py", line 27, in <module>
 | 
			
		||||
    from string import Template
 | 
			
		||||
  File "/usr/lib/python3.2/string.py", line 178, in <module>
 | 
			
		||||
    class Formatter:
 | 
			
		||||
  File "/usr/lib/python3.2/string.py", line 179, in Formatter
 | 
			
		||||
    def format(self, format_string, *args, **kwargs):
 | 
			
		||||
KeyboardInterrupt
 | 
			
		||||
 | 
			
		||||
During handling of the above exception, another exception occurred:
 | 
			
		||||
 | 
			
		||||
Traceback (most recent call last):
 | 
			
		||||
  File "./bin/cdist", line 232, in <module>
 | 
			
		||||
    sys.exit(0)
 | 
			
		||||
NameError: name 'sys' is not defined
 | 
			
		||||
^C^CFatal Python error: Py_Initialize: can't initialize sys standard streams
 | 
			
		||||
Traceback (most recent call last):
 | 
			
		||||
  File "/usr/lib/python3.2/encodings/latin_1.py", line 8, in <module>
 | 
			
		||||
    """
 | 
			
		||||
KeyboardInterrupt
 | 
			
		||||
^C%                                                                                                                   [12:19] brief:cdist%
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
--------------------------------------------------------------------------------
 | 
			
		||||
[13:50] brief:cdist% ./bin/cdist config -vp monitoring02        
 | 
			
		||||
INFO: monitoring02: Running global explorers
 | 
			
		||||
INFO: monitoring02: Running initial manifest /home/users/nico/privat/firmen/local.ch/vcs/cdist/conf/manifest
 | 
			
		||||
INFO: monitoring02: Running object manifests and type explorers
 | 
			
		||||
INFO: monitoring02: Running manifest and explorers for __localch_shinken/singleton
 | 
			
		||||
^CTraceback (most recent call last):
 | 
			
		||||
  File "/usr/lib/python3.2/site.py", line 58, in <module>
 | 
			
		||||
    import traceback
 | 
			
		||||
  File "/usr/lib/python3.2/traceback.py", line 3, in <module>
 | 
			
		||||
    import linecache
 | 
			
		||||
  File "/usr/lib/python3.2/linecache.py", line 10, in <module>
 | 
			
		||||
    import tokenize
 | 
			
		||||
  File "/usr/lib/python3.2/tokenize.py", line 49, in <module>
 | 
			
		||||
    class TokenInfo(collections.namedtuple('TokenInfo', 'type string start end line')):
 | 
			
		||||
  File "/usr/lib/python3.2/collections.py", line 363, in namedtuple
 | 
			
		||||
    exec(class_definition, namespace)
 | 
			
		||||
  File "<string>", line 1, in <module>
 | 
			
		||||
KeyboardInterrupt
 | 
			
		||||
 | 
			
		||||
							
								
								
									
										26
									
								
								doc/dev/logs/2012-02-20.error-does-not-contain-host
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										26
									
								
								doc/dev/logs/2012-02-20.error-does-not-contain-host
									
										
									
									
									
										Normal file
									
								
							| 
						 | 
				
			
			@ -0,0 +1,26 @@
 | 
			
		|||
- errors do not contain host
 | 
			
		||||
- it's not logged which hosts failed!
 | 
			
		||||
 | 
			
		||||
INFO: monitoring02: Running manifest and explorers for __directory/opt/local.ch/sys/shinken/host.d
 | 
			
		||||
INFO: monitoring03: Running manifest and explorers for __file/usr/sbin/iptables-rebuild
 | 
			
		||||
INFO: monitoring03: Running manifest and explorers for __git/opt/local.ch/sys/shinken/shinken
 | 
			
		||||
INFO: monitoring02: Running manifest and explorers for __file/etc/iptables.d/005_start
 | 
			
		||||
INFO: monitoring03: Running manifest and explorers for __localch_rsyncd/singleton
 | 
			
		||||
ERROR: Object __localch_iptables/xensnmp already exists with conflicting parameters:
 | 
			
		||||
/home/users/nico/privat/firmen/local.ch/vcs/cdist/conf/manifest/init: {'rule': '-A RH-Firewall-1-INPUT -p tcp --dport 161 -j ACCEPT'}
 | 
			
		||||
/home/users/nico/privat/firmen/local.ch/vcs/cdist/conf/type/__localch_rsyncd/manifest: {'rule': '-A RH-Firewall-1-INPUT -p tcp --dport 873 -j ACCEPT'}
 | 
			
		||||
ERROR: Command failed: /bin/sh -e /home/users/nico/privat/firmen/local.ch/vcs/cdist/conf/type/__localch_rsyncd/manifest
 | 
			
		||||
INFO: monitoring02: Running manifest and explorers for __file/etc/iptables.d/500_xensnmp
 | 
			
		||||
INFO: monitoring02: Running manifest and explorers for __file/etc/iptables.d/995_end
 | 
			
		||||
INFO: monitoring02: Running manifest and explorers for __file/etc/rsyncd.conf
 | 
			
		||||
INFO: monitoring02: Running manifest and explorers for __file/etc/yum.repos.d/epel.repo
 | 
			
		||||
INFO: monitoring02: Running manifest and explorers for __file/etc/yum.repos.d/rpmforge.repo
 | 
			
		||||
INFO: monitoring02: Running manifest and explorers for __file/usr/sbin/iptables-rebuild
 | 
			
		||||
INFO: monitoring02: Running manifest and explorers for __git/opt/local.ch/sys/shinken/shinken
 | 
			
		||||
INFO: monitoring02: Running manifest and explorers for __localch_rsyncd/singleton
 | 
			
		||||
ERROR: Object __localch_iptables/xensnmp already exists with conflicting parameters:
 | 
			
		||||
/home/users/nico/privat/firmen/local.ch/vcs/cdist/conf/manifest/init: {'rule': '-A RH-Firewall-1-INPUT -p tcp --dport 161 -j ACCEPT'}
 | 
			
		||||
/home/users/nico/privat/firmen/local.ch/vcs/cdist/conf/type/__localch_rsyncd/manifest: {'rule': '-A RH-Firewall-1-INPUT -p tcp --dport 873 -j ACCEPT'}
 | 
			
		||||
ERROR: Command failed: /bin/sh -e /home/users/nico/privat/firmen/local.ch/vcs/cdist/conf/type/__localch_rsyncd/manifest
 | 
			
		||||
INFO: Total processing time for 2 host(s): 14.245397090911865
 | 
			
		||||
[16:53] brief:cdist% 
 | 
			
		||||
| 
						 | 
				
			
			@ -37,3 +37,4 @@ TYPES
 | 
			
		|||
- Add testing framework (proposed by Evax Software)
 | 
			
		||||
- __user
 | 
			
		||||
   add option to include --create-home
 | 
			
		||||
- Merge __addifnosuchline and __removeline into __line + --state present|absent
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -1,13 +1,13 @@
 | 
			
		|||
- introduce default parameters
 | 
			
		||||
    - valid for optional parameters only
 | 
			
		||||
    - stored in parameter/default/$name
 | 
			
		||||
 | 
			
		||||
    - when/where to save? in emulator?
 | 
			
		||||
        - read vi fsproperty?
 | 
			
		||||
 | 
			
		||||
- cleanup object_id handling
 | 
			
		||||
    - have a look at singletons
 | 
			
		||||
 | 
			
		||||
- ensure that all types, which support --state support
 | 
			
		||||
    present and absent (consistent look and feel)
 | 
			
		||||
 | 
			
		||||
--------------------------------------------------------------------------------
 | 
			
		||||
 | 
			
		||||
- update/create docs
 | 
			
		||||
    - cdist-cache::
 | 
			
		||||
        How to get use information about the hosts we have been working on [advanced]
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -101,12 +101,15 @@ conf/type/<name>/gencode-local::
 | 
			
		|||
conf/type/<name>/gencode-remote::
 | 
			
		||||
    Used to generate code to be executed on the client.
 | 
			
		||||
 | 
			
		||||
conf/type/<name>/parameters/required::
 | 
			
		||||
conf/type/<name>/parameter/required::
 | 
			
		||||
    Parameters required by type, \n seperated list.
 | 
			
		||||
 | 
			
		||||
conf/type/<name>/parameters/optional::
 | 
			
		||||
conf/type/<name>/parameter/optional::
 | 
			
		||||
    Parameters optionally accepted by type, \n seperated list.
 | 
			
		||||
 | 
			
		||||
conf/type/<name>/parameter/boolean::
 | 
			
		||||
   Boolean parameters accepted by type, \n seperated list.
 | 
			
		||||
 | 
			
		||||
conf/type/<name>/explorer::
 | 
			
		||||
    Location of the type specific explorers.
 | 
			
		||||
    This directory is referenced by the variable __type_explorer (see below).
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -40,7 +40,7 @@ A list of supported types can be found in the cdist-reference(7) manpage.
 | 
			
		|||
 | 
			
		||||
SINGLETON TYPES
 | 
			
		||||
---------------
 | 
			
		||||
If a type is flagged as a singleton, it may be used only 
 | 
			
		||||
If a type is flagged as a singleton, it may be used only
 | 
			
		||||
once per host. This is useful for types which can be used only once on a
 | 
			
		||||
system. Singleton types do not take an object name as argument.
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -72,15 +72,42 @@ To begin a new type, just create the directory **conf/type/__NAME**.
 | 
			
		|||
 | 
			
		||||
DEFINING PARAMETERS
 | 
			
		||||
-------------------
 | 
			
		||||
Every type consists of optional and required parameters, which must
 | 
			
		||||
be created in a newline seperated file in ***parameters/required*** and
 | 
			
		||||
***parameters/optional***. If either or both missing, the type will have
 | 
			
		||||
no required, no optional or no parameters at all.
 | 
			
		||||
Every type consists of required, optional and boolean parameters, which must
 | 
			
		||||
be created in a newline seperated file in ***parameter/required***,
 | 
			
		||||
***parameter/optional*** and ***parameter/boolean***. If either is missing,
 | 
			
		||||
the type will have no required, no optional, no boolean or no parameters at
 | 
			
		||||
all.
 | 
			
		||||
 | 
			
		||||
Example:
 | 
			
		||||
--------------------------------------------------------------------------------
 | 
			
		||||
echo servername >> conf/type/__nginx_vhost/parameter/required
 | 
			
		||||
echo logdirectory >> conf/type/__nginx_vhost/parameter/optional
 | 
			
		||||
echo use_ssl >> conf/type/__nginx_vhost/parameter/boolean
 | 
			
		||||
--------------------------------------------------------------------------------
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
USING PARAMETERS
 | 
			
		||||
----------------
 | 
			
		||||
The parameters given to a type can be accessed and used in all type scripts
 | 
			
		||||
(e.g manifest, gencode-*, explorer/*). Note that boolean parameters are
 | 
			
		||||
represented by file existence. File exists -> True,
 | 
			
		||||
file does not exist -> False
 | 
			
		||||
 | 
			
		||||
Example: (e.g. in conf/type/__nginx_vhost/manifest)
 | 
			
		||||
--------------------------------------------------------------------------------
 | 
			
		||||
# required parameter
 | 
			
		||||
servername="$(cat "$__object/parameter/servername")"
 | 
			
		||||
 | 
			
		||||
# optional parameter
 | 
			
		||||
if [ -f "$__object/parameter/logdirectory" ]; then
 | 
			
		||||
   logdirectory="$(cat "$__object/parameter/logdirectory")"
 | 
			
		||||
fi
 | 
			
		||||
 | 
			
		||||
# boolean parameter
 | 
			
		||||
if [ -f "$__object/parameter/use_ssl" ]; then
 | 
			
		||||
   # file exists -> True
 | 
			
		||||
   # do some fancy ssl stuff
 | 
			
		||||
fi
 | 
			
		||||
--------------------------------------------------------------------------------
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -116,7 +143,7 @@ SINGLETON - ONLY INSTANCE ONLY
 | 
			
		|||
------------------------------
 | 
			
		||||
If you want to ensure that a type can only be used once per target, you can
 | 
			
		||||
mark it as a singleton: Just create the (empty) file "singleton" in your type
 | 
			
		||||
directory: 
 | 
			
		||||
directory:
 | 
			
		||||
 | 
			
		||||
--------------------------------------------------------------------------------
 | 
			
		||||
touch conf/type/__NAME/singleton
 | 
			
		||||
| 
						 | 
				
			
			@ -128,7 +155,7 @@ This will also change the way your type must be called:
 | 
			
		|||
__YOURTYPE --parameter value
 | 
			
		||||
--------------------------------------------------------------------------------
 | 
			
		||||
 | 
			
		||||
As you can see, the object ID is omitted, because it does not make any sense, 
 | 
			
		||||
As you can see, the object ID is omitted, because it does not make any sense,
 | 
			
		||||
if your type can be used only once.
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -19,7 +19,7 @@
 | 
			
		|||
#
 | 
			
		||||
#
 | 
			
		||||
 | 
			
		||||
VERSION     = "2.0.7"
 | 
			
		||||
VERSION     = "2.0.8"
 | 
			
		||||
 | 
			
		||||
BANNER = """
 | 
			
		||||
             ..          .       .x+=:.        s
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -82,6 +82,7 @@ class CdistType(object):
 | 
			
		|||
        self.__explorers = None
 | 
			
		||||
        self.__required_parameters = None
 | 
			
		||||
        self.__optional_parameters = None
 | 
			
		||||
        self.__boolean_parameters = None
 | 
			
		||||
 | 
			
		||||
    def __repr__(self):
 | 
			
		||||
        return '<CdistType %s>' % self.name
 | 
			
		||||
| 
						 | 
				
			
			@ -144,3 +145,19 @@ class CdistType(object):
 | 
			
		|||
            finally:
 | 
			
		||||
                self.__optional_parameters = parameters
 | 
			
		||||
        return self.__optional_parameters
 | 
			
		||||
 | 
			
		||||
    @property
 | 
			
		||||
    def boolean_parameters(self):
 | 
			
		||||
        """Return a list of boolean parameters"""
 | 
			
		||||
        if not self.__boolean_parameters:
 | 
			
		||||
            parameters = []
 | 
			
		||||
            try:
 | 
			
		||||
                with open(os.path.join(self.absolute_path, "parameter", "boolean")) as fd:
 | 
			
		||||
                    for line in fd:
 | 
			
		||||
                        parameters.append(line.strip())
 | 
			
		||||
            except EnvironmentError:
 | 
			
		||||
                # error ignored
 | 
			
		||||
                pass
 | 
			
		||||
            finally:
 | 
			
		||||
                self.__boolean_parameters = parameters
 | 
			
		||||
        return self.__boolean_parameters
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -87,7 +87,7 @@ class Emulator(object):
 | 
			
		|||
    def commandline(self):
 | 
			
		||||
        """Parse command line"""
 | 
			
		||||
 | 
			
		||||
        parser = argparse.ArgumentParser(add_help=False)
 | 
			
		||||
        parser = argparse.ArgumentParser(add_help=False, argument_default=argparse.SUPPRESS)
 | 
			
		||||
 | 
			
		||||
        for parameter in self.cdist_type.optional_parameters:
 | 
			
		||||
            argument = "--" + parameter
 | 
			
		||||
| 
						 | 
				
			
			@ -95,6 +95,9 @@ class Emulator(object):
 | 
			
		|||
        for parameter in self.cdist_type.required_parameters:
 | 
			
		||||
            argument = "--" + parameter
 | 
			
		||||
            parser.add_argument(argument, dest=parameter, action='store', required=True)
 | 
			
		||||
        for parameter in self.cdist_type.boolean_parameters:
 | 
			
		||||
            argument = "--" + parameter
 | 
			
		||||
            parser.add_argument(argument, dest=parameter, action='store_const', const='')
 | 
			
		||||
 | 
			
		||||
        # If not singleton support one positional parameter
 | 
			
		||||
        if not self.cdist_type.is_singleton:
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -126,7 +126,7 @@ class AutoRequireEmulatorTestCase(test.CdistTestCase):
 | 
			
		|||
        self.assertEqual(sorted(cdist_object.requirements), sorted(expected))
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
class ArgumentsWithDashesTestCase(test.CdistTestCase):
 | 
			
		||||
class ArgumentsTestCase(test.CdistTestCase):
 | 
			
		||||
 | 
			
		||||
    def setUp(self):
 | 
			
		||||
        self.temp_dir = self.mkdtemp()
 | 
			
		||||
| 
						 | 
				
			
			@ -159,3 +159,59 @@ class ArgumentsWithDashesTestCase(test.CdistTestCase):
 | 
			
		|||
        cdist_type = core.CdistType(self.local.type_path, '__arguments_with_dashes')
 | 
			
		||||
        cdist_object = core.CdistObject(cdist_type, self.local.object_path, 'some-id')
 | 
			
		||||
        self.assertTrue('with-dash' in cdist_object.parameters)
 | 
			
		||||
 | 
			
		||||
    def test_boolean(self):
 | 
			
		||||
        type_name = '__arguments_boolean'
 | 
			
		||||
        object_id = 'some-id'
 | 
			
		||||
        argv = [type_name, object_id, '--boolean1']
 | 
			
		||||
        os.environ.update(self.env)
 | 
			
		||||
        emu = emulator.Emulator(argv)
 | 
			
		||||
        emu.run()
 | 
			
		||||
 | 
			
		||||
        cdist_type = core.CdistType(self.local.type_path, type_name)
 | 
			
		||||
        cdist_object = core.CdistObject(cdist_type, self.local.object_path, object_id)
 | 
			
		||||
        self.assertTrue('boolean1' in cdist_object.parameters)
 | 
			
		||||
        self.assertFalse('boolean2' in cdist_object.parameters)
 | 
			
		||||
        # empty file -> True
 | 
			
		||||
        self.assertTrue(cdist_object.parameters['boolean1'] == '')
 | 
			
		||||
 | 
			
		||||
    def test_required(self):
 | 
			
		||||
        type_name = '__arguments_required'
 | 
			
		||||
        object_id = 'some-id'
 | 
			
		||||
        value = 'some value'
 | 
			
		||||
        argv = [type_name, object_id, '--required1', value, '--required2', value]
 | 
			
		||||
        os.environ.update(self.env)
 | 
			
		||||
        emu = emulator.Emulator(argv)
 | 
			
		||||
        emu.run()
 | 
			
		||||
 | 
			
		||||
        cdist_type = core.CdistType(self.local.type_path, type_name)
 | 
			
		||||
        cdist_object = core.CdistObject(cdist_type, self.local.object_path, object_id)
 | 
			
		||||
        self.assertTrue('required1' in cdist_object.parameters)
 | 
			
		||||
        self.assertTrue('required2' in cdist_object.parameters)
 | 
			
		||||
        self.assertEqual(cdist_object.parameters['required1'], value)
 | 
			
		||||
        self.assertEqual(cdist_object.parameters['required2'], value)
 | 
			
		||||
 | 
			
		||||
#    def test_required_missing(self):
 | 
			
		||||
#        type_name = '__arguments_required'
 | 
			
		||||
#        object_id = 'some-id'
 | 
			
		||||
#        value = 'some value'
 | 
			
		||||
#        argv = [type_name, object_id, '--required1', value]
 | 
			
		||||
#        os.environ.update(self.env)
 | 
			
		||||
#        emu = emulator.Emulator(argv)
 | 
			
		||||
#        
 | 
			
		||||
#        self.assertRaises(SystemExit, emu.run)
 | 
			
		||||
 | 
			
		||||
    def test_optional(self):
 | 
			
		||||
        type_name = '__arguments_optional'
 | 
			
		||||
        object_id = 'some-id'
 | 
			
		||||
        value = 'some value'
 | 
			
		||||
        argv = [type_name, object_id, '--optional1', value]
 | 
			
		||||
        os.environ.update(self.env)
 | 
			
		||||
        emu = emulator.Emulator(argv)
 | 
			
		||||
        emu.run()
 | 
			
		||||
 | 
			
		||||
        cdist_type = core.CdistType(self.local.type_path, type_name)
 | 
			
		||||
        cdist_object = core.CdistObject(cdist_type, self.local.object_path, object_id)
 | 
			
		||||
        self.assertTrue('optional1' in cdist_object.parameters)
 | 
			
		||||
        self.assertFalse('optional2' in cdist_object.parameters)
 | 
			
		||||
        self.assertEqual(cdist_object.parameters['optional1'], value)
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -0,0 +1,2 @@
 | 
			
		|||
boolean1
 | 
			
		||||
boolean2
 | 
			
		||||
| 
						 | 
				
			
			@ -0,0 +1 @@
 | 
			
		|||
optional1
 | 
			
		||||
| 
						 | 
				
			
			@ -0,0 +1,2 @@
 | 
			
		|||
required1
 | 
			
		||||
required2
 | 
			
		||||
| 
						 | 
				
			
			@ -145,3 +145,14 @@ class TypeTestCase(test.CdistTestCase):
 | 
			
		|||
        base_path = fixtures
 | 
			
		||||
        cdist_type = core.CdistType(base_path, '__without_optional_parameters')
 | 
			
		||||
        self.assertEqual(cdist_type.optional_parameters, [])
 | 
			
		||||
 | 
			
		||||
    def test_with_boolean_parameters(self):
 | 
			
		||||
        base_path = fixtures
 | 
			
		||||
        cdist_type = core.CdistType(base_path, '__with_boolean_parameters')
 | 
			
		||||
        self.assertEqual(cdist_type.boolean_parameters, ['boolean1', 'boolean2'])
 | 
			
		||||
 | 
			
		||||
    def test_without_boolean_parameters(self):
 | 
			
		||||
        base_path = fixtures
 | 
			
		||||
        cdist_type = core.CdistType(base_path, '__without_boolean_parameters')
 | 
			
		||||
        self.assertEqual(cdist_type.boolean_parameters, [])
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -0,0 +1,2 @@
 | 
			
		|||
boolean1
 | 
			
		||||
boolean2
 | 
			
		||||
| 
						 | 
				
			
			@ -0,0 +1,6 @@
 | 
			
		|||
This type is not much of use, as any type can issue code to be executed. 
 | 
			
		||||
Thus you can implement the code directly in the calling type.
 | 
			
		||||
 Or if you need to reuse it, create a type on its own.
 | 
			
		||||
 | 
			
		||||
Because this seems to be a common misunderstanding when people come from "non managed areas",
 | 
			
		||||
 where script iexecution is the main focus, I documented this in cdist-hacker to clearify.
 | 
			
		||||
							
								
								
									
										26
									
								
								other/types_submitted_for_inclusion/__run_command/gencode-remote
									
										
									
									
									
										Executable file
									
								
							
							
						
						
									
										26
									
								
								other/types_submitted_for_inclusion/__run_command/gencode-remote
									
										
									
									
									
										Executable file
									
								
							| 
						 | 
				
			
			@ -0,0 +1,26 @@
 | 
			
		|||
#!/bin/sh
 | 
			
		||||
#
 | 
			
		||||
# 2012 Benedikt Koeppel (code at benediktkoeppel.ch)
 | 
			
		||||
#
 | 
			
		||||
# 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/command" ]; then
 | 
			
		||||
   cat "$__object/parameter/command"
 | 
			
		||||
else
 | 
			
		||||
   echo "$name"
 | 
			
		||||
fi
 | 
			
		||||
							
								
								
									
										70
									
								
								other/types_submitted_for_inclusion/__run_command/man.text
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										70
									
								
								other/types_submitted_for_inclusion/__run_command/man.text
									
										
									
									
									
										Normal file
									
								
							| 
						 | 
				
			
			@ -0,0 +1,70 @@
 | 
			
		|||
cdist-type__run_command(7)
 | 
			
		||||
==========================
 | 
			
		||||
Benedikt Koeppel <code--@--benediktkoeppel.ch>
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
NAME
 | 
			
		||||
----
 | 
			
		||||
cdist-type__run_command - Run a command 
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
DESCRIPTION
 | 
			
		||||
-----------
 | 
			
		||||
This cdist type allows you to run a specific command once at installation time.
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
REQUIRED PARAMETERS
 | 
			
		||||
-------------------
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
OPTIONAL PARAMETERS
 | 
			
		||||
-------------------
 | 
			
		||||
command::
 | 
			
		||||
   Command (with arguments) to run.
 | 
			
		||||
 | 
			
		||||
   If no command is give, then the object_id is executed.
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
EXAMPLES
 | 
			
		||||
--------
 | 
			
		||||
 | 
			
		||||
--------------------------------------------------------------------------------
 | 
			
		||||
# Run a command
 | 
			
		||||
__run_command "/etc/init.d/mysql restart"
 | 
			
		||||
# runs `/etc/init.d/mysql restart` (the "object_id")
 | 
			
		||||
 | 
			
		||||
# Run the same command:
 | 
			
		||||
__run_command restart-mysql --command "/etc/init.d/mysql restart"
 | 
			
		||||
# runs `/etc/init.d/mysql restart` (the --command argument)
 | 
			
		||||
# additionally, it can easily be referenced (for example in a require="..."
 | 
			
		||||
#as __run_command/restart-mysql
 | 
			
		||||
 | 
			
		||||
# Run a script:
 | 
			
		||||
__run_command install-pear --command "$(cat <<-EOF
 | 
			
		||||
	/usr/bin/pear install --force Auth
 | 
			
		||||
	/usr/bin/pear install --force HTML_Template_IT-1.2.1
 | 
			
		||||
	/usr/bin/pear install --force MDB2
 | 
			
		||||
	/usr/bin/pear install --force MDB2#mysql
 | 
			
		||||
	/usr/bin/pear config-set preferred_state beta;
 | 
			
		||||
	/usr/bin/pear install --force --alldeps Spreadsheet_Excel_Writer;
 | 
			
		||||
	/usr/bin/pear config-set preferred_state stable
 | 
			
		||||
	/usr/bin/pear install --force HTTP_Request
 | 
			
		||||
	/usr/bin/pear install --force Mail
 | 
			
		||||
	/usr/bin/pear install --force Auth_HTTP
 | 
			
		||||
	/usr/bin/pear install --force XML_RPC 
 | 
			
		||||
EOF
 | 
			
		||||
)"
 | 
			
		||||
 | 
			
		||||
--------------------------------------------------------------------------------
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
SEE ALSO
 | 
			
		||||
--------
 | 
			
		||||
- cdist-type(7)
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
COPYING
 | 
			
		||||
-------
 | 
			
		||||
Copyright \(C) 2012 Benedikt Koeppel. Free use of this software is
 | 
			
		||||
granted under the terms of the GNU General Public License version 3 (GPLv3).
 | 
			
		||||
| 
						 | 
				
			
			@ -0,0 +1 @@
 | 
			
		|||
command
 | 
			
		||||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue