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/man7/*.7
doc/man/man*/*.html
doc/man/man*/*.xml
doc/man/man7/cdist-type__*.text
doc/man/man7/cdist-reference.text
doc/man/man*/docbook-xsl.css
# Ignore cache for version control

9
README
View file

@ -15,17 +15,16 @@
"P' "" ""
[[!toc levels=2]]
[[!toc levels=2]]
## Introduction
cdist configures your system and is similar to
other configuration management systems like
cdist is an alternative to other configuration management systems like
[cfengine](http://www.cfengine.org/),
[bcfg2](http://trac.mcs.anl.gov/projects/bcfg2),
[chef](http://wiki.opscode.com/display/chef/)
and [puppet](http://www.puppetlabs.com/), but it ticks differently.
Here are some features that makes it unique:
and [puppet](http://www.puppetlabs.com/).
But cdist ticks differently, here is the feature set that makes it unique:
[[!table data="""
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
set -u
@ -55,7 +55,7 @@ __cdist_abs_myname="$__cdist_abs_mydir/$__cdist_myname"
: ${__cdist_name_manifest:=manifest}
: ${__cdist_name_object:=object}
: ${__cdist_name_object_finished:=done}
: ${__cdist_name_object_processed:=processed}
: ${__cdist_name_object_prepared:=prepared}
: ${__cdist_name_object_id:=object_id}
: ${__cdist_name_object_source:=source}
: ${__cdist_name_objects_created:=.objects_created}
@ -210,9 +210,9 @@ __cdist_object_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()

View file

@ -49,7 +49,7 @@ cdist-dir push "$__cdist_target_host" \
"${__cdist_abs_mydir}" "${__cdist_remote_bin_dir}"
cdist-explorer-run-global "$__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-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 $__cdist_name_var_self=$__cdist_object
__cdist_object_processed="$(__cdist_object_processed "$__cdist_object")"
if [ ! -f "$__cdist_object_processed" ]; then
__cdist_object_prepared="$(__cdist_object_prepared "$__cdist_object")"
if [ ! -f "$__cdist_object_prepared" ]; then
echo
echo "Processing object $__cdist_object"
echo "Preparing object $__cdist_object"
cdist-object-explorer-run "$__cdist_target_host" "$__cdist_object"
cdist-object-manifest-run "$__cdist_target_host" "$__cdist_object"
# Mark this object as processed
touch "$__cdist_object_processed"
# Mark this object as prepared
touch "$__cdist_object_prepared"
fi

View file

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

View file

@ -1,4 +1,4 @@
1.6.0:
1.6.0: 2011-04-06
* New Type __package_yum
* New type __debconf_set_selections
* New explorer os_version
@ -9,6 +9,7 @@
* Removed --preseed support from __package_apt
* explorer/os: gained Fedora support
* Simplified types __user and __group
* New helper binary: cdist-mass-deploy
1.5.0: 2011-04-01
* 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?
- 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:
[20:22] kr:bin% grep cdist-object-push *
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
-> much cleaner!
Cleanup documentation:
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
-----
The available types are listed in the SEE ALSO section
and are referenced as cdist-type__TYPENAME.
The following types are available:
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
---------------------
@ -172,16 +184,7 @@ __type_explorers::
SEE ALSO
--------
- 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
-------

View file

@ -23,7 +23,7 @@ called stages. It is intented to run either from the command line or from cron.
ENVIRONMENT
-----------
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
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
--------
- cdist(7)
- cdist-object-run-all(1)
- cdist-object-run(1)
- cdist-code-run(1)
- cdist-run-remote(1)

View file

@ -22,7 +22,7 @@ SEE ALSO
--------
- cdist(7)
- cdist-code-run(1)
- cdist-object-run-all(1)
- cdist-object-run(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
--------
- cdist(7)
- cdist-object-run-all(1)
- cdist-object-run(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)
===================
Nico Schottelius <nico-cdist--@--schottelius.org>
Steven Armstrong <steven-cdist--@--armstrong.cc>
NAME
@ -15,15 +15,15 @@ cdist-object-run HOSTNAME OBJECT
DESCRIPTION
-----------
Runs the given object on the given target host.
The different subtasks are dispatched to specialized exectuables.
Applies the given object on the target host by running it through stage 5
(code generation) and stage 6 (code execution).
See related man pages for details.
SEE ALSO
--------
- cdist(7)
- cdist-object-explorer-run(1)
- cdist-stages(7)
- cdist-object-gencode-run(1)
- cdist-object-push(1)
- cdist-object-code-run(1)
@ -32,5 +32,5 @@ SEE ALSO
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).

View file

@ -11,8 +11,8 @@ DESCRIPTION
-----------
Starting the execution of deployment with cdist-deploy-to(1), cdist passes
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
shows the scripts responsible for each stage.
Reading the source of the cdist-deploy-to executable shows the scripts
responsible for each stage.
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
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.
Related documentation:
@ -68,10 +68,9 @@ Related documentation:
STAGE 4: RUN THE OBJECT MANIFEST
--------------------------------
Every object is checked whether its type has a manifest file. If the type has
a manifest file and it is executable, it will be executed. The manifest script
may generate and change the created objects. In other words, one type can reuse
other types.
Every object is checked whether its type has a executable manifest. The
manifest script may generate and change the created objects. In other words,
one type can reuse other types.
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.
@ -88,11 +87,10 @@ Related documentation:
STAGE 5: CODE GENERATION
------------------------
In this stage for every created objects its type is checked whether it has a
gencode script. If the type has a gencode script and it is executable it will
be executed. This executable should create code to be executed on the target
on stdout. If the gencode executable fails, it must print diagnostic messages
on stderr and exit non-zero.
In this stage for every created object its type is checked for executable
gencode scripts. The gencode scripts generate the code to be executed on the
target on stdout. If the gencode executables fail, they must print diagnostic
messages on stderr and exit non-zero.
Related documentation:
- cdist-object-gencode-run(1)