Merge branch 'master' into install

Conflicts:
	bin/cdist-config

Signed-off-by: Nico Schottelius <nico@kr.ethz.ch>
This commit is contained in:
Nico Schottelius 2011-09-19 15:05:39 +02:00
commit 9a3d9334d5
57 changed files with 1612 additions and 693 deletions

View file

@ -1,6 +1,9 @@
2.0.0:
2.0.1:
* Bugfix cdist: Always print source of error in case of exec errors
2.0.0: 2011-09-16
* New Type: __package_rubygem (Chase Allen James)
* __self replaced by __object_fq (or so)
* __self replaced by __object_fq
* Rewrote cdist in Python
1.7.1: 2011-07-26

View file

@ -0,0 +1,63 @@
48 core
model name : AMD Opteron(tm) Processor 6174
128 GB RAM
Dell PowerEdge R815
root@sgs-r815-01:~/cdist-nutzung# grep "Total processing time for" deploy-all-benchmark-noikr13
INFO: Total processing time for 1 host(s): 257.641541
INFO: Total processing time for 2 host(s): 257.025783
INFO: Total processing time for 3 host(s): 258.933088
INFO: Total processing time for 4 host(s): 259.253074
INFO: Total processing time for 5 host(s): 260.331896
INFO: Total processing time for 6 host(s): 262.051349
INFO: Total processing time for 7 host(s): 323.820878
INFO: Total processing time for 8 host(s): 329.081856
INFO: Total processing time for 9 host(s): 333.346278
INFO: Total processing time for 10 host(s): 334.832419
INFO: Total processing time for 11 host(s): 330.572375
INFO: Total processing time for 12 host(s): 331.726628
INFO: Total processing time for 13 host(s): 331.740591
INFO: Total processing time for 14 host(s): 331.237139
INFO: Total processing time for 15 host(s): 331.718861
INFO: Total processing time for 16 host(s): 332.374645
INFO: Total processing time for 17 host(s): 331.510445
INFO: Total processing time for 18 host(s): 332.030743
INFO: Total processing time for 19 host(s): 332.193198
INFO: Total processing time for 20 host(s): 333.933765
INFO: Total processing time for 21 host(s): 335.292953
INFO: Total processing time for 22 host(s): 337.253608
INFO: Total processing time for 23 host(s): 337.831493
INFO: Total processing time for 24 host(s): 339.024737
INFO: Total processing time for 25 host(s): 343.515044
INFO: Total processing time for 26 host(s): 339.759678
INFO: Total processing time for 27 host(s): 339.378998
INFO: Total processing time for 28 host(s): 339.640378
INFO: Total processing time for 29 host(s): 340.885614
INFO: Total processing time for 30 host(s): 341.836923
INFO: Total processing time for 31 host(s): 343.825758
INFO: Total processing time for 32 host(s): 344.176089
INFO: Total processing time for 33 host(s): 345.408518
INFO: Total processing time for 34 host(s): 347.15322
INFO: Total processing time for 35 host(s): 351.330649
INFO: Total processing time for 36 host(s): 347.640758
INFO: Total processing time for 37 host(s): 347.381126
INFO: Total processing time for 38 host(s): 347.053406
INFO: Total processing time for 39 host(s): 347.453166
INFO: Total processing time for 40 host(s): 347.84804
INFO: Total processing time for 41 host(s): 349.035272
INFO: Total processing time for 42 host(s): 349.41507
INFO: Total processing time for 43 host(s): 351.208072
INFO: Total processing time for 44 host(s): 351.788401
INFO: Total processing time for 45 host(s): 351.730259
INFO: Total processing time for 46 host(s): 515.693497
INFO: Total processing time for 47 host(s): 352.702677
INFO: Total processing time for 48 host(s): 353.418003
INFO: Total processing time for 49 host(s): 355.07111
INFO: Total processing time for 50 host(s): 354.622388
INFO: Total processing time for 51 host(s): 355.192521
INFO: Total processing time for 52 host(s): 355.283238
INFO: Total processing time for 53 host(s): 358.112329
INFO: Total processing time for 54 host(s): 357.717426
INFO: Total processing time for 55 host(s): 357.748707
INFO: Total processing time for 56 host(s): 358.902118
INFO: Total processing time for 57 host(s): 367.817594

