diff --git a/.gitignore b/.gitignore index 57950f3b..10d98990 100644 --- a/.gitignore +++ b/.gitignore @@ -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 diff --git a/README b/README index 52471068..54f792a7 100644 --- a/README +++ b/README @@ -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 diff --git a/bin/cdist-config b/bin/cdist-config index 2e5c63b1..96de4664 100755 --- a/bin/cdist-config +++ b/bin/cdist-config @@ -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() diff --git a/bin/cdist-deploy-to b/bin/cdist-deploy-to index 02fd34fa..dab5d9a5 100755 --- a/bin/cdist-deploy-to +++ b/bin/cdist-deploy-to @@ -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" diff --git a/bin/cdist-mass-deploy b/bin/cdist-mass-deploy new file mode 100755 index 00000000..2753bcab --- /dev/null +++ b/bin/cdist-mass-deploy @@ -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 . +# +# +# Deploy configuration to many hosts +# + +. cdist-config +[ $# -ge 1 ] || __cdist_usage "[-p] [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 diff --git a/bin/cdist-object-process b/bin/cdist-object-prepare similarity index 85% rename from bin/cdist-object-process rename to bin/cdist-object-prepare index 777d2c88..8c92ff73 100755 --- a/bin/cdist-object-process +++ b/bin/cdist-object-prepare @@ -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 diff --git a/build.sh b/build.sh index ab62287e..e033c007 100755 --- a/build.sh +++ b/build.sh @@ -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" \ diff --git a/doc/changelog b/doc/changelog index 9672814f..9dda1806 100644 --- a/doc/changelog +++ b/doc/changelog @@ -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 diff --git a/doc/dev/todo/1.6 b/doc/dev/todo/1.6 deleted file mode 100644 index 12a83e93..00000000 --- a/doc/dev/todo/1.6 +++ /dev/null @@ -1,3 +0,0 @@ -Documentation: - - update stages - - go through all manpages and ensure __ and co are correct diff --git a/doc/dev/todo/TAKEME b/doc/dev/todo/TAKEME index 7e9d2d5d..0fcced96 100644 --- a/doc/dev/todo/TAKEME +++ b/doc/dev/todo/TAKEME @@ -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" diff --git a/doc/dev/todo/niconext b/doc/dev/todo/niconext index e7f2c72f..1f01ff44 100644 --- a/doc/dev/todo/niconext +++ b/doc/dev/todo/niconext @@ -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 diff --git a/doc/man/.gitignore b/doc/man/.gitignore deleted file mode 100644 index 8ed9d1e1..00000000 --- a/doc/man/.gitignore +++ /dev/null @@ -1,4 +0,0 @@ -cdist.7 -*.html -cdist-design.7 -cdist-reference.text diff --git a/doc/man/cdist-reference.text.sh b/doc/man/cdist-reference.text.sh index a5d1698a..51ae2a55 100755 --- a/doc/man/cdist-reference.text.sh +++ b/doc/man/cdist-reference.text.sh @@ -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 </conf. The local output directory can be changed by the variable **__cdist_local_base_dir**. All environment variables are handled by cdist-config. diff --git a/doc/man/man1/cdist-mass-deploy.text b/doc/man/man1/cdist-mass-deploy.text new file mode 100644 index 00000000..ac495b21 --- /dev/null +++ b/doc/man/man1/cdist-mass-deploy.text @@ -0,0 +1,41 @@ +cdist-mass-deploy(1) +==================== +Nico Schottelius + + +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). diff --git a/doc/man/man1/cdist-object-all.text b/doc/man/man1/cdist-object-all.text new file mode 100644 index 00000000..06d45268 --- /dev/null +++ b/doc/man/man1/cdist-object-all.text @@ -0,0 +1,31 @@ +cdist-object-all(1) +=================== +Steven Armstrong + + +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). diff --git a/doc/man/man1/cdist-object-code-run.text b/doc/man/man1/cdist-object-code-run.text index a055fc97..f8bae6a4 100644 --- a/doc/man/man1/cdist-object-code-run.text +++ b/doc/man/man1/cdist-object-code-run.text @@ -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) diff --git a/doc/man/man1/cdist-object-gencode-run.text b/doc/man/man1/cdist-object-gencode-run.text index be2d3448..7705815c 100644 --- a/doc/man/man1/cdist-object-gencode-run.text +++ b/doc/man/man1/cdist-object-gencode-run.text @@ -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) diff --git a/doc/man/man1/cdist-object-prepare.text b/doc/man/man1/cdist-object-prepare.text new file mode 100644 index 00000000..c91a7b2e --- /dev/null +++ b/doc/man/man1/cdist-object-prepare.text @@ -0,0 +1,35 @@ +cdist-object-prepare(1) +======================= +Steven Armstrong + + +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). diff --git a/doc/man/man1/cdist-object-push.text b/doc/man/man1/cdist-object-push.text index 5bff71cf..4c960eaa 100644 --- a/doc/man/man1/cdist-object-push.text +++ b/doc/man/man1/cdist-object-push.text @@ -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) diff --git a/doc/man/man1/cdist-object-run-all.text b/doc/man/man1/cdist-object-run-all.text deleted file mode 100644 index 9e36b3d4..00000000 --- a/doc/man/man1/cdist-object-run-all.text +++ /dev/null @@ -1,33 +0,0 @@ -cdist-object-run-all(1) -======================= -Nico Schottelius - - -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). diff --git a/doc/man/man1/cdist-object-run.text b/doc/man/man1/cdist-object-run.text index fca6db91..fc85a05f 100644 --- a/doc/man/man1/cdist-object-run.text +++ b/doc/man/man1/cdist-object-run.text @@ -1,6 +1,6 @@ cdist-object-run(1) =================== -Nico Schottelius +Steven Armstrong 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). diff --git a/doc/man/man7/cdist-stages.text b/doc/man/man7/cdist-stages.text index e2eef3da..294dffc7 100644 --- a/doc/man/man7/cdist-stages.text +++ b/doc/man/man7/cdist-stages.text @@ -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)