forked from ungleich-public/cdist
Merge remote branch 'nico/master'
This commit is contained in:
commit
3f3b0f9aa1
17 changed files with 244 additions and 52 deletions
1
.gitignore
vendored
1
.gitignore
vendored
|
@ -1,3 +1,4 @@
|
|||
.*.swp
|
||||
doc/man/*.[1-9]
|
||||
doc/man/.marker
|
||||
doc/man/man*/
|
||||
|
|
11
Makefile
11
Makefile
|
@ -17,9 +17,12 @@ MANSRC=$(MANDIR)/cdist-config-layout.text \
|
|||
$(MANDIR)/cdist-terms.text \
|
||||
$(MANDIR)/cdist-type.text
|
||||
|
||||
MANSRC=$(MANDIR)/cdist.text \
|
||||
$(MANDIR)/cdist-deploy-to.text \
|
||||
$(MANDIR)/cdist-manifest.text \
|
||||
MANSRC=$(MANDIR)/cdist.text \
|
||||
$(MANDIR)/cdist-bin-transfer.text \
|
||||
$(MANDIR)/cdist-deploy-to.text \
|
||||
$(MANDIR)/cdist-manifest.text \
|
||||
$(MANDIR)/cdist-stages.text \
|
||||
$(MANDIR)/cdist-type-template.text \
|
||||
|
||||
|
||||
################################################################################
|
||||
|
@ -41,7 +44,7 @@ man: doc/man/.marker
|
|||
|
||||
doc/man/.marker: $(MANSRC)
|
||||
for mansrc in $(MANSRC); do $(A2X) $$mansrc; done
|
||||
for manpage in $(MANDIR)/*.[1-9]; do cat=$${manpage##*.}; echo $$cat; mandir=$(MANDIR)/man$$cat; mkdir -p $$mandir; mv $$manpage $$mandir; done
|
||||
for manpage in $(MANDIR)/*.[1-9]; do cat=$${manpage##*.}; mandir=$(MANDIR)/man$$cat; mkdir -p $$mandir; mv $$manpage $$mandir; done
|
||||
touch $@
|
||||
|
||||
clean:
|
||||
|
|
|
@ -53,14 +53,6 @@ but is not. Or: The reason why I began to write cdist.
|
|||
* sh
|
||||
* find, rm, ...
|
||||
|
||||
### Roadmap
|
||||
|
||||
[[!table data="""
|
||||
**Version** | **Objectives** | **Status**
|
||||
1.0.0 | Initial release |
|
||||
1.0.1 | Documentation cleanup |
|
||||
"""]]
|
||||
|
||||
## Requirements
|
||||
|
||||
### Server
|
||||
|
|
|
@ -196,13 +196,14 @@ __cdist_type_gencode()
|
|||
echo "${__cdist_type_dir}/$1/${__cdist_name_gencode}"
|
||||
}
|
||||
|
||||
__cdist_type_param_file()
|
||||
__cdist_type_parameter_dir()
|
||||
{
|
||||
# FIXME: local == posix?
|
||||
local type="$1"; shift
|
||||
local paramtype="$1"; shift
|
||||
echo "$(__cdist_type_dir "$1")/${__cdist_name_parameter}"
|
||||
}
|
||||
|
||||
echo "${__cdist_type_dir}/${type}/${__cdist_name_parameter}/${paramtype}"
|
||||
__cdist_type_parameter_file()
|
||||
{
|
||||
echo "$(__cdist_type_parameter_dir "$1")/$2"
|
||||
}
|
||||
|
||||
__cdist_type_from_object()
|
||||
|
|
|
@ -58,7 +58,7 @@ cdist-manifest-run-all "$__cdist_target_host" "$__cdist_out_object_dir"
|
|||
cdist-object-explorer-all "$__cdist_target_host" "$__cdist_out_object_dir"
|
||||
|
||||
# Generate code for all objects
|
||||
cdist-object-codegen-all "$__cdist_target_host" "$__cdist_out_object_dir"
|
||||
cdist-object-gencode-all "$__cdist_target_host" "$__cdist_out_object_dir"
|
||||
|
||||
# Transfer all objects including code
|
||||
cdist-dir push "$__cdist_target_host" "$__cdist_out_object_dir" \
|
||||
|
|
|
@ -39,7 +39,7 @@ while read object; do
|
|||
code="$(__cdist_object_code "$object")"
|
||||
echo "Generating code for $object ..."
|
||||
|
||||
cdist-object-codegen "$__cdist_target_host" \
|
||||
cdist-object-gencode "$__cdist_target_host" \
|
||||
"$__cdist_object_base_dir" \
|
||||
"$object" > "${code}"
|
||||
|
|
@ -78,14 +78,14 @@ while read required; do
|
|||
fi
|
||||
|
||||
mv "${tempparameter}/${required}" "${__cdist_parameter_dir}"
|
||||
done < "$(__cdist_type_param_file "$__cdist_type" "$__cdist_name_parameter_required")"
|
||||
done < "$(__cdist_type_parameter_file "$__cdist_type" "$__cdist_name_parameter_required")"
|
||||
|
||||
# Allow optional parameters
|
||||
while read optional; do
|
||||
if [ -f "${tempparameter}/${optional}" ]; then
|
||||
mv "${tempparameter}/${optional}" "${__cdist_parameter_dir}"
|
||||
fi
|
||||
done < "$(__cdist_type_param_file "$__cdist_type" "$__cdist_name_parameter_optional")"
|
||||
done < "$(__cdist_type_parameter_file "$__cdist_type" "$__cdist_name_parameter_optional")"
|
||||
|
||||
# Error out on other paramaters
|
||||
cd "${tempparameter}"
|
||||
|
|
66
bin/cdist-type-template
Executable file
66
bin/cdist-type-template
Executable file
|
@ -0,0 +1,66 @@
|
|||
#!/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/>.
|
||||
#
|
||||
#
|
||||
# Create a new type from scratch
|
||||
#
|
||||
|
||||
. cdist-config
|
||||
[ $# -eq 1 ] || __cdist_usage "<type>"
|
||||
set -eu
|
||||
|
||||
__cdist_type="$1"; shift
|
||||
|
||||
|
||||
# Base
|
||||
mkdir -p "$(__cdist_type_dir "$__cdist_type")"
|
||||
|
||||
# Parameter
|
||||
mkdir -p "$(__cdist_type_parameter_dir "$__cdist_type")"
|
||||
touch "$(__cdist_type_parameter_dir "$__cdist_type")/${__cdist_name_parameter_required}"
|
||||
touch "$(__cdist_type_parameter_dir "$__cdist_type")/${__cdist_name_parameter_optional}"
|
||||
|
||||
# Manifest
|
||||
cat "$__cdist_abs_mydir/../doc/dev/header" - << eof > "$(__cdist_type_parameter_dir "$__cdist_type")/${__cdist_name_manifest}"
|
||||
|
||||
#
|
||||
# This is the manifest, which can be used to create other objects like this:
|
||||
# __file /path/to/destination --source /from/where/ --type file
|
||||
#
|
||||
# To tell cdist to make use of it, you need to make it executable (chmod +x)
|
||||
#
|
||||
#
|
||||
|
||||
eof
|
||||
|
||||
# Gencode
|
||||
cat "$__cdist_abs_mydir/../doc/dev/header" - << eof > "$(__cdist_type_parameter_dir "$__cdist_type")/${__cdist_name_gencode}"
|
||||
|
||||
#
|
||||
# This file should generate code on stdout, which will be collected by cdist
|
||||
# and run on the target.
|
||||
#
|
||||
# To tell cdist to make use of it, you need to make it executable (chmod +x)
|
||||
#
|
||||
#
|
||||
|
||||
eof
|
||||
|
||||
# Explorer
|
||||
mkdir -p "$(__cdist_type_parameter_dir "$__cdist_type")/${__cdist_name_explorer}"
|
7
doc/changelog
Normal file
7
doc/changelog
Normal file
|
@ -0,0 +1,7 @@
|
|||
1.0.1: 2011-03-08
|
||||
* Added cdist-type-template including manpage
|
||||
* Fix manpage building
|
||||
* Add new manpages: cdist-stages, cdist-bin-transfer
|
||||
|
||||
1.0.0: 2011-03-07
|
||||
* Initial release
|
|
@ -1,6 +1,6 @@
|
|||
#!/bin/sh
|
||||
#
|
||||
# 2010-2011 Nico Schottelius (nico-cdist at schottelius.org)
|
||||
# 2011 Nico Schottelius (nico-cdist at schottelius.org)
|
||||
#
|
||||
# This file is part of cdist.
|
||||
#
|
||||
|
@ -18,3 +18,5 @@
|
|||
# along with cdist. If not, see <http://www.gnu.org/licenses/>.
|
||||
#
|
||||
#
|
||||
# USEFUL DESCRIPTION
|
||||
#
|
||||
|
|
|
@ -1 +1,8 @@
|
|||
Prepare release 1.0.0
|
||||
Documentation cleanup
|
||||
- to_check/cdist-type.text
|
||||
- cdist-type-integration
|
||||
- Ensure available types are documented (!)
|
||||
- define how to in cdist-type-integration
|
||||
- referenced on the webpage via cdist-type(7)!
|
||||
|
||||
- how to debug explorer and codegen
|
||||
|
|
|
@ -1,9 +1,6 @@
|
|||
Core:
|
||||
- Support singletons (see types/issue for a good reason)
|
||||
- probably name them only_once and use that as the internal id!
|
||||
- remove remote_base_dir at beginning - otherwise fragments from
|
||||
previous runs may still be existing!
|
||||
-> probably also local_base_dir!
|
||||
- cdist-deploy-to: Configure more than one host
|
||||
- plus parallel mode like in ccollect
|
||||
|
||||
|
@ -51,13 +48,11 @@ Documentation:
|
|||
+ cdist
|
||||
+ cdist-deploy-to
|
||||
+ cdist-manifest
|
||||
- cdist-quickstart: how to get started
|
||||
- cdist-type [IMPORTANT]
|
||||
- only do necessary work [TYPE IMPLEMENTATION HINTS]
|
||||
- install packages only if not existent
|
||||
- copy file only if different
|
||||
- DOC document that $type/manifest is executed for every object/instance
|
||||
- cdist-explorer
|
||||
- exported variables:
|
||||
- general explorer: __explorer # cdist-explorer
|
||||
- initial manifest: __manifest, __global # cdist-manifest
|
||||
|
@ -65,12 +60,11 @@ Documentation:
|
|||
- type explorers: __object, __object_id, __type_explorers # cdist-type
|
||||
- type codegen: __object, __object_id, __global # cdist-type
|
||||
- type code: - # cdist-code
|
||||
- cdist-type-integration
|
||||
- Ensure available types are documented (!)
|
||||
- define how to in cdist-type-integration
|
||||
- referenced on the webpage via cdist-type(7)!
|
||||
- category 7:
|
||||
- cdist-manifest(7)
|
||||
- cdist-explorer
|
||||
- cdist-config-layout
|
||||
- ensure every file in bin/ has a correspondent manpage
|
||||
- cdist-bin-transfer
|
||||
- cdist-code-run-all
|
||||
- cdist-config
|
||||
- cdist-deploy-to
|
||||
|
|
30
doc/man/cdist-bin-transfer.text
Normal file
30
doc/man/cdist-bin-transfer.text
Normal file
|
@ -0,0 +1,30 @@
|
|||
cdist-bin-transfer(1)
|
||||
=====================
|
||||
Nico Schottelius <nico-cdist--@--schottelius.org>
|
||||
|
||||
|
||||
NAME
|
||||
----
|
||||
cdist-bin-transfer - Transfer binaries to the target
|
||||
|
||||
|
||||
SYNOPSIS
|
||||
--------
|
||||
cdist-deploy-to HOSTNAME REMOTE_DIR
|
||||
|
||||
|
||||
DESCRIPTION
|
||||
-----------
|
||||
cdist-bin-transfer copies all cdist binaries to the given host HOSTNAME
|
||||
into the given directory REMOTE_DIR. These binaries will be used in
|
||||
further stages to retrieve information or apply configurations.
|
||||
|
||||
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).
|
|
@ -16,14 +16,25 @@ Reading the source of the cdist-deploy-to executable shous the scripts
|
|||
responsible for each stage.
|
||||
|
||||
|
||||
STAGE 0: INTERNAL PREPERATION
|
||||
-----------------------------
|
||||
Before running the user facing stages, cdist prepares the target host
|
||||
to contain cdist binaries and creates a clean environment for the
|
||||
configuration run.
|
||||
|
||||
Related manpages:
|
||||
- cdist-bin-transfer(1)
|
||||
|
||||
|
||||
STAGE 1: TARGET INFORMATION RETRIEVAL
|
||||
--------------------------------------
|
||||
In this stage information is collected about target using so called explorers.
|
||||
Every existing explorer is run on the target and the output of all explorers
|
||||
are copied back into the local cache. The results can be used by manifests and
|
||||
types.
|
||||
In this stage information is collected about the target host using so called
|
||||
explorers. Every existing explorer is run on the target and the output of all
|
||||
explorers are copied back into the local cache. The results can be used by
|
||||
manifests and types.
|
||||
|
||||
Related manpages are cdist-explorers(7) and cdist-cache(7).
|
||||
Related manpages:
|
||||
- cdist-explorer(7)
|
||||
|
||||
|
||||
STAGE 2: RUN THE INITIAL MANIFEST
|
||||
|
@ -34,8 +45,11 @@ the objects as defined in the manifest for the specific host. 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
|
||||
cdist-config-layout(7).
|
||||
Related manpages:
|
||||
- cdist-manifest-run(1)
|
||||
- cdist-manifest-run-init(1)
|
||||
- cdist-manifest(7)
|
||||
- cdist-config-layout(7)
|
||||
|
||||
|
||||
STAGE 3: EXECUTION OF TYPES
|
||||
|
@ -46,13 +60,16 @@ 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 an manifest script, which creates new objects of type __file.
|
||||
contain a manifest script, which 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).
|
||||
Related manpages:
|
||||
- cdist-type(7)
|
||||
- cdist-manifest-run(1)
|
||||
- cdist-manifest-run-all(1)
|
||||
|
||||
|
||||
STAGE 4: CODE GENERATION
|
||||
|
@ -63,8 +80,10 @@ 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.
|
||||
|
||||
Related manpages are cdist-types-gencode(7), cdist-gencode(1) and
|
||||
cdist-gencode-all(1).
|
||||
Related manpages:
|
||||
- cdist-types-gencode(7)
|
||||
- cdist-gencode(1)
|
||||
- cdist-gencode-all(1)
|
||||
|
||||
|
||||
STAGE 5: CODE EXECUTION
|
||||
|
@ -72,7 +91,9 @@ STAGE 5: CODE EXECUTION
|
|||
The resulting code from the previous stage is transferred to the target host
|
||||
and executed there to apply the configuration changes,
|
||||
|
||||
Related manpages are cdist-exec-transfer(1) and cdist-exec-run(1).
|
||||
Related manpages:
|
||||
- cdist-exec-transfer(1)
|
||||
- cdist-exec-run(1)
|
||||
|
||||
|
||||
SUMMARY
|
||||
|
@ -85,7 +106,7 @@ in correct order.
|
|||
|
||||
SEE ALSO
|
||||
--------
|
||||
cdist(7), cdist-deploy-to(1), cdist-config-layout(7), cdist-manifest-init(1)
|
||||
cdist(7), cdist-deploy-to(1), cdist-config-layout(7)
|
||||
|
||||
|
||||
COPYING
|
30
doc/man/cdist-type-template.text
Normal file
30
doc/man/cdist-type-template.text
Normal file
|
@ -0,0 +1,30 @@
|
|||
cdist-type-template(1)
|
||||
======================
|
||||
Nico Schottelius <nico-cdist--@--schottelius.org>
|
||||
|
||||
|
||||
NAME
|
||||
----
|
||||
cdist-type-template - Create a new type
|
||||
|
||||
|
||||
SYNOPSIS
|
||||
--------
|
||||
cdist-type-template NAME
|
||||
|
||||
|
||||
DESCRIPTION
|
||||
-----------
|
||||
cdist-type-template creates a new type and adds the usual files to it.
|
||||
It is thought to be helpful when writing new types.
|
||||
|
||||
|
||||
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).
|
|
@ -1,18 +1,34 @@
|
|||
cdist-types(7)
|
||||
===============
|
||||
cdist-type(7)
|
||||
==============
|
||||
Nico Schottelius <nico-cdist--@--schottelius.org>
|
||||
|
||||
|
||||
NAME
|
||||
----
|
||||
cdist-types - Functionality bundled
|
||||
cdist-type - Functionality bundled
|
||||
|
||||
|
||||
SYNOPSIS
|
||||
--------
|
||||
Other languages name this module or class
|
||||
|
||||
|
||||
DESCRIPTION
|
||||
-----------
|
||||
Types are the main component of cdist and define functionality. If you
|
||||
use cdist, you'll write a type for every functionality you would like
|
||||
to use.
|
||||
|
||||
|
||||
|
||||
Was man mit cdist type machen kann.....
|
||||
|
||||
A cdist type describes some kind of functionality, starting from simple stuff
|
||||
like copying files until complex user auth/ldap/ kerberos infrastructure
|
||||
designs. The name of every type is prefixed with two underscores (__), because
|
||||
designs. The name of every type is prefixed with two underscores (__) by convention.
|
||||
|
||||
|
||||
, because
|
||||
types will be executed and the two underscores prevent collisions with real
|
||||
binaries (like "file").
|
||||
In general, types should be written independent of hosts (as in reusable
|
||||
|
@ -37,11 +53,33 @@ Every time a type is used, a new object is created of the specific type,
|
|||
with a type specific unique id that stores the parameters
|
||||
|
||||
|
||||
HOW TO WRITE A NEW TYPE
|
||||
-----------------------
|
||||
A type consists of
|
||||
|
||||
- parameter (required)
|
||||
- manifest (optional)
|
||||
- gencode (optional)
|
||||
- explorer (optional)
|
||||
|
||||
Types are stored below conf/type/. Their name should always be prefixed with
|
||||
two underscores (__) to prevent collisions with other binaries in $PATH.
|
||||
|
||||
To begin a new type from a template, execute "cdist-type-template __NAME"
|
||||
and cd to conf/type/__NAME.
|
||||
|
||||
|
||||
DEFINING PARAMETERS
|
||||
-------------------
|
||||
Every type consists of optional and
|
||||
|
||||
|
||||
HOW TO WRITE A NEW TYPE (TODO)
|
||||
------------------------------
|
||||
Assume you want to create the new type named "coffee":
|
||||
Assume you want to create the new type named "coffee", which creates
|
||||
files which contain the word "c0ffee".
|
||||
|
||||
Create the directory /etc/cdist/types/coffee/
|
||||
Create the directory conf/type/coffee/.
|
||||
Create the file /etc/cdist/types/coffee/README containing a description of the
|
||||
type.
|
||||
If your type supports attributes, create the directory /etc/cdist/types/coffee/
|
||||
|
|
Loading…
Reference in a new issue