forked from ungleich-public/cdist
Merge remote branch 'nico/master'
This commit is contained in:
commit
abaa79e19a
21 changed files with 156 additions and 175 deletions
|
@ -3,21 +3,12 @@ cat << eof
|
|||
Hey hackers,
|
||||
|
||||
this README is for you, for those who want to dig into cdist, hack it or try
|
||||
to get a deeper understanding.
|
||||
|
||||
A lot of documentation is still missing, but running cdist-quickstart should
|
||||
give you an impression of how cdist works.
|
||||
to get a deeper understanding. Please read doc/man/cdist-hacker.text.
|
||||
|
||||
I hope you have a lot of fun with cdist, because it was also a lot of fun to
|
||||
develop it!
|
||||
|
||||
-- Nico, 20110304
|
||||
|
||||
|
||||
## Conventions
|
||||
|
||||
- All variables exported by cdist are prefixed with a double underscore (__)
|
||||
- All cdist-internal variables are prefixed with __cdist_ and are generally not exported.
|
||||
-- Nico, 20110324
|
||||
|
||||
## Running cdist when developing
|
||||
|
||||
|
|
17
Makefile
17
Makefile
|
@ -28,6 +28,7 @@ MANSRC=$(MANDIR)/cdist.text \
|
|||
$(MANDIR)/cdist-explorer-run-global.text \
|
||||
$(MANDIR)/cdist-deploy-to.text \
|
||||
$(MANDIR)/cdist-explorer.text \
|
||||
$(MANDIR)/cdist-hacker.text \
|
||||
$(MANDIR)/cdist-manifest.text \
|
||||
$(MANDIR)/cdist-manifest-run.text \
|
||||
$(MANDIR)/cdist-manifest-run-all.text \
|
||||
|
@ -62,7 +63,8 @@ all:
|
|||
|
||||
man: doc/man/.marker
|
||||
|
||||
doc/man/.marker: $(MANDIR)/cdist-reference.text
|
||||
# FIXME: also depends on conf/type/*/man.text!
|
||||
doc/man/.marker: manmove
|
||||
touch $@
|
||||
|
||||
# Manual from core
|
||||
|
@ -74,7 +76,7 @@ mantype:
|
|||
for man in conf/type/*/man.text; do $(A2XM) $$man; $(A2XH) $$man; done
|
||||
|
||||
# Move into manpath directories
|
||||
manmove: mantype mancore
|
||||
manmove: mantype mancore $(MANGENERATED)
|
||||
for manpage in $(MANDIR)/*.[1-9] conf/type/*/*.7; do \
|
||||
cat=$${manpage##*.}; \
|
||||
mandir=$(MANDIR)/man$$cat; \
|
||||
|
@ -90,15 +92,13 @@ manmove: mantype mancore
|
|||
done
|
||||
|
||||
# Reference depends on conf/type/*/man.text - HOWTO with posix make?
|
||||
$(MANDIR)/cdist-reference.text: manmove $(MANDIR)/cdist-reference.text.sh
|
||||
$(MANDIR)/cdist-reference.text: $(MANDIR)/cdist-reference.text.sh
|
||||
$(MANDIR)/cdist-reference.text.sh
|
||||
$(A2XM) $(MANDIR)/cdist-reference.text
|
||||
$(A2XH) $(MANDIR)/cdist-reference.text
|
||||
# Move us to the destination as well
|
||||
make manmove
|
||||
|
||||
clean:
|
||||
rm -rf doc/man/*.html doc/man/*.[1-9] doc/man/man[1-9] $(MANGENERATED)
|
||||
rm -rf doc/man/html/* doc/man/*.[1-9] doc/man/man[1-9] $(MANGENERATED)
|
||||
rm -f conf/type/*/man.html
|
||||
rm -rf doc/html
|
||||
|
||||
|
@ -114,10 +114,11 @@ test:
|
|||
# gentoo
|
||||
.rsync nicosc@ru3.inf.ethz.ch:cdist
|
||||
|
||||
#web: manmove
|
||||
web:
|
||||
web: man
|
||||
cp README $(WEBDIR)/$(WEBPAGE)
|
||||
rm -rf $(WEBDIR)/$(WEBBASE)/man && mkdir $(WEBDIR)/$(WEBBASE)/man
|
||||
cp -r doc/html/* $(WEBDIR)/$(WEBBASE)/man
|
||||
cd $(WEBDIR) && git add $(WEBBASE)/man
|
||||
cd $(WEBDIR) && git commit -m "cdist update" $(WEBBASE) $(WEBPAGE)
|
||||
cd $(WEBDIR) && make pub
|
||||
|
||||
|
|
11
README
11
README
|
@ -120,13 +120,14 @@ how to use cdist.
|
|||
There are at least the following branches available:
|
||||
|
||||
* master: the development branch
|
||||
* 1.3: Support for local and remote code execution (current stable)
|
||||
* 1.4: Support for redefiniton of objects (if equal)
|
||||
|
||||
Old versions:
|
||||
|
||||
* 1.0: First official release
|
||||
* 1.1: __file to __file, __directory, __link migration
|
||||
* 1.3: Support for local and remote code execution (current stable)
|
||||
* 1.2: Dependencies supported
|
||||
* 1.1: __file to __file, __directory, __link migration
|
||||
* 1.0: First official release
|
||||
|
||||
Other branches may be available for features or bugfixes, but they
|
||||
may vanish at any point. To select a specific branch use
|
||||
|
@ -156,6 +157,10 @@ If you stay on a version branche (i.e. 1.0, 1.1., ...), nothing should break.
|
|||
The master branch on the other hand is the development branch and may not be
|
||||
working, break your setup or eat the tree in your garden.
|
||||
|
||||
### Upgrading from 1.3 to 1.4
|
||||
|
||||
No incompatiblities.
|
||||
|
||||
### Upgrading from 1.2 to 1.3
|
||||
|
||||
Rename **gencode** of every type to **gencode-remote**.
|
||||
|
|
|
@ -22,12 +22,9 @@
|
|||
#
|
||||
|
||||
. cdist-config
|
||||
[ $# -eq 3 ] || __cdist_usage "<object dir> <object> <type>"
|
||||
[ $# -eq 2 ] || __cdist_usage "<object> <type>"
|
||||
set -ue
|
||||
|
||||
# This variable MUST be exactly like this - see __cdist_object_dir
|
||||
__cdist_out_object_dir="$1"; shift
|
||||
|
||||
object="$1"; shift
|
||||
__cdist_gencode_type="$1"; shift
|
||||
|
||||
|
@ -50,7 +47,7 @@ echo "Checking code-${__cdist_gencode_type} for $object ..."
|
|||
if [ -f "$require" ]; then
|
||||
while read requirement; do
|
||||
echo "Requiring dependency $requirement for $object ..."
|
||||
cdist-code-run "$__cdist_out_object_dir" "$requirement" "$__cdist_gencode_type"
|
||||
cdist-code-run "$requirement" "$__cdist_gencode_type"
|
||||
done < "$require"
|
||||
fi
|
||||
|
||||
|
|
|
@ -38,14 +38,13 @@ while [ $# -ge 1 ]; do
|
|||
object="$1"; shift
|
||||
|
||||
# Code local
|
||||
cdist-code-run "$__cdist_out_object_dir" "$object" \
|
||||
"${__cdist_name_gencode_local}" \
|
||||
|| __cdist_exit_err "Remote code failed for $object"
|
||||
export __cdist_out_object_dir="$__cdist_out_object_dir"
|
||||
cdist-code-run "$object" "${__cdist_name_gencode_local}" \
|
||||
|| __cdist_exit_err "Local code failed for $object"
|
||||
|
||||
# Code remote
|
||||
cdist-run-remote "$__cdist_target_host" \
|
||||
"__cdist_out_object_dir=\"$__cdist_remote_out_object_base_dir\"" \
|
||||
"cdist-code-run" "${__cdist_remote_out_object_base_dir}" "$object" \
|
||||
"${__cdist_name_gencode_remote}" \
|
||||
cdist-run-remote "$__cdist_target_host" \
|
||||
"export __cdist_out_object_dir=\"$__cdist_remote_out_object_base_dir\";" \
|
||||
"cdist-code-run" "$object" "${__cdist_name_gencode_remote}" \
|
||||
|| __cdist_exit_err "Remote code failed for $object"
|
||||
done < "$__cdist_tmp_file"
|
||||
|
|
|
@ -64,6 +64,7 @@ while [ "$__cdist_new_objects_created" = "y" ]; do
|
|||
export $__cdist_name_var_type="$(__cdist_type_dir "$__cdist_type")"
|
||||
|
||||
cdist-manifest-run "$__cdist_target_host" "$__cdist_manifest"
|
||||
__cdist_new_objects_created=y
|
||||
else
|
||||
__cdist_exit_err "${__cdist_manifest} needs to be executable."
|
||||
fi
|
||||
|
|
|
@ -28,4 +28,4 @@ set -ue
|
|||
__cdist_target_host="$1"; shift
|
||||
|
||||
ssh "${__cdist_remote_user}@${__cdist_target_host}" \
|
||||
"PATH=\"${__cdist_remote_bin_dir}:\$PATH\"" "$@"
|
||||
"export PATH=\"${__cdist_remote_bin_dir}:\$PATH\";" "$@"
|
||||
|
|
|
@ -71,11 +71,10 @@ __cdist_out_object_dir_orig="$__cdist_out_object_dir"
|
|||
# Store to tmp now
|
||||
__cdist_out_object_dir="$__cdist_tmp_dir"
|
||||
|
||||
__cdist_object_dir="$(__cdist_object_dir "$__cdist_object_self")"
|
||||
__cdist_new_object_dir="$(__cdist_object_dir "$__cdist_object_self")"
|
||||
|
||||
# Record source
|
||||
mkdir -p "${__cdist_object_dir}"
|
||||
__cdist_object_source_add "${__cdist_object_dir}"
|
||||
# Initialise object
|
||||
mkdir -p "${__cdist_new_object_dir}"
|
||||
|
||||
# Record parameter
|
||||
__cdist_parameter_dir="$(__cdist_object_parameter_dir "$__cdist_object_self")"
|
||||
|
@ -147,15 +146,16 @@ done
|
|||
# Restore original destination
|
||||
__cdist_out_object_dir="$__cdist_out_object_dir_orig"
|
||||
|
||||
__cdist_new_object_dir="$(__cdist_object_dir "$__cdist_object_self")"
|
||||
__cdist_object_dir="$(__cdist_object_dir "$__cdist_object_self")"
|
||||
|
||||
#
|
||||
# If the object already exists and is exactly the same, merge it. Otherwise fail.
|
||||
#
|
||||
if [ -e "${__cdist_new_object_dir}" ]; then
|
||||
if [ -e "${__cdist_object_dir}" ]; then
|
||||
# Allow diff to fail
|
||||
set +e
|
||||
diff -ru "${__cdist_object_dir}" "${__cdist_new_object_dir}" \
|
||||
diff -ru "${__cdist_new_object_dir}/${__cdist_name_parameter}" \
|
||||
"${__cdist_object_dir}/${__cdist_name_parameter}" \
|
||||
> "$__cdist_tmp_file"; ret=$?
|
||||
set -e
|
||||
|
||||
|
@ -164,14 +164,11 @@ if [ -e "${__cdist_new_object_dir}" ]; then
|
|||
exec >&2
|
||||
echo "${__cdist_object_self} already exists differently."
|
||||
echo "Recorded source(s):"
|
||||
__cdist_object_source "${__cdist_new_object_dir}"
|
||||
__cdist_object_source "${__cdist_object_dir}"
|
||||
echo "Differences:"
|
||||
cat "$__cdist_tmp_file"
|
||||
__cdist_exit_err "Aborting due to object conflict."
|
||||
fi
|
||||
|
||||
# Add ourselves, if we're compatible
|
||||
__cdist_object_source_add "${__cdist_new_object_dir}"
|
||||
else
|
||||
#
|
||||
# Move object into tree:
|
||||
|
@ -179,5 +176,8 @@ else
|
|||
#
|
||||
__cdist_new_object_base_dir="$(__cdist_object_base_dir "$__cdist_object_self")"
|
||||
mkdir -p "$__cdist_new_object_base_dir"
|
||||
mv "$__cdist_object_dir" "$__cdist_new_object_base_dir"
|
||||
mv "$__cdist_new_object_dir" "$__cdist_new_object_base_dir"
|
||||
fi
|
||||
|
||||
# Add "I was here message"
|
||||
__cdist_object_source_add "${__cdist_object_dir}"
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
cdist-type__apt_ppa(7)
|
||||
==========================
|
||||
======================
|
||||
Steven Armstrong <steven-cdist--@--armstrong.cc>
|
||||
|
||||
|
||||
|
|
|
@ -27,8 +27,3 @@ require="__package/python-software-properties" \
|
|||
--source "$__type/files/remove-apt-repository" \
|
||||
--mode 0755
|
||||
|
||||
# FIXME: rewrite to use $__self once that exists
|
||||
# FIXME: only run if something changed. currently working arround this in
|
||||
# __apt_update_index/gencode-remote
|
||||
require="__apt_ppa/$__object_id" __apt_update_index
|
||||
|
||||
|
|
|
@ -1,35 +0,0 @@
|
|||
#!/bin/sh
|
||||
#
|
||||
# 2011 Steven Armstrong (steven-cdist at armstrong.cc)
|
||||
#
|
||||
# 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/>.
|
||||
#
|
||||
|
||||
# BIG FAT FIXME: there must be a better way to do this!
|
||||
tmpdir=$(mktemp -d)
|
||||
cleanup() {
|
||||
rm -rf "$tmpdir"
|
||||
}
|
||||
trap cleanup EXIT
|
||||
|
||||
should="$tmpdir/should"
|
||||
is="$tmpdir/is"
|
||||
|
||||
find "$__global/object/__apt_ppa" -path "*.cdist/parameter/state" | xargs cat > "$should"
|
||||
find "$__global/object/__apt_ppa" -path "*.cdist/explorer/state" | xargs cat > "$is"
|
||||
|
||||
diff -ru "$is" "$should" || echo apt-get update
|
||||
|
|
@ -1,44 +0,0 @@
|
|||
cdist-type__apt_update_index(7)
|
||||
==========================
|
||||
Steven Armstrong <steven-cdist--@--armstrong.cc>
|
||||
|
||||
|
||||
NAME
|
||||
----
|
||||
cdist-type__apt_update_index - resynchronize the apt package index
|
||||
|
||||
|
||||
DESCRIPTION
|
||||
-----------
|
||||
This cdist type allows you to resynchronize the package index files from their
|
||||
sources. In other words, it runs `apt-get update`.
|
||||
|
||||
FIXME: currently hard coded to work together with the __apt_ppa type
|
||||
|
||||
|
||||
REQUIRED PARAMETERS
|
||||
-------------------
|
||||
None.
|
||||
|
||||
OPTIONAL PARAMETERS
|
||||
-------------------
|
||||
None.
|
||||
|
||||
|
||||
EXAMPLES
|
||||
--------
|
||||
|
||||
--------------------------------------------------------------------------------
|
||||
__apt_update_index
|
||||
--------------------------------------------------------------------------------
|
||||
|
||||
|
||||
SEE ALSO
|
||||
--------
|
||||
- cdist-type(7)
|
||||
|
||||
|
||||
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).
|
|
@ -1,6 +1,6 @@
|
|||
1.4.0:
|
||||
1.4.0: 2011-03-24
|
||||
* Add --recursive to __directory
|
||||
* Move cdist generated stuff to .cdist of object
|
||||
* Move cdist generated stuff to .cdist of an object
|
||||
* Allow objects to be redefined
|
||||
|
||||
1.3.2: 2011-03-21
|
||||
|
|
12
doc/dev/todo/TAKEME
Normal file
12
doc/dev/todo/TAKEME
Normal file
|
@ -0,0 +1,12 @@
|
|||
The following list of todos has not been assigned to any developer.
|
||||
|
||||
Feel free to pick one:
|
||||
|
||||
Types to be written/extended:
|
||||
- __ssh-keys (host/user)
|
||||
- Think about __service - necessary?
|
||||
- __file_edit
|
||||
- regexp replace (can probably cover all?)
|
||||
-> aka sed.
|
||||
- __cron
|
||||
|
|
@ -1,3 +1,23 @@
|
|||
Document redefine behaviour
|
||||
release cdist 1.4.0
|
||||
perhaps include __self
|
||||
Core:
|
||||
- support $__self = relative_type/object_id
|
||||
- cache
|
||||
|
||||
Cache:
|
||||
Assume you want to configure stuff one host ("monitor node"),
|
||||
depending on the configuration of other hosts ("cluster nodes").
|
||||
|
||||
For instance, the monitor host would like to know,
|
||||
which hosts are configured with the provider
|
||||
"apache" and option --start true.
|
||||
|
||||
This requires the monitor node to be able to
|
||||
query all other configured nodes. It can't
|
||||
ask for all hosts, because cdist does not
|
||||
know which hosts are configured or may exist.
|
||||
|
||||
Example implementation
|
||||
|
||||
If cdist keeps ("caches") the configuration of every
|
||||
node it configures, each new node can query the
|
||||
cache for existing nodes that acquired the given
|
||||
configuration.
|
||||
|
|
|
@ -1,35 +0,0 @@
|
|||
Core:
|
||||
- allow redefine object, if everything same
|
||||
- support $__self = relative_type/object_id
|
||||
- .cdist
|
||||
- cache
|
||||
- display changes if object cannot be merged to user
|
||||
|
||||
Cache:
|
||||
Assume you want to configure stuff one host ("monitor node"),
|
||||
depending on the configuration of other hosts ("cluster nodes").
|
||||
|
||||
For instance, the monitor host would like to know,
|
||||
which hosts are configured with the provider
|
||||
"apache" and option --start true.
|
||||
|
||||
This requires the monitor node to be able to
|
||||
query all other configured nodes. It can't
|
||||
ask for all hosts, because cdist does not
|
||||
know which hosts are configured or may exist.
|
||||
|
||||
Example implementation
|
||||
|
||||
If cdist keeps ("caches") the configuration of every
|
||||
node it configures, each new node can query the
|
||||
cache for existing nodes that acquired the given
|
||||
configuration.
|
||||
|
||||
Types to be written/extended:
|
||||
- __ssh-keys (host/user)
|
||||
- __service
|
||||
- __file_edit
|
||||
- regexp replace (can probably cover all?)
|
||||
-> aka sed.
|
||||
- __cron
|
||||
|
|
@ -32,7 +32,7 @@ in csh variants (csh, tcsh):
|
|||
eval `./bin/cdist-env`
|
||||
--------------------------------------------------------------------------------
|
||||
|
||||
For bourne shell, the is also a shorter version:
|
||||
For bourne shell, there is also a shorter version:
|
||||
--------------------------------------------------------------------------------
|
||||
. ./bin/cdist-env
|
||||
--------------------------------------------------------------------------------
|
||||
|
|
73
doc/man/cdist-hacker.text
Normal file
73
doc/man/cdist-hacker.text
Normal file
|
@ -0,0 +1,73 @@
|
|||
cdist-hacker(7)
|
||||
===============
|
||||
Nico Schottelius <nico-cdist--@--schottelius.org>
|
||||
|
||||
|
||||
NAME
|
||||
----
|
||||
cdist-hacker - How to get (stuff) into cdist
|
||||
|
||||
|
||||
WELCOME
|
||||
-------
|
||||
Welcome dear hacker! I invite you to a tour of pointers to
|
||||
get into the usable configuration mangament system, cdist.
|
||||
|
||||
The first thing to know is probably that cdist is brought to
|
||||
you by people who care about how code looks like and who think
|
||||
twice before merging or implementing a feature: Less features
|
||||
with good usability are far better than the opposite.
|
||||
|
||||
|
||||
UNDERSTANDING CDIST INTERNALS
|
||||
-----------------------------
|
||||
IF you are interested in how cdist internally works, you can open
|
||||
bin/cdist-config and bin/cdist-deploy-to in your favorite editor and
|
||||
read the scripts bin/cdist-deploy-to calls. The magnificent HACKERS_README
|
||||
may be of great help as well.
|
||||
|
||||
|
||||
CODING CONVENTIONS (CORE)
|
||||
-------------------------
|
||||
- All variables exported by cdist are prefixed with a double underscore (__)
|
||||
- All cdist-internal variables are prefixed with __cdist_ and are generally not exported.
|
||||
|
||||
|
||||
HOW TO SUBMIT STUFF FOR INCLUSION INTO UPSTREAM CDIST
|
||||
-----------------------------------------------------
|
||||
If you did some cool changes to cdist, which you value as a benefit for
|
||||
everybody using cdist, you're welcome to propose inclusion into upstream.
|
||||
|
||||
There are though some requirements to ensure your changes don't break others
|
||||
work nor kill the authors brain:
|
||||
|
||||
- Code submission must be done via git
|
||||
- Code to be included should be branched of the upstream "master" branch
|
||||
- Exception: Bugfixes to a version branch
|
||||
- Code submissions must be in your master branch
|
||||
- Exception: If you only want a comment on your code, but not an inclusion.
|
||||
- Do not add conf/manifest/init - This file should only be touched in your
|
||||
private branch!
|
||||
|
||||
As soon as your work meets these requirements, you can contact me
|
||||
(IRC, Mailinglist, Phone, RFC 1149) and I'll check your code before
|
||||
including it.
|
||||
|
||||
|
||||
HOW TO SUBMIT A NEW TYPE
|
||||
------------------------
|
||||
Submitting a type works as described above, with the additional requirement
|
||||
that a corresponding manpage named man.text in asciidoc format with
|
||||
the manpage-name "cdist-type__NAME" is included in the type directory
|
||||
AND asciidoc is able to compile it.
|
||||
|
||||
|
||||
SEE ALSO
|
||||
--------
|
||||
- cdist(7)
|
||||
|
||||
|
||||
COPYING
|
||||
-------
|
||||
Copyright \(C) 2011 Nico Schottelius. Free use of this software is
|
||||
granted under the terms of the GNU General Public License version 3 (GPLv3).
|
|
@ -15,8 +15,8 @@ host as well as to define which configurations should be applied within a
|
|||
type. Manifests are executed locally and the resulting objects are stored in
|
||||
an internal database.
|
||||
|
||||
The same object can be redefined in multiple different manifests as long as it is
|
||||
exactly the same, that is, all its parameters are equal.
|
||||
The same object can be redefined in multiple different manifests as long as
|
||||
the parameters are exactly the same.
|
||||
|
||||
In general, manifests are used to define which types are used depending
|
||||
on given conditions.
|
||||
|
|
|
@ -32,6 +32,7 @@ SEE ALSO
|
|||
- Website: http://www.nico.schottelius.org/cdist/[]
|
||||
- cdist-best-practise(7)
|
||||
- cdist-deploy-to(1)
|
||||
- cdist-hacker(7)
|
||||
- cdist-manifest(7)
|
||||
- cdist-quickstart(1)
|
||||
- cdist-type(7)
|
||||
|
|
Loading…
Reference in a new issue