File diff suppressed because it is too large Load diff

View file

@ -1,6 +1,23 @@
2.0.1:
- Rewrite cdist-type-emulator
- Remove legacy code in cdist
- Remove cdist-config
- Remove man1/cdist-type-emulator.text
- Remove the PATH=... part from the README
- how to access output dir?
Test:
__cdist_type_base_dir=$(pwd -P)/conf/type __file
- Fix / rewrite cdist-quickstart
--------------------------------------------------------------------------------
- Initial install support
- setup $__install = "" for
manifest(s)
- setup $__install = "yes" for
manifest(s), gencode-*
- run standard manifest (?)
- creates initial objects
@ -11,17 +28,16 @@
- run all other manifests
- creates all objects
- what about type explorer?
- do not run, create empty output (types should be able
to handle this!)
via __global/
- Support parallel execution
- and maximum number of parallel runs (-p X)
- error handling / report failed hosts
- Rewrite cdist-type-emulator
- Remove legacy code in cdist
- Remove cdist-config
- Remove man1/cdist-type-emulator.text
- Remove the PATH=... part from the README
- Allow manifest to be read from stdin
- Create new video for cdist 2.0.0
http://www.youtube.com/watch?v=PRMjzy48eTI
- Setup __debug, if -d is given, so other tools can reuse it

View file

@ -82,6 +82,14 @@ cdist --version
--------------------------------------------------------------------------------
ENVIRONMENT
-----------
TMPDIR, TEMP, TMP::
Setup the base directory for the temporary directory.
See http://docs.python.org/py3k/library/tempfile.html for
more information. This is rather useful, if the standard
directory used does not allow executables.
SEE ALSO
--------
- cdist(7)

View file

