Merge branch 'master' of git://git.schottelius.org/cdist

This commit is contained in:
Andreas Brönnimann 2011-04-06 19:59:34 +02:00
commit 5d6c483e39
23 changed files with 211 additions and 94 deletions

2
.gitignore vendored
View file

@ -6,7 +6,9 @@ doc/man/.marker
doc/man/man1/*.1 doc/man/man1/*.1
doc/man/man7/*.7 doc/man/man7/*.7
doc/man/man*/*.html doc/man/man*/*.html
doc/man/man*/*.xml
doc/man/man7/cdist-type__*.text doc/man/man7/cdist-type__*.text
doc/man/man7/cdist-reference.text
doc/man/man*/docbook-xsl.css doc/man/man*/docbook-xsl.css
# Ignore cache for version control # Ignore cache for version control

9
README
View file

@ -15,17 +15,16 @@
"P' "" "" "P' "" ""
[[!toc levels=2]] [[!toc levels=2]]
## Introduction ## Introduction
cdist configures your system and is similar to cdist is an alternative to other configuration management systems like
other configuration management systems like
[cfengine](http://www.cfengine.org/), [cfengine](http://www.cfengine.org/),
[bcfg2](http://trac.mcs.anl.gov/projects/bcfg2), [bcfg2](http://trac.mcs.anl.gov/projects/bcfg2),
[chef](http://wiki.opscode.com/display/chef/) [chef](http://wiki.opscode.com/display/chef/)
and [puppet](http://www.puppetlabs.com/), but it ticks differently. and [puppet](http://www.puppetlabs.com/).
Here are some features that makes it unique: But cdist ticks differently, here is the feature set that makes it unique:
[[!table data=""" [[!table data="""
Keywords | Description Keywords | Description

View file

@ -19,7 +19,7 @@
# #
# #
__cdist_version="1.6.0pre" __cdist_version="1.6.0"
# Fail if something bogus is going on # Fail if something bogus is going on
set -u set -u
@ -55,7 +55,7 @@ __cdist_abs_myname="$__cdist_abs_mydir/$__cdist_myname"
: ${__cdist_name_manifest:=manifest} : ${__cdist_name_manifest:=manifest}
: ${__cdist_name_object:=object} : ${__cdist_name_object:=object}
: ${__cdist_name_object_finished:=done} : ${__cdist_name_object_finished:=done}
: ${__cdist_name_object_processed:=processed} : ${__cdist_name_object_prepared:=prepared}
: ${__cdist_name_object_id:=object_id} : ${__cdist_name_object_id:=object_id}
: ${__cdist_name_object_source:=source} : ${__cdist_name_object_source:=source}
: ${__cdist_name_objects_created:=.objects_created} : ${__cdist_name_objects_created:=.objects_created}
@ -210,9 +210,9 @@ __cdist_object_code()
echo "$(__cdist_object_dir "$1")/${__cdist_name_code}" echo "$(__cdist_object_dir "$1")/${__cdist_name_code}"
} }
__cdist_object_processed() __cdist_object_prepared()
{ {
echo "$(__cdist_object_dir "$1")/${__cdist_name_object_processed}" echo "$(__cdist_object_dir "$1")/${__cdist_name_object_prepared}"
} }
__cdist_object_finished() __cdist_object_finished()

View file

@ -49,7 +49,7 @@ cdist-dir push "$__cdist_target_host" \
"${__cdist_abs_mydir}" "${__cdist_remote_bin_dir}" "${__cdist_abs_mydir}" "${__cdist_remote_bin_dir}"
cdist-explorer-run-global "$__cdist_target_host" cdist-explorer-run-global "$__cdist_target_host"
cdist-manifest-run-init "$__cdist_target_host" cdist-manifest-run-init "$__cdist_target_host"
cdist-object-all "$__cdist_target_host" cdist-object-process cdist-object-all "$__cdist_target_host" cdist-object-prepare
cdist-object-all "$__cdist_target_host" cdist-object-run cdist-object-all "$__cdist_target_host" cdist-object-run
cdist-cache "$__cdist_target_host" cdist-cache "$__cdist_target_host"

47
bin/cdist-mass-deploy Executable file
View file

@ -0,0 +1,47 @@
#!/bin/sh
#
# 2011 Nico Schottelius (nico-cdist at schottelius.org)
#
# This file is part of cdist.
#
# cdist is free software: you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation, either version 3 of the License, or
# (at your option) any later version.
#
# cdist is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with cdist. If not, see <http://www.gnu.org/licenses/>.
#
#
# Deploy configuration to many hosts
#
. cdist-config
[ $# -ge 1 ] || __cdist_usage "[-p] <target host> [target host ...]"
set -eu
parallel=""
if [ "$1" = "-p" ]; then
parallel=yes
shift
fi
while [ $# -ge 1 ]; do
# always assume we run parallel
cdist-deploy-to "$1" | awk -v host=$1 '{ print "[" host "] " $0 }' &
shift
# if not, wait for it _now_
[ "$parallel" ] || wait
done
# else wait after all are started
if [ "$parallel" ]; then
echo "Waiting for cdist-deploy-to jobs to finish..."
wait
fi

View file

@ -36,13 +36,13 @@ __cdist_object_dir="$(__cdist_object_dir "$__cdist_object")"
# Export to non-core for use in manifest and gencode scripts # Export to non-core for use in manifest and gencode scripts
export $__cdist_name_var_self=$__cdist_object export $__cdist_name_var_self=$__cdist_object
__cdist_object_processed="$(__cdist_object_processed "$__cdist_object")" __cdist_object_prepared="$(__cdist_object_prepared "$__cdist_object")"
if [ ! -f "$__cdist_object_processed" ]; then if [ ! -f "$__cdist_object_prepared" ]; then
echo echo
echo "Processing object $__cdist_object" echo "Preparing object $__cdist_object"
cdist-object-explorer-run "$__cdist_target_host" "$__cdist_object" cdist-object-explorer-run "$__cdist_target_host" "$__cdist_object"
cdist-object-manifest-run "$__cdist_target_host" "$__cdist_object" cdist-object-manifest-run "$__cdist_target_host" "$__cdist_object"
# Mark this object as processed # Mark this object as prepared
touch "$__cdist_object_processed" touch "$__cdist_object_prepared"
fi fi

View file

@ -57,12 +57,12 @@ case "$1" in
for src in ${MANDIR}/man${section}/*.text; do for src in ${MANDIR}/man${section}/*.text; do
manpage="${src%.text}.$section" manpage="${src%.text}.$section"
if [ ! -f "$manpage" -o "$manpage" -ot "$src" ]; then if [ ! -f "$manpage" -o "$manpage" -ot "$src" ]; then
echo "Compiling manpage for $src" echo "Compiling man page for $src"
$A2XM "$src" $A2XM "$src"
fi fi
htmlpage="${src%.text}.html" htmlpage="${src%.text}.html"
if [ ! -f "$htmlpage" -o "$htmlpage" -ot "$src" ]; then if [ ! -f "$htmlpage" -o "$htmlpage" -ot "$src" ]; then
echo "Compiling html for $src" echo "Compiling html page for $src"
$A2XH "$src" $A2XH "$src"
fi fi
done done
@ -99,7 +99,7 @@ case "$1" in
;; ;;
clean) clean)
rm -f ${MANDIR}/cdist-reference.text rm -f ${MAN7DSTDIR}/cdist-reference.text
find "${MANDIR}" -mindepth 2 -type l \ find "${MANDIR}" -mindepth 2 -type l \
-o -name "*.1" \ -o -name "*.1" \
-o -name "*.7" \ -o -name "*.7" \

View file

@ -1,4 +1,4 @@
1.6.0: 1.6.0: 2011-04-06
* New Type __package_yum * New Type __package_yum
* New type __debconf_set_selections * New type __debconf_set_selections
* New explorer os_version * New explorer os_version
@ -9,6 +9,7 @@
* Removed --preseed support from __package_apt * Removed --preseed support from __package_apt
* explorer/os: gained Fedora support * explorer/os: gained Fedora support
* Simplified types __user and __group * Simplified types __user and __group
* New helper binary: cdist-mass-deploy
1.5.0: 2011-04-01 1.5.0: 2011-04-01
* Add basic cache functionality * Add basic cache functionality

View file

@ -1,3 +0,0 @@
Documentation:
- update stages
- go through all manpages and ensure __ and co are correct

View file

@ -16,7 +16,6 @@ CORE
- cdist-object-gencode: remove code if output empty? - cdist-object-gencode: remove code if output empty?
- also take care of that in cdist-code-run! - also take care of that in cdist-code-run!
- cdist-object-process -> cdist-object-prepare
- Remove cdist-object-push, covers only one line and is used only once: - Remove cdist-object-push, covers only one line and is used only once:
[20:22] kr:bin% grep cdist-object-push * [20:22] kr:bin% grep cdist-object-push *
cdist-object-run: cdist-object-push "$__cdist_target_host" "$__cdist_object" cdist-object-run: cdist-object-push "$__cdist_target_host" "$__cdist_object"

View file

@ -1,2 +1,3 @@
remove --preseed from package_apt and add debconf_set_selection or similar Cleanup documentation:
-> much cleaner! type reference -> add types + manpages
add explorer reference

4
doc/man/.gitignore vendored
View file

@ -1,4 +0,0 @@
cdist.7
*.html
cdist-design.7
cdist-reference.text

View file

@ -132,8 +132,20 @@ tmp_dir::
TYPES TYPES
----- -----
The available types are listed in the SEE ALSO section The following types are available:
and are referenced as cdist-type__TYPENAME.
eof
for type in man7/cdist-type__*.text; do
no_dir="${type#man7/}";
no_type="${no_dir#cdist-type}";
name="${no_type%.text}";
man="${no_dir%.text}(7)"
echo "- $name" "($man)"
done
cat << eof
ENVIRONMENT VARIABLES ENVIRONMENT VARIABLES
--------------------- ---------------------
@ -172,16 +184,7 @@ __type_explorers::
SEE ALSO SEE ALSO
-------- --------
- cdist(7) - cdist(7)
eof
for type in man7/cdist-type__*.7; do
name_1="${type#man7/}"
name_2="${name_1%.7}"
name="$name_2"
echo "- ${name}(7)"
done
cat <<eof
COPYING COPYING
------- -------

View file

@ -23,7 +23,7 @@ called stages. It is intented to run either from the command line or from cron.
ENVIRONMENT ENVIRONMENT
----------- -----------
If the environment variable **__cdist_conf_dir** is not set, the If the environment variable **__cdist_conf_dir** is not set, the
configuration is read from /etc/cdist. The local output directory can configuration is read from <git-checkout>/conf. The local output directory can
be changed by the variable **__cdist_local_base_dir**. All environment be changed by the variable **__cdist_local_base_dir**. All environment
variables are handled by cdist-config. variables are handled by cdist-config.

View file

@ -0,0 +1,41 @@
cdist-mass-deploy(1)
====================
Nico Schottelius <nico-cdist--@--schottelius.org>
NAME
----
cdist-mass-deploy - Deploy configuration to many hosts
SYNOPSIS
--------
cdist-mass-deploy [-p] HOSTNAME [HOSTNAME ...]
DESCRIPTION
-----------
cdist-mass-deploy is essentially a wrapper around cdist-deploy-to to
be able to deploy to many hosts on one command line.
EXAMPLES
--------
Deploy in parallel to all hosts specfied in the dsh group configuration ikr,
which is prefixed by "root@":
--------------------------------------------------------------------------------
cdist-mass-deploy -p $(cat ~/.dsh/group/ikr | sed 's/^root@//')
--------------------------------------------------------------------------------
SEE ALSO
--------
- cdist(7)
- cdist-deploy-to(1)
COPYING
-------
Copyright \(C) 2010-2011 Nico Schottelius. Free use of this software is
granted under the terms of the GNU General Public License version 3 (GPLv3).

View file

@ -0,0 +1,31 @@
cdist-object-all(1)
===================
Steven Armstrong <steven-cdist--@--armstrong.cc>
NAME
----
cdist-object-all - Run the given command on all objects
SYNOPSIS
--------
cdist-object-all HOSTNAME COMMAND
DESCRIPTION
-----------
Iterates over all defined objects and executes the given command on each
of them.
SEE ALSO
--------
- cdist(7)
- cdist-type(1)
COPYING
-------
Copyright \(C) 2011 Steven Armstrong. Free use of this software is
granted under the terms of the GNU General Public License version 3 (GPLv3).

View file

@ -21,7 +21,7 @@ Execute the local and remote code for the given object.
SEE ALSO SEE ALSO
-------- --------
- cdist(7) - cdist(7)
- cdist-object-run-all(1) - cdist-object-run(1)
- cdist-code-run(1) - cdist-code-run(1)
- cdist-run-remote(1) - cdist-run-remote(1)

View file

@ -22,7 +22,7 @@ SEE ALSO
-------- --------
- cdist(7) - cdist(7)
- cdist-code-run(1) - cdist-code-run(1)
- cdist-object-run-all(1) - cdist-object-run(1)
- cdist-object-gencode(1) - cdist-object-gencode(1)

View file

@ -0,0 +1,35 @@
cdist-object-prepare(1)
=======================
Steven Armstrong <steven-cdist--@--armstrong.cc>
NAME
----
cdist-object-prepare - Prepare an object
SYNOPSIS
--------
cdist-object-prepare HOSTNAME OBJECT
DESCRIPTION
-----------
Prepare the given object by running it through stage 3 (object information
retrieval) and stage 4 (run the object manifest).
See related man pages for details.
SEE ALSO
--------
- cdist(7)
- cdist-stages(7)
- cdist-object-explorer-run(1)
- cdist-object-manifest-run(1)
- cdist-type(1)
COPYING
-------
Copyright \(C) 2011 Steven Armstrong. Free use of this software is granted
under the terms of the GNU General Public License version 3 (GPLv3).

View file

@ -21,7 +21,7 @@ Transfers the given object to the target host.
SEE ALSO SEE ALSO
-------- --------
- cdist(7) - cdist(7)
- cdist-object-run-all(1) - cdist-object-run(1)
- cdist-type(1) - cdist-type(1)

View file

@ -1,33 +0,0 @@
cdist-object-run-all(1)
=======================
Nico Schottelius <nico-cdist--@--schottelius.org>
NAME
----
cdist-object-run-all - Run all created objects on the target host
SYNOPSIS
--------
cdist-object-run-all HOSTNAME
DESCRIPTION
-----------
Transfers type explorers to the target then runs cdist-object-run(1)
for each created object.
SEE ALSO
--------
- cdist(7)
- cdist-type-explorer-push(1)
- cdist-object-run(1)
- cdist-type(1)
COPYING
-------
Copyright \(C) 2011 Nico Schottelius, Steven Armstrong. Free use of this software is
granted under the terms of the GNU General Public License version 3 (GPLv3).

View file

@ -1,6 +1,6 @@
cdist-object-run(1) cdist-object-run(1)
=================== ===================
Nico Schottelius <nico-cdist--@--schottelius.org> Steven Armstrong <steven-cdist--@--armstrong.cc>
NAME NAME
@ -15,15 +15,15 @@ cdist-object-run HOSTNAME OBJECT
DESCRIPTION DESCRIPTION
----------- -----------
Runs the given object on the given target host. Applies the given object on the target host by running it through stage 5
The different subtasks are dispatched to specialized exectuables. (code generation) and stage 6 (code execution).
See related man pages for details. See related man pages for details.
SEE ALSO SEE ALSO
-------- --------
- cdist(7) - cdist(7)
- cdist-object-explorer-run(1) - cdist-stages(7)
- cdist-object-gencode-run(1) - cdist-object-gencode-run(1)
- cdist-object-push(1) - cdist-object-push(1)
- cdist-object-code-run(1) - cdist-object-code-run(1)
@ -32,5 +32,5 @@ SEE ALSO
COPYING COPYING
------- -------
Copyright \(C) 2011 Nico Schottelius, Steven Armstrong. Free use of this software is Copyright \(C) 2011 Steven Armstrong. Free use of this software is
granted under the terms of the GNU General Public License version 3 (GPLv3). granted under the terms of the GNU General Public License version 3 (GPLv3).

View file

@ -11,8 +11,8 @@ DESCRIPTION
----------- -----------
Starting the execution of deployment with cdist-deploy-to(1), cdist passes Starting the execution of deployment with cdist-deploy-to(1), cdist passes
through different stages, each can be triggered and debugged on its own. through different stages, each can be triggered and debugged on its own.
Reading the source of the cdist-deploy-to and cdist-object-run-all executables Reading the source of the cdist-deploy-to executable shows the scripts
shows the scripts responsible for each stage. responsible for each stage.
STAGE 0: INTERNAL PREPERATION STAGE 0: INTERNAL PREPERATION
@ -56,7 +56,7 @@ STAGE 3: OBJECT INFORMATION RETRIEVAL
------------------------------------- -------------------------------------
Every object is checked whether its type has explorers and if so, these are Every object is checked whether its type has explorers and if so, these are
transfered to the target host and executed. The results are transfered back transfered to the target host and executed. The results are transfered back
and can be used in the following stages to decide what changes need to made and can be used in the following stages to decide what changes need to be made
on the target to implement the desired state. on the target to implement the desired state.
Related documentation: Related documentation:
@ -68,10 +68,9 @@ Related documentation:
STAGE 4: RUN THE OBJECT MANIFEST STAGE 4: RUN THE OBJECT MANIFEST
-------------------------------- --------------------------------
Every object is checked whether its type has a manifest file. If the type has Every object is checked whether its type has a executable manifest. The
a manifest file and it is executable, it will be executed. The manifest script manifest script may generate and change the created objects. In other words,
may generate and change the created objects. In other words, one type can reuse one type can reuse other types.
other types.
For instance the object __apache/www.test.ch is of type __apache, which may For instance the object __apache/www.test.ch is of type __apache, which may
contain a manifest script, which creates new objects of type __file. contain a manifest script, which creates new objects of type __file.
@ -88,11 +87,10 @@ Related documentation:
STAGE 5: CODE GENERATION STAGE 5: CODE GENERATION
------------------------ ------------------------
In this stage for every created objects its type is checked whether it has a In this stage for every created object its type is checked for executable
gencode script. If the type has a gencode script and it is executable it will gencode scripts. The gencode scripts generate the code to be executed on the
be executed. This executable should create code to be executed on the target target on stdout. If the gencode executables fail, they must print diagnostic
on stdout. If the gencode executable fails, it must print diagnostic messages messages on stderr and exit non-zero.
on stderr and exit non-zero.
Related documentation: Related documentation:
- cdist-object-gencode-run(1) - cdist-object-gencode-run(1)