forked from ungleich-public/cdist
Merge remote-tracking branch 'telmich/master' into filestate
Conflicts: conf/type/__file/gencode-local Signed-off-by: Steven Armstrong <steven@icarus.ethz.ch>
This commit is contained in:
commit
8c1aa87296
271 changed files with 17717 additions and 3049 deletions
7
.gitignore
vendored
7
.gitignore
vendored
|
@ -11,5 +11,8 @@ doc/man/man7/cdist-type__*.text
|
|||
doc/man/man7/cdist-reference.text
|
||||
doc/man/man*/docbook-xsl.css
|
||||
|
||||
# Ignore cache for version control
|
||||
cache/
|
||||
# Ignore cdist cache for version control
|
||||
/cache/
|
||||
|
||||
# Python / cache
|
||||
__pycache__/
|
||||
|
|
|
@ -1,40 +0,0 @@
|
|||
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. Please read doc/man/man7/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, 20110324
|
||||
|
||||
## Running cdist when developing
|
||||
|
||||
This file is suitable for execution and saving the objects and
|
||||
explorers from cdist. I usually do it like this:
|
||||
|
||||
% ./HACKERS_README
|
||||
|
||||
################################################################################
|
||||
eof
|
||||
|
||||
set -x
|
||||
# Tell the user what we do, so this script makes sense during execution
|
||||
|
||||
# prepare use (only from top level directory)
|
||||
export PATH="$(pwd -P)/bin:$PATH"
|
||||
export __cdist_conf_dir="$(pwd -P)/conf"
|
||||
|
||||
# Allow user to supply hostname
|
||||
target="${1:-localhost}"
|
||||
|
||||
# And use hostname as basedir (dangerous, but hackers know what they do)
|
||||
export __cdist_local_base_dir="/tmp/$target"
|
||||
|
||||
# Run the real script
|
||||
cdist-deploy-to "$target"
|
||||
|
||||
# Display results
|
||||
find "${__cdist_local_base_dir}"
|
74
README
74
README
|
@ -15,7 +15,7 @@
|
|||
"P' "" ""
|
||||
|
||||
|
||||
[[!toc levels=2]]
|
||||
[[!toc levels=3]]
|
||||
|
||||
## Introduction
|
||||
|
||||
|
@ -38,13 +38,13 @@ Design | Define target state, do not focus on methods or scripts
|
|||
Design | Push architecture: Instantly apply your changes
|
||||
Small core | cdist's core is very small - less code, less bugs
|
||||
Fast development | Focus on straightforwardness of type creation is a main development objective
|
||||
Modern Programming Language | cdist is written in Python
|
||||
Requirements, Scalability | No central server needed, cdist operates in push mode and can be run from any computer
|
||||
Requirements, Scalability, Upgrade | cdist only needs to be updated on the master, not on the target hosts
|
||||
Requirements, Security | Uses well-know [SSH](http://www.openssh.com/) as transport protocol
|
||||
Requirements, Simplicity | Requires only shell and SSH server on the target
|
||||
UNIX | Reuse of existing tools like cat, find, mv, ...
|
||||
UNIX, familar environment, documentation | Is available as manpages and HTML
|
||||
UNIX, simplicity, familar environment | cdist is written in POSIX shell
|
||||
UNIX, simplicity, familar environment | cdist is configured in POSIX shell
|
||||
"""]]
|
||||
|
||||
|
@ -53,8 +53,6 @@ UNIX, simplicity, familar environment | cdist is configured in POSIX shell
|
|||
The cdist documentation is included as manpages in the distribution.
|
||||
|
||||
* You can [browse the documentation of the latest version online](man) as well.
|
||||
* Or you can watch the youtube **video**
|
||||
[cdist installation and first usage in less than 60 seconds][http://www.youtube.com/watch?v=PRMjzy48eTI).
|
||||
* Have a look at the [given speeches](speeches)
|
||||
|
||||
### OS support
|
||||
|
@ -63,12 +61,14 @@ cdist was tested or is know to run on at least
|
|||
|
||||
* [Archlinux](http://www.archlinux.org/)
|
||||
* [Debian](http://www.debian.org/)
|
||||
* [CentOS](http://www.centos.org/)
|
||||
* [Fedora](http://fedoraproject.org/)
|
||||
* [Gentoo](http://www.gentoo.org/)
|
||||
* [Mac OS X](http://www.apple.com/macosx/)
|
||||
* [OpenBSD](http://www.openbsd.org)
|
||||
* [Redhat](http://www.redhat.com/)
|
||||
* [Ubuntu](http://www.ubuntu.com/)
|
||||
* [XenServer](http://www.citrix.com/xenserver/)
|
||||
|
||||
|
||||
## Requirements
|
||||
|
@ -76,7 +76,9 @@ cdist was tested or is know to run on at least
|
|||
### Server
|
||||
|
||||
* A posix like shell
|
||||
* Python (>= 3.2 required)
|
||||
* SSH-Client
|
||||
* Asciidoc (for building the manpages)
|
||||
|
||||
### Client ("target host")
|
||||
|
||||
|
@ -84,21 +86,54 @@ cdist was tested or is know to run on at least
|
|||
* SSH-Server
|
||||
|
||||
|
||||
## Getting cdist
|
||||
## Installation
|
||||
|
||||
### Preperation
|
||||
|
||||
Ensure you have Python 3.x and the **argparse** module installed on
|
||||
the machine you use to **deploy to the targets**.
|
||||
|
||||
#### Archlinux
|
||||
|
||||
Archlinux already has python >= 3.2, so you only need to do:
|
||||
|
||||
pacman -S python
|
||||
|
||||
#### Debian
|
||||
|
||||
aptitude install python3 python3-setuptools
|
||||
easy_install3 argparse
|
||||
|
||||
|
||||
#### Gentoo
|
||||
|
||||
Gentoo only provides python 3.2 in testing packages (http://www.gentoo.org/doc/en/handbook/handbook-x86.xml?part=3&chap=3).
|
||||
If you want to ensure nothing breaks you must set back the python version to what was default before.
|
||||
|
||||
emerge -av =python-3.2.2 --autounmask-write
|
||||
emerge -av =python-3.2.2
|
||||
eselect python list
|
||||
eselect python list set python3.2
|
||||
|
||||
#### Max OS X
|
||||
|
||||
Ensure you have port installed and configured (http://www.macports.org/install.php).
|
||||
|
||||
port install python32
|
||||
ln -s /opt/local/bin/python3.2 /opt/local/bin/python3
|
||||
|
||||
### Get cdist
|
||||
|
||||
You can clone cdist from git, which gives you the advantage of having
|
||||
a version control in place for development of your own stuff as well.
|
||||
|
||||
### Installation
|
||||
|
||||
To install cdist, execute the following commands:
|
||||
|
||||
git clone git://git.schottelius.org/cdist
|
||||
cd cdist
|
||||
export PATH=$PATH:$(pwd -P)/bin
|
||||
|
||||
# If you want the manpages (requires gmake and asciidoc to be installed)
|
||||
./build.sh man
|
||||
# If you want the manpages
|
||||
./build man
|
||||
export MANPATH=$MANPATH:$(pwd -P)/doc/man
|
||||
|
||||
|
||||
|
@ -109,11 +144,12 @@ how to use cdist.
|
|||
|
||||
There are at least the following branches available:
|
||||
|
||||
* master: the development branch
|
||||
* 1.7: Bugfixes, cleanups, new type and explorer rename
|
||||
* Development: master
|
||||
* 2.0: Python rewrite of cdist core
|
||||
|
||||
Old versions:
|
||||
|
||||
* 1.7: Bugfixes, cleanups, new type and explorer rename
|
||||
* 1.6: New types, cleaned up \_\_package* types, internal cleanup
|
||||
* 1.5: Focus on object orientation instead of global stage orientation
|
||||
* 1.4: Support for redefiniton of objects (if equal)
|
||||
|
@ -129,13 +165,13 @@ may vanish at any point. To select a specific branch use
|
|||
git checkout -b <name> origin/<name>
|
||||
|
||||
# Stay on a specific version
|
||||
version=1.7
|
||||
version=2.0
|
||||
git checkout -b $version origin/$version
|
||||
|
||||
### Mirrors
|
||||
|
||||
* git://github.com/telmich/cdist.git ([github](https://github.com/telmich/cdist))
|
||||
* git://git.sans.ethz.ch/cdist ([sans](http://git.sans.ethz.ch/?p=cdist;a=summary))
|
||||
* git://git.code.sf.net/p/cdist/code ([sourceforge](https://sourceforge.net/p/cdist/code))
|
||||
|
||||
## Update
|
||||
|
||||
|
@ -144,13 +180,21 @@ To upgrade cdist in the current branch use
|
|||
git pull
|
||||
|
||||
# Also update the manpages
|
||||
./build.sh man
|
||||
./build man
|
||||
export MANPATH=$MANPATH:$(pwd -P)/doc/man
|
||||
|
||||
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.7 to 2.0
|
||||
|
||||
* Ensure python (>= 3.2) is installed on the server
|
||||
* Use "cdist config host" instead of "cdist-deploy-to host"
|
||||
* Use "cdist config -p host1 host2" instead of "cdist-mass-deploy"
|
||||
* Use "cdist banner" for fun
|
||||
* Use **\_\_object_fq** instead of **\_\_self** in manifests
|
||||
|
||||
### Upgrading from 1.6 to 1.7
|
||||
|
||||
* If you used the global explorer **hardware_type**, you need to change
|
||||
|
|
234
bin/cdist
Executable file
234
bin/cdist
Executable file
|
@ -0,0 +1,234 @@
|
|||
#!/usr/bin/env python3
|
||||
# -*- coding: utf-8 -*-
|
||||
#
|
||||
# 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/>.
|
||||
#
|
||||
#
|
||||
|
||||
def commandline():
|
||||
"""Parse command line"""
|
||||
import argparse
|
||||
|
||||
import cdist.banner
|
||||
import cdist.config
|
||||
import cdist.install
|
||||
|
||||
# Construct parser others can reuse
|
||||
parser = {}
|
||||
# Options _all_ parsers have in common
|
||||
parser['loglevel'] = argparse.ArgumentParser(add_help=False)
|
||||
parser['loglevel'].add_argument('-d', '--debug',
|
||||
help='Set log level to debug', action='store_true',
|
||||
default=False)
|
||||
parser['loglevel'].add_argument('-v', '--verbose',
|
||||
help='Set log level to info, be more verbose',
|
||||
action='store_true', default=False)
|
||||
|
||||
# Main subcommand parser
|
||||
parser['main'] = argparse.ArgumentParser(description='cdist ' + cdist.VERSION,
|
||||
parents=[parser['loglevel']])
|
||||
parser['main'].add_argument('-V', '--version',
|
||||
help='Show version', action='version',
|
||||
version='%(prog)s ' + cdist.VERSION)
|
||||
parser['sub'] = parser['main'].add_subparsers(title="Commands")
|
||||
|
||||
# Banner
|
||||
parser['banner'] = parser['sub'].add_parser('banner',
|
||||
parents=[parser['loglevel']])
|
||||
parser['banner'].set_defaults(func=cdist.banner.banner)
|
||||
|
||||
# Config and install (common stuff)
|
||||
parser['configinstall'] = argparse.ArgumentParser(add_help=False)
|
||||
parser['configinstall'].add_argument('host', nargs='+',
|
||||
help='one or more hosts to operate on')
|
||||
parser['configinstall'].add_argument('-c', '--cdist-home',
|
||||
help='Change cdist home (default: .. from bin directory)',
|
||||
action='store')
|
||||
parser['configinstall'].add_argument('-i', '--initial-manifest',
|
||||
help='Path to a cdist manifest or \'-\' to read from stdin.',
|
||||
dest='manifest', required=False)
|
||||
parser['configinstall'].add_argument('-p', '--parallel',
|
||||
help='Operate on multiple hosts in parallel',
|
||||
action='store_true', dest='parallel')
|
||||
parser['configinstall'].add_argument('-s', '--sequential',
|
||||
help='Operate on multiple hosts sequentially (default)',
|
||||
action='store_false', dest='parallel')
|
||||
|
||||
# Config
|
||||
parser['config'] = parser['sub'].add_parser('config',
|
||||
parents=[parser['loglevel'], parser['configinstall']])
|
||||
parser['config'].set_defaults(func=config)
|
||||
|
||||
# Install
|
||||
parser['install'] = parser['sub'].add_parser('install',
|
||||
parents=[parser['loglevel'], parser['configinstall']])
|
||||
parser['install'].set_defaults(func=install)
|
||||
|
||||
for p in parser:
|
||||
parser[p].epilog = "Get cdist at http://www.nico.schottelius.org/software/cdist/"
|
||||
|
||||
args = parser['main'].parse_args(sys.argv[1:])
|
||||
|
||||
# Loglevels are handled globally in here and debug wins over verbose
|
||||
if args.verbose:
|
||||
logging.root.setLevel(logging.INFO)
|
||||
if args.debug:
|
||||
logging.root.setLevel(logging.DEBUG)
|
||||
|
||||
log.debug(args)
|
||||
args.func(args)
|
||||
|
||||
def config(args):
|
||||
configinstall(args, mode=cdist.config.Config)
|
||||
|
||||
def install(args):
|
||||
configinstall(args, mode=cdist.install.Install)
|
||||
|
||||
def configinstall(args, mode):
|
||||
"""Configure or install remote system"""
|
||||
import multiprocessing
|
||||
import time
|
||||
|
||||
initial_manifest_tempfile = None
|
||||
if args.manifest == '-':
|
||||
# read initial manifest from stdin
|
||||
import tempfile
|
||||
handle, initial_manifest_temp_path = tempfile.mkstemp(prefix='cdist.stdin.')
|
||||
with os.fdopen(handle, 'w') as fd:
|
||||
fd.write(sys.stdin.read())
|
||||
args.manifest = initial_manifest_temp_path
|
||||
import atexit
|
||||
atexit.register(lambda: os.remove(initial_manifest_temp_path))
|
||||
|
||||
try:
|
||||
process = {}
|
||||
failed_hosts = []
|
||||
time_start = time.time()
|
||||
|
||||
for host in args.host:
|
||||
if args.parallel:
|
||||
log.debug("Creating child process for %s", host)
|
||||
process[host] = multiprocessing.Process(target=configinstall_onehost, args=(host, args, mode, True))
|
||||
process[host].start()
|
||||
else:
|
||||
if not configinstall_onehost(host, args, mode, parallel=False):
|
||||
failed_hosts.append(host)
|
||||
|
||||
if args.parallel:
|
||||
for p in process.keys():
|
||||
log.debug("Joining process %s", p)
|
||||
process[p].join()
|
||||
|
||||
if not process[p].exitcode == 0:
|
||||
failed_hosts.append(p)
|
||||
|
||||
if len(failed_hosts) > 0:
|
||||
log.warn("Failed to deploy to the following hosts: " +
|
||||
" ".join(failed_hosts))
|
||||
|
||||
time_end = time.time()
|
||||
log.info("Total processing time for %s host(s): %s", len(args.host),
|
||||
(time_end - time_start))
|
||||
|
||||
except KeyboardInterrupt:
|
||||
if args.parallel:
|
||||
for p in process.keys():
|
||||
# NOT needed: KeyBoardInterrupet (aka SIGINT)
|
||||
# is forwarded to processes spawned by multiprocess!
|
||||
# pid = process[p].pid.__str__()
|
||||
#log.warn("Terminating deploy " + p + " (" + pid + ")")
|
||||
# process[p].terminate()
|
||||
pass
|
||||
|
||||
sys.exit(0)
|
||||
|
||||
|
||||
def configinstall_onehost(host, args, mode, parallel):
|
||||
"""Configure or install ONE remote system"""
|
||||
|
||||
try:
|
||||
import cdist.context
|
||||
|
||||
context = cdist.context.Context(
|
||||
target_host=host,
|
||||
initial_manifest=args.manifest,
|
||||
base_path=args.cdist_home,
|
||||
exec_path=sys.argv[0],
|
||||
debug=args.debug)
|
||||
|
||||
c = mode(context)
|
||||
c.deploy_and_cleanup()
|
||||
context.cleanup()
|
||||
|
||||
except cdist.Error as e:
|
||||
log.error(e)
|
||||
return False
|
||||
except KeyboardInterrupt:
|
||||
# Do not care in sequential mode, catch in parallel mode
|
||||
if not parallel:
|
||||
raise
|
||||
else:
|
||||
# Catch here, above does not need to know about our errors
|
||||
return False
|
||||
|
||||
return True
|
||||
|
||||
def emulator():
|
||||
"""Prepare and run emulator"""
|
||||
try:
|
||||
import cdist.emulator
|
||||
emulator = cdist.emulator.Emulator(sys.argv)
|
||||
emulator.run()
|
||||
|
||||
except cdist.Error as e:
|
||||
log.error(e)
|
||||
sys.exit(1)
|
||||
|
||||
if __name__ == "__main__":
|
||||
try:
|
||||
import logging
|
||||
import os
|
||||
import re
|
||||
import sys
|
||||
|
||||
cdistpythonversion = '3.2'
|
||||
if sys.version < cdistpythonversion:
|
||||
print('Cdist requires Python >= ' + cdistpythonversion +
|
||||
' on the source host.')
|
||||
sys.exit(1)
|
||||
|
||||
# Ensure our /lib/ is included into PYTHON_PATH
|
||||
sys.path.insert(0, os.path.abspath(
|
||||
os.path.join(os.path.dirname(os.path.realpath(__file__)), '../lib')))
|
||||
|
||||
# And now import our stuff
|
||||
import cdist
|
||||
|
||||
log = logging.getLogger("cdist")
|
||||
|
||||
logging.basicConfig(format='%(levelname)s: %(message)s')
|
||||
|
||||
if re.match("__", os.path.basename(sys.argv[0])):
|
||||
emulator()
|
||||
else:
|
||||
commandline()
|
||||
|
||||
except KeyboardInterrupt:
|
||||
sys.exit(0)
|
||||
|
||||
sys.exit(0)
|
|
@ -1,50 +0,0 @@
|
|||
#!/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/>.
|
||||
#
|
||||
#
|
||||
# This binary is executed on the remote side to execute code
|
||||
#
|
||||
|
||||
. cdist-config
|
||||
[ $# -eq 2 ] || __cdist_usage "<object> <type>"
|
||||
set -ue
|
||||
|
||||
__cdist_object_self="$1"; shift
|
||||
__cdist_code_type="$1"; shift
|
||||
|
||||
if [ ! -d "$(__cdist_object_dir "$__cdist_object_self")" ]; then
|
||||
__cdist_exit_err "Object undefined"
|
||||
fi
|
||||
|
||||
__cdist_code="$(__cdist_object_code "$__cdist_object_self" "${__cdist_code_type}")"
|
||||
|
||||
__cdist_echo info "Checking code-${__cdist_code_type}"
|
||||
|
||||
if [ -e "$__cdist_code" ]; then
|
||||
if [ -f "$__cdist_code" ]; then
|
||||
if [ -x "$__cdist_code" ]; then
|
||||
__cdist_echo info "Executing code-${__cdist_code_type}"
|
||||
__cdist_exec_fail_on_error "$__cdist_code"
|
||||
else
|
||||
__cdist_exit_err "$__cdist_code exists, but is not executable."
|
||||
fi
|
||||
else
|
||||
__cdist_exit_err "$__cdist_code exists, but is not a file."
|
||||
fi
|
||||
fi
|
438
bin/cdist-config
438
bin/cdist-config
|
@ -1,438 +0,0 @@
|
|||
#!/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/>.
|
||||
#
|
||||
#
|
||||
|
||||
__cdist_version="1.7.0"
|
||||
|
||||
# Fail if something bogus is going on
|
||||
set -u
|
||||
|
||||
################################################################################
|
||||
# cconf standard vars prefixed with cdist
|
||||
|
||||
__cdist_pwd="$(pwd -P)"
|
||||
__cdist_mydir="${0%/*}";
|
||||
__cdist_abs_mydir="$(cd "$__cdist_mydir" && pwd -P)"
|
||||
__cdist_myname=${0##*/};
|
||||
__cdist_abs_myname="$__cdist_abs_mydir/$__cdist_myname"
|
||||
|
||||
################################################################################
|
||||
# Names / Constants
|
||||
#
|
||||
# Most values can be overriden from outside, so you can
|
||||
# customise paths as you like (for distributors, geeks and hackers)
|
||||
#
|
||||
|
||||
: ${__cdist_name_bin:=bin}
|
||||
: ${__cdist_name_cache:=cache}
|
||||
: ${__cdist_name_code:=code}
|
||||
: ${__cdist_name_conf_dir:=conf}
|
||||
: ${__cdist_name_dot_cdist:=.cdist}
|
||||
: ${__cdist_name_explorer:=explorer}
|
||||
: ${__cdist_name_gencode:=gencode}
|
||||
: ${__cdist_name_gencode_local:=local}
|
||||
: ${__cdist_name_gencode_remote:=remote}
|
||||
: ${__cdist_name_global:=global}
|
||||
: ${__cdist_name_host:=host}
|
||||
: ${__cdist_name_init:=init}
|
||||
: ${__cdist_name_manifest:=manifest}
|
||||
: ${__cdist_name_object:=object}
|
||||
: ${__cdist_name_object_finished:=done}
|
||||
: ${__cdist_name_object_prepared:=prepared}
|
||||
: ${__cdist_name_object_id:=object_id}
|
||||
: ${__cdist_name_object_source:=source}
|
||||
: ${__cdist_name_objects_created:=.objects_created}
|
||||
: ${__cdist_name_out_dir:=out}
|
||||
: ${__cdist_name_parameter:=parameter}
|
||||
: ${__cdist_name_parameter_required:=required}
|
||||
: ${__cdist_name_parameter_optional:=optional}
|
||||
: ${__cdist_name_require:=require}
|
||||
: ${__cdist_name_self:=self}
|
||||
: ${__cdist_name_singleton:=singleton}
|
||||
: ${__cdist_name_target_host:=target_host}
|
||||
: ${__cdist_name_target_user:=target_user}
|
||||
: ${__cdist_name_type:=type}
|
||||
: ${__cdist_name_type_bin:=type_bin}
|
||||
: ${__cdist_name_type_explorer:=type_explorer}
|
||||
: ${__cdist_name_type_explorer_pushed:=.explorer_pushed}
|
||||
|
||||
# Used for IDs: Allow everything not starting with - and .
|
||||
: ${__cdist_sane_regexp:=[^-\.].*}
|
||||
|
||||
# Default remote user
|
||||
: ${__cdist_remote_user:=root}
|
||||
|
||||
|
||||
################################################################################
|
||||
# Exported variable names (usable for non core
|
||||
#
|
||||
: ${__cdist_name_var_explorer:=__$__cdist_name_explorer}
|
||||
: ${__cdist_name_var_type_explorer:=__$__cdist_name_type_explorer}
|
||||
: ${__cdist_name_var_global:=__$__cdist_name_global}
|
||||
: ${__cdist_name_var_manifest:=__$__cdist_name_manifest}
|
||||
: ${__cdist_name_var_target_host:=__$__cdist_name_target_host}
|
||||
: ${__cdist_name_var_target_user:=__$__cdist_name_target_user}
|
||||
: ${__cdist_name_var_object:=__$__cdist_name_object}
|
||||
: ${__cdist_name_var_object_id:=__$__cdist_name_object_id}
|
||||
: ${__cdist_name_var_self:=__$__cdist_name_self}
|
||||
: ${__cdist_name_var_type:=__$__cdist_name_type}
|
||||
|
||||
|
||||
################################################################################
|
||||
# Tempfiles
|
||||
#
|
||||
: ${__cdist_tmp_base_dir=/tmp}
|
||||
__cdist_tmp_dir=$(mktemp -d "$__cdist_tmp_base_dir/cdist.XXXXXXXXXXXX")
|
||||
__cdist_tmp_file=$(mktemp "$__cdist_tmp_dir/cdist.XXXXXXXXXXXX")
|
||||
|
||||
################################################################################
|
||||
# Local Base
|
||||
#
|
||||
: ${__cdist_local_base_dir:=$__cdist_tmp_dir}
|
||||
|
||||
# Cache may *NOT* be below __cdist_local_base_dir!
|
||||
: ${__cdist_local_base_cache_dir:=$__cdist_abs_mydir/../$__cdist_name_cache}
|
||||
|
||||
: ${__cdist_conf_dir:="$(cd "$__cdist_abs_mydir/../conf" && pwd -P)"}
|
||||
|
||||
: ${__cdist_explorer_dir:=$__cdist_conf_dir/$__cdist_name_explorer}
|
||||
: ${__cdist_manifest_dir:=$__cdist_conf_dir/$__cdist_name_manifest}
|
||||
: ${__cdist_manifest_init:=$__cdist_manifest_dir/$__cdist_name_init}
|
||||
: ${__cdist_type_dir:=$__cdist_conf_dir/$__cdist_name_type}
|
||||
|
||||
################################################################################
|
||||
# Local output
|
||||
#
|
||||
: ${__cdist_out_dir:=$__cdist_local_base_dir/$__cdist_name_out_dir}
|
||||
: ${__cdist_out_explorer_dir:=$__cdist_out_dir/$__cdist_name_explorer}
|
||||
: ${__cdist_out_object_dir:=$__cdist_out_dir/$__cdist_name_object}
|
||||
: ${__cdist_out_type_dir:=$__cdist_out_dir/$__cdist_name_type}
|
||||
: ${__cdist_out_type_bin_dir:=$__cdist_out_dir/$__cdist_name_type_bin}
|
||||
|
||||
: ${__cdist_objects_created:=$__cdist_out_object_dir/$__cdist_name_objects_created}
|
||||
|
||||
################################################################################
|
||||
# Remote base
|
||||
#
|
||||
: ${__cdist_remote_base_dir:=/var/lib/cdist}
|
||||
: ${__cdist_remote_bin_dir:=$__cdist_remote_base_dir/$__cdist_name_bin}
|
||||
: ${__cdist_remote_conf_dir:=$__cdist_remote_base_dir/$__cdist_name_conf_dir}
|
||||
|
||||
: ${__cdist_remote_explorer_dir:=$__cdist_remote_conf_dir/$__cdist_name_explorer}
|
||||
: ${__cdist_remote_type_dir:=$__cdist_remote_conf_dir/$__cdist_name_type}
|
||||
|
||||
################################################################################
|
||||
# Remote output
|
||||
#
|
||||
: ${__cdist_remote_out_dir:=$__cdist_remote_base_dir/$__cdist_name_out_dir}
|
||||
: ${__cdist_remote_out_explorer_dir:=$__cdist_remote_out_dir/$__cdist_name_explorer}
|
||||
: ${__cdist_remote_out_object_dir:=$__cdist_remote_out_dir/$__cdist_name_object}
|
||||
|
||||
|
||||
################################################################################
|
||||
# Internal functions
|
||||
#
|
||||
__cdist_echo()
|
||||
{
|
||||
__cdist_echo_type="$1"; shift
|
||||
|
||||
set +u
|
||||
if [ "$__cdist_object_self" ]; then
|
||||
__cdist_echo_prefix="${__cdist_object_self}:"
|
||||
else
|
||||
__cdist_echo_prefix="core: "
|
||||
fi
|
||||
set -u
|
||||
|
||||
case "$__cdist_echo_type" in
|
||||
debug)
|
||||
set +u
|
||||
if [ "$__cdist_debug" ]; then
|
||||
echo $__cdist_echo_prefix "Debug: $@"
|
||||
fi
|
||||
set -u
|
||||
;;
|
||||
info)
|
||||
echo $__cdist_echo_prefix "$@"
|
||||
;;
|
||||
warn)
|
||||
echo $__cdist_echo_prefix "Warning: $@"
|
||||
;;
|
||||
error)
|
||||
echo $__cdist_echo_prefix "Error: $@" >&2
|
||||
;;
|
||||
*)
|
||||
echo "CORE BUG, who created the broken commit in $0?" >&2
|
||||
exit 23
|
||||
;;
|
||||
esac
|
||||
}
|
||||
|
||||
__cdist_exec_fail_on_error()
|
||||
{
|
||||
set +e
|
||||
sh -e "$@"
|
||||
if [ "$?" -ne 0 ]; then
|
||||
__cdist_echo error "$1 exited non-zero"
|
||||
__cdist_echo warn "Faulty code:"
|
||||
cat "$1"
|
||||
__cdist_exit_err "Aborting due to non-zero exit code."
|
||||
fi
|
||||
}
|
||||
|
||||
__cdist_exit_err()
|
||||
{
|
||||
__cdist_echo error "$@"
|
||||
exit 1
|
||||
}
|
||||
|
||||
__cdist_usage()
|
||||
{
|
||||
__cdist_exit_err "$__cdist_myname: $@"
|
||||
}
|
||||
|
||||
__cdist_init_deploy()
|
||||
{
|
||||
__cdist_echo info "Creating clean directory structure "
|
||||
|
||||
# Ensure there is no old stuff, neither local nor remote
|
||||
rm -rf "$__cdist_local_base_dir"
|
||||
ssh "${__cdist_remote_user}@$1" "rm -rf ${__cdist_remote_base_dir}"
|
||||
|
||||
# Init base
|
||||
mkdir -p "$__cdist_local_base_dir"
|
||||
ssh "${__cdist_remote_user}@$1" "mkdir -p ${__cdist_remote_base_dir}"
|
||||
|
||||
# Link configuration source directory - consistent with remote
|
||||
ln -sf "$__cdist_conf_dir" "$__cdist_local_base_dir/$__cdist_name_conf_dir"
|
||||
}
|
||||
|
||||
################################################################################
|
||||
# Cache
|
||||
#
|
||||
__cdist_cache_dir()
|
||||
{
|
||||
cd "${__cdist_local_base_cache_dir}" && pwd -P
|
||||
}
|
||||
|
||||
__cdist_host_cache_dir()
|
||||
{
|
||||
echo "$(__cdist_cache_dir)/$1"
|
||||
}
|
||||
|
||||
################################################################################
|
||||
# Object
|
||||
#
|
||||
|
||||
__cdist_object_code()
|
||||
{
|
||||
echo "$(__cdist_object_dir "$1")/${__cdist_name_code}-$2"
|
||||
}
|
||||
|
||||
__cdist_object_prepared()
|
||||
{
|
||||
echo "$(__cdist_object_dir "$1")/${__cdist_name_object_prepared}"
|
||||
}
|
||||
|
||||
__cdist_object_finished()
|
||||
{
|
||||
echo "$(__cdist_object_dir "$1")/${__cdist_name_object_finished}"
|
||||
}
|
||||
|
||||
__cdist_object_dir()
|
||||
{
|
||||
echo "$(__cdist_object_base_dir "$1")/${__cdist_name_dot_cdist}"
|
||||
}
|
||||
|
||||
__cdist_object_base_dir()
|
||||
{
|
||||
echo "${__cdist_out_object_dir}/$1"
|
||||
}
|
||||
|
||||
|
||||
__cdist_object_id_from_object()
|
||||
{
|
||||
echo "${1#*/}"
|
||||
}
|
||||
|
||||
# Find objects, remove ./ and /MARKER
|
||||
__cdist_object_list()
|
||||
{
|
||||
local basedir="$1"; shift
|
||||
|
||||
# Use subshell to prevent changing cwd in program
|
||||
(
|
||||
cd "${basedir}"
|
||||
|
||||
find . -name "$__cdist_name_dot_cdist" | \
|
||||
sed -e 's;^./;;' -e "s;/${__cdist_name_dot_cdist}\$;;"
|
||||
)
|
||||
}
|
||||
|
||||
__cdist_object_parameter_dir()
|
||||
{
|
||||
echo "$(__cdist_object_dir "$1")/${__cdist_name_parameter}"
|
||||
}
|
||||
|
||||
__cdist_object_require()
|
||||
{
|
||||
echo "$(__cdist_object_dir "$1")/${__cdist_name_require}"
|
||||
}
|
||||
|
||||
__cdist_object_source_name()
|
||||
{
|
||||
echo "$1/${__cdist_name_object_source}"
|
||||
}
|
||||
|
||||
__cdist_object_source()
|
||||
{
|
||||
cat "$(__cdist_object_source_name "$1")"
|
||||
}
|
||||
|
||||
__cdist_object_source_add()
|
||||
{
|
||||
echo "$__cdist_manifest" >> "$(__cdist_object_source_name "$1")"
|
||||
}
|
||||
|
||||
__cdist_object_type_explorer_dir()
|
||||
{
|
||||
echo "$(__cdist_object_dir "$1")/${__cdist_name_explorer}"
|
||||
}
|
||||
|
||||
################################################################################
|
||||
# Remote
|
||||
#
|
||||
|
||||
__cdist_remote_object_base_dir()
|
||||
{
|
||||
echo "${__cdist_remote_out_object_dir}/$1"
|
||||
}
|
||||
|
||||
__cdist_remote_object_dir()
|
||||
{
|
||||
echo "$(__cdist_remote_object_base_dir "$1")/${__cdist_name_dot_cdist}"
|
||||
}
|
||||
|
||||
__cdist_remote_object_parameter_dir()
|
||||
{
|
||||
echo "$(__cdist_remote_object_dir "$1")/${__cdist_name_parameter}"
|
||||
}
|
||||
|
||||
__cdist_remote_object_type_explorer_dir()
|
||||
{
|
||||
echo "$(__cdist_remote_object_dir "$1")/${__cdist_name_explorer}"
|
||||
}
|
||||
|
||||
|
||||
__cdist_remote_type_explorer_dir()
|
||||
{
|
||||
echo "${__cdist_remote_type_dir}/$1/${__cdist_name_explorer}"
|
||||
}
|
||||
|
||||
|
||||
################################################################################
|
||||
# Traps
|
||||
#
|
||||
__cdist_tmp_removal()
|
||||
{
|
||||
rm -rf "${__cdist_tmp_dir}"
|
||||
}
|
||||
|
||||
# Does not work in children, will be called again in every script!
|
||||
# Use only in interactive "front end" scripts
|
||||
__cdist_kill_on_interrupt()
|
||||
{
|
||||
__cdist_tmp_removal
|
||||
kill 0
|
||||
exit 1
|
||||
}
|
||||
|
||||
# Remove tempfiles at normal exit
|
||||
trap __cdist_tmp_removal EXIT
|
||||
|
||||
|
||||
################################################################################
|
||||
# Type
|
||||
#
|
||||
__cdist_type_dir()
|
||||
{
|
||||
echo "${__cdist_type_dir}/$1"
|
||||
}
|
||||
|
||||
__cdist_type_explorer_dir()
|
||||
{
|
||||
echo "${__cdist_type_dir}/$1/${__cdist_name_explorer}"
|
||||
}
|
||||
|
||||
__cdist_type_from_object()
|
||||
{
|
||||
echo "${1%%/*}"
|
||||
}
|
||||
|
||||
__cdist_type_has_explorer()
|
||||
{
|
||||
# We only create output, if there's at least one explorer
|
||||
# and can thus be used as a boolean ;-)
|
||||
if [ -d "$(__cdist_type_explorer_dir "$1")" ]; then
|
||||
ls -1 "$(__cdist_type_explorer_dir "$1")"
|
||||
fi
|
||||
}
|
||||
|
||||
__cdist_type_explorer_pushed()
|
||||
{
|
||||
[ -f "${__cdist_out_type_dir}/${__cdist_name_type_explorer_pushed}" ] \
|
||||
&& grep -x -q "$1" "${__cdist_out_type_dir}/${__cdist_name_type_explorer_pushed}"
|
||||
}
|
||||
|
||||
__cdist_type_explorer_pushed_add()
|
||||
{
|
||||
[ -d "$__cdist_out_type_dir" ] || mkdir "$__cdist_out_type_dir"
|
||||
echo "$1" >> "${__cdist_out_type_dir}/${__cdist_name_type_explorer_pushed}"
|
||||
}
|
||||
|
||||
__cdist_type_gencode()
|
||||
{
|
||||
echo "${__cdist_type_dir}/$1/${__cdist_name_gencode}-$2"
|
||||
}
|
||||
|
||||
__cdist_type_manifest()
|
||||
{
|
||||
echo "${__cdist_type_dir}/$1/${__cdist_name_manifest}"
|
||||
}
|
||||
|
||||
__cdist_type_parameter_dir()
|
||||
{
|
||||
echo "$(__cdist_type_dir "$1")/${__cdist_name_parameter}"
|
||||
}
|
||||
|
||||
__cdist_type_parameter_optional()
|
||||
{
|
||||
echo "$(__cdist_type_parameter_dir "$1")/$__cdist_name_parameter_optional"
|
||||
}
|
||||
|
||||
__cdist_type_parameter_required()
|
||||
{
|
||||
echo "$(__cdist_type_parameter_dir "$1")/$__cdist_name_parameter_required"
|
||||
}
|
||||
|
||||
__cdist_type_singleton()
|
||||
{
|
||||
echo "${__cdist_type_dir}/$1/${__cdist_name_singleton}"
|
||||
}
|
|
@ -1,59 +0,0 @@
|
|||
#!/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/>.
|
||||
#
|
||||
#
|
||||
# Deploy configuration to a host
|
||||
#
|
||||
|
||||
. cdist-config
|
||||
[ $# -eq 1 ] || __cdist_usage "<target host>"
|
||||
set -eu
|
||||
|
||||
# Kill children on interrupt - only in interactive scripts
|
||||
trap __cdist_kill_on_interrupt INT TERM
|
||||
|
||||
__cdist_target_host="$1"
|
||||
|
||||
# Make target host available for non-core
|
||||
export $__cdist_name_var_target_host="$__cdist_target_host"
|
||||
export $__cdist_name_var_target_user="$__cdist_remote_user"
|
||||
|
||||
# Export variables for core, which others do not reset
|
||||
export __cdist_local_base_dir
|
||||
|
||||
__cdist_echo info "cdist $__cdist_version: Configuring $__cdist_target_host "
|
||||
|
||||
################################################################################
|
||||
# See cdist-stages(7)
|
||||
#
|
||||
|
||||
# Prepare local and remote directories
|
||||
__cdist_init_deploy "$__cdist_target_host"
|
||||
|
||||
# Transfer cdist executables
|
||||
__cdist_echo info "Transferring cdist binaries to the target host "
|
||||
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-prepare
|
||||
cdist-object-all "$__cdist_target_host" cdist-object-run
|
||||
cdist-cache "$__cdist_target_host"
|
||||
|
||||
__cdist_echo info "cdist $__cdist_version: Successfully finished run"
|
|
@ -1,51 +0,0 @@
|
|||
#!/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/>.
|
||||
#
|
||||
#
|
||||
# Push a directory to a target, both sides have the same name (i.e. explorers)
|
||||
# or
|
||||
# Pull a directory from a target, both sides have the same name (i.e. explorers)
|
||||
#
|
||||
|
||||
|
||||
. cdist-config
|
||||
[ $# -eq 4 ] || __cdist_usage "<push|pull> <target host> <src dir> <dst dir>"
|
||||
set -ue
|
||||
|
||||
__cdist_action="$1"; shift
|
||||
__cdist_target_host="$1"; shift
|
||||
__cdist_src_dir="$1"; shift
|
||||
__cdist_dst_dir="$1"; shift
|
||||
|
||||
# This will be the destination directory, so no subdirectories
|
||||
# of the same name are created, if the directory is already existing
|
||||
__cdist_top_dir="${__cdist_dst_dir%/*}"
|
||||
|
||||
if [ "$__cdist_action" = "push" ]; then
|
||||
ssh "${__cdist_remote_user}@${__cdist_target_host}" \
|
||||
"mkdir -p \"${__cdist_dst_dir}\""
|
||||
scp -qr "$__cdist_src_dir" \
|
||||
"${__cdist_remote_user}@${__cdist_target_host}:${__cdist_top_dir}"
|
||||
elif [ "$__cdist_action" = "pull" ]; then
|
||||
mkdir -p "${__cdist_dst_dir}"
|
||||
scp -qr "${__cdist_remote_user}@${__cdist_target_host}:${__cdist_src_dir}" \
|
||||
"${__cdist_top_dir}"
|
||||
else
|
||||
__cdist_exit_err "Unknown action $__cdist_action"
|
||||
fi
|
|
@ -1,43 +0,0 @@
|
|||
#!/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/>.
|
||||
#
|
||||
#
|
||||
# Copy & run the global explorers, i.e. not bound to types
|
||||
#
|
||||
|
||||
. cdist-config
|
||||
[ $# -eq 1 ] || __cdist_usage "<target_host>"
|
||||
set -ue
|
||||
|
||||
__cdist_target_host="$1"; shift
|
||||
|
||||
__cdist_echo info "Running global explorers "
|
||||
|
||||
# copy the explorers
|
||||
cdist-dir push "$__cdist_target_host" \
|
||||
"${__cdist_explorer_dir}" "${__cdist_remote_explorer_dir}"
|
||||
|
||||
# run the initial explorers remotely
|
||||
cdist-run-remote "${__cdist_target_host}" cdist-remote-explorer-run \
|
||||
"$__cdist_name_var_explorer" "$__cdist_remote_explorer_dir" \
|
||||
"$__cdist_remote_out_explorer_dir"
|
||||
|
||||
# retrieve the results
|
||||
cdist-dir pull "$__cdist_target_host" \
|
||||
"${__cdist_remote_out_explorer_dir}" "${__cdist_out_explorer_dir}"
|
|
@ -1,56 +0,0 @@
|
|||
#!/bin/sh
|
||||
#
|
||||
# 2010 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/>.
|
||||
#
|
||||
#
|
||||
# Let's build a cconfig tree from a configuration
|
||||
# And save it into the cache tree
|
||||
#
|
||||
|
||||
. cdist-config
|
||||
[ $# -eq 2 ] || __cdist_usage "<target host> <manifest>"
|
||||
set -u
|
||||
|
||||
__cdist_target_host="$1"; shift
|
||||
__cdist_manifest="$1"; shift
|
||||
|
||||
################################################################################
|
||||
# Export information for cdist-type-emulator or manifest
|
||||
#
|
||||
|
||||
# Config dir should not get reset - FIXME: why did I do this?
|
||||
export __cdist_conf_dir
|
||||
|
||||
# Used to record the source in the object
|
||||
export __cdist_manifest
|
||||
|
||||
# Export information for manifests - __cdist_out_dir comes from cdist-config
|
||||
export __global="$__cdist_out_dir"
|
||||
|
||||
################################################################################
|
||||
# The actual run
|
||||
#
|
||||
|
||||
# Ensure binaries exist and are up-to-date
|
||||
cdist-type-build-emulation "${__cdist_out_type_bin_dir}" \
|
||||
|| __cdist_exit_err "Failed to build type emulation binaries"
|
||||
|
||||
# prepend our path, so all cdist tools come before other tools
|
||||
export PATH="${__cdist_out_type_bin_dir}:$PATH"
|
||||
|
||||
__cdist_exec_fail_on_error "${__cdist_manifest}"
|
|
@ -1,75 +0,0 @@
|
|||
#!/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/>.
|
||||
#
|
||||
#
|
||||
# Deploy configuration to many hosts
|
||||
#
|
||||
|
||||
. cdist-config
|
||||
[ $# -ge 1 ] || __cdist_usage "[-p] <target host> [target host ]"
|
||||
set -u
|
||||
|
||||
# Kill children on interrupt - only in interactive scripts
|
||||
trap __cdist_kill_on_interrupt INT TERM
|
||||
|
||||
filter()
|
||||
{
|
||||
awk -v host=$1 '{ print "[" host "] " $0 }'
|
||||
}
|
||||
|
||||
parallel=""
|
||||
if [ "$1" = "-p" ]; then
|
||||
parallel=yes
|
||||
shift
|
||||
fi
|
||||
|
||||
i=0
|
||||
while [ $# -gt 0 ]; do
|
||||
if [ "$parallel" ]; then
|
||||
cdist-deploy-to "$1" | filter "$1" &
|
||||
# Record pid and host for use later
|
||||
i=$((i+1))
|
||||
eval pid_$i=$!
|
||||
eval host_$i=\$1
|
||||
else
|
||||
cdist-deploy-to "$1" | filter "$1"
|
||||
fi
|
||||
shift
|
||||
done
|
||||
|
||||
e=0
|
||||
if [ "$parallel" ]; then
|
||||
__cdist_echo info "Waiting for cdist-deploy-to jobs to finish"
|
||||
while [ "$i" -gt 0 ]; do
|
||||
eval pid=\$pid_$i
|
||||
wait "$pid"
|
||||
if [ $? -ne 0 ]; then
|
||||
e=$((e+1))
|
||||
eval e_host_$e=\$host_$i
|
||||
fi
|
||||
i=$((i-1))
|
||||
done
|
||||
fi
|
||||
|
||||
# Display all failed hosts after all runs are done, so the sysadmin gets them
|
||||
while [ "$e" -gt 0 ]; do
|
||||
eval host=\$host_$e
|
||||
__cdist_echo error "Configuration of host $host failed."
|
||||
e=$((e-1))
|
||||
done
|
|
@ -1,56 +0,0 @@
|
|||
#!/bin/sh
|
||||
#
|
||||
# 2011 Nico Schottelius (nico-cdist at schottelius.org)
|
||||
# 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/>.
|
||||
#
|
||||
#
|
||||
# Run the given command for each created object.
|
||||
#
|
||||
|
||||
. cdist-config
|
||||
[ $# -eq 2 ] || __cdist_usage "<target host> <command>"
|
||||
set -eu
|
||||
|
||||
__cdist_target_host="$1"; shift
|
||||
__cdist_command="$1"; shift
|
||||
|
||||
__cdist_objects="$__cdist_tmp_dir/objects"
|
||||
|
||||
# Ensure object dir exists, so marker can be created
|
||||
mkdir -p "${__cdist_out_object_dir}"
|
||||
|
||||
# Loop until we do not create new objects anymore
|
||||
# which is equal to all objects have been run
|
||||
touch "$__cdist_objects_created"
|
||||
while [ -f "$__cdist_objects_created" ]; do
|
||||
# Assume we're done after this run
|
||||
rm "$__cdist_objects_created"
|
||||
|
||||
# Get listing of objects
|
||||
__cdist_object_list "$__cdist_out_object_dir" > "$__cdist_objects"
|
||||
|
||||
# NEED TO CREATE ARRAY, SSH DESTROYS WHILE READ LOOP
|
||||
while read __cdist_object; do
|
||||
set -- "$@" "$__cdist_object"
|
||||
done < "$__cdist_objects"
|
||||
|
||||
while [ $# -gt 0 ]; do
|
||||
__cdist_object="$1"; shift
|
||||
$__cdist_command "$__cdist_target_host" "$__cdist_object"
|
||||
done
|
||||
done
|
|
@ -1,67 +0,0 @@
|
|||
#!/bin/sh
|
||||
#
|
||||
# 2010-2011 Nico Schottelius (nico-cdist at schottelius.org)
|
||||
# 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/>.
|
||||
#
|
||||
#
|
||||
# Run the explorers for the given object on the target host.
|
||||
#
|
||||
|
||||
. cdist-config
|
||||
[ $# -eq 2 ] || __cdist_usage "<target host> <object>"
|
||||
set -eu
|
||||
|
||||
__cdist_target_host="$1"; shift
|
||||
__cdist_object_self="$1"; shift
|
||||
|
||||
__cdist_object_id="$(__cdist_object_id_from_object "$__cdist_object_self")"
|
||||
__cdist_type="$(__cdist_type_from_object "$__cdist_object_self")"
|
||||
|
||||
# Check if type of object has >= 1 explorer
|
||||
__cdist_has_explorer="$(__cdist_type_has_explorer "$__cdist_type")"
|
||||
# Run the type explorers for the current object if any
|
||||
if [ "$__cdist_has_explorer" ]; then
|
||||
if ! __cdist_type_explorer_pushed "$__cdist_type"; then
|
||||
src_dir="$(__cdist_type_explorer_dir "$__cdist_type")"
|
||||
dst_dir="$(__cdist_remote_type_explorer_dir "$__cdist_type")"
|
||||
__cdist_echo info "Transfering explorers for $__cdist_type "
|
||||
cdist-dir push "$__cdist_target_host" "$src_dir" "$dst_dir"
|
||||
__cdist_type_explorer_pushed_add "$__cdist_type"
|
||||
fi
|
||||
|
||||
__cdist_echo info "Running explorers"
|
||||
# Copy object parameters
|
||||
cdist-dir push "$__cdist_target_host" \
|
||||
"$(__cdist_object_parameter_dir "$__cdist_object_self")" \
|
||||
"$(__cdist_remote_object_parameter_dir "$__cdist_object_self")"
|
||||
|
||||
# Execute explorers
|
||||
cdist-run-remote "$__cdist_target_host" \
|
||||
"$__cdist_name_var_object=\"$(__cdist_remote_object_dir "$__cdist_object_self")\"" \
|
||||
"$__cdist_name_var_object_id=\"$__cdist_object_id\"" \
|
||||
"$__cdist_name_var_self=\"$__cdist_object_self\"" \
|
||||
cdist-remote-explorer-run \
|
||||
"$__cdist_name_var_type_explorer" \
|
||||
"$(__cdist_remote_type_explorer_dir "$__cdist_type")" \
|
||||
"$(__cdist_remote_object_type_explorer_dir "$__cdist_object_self")"
|
||||
|
||||
# Copy back results
|
||||
cdist-dir pull "$__cdist_target_host" \
|
||||
"$(__cdist_remote_object_type_explorer_dir "$__cdist_object_self")" \
|
||||
"$(__cdist_object_type_explorer_dir "$__cdist_object_self")"
|
||||
fi
|
|
@ -1,62 +0,0 @@
|
|||
#!/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/>.
|
||||
#
|
||||
#
|
||||
# Generate code from one object (object must be relative path!)
|
||||
# WARNING: OUTPUT ON STDOUT, ERRORS NEED TO BE ON STDERR!
|
||||
#
|
||||
|
||||
. cdist-config
|
||||
[ $# -eq 3 ] || __cdist_usage "<target host>" "<object>" "<type>"
|
||||
set -eu
|
||||
|
||||
__cdist_target_host="$1"; shift
|
||||
__cdist_object_self="$1"; shift
|
||||
__cdist_gencode_type="$1"; shift
|
||||
|
||||
__cdist_type="$(__cdist_type_from_object "$__cdist_object_self")"
|
||||
__cdist_type_gencode="$(__cdist_type_gencode "$__cdist_type" "$__cdist_gencode_type")"
|
||||
__cdist_code_output="$(__cdist_object_code "$__cdist_object_self" "$__cdist_gencode_type")"
|
||||
|
||||
# export variables for the gencode script
|
||||
export __object_id="$(__cdist_object_id_from_object "$__cdist_object_self")"
|
||||
export __object="$(__cdist_object_dir "$__cdist_object_self")"
|
||||
export __global="$__cdist_out_dir"
|
||||
|
||||
if [ -x "$__cdist_type_gencode" ]; then
|
||||
__cdist_exec_fail_on_error "$__cdist_type_gencode" > "$__cdist_tmp_file"
|
||||
else
|
||||
if [ -e "$__cdist_type_gencode" ]; then
|
||||
__cdist_exit_err "$__cdist_type_gencode exists, but is not executable"
|
||||
fi
|
||||
|
||||
# Ensure it's empty, if there is no gencode
|
||||
: > "$__cdist_tmp_file"
|
||||
fi
|
||||
|
||||
# Only create code, if gencode created output
|
||||
if [ "$(wc -l < "$__cdist_tmp_file")" -gt 0 ]; then
|
||||
cat - "$__cdist_tmp_file" << eof > "$__cdist_code_output"
|
||||
#
|
||||
# The following code was generated by $__cdist_type_gencode
|
||||
#
|
||||
|
||||
eof
|
||||
chmod u+x "${__cdist_code_output}"
|
||||
fi
|
|
@ -1,58 +0,0 @@
|
|||
#!/bin/sh
|
||||
#
|
||||
# 2010 Nico Schottelius (nico-cdist at schottelius.org)
|
||||
# 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/>.
|
||||
#
|
||||
#
|
||||
# Run the manifest for the given object.
|
||||
#
|
||||
|
||||
. cdist-config
|
||||
[ $# -eq 2 ] || __cdist_usage "<target host> <object>"
|
||||
set -eu
|
||||
|
||||
__cdist_target_host="$1"; shift
|
||||
__cdist_object_self="$1"; shift
|
||||
|
||||
# FIXME: rename to __cdist_object_dir (everywhere!)
|
||||
__cdist_cur_object_dir="$(__cdist_object_dir "$__cdist_object_self")"
|
||||
__cdist_object_id="$(__cdist_object_id_from_object "$__cdist_object_self")"
|
||||
|
||||
__cdist_echo info "Checking manifest "
|
||||
|
||||
__cdist_type="$(__cdist_type_from_object "$__cdist_object_self")"
|
||||
__cdist_manifest="$(__cdist_type_manifest "$__cdist_type")"
|
||||
|
||||
if [ -f "$__cdist_manifest" ]; then
|
||||
if [ -x "$__cdist_manifest" ]; then
|
||||
# Make __cdist_manifest available for cdist-type-emulator
|
||||
export __cdist_manifest
|
||||
|
||||
__cdist_echo info "Executing manifest "
|
||||
export $__cdist_name_var_object="$__cdist_cur_object_dir"
|
||||
export $__cdist_name_var_object_id="$__cdist_object_id"
|
||||
export $__cdist_name_var_type="$(__cdist_type_dir "$__cdist_type")"
|
||||
|
||||
cdist-manifest-run "$__cdist_target_host" "$__cdist_manifest"
|
||||
|
||||
# Tell cdist-object-run-all that there may be new objects
|
||||
touch "$__cdist_objects_created"
|
||||
else
|
||||
__cdist_exit_err "${__cdist_manifest} needs to be executable."
|
||||
fi
|
||||
fi
|
|
@ -1,47 +0,0 @@
|
|||
#!/bin/sh
|
||||
#
|
||||
# 2011 Nico Schottelius (nico-cdist at schottelius.org)
|
||||
# 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/>.
|
||||
#
|
||||
#
|
||||
# For the given object:
|
||||
# - run type explorers
|
||||
# - run type manifest
|
||||
#
|
||||
|
||||
. cdist-config
|
||||
[ $# -eq 2 ] || __cdist_usage "<target host> <object>"
|
||||
set -eu
|
||||
|
||||
__cdist_target_host="$1"; shift
|
||||
__cdist_object_self="$1"; shift
|
||||
__cdist_object_dir="$(__cdist_object_dir "$__cdist_object_self")"
|
||||
[ -d "$__cdist_object_dir" ] || __cdist_exit_err "Object undefined"
|
||||
|
||||
# Export to non-core for use in manifest and gencode scripts
|
||||
export $__cdist_name_var_self=$__cdist_object_self
|
||||
|
||||
__cdist_object_prepared="$(__cdist_object_prepared "$__cdist_object_self")"
|
||||
if [ ! -f "$__cdist_object_prepared" ]; then
|
||||
__cdist_echo info "Preparing object"
|
||||
cdist-object-explorer-run "$__cdist_target_host" "$__cdist_object_self"
|
||||
cdist-object-manifest-run "$__cdist_target_host" "$__cdist_object_self"
|
||||
|
||||
# Mark this object as prepared
|
||||
touch "$__cdist_object_prepared"
|
||||
fi
|
|
@ -1,65 +0,0 @@
|
|||
#!/bin/sh
|
||||
#
|
||||
# 2011 Nico Schottelius (nico-cdist at schottelius.org)
|
||||
# 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/>.
|
||||
#
|
||||
#
|
||||
# For the given object:
|
||||
# - run type explorers
|
||||
# - run type manifest
|
||||
# - generate code
|
||||
# - copy object to target
|
||||
# - execute code on target
|
||||
#
|
||||
|
||||
. cdist-config
|
||||
[ $# -eq 2 ] || __cdist_usage "<target host> <object>"
|
||||
set -eu
|
||||
|
||||
__cdist_target_host="$1"; shift
|
||||
__cdist_object_self="$1"; shift
|
||||
__cdist_object_dir="$(__cdist_object_dir "$__cdist_object_self")"
|
||||
[ -d "$__cdist_object_dir" ] || __cdist_exit_err "Object undefined"
|
||||
|
||||
# Export to non-core for use in manifest and gencode scripts
|
||||
export $__cdist_name_var_self=$__cdist_object_self
|
||||
|
||||
__cdist_object_finished="$(__cdist_object_finished "$__cdist_object_self")"
|
||||
if [ ! -f "$__cdist_object_finished" ]; then
|
||||
# Resolve dependencies, if any
|
||||
__cdist_object_require="$(__cdist_object_require "$__cdist_object_self")"
|
||||
if [ -f "$__cdist_object_require" ]; then
|
||||
# NEED TO CREATE ARRAY, SSH DESTROYS WHILE READ LOOP
|
||||
while read __cdist_requirement; do
|
||||
set -- "$@" "$__cdist_requirement"
|
||||
done < "$__cdist_object_require"
|
||||
|
||||
while [ $# -gt 0 ]; do
|
||||
__cdist_requirement="$1"; shift
|
||||
__cdist_echo info "Resolving requirement $__cdist_requirement"
|
||||
cdist-object-run "$__cdist_target_host" "$__cdist_requirement"
|
||||
done
|
||||
fi
|
||||
|
||||
cdist-object-gencode-run "$__cdist_target_host" "$__cdist_object_self"
|
||||
cdist-object-push "$__cdist_target_host" "$__cdist_object_self"
|
||||
cdist-object-code-run "$__cdist_target_host" "$__cdist_object_self"
|
||||
|
||||
# Mark this object as done
|
||||
touch "$__cdist_object_finished"
|
||||
fi
|
|
@ -1,310 +0,0 @@
|
|||
#!/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 know 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
|
|
@ -1,68 +0,0 @@
|
|||
#!/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/>.
|
||||
#
|
||||
#
|
||||
# This binary is executed on the remote side to execute explorers
|
||||
#
|
||||
# It supports different variables names to be used, so __explorers
|
||||
# and __type_explorers can be submitted :-)
|
||||
#
|
||||
|
||||
. cdist-config
|
||||
[ $# -eq 3 ] || __cdist_usage "<variable name> <explorer dir> <out dir>"
|
||||
set -ue
|
||||
|
||||
# Variable that defines the home of the explorers
|
||||
__cdist_variable_name="$1"; shift
|
||||
|
||||
# Find explorers here
|
||||
__cdist_explorer_dir="$1"; shift
|
||||
|
||||
# Write output here
|
||||
__cdist_my_out_dir="$1"; shift
|
||||
|
||||
# Setup environment
|
||||
export $__cdist_variable_name="$__cdist_explorer_dir"
|
||||
export __global="$__cdist_remote_out_dir"
|
||||
|
||||
mkdir -p "$__cdist_my_out_dir"
|
||||
|
||||
# Ensure there is at least one explorer
|
||||
num="$(ls -1 "$__cdist_explorer_dir" | wc -l)"
|
||||
if [ "$num" -lt 1 ]; then
|
||||
__cdist_exit_err "${__cdist_explorer_dir}: Contains no explorers"
|
||||
fi
|
||||
|
||||
# Execute all explorers
|
||||
for explorer in "$__cdist_explorer_dir/"*; do
|
||||
explorer_name="${explorer##*/}"
|
||||
|
||||
if [ -f "$explorer" ]; then
|
||||
if [ ! -x "$explorer" ]; then
|
||||
__cdist_exit_err "Explorer \"$explorer\" exists, but is not executable."
|
||||
fi
|
||||
|
||||
# Execute explorers and save results in remote destination directory
|
||||
"$explorer" > "${__cdist_my_out_dir}/$explorer_name"
|
||||
else
|
||||
if [ -e "$explorer" ]; then
|
||||
__cdist_exit_err "Explorer \"$explorer\" exists, but is not a file."
|
||||
fi
|
||||
fi
|
||||
done
|
|
@ -1,43 +0,0 @@
|
|||
#!/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/>.
|
||||
#
|
||||
# Build pseudo binaries for type emulation
|
||||
#
|
||||
|
||||
. cdist-config
|
||||
[ $# -eq 1 ] || __cdist_usage "<out dir>"
|
||||
set -eu
|
||||
|
||||
__cdist_output_dir="$1"; shift
|
||||
|
||||
__cdist_type_emulator="$__cdist_abs_mydir/cdist-type-emulator"
|
||||
|
||||
if [ ! -d "${__cdist_type_dir}" ]; then
|
||||
__cdist_exit_err "$__cdist_type_dir must exist and contain available types"
|
||||
fi
|
||||
|
||||
# Get Types
|
||||
cd "${__cdist_type_dir}"
|
||||
ls -1 > "${__cdist_tmp_file}"
|
||||
|
||||
# Create binaries
|
||||
mkdir -p "${__cdist_output_dir}"
|
||||
while read type; do
|
||||
ln -sf "${__cdist_type_emulator}" "${__cdist_output_dir}/${type}"
|
||||
done < "${__cdist_tmp_file}"
|
|
@ -1,182 +0,0 @@
|
|||
#!/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/>.
|
||||
#
|
||||
#
|
||||
# Wrapper script that generates cconfig from arguments
|
||||
#
|
||||
# This script will be called everytime the manifest decides to create
|
||||
# a new type
|
||||
#
|
||||
|
||||
. cdist-config
|
||||
set -u
|
||||
|
||||
################################################################################
|
||||
# Prepare object and type
|
||||
#
|
||||
|
||||
__cdist_type="$__cdist_myname"
|
||||
|
||||
# Find out whether type is a singleton or regular type
|
||||
if [ -f "$(__cdist_type_singleton "$__cdist_type")" ]; then
|
||||
__cdist_object_id="$__cdist_name_singleton"
|
||||
else
|
||||
[ $# -ge 1 ] || __cdist_usage "<id> <options>"
|
||||
__cdist_object_id="$1"; shift
|
||||
fi
|
||||
|
||||
# Verify object id
|
||||
__cdist_object_id_sane=$(echo "$__cdist_object_id" | grep "^${__cdist_sane_regexp}\$")
|
||||
if [ -z "$__cdist_object_id_sane" ]; then
|
||||
__cdist_usage "Insane object id, ${__cdist_object_id}."
|
||||
fi
|
||||
|
||||
# Prevent double slash if id begins with /
|
||||
if [ "$(echo $__cdist_object_id | grep "^/")" ]; then
|
||||
__cdist_object_self="${__cdist_type}${__cdist_object_id}"
|
||||
else
|
||||
__cdist_object_self="${__cdist_type}/${__cdist_object_id}"
|
||||
fi
|
||||
################################################################################
|
||||
# Internal quirks
|
||||
#
|
||||
|
||||
# Append id for error messages
|
||||
__cdist_myname="$__cdist_myname ($__cdist_object_id)"
|
||||
|
||||
################################################################################
|
||||
# Create object in tmpdir first
|
||||
#
|
||||
|
||||
# Save original destination
|
||||
__cdist_out_object_dir_orig="$__cdist_out_object_dir"
|
||||
|
||||
# Store to tmp now
|
||||
__cdist_out_object_dir="$__cdist_tmp_dir"
|
||||
|
||||
__cdist_new_object_dir="$(__cdist_object_dir "$__cdist_object_self")"
|
||||
|
||||
# Initialise object
|
||||
mkdir -p "${__cdist_new_object_dir}"
|
||||
|
||||
# Record parameter
|
||||
__cdist_parameter_dir="$(__cdist_object_parameter_dir "$__cdist_object_self")"
|
||||
mkdir -p "${__cdist_parameter_dir}"
|
||||
|
||||
while [ $# -gt 0 ]; do
|
||||
opt="$1"; shift
|
||||
|
||||
echo "$opt" | grep -q "^--${__cdist_sane_regexp}\$" || \
|
||||
__cdist_usage "Provide sane options"
|
||||
|
||||
opt_file="${opt#--}"
|
||||
|
||||
[ $# -ge 1 ] || __cdist_usage "Missing value for $opt"
|
||||
|
||||
value="$1"; shift
|
||||
|
||||
echo "${value}" > "${__cdist_parameter_dir}/${opt_file}"
|
||||
done
|
||||
|
||||
# Record requirements
|
||||
# it's fine, if it's not set
|
||||
set +u
|
||||
for requirement in $require; do
|
||||
echo $requirement >> "$(__cdist_object_require "$__cdist_object_self")"
|
||||
__cdist_echo info "Recording requirement $requirement"
|
||||
done
|
||||
set -u
|
||||
|
||||
################################################################################
|
||||
# Check newly created object
|
||||
#
|
||||
|
||||
#
|
||||
# Ensure required parameters are given
|
||||
#
|
||||
if [ -f "$(__cdist_type_parameter_required "$__cdist_type")" ]; then
|
||||
while read required; do
|
||||
if [ ! -f "${__cdist_parameter_dir}/${required}" ]; then
|
||||
__cdist_usage "Missing required parameter $required"
|
||||
fi
|
||||
done < "$(__cdist_type_parameter_required "$__cdist_type")"
|
||||
fi
|
||||
|
||||
#
|
||||
# Ensure that only optional or required parameters are given
|
||||
#
|
||||
|
||||
if [ -f "$(__cdist_type_parameter_optional "$__cdist_type")" ]; then
|
||||
cat "$(__cdist_type_parameter_optional "$__cdist_type")" > \
|
||||
"$__cdist_tmp_file"
|
||||
fi
|
||||
|
||||
if [ -f "$(__cdist_type_parameter_required "$__cdist_type")" ]; then
|
||||
cat "$(__cdist_type_parameter_required "$__cdist_type")" >> \
|
||||
"$__cdist_tmp_file"
|
||||
fi
|
||||
|
||||
cd "$__cdist_parameter_dir"
|
||||
for parameter in $(ls -1); do
|
||||
is_valid=$(grep "^$parameter\$" "$__cdist_tmp_file")
|
||||
|
||||
[ "$is_valid" ] || __cdist_usage "Unknown parameter $parameter"
|
||||
done
|
||||
|
||||
################################################################################
|
||||
# Merge object
|
||||
#
|
||||
# Restore original destination
|
||||
__cdist_out_object_dir="$__cdist_out_object_dir_orig"
|
||||
|
||||
__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_object_dir}" ]; then
|
||||
# Allow diff to fail
|
||||
set +e
|
||||
diff -ru "${__cdist_new_object_dir}/${__cdist_name_parameter}" \
|
||||
"${__cdist_object_dir}/${__cdist_name_parameter}" \
|
||||
> "$__cdist_tmp_file"; ret=$?
|
||||
set -e
|
||||
|
||||
if [ "$ret" != 0 ]; then
|
||||
# Go to standard error
|
||||
exec >&2
|
||||
echo "${__cdist_object_self} already exists differently."
|
||||
echo "Recorded source(s):"
|
||||
__cdist_object_source "${__cdist_object_dir}"
|
||||
echo "Differences:"
|
||||
cat "$__cdist_tmp_file"
|
||||
__cdist_exit_err "Aborting due to object conflict."
|
||||
fi
|
||||
else
|
||||
#
|
||||
# Move object into tree:
|
||||
# Create full path minus .cdist and move .cdist
|
||||
#
|
||||
__cdist_new_object_base_dir="$(__cdist_object_base_dir "$__cdist_object_self")"
|
||||
mkdir -p "$__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,83 +0,0 @@
|
|||
#!/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
|
||||
__cdist_my_type_dir="$(__cdist_type_dir "$__cdist_type")"
|
||||
|
||||
if [ -d "$__cdist_my_type_dir" ]; then
|
||||
__cdist_usage "Type $__cdist_type already exists"
|
||||
fi
|
||||
|
||||
echo "Creating type $__cdist_type in $__cdist_my_type_dir ..."
|
||||
# Base
|
||||
mkdir -p "$__cdist_my_type_dir"
|
||||
|
||||
# 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_my_type_dir/${__cdist_name_manifest}"
|
||||
|
||||
#
|
||||
# This is the manifest, which can be used to create other objects like this:
|
||||
# __file /path/to/destination --source /from/where/
|
||||
#
|
||||
# To tell cdist to make use of it, you need to make it executable (chmod +x)
|
||||
#
|
||||
#
|
||||
|
||||
eof
|
||||
|
||||
# Gencode remote
|
||||
cat "$__cdist_abs_mydir/../doc/dev/header" - << eof > "$(__cdist_type_dir "$__cdist_type")/${__cdist_name_gencode}-${__cdist_name_gencode_remote}"
|
||||
|
||||
#
|
||||
# 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
|
||||
|
||||
cat "$__cdist_abs_mydir/../doc/dev/header" - << eof > "$(__cdist_type_dir "$__cdist_type")/${__cdist_name_gencode}-${__cdist_name_gencode_local}"
|
||||
|
||||
#
|
||||
# This file should generate code on stdout, which will be collected by cdist
|
||||
# and run on the same machine cdist-deploy-to is executed.
|
||||
#
|
||||
# To tell cdist to make use of it, you need to make it executable (chmod +x)
|
||||
#
|
||||
#
|
||||
|
||||
eof
|
||||
|
||||
# Explorer
|
||||
mkdir -p "$__cdist_my_type_dir/${__cdist_name_explorer}"
|
|
@ -26,13 +26,16 @@
|
|||
# exit on any error
|
||||
#set -e
|
||||
|
||||
version=$(git describe)
|
||||
|
||||
# Manpage and HTML
|
||||
A2XM="a2x -f manpage --no-xmllint"
|
||||
A2XH="a2x -f xhtml --no-xmllint"
|
||||
A2XM="a2x -f manpage --no-xmllint -a encoding=UTF-8"
|
||||
A2XH="a2x -f xhtml --no-xmllint -a encoding=UTF-8"
|
||||
|
||||
# Developer webbase
|
||||
WEBDIR=$HOME/niconetz
|
||||
WEBBASE=software/cdist
|
||||
WEBBASE=$WEBDIR/software/cdist
|
||||
WEBMAN=$WEBBASE/man/$version
|
||||
WEBPAGE=${WEBBASE}.mdwn
|
||||
|
||||
# Documentation
|
||||
|
@ -88,29 +91,34 @@ case "$1" in
|
|||
speeches)
|
||||
cd "$SPEECHESDIR"
|
||||
for speech in *tex; do
|
||||
pdflatex $speech
|
||||
pdflatex $speech
|
||||
pdflatex $speech
|
||||
pdflatex "$speech"
|
||||
pdflatex "$speech"
|
||||
pdflatex "$speech"
|
||||
done
|
||||
;;
|
||||
|
||||
web)
|
||||
cp README ${WEBDIR}/${WEBPAGE}
|
||||
rm -rf ${WEBDIR}/${WEBBASE}/man && mkdir ${WEBDIR}/${WEBBASE}/man
|
||||
rm -rf ${WEBDIR}/${WEBBASE}/speeches && mkdir ${WEBDIR}/${WEBBASE}/speeches
|
||||
cp README ${WEBPAGE}
|
||||
rm -rf ${WEBMAN}
|
||||
mkdir -p ${WEBMAN}/man1 ${WEBMAN}/man7
|
||||
|
||||
cp ${MAN1DSTDIR}/*.html ${MAN7DSTDIR}/*.html ${WEBDIR}/${WEBBASE}/man
|
||||
cp ${SPEECHESDIR}/*.pdf ${WEBDIR}/${WEBBASE}/speeches
|
||||
# old stuff
|
||||
# rm -rf ${WEBDIR}/${WEBBASE}/speeches && mkdir ${WEBDIR}/${WEBBASE}/speeches
|
||||
# cp ${SPEECHESDIR}/*.pdf ${WEBDIR}/${WEBBASE}/speeches
|
||||
# git describe > ${WEBDIR}/${WEBBASE}/man/VERSION
|
||||
|
||||
cp ${MAN1DSTDIR}/*.html ${WEBMAN}/man1
|
||||
cp ${MAN7DSTDIR}/*.html ${WEBMAN}/man7
|
||||
|
||||
git describe > ${WEBDIR}/${WEBBASE}/man/VERSION
|
||||
cd ${WEBDIR} && git add ${WEBBASE}
|
||||
cd ${WEBDIR} && git commit -m "cdist update" ${WEBBASE} ${WEBPAGE}
|
||||
cd ${WEBDIR} && make pub
|
||||
;;
|
||||
|
||||
pub)
|
||||
p|pu|pub)
|
||||
git push --mirror
|
||||
git push --mirror github
|
||||
git push --mirror sf
|
||||
;;
|
||||
|
||||
clean)
|
||||
|
@ -123,14 +131,26 @@ case "$1" in
|
|||
| xargs rm -f
|
||||
;;
|
||||
|
||||
test)
|
||||
shift # skip t
|
||||
export PYTHONPATH=$PYTHONPATH:$(pwd -P)/lib
|
||||
|
||||
if [ $# -lt 1 ]; then
|
||||
python3 -m cdist.test
|
||||
else
|
||||
python3 -m unittest "$@"
|
||||
fi
|
||||
;;
|
||||
|
||||
*)
|
||||
echo ''
|
||||
echo 'Welcome to cdist!'
|
||||
echo ''
|
||||
echo 'Here are the possible targets:'
|
||||
echo ''
|
||||
echo ' man: Build manpages (requires Asciidoc)'
|
||||
echo ' clean: Remove build stuff'
|
||||
echo ' man: Build manpages (requires Asciidoc)'
|
||||
echo ' test: Run tests'
|
||||
echo ''
|
||||
echo ''
|
||||
echo "Unknown target, \"$1\"" >&2
|
26
conf/explorer/lsb_codename
Executable file
26
conf/explorer/lsb_codename
Executable file
|
@ -0,0 +1,26 @@
|
|||
#!/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/>.
|
||||
#
|
||||
#
|
||||
|
||||
set +e
|
||||
lsb_release=$(which lsb_release 2>/dev/null)
|
||||
if [ -x "$lsb_release" ]; then
|
||||
$lsb_release --short --codename
|
||||
fi
|
26
conf/explorer/lsb_description
Executable file
26
conf/explorer/lsb_description
Executable file
|
@ -0,0 +1,26 @@
|
|||
#!/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/>.
|
||||
#
|
||||
#
|
||||
|
||||
set +e
|
||||
lsb_release=$(which lsb_release 2>/dev/null)
|
||||
if [ -x "$lsb_release" ]; then
|
||||
$lsb_release --short --description
|
||||
fi
|
26
conf/explorer/lsb_id
Executable file
26
conf/explorer/lsb_id
Executable file
|
@ -0,0 +1,26 @@
|
|||
#!/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/>.
|
||||
#
|
||||
#
|
||||
|
||||
set +e
|
||||
lsb_release=$(which lsb_release 2>/dev/null)
|
||||
if [ -x "$lsb_release" ]; then
|
||||
$lsb_release --short --id
|
||||
fi
|
26
conf/explorer/lsb_release
Executable file
26
conf/explorer/lsb_release
Executable file
|
@ -0,0 +1,26 @@
|
|||
#!/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/>.
|
||||
#
|
||||
#
|
||||
|
||||
set +e
|
||||
lsb_release=$(which lsb_release 2>/dev/null)
|
||||
if [ -x "$lsb_release" ]; then
|
||||
$lsb_release --short --release
|
||||
fi
|
|
@ -49,7 +49,7 @@ if grep -q ^Fedora /etc/redhat-release 2>/dev/null; then
|
|||
exit 0
|
||||
fi
|
||||
|
||||
# CentOS is also based on Redhat, this return before redhat!
|
||||
# CentOS is also based on Redhat, thus return before redhat!
|
||||
if grep -q ^CentOS /etc/redhat-release 2>/dev/null; then
|
||||
echo centos
|
||||
exit 0
|
||||
|
@ -65,6 +65,16 @@ if [ -f /etc/SuSE-release ]; then
|
|||
exit 0
|
||||
fi
|
||||
|
||||
if [ -f /etc/owl-release ]; then
|
||||
echo owl
|
||||
exit 0
|
||||
fi
|
||||
|
||||
if [ -f /etc/cdist-preos ]; then
|
||||
echo cdist-preos
|
||||
exit 0
|
||||
fi
|
||||
|
||||
uname_s="$(uname -s)"
|
||||
|
||||
# Assume there is no tr on the client -> do lower case ourselves
|
||||
|
|
|
@ -42,6 +42,9 @@ case "$($__explorer/os)" in
|
|||
*bsd|solaris)
|
||||
uname -r
|
||||
;;
|
||||
owl)
|
||||
cat /etc/owl-release
|
||||
;;
|
||||
redhat|centos)
|
||||
cat /etc/redhat-release
|
||||
;;
|
||||
|
|
|
@ -1,6 +1,7 @@
|
|||
#!/bin/sh
|
||||
#
|
||||
# 2010-2011 Daniel Roth (dani-cdist@d-roth.li)
|
||||
# 2011 Nico Schottelius (nico-cdist at schottelius.org)
|
||||
#
|
||||
# This file is part of cdist.
|
||||
#
|
||||
|
@ -25,9 +26,18 @@ else
|
|||
file="/$__object_id"
|
||||
fi
|
||||
|
||||
regex=$(cat "$__object/parameter/line")
|
||||
if [ -f "$__object/parameter/regex" ]; then
|
||||
regex=$(cat "$__object/parameter/regex")
|
||||
else
|
||||
wrap=$(cat "$__object/parameter/line")
|
||||
regex="^$wrap\$"
|
||||
fi
|
||||
|
||||
if [ -f "$file" ]; then
|
||||
grep -q "^$regex\$" "$file"
|
||||
# sh -e is our environment, we know what we do,
|
||||
# skip error detection for now
|
||||
set +e
|
||||
grep -q "$regex" "$file"
|
||||
if [ $? -eq 1 ]; then
|
||||
echo "NOTFOUND"
|
||||
else
|
||||
|
|
|
@ -25,7 +25,9 @@ OPTIONAL PARAMETERS
|
|||
file::
|
||||
If supplied, use this as the destination file.
|
||||
Otherwise the object_id is used.
|
||||
|
||||
regex::
|
||||
If supplied, search for this regex.
|
||||
Otherwise entire line must be matched.
|
||||
|
||||
EXAMPLES
|
||||
--------
|
||||
|
|
|
@ -1 +1,2 @@
|
|||
file
|
||||
regex
|
||||
|
|
|
@ -27,4 +27,4 @@ require="__package/python-software-properties" \
|
|||
--source "$__type/files/remove-apt-repository" \
|
||||
--mode 0755
|
||||
|
||||
require="$__self" __apt_update_index
|
||||
require="$__object_name" __apt_update_index
|
||||
|
|
|
@ -38,5 +38,5 @@ if [ -f "$__object/parameter/comment" ]; then
|
|||
fi
|
||||
echo "$entry" >> "$__object/parameter/entry"
|
||||
|
||||
require="$__self" __autofs_master
|
||||
require="$__object_name" __autofs_master
|
||||
|
||||
|
|
|
@ -24,7 +24,7 @@ if [ ! -f "$__object/parameter/header" ]; then
|
|||
fi
|
||||
|
||||
[ -d "$__object/files" ] || mkdir "$__object/files"
|
||||
require="$__self" __file /etc/auto.master --source "$__object/files/auto.master" \
|
||||
require="$__object_name" __file /etc/auto.master --source "$__object/files/auto.master" \
|
||||
--mode 644 \
|
||||
--owner root \
|
||||
--group root
|
||||
|
|
37
conf/type/__cdistmarker/gencode-remote
Executable file
37
conf/type/__cdistmarker/gencode-remote
Executable file
|
@ -0,0 +1,37 @@
|
|||
#!/bin/sh
|
||||
#
|
||||
# Copyright (C) 2011 Daniel Maher (phrawzty+cdist at gmail.com)
|
||||
#
|
||||
# This file is part of cdist (https://github.com/telmich/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/>.
|
||||
#
|
||||
|
||||
# The marker file is established in the docs, but it isn't obligatory.
|
||||
if [ -f "$__object/parameter/destination" ]; then
|
||||
destination="$(cat "$__object/parameter/destination")"
|
||||
else
|
||||
destination='/etc/cdist-configured'
|
||||
fi
|
||||
|
||||
# The basic output of date is usually good enough, but variety is the
|
||||
# spice of life...
|
||||
if [ -f "$__object/parameter/format" ]; then
|
||||
format="$(cat "$__object/parameter/format")"
|
||||
else
|
||||
format='-u'
|
||||
fi
|
||||
|
||||
# Dump the timestamp in UTC to the marker
|
||||
echo "date $format > $destination"
|
55
conf/type/__cdistmarker/man.text
Normal file
55
conf/type/__cdistmarker/man.text
Normal file
|
@ -0,0 +1,55 @@
|
|||
cdist-type__cdistmarker(7)
|
||||
==========================
|
||||
Daniel Maher <phrawzty+cdist at gmail.com>
|
||||
|
||||
|
||||
NAME
|
||||
----
|
||||
cdist-type__cdistmarker - Add a timestamped cdist marker.
|
||||
|
||||
|
||||
DESCRIPTION
|
||||
-----------
|
||||
This type is used to add a common marker file which indicates that a given
|
||||
machine is being managed by cdist. The contents of this file consist of a
|
||||
timestamp, which can be used to determine the most recent time at which cdist
|
||||
was run against the machine in question.
|
||||
|
||||
|
||||
REQUIRED PARAMETERS
|
||||
-------------------
|
||||
None.
|
||||
|
||||
|
||||
OPTIONAL PARAMETERS
|
||||
-------------------
|
||||
destination::
|
||||
The path and filename of the marker.
|
||||
Default: /etc/cdist-configured
|
||||
|
||||
format::
|
||||
The format of the timestamp. This is passed directly to system 'date'.
|
||||
Default: -u
|
||||
|
||||
|
||||
EXAMPLES
|
||||
--------
|
||||
|
||||
--------------------------------------------------------------------------------
|
||||
# Creates the marker as normal.
|
||||
__cdistmarker
|
||||
|
||||
# Creates the marker differently.
|
||||
__cdistmarker --file /tmp/cdist_marker --format '+%s'
|
||||
--------------------------------------------------------------------------------
|
||||
|
||||
|
||||
SEE ALSO
|
||||
--------
|
||||
- cdist-type(7)
|
||||
|
||||
|
||||
COPYING
|
||||
-------
|
||||
Copyright \(C) 2011 Daniel Maher. Free use of this software is granted under
|
||||
the terms of the GNU General Public License version 3 (GPLv3).
|
2
conf/type/__cdistmarker/parameter/optional
Normal file
2
conf/type/__cdistmarker/parameter/optional
Normal file
|
@ -0,0 +1,2 @@
|
|||
destination
|
||||
format
|
0
conf/type/__cdistmarker/singleton
Normal file
0
conf/type/__cdistmarker/singleton
Normal file
39
conf/type/__cron/explorer/entry
Executable file
39
conf/type/__cron/explorer/entry
Executable file
|
@ -0,0 +1,39 @@
|
|||
#!/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/>.
|
||||
#
|
||||
|
||||
name="$__object_id"
|
||||
user="$(cat "$__object/parameter/user")"
|
||||
|
||||
prefix="#cdist:__cron/$name"
|
||||
suffix="#/cdist:__cron/$name"
|
||||
|
||||
crontab -u $user -l | awk -v prefix="$prefix" -v suffix="$suffix" '
|
||||
{
|
||||
if (index($0,prefix)) {
|
||||
triggered=1
|
||||
}
|
||||
if (triggered) {
|
||||
if (index($0,suffix)) {
|
||||
triggered=0
|
||||
}
|
||||
print
|
||||
}
|
||||
}
|
||||
'
|
63
conf/type/__cron/gencode-remote
Executable file
63
conf/type/__cron/gencode-remote
Executable file
|
@ -0,0 +1,63 @@
|
|||
#!/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/>.
|
||||
#
|
||||
|
||||
user="$(cat "$__object/parameter/user")"
|
||||
state_should="$(cat "$__object/parameter/state")"
|
||||
state_is=$(diff -q "$__object/parameter/entry" "$__object/explorer/entry" \
|
||||
&& echo present \
|
||||
|| echo absent
|
||||
)
|
||||
|
||||
if [ "$state_is" != "$state_should" ]; then
|
||||
case "$state_should" in
|
||||
present)
|
||||
cat << DONE
|
||||
tmp=\$(mktemp)
|
||||
crontab -u $user -l > \$tmp
|
||||
cat >> \$tmp << EOC
|
||||
$(cat "$__object/parameter/entry")"
|
||||
EOC
|
||||
crontab -u $user \$tmp
|
||||
rm \$tmp
|
||||
DONE
|
||||
;;
|
||||
absent)
|
||||
# defined in type manifest
|
||||
prefix="$(cat "$__object/parameter/prefix")"
|
||||
suffix="$(cat "$__object/parameter/suffix")"
|
||||
cat << DONE
|
||||
crontab -u $user -l | awk -v prefix="$prefix" -v suffix="$suffix" '
|
||||
{
|
||||
if (index(\$0,prefix)) {
|
||||
triggered=1
|
||||
}
|
||||
if (triggered) {
|
||||
if (index(\$0,suffix)) {
|
||||
triggered=0
|
||||
}
|
||||
} else {
|
||||
print
|
||||
}
|
||||
}
|
||||
' | crontab -u $user -
|
||||
DONE
|
||||
;;
|
||||
esac
|
||||
fi
|
61
conf/type/__cron/man.text
Normal file
61
conf/type/__cron/man.text
Normal file
|
@ -0,0 +1,61 @@
|
|||
cdist-type__cron(7)
|
||||
===================
|
||||
Steven Armstrong <steven-cdist--@--armstrong.cc>
|
||||
|
||||
|
||||
NAME
|
||||
----
|
||||
cdist-type__cron - installs and manages cron jobs
|
||||
|
||||
|
||||
DESCRIPTION
|
||||
-----------
|
||||
This cdist type allows you to manage entries in a users crontab.
|
||||
|
||||
|
||||
REQUIRED PARAMETERS
|
||||
-------------------
|
||||
user::
|
||||
The user who's crontab is edited
|
||||
command::
|
||||
The command to run.
|
||||
|
||||
|
||||
OPTIONAL PARAMETERS
|
||||
-------------------
|
||||
state::
|
||||
Either present or absent. Defaults to present.
|
||||
minute::
|
||||
See crontab(5). Defaults to *
|
||||
hour::
|
||||
See crontab(5). Defaults to *
|
||||
day_of_month::
|
||||
See crontab(5). Defaults to *
|
||||
month::
|
||||
See crontab(5). Defaults to *
|
||||
day_of_week::
|
||||
See crontab(5). Defaults to *
|
||||
|
||||
|
||||
EXAMPLES
|
||||
--------
|
||||
|
||||
--------------------------------------------------------------------------------
|
||||
# add cronjob
|
||||
__cron some-id --user root --command "/path/to/script"
|
||||
|
||||
# remove cronjob
|
||||
__cron some-id --user root --command "/path/to/script" --state absent
|
||||
--------------------------------------------------------------------------------
|
||||
|
||||
|
||||
SEE ALSO
|
||||
--------
|
||||
- cdist-type(7)
|
||||
- crontab(5)
|
||||
|
||||
|
||||
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).
|
66
conf/type/__cron/manifest
Executable file
66
conf/type/__cron/manifest
Executable file
|
@ -0,0 +1,66 @@
|
|||
#!/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/>.
|
||||
#
|
||||
|
||||
name="$__object_id"
|
||||
user="$(cat "$__object/parameter/user")"
|
||||
command="$(cat "$__object/parameter/command")"
|
||||
|
||||
# set defaults
|
||||
if [ ! -f "$__object/parameter/state" ]; then
|
||||
echo "present" > "$__object/parameter/state"
|
||||
fi
|
||||
if [ -f "$__object/parameter/minute" ]; then
|
||||
minute="$(cat "$__object/parameter/minute")"
|
||||
else
|
||||
minute="*"
|
||||
echo "$minute" > "$__object/parameter/minute"
|
||||
fi
|
||||
if [ -f "$__object/parameter/hour" ]; then
|
||||
hour="$(cat "$__object/parameter/hour")"
|
||||
else
|
||||
hour="*"
|
||||
echo "$hour" > "$__object/parameter/hour"
|
||||
fi
|
||||
if [ -f "$__object/parameter/day_of_month" ]; then
|
||||
day_of_month="$(cat "$__object/parameter/day_of_month")"
|
||||
else
|
||||
day_of_month="*"
|
||||
echo "$day_of_month" > "$__object/parameter/day_of_month"
|
||||
fi
|
||||
if [ -f "$__object/parameter/month" ]; then
|
||||
month="$(cat "$__object/parameter/month")"
|
||||
else
|
||||
month="*"
|
||||
echo "$month" > "$__object/parameter/month"
|
||||
fi
|
||||
if [ -f "$__object/parameter/day_of_week" ]; then
|
||||
day_of_week="$(cat "$__object/parameter/day_of_week")"
|
||||
else
|
||||
day_of_week="*"
|
||||
echo "$day_of_week" > "$__object/parameter/day_of_week"
|
||||
fi
|
||||
|
||||
# NOTE: if changed, also change in explorers
|
||||
prefix="#cdist:__cron/$name"
|
||||
suffix="#/cdist:__cron/$name"
|
||||
echo "$prefix" | tee "$__object/parameter/prefix" > "$__object/parameter/entry"
|
||||
echo "$minute $hour $day_of_month $month $day_of_week $command" >> "$__object/parameter/entry"
|
||||
echo "$suffix" | tee "$__object/parameter/suffix" >> "$__object/parameter/entry"
|
||||
|
6
conf/type/__cron/parameter/optional
Normal file
6
conf/type/__cron/parameter/optional
Normal file
|
@ -0,0 +1,6 @@
|
|||
state
|
||||
minute
|
||||
hour
|
||||
day_of_month
|
||||
month
|
||||
day_of_week
|
2
conf/type/__cron/parameter/required
Normal file
2
conf/type/__cron/parameter/required
Normal file
|
@ -0,0 +1,2 @@
|
|||
user
|
||||
command
|
38
conf/type/__mkfs/gencode-remote
Executable file
38
conf/type/__mkfs/gencode-remote
Executable file
|
@ -0,0 +1,38 @@
|
|||
#!/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/>.
|
||||
#
|
||||
|
||||
device="$(cat "$__object/parameter/device")"
|
||||
type="$(cat "$__object/parameter/type")"
|
||||
|
||||
if [ "$type" = "swap" ]; then
|
||||
echo "mkswap $device"
|
||||
else
|
||||
command="mkfs -t $type -q"
|
||||
if [ -f "$__object/parameter/options" ]; then
|
||||
options="$(cat "$__object/parameter/options")"
|
||||
command="$command $options"
|
||||
fi
|
||||
command="$command $device"
|
||||
if [ -f "$__object/parameter/blocks" ]; then
|
||||
blocks="$(cat "$__object/parameter/blocks")"
|
||||
command="$command $blocks"
|
||||
fi
|
||||
echo "$command"
|
||||
fi
|
0
conf/type/__mkfs/install
Normal file
0
conf/type/__mkfs/install
Normal file
57
conf/type/__mkfs/man.text
Normal file
57
conf/type/__mkfs/man.text
Normal file
|
@ -0,0 +1,57 @@
|
|||
cdist-type__mkfs(7)
|
||||
===================
|
||||
Steven Armstrong <steven-cdist--@--armstrong.cc>
|
||||
|
||||
|
||||
NAME
|
||||
----
|
||||
cdist-type__mkfs - build a linux file system
|
||||
|
||||
|
||||
DESCRIPTION
|
||||
-----------
|
||||
This cdist type is a wrapper for the mkfs command.
|
||||
|
||||
|
||||
REQUIRED PARAMETERS
|
||||
-------------------
|
||||
type::
|
||||
The filesystem type to use. Same as mkfs -t.
|
||||
|
||||
|
||||
OPTIONAL PARAMETERS
|
||||
-------------------
|
||||
device::
|
||||
defaults to object_id
|
||||
|
||||
options::
|
||||
file system-specific options to be passed to the mkfs command
|
||||
|
||||
blocks::
|
||||
the number of blocks to be used for the file system
|
||||
|
||||
|
||||
EXAMPLES
|
||||
--------
|
||||
|
||||
--------------------------------------------------------------------------------
|
||||
# reiserfs /dev/sda5
|
||||
__mkfs /dev/sda5 --type reiserfs
|
||||
# same thing with explicit device
|
||||
__mkfs whatever --device /dev/sda5 --type reiserfs
|
||||
|
||||
# jfs with journal on /dev/sda2
|
||||
__mkfs /dev/sda1 --type jfs --options "-j /dev/sda2"
|
||||
--------------------------------------------------------------------------------
|
||||
|
||||
|
||||
SEE ALSO
|
||||
--------
|
||||
- cdist-type(7)
|
||||
- mkfs(8)
|
||||
|
||||
|
||||
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).
|
31
conf/type/__mkfs/manifest
Executable file
31
conf/type/__mkfs/manifest
Executable file
|
@ -0,0 +1,31 @@
|
|||
#!/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/>.
|
||||
#
|
||||
|
||||
# set defaults
|
||||
if [ -f "$__object/parameter/device" ]; then
|
||||
device="(cat "$__object/parameter/device")"
|
||||
else
|
||||
device="/$__object_id"
|
||||
echo "$device" > "$__object/parameter/device"
|
||||
fi
|
||||
|
||||
type="(cat "$__object/parameter/type")"
|
||||
|
||||
options="(cat "$__object/parameter/options")"
|
3
conf/type/__mkfs/parameter/optional
Normal file
3
conf/type/__mkfs/parameter/optional
Normal file
|
@ -0,0 +1,3 @@
|
|||
device
|
||||
options
|
||||
blocks
|
1
conf/type/__mkfs/parameter/required
Normal file
1
conf/type/__mkfs/parameter/required
Normal file
|
@ -0,0 +1 @@
|
|||
type
|
|
@ -49,4 +49,4 @@ for property in $(ls .); do
|
|||
fi
|
||||
done
|
||||
|
||||
require="$__self" __package_$type "$@"
|
||||
require="$__object_name" __package_$type "$@"
|
||||
|
|
|
@ -27,13 +27,6 @@ else
|
|||
name="$__object_id"
|
||||
fi
|
||||
|
||||
# Check for preseeding and add preseed as here document
|
||||
if [ -f "$__object/parameter/preseed" ]; then
|
||||
echo "debconf-set-selections << __file-eof"
|
||||
cat "$(cat "$__object/parameter/preseed")"
|
||||
echo "__file-eof"
|
||||
fi
|
||||
|
||||
state="$(cat "$__object/parameter/state")"
|
||||
is_installed="$(grep "^Status: install ok installed" "$__object/explorer/pkg_status" || true)"
|
||||
|
||||
|
|
31
conf/type/__package_luarocks/explorer/pkg_status
Executable file
31
conf/type/__package_luarocks/explorer/pkg_status
Executable file
|
@ -0,0 +1,31 @@
|
|||
#!/bin/sh
|
||||
#
|
||||
# 2012 SwellPath, Inc.
|
||||
# Christian G. Warden <cwarden@xerus.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/>.
|
||||
#
|
||||
# Retrieve the status of a rock
|
||||
#
|
||||
|
||||
if [ -f "$__object/parameter/name" ]; then
|
||||
name="$(cat "$__object/parameter/name")"
|
||||
else
|
||||
name="$__object_id"
|
||||
fi
|
||||
|
||||
# Accept luarocks failing if package is not known/installed
|
||||
luarocks list "$name" | egrep -A1 "^$name$" || exit 0
|
52
conf/type/__package_luarocks/gencode-remote
Executable file
52
conf/type/__package_luarocks/gencode-remote
Executable file
|
@ -0,0 +1,52 @@
|
|||
#!/bin/sh
|
||||
#
|
||||
# 2012 SwellPath, Inc.
|
||||
# Christian G. Warden <cwarden@xerus.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/>.
|
||||
#
|
||||
#
|
||||
# Manage LuaRocks packages
|
||||
#
|
||||
|
||||
|
||||
if [ -f "$__object/parameter/name" ]; then
|
||||
name="$(cat "$__object/parameter/name")"
|
||||
else
|
||||
name="$__object_id"
|
||||
fi
|
||||
|
||||
state="$(cat "$__object/parameter/state")"
|
||||
is_installed="$(grep "(installed)" "$__object/explorer/pkg_status" || true)"
|
||||
|
||||
case "$state" in
|
||||
installed)
|
||||
# Install only if non-existent
|
||||
if [ -z "$is_installed" ]; then
|
||||
echo luarocks install \"$name\"
|
||||
fi
|
||||
;;
|
||||
removed)
|
||||
# Remove only if existent
|
||||
if [ -n "$is_installed" ]; then
|
||||
echo luarocks remove \"$name\"
|
||||
fi
|
||||
;;
|
||||
*)
|
||||
echo "Unknown state: $state" >&2
|
||||
exit 1
|
||||
;;
|
||||
esac
|
49
conf/type/__package_luarocks/man.text
Normal file
49
conf/type/__package_luarocks/man.text
Normal file
|
@ -0,0 +1,49 @@
|
|||
cdist-type__package_luarocks(7)
|
||||
==============================
|
||||
Christian G. Warden <cwarden@xerus.org>
|
||||
|
||||
|
||||
NAME
|
||||
----
|
||||
cdist-type__package_luarocks - Manage luarocks packages
|
||||
|
||||
|
||||
DESCRIPTION
|
||||
-----------
|
||||
LuaRocks is a deployment and management system for Lua modules.
|
||||
|
||||
|
||||
REQUIRED PARAMETERS
|
||||
-------------------
|
||||
state::
|
||||
Either "installed" or "removed".
|
||||
|
||||
|
||||
OPTIONAL PARAMETERS
|
||||
-------------------
|
||||
name::
|
||||
If supplied, use the name and not the object id as the package name.
|
||||
|
||||
|
||||
EXAMPLES
|
||||
--------
|
||||
|
||||
--------------------------------------------------------------------------------
|
||||
# Ensure luasocket is installed
|
||||
__package_luarocks luasocket --state installed
|
||||
|
||||
# Remove package
|
||||
__package_luarocks luasocket --state removed
|
||||
--------------------------------------------------------------------------------
|
||||
|
||||
|
||||
SEE ALSO
|
||||
--------
|
||||
- cdist-type(7)
|
||||
- cdist-type__package(7)
|
||||
|
||||
|
||||
COPYING
|
||||
-------
|
||||
Copyright \(C) 2012 SwellPath, Inc. Free use of this software is
|
||||
granted under the terms of the GNU General Public License version 3 (GPLv3).
|
23
conf/type/__package_luarocks/manifest
Normal file
23
conf/type/__package_luarocks/manifest
Normal file
|
@ -0,0 +1,23 @@
|
|||
#!/bin/sh
|
||||
#
|
||||
# 2012 SwellPath, Inc.
|
||||
# Christian G. Warden <cwarden@xerus.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/>.
|
||||
#
|
||||
|
||||
__package luarocks --state installed
|
||||
__package make --state installed
|
1
conf/type/__package_luarocks/parameter/optional
Normal file
1
conf/type/__package_luarocks/parameter/optional
Normal file
|
@ -0,0 +1 @@
|
|||
name
|
1
conf/type/__package_luarocks/parameter/required
Normal file
1
conf/type/__package_luarocks/parameter/required
Normal file
|
@ -0,0 +1 @@
|
|||
state
|
30
conf/type/__package_rubygem/explorer/pkg_status
Executable file
30
conf/type/__package_rubygem/explorer/pkg_status
Executable file
|
@ -0,0 +1,30 @@
|
|||
#!/bin/sh
|
||||
#
|
||||
# 2011 Chase Allen James (nx-cdist@nu-ex.com)
|
||||
#
|
||||
# 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/>.
|
||||
#
|
||||
# Retrieve the status of a rubygem
|
||||
#
|
||||
|
||||
if [ -f "$__object/parameter/name" ]; then
|
||||
name="$(cat "$__object/parameter/name")"
|
||||
else
|
||||
name="$__object_id"
|
||||
fi
|
||||
|
||||
# Except gem failing, if package is not known / installed
|
||||
gem list -i "$name" 2>/dev/null || exit 0
|
51
conf/type/__package_rubygem/gencode-remote
Executable file
51
conf/type/__package_rubygem/gencode-remote
Executable file
|
@ -0,0 +1,51 @@
|
|||
#!/bin/sh
|
||||
#
|
||||
# 2011 Chase Allen James <nx-cdist@nu-ex.com>
|
||||
#
|
||||
# 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/>.
|
||||
#
|
||||
#
|
||||
# Manage Rubygem packages
|
||||
#
|
||||
|
||||
|
||||
if [ -f "$__object/parameter/name" ]; then
|
||||
name="$(cat "$__object/parameter/name")"
|
||||
else
|
||||
name="$__object_id"
|
||||
fi
|
||||
|
||||
state="$(cat "$__object/parameter/state")"
|
||||
is_installed="$(grep "true" "$__object/explorer/pkg_status" || true)"
|
||||
|
||||
case "$state" in
|
||||
installed)
|
||||
# Install only if non-existent
|
||||
if [ -z "$is_installed" ]; then
|
||||
echo gem install \"$name\" --no-ri --no-rdoc
|
||||
fi
|
||||
;;
|
||||
removed)
|
||||
# Remove only if existent
|
||||
if [ -n "$is_installed" ]; then
|
||||
echo gem uninstall \"$name\"
|
||||
fi
|
||||
;;
|
||||
*)
|
||||
echo "Unknown state: $state" >&2
|
||||
exit 1
|
||||
;;
|
||||
esac
|
49
conf/type/__package_rubygem/man.text
Normal file
49
conf/type/__package_rubygem/man.text
Normal file
|
@ -0,0 +1,49 @@
|
|||
cdist-type__package_rubygem(7)
|
||||
==============================
|
||||
Chase Allen James <nx-cdist@nu-ex.com>
|
||||
|
||||
|
||||
NAME
|
||||
----
|
||||
cdist-type__package_rubygem - Manage rubygem packages
|
||||
|
||||
|
||||
DESCRIPTION
|
||||
-----------
|
||||
Rubygems is the default package management system for the Ruby programming language.
|
||||
|
||||
|
||||
REQUIRED PARAMETERS
|
||||
-------------------
|
||||
state::
|
||||
Either "installed" or "removed".
|
||||
|
||||
|
||||
OPTIONAL PARAMETERS
|
||||
-------------------
|
||||
name::
|
||||
If supplied, use the name and not the object id as the package name.
|
||||
|
||||
|
||||
EXAMPLES
|
||||
--------
|
||||
|
||||
--------------------------------------------------------------------------------
|
||||
# Ensure sinatra is installed
|
||||
__package_rubygem sinatra --state installed
|
||||
|
||||
# Remove package
|
||||
__package_rubygem rails --state removed
|
||||
--------------------------------------------------------------------------------
|
||||
|
||||
|
||||
SEE ALSO
|
||||
--------
|
||||
- cdist-type(7)
|
||||
- cdist-type__package(7)
|
||||
|
||||
|
||||
COPYING
|
||||
-------
|
||||
Copyright \(C) 2011 Chase Allen James. Free use of this software is
|
||||
granted under the terms of the GNU General Public License version 3 (GPLv3).
|
1
conf/type/__package_rubygem/parameter/optional
Normal file
1
conf/type/__package_rubygem/parameter/optional
Normal file
|
@ -0,0 +1 @@
|
|||
name
|
1
conf/type/__package_rubygem/parameter/required
Normal file
1
conf/type/__package_rubygem/parameter/required
Normal file
|
@ -0,0 +1 @@
|
|||
state
|
0
conf/type/__partition_msdos/install
Normal file
0
conf/type/__partition_msdos/install
Normal file
62
conf/type/__partition_msdos/man.text
Normal file
62
conf/type/__partition_msdos/man.text
Normal file
|
@ -0,0 +1,62 @@
|
|||
cdist-type__partition_msdos(7)
|
||||
==============================
|
||||
Steven Armstrong <steven-cdist--@--armstrong.cc>
|
||||
|
||||
|
||||
NAME
|
||||
----
|
||||
cdist-type__partition_msdos - creates msdos partitions
|
||||
|
||||
|
||||
DESCRIPTION
|
||||
-----------
|
||||
This cdist type allows you to create msdos paritions.
|
||||
|
||||
|
||||
REQUIRED PARAMETERS
|
||||
-------------------
|
||||
type::
|
||||
the partition type used in fdisk (such as 82 or 83) or "extended"
|
||||
|
||||
|
||||
OPTIONAL PARAMETERS
|
||||
-------------------
|
||||
partition::
|
||||
defaults to object_id
|
||||
bootable::
|
||||
mark partition as bootable, true or false, defaults to false
|
||||
size::
|
||||
the size of the partition (such as 32M or 15G, whole numbers
|
||||
only), '+' for remaining space, or 'n%' for percentage of remaining
|
||||
(these should only be used after all specific partition sizes are
|
||||
specified). Defaults to +.
|
||||
|
||||
|
||||
EXAMPLES
|
||||
--------
|
||||
|
||||
--------------------------------------------------------------------------------
|
||||
# 128MB, linux, bootable
|
||||
__partition_msdos /dev/sda1 --type 83 --size 128M --bootable true
|
||||
# 512MB, swap
|
||||
__partition_msdos /dev/sda2 --type 82 --size 512M
|
||||
# 100GB, extended
|
||||
__partition_msdos /dev/sda3 --type extended --size 100G
|
||||
# 10GB, linux
|
||||
__partition_msdos /dev/sda5 --type 83 --size 10G
|
||||
# 50% of the free space of the extended partition, linux
|
||||
__partition_msdos /dev/sda6 --type 83 --size 50%
|
||||
# rest of the extended partition, linux
|
||||
__partition_msdos /dev/sda7 --type 83 --size +
|
||||
--------------------------------------------------------------------------------
|
||||
|
||||
|
||||
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).
|
41
conf/type/__partition_msdos/manifest
Executable file
41
conf/type/__partition_msdos/manifest
Executable file
|
@ -0,0 +1,41 @@
|
|||
#!/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/>.
|
||||
#
|
||||
|
||||
# set defaults
|
||||
if [ -f "$__object/parameter/partition" ]; then
|
||||
partition="(cat "$__object/parameter/partition")"
|
||||
else
|
||||
partition="/$__object_id"
|
||||
echo "$partition" > "$__object/parameter/partition"
|
||||
fi
|
||||
device="$(echo "$partition" | sed 's/[0-9]//g')"
|
||||
echo "$device" > "$__object/parameter/device"
|
||||
minor="$(echo "$partition" | sed 's/[^0-9]//g')"
|
||||
echo "$minor" > "$__object/parameter/minor"
|
||||
|
||||
if [ ! -f "$__object/parameter/bootable" ]; then
|
||||
echo "false" > "$__object/parameter/bootable"
|
||||
fi
|
||||
if [ ! -f "$__object/parameter/size" ]; then
|
||||
echo "+" > "$__object/parameter/size"
|
||||
fi
|
||||
|
||||
# pull in the type that actually does something with the above parameters
|
||||
require="$__object_name" __partition_msdos_apply
|
3
conf/type/__partition_msdos/parameter/optional
Normal file
3
conf/type/__partition_msdos/parameter/optional
Normal file
|
@ -0,0 +1,3 @@
|
|||
partition
|
||||
bootable
|
||||
size
|
1
conf/type/__partition_msdos/parameter/required
Normal file
1
conf/type/__partition_msdos/parameter/required
Normal file
|
@ -0,0 +1 @@
|
|||
type
|
3
conf/type/__partition_msdos_apply/explorer/partitions
Executable file
3
conf/type/__partition_msdos_apply/explorer/partitions
Executable file
|
@ -0,0 +1,3 @@
|
|||
#!/bin/sh
|
||||
|
||||
cat /proc/partitions
|
61
conf/type/__partition_msdos_apply/files/lib.sh
Normal file
61
conf/type/__partition_msdos_apply/files/lib.sh
Normal file
|
@ -0,0 +1,61 @@
|
|||
die() {
|
||||
echo "[__partition_msdos_apply] $@" >&2
|
||||
exit 1
|
||||
}
|
||||
debug() {
|
||||
#echo "[__partition_msdos_apply] $@" >&2
|
||||
:
|
||||
}
|
||||
|
||||
fdisk_command() {
|
||||
local device="$1"
|
||||
local cmd="$2"
|
||||
|
||||
debug fdisk_command "running fdisk command '${cmd}' on device ${device}"
|
||||
printf "${cmd}\nw\n" | fdisk -c -u "$device"
|
||||
# give disk some time
|
||||
sleep 1
|
||||
return $?
|
||||
}
|
||||
|
||||
create_disklabel() {
|
||||
local device=$1
|
||||
|
||||
debug create_disklabel "creating new msdos disklabel"
|
||||
fdisk_command ${device} "o"
|
||||
return $?
|
||||
}
|
||||
|
||||
create_partition() {
|
||||
local device="$1"
|
||||
local minor="$2"
|
||||
local size="$3"
|
||||
local type="$4"
|
||||
local primary_count="$5"
|
||||
|
||||
if [ "$type" = "extended" -o "$type" = "5" ]; then
|
||||
# Extended partition
|
||||
primary_extended="e\n"
|
||||
first_minor="${minor}\n"
|
||||
[ "${minor}" = "4" ] && first_minor=""
|
||||
type_minor="${minor}\n"
|
||||
[ "${minor}" = "1" ] && type_minor=""
|
||||
type="5"
|
||||
elif [ "${minor}" -lt "5" ]; then
|
||||
primary_extended="p\n"
|
||||
first_minor="${minor}\n"
|
||||
[ "${minor}" = "4" ] && first_minor=""
|
||||
type_minor="${minor}\n"
|
||||
[ "${minor}" = "1" ] && type_minor=""
|
||||
else
|
||||
# Logical partitions
|
||||
first_minor="${minor}\n"
|
||||
type_minor="${minor}\n"
|
||||
primary_extended="l\n"
|
||||
[ "$primary_count" -gt "3" ] && primary_extended=""
|
||||
fi
|
||||
[ -n "${size}" ] && size="+${size}M"
|
||||
fdisk_command ${device} "n\n${primary_extended}${first_minor}\n${size}\nt\n${type_minor}${type}\n"
|
||||
return $?
|
||||
}
|
||||
|
138
conf/type/__partition_msdos_apply/gencode-remote
Executable file
138
conf/type/__partition_msdos_apply/gencode-remote
Executable file
|
@ -0,0 +1,138 @@
|
|||
#!/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/>.
|
||||
#
|
||||
|
||||
die() {
|
||||
echo "[__partition_msdos_apply] $@" >&2
|
||||
exit 1
|
||||
}
|
||||
debug() {
|
||||
#echo "[__partition_msdos_apply] $@" >&2
|
||||
:
|
||||
}
|
||||
|
||||
# Convert a size specifier 1G 100M or 50% into the corresponding numeric MB.
|
||||
size_to_mb() {
|
||||
local size=$1
|
||||
local available_size="$2"
|
||||
|
||||
local number_suffix="$(echo ${size} | sed -e 's:\.[0-9]\+::' -e 's:\([0-9]\+\)\([MmGg%]\)[Bb]\?:\1|\2:')"
|
||||
local number="$(echo ${number_suffix} | cut -d '|' -f1)"
|
||||
local suffix="$(echo ${number_suffix} | cut -d '|' -f2)"
|
||||
|
||||
case "$suffix" in
|
||||
M|m)
|
||||
size="$number"
|
||||
;;
|
||||
G|g)
|
||||
size="$(( $number * 1024 ))"
|
||||
;;
|
||||
%)
|
||||
size="$(( $available_size * $number / 100 ))"
|
||||
;;
|
||||
*)
|
||||
size="-1"
|
||||
esac
|
||||
echo "$size"
|
||||
}
|
||||
|
||||
# include function library for use on target
|
||||
cat "$__type/files/lib.sh"
|
||||
|
||||
partitions="$__object/explorer/partitions"
|
||||
objects=$(find "$__global/object/__partition_msdos" -path "*.cdist")
|
||||
current_device=""
|
||||
available_device_size=
|
||||
available_extended_size=
|
||||
available_size=
|
||||
primary_count=0
|
||||
for object in $objects; do
|
||||
device="$(cat "$object/parameter/device")"
|
||||
if [ "$current_device" != "$device" ]; then
|
||||
echo "create_disklabel \"$device\" || die 'Failed to create disklabel for $device'"
|
||||
current_device="$device"
|
||||
device_name=$(echo ${device} | sed -e 's:^/dev/::;s:/:\\/:g')
|
||||
available_device_size=$(( $(awk "/${device_name}\$/ { print \$3; }" "$partitions") / 1024))
|
||||
# make sure we don't go past the end of the drive
|
||||
available_device_size=$((available_device_size - 2))
|
||||
available_extended_size=0
|
||||
primary_count=0
|
||||
debug "----- $device"
|
||||
debug "current_device=$current_device"
|
||||
debug "available_device_size=$available_device_size"
|
||||
fi
|
||||
|
||||
type="$(cat "$object/parameter/type")"
|
||||
partition="$(cat "$object/parameter/partition")"
|
||||
minor="$(cat "$object/parameter/minor")"
|
||||
|
||||
bootable="$(cat "$object/parameter/bootable")"
|
||||
size="$(cat "$object/parameter/size")"
|
||||
|
||||
|
||||
if [ "${minor}" -lt "5" ]; then
|
||||
# Primary partitions
|
||||
primary_count=$(( $primary_count + 1 ))
|
||||
available_size=$available_device_size
|
||||
else
|
||||
# Logical partitions
|
||||
available_size=$available_extended_size
|
||||
fi
|
||||
|
||||
if [ "$size" = "+" ]; then
|
||||
# use rest of device
|
||||
partition_size=""
|
||||
available_size=0
|
||||
else
|
||||
partition_size=$(size_to_mb "$size" "$available_size")
|
||||
available_size="$(( $available_size - $partition_size ))"
|
||||
fi
|
||||
|
||||
if [ "${minor}" -lt "5" ]; then
|
||||
# Primary partitions
|
||||
available_device_size=$available_size
|
||||
if [ "$type" = "extended" -o "$type" = "5" ]; then
|
||||
# Extended partition
|
||||
available_extended_size=$partition_size
|
||||
fi
|
||||
else
|
||||
# Logical paritions
|
||||
available_extended_size=$available_size
|
||||
fi
|
||||
|
||||
[ "$partition_size" = "-1" ] && die "could not translate size '$size' to a usable value"
|
||||
debug "----- $partition"
|
||||
debug "primary_count=$primary_count"
|
||||
debug "current_device=$current_device"
|
||||
debug "device=$device"
|
||||
debug "type=$type"
|
||||
debug "partition=$partition"
|
||||
debug "minor=$minor"
|
||||
debug "bootable=$bootable"
|
||||
debug "size=$size"
|
||||
debug "partition_size=$partition_size"
|
||||
debug "available_size=$available_size"
|
||||
debug "available_device_size=$available_device_size"
|
||||
debug "available_extended_size=$available_extended_size"
|
||||
debug "----------"
|
||||
|
||||
echo "create_partition '$device' '$minor' '$partition_size' '$type' '$primary_count' \
|
||||
|| die 'Failed to create partition: $partition'"
|
||||
done
|
||||
|
0
conf/type/__partition_msdos_apply/install
Normal file
0
conf/type/__partition_msdos_apply/install
Normal file
42
conf/type/__partition_msdos_apply/man.text
Normal file
42
conf/type/__partition_msdos_apply/man.text
Normal file
|
@ -0,0 +1,42 @@
|
|||
cdist-type__partition_msdos_apply(7)
|
||||
====================================
|
||||
Steven Armstrong <steven-cdist--@--armstrong.cc>
|
||||
|
||||
|
||||
NAME
|
||||
----
|
||||
cdist-type__partition_msdos_apply - Apply dos partition settings
|
||||
|
||||
|
||||
DESCRIPTION
|
||||
-----------
|
||||
Create the partitions defined with __partition_msdos
|
||||
|
||||
|
||||
REQUIRED PARAMETERS
|
||||
-------------------
|
||||
None
|
||||
|
||||
|
||||
OPTIONAL PARAMETERS
|
||||
-------------------
|
||||
None.
|
||||
|
||||
|
||||
EXAMPLES
|
||||
--------
|
||||
|
||||
--------------------------------------------------------------------------------
|
||||
__partition_msdos_apply
|
||||
--------------------------------------------------------------------------------
|
||||
|
||||
|
||||
SEE ALSO
|
||||
--------
|
||||
- cdist-type(7)
|
||||
- cdist-type__partition_msdos_apply(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).
|
0
conf/type/__partition_msdos_apply/singleton
Normal file
0
conf/type/__partition_msdos_apply/singleton
Normal file
|
@ -24,7 +24,7 @@
|
|||
if [ -f "$__object/parameter/name" ]; then
|
||||
name="$(cat "$__object/parameter/name")"
|
||||
else
|
||||
name="/$__object_id"
|
||||
name="$__object_id"
|
||||
fi
|
||||
|
||||
pgrep -x -f "$name" || true
|
||||
|
|
|
@ -50,6 +50,10 @@ __process /usr/sbin/sshd --state stopped --stop "/etc/rc.d/sshd stop"
|
|||
# Ensure cups is running, which runs with -C ...:
|
||||
__process cups --start "/etc/rc.d/cups start" --state running \
|
||||
--name "/usr/sbin/cupsd -C /etc/cups/cupsd.conf"
|
||||
|
||||
# Ensure rpc.statd is running (which usually runs with -L) using a regexp
|
||||
__process rpcstatd --state running --start "/etc/init.d/statd start" \
|
||||
--name "rpc.statd.*"
|
||||
--------------------------------------------------------------------------------
|
||||
|
||||
|
||||
|
|
|
@ -55,7 +55,7 @@ if grep -q "^${name}:" "$__object/explorer/passwd"; then
|
|||
current_value="$(awk -F: '{ print $ENVIRON["field"] }' < "$file")"
|
||||
|
||||
if [ "$new_value" != "$current_value" ]; then
|
||||
set -- "$@" "--$property" \"$new_value\"
|
||||
set -- "$@" "--$property" \'$new_value\'
|
||||
fi
|
||||
done
|
||||
|
||||
|
@ -67,7 +67,7 @@ if grep -q "^${name}:" "$__object/explorer/passwd"; then
|
|||
else
|
||||
for property in $(ls .); do
|
||||
new_value="$(cat "$property")"
|
||||
set -- "$@" "--$property" \"$new_value\"
|
||||
set -- "$@" "--$property" \'$new_value\'
|
||||
done
|
||||
|
||||
echo useradd "$@" "$name"
|
||||
|
|
|
@ -1,4 +1,44 @@
|
|||
1.7.1:
|
||||
2.0.5:
|
||||
* New Type: __package_luarocks (Christian G. Warden)
|
||||
* Feature: __addifnosuchline supports matching on
|
||||
regular expressions (Daniel Maher)
|
||||
* Documentation: (Re)write of the tutorial
|
||||
* Cleanup: Explicitly require Python >= 3.2 (do not fail implicitly)
|
||||
|
||||
2.0.4: 2011-11-18
|
||||
* Bugfix core: Remove traceback when sending SIGINT (aka Ctrl-C)
|
||||
* Bugfix core: Accept parameters with - in the name (Steven Armstrong)
|
||||
* Cleanup: __object_fq variable removed (never used)
|
||||
* Cleanup: Environment variable __self DEPRECATED, use __object_name instead
|
||||
* Cleanup: Environment variable __self scheduled for removal in cdist 2.1
|
||||
* Documentation: Many examples for use of __remote_* (Steven Armstrong)
|
||||
* Feature: Automatically require all used objects (Steven Armstrong)
|
||||
* New Type: __cron (Steven Armstrong)
|
||||
|
||||
2.0.3: 2011-10-18
|
||||
* Improved logging, added --verbose, by more quiet by default
|
||||
* Bugfix __user: Correct quoting (Steven Armstrong)
|
||||
* Bugfix __addifnosuchline: Falsely exited
|
||||
* Bugfix requirements: Restore original require="" behaviour
|
||||
* Feature requirements: Check for broken object_ids and abort
|
||||
* Massive refactoring and unittesting introduced (Steven Armstrong)
|
||||
|
||||
2.0.2: 2011-09-27
|
||||
* Add support for detection of OpenWall Linux (Matthias Teege)
|
||||
* Add support for __debug variable in manifests
|
||||
* Bugfix core: Various issues with type emulator
|
||||
|
||||
2.0.1: 2011-09-23
|
||||
* Bugfix core: Always print source of error in case of exec errors
|
||||
* Bugfix core: Various smaller bugs in string concatenation
|
||||
* Feature: Add marker "changed" to changed objects
|
||||
|
||||
2.0.0: 2011-09-16
|
||||
* New Type: __package_rubygem (Chase Allen James)
|
||||
* __self replaced by __object_fq
|
||||
* Rewrote cdist in Python
|
||||
|
||||
1.7.1: 2011-07-26
|
||||
* Documentation: Add explorers to reference
|
||||
* Documentation: Typo cleanup (Derek Brost)
|
||||
* Type __key_value: Bugfix (Steven Armstrong)
|
||||
|
|
12
doc/dev/benchmark-parallel-deploy
Executable file
12
doc/dev/benchmark-parallel-deploy
Executable file
|
@ -0,0 +1,12 @@
|
|||
#!/bin/sh
|
||||
|
||||
outfile="$1"; shift
|
||||
|
||||
(
|
||||
for host in "$@"; do
|
||||
hosts="$hosts $host"
|
||||
cdist config -c ~/p/cdist-nutzung -p $hosts 2>&1
|
||||
done
|
||||
) | tee "$outfile"
|
||||
echo "----------"
|
||||
grep 'INFO: Total processing time for' "$outfile" | sed 's/.*: //'
|
7
doc/dev/fancy-ideas
Normal file
7
doc/dev/fancy-ideas
Normal file
|
@ -0,0 +1,7 @@
|
|||
== types with namespaces ==
|
||||
- allow types to have namespaces, e.g.
|
||||
__path/my/type
|
||||
implemented as a proof of concept at:
|
||||
https://github.com/asteven/cdist/tree/type-namespaces
|
||||
|
||||
|
24
doc/dev/lastchanges
Executable file
24
doc/dev/lastchanges
Executable file
|
@ -0,0 +1,24 @@
|
|||
#!/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/>.
|
||||
#
|
||||
#
|
||||
# Show the lastest changes from this (upcoming) release
|
||||
#
|
||||
|
||||
awk '/^$/ { exit } { print $0 } END { print "-----" }' < "${0%/*}/../changelog"
|
2
doc/dev/logs/2011-04-20.slashdot-articles
Normal file
2
doc/dev/logs/2011-04-20.slashdot-articles
Normal file
|
@ -0,0 +1,2 @@
|
|||
http://slashdot.org/submission/1533922/cdist-162---usable-configuration-management
|
||||
http://slashdot.org/submission/1522134/Cdist-Configuration-management-that-makes-fun#
|
7
doc/dev/logs/2011-04-21.benchmark-eth
Normal file
7
doc/dev/logs/2011-04-21.benchmark-eth
Normal file
|
@ -0,0 +1,7 @@
|
|||
cdist-mass-deploy -p ikq02.ethz.ch; 142
|
||||
cdist-mass-deploy -p ikq02.ethz.ch ikq03.ethz.ch; 194
|
||||
cdist-mass-deploy -p ikq02.ethz.ch ikq03.ethz.ch ikq04.ethz.ch; 271
|
||||
cdist-mass-deploy -p ikq02.ethz.ch ikq03.ethz.ch ikq04.ethz.ch ikq05.ethz.ch; 328
|
||||
cdist-mass-deploy -p ikq02.ethz.ch ikq03.ethz.ch ikq04.ethz.ch ikq05.ethz.ch ikq06.ethz.ch; 456
|
||||
cdist-mass-deploy -p ikq02.ethz.ch ikq03.ethz.ch ikq04.ethz.ch ikq05.ethz.ch ikq06.ethz.ch ikq07.ethz.ch; 568
|
||||
|
56
doc/dev/logs/2011-04-27.benchmark
Normal file
56
doc/dev/logs/2011-04-27.benchmark
Normal file
|
@ -0,0 +1,56 @@
|
|||
% x200
|
||||
data = [ 1 104; 2 129; 6 249 ; 25 1267 ]
|
||||
|
||||
% x201, 4.2.2.4 dns, eth
|
||||
data = [ 1 143; 2 159; 3 198; 4 244; 5 299; 6 350; 7 435; 8 429 ];
|
||||
|
||||
% x201, von zuhause aus
|
||||
data2 = [ 226 242 275 296 306 357 403 400 409 685 617 672 ]
|
||||
plot(0:size(data)(2)-1, data)
|
||||
|
||||
|
||||
hold off;
|
||||
plot(data(:,1), data(:,2))
|
||||
% per host time:
|
||||
data(:,2)' ./ data(:,1)'
|
||||
hold on;
|
||||
plot(data(:,1), data(:,2)' ./ data(:,1)')
|
||||
|
||||
|
||||
Testing on
|
||||
Intel(R) Core(TM)2 Duo CPU P8400 @ 2.26GHz
|
||||
4 GiB RAM
|
||||
Intel Gbit Nic
|
||||
|
||||
- 169 objects, all done (i.e. rerun)
|
||||
- runs are cpu bound
|
||||
|
||||
1 host:
|
||||
|
||||
core: cdist 1.6.2: Successfully finished run
|
||||
Run: 104s (1 minutes)
|
||||
|
||||
2 hosts:
|
||||
|
||||
[13:48] kr:cdist-nutzung% mytime cdist-mass-deploy -p ikq03.ethz.ch ikq04.ethz.ch
|
||||
Run: 129s (2 minutes)
|
||||
|
||||
6 hosts: (7 specified, but ikq01.ethz.ch is dead)
|
||||
cdist-mass-deploy -p ikq01.ethz.ch ikq02.ethz.ch ikq03.ethz.ch ikq04.ethz.ch ikq05.ethz.ch ikq06.ethz.ch ikq07.ethz.ch
|
||||
Run: 294s (4 minutes)
|
||||
|
||||
25 hosts
|
||||
|
||||
[13:58] kr:cdist-nutzung% mytime cdist-mass-deploy -p $(sed 's/^root@//' ~/.dsh/group/ikr)
|
||||
|
||||
Run: 723s (12 minutes)
|
||||
|
||||
|
||||
25 hosts without proxy command now:
|
||||
|
||||
Run: 1267s (21 minutes)
|
||||
Run: 1212s (20 minutes)
|
||||
|
||||
|
||||
[14:11] kr:cdist-nutzung% mytime cdist-mass-deploy -p $(sed 's/^root@//' ~/.dsh/group/ikr)
|
||||
|
9
doc/dev/logs/2011-04-27.benchmark.dash
Normal file
9
doc/dev/logs/2011-04-27.benchmark.dash
Normal file
|
@ -0,0 +1,9 @@
|
|||
Run: 78s (1 minutes)
|
||||
[13:25] kr:cdist-nutzung% mytime cdist-deploy-to ikq02.ethz.ch
|
||||
|
||||
% mit dash, eth, x201, Mit Apr 27 13:41:49 CEST 2011
|
||||
data = [ 0 73 77 89 107 130 151 180 197 228 251 260 199 295 335 276 ]
|
||||
plot(0:size(data2)(2)-1, data2)
|
||||
|
||||
|
||||
|
1725
doc/dev/logs/2011-04-27.debug-timing
Normal file
1725
doc/dev/logs/2011-04-27.debug-timing
Normal file
File diff suppressed because it is too large
Load diff
20
doc/dev/logs/2011-06-24.cinst_preos
Normal file
20
doc/dev/logs/2011-06-24.cinst_preos
Normal file
|
@ -0,0 +1,20 @@
|
|||
- new executable cinst-deploy-to
|
||||
- types used by cinst are marked as such ('cinst-only')
|
||||
- cdist-deploy-to and cinst-deploy-to read the same manifest
|
||||
- cdist ignores types marked as 'cinst-only'
|
||||
- cinst ignores types not marked as 'cinst-only'
|
||||
|
||||
- update $__explorer/os to recognize preos
|
||||
|
||||
- cinst types will ONLY BE CALLED if $__explorer/os == 'preos'
|
||||
|
||||
--------------------------------------------------------------------------------
|
||||
cinst types:
|
||||
__partition_msdos /dev/sda1 --type 83 --size 100M --bootable
|
||||
__partition_msdos /dev/sda2 --type 82 --size 512M
|
||||
__fs_jfs /dev/sda1 --args "-c -q"
|
||||
__fstab_entry /dev/sda1 --type jfs --mountpoint / --options noatime --freq 0 --passno 0
|
||||
__fstab_entry /dev/sda2 --type swap
|
||||
|
||||
|
||||
|
15
doc/dev/logs/2011-06-25.trigger-graphic
Normal file
15
doc/dev/logs/2011-06-25.trigger-graphic
Normal file
|
@ -0,0 +1,15 @@
|
|||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
client -------------------> trigger via ssh ----------> server
|
||||
~/.ssh/authorized_keys
|
||||
-> cdist-deploy-to <da-wo-ich-herkomme>
|
||||
|
||||
ssh -R
|
||||
|
||||
server -> via cdist-deploy-to -> client
|
||||
|
||||
cdist-mass-deploy -p <host a .. host b...>
|
4
doc/dev/logs/2011-09-08.obsolete_debugging
Normal file
4
doc/dev/logs/2011-09-08.obsolete_debugging
Normal file
|
@ -0,0 +1,4 @@
|
|||
Debugging cdist:
|
||||
|
||||
[0:13] kr:cdist-nutzung% ./local/update-local-core && __cdist_debug=1 __cdist_local_base_dir=/tmp/cdist cdist-deploy-to ikq04.ethz.ch
|
||||
|
110
doc/dev/logs/2011-09-12
Normal file
110
doc/dev/logs/2011-09-12
Normal file
|
@ -0,0 +1,110 @@
|
|||
Benchmark from home/X201 (2 cores, 4 threads):
|
||||
|
||||
ikq (1): 72.192397
|
||||
ikq (2): INFO: Total processing time for 2 hosts: 74.1845
|
||||
ikq* (6): INFO: Total processing time: 117.572312
|
||||
ikq* + ikr3 (9): INFO: Total processing time: 120.307662
|
||||
ikq* + ikr (14): INFO: Total processing time: 139.769807
|
||||
ikq* + ikr (18): INFO: Total processing time: 186.354398
|
||||
ikq* + ikr (22): INFO: Total processing time: 225.793533
|
||||
ikq* + ikr (26): INFO: Total processing time: 237.06687
|
||||
ikq* + ikr (31): INFO: Total processing time: 276.912414
|
||||
|
||||
|
||||
ikr07.ethz.ch ikr09.ethz.ch ikr10.ethz.ch ikr11.ethz.ch
|
||||
ikr13.ethz.ch ikr14.ethz.ch ikr15.ethz.ch ikr16.ethz.ch
|
||||
ikr17.ethz.ch ikr19.ethz.ch ikr20.ethz.ch ikr21.ethz.ch
|
||||
ikr23.ethz.ch ikr24.ethz.ch ikr25.ethz.ch ikr26.ethz.ch
|
||||
ikr27.ethz.ch ikr28.ethz.ch ikr29.ethz.ch ikr30.ethz.ch
|
||||
ikr31.ethz.ch
|
||||
|
||||
cdist -c ~/p/cdist-nutzung -p ikq02.ethz.ch ikq03.ethz.ch ikq04.ethz.ch ikq05.ethz.ch ikq06.ethz.ch ikq07.ethz.ch ikr01.ethz.ch ikr02.ethz.ch ikr03.ethz.ch ikr05.ethz.ch ikr07.ethz.ch ikr09.ethz.ch ikr10.ethz.ch ikr11.ethz.ch ikr13.ethz.ch ikr14.ethz.ch ikr15.ethz.ch ikr16.ethz.ch ikr17.ethz.ch ikr19.ethz.ch ikr20.ethz.ch ikr21.ethz.ch
|
||||
|
||||
|
||||
--------------------------------------------------------------------------------
|
||||
INFO: Total processing time for 1 hosts: 72.166661
|
||||
INFO: Total processing time for 2 hosts: 76.633228
|
||||
INFO: Total processing time for 3 host(s): 77.199817
|
||||
INFO: Total processing time for 4 host(s): 94.045175
|
||||
INFO: Total processing time for 5 host(s): 103.226354
|
||||
INFO: Total processing time for 6 host(s): 107.76097
|
||||
INFO: Total processing time for 7 host(s): 101.571705
|
||||
INFO: Total processing time for 8 host(s): 107.600093
|
||||
INFO: Total processing time for 9 host(s): 116.500371
|
||||
INFO: Total processing time for 10 host(s): 119.445805
|
||||
INFO: Total processing time for 11 host(s): 123.944385
|
||||
INFO: Total processing time for 12 host(s): 130.499098
|
||||
INFO: Total processing time for 13 host(s): 137.250861
|
||||
INFO: Total processing time for 14 host(s): 154.9841
|
||||
INFO: Total processing time for 15 host(s): 139.659637
|
||||
INFO: Total processing time for 16 host(s): 142.70005
|
||||
INFO: Total processing time for 17 host(s): 148.541452
|
||||
INFO: Total processing time for 18 host(s): 159.360809
|
||||
INFO: Total processing time for 19 host(s): 171.907864
|
||||
INFO: Total processing time for 20 host(s): 178.76695
|
||||
INFO: Total processing time for 21 host(s): 183.856671
|
||||
INFO: Total processing time for 22 host(s): 194.504221
|
||||
INFO: Total processing time for 23 host(s): 207.314842
|
||||
INFO: Total processing time for 24 host(s): 215.846502
|
||||
INFO: Total processing time for 25 host(s): 217.223581
|
||||
INFO: Total processing time for 26 host(s): 238.591705
|
||||
INFO: Total processing time for 27 host(s): 238.478493
|
||||
INFO: Total processing time for 28 host(s): 246.058718
|
||||
INFO: Total processing time for 29 host(s): 264.208372
|
||||
INFO: Total processing time for 30 host(s): 265.560685
|
||||
INFO: Total processing time for 31 host(s): 282.264488
|
||||
|
||||
--------------------------------------------------------------------------------
|
||||
Use:
|
||||
grep "^INFO: Total processing time" doc/dev/logs/2011-09-12 | sed 's/.*: //'
|
||||
octave
|
||||
times = [ /* paste here ]
|
||||
plot(times)
|
||||
# keep the graph
|
||||
hold on
|
||||
# Scale linearly with the single host value
|
||||
plot((1:31)*times(1))
|
||||
|
||||
--------------------------------------------------------------------------------
|
||||
code:
|
||||
|
||||
octave
|
||||
time = [
|
||||
72.166661
|
||||
76.633228
|
||||
77.199817
|
||||
94.045175
|
||||
103.226354
|
||||
107.76097
|
||||
101.571705
|
||||
107.600093
|
||||
116.500371
|
||||
119.445805
|
||||
123.944385
|
||||
130.499098
|
||||
137.250861
|
||||
154.9841
|
||||
139.659637
|
||||
142.70005
|
||||
148.541452
|
||||
159.360809
|
||||
171.907864
|
||||
178.76695
|
||||
183.856671
|
||||
194.504221
|
||||
207.314842
|
||||
215.846502
|
||||
217.223581
|
||||
238.591705
|
||||
238.478493
|
||||
246.058718
|
||||
264.208372
|
||||
265.560685
|
||||
282.264488
|
||||
]
|
||||
plot(times, "-;cdist;", times(1)*[1:length(times)]', "-;linear;")
|
||||
title("Configuration duration (cdist-2.0.0-rc4)")
|
||||
ylabel("Number of hosts")
|
||||
xlabel("Time in seconds")
|
||||
print('cdist-2.0.0-rc4.png', '-dpng')
|
||||
|
6960
doc/dev/logs/2011-09-12.benchmark-home
Normal file
6960
doc/dev/logs/2011-09-12.benchmark-home
Normal file
File diff suppressed because it is too large
Load diff
3
doc/dev/logs/2011-09-13
Normal file
3
doc/dev/logs/2011-09-13
Normal file
|
@ -0,0 +1,3 @@
|
|||
Name for installer:
|
||||
installer (flag)
|
||||
$__installer (variable) - gesetzt oder nicht
|
63
doc/dev/logs/2011-09-16.benchmark-r815-no-control-socket
Normal file
63
doc/dev/logs/2011-09-16.benchmark-r815-no-control-socket
Normal 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
|
1373
doc/dev/logs/2011-09-16.benchmark-r815-no-control-socket.dmidecode
Normal file
1373
doc/dev/logs/2011-09-16.benchmark-r815-no-control-socket.dmidecode
Normal file
File diff suppressed because it is too large
Load diff
3
doc/dev/logs/2011-10-04
Normal file
3
doc/dev/logs/2011-10-04
Normal file
|
@ -0,0 +1,3 @@
|
|||
Testing for single tests:
|
||||
PYTHONPATH=$PYTHONPATH:$(pwd -P)/lib python3 -m unittest cdist.test.test_install.Install.test_explorer_ran
|
||||
|
116
doc/dev/logs/2011-10-05
Normal file
116
doc/dev/logs/2011-10-05
Normal file
|
@ -0,0 +1,116 @@
|
|||
Config/Install/Deploy/Run:
|
||||
target host
|
||||
remote_cmd_prefix - ssh user@bla sudo foo?????
|
||||
remote_cp_prefix - cp statt scp oder so
|
||||
|
||||
debug -> env für alles += __debug
|
||||
|
||||
|
||||
Storage/Metaobject/Tree? == Path?
|
||||
base_dir?
|
||||
nimmt objekte
|
||||
|
||||
Sammelt Objekte
|
||||
|
||||
Ist prepared hier?
|
||||
|
||||
Object
|
||||
"Infos" / Datenhalde
|
||||
|
||||
Base_Dir-Abhängigkeit? - wo
|
||||
|
||||
out_dir - wo speichern
|
||||
|
||||
nur eigenes verzeichnis interessant?
|
||||
-> nicht für shell code / aka gencode!
|
||||
-> __global abhängigkeit
|
||||
|
||||
object.gencode()?
|
||||
|
||||
hast du type-explorer?
|
||||
ja?
|
||||
führe JEDEN remote aus
|
||||
speichere ausgabe in object
|
||||
nein:
|
||||
fertig
|
||||
hast du gencode-{local,remote}?
|
||||
ja?
|
||||
führe local oder remote aus
|
||||
speichere ausgabe in s/^gen//
|
||||
nein:
|
||||
fertig
|
||||
|
||||
hast du code-{local,remote}?
|
||||
ja?
|
||||
führe local oder remote aus
|
||||
nein:
|
||||
fertig
|
||||
|
||||
ich habe ...
|
||||
object_id
|
||||
type
|
||||
type.singleton() == False -> require object_id
|
||||
parameter gegeben
|
||||
requirements / order
|
||||
|
||||
type_explorer := methode zum ausführen?
|
||||
|
||||
cdist.object.Object(type, id)
|
||||
|
||||
methoden:
|
||||
gen_code
|
||||
code
|
||||
run_manifest
|
||||
manifest == ort
|
||||
|
||||
Type
|
||||
singleton: ja / nein
|
||||
install: ja / nein
|
||||
type_explorer := liste
|
||||
|
||||
optional_parameter
|
||||
required_parameter
|
||||
|
||||
TypeExplorer
|
||||
verwandt oder == explorer
|
||||
Verwandschaft klären!
|
||||
|
||||
sehr abhängig von base_dir!</behauptung :)>
|
||||
- welche gibt es?
|
||||
- was für optionen haben sie
|
||||
|
||||
cdist.type.Type("/path/to/type")
|
||||
Tree/Path vieh, das liste von $_ speichert
|
||||
Einfach iterieren
|
||||
|
||||
|
||||
|
||||
Explorer
|
||||
execute(env)
|
||||
env == __explorer -> nur im explorer
|
||||
|
||||
z.B. BaseExplorer oder andersherum GlobalExplorer
|
||||
|
||||
Manifest
|
||||
|
||||
Exec
|
||||
wrapper um auszuführen,
|
||||
error handling,
|
||||
output redirection (variable, file, beides, socat :-)
|
||||
|
||||
|
||||
--------------------------------------------------------------------------------
|
||||
|
||||
- base_dir (conf/, type, ...)
|
||||
- manifest (initiale)
|
||||
$methode_mit_inhalt_von_manifest?
|
||||
run_manifest(code)
|
||||
ob sinnvoll?
|
||||
geht auch mit stdin oder datei
|
||||
|
||||
stdin -> muss in tmp-datei, für sh -e?
|
||||
-
|
||||
--------------------------------------------------------------------------------
|
||||
|
||||
save output of shell in buffer instead of displaying?
|
||||
-> freedom to decide whether to display or not!
|
30
doc/dev/logs/2011-10-06
Normal file
30
doc/dev/logs/2011-10-06
Normal file
|
@ -0,0 +1,30 @@
|
|||
GlobalExplorer
|
||||
list_explorers()
|
||||
list_explorers_names()
|
||||
|
||||
base_dir
|
||||
__init__(name)
|
||||
out_dir
|
||||
env
|
||||
name = id
|
||||
path
|
||||
return_code
|
||||
return_value
|
||||
|
||||
--------------------------------------------------------------------------------
|
||||
Exec:
|
||||
|
||||
normal:
|
||||
|
||||
scp /from/where $USER@$HOST:REMOTE_BASE/cdist-internal
|
||||
ssh $USER@$HOST MY_CMD_THAT_NEEDS_TO_RUN_IN_BIN_SH (including ENV)
|
||||
|
||||
sudo:
|
||||
|
||||
scp $USER@$HOST:REMOTE_BASE/cdist-internal
|
||||
ssh $USER@$HOST sudo MY_CMD_THAT_NEEDS_TO_RUN_IN_BIN_SH (including ENV)
|
||||
|
||||
chroot:
|
||||
|
||||
[sudo] cp file /chroot/THE_HOST_BASE/REMOTE_BASE/cdist-internal
|
||||
[sudo] chroot /chroot MY_CMD_THAT_NEEDS_TO_RUN_IN_BIN_SH (including ENV)
|
87
doc/dev/logs/2011-10-06.ssh_scp_sudo_chroot
Normal file
87
doc/dev/logs/2011-10-06.ssh_scp_sudo_chroot
Normal file
|
@ -0,0 +1,87 @@
|
|||
Commands needed:
|
||||
conf/cmd/remote_exec
|
||||
conf/cmd/copy
|
||||
|
||||
If ! conf/cmd/remote_exec:
|
||||
use builtin
|
||||
If ! conf/cmd/copy:
|
||||
use builtin
|
||||
|
||||
--------------------------------------------------------------------------------
|
||||
|
||||
--cmd-dir?
|
||||
$__cdist_cmd_dir
|
||||
|
||||
--------------------------------------------------------------------------------
|
||||
-> Depend on session!
|
||||
|
||||
Builtin:
|
||||
cdist.exec.run_or_fail(["scp", "-qr", source,
|
||||
self.remote_user + "@" +
|
||||
self.target_host + ":" +
|
||||
destination])
|
||||
|
||||
self.remote_prefix = ["ssh", self.remote_user + "@" + self.target_host]
|
||||
|
||||
self.remote_user = remote_user
|
||||
self.remote_prefix = remote_prefix
|
||||
|
||||
--------------------------------------------------------------------------------
|
||||
What is in a session?
|
||||
|
||||
base_dir
|
||||
target_host
|
||||
|
||||
--------------------------------------------------------------------------------
|
||||
remote_user
|
||||
pseudo-static, can be hardcoded again
|
||||
--------------------------------------------------------------------------------
|
||||
|
||||
Result:
|
||||
|
||||
os.environ['__remote_exec'] = ["ssh", "-l", "root" ]
|
||||
|
||||
os.environ['__remote_exec'] = ["ssh", "-o", "User=root" ]
|
||||
os.environ['__remote_copy'] = ["scp", "-o", "User=root" ]
|
||||
|
||||
|
||||
__remote_exec=~/sudossh __remote_copy=... cdist config localhost
|
||||
|
||||
~/sudossh hostname $@...
|
||||
~/sudocopy a hostname:b
|
||||
|
||||
~/chrootssh
|
||||
~/chrootcopy
|
||||
|
||||
|
||||
|
||||
a)
|
||||
3 cmd verzeichnnise: cdist, sudo, chroot
|
||||
pro aufruf variable ändern
|
||||
|
||||
b)
|
||||
1 dir, mit zeug
|
||||
pro aufruf variablen ändern
|
||||
|
||||
|
||||
conf/cmd/remote_exec
|
||||
|
||||
args for __remote_exec
|
||||
$1 = hostname
|
||||
$2 - ... = stuff to be executed in /bin/sh on remote side
|
||||
$2 - $7 = env
|
||||
$7 - 12 = cmd
|
||||
|
||||
|
||||
args for __remote_copy
|
||||
$1 = file here
|
||||
$2 = hostname:destination
|
||||
|
||||
--------------------------------------------------------------------------------
|
||||
There needs to be an easy way to change those cmds!
|
||||
--------------------------------------------------------------------------------
|
||||
Env-Passing:
|
||||
_a=b test -> test can access $_a
|
||||
_a=b test $_a -> $1 = "", because _a is *not* set within the shell
|
||||
_a=b; test -> can access $_a
|
||||
_a=b; test $_a -> $1 == "b"
|
8
doc/dev/logs/2011-10-11.emulator-output
Normal file
8
doc/dev/logs/2011-10-11.emulator-output
Normal file
|
@ -0,0 +1,8 @@
|
|||
Debug:
|
||||
DEBUG: Namespace(name=None, state='installed')
|
||||
DEBUG: Object output dir = /home/users/nico/.tmp/tmpsdaonx/out/object/__package_pacman/zsh/.cdist
|
||||
DEBUG: Object param dir = /home/users/nico/.tmp/tmpsdaonx/out/object/__package_pacman/zsh/.cdist/parameter
|
||||
DEBUG: /home/users/nico/.tmp/tmpsdaonx/out/object/__package_pacman/zsh/.cdist/parameter/state<-state = installed
|
||||
DEBUG: zsh:Writing requirements:
|
||||
DEBUG: Finished __package_pacman/zsh{'state': 'installed', 'name': None}
|
||||
|
Some files were not shown because too many files have changed in this diff Show more
Loading…
Reference in a new issue