@ -0,0 +1,310 @@
#!/bin/sh
#
# 2010-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/>.
#
#
# Give the user an introduction into cdist
#
. cdist-config
set -eu
banner="cdist-quickstart>"
continue="Press enter to continue or ctrl-c to abort."
create_continue="Press enter to create the described files/directories"
__prompt()
{
echo -n "$banner" "$@"
read answer
}
################################################################################
# Intro of quickstart
#
cat << eof
$banner cdist version $__cdist_version
Welcome to the interactive guide to cdist!
This is the interactive tutorial and beginners help for cdist and here's
our schedule:
- Stages: How cdist operates
- Explorer: Explore facts of the target host
- Manifest: Map configurations to hosts
- Types: Bundled functionality
- Deploy a configuration to the local host!
eof
__prompt "$continue"
################################################################################
# Stages
#
cat << eof
To deploy configurations to a host, you call
cdist-deploy-to <hostname>
which makes calls to other scripts, which realise the so called "stages".
Usually you'll not notice this, but in case you want to debug or hack cdist,
you can run each stage on its own. Besides that, you just need to remember
that the command cdist-deploy-to is the main cdist command.
See also:
Source of cdist-deploy-to(1), cdist-stages(7)
eof
__prompt "$continue"
################################################################################
# Explorer
#
cat << eof
The first thing cdist always does is running different explorers on the
target host. The explorers can be found in the directory
${__cdist_explorer_dir}
An explorer is executed on the target host and its output is saved to a file.
You can use these files later to decide what or how to configure the host.
For a demonstration, we'll call the OS explorer locally now, but remember:
This is only for demonstration, normally it is run on the target host.
The os explorer will which either displays the detected operating system or
nothing if it does not know your OS.
See also:
cdist-explorer(7)
eof
explorer="${__cdist_explorer_dir}/os"
__prompt "Press enter to execute $explorer"
set -x
"$explorer"
set +x
################################################################################
# Manifest
#
cat << eof
The initial manifest is the entry point for cdist to find out, what you would
like to have configured. It is located at
${__cdist_manifest_init}
And can be as simple as
--------------------------------------------------------------------------------
__file /etc/cdist-configured --type file
--------------------------------------------------------------------------------
See also:
cdist-manifest(7)
eof
__prompt "$continue"
cat << eof
Let's take a deeper look at the initial manifest to understand what it means:
__file /etc/cdist-configured --type file
| | | \\
| | The parameter type \\ With the value file
| |
| |
| | This is the object id
|
__file is a so called "type"
This essentially looks like a standard command executed in the shell.
eof
__prompt "$continue"
cat << eof
And that's exactly true. Manifests are shell snippets that can use
types as commands with arguments. cdist prepends a special path
that contain links to the cdist-type-emulator, to \$PATH, so you
can use your types as a command.
This is also the reason why types should always be prefixed with
"__", to prevent collisions with existing binaries.
The object id is unique per type and used to prevent you from creating
the same object twice.
Parameters are type specific and are always specified as --parameter <value>.
See also:
cdist-type-build-emulation(1), cdist-type-emulator(1)
eof
__prompt "$continue"
################################################################################
# Types
#
cat << eof
Types are bundled functionality and are the main component of cdist.
If you want to have a feature x, you write the type __x. Types are stored in
${__cdist_type_dir}
And cdist ships with some types already!
See also:
cdist-type(7)
eof
__prompt "Press enter to see available types"
set -x
ls ${__cdist_type_dir}
set +x
cat << eof
Types consist of the following parts:
- ${__cdist_name_parameter} (${__cdist_name_parameter_required}/${__cdist_name_parameter_optional}
- ${__cdist_name_manifest}
- ${__cdist_name_explorer}
- ${__cdist_name_gencode}
eof
__prompt "$continue"
cat << eof
Every type must have a directory named ${__cdist_name_parameter}, which
contains required or optional parameters (in newline seperated files).
If an object of a specific type was created in the initial manifest,
the manifest of the type is run and may create other objects.
A type may have ${__cdist_name_explorer}, which are very similar to the
${__cdist_name_explorer} seen above, but with a different purpose:
They are specific to the type and are not relevant for other types.
You may use them for instance to find out details on the target host,
so you can decide what to do on the target host eventually.
After the ${__cdist_name_manifest} and the ${__cdist_name_explorer} of
a type have been run, ${__cdist_name_gencode} is executed, which creates
code to be executed on the target on stdout.
eof
__prompt "$continue"
################################################################################
# Deployment
#
cat << eof
Now you've got some basic knowledge about cdist, let's configure your a host!
Ensure that you have a ssh server running on the host and that you can login as root.
eof
__prompt "Enter hostname or press enter for localhost: "
if [ "$answer" ]; then
host="$answer"
else
host="localhost"
fi
manifestinit="conf/manifest/init"
cat << eof
I'll now setup $manifestinit, containing the following code:
--------------------------------------------------------------------------------
# Every machine becomes a marker, so sysadmins know that automatic
# configurations are happening
__file /etc/cdist-configured
case "\$__target_host" in
$host)
__link /tmp/cdist-testfile --source /etc/cdist-configured --type symbolic
__addifnosuchline /tmp/cdist-welcome --line "Welcome to cdist"
;;
esac
--------------------------------------------------------------------------------
WARNING: This will overwrite ${manifestinit}.
eof
cat > "$__cdist_abs_mydir/../$manifestinit" << eof
# Every machine becomes a marker, so sysadmins know that automatic
# configurations are happening
__file /etc/cdist-configured
case "\$__target_host" in
$host)
__link /tmp/cdist-testfile --source /etc/cdist-configured --type symbolic
__addifnosuchline /tmp/cdist-welcome --line "Welcome to cdist"
;;
esac
eof
chmod u+x "$__cdist_abs_mydir/../$manifestinit"
cmd="cdist-deploy-to $host"
__prompt "Press enter to run \"$cmd\""
# No quotes, we need field splitting
$cmd
################################################################################
# End
#
cat << eof
--------------------------------------------------------------------------------
That's it, this is the end of the cdist-quickstart.
I hope you've got some impression on how cdist works, here are again some
pointers on where to continue to read:
cdist(7), cdist-deploy-to(1), cdist-type(7), cdist-stages(7)
eof