forked from ungleich-public/cdist
Merge remote branch 'nico/master'
This commit is contained in:
commit
741275e967
21 changed files with 147 additions and 81 deletions
1
Makefile
1
Makefile
|
@ -36,3 +36,4 @@ pub:
|
||||||
man:
|
man:
|
||||||
echo $(MANSRC)
|
echo $(MANSRC)
|
||||||
a2x -f manpage --no-xmllint doc/man/cdist-stages.text
|
a2x -f manpage --no-xmllint doc/man/cdist-stages.text
|
||||||
|
echo man ./doc/man/cdist-stages.7
|
||||||
|
|
|
@ -13,7 +13,6 @@ it ticks differently:
|
||||||
* cdist sticks completly to the KISS (keep it simple and stupid) paradigma
|
* cdist sticks completly to the KISS (keep it simple and stupid) paradigma
|
||||||
* cdist's core is very small (currently around 400 lines of code)
|
* cdist's core is very small (currently around 400 lines of code)
|
||||||
* There is only one type to extend cdist called ***type***.
|
* There is only one type to extend cdist called ***type***.
|
||||||
*
|
|
||||||
* cdist is UNIX
|
* cdist is UNIX
|
||||||
* It reuses existing tools like cat, find, mv, ...
|
* It reuses existing tools like cat, find, mv, ...
|
||||||
* cdist's documentation is bundled as manpages
|
* cdist's documentation is bundled as manpages
|
||||||
|
|
18
TODO-1.0
18
TODO-1.0
|
@ -11,7 +11,7 @@ x run initial manifest (stage 2)
|
||||||
x Create configuration tree from manifest
|
x Create configuration tree from manifest
|
||||||
x write binaries, which create the tree when called from manifest (cdist_tree_wrapper)
|
x write binaries, which create the tree when called from manifest (cdist_tree_wrapper)
|
||||||
|
|
||||||
- be able to run manifest of types (stage 3)
|
x be able to run manifest of types (stage 3)
|
||||||
x Parse configuration tree/objects recursively
|
x Parse configuration tree/objects recursively
|
||||||
x can/may types modify tree?
|
x can/may types modify tree?
|
||||||
-> yes, of everything a type created itself!
|
-> yes, of everything a type created itself!
|
||||||
|
@ -22,13 +22,6 @@ x run initial manifest (stage 2)
|
||||||
x rename $__object_dir to $__object_base_dir
|
x rename $__object_dir to $__object_base_dir
|
||||||
x use $type/manifest instead of $type/init
|
x use $type/manifest instead of $type/init
|
||||||
x find $object_id in recursive runner (before merge)
|
x find $object_id in recursive runner (before merge)
|
||||||
- DOC document "cd $__object_dir, before running manifest" in doc/man/cdist-types.text
|
|
||||||
- DOC document that $type/manifest is executed for every object/instance
|
|
||||||
- DOC: types can always access
|
|
||||||
__cdist_out_objects, __cdist_out_explorers,
|
|
||||||
__cdist_out_execs
|
|
||||||
|
|
||||||
--> create cdist-variables document?
|
|
||||||
|
|
||||||
x generate code to be executed on clients (stage 4)
|
x generate code to be executed on clients (stage 4)
|
||||||
x for one object
|
x for one object
|
||||||
|
@ -41,6 +34,7 @@ x execute code on client (stage 5)
|
||||||
- file (with directory)
|
- file (with directory)
|
||||||
- package
|
- package
|
||||||
- doc cleanup for 1.0:
|
- doc cleanup for 1.0:
|
||||||
|
- ensure every file in bin/ has a correspondent manpage
|
||||||
- cdist manpage (main manpage)
|
- cdist manpage (main manpage)
|
||||||
- cleanup following man + their tree:
|
- cleanup following man + their tree:
|
||||||
- cdist-language [CLEANUP AND REMOVE]
|
- cdist-language [CLEANUP AND REMOVE]
|
||||||
|
@ -72,3 +66,11 @@ x execute code on client (stage 5)
|
||||||
- create doc/dev/HACKERS_README
|
- create doc/dev/HACKERS_README
|
||||||
- Add install target to Makefile
|
- Add install target to Makefile
|
||||||
- create cdist-config-init to create basic tree
|
- create cdist-config-init to create basic tree
|
||||||
|
- cdist-type integration!
|
||||||
|
- DOC document "cd $__object_dir, before running manifest" in doc/man/cdist-types.text
|
||||||
|
- DOC document that $type/manifest is executed for every object/instance
|
||||||
|
- DOC: types can always access __cdist_out_objects, __cdist_out_explorers, __cdist_out_execs
|
||||||
|
--> create cdist-variables document?
|
||||||
|
|
||||||
|
- include generation in makefile
|
||||||
|
|
||||||
|
|
|
@ -21,8 +21,6 @@
|
||||||
# Print configuration directories - helper for all other scripts
|
# Print configuration directories - helper for all other scripts
|
||||||
#
|
#
|
||||||
|
|
||||||
echo teeeeeeeeeeeeeeeeeees
|
|
||||||
|
|
||||||
# Fail if something bogus is going on
|
# Fail if something bogus is going on
|
||||||
set -u
|
set -u
|
||||||
|
|
||||||
|
@ -181,6 +179,13 @@ __cdist_object_source()
|
||||||
cat "${object_dir}/$__cdist_name_object_source"
|
cat "${object_dir}/$__cdist_name_object_source"
|
||||||
}
|
}
|
||||||
|
|
||||||
|
__cdist_exec_fail_on_error()
|
||||||
|
{
|
||||||
|
sh -e "$@"
|
||||||
|
[ "$?" -eq 0 ] || __cdist_exit_err "Error: $1 exited non-zero."
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
__cdist_tmp_removal()
|
__cdist_tmp_removal()
|
||||||
{
|
{
|
||||||
rm -rf "${__cdist_tmp_dir}"
|
rm -rf "${__cdist_tmp_dir}"
|
||||||
|
|
|
@ -41,17 +41,6 @@ if [ ! -x "${__cdist_manifest}" ]; then
|
||||||
__cdist_exit_err "${__cdist_manifest} needs to be executable."
|
__cdist_exit_err "${__cdist_manifest} needs to be executable."
|
||||||
fi
|
fi
|
||||||
|
|
||||||
mkdir -p "${__cdist_output_dir}"
|
mkdir -p "${__cdist_output_dir}" || __cdist_exit_err "Cannot create output dir ${__cdist_output_dir}"
|
||||||
|
|
||||||
# Catch errors ourselves now
|
__cdist_exec_fail_on_error "${__cdist_manifest}"
|
||||||
set +e
|
|
||||||
|
|
||||||
# Ensure manifest fails if any error exists - FIXME: redundant, cdist-object-codegen
|
|
||||||
(
|
|
||||||
set -e
|
|
||||||
. "${__cdist_manifest}"
|
|
||||||
); ret=$?
|
|
||||||
|
|
||||||
if [ "$ret" -ne 0 ]; then
|
|
||||||
__cdist_exit_err "Error: ${__cdist_manifest} exited non-zero."
|
|
||||||
fi
|
|
||||||
|
|
|
@ -54,19 +54,5 @@ if [ -x "$gencode" ]; then
|
||||||
|
|
||||||
eof
|
eof
|
||||||
|
|
||||||
# Catch errors ourself now
|
__cdist_exec_fail_on_error "$gencode"
|
||||||
set +e
|
|
||||||
(
|
|
||||||
# Ensure manifest fails if something within manifest fails
|
|
||||||
# And not all manifests need to include set -e themselves
|
|
||||||
set -e
|
|
||||||
. "$gencode"
|
|
||||||
); ret=$?
|
|
||||||
|
|
||||||
else
|
|
||||||
ret=0
|
|
||||||
fi
|
|
||||||
|
|
||||||
if [ "$ret" -ne 0 ]; then
|
|
||||||
__cdist_exit_err "Error: $gencode exited non-zero"
|
|
||||||
fi
|
fi
|
||||||
|
|
40
bin/cdist-quickstart
Executable file
40
bin/cdist-quickstart
Executable file
|
@ -0,0 +1,40 @@
|
||||||
|
#!/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
|
||||||
|
|
||||||
|
__prompt()
|
||||||
|
{
|
||||||
|
echo "Press enter to continue or ctrl-c to abort"
|
||||||
|
echo "[Enter]"
|
||||||
|
read answer
|
||||||
|
}
|
||||||
|
|
||||||
|
cat << eof
|
||||||
|
|
||||||
|
Welcome to cdist-quickstart, the interactive guide to cdist!
|
||||||
|
|
||||||
|
After you press enter, I'll create the basic directories for you.
|
||||||
|
|
||||||
|
eof
|
1
doc/dev/logs/README
Normal file
1
doc/dev/logs/README
Normal file
|
@ -0,0 +1 @@
|
||||||
|
Logfiles of discussions
|
|
@ -1,5 +1,42 @@
|
||||||
## How to use cdist?
|
cdist-quickstart(1)
|
||||||
|
===================
|
||||||
|
Nico Schottelius <nico-cdist--@--schottelius.org>
|
||||||
|
|
||||||
|
NAME
|
||||||
|
----
|
||||||
|
cdist-quickstart - Make use of cinit in 5 minutes
|
||||||
|
|
||||||
|
|
||||||
|
DESCRIPTION
|
||||||
|
-----------
|
||||||
|
This document helps you to take the first steps with cdist.
|
||||||
|
We'll begin to configure the host "localhost" to have two files
|
||||||
|
in place, /etc/DO-NOT-CHANGE and /root/CDIST-ENABLED-HOST, which
|
||||||
|
both are used to warn other sysadmins that this system is managed
|
||||||
|
by configuration management and manual changes may get overwritten.
|
||||||
|
|
||||||
|
Begin to execute cdist-quickstart, it will show you the steps it
|
||||||
|
takes and explains what it does:
|
||||||
|
|
||||||
|
% cdist-quickstart
|
||||||
|
|
||||||
|
mkdir -p /etc/cdist/manifests
|
||||||
|
|
||||||
|
# Create
|
||||||
|
|
||||||
|
Cdist uses
|
||||||
|
kgives you an impression of
|
||||||
0. Create a host specification (/etc/cdist/hosts/**hostname**)
|
0. Create a host specification (/etc/cdist/hosts/**hostname**)
|
||||||
0. Add functionalilty to add
|
0. Add functionalilty to add
|
||||||
0. Run ***cdist-apply***
|
0. Run ***cdist-apply***
|
||||||
|
|
||||||
|
SEE ALSO
|
||||||
|
--------
|
||||||
|
cdist-config-layout(7)
|
||||||
|
|
||||||
|
|
||||||
|
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).
|
||||||
|
## How to use cdist?
|
||||||
|
|
|
@ -5,76 +5,82 @@ Nico Schottelius <nico-cdist--@--schottelius.org>
|
||||||
|
|
||||||
NAME
|
NAME
|
||||||
----
|
----
|
||||||
cdist-stages - How the configuration is built
|
cdist-stages - Stages used during configuration deployment
|
||||||
|
|
||||||
|
|
||||||
DESCRIPTION
|
DESCRIPTION
|
||||||
-----------
|
-----------
|
||||||
Starting the execution of deployment with cdist-deploy-to(1),
|
Starting the execution of deployment with cdist-deploy-to(1), cdist passes
|
||||||
cdist passes through different stages, each can be triggered
|
through different stages, each can be triggered and debugged on its own.
|
||||||
and debugged on its own. Reading the source of the
|
Reading the source of the cdist-deploy-to executable shous the scripts
|
||||||
cdist-deploy-to script shous the binaries being responsible
|
responsible for each stage.
|
||||||
for each stage.
|
|
||||||
|
|
||||||
STAGE 1: TARGET INFORMATION RETRIEVAL
|
STAGE 1: TARGET INFORMATION RETRIEVAL
|
||||||
--------------------------------------
|
--------------------------------------
|
||||||
In this stage information is collected about target using
|
In this stage information is collected about target using so called explorers.
|
||||||
so called explorers.
|
Every existing explorer is run on the target and the output of all explorers
|
||||||
Every existing explorer is run on the target and the output
|
are copied back into the local cache. The results can be used by manifests and
|
||||||
of all explorers are copied back into the local cache.
|
types.
|
||||||
The results can be used by manifests and types.
|
|
||||||
|
|
||||||
Related manpages are cdist-explorers(7) and cdist-cache(7).
|
Related manpages are cdist-explorers(7) and cdist-cache(7).
|
||||||
|
|
||||||
|
|
||||||
STAGE 2: RUN THE INITIAL MANIFEST
|
STAGE 2: RUN THE INITIAL MANIFEST
|
||||||
---------------------------------
|
---------------------------------
|
||||||
The initial manifest, which should be used for mappings
|
The initial manifest, which should be used for mappings of hosts to types,
|
||||||
of hosts to types, is executed.
|
is executed. This stage creates objects in a cconfig database that contains
|
||||||
|
the objects as defined in the manifest for the specific host. In this stage,
|
||||||
This stage creates objects in a cconfig database that
|
no conflicts may occur, i.e. no object of the same type with the same id may
|
||||||
contains as defined in the manifest for the specific host.
|
be created.
|
||||||
|
|
||||||
In this stage, no conflicts may occur, i.e. no object of
|
|
||||||
the same type with the same id may be created.
|
|
||||||
|
|
||||||
Related manpages are cdist-manifest-init(1), cdist-manifests(7) and
|
Related manpages are cdist-manifest-init(1), cdist-manifests(7) and
|
||||||
cdist-config-layout(7).
|
cdist-config-layout(7).
|
||||||
|
|
||||||
|
|
||||||
STAGE 3: EXECUTION OF TYPES
|
STAGE 3: EXECUTION OF TYPES
|
||||||
---------------------------
|
---------------------------
|
||||||
Every object is checked whether its type has an init
|
Every object is checked whether its type has a manifest file. If the type has
|
||||||
script (see cdist-types(7)). If the type of the object
|
a manifest file and it is executable, it will be executed. The manifest script
|
||||||
has an init script, it is run. This init script may
|
may generate and change the created objects. In other words, one type can reuse
|
||||||
generate additional objects.
|
other types.
|
||||||
|
|
||||||
For instance the object __apache/www.test.ch is of
|
For instance the object __apache/www.test.ch is of type __apache, which may
|
||||||
type __apache, which may contain an init script, which
|
contain an manifest script, which creates new objects of type __file.
|
||||||
creates new objects of type __file.
|
|
||||||
|
The newly created objects are merged back into the existing tree. No conflicts
|
||||||
|
may occur during the merge. A conflict would mean that two different objects
|
||||||
|
try to create the same object, which indicates a broken configuration.
|
||||||
|
|
||||||
|
Related manpage are cdist-types(7) and cdist-manifest-run-all(1).
|
||||||
|
|
||||||
The newly created objects are merged back into
|
|
||||||
the existing tree. No conflicts may occur during
|
|
||||||
the merge. A conflict would mean that two different
|
|
||||||
objects try to create the same object, which indicates a
|
|
||||||
broken configuration.
|
|
||||||
|
|
||||||
STAGE 4: CODE GENERATION
|
STAGE 4: CODE GENERATION
|
||||||
------------------------
|
------------------------
|
||||||
The "gencode" binary of the types for every existing object is
|
In this stage for every created objects its type is checked whether it has a
|
||||||
called to generate code that will be executed on the target host.
|
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.
|
||||||
|
|
||||||
This binary should create code to be executed on the target on stdout.
|
Related manpages are cdist-types-gencode(7), cdist-gencode(1) and
|
||||||
|
cdist-gencode-all(1).
|
||||||
|
|
||||||
If the gencode binary fails, it must print diagnostic messages on stderr
|
|
||||||
and exit non-zero.
|
|
||||||
|
|
||||||
A description of what the generated code may/must/should
|
|
||||||
do can be found in cdist-types-gencode(7).
|
|
||||||
|
|
||||||
STAGE 5: CODE EXECUTION
|
STAGE 5: CODE EXECUTION
|
||||||
-----------------------
|
-----------------------
|
||||||
The resulting code is transferred to the target host and executed,
|
The resulting code from the previous stage is transferred to the target host
|
||||||
the run of cdist-deploy-to(1) ends.
|
and executed there to apply the configuration changes,
|
||||||
|
|
||||||
|
Related manpages are cdist-exec-transfer(1) and cdist-exec-run(1).
|
||||||
|
|
||||||
|
|
||||||
|
SUMMARY
|
||||||
|
-------
|
||||||
|
If, and only if, all the stages complete without an errors, the configuration
|
||||||
|
will be applied to the target. Each stage can also be run individually, though
|
||||||
|
dependencies for each stage must be fulfilled and thus the stages must be run
|
||||||
|
in correct order.
|
||||||
|
|
||||||
|
|
||||||
SEE ALSO
|
SEE ALSO
|
||||||
|
|
Loading…
Reference in a new issue