diff --git a/.gitignore b/.gitignore index 10d98990..d606aec7 100644 --- a/.gitignore +++ b/.gitignore @@ -13,3 +13,6 @@ doc/man/man*/docbook-xsl.css # Ignore cache for version control cache/ + +# Python +bin/__pycache__/ diff --git a/HACKERS_README b/HACKERS_README deleted file mode 100755 index ad3fe3fd..00000000 --- a/HACKERS_README +++ /dev/null @@ -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}" diff --git a/README b/README index 635d381d..5e60a093 100644 --- a/README +++ b/README @@ -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 """]] @@ -76,6 +76,7 @@ cdist was tested or is know to run on at least ### Server * A posix like shell + * Python (>= 3.2 required) * SSH-Client ### Client ("target host") @@ -109,11 +110,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 +131,12 @@ may vanish at any point. To select a specific branch use git checkout -b origin/ # 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)) ## Update @@ -151,6 +152,14 @@ 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 diff --git a/bin/cdist b/bin/cdist new file mode 100755 index 00000000..5ce947ef --- /dev/null +++ b/bin/cdist @@ -0,0 +1,784 @@ +#!/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 . +# +# + +import argparse +import datetime +import logging +import multiprocessing +import os +import re +import subprocess +import shutil +import stat +import sys +import tempfile + +BANNER = """ + .. . .x+=:. s + dF @88> z` ^% :8 + '88bu. %8P . is an object + if content == DOT_CDIST: + object_paths.append(starting_point) + + return object_paths + + def get_type_from_object(self, cdist_object): + """Returns the first part (i.e. type) of an object""" + return cdist_object.split(os.sep)[0] + + def get_object_id_from_object(self, cdist_object): + """Returns everything but the first part (i.e. object_id) of an object""" + return os.sep.join(cdist_object.split(os.sep)[1:]) + + def object_dir(self, cdist_object): + """Returns the full path to the object (including .cdist)""" + return os.path.join(self.object_base_dir, cdist_object, DOT_CDIST) + + def remote_object_dir(self, cdist_object): + """Returns the remote full path to the object (including .cdist)""" + return os.path.join(REMOTE_OBJECT_DIR, cdist_object, DOT_CDIST) + + def object_parameter_dir(self, cdist_object): + """Returns the dir to the object parameter""" + return os.path.join(self.object_dir(cdist_object), "parameter") + + def remote_object_parameter_dir(self, cdist_object): + """Returns the remote dir to the object parameter""" + return os.path.join(self.remote_object_dir(cdist_object), "parameter") + + def object_code_paths(self, cdist_object): + """Return paths to code scripts of object""" + return [os.path.join(self.object_dir(cdist_object), "code-local"), + os.path.join(self.object_dir(cdist_object), "code-remote")] + + def list_objects(self): + """Return list of existing objects""" + + objects = [] + if os.path.isdir(self.object_base_dir): + object_paths = self.list_object_paths(self.object_base_dir) + + for path in object_paths: + objects.append(os.path.relpath(path, self.object_base_dir)) + + return objects + + def type_dir(self, type, *args): + """Return directory the type""" + return os.path.join(self.type_base_dir, type, *args) + + def remote_type_explorer_dir(self, type): + """Return remote directory that holds the explorers of a type""" + return os.path.join(REMOTE_TYPE_DIR, type, "explorer") + + def transfer_object_parameter(self, cdist_object): + """Transfer the object parameter to the remote destination""" + # Create base path before using mkdir -p + self.remote_mkdir(self.remote_object_parameter_dir(cdist_object)) + + # Synchronise parameter dir afterwards + self.transfer_dir(self.object_parameter_dir(cdist_object), + self.remote_object_parameter_dir(cdist_object)) + + def transfer_global_explorers(self): + """Transfer the global explorers""" + self.remote_mkdir(REMOTE_GLOBAL_EXPLORER_DIR) + self.transfer_dir(self.global_explorer_dir, REMOTE_GLOBAL_EXPLORER_DIR) + + def transfer_type_explorers(self, type): + """Transfer explorers of a type, but only once""" + if type in self.type_explorers_transferred: + log.debug("Skipping retransfer for explorers of %s", type) + return + else: + # Do not retransfer + self.type_explorers_transferred[type] = 1 + + src = self.type_dir(type, "explorer") + remote_base = os.path.join(REMOTE_TYPE_DIR, type) + dst = self.remote_type_explorer_dir(type) + + # Only continue, if there is at least the directory + if os.path.isdir(src): + # Ensure that the path exists + self.remote_mkdir(remote_base) + self.transfer_dir(src, dst) + + + def link_type_to_emulator(self): + """Link type names to cdist-type-emulator""" + source = os.path.abspath(sys.argv[0]) + for type in self.list_types(): + destination = os.path.join(self.bin_dir, type) + log.debug("Linking %s to %s", source, destination) + os.symlink(source, destination) + + def run_global_explores(self): + """Run global explorers""" + explorers = self.list_global_explorers() + if(len(explorers) == 0): + exit_error("No explorers found in", self.global_explorer_dir) + + self.transfer_global_explorers() + for explorer in explorers: + output = self.global_explorer_output_path(explorer) + output_fd = open(output, mode='w') + cmd = [] + cmd.append("__explorer=" + REMOTE_GLOBAL_EXPLORER_DIR) + cmd.append(self.remote_global_explorer_path(explorer)) + + self.run_or_fail(cmd, stdout=output_fd, remote=True) + output_fd.close() + + def run_type_explorer(self, cdist_object): + """Run type specific explorers for objects""" + # Based on bin/cdist-object-explorer-run + + # Transfering explorers for this type + type = self.get_type_from_object(cdist_object) + self.transfer_type_explorers(type) + + cmd = [] + cmd.append("__explorer=" + REMOTE_GLOBAL_EXPLORER_DIR) + cmd.append("__type_explorer=" + self.remote_type_explorer_dir(type)) + cmd.append("__object=" + self.remote_object_dir(cdist_object)) + cmd.append("__object_id=" + self.get_object_id_from_object(cdist_object)) + cmd.append("__object_fq=" + cdist_object) + + # Need to transfer at least the parameters for objects to be useful + self.transfer_object_parameter(cdist_object) + + explorers = self.list_type_explorers(type) + for explorer in explorers: + remote_cmd = cmd + [os.path.join(self.remote_type_explorer_dir(type), explorer)] + output = os.path.join(self.type_explorer_output_dir(cdist_object), explorer) + output_fd = open(output, mode='w') + log.debug("%s exploring %s using %s storing to %s", + cdist_object, explorer, remote_cmd, output) + + self.run_or_fail(remote_cmd, stdout=output_fd, remote=True) + output_fd.close() + + def init_deploy(self): + """Ensure the base directories are cleaned up""" + log.debug("Creating clean directory structure") + + self.remove_remote_dir(REMOTE_BASE_DIR) + self.remote_mkdir(REMOTE_BASE_DIR) + + def run_initial_manifest(self): + """Run the initial manifest""" + env = { "__manifest" : self.manifest_dir } + self.run_manifest(self.initial_manifest, extra_env=env) + + def run_type_manifest(self, cdist_object): + """Run manifest for a specific object""" + type = self.get_type_from_object(cdist_object) + manifest = self.type_dir(type, "manifest") + + log.debug("%s: Running %s", cdist_object, manifest) + if os.path.exists(manifest): + env = { "__object" : self.object_dir(cdist_object), + "__object_id": self.get_object_id_from_object(cdist_object), + "__object_fq": cdist_object, + "__type": self.type_dir(type) + } + self.run_manifest(manifest, extra_env=env) + + def run_manifest(self, manifest, extra_env=None): + """Run a manifest""" + log.debug("Running manifest %s, env=%s", manifest, extra_env) + env = os.environ.copy() + env['PATH'] = self.bin_dir + ":" + env['PATH'] + + # Information required in every manifest + env['__target_host'] = self.target_host + env['__global'] = self.out_dir + + # Legacy stuff to make cdist-type-emulator work + env['__cdist_core_dir'] = os.path.join(self.base_dir, "core") + env['__cdist_local_base_dir'] = self.temp_dir + + # Submit information to new type emulator + env['__cdist_manifest'] = manifest + env['__cdist_type_base_dir'] = self.type_base_dir + + # Other environment stuff + if extra_env: + env.update(extra_env) + + self.shell_run_or_debug_fail(manifest, [manifest], env=env) + + def object_run(self, cdist_object, mode): + """Run gencode or code for an object""" + log.debug("Running %s from %s", mode, cdist_object) + file=os.path.join(self.object_dir(cdist_object), "require") + requirements = file_to_list(file) + type = self.get_type_from_object(cdist_object) + + for requirement in requirements: + log.debug("Object %s requires %s", cdist_object, requirement) + self.object_run(requirement, mode=mode) + + # + # Setup env Variable: + # + env = os.environ.copy() + env['__target_host'] = self.target_host + env['__global'] = self.out_dir + env["__object"] = self.object_dir(cdist_object) + env["__object_id"] = self.get_object_id_from_object(cdist_object) + env["__object_fq"] = cdist_object + env["__type"] = self.type_dir(type) + + if mode == "gencode": + paths = [ + self.type_dir(type, "gencode-local"), + self.type_dir(type, "gencode-remote") + ] + for bin in paths: + if os.path.isfile(bin): + # omit "gen" from gencode and + outfile=os.path.join(self.object_dir(cdist_object), + os.path.basename(bin)[3:]) + + outfile_fd = open(outfile, "w") + + # Need to flush to ensure our write is done before stdout write + outfile_fd.write(CODE_HEADER) + outfile_fd.flush() + + self.shell_run_or_debug_fail(bin, [bin], env=env, stdout=outfile_fd) + outfile_fd.close() + + status = os.stat(outfile) + + # Remove output if empty, else make it executable + if status.st_size == len(CODE_HEADER): + os.unlink(outfile) + else: + # Add header and make executable - identically to 0o700 + os.chmod(outfile, stat.S_IXUSR | stat.S_IRUSR | stat.S_IWUSR) + + if mode == "code": + local_dir = self.object_dir(cdist_object) + remote_dir = self.remote_object_dir(cdist_object) + + bin = os.path.join(local_dir, "code-local") + if os.path.isfile(bin): + self.run_or_fail([bin], remote=False) + + + local_remote_code = os.path.join(local_dir, "code-remote") + remote_remote_code = os.path.join(remote_dir, "code-remote") + if os.path.isfile(local_remote_code): + self.transfer_file(local_remote_code, remote_remote_code) + self.run_or_fail([remote_remote_code], remote=True) + + def stage_prepare(self): + """Do everything for a deploy, minus the actual code stage""" + self.init_deploy() + self.run_global_explores() + self.run_initial_manifest() + + old_objects = [] + objects = self.list_objects() + + # Continue process until no new objects are created anymore + while old_objects != objects: + log.debug("Prepare stage") + old_objects = list(objects) + for cdist_object in objects: + if cdist_object in self.objects_prepared: + log.debug("Skipping rerun of object %s", cdist_object) + continue + else: + self.run_type_explorer(cdist_object) + self.run_type_manifest(cdist_object) + self.objects_prepared.append(cdist_object) + + objects = self.list_objects() + + def stage_run(self): + """The final (and real) step of deployment""" + log.debug("Actual run objects") + # Now do the final steps over the existing objects + for cdist_object in self.list_objects(): + log.debug("Run object: %s", cdist_object) + self.object_run(cdist_object, mode="gencode") + self.object_run(cdist_object, mode="code") + + def deploy_to(self): + """Mimic the old deploy to: Deploy to one host""" + log.info("Deploying to " + self.target_host) + time_start = datetime.datetime.now() + + self.stage_prepare() + self.stage_run() + + time_end = datetime.datetime.now() + duration = time_end - time_start + log.info("Finished run of %s in %s seconds", + self.target_host, + duration.total_seconds()) + + def deploy_and_cleanup(self): + """Do what is most often done: deploy & cleanup""" + self.deploy_to() + self.cleanup() + +def banner(args): + """Guess what :-)""" + print(BANNER) + sys.exit(0) + +def config(args): + """Configure remote system""" + process = {} + + time_start = datetime.datetime.now() + + for host in args.host: + c = Cdist(host, initial_manifest=args.manifest, home=args.cdist_home, debug=args.debug) + if args.parallel: + log.debug("Creating child process for %s", host) + process[host] = multiprocessing.Process(target=c.deploy_and_cleanup) + process[host].start() + else: + c.deploy_and_cleanup() + + if args.parallel: + for p in process.keys(): + log.debug("Joining %s", p) + process[p].join() + + time_end = datetime.datetime.now() + log.info("Total processing time for %s host(s): %s", len(args.host), + (time_end - time_start).total_seconds()) + +def install(args): + """Install remote system""" + process = {} + +def emulator(): + """Emulate type commands (i.e. __file and co)""" + type = os.path.basename(sys.argv[0]) + type_dir = os.path.join(os.environ['__cdist_type_base_dir'], type) + param_dir = os.path.join(type_dir, "parameter") + global_dir = os.environ['__global'] + object_source = os.environ['__cdist_manifest'] + + parser = argparse.ArgumentParser(add_help=False) + + # Setup optional parameters + for parameter in file_to_list(os.path.join(param_dir, "optional")): + argument = "--" + parameter + parser.add_argument(argument, action='store', required=False) + + # Setup required parameters + for parameter in file_to_list(os.path.join(param_dir, "required")): + argument = "--" + parameter + parser.add_argument(argument, action='store', required=True) + + # Setup positional parameter, if not singleton + + if not os.path.isfile(os.path.join(type_dir, "singleton")): + parser.add_argument("object_id", nargs=1) + + # And finally verify parameter + args = parser.parse_args(sys.argv[1:]) + + # Setup object_id + if os.path.isfile(os.path.join(type_dir, "singleton")): + object_id = "singleton" + else: + object_id = args.object_id[0] + del args.object_id + + # FIXME: / hardcoded - better portable solution available? + if object_id[0] == '/': + object_id = object_id[1:] + + # FIXME: verify object id + log.debug(args) + + object_dir = os.path.join(global_dir, "object", type, + object_id, DOT_CDIST) + param_out_dir = os.path.join(object_dir, "parameter") + + object_source_file = os.path.join(object_dir, "source") + + if os.path.exists(param_out_dir): + object_exists = True + old_object_source_fd = open(object_source_file, "r") + old_object_source = old_object_source_fd.readlines() + old_object_source_fd.close() + + else: + object_exists = False + try: + os.makedirs(param_out_dir, exist_ok=True) + except OSError as error: + exit_error(param_out_dir + ": " + error.args[1]) + + # Record parameter + params = vars(args) + for param in params: + value = getattr(args, param) + if value: + file = os.path.join(param_out_dir, param) + log.debug(file + "<-" + param + " = " + value) + + # Already exists, verify all parameter are the same + if object_exists: + if not os.path.isfile(file): + print("New parameter + " + param + "specified, aborting") + print("Source = " + old_object_source + "new =" + object_source) + sys.exit(1) + else: + param_fd = open(file, "r") + param_old = param_fd.realines() + param_fd.close() + + if(param_old != param): + print("Parameter differs: " + param_old + "vs," + param) + print("Source = " + old_object_source + "new =" + object_source) + sys.exit(1) + else: + param_fd = open(file, "w") + param_fd.writelines(value) + param_fd.close() + + # Record requirements + if "__require" in os.environ: + requirements = os.environ['__require'] + print(object_id + ":Writing requirements: " + requirements) + require_fd = open(os.path.join(object_dir, "require"), "a") + require_fd.writelines(requirements.split(" ")) + require_fd.close() + + # Record / Append source + source_fd = open(os.path.join(object_dir, "source"), "a") + source_fd.writelines(object_source) + source_fd.close() + + # sys.exit(1) + print("Finished " + type + "/" + object_id + repr(params)) + + +def commandline(): + """Parse command line""" + # Construct parser others can reuse + parser = {} + # Options _all_ parsers have in common + parser['most'] = argparse.ArgumentParser(add_help=False) + parser['most'].add_argument('-d', '--debug', + help='Set log level to debug', action='store_true') + + # Main subcommand parser + parser['main'] = argparse.ArgumentParser(description='cdist ' + VERSION) + parser['main'].add_argument('-V', '--version', + help='Show version', action='version', + version='%(prog)s ' + VERSION) + parser['sub'] = parser['main'].add_subparsers(title="Commands") + + # Banner + parser['banner'] = parser['sub'].add_parser('banner', + add_help=False) + parser['banner'].set_defaults(func=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', + 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['most'], parser['configinstall']]) + parser['config'].set_defaults(func=config) + + # Install + parser['install'] = parser['sub'].add_parser('install', + parents=[parser['most'], 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:]) + + # Most subcommands have --debug, so handle it here + if 'debug' in args: + if args.debug: + logging.root.setLevel(logging.DEBUG) + log.debug(args) + + args.func(args) + +if __name__ == "__main__": + try: + if re.match(TYPE_PREFIX, os.path.basename(sys.argv[0])): + emulator() + else: + commandline() + except KeyboardInterrupt: + sys.exit(0) diff --git a/bin/cdist-code-run b/bin/cdist-code-run deleted file mode 100755 index 3d7499bf..00000000 --- a/bin/cdist-code-run +++ /dev/null @@ -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 . -# -# -# This binary is executed on the remote side to execute code -# - -. cdist-config -[ $# -eq 2 ] || __cdist_usage " " -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 diff --git a/bin/cdist-config b/bin/cdist-config deleted file mode 100644 index 88e3068f..00000000 --- a/bin/cdist-config +++ /dev/null @@ -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 . -# -# - -__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}" -} diff --git a/bin/cdist-deploy-to b/bin/cdist-deploy-to deleted file mode 100755 index bf5614bc..00000000 --- a/bin/cdist-deploy-to +++ /dev/null @@ -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 . -# -# -# Deploy configuration to a host -# - -. cdist-config -[ $# -eq 1 ] || __cdist_usage "" -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" diff --git a/bin/cdist-dir b/bin/cdist-dir deleted file mode 100755 index 0d30e14a..00000000 --- a/bin/cdist-dir +++ /dev/null @@ -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 . -# -# -# 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 " " -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 diff --git a/bin/cdist-explorer-run-global b/bin/cdist-explorer-run-global deleted file mode 100755 index b0c024f2..00000000 --- a/bin/cdist-explorer-run-global +++ /dev/null @@ -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 . -# -# -# Copy & run the global explorers, i.e. not bound to types -# - -. cdist-config -[ $# -eq 1 ] || __cdist_usage "" -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}" diff --git a/bin/cdist-manifest-run b/bin/cdist-manifest-run deleted file mode 100755 index d4ea18bb..00000000 --- a/bin/cdist-manifest-run +++ /dev/null @@ -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 . -# -# -# Let's build a cconfig tree from a configuration -# And save it into the cache tree -# - -. cdist-config -[ $# -eq 2 ] || __cdist_usage " " -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}" diff --git a/bin/cdist-mass-deploy b/bin/cdist-mass-deploy deleted file mode 100755 index 5ebfa1c2..00000000 --- a/bin/cdist-mass-deploy +++ /dev/null @@ -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 . -# -# -# Deploy configuration to many hosts -# - -. cdist-config -[ $# -ge 1 ] || __cdist_usage "[-p] [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 diff --git a/bin/cdist-object-all b/bin/cdist-object-all deleted file mode 100755 index 391c9cc7..00000000 --- a/bin/cdist-object-all +++ /dev/null @@ -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 . -# -# -# Run the given command for each created object. -# - -. cdist-config -[ $# -eq 2 ] || __cdist_usage " " -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 diff --git a/bin/cdist-object-code-run b/bin/cdist-object-code-run deleted file mode 100755 index fa63aaba..00000000 --- a/bin/cdist-object-code-run +++ /dev/null @@ -1,38 +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 . -# -# -# Exec the code for the given object locally and remote -# - -. cdist-config -[ $# -eq 2 ] || __cdist_usage " " -set -e - -__cdist_target_host="$1"; shift -__cdist_object="$1"; shift - -# Code local -export __cdist_out_object_dir="$__cdist_out_object_dir" -cdist-code-run "$__cdist_object" "${__cdist_name_gencode_local}" - -# Code remote -cdist-run-remote "$__cdist_target_host" \ - "cdist-code-run" "$__cdist_object" "${__cdist_name_gencode_remote}" diff --git a/bin/cdist-object-explorer-run b/bin/cdist-object-explorer-run deleted file mode 100755 index b65c5cc1..00000000 --- a/bin/cdist-object-explorer-run +++ /dev/null @@ -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 . -# -# -# Run the explorers for the given object on the target host. -# - -. cdist-config -[ $# -eq 2 ] || __cdist_usage " " -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 diff --git a/bin/cdist-object-gencode b/bin/cdist-object-gencode deleted file mode 100755 index e21568a3..00000000 --- a/bin/cdist-object-gencode +++ /dev/null @@ -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 . -# -# -# 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 "" "" "" -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 diff --git a/bin/cdist-object-gencode-run b/bin/cdist-object-gencode-run deleted file mode 100755 index 254ac1e4..00000000 --- a/bin/cdist-object-gencode-run +++ /dev/null @@ -1,38 +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 . -# -# -# For the given object create the code to be executed on the target. -# - -. cdist-config -[ $# -eq 2 ] || __cdist_usage " " -set -eu - -__cdist_target_host="$1"; shift -__cdist_object_self="$1"; shift - -__cdist_echo info "Generating local code " -cdist-object-gencode "$__cdist_target_host" "$__cdist_object_self" \ - "${__cdist_name_gencode_local}" - -__cdist_echo info "Generating remote code " -cdist-object-gencode "$__cdist_target_host" "$__cdist_object_self" \ - "${__cdist_name_gencode_remote}" diff --git a/bin/cdist-object-manifest-run b/bin/cdist-object-manifest-run deleted file mode 100755 index 34d4f867..00000000 --- a/bin/cdist-object-manifest-run +++ /dev/null @@ -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 . -# -# -# Run the manifest for the given object. -# - -. cdist-config -[ $# -eq 2 ] || __cdist_usage " " -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 diff --git a/bin/cdist-object-prepare b/bin/cdist-object-prepare deleted file mode 100755 index d21d8a63..00000000 --- a/bin/cdist-object-prepare +++ /dev/null @@ -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 . -# -# -# For the given object: -# - run type explorers -# - run type manifest -# - -. cdist-config -[ $# -eq 2 ] || __cdist_usage " " -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 diff --git a/bin/cdist-object-run b/bin/cdist-object-run deleted file mode 100755 index 4f40e7c1..00000000 --- a/bin/cdist-object-run +++ /dev/null @@ -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 . -# -# -# 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 " " -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 diff --git a/bin/cdist-remote-explorer-run b/bin/cdist-remote-explorer-run deleted file mode 100755 index d95913ba..00000000 --- a/bin/cdist-remote-explorer-run +++ /dev/null @@ -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 . -# -# -# 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 " " -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 diff --git a/bin/cdist-type-emulator b/bin/cdist-type-emulator deleted file mode 100755 index 8ff190ad..00000000 --- a/bin/cdist-type-emulator +++ /dev/null @@ -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 . -# -# -# 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 " " - __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}" diff --git a/bin/cdist-type-template b/bin/cdist-type-template deleted file mode 100755 index 6d8a3f15..00000000 --- a/bin/cdist-type-template +++ /dev/null @@ -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 . -# -# -# Create a new type from scratch -# - -. cdist-config -[ $# -eq 1 ] || __cdist_usage "" -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}" diff --git a/bin/cdist.py b/bin/cdist.py new file mode 120000 index 00000000..9a039b33 --- /dev/null +++ b/bin/cdist.py @@ -0,0 +1 @@ +cdist \ No newline at end of file diff --git a/build.sh b/build.sh index b1d27817..bef4393b 100755 --- a/build.sh +++ b/build.sh @@ -88,18 +88,21 @@ 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}/man + mkdir -p ${WEBDIR}/${WEBBASE}/man/man1 ${WEBDIR}/${WEBBASE}/man/man7 + rm -rf ${WEBDIR}/${WEBBASE}/speeches && mkdir ${WEBDIR}/${WEBBASE}/speeches - cp ${MAN1DSTDIR}/*.html ${MAN7DSTDIR}/*.html ${WEBDIR}/${WEBBASE}/man + cp ${MAN1DSTDIR}/*.html ${WEBDIR}/${WEBBASE}/man/man1 + cp ${MAN7DSTDIR}/*.html ${WEBDIR}/${WEBBASE}/man/man7 cp ${SPEECHESDIR}/*.pdf ${WEBDIR}/${WEBBASE}/speeches git describe > ${WEBDIR}/${WEBBASE}/man/VERSION @@ -108,7 +111,7 @@ case "$1" in cd ${WEBDIR} && make pub ;; - pub) + p|pu|pub) git push --mirror git push --mirror github ;; diff --git a/conf/explorer/os b/conf/explorer/os index 6684ff78..e922c067 100755 --- a/conf/explorer/os +++ b/conf/explorer/os @@ -65,6 +65,11 @@ if [ -f /etc/SuSE-release ]; then exit 0 fi +if [ -f /etc/cdist-preos ]; then + echo preos + exit 0 +fi + uname_s="$(uname -s)" # Assume there is no tr on the client -> do lower case ourselves diff --git a/conf/type/__package_rubygem/explorer/pkg_status b/conf/type/__package_rubygem/explorer/pkg_status new file mode 100755 index 00000000..97620892 --- /dev/null +++ b/conf/type/__package_rubygem/explorer/pkg_status @@ -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 . +# +# 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 diff --git a/conf/type/__package_rubygem/gencode-remote b/conf/type/__package_rubygem/gencode-remote new file mode 100755 index 00000000..daaba524 --- /dev/null +++ b/conf/type/__package_rubygem/gencode-remote @@ -0,0 +1,51 @@ +#!/bin/sh +# +# 2011 Chase Allen James +# +# 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 . +# +# +# 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 diff --git a/conf/type/__package_rubygem/man.text b/conf/type/__package_rubygem/man.text new file mode 100644 index 00000000..c6248ee3 --- /dev/null +++ b/conf/type/__package_rubygem/man.text @@ -0,0 +1,49 @@ +cdist-type__package_rubygem(7) +============================== +Chase Allen James + + +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). diff --git a/conf/type/__package_rubygem/parameter/optional b/conf/type/__package_rubygem/parameter/optional new file mode 100644 index 00000000..f121bdbf --- /dev/null +++ b/conf/type/__package_rubygem/parameter/optional @@ -0,0 +1 @@ +name diff --git a/conf/type/__package_rubygem/parameter/required b/conf/type/__package_rubygem/parameter/required new file mode 100644 index 00000000..ff72b5c7 --- /dev/null +++ b/conf/type/__package_rubygem/parameter/required @@ -0,0 +1 @@ +state diff --git a/doc/changelog b/doc/changelog index a603573b..cc6aa78b 100644 --- a/doc/changelog +++ b/doc/changelog @@ -1,4 +1,12 @@ -1.7.1: +2.0.1: + * Bugfix cdist: Always print source of error in case of exec errors + +2.0.0: 2011-09-16 + * New Type: __package_rubygem (Chase Allen James) + * __self replaced by __object_fq + * 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) diff --git a/doc/dev/benchmark-parallel-deploy b/doc/dev/benchmark-parallel-deploy new file mode 100755 index 00000000..0e7c4a2f --- /dev/null +++ b/doc/dev/benchmark-parallel-deploy @@ -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/.*: //' diff --git a/doc/dev/lastchanges b/doc/dev/lastchanges new file mode 100755 index 00000000..8679372a --- /dev/null +++ b/doc/dev/lastchanges @@ -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 . +# +# +# Show the lastest changes from this (upcoming) release +# + +awk '/^$/ { exit } { print $0 } END { print "-----" }' < "${0%/*}/../changelog" diff --git a/doc/dev/logs/2011-04-27.benchmark b/doc/dev/logs/2011-04-27.benchmark new file mode 100644 index 00000000..6f1f1e21 --- /dev/null +++ b/doc/dev/logs/2011-04-27.benchmark @@ -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) + diff --git a/doc/dev/logs/2011-04-27.benchmark.dash b/doc/dev/logs/2011-04-27.benchmark.dash new file mode 100644 index 00000000..635062e8 --- /dev/null +++ b/doc/dev/logs/2011-04-27.benchmark.dash @@ -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) + + + diff --git a/doc/dev/logs/2011-06-24.cinst_preos b/doc/dev/logs/2011-06-24.cinst_preos new file mode 100644 index 00000000..892ee5f7 --- /dev/null +++ b/doc/dev/logs/2011-06-24.cinst_preos @@ -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 + + + diff --git a/doc/dev/logs/2011-09-08.obsolete_debugging b/doc/dev/logs/2011-09-08.obsolete_debugging new file mode 100644 index 00000000..42413285 --- /dev/null +++ b/doc/dev/logs/2011-09-08.obsolete_debugging @@ -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 + diff --git a/doc/dev/logs/2011-09-12 b/doc/dev/logs/2011-09-12 new file mode 100644 index 00000000..1ace466f --- /dev/null +++ b/doc/dev/logs/2011-09-12 @@ -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') + diff --git a/doc/dev/logs/2011-09-13 b/doc/dev/logs/2011-09-13 new file mode 100644 index 00000000..b55a2d4e --- /dev/null +++ b/doc/dev/logs/2011-09-13 @@ -0,0 +1,3 @@ +Name for installer: + installer (flag) + $__installer (variable) - gesetzt oder nicht diff --git a/doc/dev/logs/2011-09-16.benchmark-r815-no-control-socket b/doc/dev/logs/2011-09-16.benchmark-r815-no-control-socket new file mode 100644 index 00000000..315ebf75 --- /dev/null +++ b/doc/dev/logs/2011-09-16.benchmark-r815-no-control-socket @@ -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 diff --git a/doc/dev/logs/2011-09-16.benchmark-r815-no-control-socket.dmidecode b/doc/dev/logs/2011-09-16.benchmark-r815-no-control-socket.dmidecode new file mode 100644 index 00000000..f96db8b3 --- /dev/null +++ b/doc/dev/logs/2011-09-16.benchmark-r815-no-control-socket.dmidecode @@ -0,0 +1,1373 @@ +# dmidecode 2.9 +SMBIOS 2.6 present. +101 structures occupying 5955 bytes. +Table at 0xDF79C000. + +Handle 0xDA00, DMI type 218, 11 bytes +OEM-specific Type + Header and Data: + DA 0B 00 DA B0 00 17 00 0E 20 00 + +Handle 0x0000, DMI type 0, 24 bytes +BIOS Information + Vendor: Dell Inc. + Version: 1.0.0 + Release Date: 04/08/2010 + Address: 0xF0000 + Runtime Size: 64 kB + ROM Size: 4096 kB + Characteristics: + ISA is supported + PCI is supported + PNP is supported + BIOS is upgradeable + BIOS shadowing is allowed + Boot from CD is supported + Selectable boot is supported + EDD is supported + Japanese floppy for Toshiba 1.2 MB is supported (int 13h) + 5.25"/360 KB floppy services are supported (int 13h) + 5.25"/1.2 MB floppy services are supported (int 13h) + 3.5"/720 KB floppy services are supported (int 13h) + 8042 keyboard services are supported (int 9h) + Serial services are supported (int 14h) + CGA/mono video services are supported (int 10h) + ACPI is supported + USB legacy is supported + BIOS boot specification is supported + Function key-initiated network boot is supported + Targeted content distribution is supported + BIOS Revision: 1.0 + +Handle 0x0100, DMI type 1, 27 bytes +System Information + Manufacturer: Dell Inc. + Product Name: PowerEdge R815 + Version: Not Specified + Serial Number: HYGTS4J + UUID: 44454C4C-5900-1047-8054-C8C04F53344A + Wake-up Type: Power Switch + SKU Number: Not Specified + Family: Not Specified + +Handle 0x0200, DMI type 2, 9 bytes +Base Board Information + Manufacturer: Dell Inc. + Product Name: 06JC9T + Version: A00 + Serial Number: ..CN7475104Q0184. + +Handle 0x0300, DMI type 3, 21 bytes +Chassis Information + Manufacturer: Dell Inc. + Type: Rack Mount Chassis + Lock: Present + Version: Not Specified + Serial Number: HYGTS4J + Asset Tag: Not Specified + Boot-up State: Safe + Power Supply State: Safe + Thermal State: Safe + Security Status: Unknown + OEM Information: 0x00000000 + Height: 2 U + Number Of Power Cords: Unspecified + Contained Elements: 0 + +Handle 0x0400, DMI type 4, 40 bytes +Processor Information + Socket Designation: CPU1 + Type: Central Processor + Family: + Manufacturer: AMD + ID: 91 0F 10 00 FF FB 8B 17 + Version: AMD Opteron(tm) Processor 6174 + Voltage: 1.1 V + External Clock: 3200 MHz + Max Speed: 3600 MHz + Current Speed: 2200 MHz + Status: Populated, Enabled + Upgrade: + L1 Cache Handle: 0x0700 + L2 Cache Handle: 0x0701 + L3 Cache Handle: 0x0702 + Serial Number: Not Specified + Asset Tag: Not Specified + Part Number: Not Specified + Core Count: 12 + Core Enabled: 12 + Thread Count: 12 + Characteristics: + 64-bit capable + +Handle 0x0401, DMI type 4, 40 bytes +Processor Information + Socket Designation: CPU2 + Type: Central Processor + Family: + Manufacturer: AMD + ID: 91 0F 10 00 FF FB 8B 17 + Version: AMD Opteron(tm) Processor 6174 + Voltage: 1.1 V + External Clock: 3200 MHz + Max Speed: 3600 MHz + Current Speed: 2200 MHz + Status: Populated, Idle + Upgrade: + L1 Cache Handle: 0x0703 + L2 Cache Handle: 0x0704 + L3 Cache Handle: 0x0705 + Serial Number: Not Specified + Asset Tag: Not Specified + Part Number: Not Specified + Core Count: 12 + Core Enabled: 12 + Thread Count: 12 + Characteristics: + 64-bit capable + +Handle 0x0402, DMI type 4, 40 bytes +Processor Information + Socket Designation: CPU3 + Type: Central Processor + Family: + Manufacturer: AMD + ID: 91 0F 10 00 FF FB 8B 17 + Version: AMD Opteron(tm) Processor 6174 + Voltage: 1.1 V + External Clock: 3200 MHz + Max Speed: 3600 MHz + Current Speed: 2200 MHz + Status: Populated, Idle + Upgrade: + L1 Cache Handle: 0x0706 + L2 Cache Handle: 0x0707 + L3 Cache Handle: 0x0708 + Serial Number: Not Specified + Asset Tag: Not Specified + Part Number: Not Specified + Core Count: 12 + Core Enabled: 12 + Thread Count: 12 + Characteristics: + 64-bit capable + +Handle 0x0403, DMI type 4, 40 bytes +Processor Information + Socket Designation: CPU4 + Type: Central Processor + Family: + Manufacturer: AMD + ID: 91 0F 10 00 FF FB 8B 17 + Version: AMD Opteron(tm) Processor 6174 + Voltage: 1.1 V + External Clock: 3200 MHz + Max Speed: 3600 MHz + Current Speed: 2200 MHz + Status: Populated, Idle + Upgrade: + L1 Cache Handle: 0x0709 + L2 Cache Handle: 0x070A + L3 Cache Handle: 0x070B + Serial Number: Not Specified + Asset Tag: Not Specified + Part Number: Not Specified + Core Count: 12 + Core Enabled: 12 + Thread Count: 12 + Characteristics: + 64-bit capable + +Handle 0x0700, DMI type 7, 19 bytes +Cache Information + Socket Designation: Not Specified + Configuration: Enabled, Not Socketed, Level 1 + Operational Mode: Write Back + Location: Internal + Installed Size: 768 KB + Maximum Size: 768 KB + Supported SRAM Types: + Unknown + Installed SRAM Type: Unknown + Speed: Unknown + Error Correction Type: Multi-bit ECC + System Type: Unified + Associativity: 2-way Set-associative + +Handle 0x0701, DMI type 7, 19 bytes +Cache Information + Socket Designation: Not Specified + Configuration: Enabled, Not Socketed, Level 2 + Operational Mode: Write Back + Location: Internal + Installed Size: 6144 KB + Maximum Size: 6144 KB + Supported SRAM Types: + Unknown + Installed SRAM Type: Unknown + Speed: Unknown + Error Correction Type: Multi-bit ECC + System Type: Unified + Associativity: 16-way Set-associative + +Handle 0x0702, DMI type 7, 19 bytes +Cache Information + Socket Designation: Not Specified + Configuration: Enabled, Not Socketed, Level 3 + Operational Mode: Write Back + Location: Internal + Installed Size: 10240 KB + Maximum Size: 10240 KB + Supported SRAM Types: + Unknown + Installed SRAM Type: Unknown + Speed: Unknown + Error Correction Type: Multi-bit ECC + System Type: Unified + Associativity: Other + +Handle 0x0703, DMI type 7, 19 bytes +Cache Information + Socket Designation: Not Specified + Configuration: Enabled, Not Socketed, Level 1 + Operational Mode: Write Back + Location: Internal + Installed Size: 768 KB + Maximum Size: 768 KB + Supported SRAM Types: + Unknown + Installed SRAM Type: Unknown + Speed: Unknown + Error Correction Type: Multi-bit ECC + System Type: Unified + Associativity: 2-way Set-associative + +Handle 0x0704, DMI type 7, 19 bytes +Cache Information + Socket Designation: Not Specified + Configuration: Enabled, Not Socketed, Level 2 + Operational Mode: Write Back + Location: Internal + Installed Size: 6144 KB + Maximum Size: 6144 KB + Supported SRAM Types: + Unknown + Installed SRAM Type: Unknown + Speed: Unknown + Error Correction Type: Multi-bit ECC + System Type: Unified + Associativity: 16-way Set-associative + +Handle 0x0705, DMI type 7, 19 bytes +Cache Information + Socket Designation: Not Specified + Configuration: Enabled, Not Socketed, Level 3 + Operational Mode: Write Back + Location: Internal + Installed Size: 10240 KB + Maximum Size: 10240 KB + Supported SRAM Types: + Unknown + Installed SRAM Type: Unknown + Speed: Unknown + Error Correction Type: Multi-bit ECC + System Type: Unified + Associativity: Other + +Handle 0x0706, DMI type 7, 19 bytes +Cache Information + Socket Designation: Not Specified + Configuration: Enabled, Not Socketed, Level 1 + Operational Mode: Write Back + Location: Internal + Installed Size: 768 KB + Maximum Size: 768 KB + Supported SRAM Types: + Unknown + Installed SRAM Type: Unknown + Speed: Unknown + Error Correction Type: Multi-bit ECC + System Type: Unified + Associativity: 2-way Set-associative + +Handle 0x0707, DMI type 7, 19 bytes +Cache Information + Socket Designation: Not Specified + Configuration: Enabled, Not Socketed, Level 2 + Operational Mode: Write Back + Location: Internal + Installed Size: 6144 KB + Maximum Size: 6144 KB + Supported SRAM Types: + Unknown + Installed SRAM Type: Unknown + Speed: Unknown + Error Correction Type: Multi-bit ECC + System Type: Unified + Associativity: 16-way Set-associative + +Handle 0x0708, DMI type 7, 19 bytes +Cache Information + Socket Designation: Not Specified + Configuration: Enabled, Not Socketed, Level 3 + Operational Mode: Write Back + Location: Internal + Installed Size: 10240 KB + Maximum Size: 10240 KB + Supported SRAM Types: + Unknown + Installed SRAM Type: Unknown + Speed: Unknown + Error Correction Type: Multi-bit ECC + System Type: Unified + Associativity: Other + +Handle 0x0709, DMI type 7, 19 bytes +Cache Information + Socket Designation: Not Specified + Configuration: Enabled, Not Socketed, Level 1 + Operational Mode: Write Back + Location: Internal + Installed Size: 768 KB + Maximum Size: 768 KB + Supported SRAM Types: + Unknown + Installed SRAM Type: Unknown + Speed: Unknown + Error Correction Type: Multi-bit ECC + System Type: Unified + Associativity: 2-way Set-associative + +Handle 0x070A, DMI type 7, 19 bytes +Cache Information + Socket Designation: Not Specified + Configuration: Enabled, Not Socketed, Level 2 + Operational Mode: Write Back + Location: Internal + Installed Size: 6144 KB + Maximum Size: 6144 KB + Supported SRAM Types: + Unknown + Installed SRAM Type: Unknown + Speed: Unknown + Error Correction Type: Multi-bit ECC + System Type: Unified + Associativity: 16-way Set-associative + +Handle 0x070B, DMI type 7, 19 bytes +Cache Information + Socket Designation: Not Specified + Configuration: Enabled, Not Socketed, Level 3 + Operational Mode: Write Back + Location: Internal + Installed Size: 10240 KB + Maximum Size: 10240 KB + Supported SRAM Types: + Unknown + Installed SRAM Type: Unknown + Speed: Unknown + Error Correction Type: Multi-bit ECC + System Type: Unified + Associativity: Other + +Handle 0x0800, DMI type 8, 9 bytes +Port Connector Information + Internal Reference Designator: Not Specified + Internal Connector Type: None + External Reference Designator: Not Specified + External Connector Type: DB-15 female + Port Type: Video Port + +Handle 0x0801, DMI type 8, 9 bytes +Port Connector Information + Internal Reference Designator: Not Specified + Internal Connector Type: None + External Reference Designator: Not Specified + External Connector Type: DB-15 female + Port Type: Video Port + +Handle 0x0802, DMI type 8, 9 bytes +Port Connector Information + Internal Reference Designator: Not Specified + Internal Connector Type: None + External Reference Designator: Not Specified + External Connector Type: Access Bus (USB) + Port Type: USB + +Handle 0x0803, DMI type 8, 9 bytes +Port Connector Information + Internal Reference Designator: Not Specified + Internal Connector Type: None + External Reference Designator: Not Specified + External Connector Type: Access Bus (USB) + Port Type: USB + +Handle 0x0804, DMI type 8, 9 bytes +Port Connector Information + Internal Reference Designator: Not Specified + Internal Connector Type: None + External Reference Designator: Not Specified + External Connector Type: Access Bus (USB) + Port Type: USB + +Handle 0x0805, DMI type 8, 9 bytes +Port Connector Information + Internal Reference Designator: Not Specified + Internal Connector Type: None + External Reference Designator: Not Specified + External Connector Type: Access Bus (USB) + Port Type: USB + +Handle 0x0806, DMI type 8, 9 bytes +Port Connector Information + Internal Reference Designator: Not Specified + Internal Connector Type: None + External Reference Designator: Not Specified + External Connector Type: Access Bus (USB) + Port Type: USB + +Handle 0x0807, DMI type 8, 9 bytes +Port Connector Information + Internal Reference Designator: Not Specified + Internal Connector Type: None + External Reference Designator: Not Specified + External Connector Type: Access Bus (USB) + Port Type: USB + +Handle 0x0808, DMI type 8, 9 bytes +Port Connector Information + Internal Reference Designator: INT_USB + Internal Connector Type: Access Bus (USB) + External Reference Designator: Not Specified + External Connector Type: None + Port Type: USB + +Handle 0x0809, DMI type 126, 9 bytes +Inactive + +Handle 0x080A, DMI type 126, 9 bytes +Inactive + +Handle 0x080B, DMI type 8, 9 bytes +Port Connector Information + Internal Reference Designator: Not Specified + Internal Connector Type: None + External Reference Designator: Not Specified + External Connector Type: RJ-45 + Port Type: Network Port + +Handle 0x080C, DMI type 8, 9 bytes +Port Connector Information + Internal Reference Designator: Not Specified + Internal Connector Type: None + External Reference Designator: Not Specified + External Connector Type: RJ-45 + Port Type: Network Port + +Handle 0x080D, DMI type 8, 9 bytes +Port Connector Information + Internal Reference Designator: Not Specified + Internal Connector Type: None + External Reference Designator: Not Specified + External Connector Type: RJ-45 + Port Type: Network Port + +Handle 0x080E, DMI type 8, 9 bytes +Port Connector Information + Internal Reference Designator: Not Specified + Internal Connector Type: None + External Reference Designator: Not Specified + External Connector Type: RJ-45 + Port Type: Network Port + +Handle 0x080F, DMI type 8, 9 bytes +Port Connector Information + Internal Reference Designator: Not Specified + Internal Connector Type: None + External Reference Designator: Not Specified + External Connector Type: DB-9 male + Port Type: Serial Port 16550A Compatible + +Handle 0x0900, DMI type 9, 17 bytes +System Slot Information + Designation: PCI1 + Type: x8 + Current Usage: Available + Length: Long + Characteristics: + 3.3 V is provided + PME signal is supported + +Handle 0x0901, DMI type 9, 17 bytes +System Slot Information + Designation: PCI2 + Type: x4 + Current Usage: Available + Length: Short + Characteristics: + 3.3 V is provided + PME signal is supported + +Handle 0x0902, DMI type 9, 17 bytes +System Slot Information + Designation: PCI3 + Type: x8 + Current Usage: Available + Length: Short + Characteristics: + 3.3 V is provided + PME signal is supported + +Handle 0x0903, DMI type 9, 17 bytes +System Slot Information + Designation: PCI4 + Type: x8 + Current Usage: Available + Length: Short + Characteristics: + 3.3 V is provided + PME signal is supported + +Handle 0x0904, DMI type 9, 17 bytes +System Slot Information + Designation: PCI5 + Type: x8 + Current Usage: Available + Length: Long + Characteristics: + 3.3 V is provided + PME signal is supported + +Handle 0x0905, DMI type 9, 17 bytes +System Slot Information + Designation: PCI6 + Type: x8 + Current Usage: Available + Length: Long + Characteristics: + 3.3 V is provided + PME signal is supported + +Handle 0x0A00, DMI type 10, 16 bytes +On Board Device 1 Information + Type: Video + Status: Enabled + Description: Embedded Matrox G200 Video +On Board Device 2 Information + Type: Ethernet + Status: Enabled + Description: Embedded Broadcom 5709C NIC 1 +On Board Device 3 Information + Type: Ethernet + Status: Enabled + Description: Embedded Broadcom 5709C NIC 2 +On Board Device 4 Information + Type: Ethernet + Status: Enabled + Description: Embedded Broadcom 5709C NIC 3 +On Board Device 5 Information + Type: Ethernet + Status: Enabled + Description: Embedded Broadcom 5709C NIC 4 +On Board Device 6 Information + Type: SAS Controller + Status: Enabled + Description: Integrated SAS Controller + +Handle 0x0B00, DMI type 11, 5 bytes +OEM Strings + String 1: Dell System + String 2: 5[0000] + +Handle 0x7E00, DMI type 126, 154 bytes +Inactive + +Handle 0x0C00, DMI type 12, 5 bytes +System Configuration Options + Option 1: NVRAM_CLR: Clear user settable NVRAM areas and set defaults + Option 2: PWRD_EN: Close to enable password + +Handle 0x0D00, DMI type 13, 22 bytes +BIOS Language Information + Installable Languages: 1 + en|US|iso8859-1 + Currently Installed Language: en|US|iso8859-1 + +Handle 0x1000, DMI type 16, 15 bytes +Physical Memory Array + Location: System Board Or Motherboard + Use: System Memory + Error Correction Type: Multi-bit ECC + Maximum Capacity: 256 GB + Error Information Handle: Not Provided + Number Of Devices: 32 + +Handle 0x1100, DMI type 17, 28 bytes +Memory Device + Array Handle: 0x1000 + Error Information Handle: Not Provided + Total Width: 72 bits + Data Width: 64 bits + Size: 4096 MB + Form Factor: DIMM + Set: 1 + Locator: DIMM_A1 + Bank Locator: Not Specified + Type: + Type Detail: Synchronous + Speed: 1333 MHz (0.8 ns) + Manufacturer: 80CE80B380CE + Serial Number: 851CFBE6 + Asset Tag: 02101861 + Part Number: M393B5170EH1-CH9 + +Handle 0x1101, DMI type 17, 28 bytes +Memory Device + Array Handle: 0x1000 + Error Information Handle: Not Provided + Total Width: 72 bits + Data Width: 64 bits + Size: 4096 MB + Form Factor: DIMM + Set: 1 + Locator: DIMM_A2 + Bank Locator: Not Specified + Type: + Type Detail: Synchronous + Speed: 1333 MHz (0.8 ns) + Manufacturer: 80CE80B380CE + Serial Number: 851CFBC6 + Asset Tag: 02101861 + Part Number: M393B5170EH1-CH9 + +Handle 0x1102, DMI type 17, 28 bytes +Memory Device + Array Handle: 0x1000 + Error Information Handle: Not Provided + Total Width: 72 bits + Data Width: 64 bits + Size: 4096 MB + Form Factor: DIMM + Set: 2 + Locator: DIMM_A3 + Bank Locator: Not Specified + Type: + Type Detail: Synchronous + Speed: 1333 MHz (0.8 ns) + Manufacturer: 80CE80B380CE + Serial Number: 851CFBFF + Asset Tag: 02101861 + Part Number: M393B5170EH1-CH9 + +Handle 0x1103, DMI type 17, 28 bytes +Memory Device + Array Handle: 0x1000 + Error Information Handle: Not Provided + Total Width: 72 bits + Data Width: 64 bits + Size: 4096 MB + Form Factor: DIMM + Set: 2 + Locator: DIMM_A4 + Bank Locator: Not Specified + Type: + Type Detail: Synchronous + Speed: 1333 MHz (0.8 ns) + Manufacturer: 80CE80B380CE + Serial Number: 851CFC05 + Asset Tag: 02101861 + Part Number: M393B5170EH1-CH9 + +Handle 0x1104, DMI type 17, 28 bytes +Memory Device + Array Handle: 0x1000 + Error Information Handle: Not Provided + Total Width: 72 bits + Data Width: 64 bits + Size: 4096 MB + Form Factor: DIMM + Set: 3 + Locator: DIMM_A5 + Bank Locator: Not Specified + Type: + Type Detail: Synchronous + Speed: 1333 MHz (0.8 ns) + Manufacturer: 80CE80B380CE + Serial Number: 851CFBB0 + Asset Tag: 02101861 + Part Number: M393B5170EH1-CH9 + +Handle 0x1105, DMI type 17, 28 bytes +Memory Device + Array Handle: 0x1000 + Error Information Handle: Not Provided + Total Width: 72 bits + Data Width: 64 bits + Size: 4096 MB + Form Factor: DIMM + Set: 3 + Locator: DIMM_A6 + Bank Locator: Not Specified + Type: + Type Detail: Synchronous + Speed: 1333 MHz (0.8 ns) + Manufacturer: 80CE80B380CE + Serial Number: 851CFBED + Asset Tag: 02101861 + Part Number: M393B5170EH1-CH9 + +Handle 0x1106, DMI type 17, 28 bytes +Memory Device + Array Handle: 0x1000 + Error Information Handle: Not Provided + Total Width: 72 bits + Data Width: 64 bits + Size: 4096 MB + Form Factor: DIMM + Set: 4 + Locator: DIMM_A7 + Bank Locator: Not Specified + Type: + Type Detail: Synchronous + Speed: 1333 MHz (0.8 ns) + Manufacturer: 80CE80B380CE + Serial Number: 851CFC06 + Asset Tag: 02101861 + Part Number: M393B5170EH1-CH9 + +Handle 0x1107, DMI type 17, 28 bytes +Memory Device + Array Handle: 0x1000 + Error Information Handle: Not Provided + Total Width: 72 bits + Data Width: 64 bits + Size: 4096 MB + Form Factor: DIMM + Set: 4 + Locator: DIMM_A8 + Bank Locator: Not Specified + Type: + Type Detail: Synchronous + Speed: 1333 MHz (0.8 ns) + Manufacturer: 80CE80B380CE + Serial Number: 851CFBF7 + Asset Tag: 02101861 + Part Number: M393B5170EH1-CH9 + +Handle 0x1108, DMI type 17, 28 bytes +Memory Device + Array Handle: 0x1000 + Error Information Handle: Not Provided + Total Width: 72 bits + Data Width: 64 bits + Size: 4096 MB + Form Factor: DIMM + Set: 5 + Locator: DIMM_B1 + Bank Locator: Not Specified + Type: + Type Detail: Synchronous + Speed: 1333 MHz (0.8 ns) + Manufacturer: 80CE80B380CE + Serial Number: 851CFB92 + Asset Tag: 02101861 + Part Number: M393B5170EH1-CH9 + +Handle 0x1109, DMI type 17, 28 bytes +Memory Device + Array Handle: 0x1000 + Error Information Handle: Not Provided + Total Width: 72 bits + Data Width: 64 bits + Size: 4096 MB + Form Factor: DIMM + Set: 5 + Locator: DIMM_B2 + Bank Locator: Not Specified + Type: + Type Detail: Synchronous + Speed: 1333 MHz (0.8 ns) + Manufacturer: 80CE80B380CE + Serial Number: 851CFBF4 + Asset Tag: 02101861 + Part Number: M393B5170EH1-CH9 + +Handle 0x110A, DMI type 17, 28 bytes +Memory Device + Array Handle: 0x1000 + Error Information Handle: Not Provided + Total Width: 72 bits + Data Width: 64 bits + Size: 4096 MB + Form Factor: DIMM + Set: 6 + Locator: DIMM_B3 + Bank Locator: Not Specified + Type: + Type Detail: Synchronous + Speed: 1333 MHz (0.8 ns) + Manufacturer: 80CE80B380CE + Serial Number: 851CFBC7 + Asset Tag: 02101861 + Part Number: M393B5170EH1-CH9 + +Handle 0x110B, DMI type 17, 28 bytes +Memory Device + Array Handle: 0x1000 + Error Information Handle: Not Provided + Total Width: 72 bits + Data Width: 64 bits + Size: 4096 MB + Form Factor: DIMM + Set: 6 + Locator: DIMM_B4 + Bank Locator: Not Specified + Type: + Type Detail: Synchronous + Speed: 1333 MHz (0.8 ns) + Manufacturer: 80CE80B380CE + Serial Number: 851CFC26 + Asset Tag: 02101861 + Part Number: M393B5170EH1-CH9 + +Handle 0x110C, DMI type 17, 28 bytes +Memory Device + Array Handle: 0x1000 + Error Information Handle: Not Provided + Total Width: 72 bits + Data Width: 64 bits + Size: 4096 MB + Form Factor: DIMM + Set: 7 + Locator: DIMM_B5 + Bank Locator: Not Specified + Type: + Type Detail: Synchronous + Speed: 1333 MHz (0.8 ns) + Manufacturer: 80CE80B380CE + Serial Number: 851CFBE4 + Asset Tag: 02101861 + Part Number: M393B5170EH1-CH9 + +Handle 0x110D, DMI type 17, 28 bytes +Memory Device + Array Handle: 0x1000 + Error Information Handle: Not Provided + Total Width: 72 bits + Data Width: 64 bits + Size: 4096 MB + Form Factor: DIMM + Set: 7 + Locator: DIMM_B6 + Bank Locator: Not Specified + Type: + Type Detail: Synchronous + Speed: 1333 MHz (0.8 ns) + Manufacturer: 80CE80B380CE + Serial Number: 851CFBA4 + Asset Tag: 02101861 + Part Number: M393B5170EH1-CH9 + +Handle 0x110E, DMI type 17, 28 bytes +Memory Device + Array Handle: 0x1000 + Error Information Handle: Not Provided + Total Width: 72 bits + Data Width: 64 bits + Size: 4096 MB + Form Factor: DIMM + Set: 8 + Locator: DIMM_B7 + Bank Locator: Not Specified + Type: + Type Detail: Synchronous + Speed: 1333 MHz (0.8 ns) + Manufacturer: 80CE80B380CE + Serial Number: 851CFBB6 + Asset Tag: 02101861 + Part Number: M393B5170EH1-CH9 + +Handle 0x110F, DMI type 17, 28 bytes +Memory Device + Array Handle: 0x1000 + Error Information Handle: Not Provided + Total Width: 72 bits + Data Width: 64 bits + Size: 4096 MB + Form Factor: DIMM + Set: 8 + Locator: DIMM_B8 + Bank Locator: Not Specified + Type: + Type Detail: Synchronous + Speed: 1333 MHz (0.8 ns) + Manufacturer: 80CE80B380CE + Serial Number: 851CFB0D + Asset Tag: 02101861 + Part Number: M393B5170EH1-CH9 + +Handle 0x1110, DMI type 17, 28 bytes +Memory Device + Array Handle: 0x1000 + Error Information Handle: Not Provided + Total Width: 72 bits + Data Width: 64 bits + Size: 4096 MB + Form Factor: DIMM + Set: 9 + Locator: DIMM_C1 + Bank Locator: Not Specified + Type: + Type Detail: Synchronous + Speed: 1333 MHz (0.8 ns) + Manufacturer: 80CE80B380CE + Serial Number: 851CFC37 + Asset Tag: 02101861 + Part Number: M393B5170EH1-CH9 + +Handle 0x1111, DMI type 17, 28 bytes +Memory Device + Array Handle: 0x1000 + Error Information Handle: Not Provided + Total Width: 72 bits + Data Width: 64 bits + Size: 4096 MB + Form Factor: DIMM + Set: 9 + Locator: DIMM_C2 + Bank Locator: Not Specified + Type: + Type Detail: Synchronous + Speed: 1333 MHz (0.8 ns) + Manufacturer: 80CE80B380CE + Serial Number: 851CFC23 + Asset Tag: 02101861 + Part Number: M393B5170EH1-CH9 + +Handle 0x1112, DMI type 17, 28 bytes +Memory Device + Array Handle: 0x1000 + Error Information Handle: Not Provided + Total Width: 72 bits + Data Width: 64 bits + Size: 4096 MB + Form Factor: DIMM + Set: 10 + Locator: DIMM_C3 + Bank Locator: Not Specified + Type: + Type Detail: Synchronous + Speed: 1333 MHz (0.8 ns) + Manufacturer: 80CE80B380CE + Serial Number: 851CFB0E + Asset Tag: 02101861 + Part Number: M393B5170EH1-CH9 + +Handle 0x1113, DMI type 17, 28 bytes +Memory Device + Array Handle: 0x1000 + Error Information Handle: Not Provided + Total Width: 72 bits + Data Width: 64 bits + Size: 4096 MB + Form Factor: DIMM + Set: 10 + Locator: DIMM_C4 + Bank Locator: Not Specified + Type: + Type Detail: Synchronous + Speed: 1333 MHz (0.8 ns) + Manufacturer: 80CE80B380CE + Serial Number: 851CFB04 + Asset Tag: 02101861 + Part Number: M393B5170EH1-CH9 + +Handle 0x1114, DMI type 17, 28 bytes +Memory Device + Array Handle: 0x1000 + Error Information Handle: Not Provided + Total Width: 72 bits + Data Width: 64 bits + Size: 4096 MB + Form Factor: DIMM + Set: 11 + Locator: DIMM_C5 + Bank Locator: Not Specified + Type: + Type Detail: Synchronous + Speed: 1333 MHz (0.8 ns) + Manufacturer: 80CE80B380CE + Serial Number: 851CFBF6 + Asset Tag: 02101861 + Part Number: M393B5170EH1-CH9 + +Handle 0x1115, DMI type 17, 28 bytes +Memory Device + Array Handle: 0x1000 + Error Information Handle: Not Provided + Total Width: 72 bits + Data Width: 64 bits + Size: 4096 MB + Form Factor: DIMM + Set: 11 + Locator: DIMM_C6 + Bank Locator: Not Specified + Type: + Type Detail: Synchronous + Speed: 1333 MHz (0.8 ns) + Manufacturer: 80CE80B380CE + Serial Number: 851CFC21 + Asset Tag: 02101861 + Part Number: M393B5170EH1-CH9 + +Handle 0x1116, DMI type 17, 28 bytes +Memory Device + Array Handle: 0x1000 + Error Information Handle: Not Provided + Total Width: 72 bits + Data Width: 64 bits + Size: 4096 MB + Form Factor: DIMM + Set: 12 + Locator: DIMM_C7 + Bank Locator: Not Specified + Type: + Type Detail: Synchronous + Speed: 1333 MHz (0.8 ns) + Manufacturer: 80CE80B380CE + Serial Number: 851CFC28 + Asset Tag: 02101861 + Part Number: M393B5170EH1-CH9 + +Handle 0x1117, DMI type 17, 28 bytes +Memory Device + Array Handle: 0x1000 + Error Information Handle: Not Provided + Total Width: 72 bits + Data Width: 64 bits + Size: 4096 MB + Form Factor: DIMM + Set: 12 + Locator: DIMM_C8 + Bank Locator: Not Specified + Type: + Type Detail: Synchronous + Speed: 1333 MHz (0.8 ns) + Manufacturer: 80CE80B380CE + Serial Number: 851CFBAC + Asset Tag: 02101861 + Part Number: M393B5170EH1-CH9 + +Handle 0x1118, DMI type 17, 28 bytes +Memory Device + Array Handle: 0x1000 + Error Information Handle: Not Provided + Total Width: 72 bits + Data Width: 64 bits + Size: 4096 MB + Form Factor: DIMM + Set: 13 + Locator: DIMM_D1 + Bank Locator: Not Specified + Type: + Type Detail: Synchronous + Speed: 1333 MHz (0.8 ns) + Manufacturer: 80CE80B380CE + Serial Number: 851CFBCD + Asset Tag: 02101861 + Part Number: M393B5170EH1-CH9 + +Handle 0x1119, DMI type 17, 28 bytes +Memory Device + Array Handle: 0x1000 + Error Information Handle: Not Provided + Total Width: 72 bits + Data Width: 64 bits + Size: 4096 MB + Form Factor: DIMM + Set: 13 + Locator: DIMM_D2 + Bank Locator: Not Specified + Type: + Type Detail: Synchronous + Speed: 1333 MHz (0.8 ns) + Manufacturer: 80CE80B380CE + Serial Number: 851CFBBD + Asset Tag: 02101861 + Part Number: M393B5170EH1-CH9 + +Handle 0x111A, DMI type 17, 28 bytes +Memory Device + Array Handle: 0x1000 + Error Information Handle: Not Provided + Total Width: 72 bits + Data Width: 64 bits + Size: 4096 MB + Form Factor: DIMM + Set: 14 + Locator: DIMM_D3 + Bank Locator: Not Specified + Type: + Type Detail: Synchronous + Speed: 1333 MHz (0.8 ns) + Manufacturer: 80CE80B380CE + Serial Number: 851CFAD0 + Asset Tag: 02101861 + Part Number: M393B5170EH1-CH9 + +Handle 0x111B, DMI type 17, 28 bytes +Memory Device + Array Handle: 0x1000 + Error Information Handle: Not Provided + Total Width: 72 bits + Data Width: 64 bits + Size: 4096 MB + Form Factor: DIMM + Set: 14 + Locator: DIMM_D4 + Bank Locator: Not Specified + Type: + Type Detail: Synchronous + Speed: 1333 MHz (0.8 ns) + Manufacturer: 80CE80B380CE + Serial Number: 851CFBBC + Asset Tag: 02101861 + Part Number: M393B5170EH1-CH9 + +Handle 0x111C, DMI type 17, 28 bytes +Memory Device + Array Handle: 0x1000 + Error Information Handle: Not Provided + Total Width: 72 bits + Data Width: 64 bits + Size: 4096 MB + Form Factor: DIMM + Set: 15 + Locator: DIMM_D5 + Bank Locator: Not Specified + Type: + Type Detail: Synchronous + Speed: 1333 MHz (0.8 ns) + Manufacturer: 80CE80B380CE + Serial Number: 851CFB2A + Asset Tag: 02101861 + Part Number: M393B5170EH1-CH9 + +Handle 0x111D, DMI type 17, 28 bytes +Memory Device + Array Handle: 0x1000 + Error Information Handle: Not Provided + Total Width: 72 bits + Data Width: 64 bits + Size: 4096 MB + Form Factor: DIMM + Set: 15 + Locator: DIMM_D6 + Bank Locator: Not Specified + Type: + Type Detail: Synchronous + Speed: 1333 MHz (0.8 ns) + Manufacturer: 80CE80B380CE + Serial Number: 851CFBEB + Asset Tag: 02101861 + Part Number: M393B5170EH1-CH9 + +Handle 0x111E, DMI type 17, 28 bytes +Memory Device + Array Handle: 0x1000 + Error Information Handle: Not Provided + Total Width: 72 bits + Data Width: 64 bits + Size: 4096 MB + Form Factor: DIMM + Set: 16 + Locator: DIMM_D7 + Bank Locator: Not Specified + Type: + Type Detail: Synchronous + Speed: 1333 MHz (0.8 ns) + Manufacturer: 80CE80B380CE + Serial Number: 851CFADB + Asset Tag: 02101861 + Part Number: M393B5170EH1-CH9 + +Handle 0x111F, DMI type 17, 28 bytes +Memory Device + Array Handle: 0x1000 + Error Information Handle: Not Provided + Total Width: 72 bits + Data Width: 64 bits + Size: 4096 MB + Form Factor: DIMM + Set: 16 + Locator: DIMM_D8 + Bank Locator: Not Specified + Type: + Type Detail: Synchronous + Speed: 1333 MHz (0.8 ns) + Manufacturer: 80CE80B380CE + Serial Number: 851CFBC9 + Asset Tag: 02101861 + Part Number: M393B5170EH1-CH9 + +Handle 0x1300, DMI type 19, 15 bytes +Memory Array Mapped Address + Starting Address: 0x00000000000 + Ending Address: 0x000DFFFFFFF + Range Size: 3584 MB + Physical Array Handle: 0x1000 + Partition Width: 0 + +Handle 0x1301, DMI type 19, 15 bytes +Memory Array Mapped Address + Starting Address: 0x00100000000 + Ending Address: 0x0201FFFFFFF + Range Size: 127488 MB + Physical Array Handle: 0x1000 + Partition Width: 0 + +Handle 0x2000, DMI type 32, 11 bytes +System Boot Information + Status: No errors detected + +Handle 0x2600, DMI type 38, 18 bytes +IPMI Device Information + Interface Type: KCS (Keyboard Control Style) + Specification Version: 2.0 + I2C Slave Address: 0x10 + NV Storage Device: Not Present + Base Address: 0x0000000000000CA8 (I/O) + Register Spacing: 32-bit Boundaries + +Handle 0x2900, DMI type 41, 11 bytes +Unknown Type + Header and Data: + 29 0B 00 29 01 85 01 00 00 01 00 + Strings: + Embedded NIC 1 + +Handle 0x2901, DMI type 41, 11 bytes +Unknown Type + Header and Data: + 29 0B 01 29 01 85 02 00 00 01 01 + Strings: + Embedded NIC 2 + +Handle 0x2902, DMI type 41, 11 bytes +Unknown Type + Header and Data: + 29 0B 02 29 01 85 03 00 00 02 00 + Strings: + Embedded NIC 3 + +Handle 0x2903, DMI type 41, 11 bytes +Unknown Type + Header and Data: + 29 0B 03 29 01 85 04 00 00 02 01 + Strings: + Embedded NIC 4 + +Handle 0x2904, DMI type 41, 11 bytes +Unknown Type + Header and Data: + 29 0B 04 29 01 8A 04 00 00 05 00 + Strings: + Integrated SAS + +Handle 0x2905, DMI type 126, 11 bytes +Inactive + +Handle 0x2906, DMI type 41, 11 bytes +Unknown Type + Header and Data: + 29 0B 06 29 01 83 04 00 00 0A 18 + Strings: + Embedded Video + +Handle 0xD000, DMI type 208, 16 bytes +OEM-specific Type + Header and Data: + D0 10 00 D0 02 00 FE 00 44 04 00 00 01 01 00 00 + +Handle 0xD200, DMI type 210, 12 bytes +OEM-specific Type + Header and Data: + D2 0C 00 D2 F8 03 04 03 06 80 04 05 + +Handle 0xD400, DMI type 212, 127 bytes +OEM-specific Type + Header and Data: + D4 7F 00 D4 70 00 71 00 00 10 2D 2E 42 00 11 FE + 01 43 00 11 FE 00 70 01 11 9F 20 6F 01 11 9F 00 + 00 00 11 9F 20 00 00 11 9F 00 31 40 11 FB 00 32 + 40 11 FB 04 9D 00 11 FD 02 9E 00 11 FD 00 9F 00 + 26 FE 01 A0 00 26 FE 00 28 40 26 DF 20 29 40 26 + DF 00 38 02 27 BF 40 39 02 27 BF 00 F1 01 27 FC + 01 F2 01 27 FC 02 F3 01 27 FC 03 F5 01 27 F3 04 + F6 01 27 F3 08 F7 01 27 F3 0C FF FF 00 00 00 + +Handle 0xD401, DMI type 212, 252 bytes +OEM-specific Type + Header and Data: + D4 FC 01 D4 70 00 71 00 03 40 5A 6D 5C 00 78 BF + 40 5D 00 78 BF 00 6C 01 57 FC 00 6B 01 57 FC 01 + 6A 01 57 FC 02 12 02 57 EF 00 11 02 57 EF 10 00 + 00 5B FB 04 00 00 5B FB 00 77 01 54 FC 00 78 01 + 54 FC 01 79 01 54 FC 02 7A 01 54 FC 03 33 40 54 + CF 00 34 40 54 CF 10 35 40 54 CF 20 36 40 54 CF + 30 1A 40 54 FB 04 1B 40 54 FB 00 1C 40 54 F7 08 + 1D 40 54 F7 00 43 40 58 DF 20 42 40 58 DF 00 24 + 40 58 BF 40 25 40 58 BF 00 6E 00 58 FC 01 2D 00 + 58 FC 02 DA 01 58 FC 03 22 40 58 EF 10 23 40 58 + EF 00 BB 00 58 F3 04 BC 00 58 F3 08 DB 01 58 F3 + 0C 2D 02 55 FE 01 2E 02 55 FE 00 D8 00 55 7F 80 + D9 00 55 7F 00 54 02 56 DF 00 57 02 56 DF 20 4D + 02 56 BF 00 4E 02 56 BF 40 2D 01 56 7F 80 2E 01 + 56 7F 00 00 C0 5C 00 0A 03 C0 67 00 05 83 00 76 + 00 00 84 00 77 00 00 FF FF 00 00 00 + +Handle 0xD402, DMI type 212, 177 bytes +OEM-specific Type + Header and Data: + D4 B1 02 D4 72 00 73 00 00 C0 DD DE D3 00 80 00 + 02 D4 00 82 00 02 D5 00 84 00 02 D6 00 86 00 02 + 4A 01 C6 BF 40 4B 01 C6 BF 00 00 90 AC 00 00 01 + 90 AD 00 00 00 00 C9 EB 14 00 00 C9 EF 10 DA 00 + C9 FB 04 00 00 C9 EB 00 00 00 C9 7F 00 00 00 C9 + 7F 80 CA 00 C9 FC 00 CB 00 C9 FC 01 00 00 C9 FC + 02 DE 00 E3 FE 01 26 40 C2 FE 01 27 40 C2 FE 00 + 17 01 CA FE 00 18 01 CA FE 01 00 00 CA FD 00 00 + 00 CA FD 02 35 01 CB FC 00 37 01 CB FC 01 02 40 + C6 DF 00 01 40 C6 DF 20 FC 01 C5 BF 00 FD 01 C5 + BF 40 00 00 C5 7F 80 00 00 C5 7F 00 FF FF 00 00 + 00 + +Handle 0xD403, DMI type 212, 132 bytes +OEM-specific Type + Header and Data: + D4 84 03 D4 72 00 73 00 00 C0 DD DE 32 02 C0 07 + 10 31 02 C0 07 20 6F 02 C0 07 30 70 02 C0 07 40 + 71 02 C0 07 50 72 02 C0 07 60 6E 02 C0 07 00 00 + 00 C6 FE 00 00 00 C6 FE 01 40 01 C7 EF 10 41 01 + C7 EF 00 C4 01 D0 FE 00 C5 01 D0 FE 01 73 01 D0 + BF 40 74 01 D0 BF 00 AB 02 D0 DF 20 AC 02 D0 DF + 00 A9 02 D0 EF 10 AA 02 D0 EF 00 6A 02 DB FE 00 + 6B 02 DB FE 01 7B 02 DB FD 00 7C 02 DB FD 02 FF + FF 00 00 00 + +Handle 0xD800, DMI type 216, 9 bytes +OEM-specific Type + Header and Data: + D8 09 00 D8 01 02 01 00 00 + Strings: + MATROX + VGA/VBE BIOS, Version V3.8WO + +Handle 0xDE00, DMI type 222, 16 bytes +OEM-specific Type + Header and Data: + DE 10 00 DE 01 08 FF FF 00 00 00 00 00 00 00 01 + +Handle 0x7F00, DMI type 127, 4 bytes +End Of Table + diff --git a/doc/dev/todo/TAKEME b/doc/dev/todo/TAKEME index a3d74661..5439a1b9 100644 --- a/doc/dev/todo/TAKEME +++ b/doc/dev/todo/TAKEME @@ -5,26 +5,13 @@ Feel free to pick one! CORE ---- -- Inconsistent error messages if object is not existing! - -> always use "Object undefined" -- Add echo function / beautify output - __cdist_echo [level] [messages...] - level := syslog alike: - debug, notice, err - Include object_self prefixing, if given! -- Think about moving cdist-type-build-emulation out of cdist-manifest-run to - cdist-deploy-to: more dependency of cdist-manifest-run, but a lot of - less cycles consumed - -- cdist-object-gencode: remove code if output empty? - - also take care of that in cdist-code-run! -- Remove cdist-object-push, covers only one line and is used only once: - [20:22] kr:bin% grep cdist-object-push * - cdist-object-run: cdist-object-push "$__cdist_target_host" "$__cdist_object" - [20:22] kr:bin% - - probably remove or improve cdist-type-template -- add $__tmp? +- allow cdist to run without $PATH setup: ./bin/cdist-deploy-to +- support non-ssh access? + +USER INTERFACE +-------------- +- add support $__tmp? - for use in manifest, code, etc.? - for creating temporary files, etc. @@ -36,18 +23,11 @@ CORE -> for current host -> add function to cdist-config, import from cdist-cache -- check all all internal variables are prefixed with __cdist - Define / document "this is what should be on host X" and have it parsable by different (shinken) tool -> given after manifest run already! -- Allow types to have parameters without values (boolean flags). - e.g. __chair fancychair --pink --wood - would result in: - $__object/parameter/ - pink # empty file - wood # empty file - +- use absent/present for state by default? TYPES ------ @@ -64,5 +44,3 @@ DOCUMENTATION - asciidoc interprets __, which we use for variables names -> seek through docs and replace with \_\_! - reference explorers in cdist-reference! -- compare running times: - one, 5, 10, 50, 100, 1000 hosts => how does cdist scale? diff --git a/doc/dev/todo/niconext b/doc/dev/todo/niconext index 5ba529ad..84745512 100644 --- a/doc/dev/todo/niconext +++ b/doc/dev/todo/niconext @@ -1 +1,43 @@ -Catch broken instances in cdist-mass-deploy -p and report broken deployements at the end! +2.0.1: + +- Rewrite cdist-type-emulator + - Remove legacy code in cdist + - Remove cdist-config + - Remove man1/cdist-type-emulator.text + - Remove the PATH=... part from the README + + - how to access output dir? + + Test: + __cdist_type_base_dir=$(pwd -P)/conf/type __file + +- Fix / rewrite cdist-quickstart + +-------------------------------------------------------------------------------- + +- Initial install support + - setup $__install = "yes" for + manifest(s), gencode-* + + - run standard manifest (?) + - creates initial objects + - only those having the installer flag? + - requires changegs to cdist-type-emulator! + - Goto Rewrite cdist-type-emulator + + - run all other manifests + - creates all objects + - what about type explorer? + - do not run, create empty output (types should be able + to handle this!) + via __global/ + +- Support parallel execution + - and maximum number of parallel runs (-p X) + - error handling / report failed hosts + +- Allow manifest to be read from stdin +- Create new video for cdist 2.0.0 + http://www.youtube.com/watch?v=PRMjzy48eTI + +- Setup __debug, if -d is given, so other tools can reuse it diff --git a/doc/man/cdist-reference.text.sh b/doc/man/cdist-reference.text.sh index 90efc0f8..e38f157d 100755 --- a/doc/man/cdist-reference.text.sh +++ b/doc/man/cdist-reference.text.sh @@ -164,25 +164,25 @@ __manifest:: Available for: initial manifest __global:: Directory that contains generic output like explorer. - Available for: initial manifest, type manifest, type explorer, type codegen + Available for: initial manifest, type manifest, type gencode __object:: Directory that contains the current object. - Available for: type manifest, type explorer, type codegen + Available for: type manifest, type explorer, type gencode __object_id:: The type unique object id. - Available for: type manifest, type explorer, type codegen -__self:: + Available for: type manifest, type explorer, type gencode +__object_fq:: The full qualified name of the current object. - Available for: type manifest, type explorer, type codegen + Available for: type manifest, type explorer, type gencode __target_host:: The host we are deploying to. - Available for: initial manifest, type manifest, type codegen + Available for: initial manifest, type manifest, type gencode __target_user:: User to use for authentication on remote host. Currently static in core. __type:: Path to the current type. - Available for: type manifest + Available for: type manifest, type gencode __type_explorer:: Directory that contains the type explorers. Available for: type explorer diff --git a/doc/man/man1/cdist-cache.text b/doc/man/man1/cdist-cache.text deleted file mode 100644 index 54619199..00000000 --- a/doc/man/man1/cdist-cache.text +++ /dev/null @@ -1,31 +0,0 @@ -cdist-cache(1) -============== -Nico Schottelius - - -NAME ----- -cdist-cache - Cache output of last run - - -SYNOPSIS --------- -cdist-cache TARGET_HOST - - -DESCRIPTION ------------ -cdist-cache moves away the objects created during last run so the -next run can use the previous information and compare them with -the current status. - - -SEE ALSO --------- -cdist(7) - - -COPYING -------- -Copyright \(C) 2011 Nico Schottelius. Free use of this software is -granted under the terms of the GNU General Public License version 3 (GPLv3). diff --git a/doc/man/man1/cdist-code-run.text b/doc/man/man1/cdist-code-run.text deleted file mode 100644 index e5d8c976..00000000 --- a/doc/man/man1/cdist-code-run.text +++ /dev/null @@ -1,34 +0,0 @@ -cdist-code-run(1) -================= -Nico Schottelius - - -NAME ----- -cdist-code-run - Run explorer remotely - - -SYNOPSIS --------- -cdist-code-run OBJECT_DIR OBJECT TYPE - - -DESCRIPTION ------------ -cdist-code-run executes generated code from a given OBJECT. -The OBJECT must be located below OBJECT_DIR. -TYPE must be either local or remote and determines which -code part is to be executed. - - -SEE ALSO --------- -- cdist(7) -- cdist-object-gencode(1) -- cdist-object-gencode-all(1) - - -COPYING -------- -Copyright \(C) 2011 Nico Schottelius. Free use of this software is -granted under the terms of the GNU General Public License version 3 (GPLv3). diff --git a/doc/man/man1/cdist-deploy-to.text b/doc/man/man1/cdist-deploy-to.text deleted file mode 100644 index f42a0509..00000000 --- a/doc/man/man1/cdist-deploy-to.text +++ /dev/null @@ -1,43 +0,0 @@ -cdist-deploy-to(1) -================== -Nico Schottelius - - -NAME ----- -cdist-deploy-to - Deploy configuration to host - - -SYNOPSIS --------- -cdist-deploy-to HOSTNAME - - -DESCRIPTION ------------ -Deploy configurations to the specified host, as configured in the initial -manifest. This script triggers the execution of several other scripts, in so -called stages. It is intented to run either from the command line or from cron. - - -ENVIRONMENT ------------ -If the environment variable **__cdist_conf_dir** is not set, the -configuration is read from /conf. The local output directory can -be changed by the variable **__cdist_local_base_dir**. All environment -variables are handled by cdist-config. - - -SEE ALSO --------- -- cdist(7) -- cdist-config(1) -- cdist-mass-deploy(1) -- cdist-reference(7) -- cdist-stages(7) - - -COPYING -------- -Copyright \(C) 2010-2011 Nico Schottelius. Free use of this software is -granted under the terms of the GNU General Public License version 3 (GPLv3). diff --git a/doc/man/man1/cdist-dir.text b/doc/man/man1/cdist-dir.text deleted file mode 100644 index 223bc779..00000000 --- a/doc/man/man1/cdist-dir.text +++ /dev/null @@ -1,38 +0,0 @@ -cdist-dir(1) -============ -Nico Schottelius - - -NAME ----- -cdist-dir - Poor man's directory synchronisation - - -SYNOPSIS --------- -cdist-dir TARGET_HOST SRC_DIR DST_DIR - - -DESCRIPTION ------------ -cdist-dir either pushes a local directory to the target host -or pulls a remote directory from a target host to the local host. - -In the push case SRC_DIR is local, in the pull case remote. -In the push case DST_DIR is remote, in the pull case local. - -cdist-dir does not cleanup DST_DIR and thus it may contain old -stuff if used multiple times. - -cdist-dir does not rely on rsync or other high level tools, because -it cannot expect its existence on the local or target host. - -SEE ALSO --------- -cdist(7) - - -COPYING -------- -Copyright \(C) 2011 Nico Schottelius. Free use of this software is -granted under the terms of the GNU General Public License version 3 (GPLv3). diff --git a/doc/man/man1/cdist-explorer-run-global.text b/doc/man/man1/cdist-explorer-run-global.text deleted file mode 100644 index f4b32dfb..00000000 --- a/doc/man/man1/cdist-explorer-run-global.text +++ /dev/null @@ -1,31 +0,0 @@ -cdist-explorer-run-global(1) -============================ -Nico Schottelius - - -NAME ----- -cdist-explorer-run-global - Run the global explorers - - -SYNOPSIS --------- -cdist-explorer-run-global HOSTNAME - - -DESCRIPTION ------------ -Transfer the global explorers to HOSTNAME, execute them and transfer -back the results. - - -SEE ALSO --------- -- cdist(7) -- cdist-deploy-to(1) - - -COPYING -------- -Copyright \(C) 2011 Nico Schottelius. Free use of this software is -granted under the terms of the GNU General Public License version 3 (GPLv3). diff --git a/doc/man/man1/cdist-manifest-run-init.text b/doc/man/man1/cdist-manifest-run-init.text deleted file mode 100644 index 3a3265dc..00000000 --- a/doc/man/man1/cdist-manifest-run-init.text +++ /dev/null @@ -1,32 +0,0 @@ -cdist-manifest-run-init(1) -========================== -Nico Schottelius - - -NAME ----- -cdist-manifest-run-init - Run the initial manifest - - -SYNOPSIS --------- -cdist-manifest-run-init HOSTNAME - - -DESCRIPTION ------------ -cdist-manifest-run-init executes the initial manifest, which creates -the first objects. - - -SEE ALSO --------- -- cdist(7) -- cdist-deploy-to(1) -- cdist-manifest-run-all(1) - - -COPYING -------- -Copyright \(C) 2011 Nico Schottelius. Free use of this software is -granted under the terms of the GNU General Public License version 3 (GPLv3). diff --git a/doc/man/man1/cdist-manifest-run.text b/doc/man/man1/cdist-manifest-run.text deleted file mode 100644 index 8cd6b513..00000000 --- a/doc/man/man1/cdist-manifest-run.text +++ /dev/null @@ -1,31 +0,0 @@ -cdist-manifest-run(1) -===================== -Nico Schottelius - - -NAME ----- -cdist-manifest-run - Run a given manifest - - -SYNOPSIS --------- -cdist-manifest-run HOSTNAME MANIFEST - - -DESCRIPTION ------------ -cdist-manifest-run executes the given MANIFEST. - - -SEE ALSO --------- -- cdist(7) -- cdist-deploy-to(1) -- cdist-manifest-run-init(1) - - -COPYING -------- -Copyright \(C) 2011 Nico Schottelius. Free use of this software is -granted under the terms of the GNU General Public License version 3 (GPLv3). diff --git a/doc/man/man1/cdist-mass-deploy.text b/doc/man/man1/cdist-mass-deploy.text deleted file mode 100644 index ac495b21..00000000 --- a/doc/man/man1/cdist-mass-deploy.text +++ /dev/null @@ -1,41 +0,0 @@ -cdist-mass-deploy(1) -==================== -Nico Schottelius - - -NAME ----- -cdist-mass-deploy - Deploy configuration to many hosts - - -SYNOPSIS --------- -cdist-mass-deploy [-p] HOSTNAME [HOSTNAME ...] - - -DESCRIPTION ------------ -cdist-mass-deploy is essentially a wrapper around cdist-deploy-to to -be able to deploy to many hosts on one command line. - - -EXAMPLES --------- -Deploy in parallel to all hosts specfied in the dsh group configuration ikr, -which is prefixed by "root@": - --------------------------------------------------------------------------------- -cdist-mass-deploy -p $(cat ~/.dsh/group/ikr | sed 's/^root@//') --------------------------------------------------------------------------------- - - -SEE ALSO --------- -- cdist(7) -- cdist-deploy-to(1) - - -COPYING -------- -Copyright \(C) 2010-2011 Nico Schottelius. Free use of this software is -granted under the terms of the GNU General Public License version 3 (GPLv3). diff --git a/doc/man/man1/cdist-object-all.text b/doc/man/man1/cdist-object-all.text deleted file mode 100644 index 06d45268..00000000 --- a/doc/man/man1/cdist-object-all.text +++ /dev/null @@ -1,31 +0,0 @@ -cdist-object-all(1) -=================== -Steven Armstrong - - -NAME ----- -cdist-object-all - Run the given command on all objects - - -SYNOPSIS --------- -cdist-object-all HOSTNAME COMMAND - - -DESCRIPTION ------------ -Iterates over all defined objects and executes the given command on each -of them. - - -SEE ALSO --------- -- cdist(7) -- cdist-type(1) - - -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). diff --git a/doc/man/man1/cdist-object-code-run.text b/doc/man/man1/cdist-object-code-run.text deleted file mode 100644 index f8bae6a4..00000000 --- a/doc/man/man1/cdist-object-code-run.text +++ /dev/null @@ -1,32 +0,0 @@ -cdist-object-code-run(1) -======================== -Nico Schottelius - - -NAME ----- -cdist-object-code-run - Execute the generated code for a object - - -SYNOPSIS --------- -cdist-object-code-run HOSTNAME OBJECT - - -DESCRIPTION ------------ -Execute the local and remote code for the given object. - - -SEE ALSO --------- -- cdist(7) -- cdist-object-run(1) -- cdist-code-run(1) -- cdist-run-remote(1) - - -COPYING -------- -Copyright \(C) 2011 Nico Schottelius, Steven Armstrong. Free use of this software is -granted under the terms of the GNU General Public License version 3 (GPLv3). diff --git a/doc/man/man1/cdist-object-explorer-run.text b/doc/man/man1/cdist-object-explorer-run.text deleted file mode 100644 index a791681e..00000000 --- a/doc/man/man1/cdist-object-explorer-run.text +++ /dev/null @@ -1,31 +0,0 @@ -cdist-object-explorer-run(1) -============================ -Nico Schottelius - - -NAME ----- -cdist-object-explorer-run - Run type explorers for a object - - -SYNOPSIS --------- -cdist-object-explorer-run HOSTNAME OBJECT - - -DESCRIPTION ------------ -Runs the explorers for the given object on the target host. - - -SEE ALSO --------- -- cdist(7) -- cdist-deploy-to(1) -- cdist-remote-explorer-run(1) - - -COPYING -------- -Copyright \(C) 2011 Nico Schottelius, Steven Armstrong. Free use of this software is -granted under the terms of the GNU General Public License version 3 (GPLv3). diff --git a/doc/man/man1/cdist-object-gencode-run.text b/doc/man/man1/cdist-object-gencode-run.text deleted file mode 100644 index 7705815c..00000000 --- a/doc/man/man1/cdist-object-gencode-run.text +++ /dev/null @@ -1,32 +0,0 @@ -cdist-object-gencode-run(1) -=========================== -Nico Schottelius - - -NAME ----- -cdist-object-gencode-run - Generate code for a object - - -SYNOPSIS --------- -cdist-object-gencode-run HOSTNAME OBJECT - - -DESCRIPTION ------------ -For the given object, generate the code for local and remote execution. - - -SEE ALSO --------- -- cdist(7) -- cdist-code-run(1) -- cdist-object-run(1) -- cdist-object-gencode(1) - - -COPYING -------- -Copyright \(C) 2011 Nico Schottelius, Steven Armstrong. Free use of this software is -granted under the terms of the GNU General Public License version 3 (GPLv3). diff --git a/doc/man/man1/cdist-object-gencode.text b/doc/man/man1/cdist-object-gencode.text deleted file mode 100644 index 83f4b4c1..00000000 --- a/doc/man/man1/cdist-object-gencode.text +++ /dev/null @@ -1,33 +0,0 @@ -cdist-object-gencode(1) -======================= -Nico Schottelius - - -NAME ----- -cdist-object-gencode - Generate code for a given object - - -SYNOPSIS --------- -cdist-object-gencode HOSTNAME OBJECT - - -DESCRIPTION ------------ -For the given object, run the gencode executable. The output of this -executable on stdout will be used by cdist-object-gencode-all(1). - - -SEE ALSO --------- -- cdist(7) -- cdist-code-run(1) -- cdist-deploy-to(1) -- cdist-object-gencode-all(1) - - -COPYING -------- -Copyright \(C) 2011 Nico Schottelius. Free use of this software is -granted under the terms of the GNU General Public License version 3 (GPLv3). diff --git a/doc/man/man1/cdist-object-manifest-run.text b/doc/man/man1/cdist-object-manifest-run.text deleted file mode 100644 index a6f12f78..00000000 --- a/doc/man/man1/cdist-object-manifest-run.text +++ /dev/null @@ -1,31 +0,0 @@ -cdist-object-manifest-run(1) -============================ -Nico Schottelius - - -NAME ----- -cdist-object-manifest-run - Run an objects manifest - - -SYNOPSIS --------- -cdist-object-manifest-run HOSTNAME OBJECT - - -DESCRIPTION ------------ -Run the manifest for the given object. - - -SEE ALSO --------- -- cdist(7) -- cdist-deploy-to(1) -- cdist-manifest-run(1) - - -COPYING -------- -Copyright \(C) 2011 Nico Schottelius, Steven Armstrong. Free use of this software is -granted under the terms of the GNU General Public License version 3 (GPLv3). diff --git a/doc/man/man1/cdist-object-prepare.text b/doc/man/man1/cdist-object-prepare.text deleted file mode 100644 index c91a7b2e..00000000 --- a/doc/man/man1/cdist-object-prepare.text +++ /dev/null @@ -1,35 +0,0 @@ -cdist-object-prepare(1) -======================= -Steven Armstrong - - -NAME ----- -cdist-object-prepare - Prepare an object - - -SYNOPSIS --------- -cdist-object-prepare HOSTNAME OBJECT - - -DESCRIPTION ------------ -Prepare the given object by running it through stage 3 (object information -retrieval) and stage 4 (run the object manifest). -See related man pages for details. - - -SEE ALSO --------- -- cdist(7) -- cdist-stages(7) -- cdist-object-explorer-run(1) -- cdist-object-manifest-run(1) -- cdist-type(1) - - -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). diff --git a/doc/man/man1/cdist-object-push.text b/doc/man/man1/cdist-object-push.text deleted file mode 100644 index 4c960eaa..00000000 --- a/doc/man/man1/cdist-object-push.text +++ /dev/null @@ -1,31 +0,0 @@ -cdist-object-push(1) -==================== -Nico Schottelius - - -NAME ----- -cdist-object-push - Transfer a object to the target host - - -SYNOPSIS --------- -cdist-object-push HOSTNAME OBJECT - - -DESCRIPTION ------------ -Transfers the given object to the target host. - - -SEE ALSO --------- -- cdist(7) -- cdist-object-run(1) -- cdist-type(1) - - -COPYING -------- -Copyright \(C) 2011 Nico Schottelius, Steven Armstrong. Free use of this software is -granted under the terms of the GNU General Public License version 3 (GPLv3). diff --git a/doc/man/man1/cdist-object-run.text b/doc/man/man1/cdist-object-run.text deleted file mode 100644 index fc85a05f..00000000 --- a/doc/man/man1/cdist-object-run.text +++ /dev/null @@ -1,36 +0,0 @@ -cdist-object-run(1) -=================== -Steven Armstrong - - -NAME ----- -cdist-object-run - Run an object - - -SYNOPSIS --------- -cdist-object-run HOSTNAME OBJECT - - -DESCRIPTION ------------ -Applies the given object on the target host by running it through stage 5 -(code generation) and stage 6 (code execution). -See related man pages for details. - - -SEE ALSO --------- -- cdist(7) -- cdist-stages(7) -- cdist-object-gencode-run(1) -- cdist-object-push(1) -- cdist-object-code-run(1) -- cdist-type(1) - - -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). diff --git a/doc/man/man1/cdist-remote-explorer-run.text b/doc/man/man1/cdist-remote-explorer-run.text deleted file mode 100644 index 64951e2c..00000000 --- a/doc/man/man1/cdist-remote-explorer-run.text +++ /dev/null @@ -1,33 +0,0 @@ -cdist-remote-explorer-run(1) -============================ -Nico Schottelius - - -NAME ----- -cdist-remote-explorer-run - Run explorer remotely - - -SYNOPSIS --------- -cdist-remote-explorer-run VARIABLE_NAME EXPLORER_DIR OUT_DIR - - -DESCRIPTION ------------ -cdist-remote-explorer-run is executed on the target. -It sets up the variable VARIABLE_NAME to point to the given -EXPLORER_DIR and runs all explorer found in EXPLORER_DIR. -The output of every run explorer is saved into OUT_DIR. - - -SEE ALSO --------- -- cdist(7) -- cdist-explorer-run-global(1) - - -COPYING -------- -Copyright \(C) 2011 Nico Schottelius. Free use of this software is -granted under the terms of the GNU General Public License version 3 (GPLv3). diff --git a/doc/man/man1/cdist-run-remote.text b/doc/man/man1/cdist-run-remote.text deleted file mode 100644 index ee7a6337..00000000 --- a/doc/man/man1/cdist-run-remote.text +++ /dev/null @@ -1,33 +0,0 @@ -cdist-run-remote(1) -=================== -Nico Schottelius - - -NAME ----- -cdist-run-remote - Execute something on the target - - -SYNOPSIS --------- -cdist-run-remote HOSTNAME EXECUTABLE [ARGUMENTS FOR EXECUTABLE] - - -DESCRIPTION ------------ -cdist-run-remote runs the given executable on the remote host. -It ensures PATH is setup correctly on the target side. - - -SEE ALSO --------- -- cdist(7) -- cdist-object-code-run(1) -- cdist-deploy-to(1) -- cdist-remote-code-run-all(1) - - -COPYING -------- -Copyright \(C) 2011 Nico Schottelius. Free use of this software is -granted under the terms of the GNU General Public License version 3 (GPLv3). diff --git a/doc/man/man1/cdist-type-build-emulation.text b/doc/man/man1/cdist-type-build-emulation.text deleted file mode 100644 index 81c56e7c..00000000 --- a/doc/man/man1/cdist-type-build-emulation.text +++ /dev/null @@ -1,33 +0,0 @@ -cdist-type-build-emulation(1) -============================= -Nico Schottelius - - -NAME ----- -cdist-type-build-emulation - Build executables for types - - -SYNOPSIS --------- -cdist-type-build-emulation OUT_DIR - - -DESCRIPTION ------------ -cdist-type-build-emulation creates a link to cdist-type-emulator -for every TYPE. These links are placed in a OUT_DIR, which -is prepended into $PATH. This way the user can use TYPE in the -manifests like any other executable. - - -SEE ALSO --------- -- cdist(7) -- cdist-type-emulator(1) - - -COPYING -------- -Copyright \(C) 2011 Nico Schottelius. Free use of this software is -granted under the terms of the GNU General Public License version 3 (GPLv3). diff --git a/doc/man/man1/cdist-type-template.text b/doc/man/man1/cdist-type-template.text deleted file mode 100644 index bbd31409..00000000 --- a/doc/man/man1/cdist-type-template.text +++ /dev/null @@ -1,30 +0,0 @@ -cdist-type-template(1) -====================== -Nico Schottelius - - -NAME ----- -cdist-type-template - Create a new type - - -SYNOPSIS --------- -cdist-type-template NAME - - -DESCRIPTION ------------ -cdist-type-template creates a new type and adds the usual files to it. -It is thought to be helpful when writing new types. - - -SEE ALSO --------- -cdist(7) - - -COPYING -------- -Copyright \(C) 2011 Nico Schottelius. Free use of this software is -granted under the terms of the GNU General Public License version 3 (GPLv3). diff --git a/doc/man/man1/cdist.text b/doc/man/man1/cdist.text new file mode 100644 index 00000000..03948036 --- /dev/null +++ b/doc/man/man1/cdist.text @@ -0,0 +1,103 @@ +cdist(1) +======== +Nico Schottelius + + +NAME +---- +cdist - Configuration management + + +SYNOPSIS +-------- +cdist [-h] [-V] + +cdist banner + +cdist config [-h] [-d] [-V] [-c CDIST_HOME] [-i MANIFEST] [-p] [-s] host [host ...] + + + +DESCRIPTION +----------- +cdist is the frontend executable to the cdist configuration management. +cdist supports different as explained below. The options to the main +program are: + +-h, --help:: + Show the help screen + +-V, --version:: + Show version and exit + + +BANNER +------- +Displays the cdist banner. + + +CONFIG +------ +Configure a system + +-h, --help:: + Show the help screen + +-c CDIST_HOME, --cdist-home CDIST_HOME:: + Instead of using the parent of the bin directory as cdist home, + use the specified directory + +-d, --debug:: + Enable debug output + +-i MANIFEST, --initial-manifest MANIFEST:: + Path to a cdist manifest or - to read from stdin + +-p, --parallel:: + Operate on multiple hosts in parallel + +-s, --sequential:: + Operate on multiple hosts sequentially + + +EXAMPLES +-------- + +-------------------------------------------------------------------------------- +# Configure ikq05.ethz.ch with debug enabled +cdist config -d ikq05.ethz.ch + +# Configure hosts in parallel and use a different home directory +cdist config -c ~/p/cdist-nutzung \ + -p ikq02.ethz.ch ikq03.ethz.ch ikq04.ethz.ch + +# Display banner +cdist banner + +# Show help +cdist --help + +# Show Version +cdist --version +-------------------------------------------------------------------------------- + + +ENVIRONMENT +----------- +TMPDIR, TEMP, TMP:: + Setup the base directory for the temporary directory. + See http://docs.python.org/py3k/library/tempfile.html for + more information. This is rather useful, if the standard + directory used does not allow executables. + +SEE ALSO +-------- +- cdist(7) +- cdist-type-emulator(1) +- cdist-reference(7) + + +COPYING +------- +Copyright \(C) 2011 Nico Schottelius. Free use of this software is +granted under the terms of the GNU General Public License version 3 (GPLv3). diff --git a/bin/cdist-quickstart b/doc/man/man7/cdist-quickstart.text similarity index 99% rename from bin/cdist-quickstart rename to doc/man/man7/cdist-quickstart.text index 4d89180c..e146f1a8 100755 --- a/bin/cdist-quickstart +++ b/doc/man/man7/cdist-quickstart.text @@ -249,7 +249,7 @@ fi manifestinit="conf/manifest/init" cat << eof -I'll know setup $manifestinit, containing the following code: +I'll now setup $manifestinit, containing the following code: -------------------------------------------------------------------------------- # Every machine becomes a marker, so sysadmins know that automatic diff --git a/doc/speeches/2011-05-20_cosin.tex b/doc/speeches/2011-05-20_cosin.tex new file mode 100644 index 00000000..f60a660a --- /dev/null +++ b/doc/speeches/2011-05-20_cosin.tex @@ -0,0 +1,242 @@ +% first presentation about cmtp +\pdfminorversion=4 +%\documentclass[ucs]{beamer} +\documentclass{beamer} +%\documentclass[utf8]{beamer} +\usepackage[utf8]{inputenc} +\usepackage{german} +\usepackage{graphicx} +\usepackage{beamerthemesplit} +\setbeamercovered{dynamic} +\usetheme{Malmoe} +\usecolortheme{crane} + +\title{cdist - nutzbare Konfigurationsverwaltung} +\subtitle{Cosin 2011} + +\author{Nico -telmich- Schottelius} + +\date{25. Juni 2011} + +\begin{document} +\frame{\titlepage} + +%\section[Outline]{} +\frame{\tableofcontents} + +\section{Einleitung} +\frame +{ + \frametitle{Was ist das Problem?} + \begin{itemize} + \item Einmal konfigurieren = toll + \item Zweimal konfigurieren = naja, ... + \item Neue Sachen machen mehr Spass als alte wiederholen + \item Viele Rechner = viel Mühe? + \end{itemize} +} + +\frame +{ + \frametitle{Das ist nicht neu...} + \begin{itemize} + \item cfengine + \item Puppet + \item bcfg2 + \item chef + \item ... + \end{itemize} +} + +\frame +{ + \frametitle{Warum cdist?} + \begin{itemize} + \item Klein + \item Unix + \item Leicht zu bedienen + \item ... zu erweitern + \item Shell + \item Weil es Spaß macht! + \end{itemize} +} + +\section{Installieren} +\frame +{ + \frametitle{Vorraussetzungen} + \begin{itemize} + \item sshd + \item root login via sshd + \item Besser: ssh-pubkey konfiguriert (PermitRootLogin without-password) + \item git + \item Asciidoc für dia manpages + \end{itemize} +} + +\frame +{ + \frametitle{Installation} + \begin{center} + git clone git://git.schottelius.org/cdist + \end{center} +} + +\begin{frame}[fragile] + \frametitle{Erstellen der Manpages} + + \begin{verbatim} + # Braucht asciidoc / a2x + ./build.sh man + \end{verbatim} +\end{frame} + +\section{Nutzen} +\begin{frame}[fragile] + \frametitle{Vorbereitung PATH und MANPATH} + + \begin{verbatim} + cd cdist + eval `./bin/cdist-env` + echo $PATH + echo $MANPATH + \end{verbatim} +\end{frame} + +\begin{frame}[fragile] + \frametitle{Nun los} + \begin{verbatim} + # Fangen wir bei uns an + cdist-deploy-to localhost + \end{verbatim} +\end{frame} + +\begin{frame}[fragile] + \frametitle{Der Einstiegspunkt} + \begin{small} + \begin{verbatim} + cat << eof > conf/manifest/init + __file /etc/cdist-configured + + case "$__target_host" in + localhost) + __link /tmp/cdist-testfile \ + --source /etc/cdist-configured \ + --type symbolic + __addifnosuchline /tmp/cdist-welcome \ + --line "Welcome to cdist" + ;; + esac + eof + # Muss ausführbar sein + chmod u+x conf/manifest/init + + \end{verbatim} + \end{small} +\end{frame} + +\begin{frame}[fragile] + \frametitle{Nun los} + \begin{verbatim} + # Nun läuft es! + cdist-deploy-to localhost + \end{verbatim} +\end{frame} + +\frame +{ + \frametitle{Funktionalität zusammenfassen} + \begin{itemize}[<+->] + \item "`Typen"' (types) + \item conf/type/* + \item \_\_ vor jedem Namen (Shell-Umgebung) + \item z.B. Netzseite, Mailserver, Wiki, ... + \end{itemize} +} + +\begin{frame}[fragile] + \frametitle{Ein neuer Typ} + \begin{small} + \begin{verbatim} + % mkdir conf/type/__my_mailserver + % cat << eof > conf/type/__my_mailserver/manifest + # Dieser Typ konfiguriert meinen Mailserver + require="__package/nullmailer" \ + __file /etc/nullmailer/remotes \ + --source "$__type/files/remotes" + + # Reihenfolge spielt keine Rolle + __package nullmailer --state installed + eof + \end{verbatim} + \end{small} +\end{frame} + +\begin{frame}[fragile] + \frametitle{Ein neuer Typ (2)} + \begin{small} + \begin{verbatim} + # Wichtig: Wird ausgeführt + % chmod u+x conf/type/__my_mailserver/manifest + + # Darf nur einmal verwendet werden pro Rechner + % touch conf/type/__my_mailserver/singleton + + # Nullmailer Konfiguration + % mkdir conf/type/__my_mailserver/files + % echo my.fancy.smart.host > \ + conf/type/__my_mailserver/files/remotes + \end{verbatim} + \end{small} +\end{frame} + +\begin{frame}[fragile] + \frametitle{Neuen Typ nutzen} + \begin{small} + \begin{verbatim} + % $EDITOR conf/manifest/init + + case "$__target_host" in + localhost) + ... + __my_mailserver + ... + ;; + \end{verbatim} + \end{small} +\end{frame} + +\section{Aktualisieren} +\begin{frame}[fragile] + \frametitle{Versionen} + \begin{itemize}[<+->] + \item x.y: Stabile Version + \item master: Entwicklung + \end{itemize} +\end{frame} + +\begin{frame}[fragile] + \frametitle{Stabile Version auswählen} + \begin{center} + git checkout -b 1.7 origin/1.7 + \end{center} +\end{frame} + +\begin{frame}[fragile] + \frametitle{Aktualisieren} + \begin{center} + git pull + \end{center} +\end{frame} + +\frame +{ + \frametitle{Ende} + \begin{block}{Das war's} + Viel Spaß - Mehr Infos gibt's auf http://www.nico.schottelius.org/software/cdist/\\ + und http://l.schottelius.org/pipermail/cdist + \end{block} +} + + +\end{document} diff --git a/other/examples/nico/conf/type/__nico_afs/files/afs/CellServDB b/other/examples/nico/conf/type/__nico_afs/files/afs/CellServDB new file mode 100644 index 00000000..dbd238d7 --- /dev/null +++ b/other/examples/nico/conf/type/__nico_afs/files/afs/CellServDB @@ -0,0 +1,2 @@ +>eof +129.132.186.89 # sgv-afs-sur5r diff --git a/other/examples/nico/conf/type/__nico_afs/files/afs/ThisCell b/other/examples/nico/conf/type/__nico_afs/files/afs/ThisCell new file mode 100644 index 00000000..37fb719b --- /dev/null +++ b/other/examples/nico/conf/type/__nico_afs/files/afs/ThisCell @@ -0,0 +1 @@ +eof diff --git a/other/examples/nico/conf/type/__nico_afs/files/krb5/krb5.conf b/other/examples/nico/conf/type/__nico_afs/files/krb5/krb5.conf new file mode 100644 index 00000000..3b8259cb --- /dev/null +++ b/other/examples/nico/conf/type/__nico_afs/files/krb5/krb5.conf @@ -0,0 +1,28 @@ +[libdefaults] + default_realm = EOF + +# The following krb5.conf variables are only for MIT Kerberos. + krb4_config = /etc/krb.conf + krb4_realms = /etc/krb.realms + kdc_timesync = 1 + ccache_type = 4 + forwardable = true + proxiable = true + allow_weak_crypto = true + +[realms] + EOF = { + kdc = sgv-afs-sur5r.ethz.ch + admin_server = sgv-afs-sur5r.ethz.ch + } + + +[login] + krb4_convert = true + krb4_get_tickets = false + +[logging] + default = FILE:/var/log/krb5.log + kdc = FILE:/var/log/krb5kdc/kdc.log + admin_server = FILE:/var/log/krb5kdc/kadmin.log + diff --git a/other/examples/nico/conf/type/__nico_afs/files/ssh/JAS.pub b/other/examples/nico/conf/type/__nico_afs/files/ssh/JAS.pub new file mode 100644 index 00000000..222410d5 --- /dev/null +++ b/other/examples/nico/conf/type/__nico_afs/files/ssh/JAS.pub @@ -0,0 +1 @@ +ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQC/Gbl64LT3VD5hsVtk1w670S2gue1OaW9XLg/Vk/iBqsYYrLGZh+TXJsAsXOSF1sZH6QSdNlpzTPsno9KFCTQTNlYe0IrWPGRrFGw1or3M6OugJrMeSiMYQ5nhH6HMjhzCFHH8Xh4Yku8fgi3ejPpySW8umx7nBL7ndiEJ9Y+lixNWMirEPLpz9YufFm9u8GX6bPrmjIBz6EhfxaqJ2N/N6gQB+4PmNopzqWHm+n4LToA9N8qwetSfhgEg7DVaD9SrJNjNTGSgii6CritT9sF8ZBq5CZG58DTyrxCndhhHte5OCGMb5ENgO4OBHA0MrD56unHrdAZCCosa9rI+pIll abr@cltHome03 diff --git a/other/examples/nico/conf/type/__nico_afs/files/ssh/bugblue.pub b/other/examples/nico/conf/type/__nico_afs/files/ssh/bugblue.pub new file mode 100644 index 00000000..cccbe02f --- /dev/null +++ b/other/examples/nico/conf/type/__nico_afs/files/ssh/bugblue.pub @@ -0,0 +1 @@ +ssh-rsa AAAAB3NzaC1yc2EAAAABIwAAAQEA17fnWJMTAuIvWcdnsasdfEkBabeXEhYaR03Qc/KBpS+iToSeUzlc5SeXoAczqSMsC0uYpDnhll9q3aAN82Xo06RI2ytd7TeXvFcVwzvXB+sNUsvtyPZ5Uyx7d2WTI87bm169KhGTJCaww8p+qa2UhkjOOaXZwMGjkHlvZ3WSZr5mLar9O3r4PG8SIqoFF0m+tcc2fcWIK3df3jWIk8g6j/jTaoIa18qsK/rtO90Ql20FMQJOZTKGKjHIOx2FLnXY5WKrXmXyyffgFpqi1rUAkCkjCKnm65fDjecn6FplzSUuZo/IB2GnHGNQVnNkU/18/G8KQKu9clkMxuUl8DYJBQ== bugblue@jabber.eof.name diff --git a/other/examples/nico/conf/type/__nico_afs/files/ssh/docsteel.pub b/other/examples/nico/conf/type/__nico_afs/files/ssh/docsteel.pub new file mode 100644 index 00000000..4b40d089 --- /dev/null +++ b/other/examples/nico/conf/type/__nico_afs/files/ssh/docsteel.pub @@ -0,0 +1 @@ +ssh-rsa AAAAB3NzaC1yc2EAAAABIwAAAQEA1xfKoN8D3I0uGvc66E2cpnutdgALbSVIIWy0SBGV1ZLA4CehAL5BpMO0EI1TfH4LGgpjg+CnLXOSMd+bnvWjPTxGUbGcmK45UYCyn1LzSAfVKi9Mr06wbvQj0h5w1zEAwDqt63SHGjGOHO4TeCSrPxEROPMbZ1mP1ECsb4f+3WLWE5icbzOb/QMx2zNDd29rVvFJiJMOg4AiIs7pl/T7Qxg2yN6YlDIXSXLiE2i98O26kBNWRgAFcTNBqoUs5AkZ2F4LPUGbyuLpV+wtlpYcQXOUTLoRlKw+ovBQH3L6ae9n6+rFTIEEAS08C0MOzQPC3QjmfRMC8mxVkn22XnpHbQ== default diff --git a/other/examples/nico/conf/type/__nico_afs/files/ssh/downhill.pub b/other/examples/nico/conf/type/__nico_afs/files/ssh/downhill.pub new file mode 100644 index 00000000..bde07c29 --- /dev/null +++ b/other/examples/nico/conf/type/__nico_afs/files/ssh/downhill.pub @@ -0,0 +1 @@ +ssh-dss AAAAB3NzaC1kc3MAAAIBAMiYvUWD0Yq3vm2Dp6xJCGvRGcGIyiT8+07FQJvAWUAzudyhA9r+h58gm4uCUJTV5W33Npf70Id5LSxyZJA7LcdTXTuMxhVfERURcT/GgtxCrs+aMguitNvf7QVuiKBrvuBmBPMV/6k8UEwf/7eCQRjoXE4jxEYKUT9SW8X94wuH0HUqOqBRD2F21uMrmLgDkb12RK/9yFRV3c7waOSQU/QtO+VFwPvBNDqUTqBL0LOJJif449vMxboOZ1noS94K0Lyfz9yOGEwBYck11c2UzH4KXbv8qNpYgtuCmDjZFM2J8dnhWJgkmThZtmyfnNFbHlW0HZItVvkqLZMPDlCIqR77J9OC4lawjrX2FFKhAzcrJuw7WXr2PcFKQUh/TiypcM5f6zuU3fs2+8ZYQdwvU6j/QNW4A/zqud7v/hjAMYCVe0EIWf2Qt0SS/nFLh7dZRGV21nK9Vq0zDncVPTgDl7/L62TYieO/j/1X3HjEp2JbR+mjBWsfKM7WYZDP16xiQzBuhr0vItnKMyN9V4AbDthjqesezKuXIhv0jP1z40MppM9mr40FJpgRSY3hyt3cZQKoO2vVJevnJMuufLheocAxo037f2PUpmSiJDOF1dLywmS2Gqk4GgzNN40IPrOcz0umtKjMAtXeU6MeapfmmEbwk+2zOo75gUt6SWU8UiFhAAAAFQC/Fm0V7OYGdazrUNuyn7mcPknZhQAAAgBzO496WPYnn7/H336kdMOUoue4Kgr9shpgjyyTJ8K9UsFwm+IEh9iS0QKPgGnj54AY1FpspfrbCmRI0tma+pj2QlnRRwIGcHd7eh2nCOmr+DSD/36VmoRPvGZaJDSTVotN+qgyjddNhCGx0417fqHXSKypbASphBqyvcKwkpk8S7o5nkMeOhufeCNdTHYsenKha4W+p8srGBsIZBISNeaGAsESIK4LuaShuolciTXtT7Nsqo123EXmjdHrT7DHQuwKI+jJpvHcz/UrissLs1JD+lFLOE07lkHPDc4KKK6IDUjm/DzsVTlTWdrcn8wUZ7fhUTt7e8UDNHs6bMlnhtVkXEsHS3sbYRsbF9179jufUumXKLKkjLzpTZwni8D6GxnjUn51hQ9Ifb9UOlSlkRq+cqOU+TRQd5aQSdiXy5Ymao719MHBrAhH1aLbi9pk4VO3GGFNy/w54ZY2LRIXZsGMBgFTXzHyzqv1ejeQtOuQZw9xOzt9IZU3WuMKVGGR9D61rsgxbGI1aWGaDlyhMSL9LYyqkmEqVqnAyydAVmhpSxhoXjbDrwE/IRdjJwjlK/6NxUck9g7Ekc9pHrow0OmqH9k6SCd2npXBUybTXPYqwHUjY/KccJsW0Ia2OECGN6KgNWdSfFeAGJBrv2ct78laSyNgIguM+0MNOZQSr6QfSQAAAgEAqkHqwfmEtrlc7hKtvenEf4Dkgt6H33U7MJILNOo9qrn/StDeuuO1snbO2wbd8weJop7gnp29zJGRKYcs/p2T3YjOd9R6aRGLOlT+jEZjP1RMPeuT7W4UFajP34SezYc1MAMeT9wkABEBQyj6s+4CvC2tKJWoirziAvkSPfkYdOc3u9I1LuXHu21tP+Lky3K9KylsbnHDG6vw05GH3HbeXIa6LtxAkXiPp/+r0dABO5NzglHS36uaD4mbQGh2dIzWPm4j8mLrjg911R8XnLPdTgT2EB9mvXksLjWEEq7qzTSdacFG0127O+i4Be3h1+5wG5HM8ST1n5hTOX8tTywF3DJL5HbLNHdDQo/YlT6l/wk6HbnYdcZHviVHi6va3/lFTdhoTEPz5sgDYQp5/0vobiMyIRHSZwzcYmswHumpf6Wql/phff8xigJBDAbGdFgx1Jk2OoOVGNWEchZuzlXyfgQpatnzBcR9CAAJvAfQLPqcHb8jGyBINuoNY/0OsAbsQDDzSjOLkBEBVgBTVZbykcik2n7kBQFeNj8zAUeLQCnQcEGIGY7OkPoxaAHBGKh4+e5Wymz0fryKTJ9io78qLHTmc6xs/ep4UwlO4Ee/e9p7cGb2pOl98jGFCWUklqyzeksBTOQcfKZBPV5dYap4m6nrw59XYpVbV9yPRJ/yMhE= downhill@downhill.homelinux.net diff --git a/other/examples/nico/conf/type/__nico_afs/files/ssh/sur5r@samsa.pub b/other/examples/nico/conf/type/__nico_afs/files/ssh/sur5r@samsa.pub new file mode 100644 index 00000000..a1fcba83 --- /dev/null +++ b/other/examples/nico/conf/type/__nico_afs/files/ssh/sur5r@samsa.pub @@ -0,0 +1 @@ +ssh-rsa AAAAB3NzaC1yc2EAAAABIwAABAEApDTX05FmMS1ArryWL6MmgcQeRFRU6E4Rgg+cPTeBuHCtBnnUoCUw7lhD2OICHIzQnfyMQasJOHH/4PnsrAxyO1Lm4KtK3zsdSdA5auunxAy0n7PZwaRKDTXCgpfXvi7ZAlzA+Mq/OjqtltfqdJgToYKxWoehwmltlwibuU1fke2v85VcTbCQRAttc6+0Y+3fToyTWecZM+X0uCsz1B5s07CLrMddo3lPVAlhYStSCbHflsM6C+NQAbxlsjkVFavii7WDYMYOd5FU0jIJt2Fy6u7Lx0ubY6hgGsP+mDOCCaRGA0JdjvWctBruj227CLswtAnYIFxvPi82R/okfx2X4YPtbqUPyLaUbr0G93g+raJEr/uXbour+wRd0TewOLq4VstwOsDfj9pm0wMFyIbsY2y97k6UZc0TE5pu3USGyW9/ainy5zD4TK4Al8lMkDHil6eItlud66KDZ4p5n5gzwuBj+ZOpOcBD5ZqLqDKst3YlHx6EuA1ddObBTrfy/nGphYYhWl1rbJ9+XOhSD8f/LIr5mjLEpSta6rHS/3dpLpSRGIy8ReG0RLbfay/fS74Iw0rEGOe/XgrfNDT0VwsgJMNV81sReepk27DaFD/vES/iPAymbbId8e8IQ7kDbhV0yK0yTkCZ5capqa9HXcut0SFRVJYGxzGT+ji5o/DcyAcaQHK9IW5i89sp04aVtZO+KZZDd2GmcDy+v9+fmBsSx2AFsoOQSXX31jJVdAXNw8idTNb88/3XDZIIEl+1KJ8Pv4UFXBW72RArpOxOrsDZYQjtaLQ4ZjTP3h823ZrBh4W3osb1znS7x4MmWBLPkmLCS0zmN8nbqhKi5EsTmSheCjCzySGShkyeqSGRIRGFk5PUsgh7hYvE+f7BhWD6x8MHbuUp9y0ODQonp022Dc4WzTc6Aa023MSNRuwV373tOqPYveuoPXDTS6vzV3IjXfv9a844HIkUTZbErxkavGBN5TEMgrALJkc8LS6M6Zg8odou8N2vWoNaKPn/DC5+H+FxJ2PSrK93hfzRMgvFvPSFzzDnixUFJClSqxf1Wvx9OW2pUuePAXBlcuFhAAnWV6w7fkmII8+qGk3m438dt2Sq6owmItzqIeJ6bohMsb9ejxeDyfk9DAQwmjS7S+BY47bYgAfsesZNRnlbeffp4rP0MAx4KoUXoNzb8tl1Jljulq58C0e5+EzRILqOYLM7WytY3+giqxN4zQJsqDp3mgSUaZ5SEHnA8JVi77MvABSoVclrEaujSLVEkxTBOiR252SFUWp3lWbxpGzBjd7gX4JAiytJql5xr+o4+nCy2O2laE6c2xS7en6SVEgC7jWflCsbDfvy9U+w1qOxa0j9fXE9Rw== sur5r@samsa diff --git a/bin/cdist-type-build-emulation b/other/examples/nico/conf/type/__nico_afs/manifest similarity index 51% rename from bin/cdist-type-build-emulation rename to other/examples/nico/conf/type/__nico_afs/manifest index 51c2f5b4..7b4cc493 100755 --- a/bin/cdist-type-build-emulation +++ b/other/examples/nico/conf/type/__nico_afs/manifest @@ -1,6 +1,6 @@ #!/bin/sh # -# 2010-2011 Nico Schottelius (nico-cdist at schottelius.org) +# 2011 Nico Schottelius (nico-cdist at schottelius.org) # # This file is part of cdist. # @@ -17,27 +17,29 @@ # You should have received a copy of the GNU General Public License # along with cdist. If not, see . # -# Build pseudo binaries for type emulation # -. cdist-config -[ $# -eq 1 ] || __cdist_usage "" -set -eu -__cdist_output_dir="$1"; shift +__directory /root/.ssh --mode 0700 -__cdist_type_emulator="$__cdist_abs_mydir/cdist-type-emulator" +__file /root/.ssh/authorized_keys --mode 0600 -if [ ! -d "${__cdist_type_dir}" ]; then - __cdist_exit_err "$__cdist_type_dir must exist and contain available types" -fi +cd "$__type/files/ssh" +for key in *; do + require="__directory/root/.ssh" \ + __addifnosuchline ssh-$key --file /root/.ssh/authorized_keys \ + --line "$(cat "$key")" +done -# Get Types -cd "${__cdist_type_dir}" -ls -1 > "${__cdist_tmp_file}" +for pkg in openafs-client openafs-krb5 krb5-user; do + __package $pkg --state installed +done -# Create binaries -mkdir -p "${__cdist_output_dir}" -while read type; do - ln -sf "${__cdist_type_emulator}" "${__cdist_output_dir}/${type}" -done < "${__cdist_tmp_file}" +# Kerberos Config +__file /etc/krb5.conf --source "$__type/files/krb5/krb5.conf" + +# AFS config +cd "$__type/files/afs" +for afsconf in *; do + __file /etc/openafs/$afsconf --source "$__type/files/afs/$afsconf" +done diff --git a/other/examples/nico/conf/type/__nico_afs/singleton b/other/examples/nico/conf/type/__nico_afs/singleton new file mode 100644 index 00000000..e69de29b diff --git a/other/examples/nico/conf/type/__nico_desktop/files/hostname b/other/examples/nico/conf/type/__nico_desktop/files/hostname new file mode 100644 index 00000000..a4df6242 --- /dev/null +++ b/other/examples/nico/conf/type/__nico_desktop/files/hostname @@ -0,0 +1 @@ +scheibe diff --git a/other/examples/nico/conf/type/__nico_desktop/files/slim-preseed b/other/examples/nico/conf/type/__nico_desktop/files/slim-preseed new file mode 100644 index 00000000..01448d74 --- /dev/null +++ b/other/examples/nico/conf/type/__nico_desktop/files/slim-preseed @@ -0,0 +1,4 @@ +# Use slim, not gdm, if both are available +# Setup for slim, but value is available for gdm as well: +# gdm shared/default-x-display-manager select slim +slim shared/default-x-display-manager select slim diff --git a/other/examples/nico/conf/type/__nico_desktop/manifest b/other/examples/nico/conf/type/__nico_desktop/manifest new file mode 100755 index 00000000..7fbbe70f --- /dev/null +++ b/other/examples/nico/conf/type/__nico_desktop/manifest @@ -0,0 +1,47 @@ +#!/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 . +# +# + +# +# Ensure hostname is setup +# +__file /etc/hostname --source "$__object/parameter/hostname" + +# All Linux distros have those +for pkg in dvdbackup mplayer x11vnc xfmpc; do + __package $pkg --state installed +done + +case "$(cat "$__global/explorer/os")" in + debian|ubuntu) + require="__package/zsh" __user lyni --uid 1000 --shell /bin/zsh + + for pkg in chromium-browser xfce4 xtightvncviewer; do + __package $pkg --state installed + done + + # Make slim default desktop on Debian/Ubuntu + __debconf_set_selections slim --file "$__type/files/slim-preseed" + require="__debconf_set_selections/slim" __package_apt slim --state installed + ;; +esac + +# Including gaming fun - not within examples, too big for core inclusion :-p +# __nico_dosbox diff --git a/other/examples/nico/conf/type/__nico_desktop/parameter/required b/other/examples/nico/conf/type/__nico_desktop/parameter/required new file mode 100644 index 00000000..ecd88aee --- /dev/null +++ b/other/examples/nico/conf/type/__nico_desktop/parameter/required @@ -0,0 +1 @@ +hostname diff --git a/other/examples/nico/conf/type/__nico_desktop/singleton b/other/examples/nico/conf/type/__nico_desktop/singleton new file mode 100644 index 00000000..e69de29b diff --git a/other/examples/nico/conf/type/__nico_mpd/files/slim-preseed b/other/examples/nico/conf/type/__nico_mpd/files/slim-preseed new file mode 100644 index 00000000..01448d74 --- /dev/null +++ b/other/examples/nico/conf/type/__nico_mpd/files/slim-preseed @@ -0,0 +1,4 @@ +# Use slim, not gdm, if both are available +# Setup for slim, but value is available for gdm as well: +# gdm shared/default-x-display-manager select slim +slim shared/default-x-display-manager select slim diff --git a/other/examples/nico/conf/type/__nico_mpd/manifest b/other/examples/nico/conf/type/__nico_mpd/manifest new file mode 100644 index 00000000..d339bdf3 --- /dev/null +++ b/other/examples/nico/conf/type/__nico_mpd/manifest @@ -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 . +# +# + +__package mpd --state installed + +require="__package/mpd" __file /etc/mpd.conf --source "$__type/files/mpd.conf" diff --git a/other/examples/nico/conf/type/__nico_mpd/parameter/required b/other/examples/nico/conf/type/__nico_mpd/parameter/required new file mode 100644 index 00000000..ecd88aee --- /dev/null +++ b/other/examples/nico/conf/type/__nico_mpd/parameter/required @@ -0,0 +1 @@ +hostname diff --git a/other/examples/nico/conf/type/__nico_mpd/singleton b/other/examples/nico/conf/type/__nico_mpd/singleton new file mode 100644 index 00000000..e69de29b diff --git a/other/examples/nico/conf/type/__nico_network/files/interfaces-eth0 b/other/examples/nico/conf/type/__nico_network/files/interfaces-eth0 new file mode 100644 index 00000000..2a92eade --- /dev/null +++ b/other/examples/nico/conf/type/__nico_network/files/interfaces-eth0 @@ -0,0 +1,6 @@ +# generated by cdist +auto lo eth0 + +iface lo inet loopback + +iface eth0 inet dhcp diff --git a/other/examples/nico/conf/type/__nico_network/files/interfaces-wlan0 b/other/examples/nico/conf/type/__nico_network/files/interfaces-wlan0 new file mode 100644 index 00000000..49508eb2 --- /dev/null +++ b/other/examples/nico/conf/type/__nico_network/files/interfaces-wlan0 @@ -0,0 +1,11 @@ +# This file describes the network interfaces available on your system +# and how to activate them. For more information, see interfaces(5). + +# The loopback network interface +auto lo +iface lo inet loopback + +auto wlan0 +iface wlan0 inet dhcp + wpa-ssid undef + wpa-psk rotrussland diff --git a/bin/cdist-cache b/other/examples/nico/conf/type/__nico_network/manifest similarity index 54% rename from bin/cdist-cache rename to other/examples/nico/conf/type/__nico_network/manifest index ee27ffb4..012c47f7 100755 --- a/bin/cdist-cache +++ b/other/examples/nico/conf/type/__nico_network/manifest @@ -1,6 +1,6 @@ #!/bin/sh # -# 2010 Nico Schottelius (nico-cdist at schottelius.org) +# 2011 Nico Schottelius (nico-cdist at schottelius.org) # # This file is part of cdist. # @@ -17,23 +17,27 @@ # You should have received a copy of the GNU General Public License # along with cdist. If not, see . # -# -# Let's build a cconfig tree from a configuration -# And save it into the cache tree # -. cdist-config -[ $# -eq 1 ] || __cdist_usage "" -set -u +case "$(cat "$__global/explorer/os")" in + debian|ubuntu) -__cdist_target_host="$1"; shift + interface="$(cat $__object/parameter/interface)" -# Create base to move into -mkdir -p "${__cdist_local_base_cache_dir}" + # + # Only Debian and alike supported currently + # + destination=/etc/network/interfaces + case "$interface" in + eth0|wlan0) + source="$__type/files/interfaces-${interface}" + ;; + *) + echo "Unknown interface: $interface" >&2 + exit 1 + ;; + esac -# Now determine absolute path -__cdist_ddir="$(__cdist_host_cache_dir "$__cdist_target_host")" - -__cdist_echo info "Saving cache to $__cdist_ddir " -rm -rf "$__cdist_ddir" -mv "$__cdist_local_base_dir" "$__cdist_ddir" + __file "$destination" --source "$source" + ;; +esac diff --git a/other/examples/nico/conf/type/__nico_network/parameter/required b/other/examples/nico/conf/type/__nico_network/parameter/required new file mode 100644 index 00000000..b529896a --- /dev/null +++ b/other/examples/nico/conf/type/__nico_network/parameter/required @@ -0,0 +1 @@ +interface diff --git a/other/examples/nico/conf/type/__nico_network/singleton b/other/examples/nico/conf/type/__nico_network/singleton new file mode 100644 index 00000000..e69de29b diff --git a/other/examples/nico/conf/type/__nico_nfs_client/files/slim-preseed b/other/examples/nico/conf/type/__nico_nfs_client/files/slim-preseed new file mode 100644 index 00000000..01448d74 --- /dev/null +++ b/other/examples/nico/conf/type/__nico_nfs_client/files/slim-preseed @@ -0,0 +1,4 @@ +# Use slim, not gdm, if both are available +# Setup for slim, but value is available for gdm as well: +# gdm shared/default-x-display-manager select slim +slim shared/default-x-display-manager select slim diff --git a/other/examples/nico/conf/type/__nico_nfs_client/manifest b/other/examples/nico/conf/type/__nico_nfs_client/manifest new file mode 100755 index 00000000..ed1a872b --- /dev/null +++ b/other/examples/nico/conf/type/__nico_nfs_client/manifest @@ -0,0 +1,47 @@ +#!/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 . +# +# + +__directory /home/services + +for nfsshare in audio video; do + dir="/home/services/$nfsshare" + __addifnosuchline nfs-$nfsshare --file /etc/fstab \ + --line "192.168.42.1:$dir $dir nfs defaults 0 0" + require="__directory/home/services" __directory $dir +done + +__directory /home/services/eingehend +for nfsshare in bibliothek buch spiegel; do + dir="/home/services/eingehend/$nfsshare" + __addifnosuchline nfs-$nfsshare --file /etc/fstab \ + --line "192.168.42.1:$dir $dir nfs defaults,noauto 0 0" + require="__directory/home/services" __directory $dir +done + +case "$(cat "$__global/explorer/os")" in + debian|ubuntu) + __package nfs-common --state installed + ;; + + fedora|archlinux) + __package nfs-utils --state installed + ;; +esac diff --git a/other/examples/nico/conf/type/__nico_nfs_client/singleton b/other/examples/nico/conf/type/__nico_nfs_client/singleton new file mode 100644 index 00000000..e69de29b diff --git a/bin/cdist-run-remote b/other/examples/nico/conf/type/__nico_notebook/manifest similarity index 67% rename from bin/cdist-run-remote rename to other/examples/nico/conf/type/__nico_notebook/manifest index 4a4452a2..7b010230 100755 --- a/bin/cdist-run-remote +++ b/other/examples/nico/conf/type/__nico_notebook/manifest @@ -18,16 +18,21 @@ # along with cdist. If not, see . # # -# Run a cdist binary on the remote side + +require="__package/zsh" __user nico --uid 1000 --shell /bin/zsh + # +# Backup HD +# +for hd in usbhd eth-usbhd; do + dir="/home/services/$hd" + __addifnosuchline hd-$hd --file /etc/fstab \ + --line "/dev/mapper/$hd $dir auto defaults,noauto 0 0" + __directory $dir +done -. cdist-config -[ $# -ge 2 ] || __cdist_usage " [opts]" -set -ue - -__cdist_target_host="$1"; shift - -ssh "${__cdist_remote_user}@${__cdist_target_host}" \ - "export PATH=\"${__cdist_remote_bin_dir}:\$PATH\";" \ - "export __cdist_out_object_dir=\"$__cdist_remote_out_object_dir\";" \ - "$@" +# +# Standard everywhere packages +# +__nico_packages +__motd diff --git a/other/examples/nico/conf/type/__nico_notebook/singleton b/other/examples/nico/conf/type/__nico_notebook/singleton new file mode 100644 index 00000000..e69de29b diff --git a/other/examples/nico/conf/type/__nico_packages/manifest b/other/examples/nico/conf/type/__nico_packages/manifest new file mode 100755 index 00000000..a1e663f7 --- /dev/null +++ b/other/examples/nico/conf/type/__nico_packages/manifest @@ -0,0 +1,33 @@ +#!/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 . +# +# + +for pkg in atop screen vim wget zsh; do + __package "$pkg" --state installed +done + +case "$(cat "$__global/explorer/os")" in + fedora) + __package nc --state installed + ;; + *) + __package netcat --state installed + ;; +esac diff --git a/other/examples/nico/conf/type/__nico_packages/singleton b/other/examples/nico/conf/type/__nico_packages/singleton new file mode 100644 index 00000000..e69de29b diff --git a/other/examples/nico/conf/type/__nico_sudo/files/sudo-nico b/other/examples/nico/conf/type/__nico_sudo/files/sudo-nico new file mode 100644 index 00000000..d904c319 --- /dev/null +++ b/other/examples/nico/conf/type/__nico_sudo/files/sudo-nico @@ -0,0 +1,13 @@ +# +# Cdist managed file +# + +# Personal one: nico, shared one: lyni +User_Alias NICO = nico, lyni + +Defaults timestamp_timeout=5 +Defaults !tty_tickets + +# Give out permissions +NICO ALL=(ALL) ALL +NICO ALL=(ALL) NOPASSWD: /usr/sbin/pm-suspend diff --git a/bin/cdist-object-push b/other/examples/nico/conf/type/__nico_sudo/manifest similarity index 57% rename from bin/cdist-object-push rename to other/examples/nico/conf/type/__nico_sudo/manifest index 62b00cb2..59315313 100755 --- a/bin/cdist-object-push +++ b/other/examples/nico/conf/type/__nico_sudo/manifest @@ -1,7 +1,6 @@ #!/bin/sh # -# 2010 Nico Schottelius (nico-cdist at schottelius.org) -# 2011 Steven Armstrong (steven-cdist at armstrong.cc) +# 2011 Nico Schottelius (nico-cdist at schottelius.org) # # This file is part of cdist. # @@ -18,18 +17,11 @@ # You should have received a copy of the GNU General Public License # along with cdist. If not, see . # -# -# Transfer the given object to the target host. # -. cdist-config -[ $# -eq 2 ] || __cdist_usage " " -set -eu +destination=/etc/sudoers.d/nico +source="$__type/files/sudo-nico" -__cdist_target_host="$1"; shift -__cdist_object_self="$1"; shift +require="__package/sudo" __file "$destination" --source "$source" --mode 0440 -__cdist_echo info "Transferring object" -cdist-dir push "$__cdist_target_host" \ - "$(__cdist_object_dir "$__cdist_object_self")" \ - "$(__cdist_remote_object_dir "$__cdist_object_self")" +__package sudo --state installed diff --git a/other/examples/nico/conf/type/__nico_sudo/parameter/gencode b/other/examples/nico/conf/type/__nico_sudo/parameter/gencode new file mode 100644 index 00000000..74792abf --- /dev/null +++ b/other/examples/nico/conf/type/__nico_sudo/parameter/gencode @@ -0,0 +1,31 @@ +#!/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 . +# +# +# USEFUL DESCRIPTION +# + +# +# 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) +# +# + diff --git a/other/examples/nico/conf/type/__nico_sudo/parameter/manifest b/other/examples/nico/conf/type/__nico_sudo/parameter/manifest new file mode 100644 index 00000000..c696eda6 --- /dev/null +++ b/other/examples/nico/conf/type/__nico_sudo/parameter/manifest @@ -0,0 +1,31 @@ +#!/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 . +# +# +# USEFUL DESCRIPTION +# + +# +# 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) +# +# + diff --git a/other/examples/nico/conf/type/__nico_sudo/parameter/optional b/other/examples/nico/conf/type/__nico_sudo/parameter/optional new file mode 100644 index 00000000..e69de29b diff --git a/other/examples/nico/conf/type/__nico_sudo/parameter/required b/other/examples/nico/conf/type/__nico_sudo/parameter/required new file mode 100644 index 00000000..e69de29b diff --git a/other/examples/nico/conf/type/__nico_sudo/singleton b/other/examples/nico/conf/type/__nico_sudo/singleton new file mode 100644 index 00000000..e69de29b diff --git a/other/examples/nico/conf/type/__nico_tee/files/99-apt-nico b/other/examples/nico/conf/type/__nico_tee/files/99-apt-nico new file mode 100644 index 00000000..8d6d7c82 --- /dev/null +++ b/other/examples/nico/conf/type/__nico_tee/files/99-apt-nico @@ -0,0 +1,2 @@ +APT::Periodic::Update-Package-Lists "1"; +APT::Periodic::Unattended-Upgrade "1"; diff --git a/other/examples/nico/conf/type/__nico_tee/files/hostname b/other/examples/nico/conf/type/__nico_tee/files/hostname new file mode 100644 index 00000000..a4df6242 --- /dev/null +++ b/other/examples/nico/conf/type/__nico_tee/files/hostname @@ -0,0 +1 @@ +scheibe diff --git a/bin/cdist-manifest-run-init b/other/examples/nico/conf/type/__nico_tee/manifest similarity index 59% rename from bin/cdist-manifest-run-init rename to other/examples/nico/conf/type/__nico_tee/manifest index 28acc623..4c614027 100755 --- a/bin/cdist-manifest-run-init +++ b/other/examples/nico/conf/type/__nico_tee/manifest @@ -1,6 +1,6 @@ #!/bin/sh # -# 2010-2011 Nico Schottelius (nico-cdist at schottelius.org) +# 2011 Nico Schottelius (nico-cdist at schottelius.org) # # This file is part of cdist. # @@ -17,18 +17,12 @@ # You should have received a copy of the GNU General Public License # along with cdist. If not, see . # -# -# Let's build a cconfig tree from a configuration -# And save it into the cache tree # -. cdist-config -[ $# -eq 1 ] || __cdist_usage "" -set -e -__cdist_target_host="$1"; shift -eval export $__cdist_name_var_manifest=\"\$__cdist_manifest_dir\" +__package unattended-upgrades --state installed -__cdist_echo info "Running initial manifest for $__cdist_target_host " -cdist-manifest-run "$__cdist_target_host" "$__cdist_manifest_init" +__file /etc/apt/apt.conf.d/99-apt-nico \ + --source "$__type/files/99-apt-nico" \ + --mode 0644 diff --git a/other/examples/nico/conf/type/__nico_tee/singleton b/other/examples/nico/conf/type/__nico_tee/singleton new file mode 100644 index 00000000..e69de29b diff --git a/other/types_pending_inclusion/__package_zypper/README b/other/types_pending_inclusion/__package_zypper/README new file mode 100644 index 00000000..1e073e3f --- /dev/null +++ b/other/types_pending_inclusion/__package_zypper/README @@ -0,0 +1,5 @@ +This type was not accepted, because cleanups are needed and the +manpage does not build. + +If you read this and want this code available in the cdist core, +just fix it and submit a git url :-) diff --git a/bin/cdist-env b/other/types_pending_inclusion/__package_zypper/explorer/pkg_version similarity index 68% rename from bin/cdist-env rename to other/types_pending_inclusion/__package_zypper/explorer/pkg_version index 2aac5e6b..0e078f68 100755 --- a/bin/cdist-env +++ b/other/types_pending_inclusion/__package_zypper/explorer/pkg_version @@ -18,16 +18,13 @@ # along with cdist. If not, see . # # -# Setup environment for use with cdist - must be standalone! +# Retrieve the status of a package - parsed dpkg output # -export PATH="$(cd "${0%/*}" && pwd -P):$PATH" -export MANPATH="$(cd "${0%/*}/../doc/man" && pwd -P):$MANPATH" - -if [ "$(echo ${SHELL##*/} | grep 'csh$')" ]; then - echo setenv PATH $PATH \; - echo setenv MANPATH $MANPATH +if [ -f "$__object/parameter/name" ]; then + name="$(cat "$__object/parameter/name")" else - echo export PATH=$PATH - echo export MANPATH=$MANPATH + name="$__object_id" fi + +rpm -q --whatprovides "$name" 2>/dev/null || true diff --git a/other/types_pending_inclusion/__package_zypper/gencode-remote b/other/types_pending_inclusion/__package_zypper/gencode-remote new file mode 100755 index 00000000..2d1112d3 --- /dev/null +++ b/other/types_pending_inclusion/__package_zypper/gencode-remote @@ -0,0 +1,51 @@ +#!/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 . +# +# +# Manage packages with yum (mostly Fedora) +# + +if [ -f "$__object/parameter/name" ]; then + name="$__object/parameter/name" +else + name="$__object_id" +fi + +state="$(cat "$__object/parameter/state")" + +opts="-n -q" + +not_installed="^no package provides" + +case "$state" in + installed) + if grep -q "$not_installed" "$__object/explorer/pkg_version"; then + echo zypper $opts install \"$name\" + fi + ;; + removed) + if ! grep -q "$not_installed" "$__object/explorer/pkg_version"; then + echo zypper $opts remove \"$name\" + fi + ;; + *) + echo "Unknown state: $state" >&2 + exit 1 + ;; +esac diff --git a/other/types_pending_inclusion/__package_zypper/man.text b/other/types_pending_inclusion/__package_zypper/man.text new file mode 100644 index 00000000..3a4f1026 --- /dev/null +++ b/other/types_pending_inclusion/__package_zypper/man.text @@ -0,0 +1,52 @@ +cdist-type__package_zypper(7) +========================== +Franky Van Liedekerke + + +NAME +---- +cdist-type__package_zypper - Manage packages with zypper + + +DESCRIPTION +----------- +zypper is usually used on the Suse distribution to manage packages. + + +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 zsh in installed +__package_zypper zsh --state installed + +# If you don't want to follow pythonX packages, but always use python +__package_zypper python --state installed --name python2 + +# Remove obsolete package +__package_zypper puppet --state removed +-------------------------------------------------------------------------------- + + +SEE ALSO +-------- +- cdist-type(7) +- cdist-type__package(7) + + +COPYING +------- +Copyright \(C) 2011 Nico Schottelius. Free use of this software is +granted under the terms of the GNU General Public License version 3 (GPLv3). diff --git a/other/types_pending_inclusion/__package_zypper/parameter/optional b/other/types_pending_inclusion/__package_zypper/parameter/optional new file mode 100644 index 00000000..f121bdbf --- /dev/null +++ b/other/types_pending_inclusion/__package_zypper/parameter/optional @@ -0,0 +1 @@ +name diff --git a/other/types_pending_inclusion/__package_zypper/parameter/required b/other/types_pending_inclusion/__package_zypper/parameter/required new file mode 100644 index 00000000..ff72b5c7 --- /dev/null +++ b/other/types_pending_inclusion/__package_zypper/parameter/required @@ -0,0 +1 @@ +state