merge cdist/master
Signed-off-by: Steven Armstrong <steven@icarus.ethz.ch>
This commit is contained in:
		
				commit
				
					
						cd5b0cc50c
					
				
			
		
					 116 changed files with 3514 additions and 2406 deletions
				
			
		
							
								
								
									
										3
									
								
								.gitignore
									
										
									
									
										vendored
									
									
								
							
							
						
						
									
										3
									
								
								.gitignore
									
										
									
									
										vendored
									
									
								
							| 
						 | 
					@ -13,3 +13,6 @@ doc/man/man*/docbook-xsl.css
 | 
				
			||||||
 | 
					
 | 
				
			||||||
# Ignore cache for version control
 | 
					# Ignore cache for version control
 | 
				
			||||||
cache/
 | 
					cache/
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# Python
 | 
				
			||||||
 | 
					bin/__pycache__/
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -1,40 +0,0 @@
 | 
				
			||||||
cat << eof
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
Hey hackers,
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
this README is for you, for those who want to dig into cdist, hack it or try
 | 
					 | 
				
			||||||
to get a deeper understanding. Please read doc/man/man7/cdist-hacker.text.
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
I hope you have a lot of fun with cdist, because it was also a lot of fun to
 | 
					 | 
				
			||||||
develop it!
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
   -- Nico, 20110324
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
## Running cdist when developing
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
This file is suitable for execution and saving the objects and
 | 
					 | 
				
			||||||
explorers from cdist. I usually do it like this:
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
   % ./HACKERS_README
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
################################################################################
 | 
					 | 
				
			||||||
eof
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
set -x
 | 
					 | 
				
			||||||
# Tell the user what we do, so this script makes sense during execution
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
# prepare use (only from top level directory)
 | 
					 | 
				
			||||||
export PATH="$(pwd -P)/bin:$PATH"
 | 
					 | 
				
			||||||
export __cdist_conf_dir="$(pwd -P)/conf"
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
# Allow user to supply hostname
 | 
					 | 
				
			||||||
target="${1:-localhost}"
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
# And use hostname as basedir (dangerous, but hackers know what they do)
 | 
					 | 
				
			||||||
export __cdist_local_base_dir="/tmp/$target"
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
# Run the real script
 | 
					 | 
				
			||||||
cdist-deploy-to "$target"
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
# Display results
 | 
					 | 
				
			||||||
find "${__cdist_local_base_dir}"
 | 
					 | 
				
			||||||
							
								
								
									
										19
									
								
								README
									
										
									
									
									
								
							
							
						
						
									
										19
									
								
								README
									
										
									
									
									
								
							| 
						 | 
					@ -38,13 +38,13 @@ Design | Define target state, do not focus on methods or scripts
 | 
				
			||||||
Design | Push architecture: Instantly apply your changes
 | 
					Design | Push architecture: Instantly apply your changes
 | 
				
			||||||
Small core | cdist's core is very small - less code, less bugs
 | 
					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
 | 
					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 | 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, 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, Security | Uses well-know [SSH](http://www.openssh.com/) as transport protocol
 | 
				
			||||||
Requirements, Simplicity | Requires only shell and SSH server on the target
 | 
					Requirements, Simplicity | Requires only shell and SSH server on the target
 | 
				
			||||||
UNIX | Reuse of existing tools like cat, find, mv, ...
 | 
					UNIX | Reuse of existing tools like cat, find, mv, ...
 | 
				
			||||||
UNIX, familar environment, documentation | Is available as manpages and HTML
 | 
					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
 | 
					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
 | 
					### Server
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 * A posix like shell
 | 
					 * A posix like shell
 | 
				
			||||||
 | 
					 * Python (>= 3.2 required)
 | 
				
			||||||
 * SSH-Client
 | 
					 * SSH-Client
 | 
				
			||||||
 | 
					
 | 
				
			||||||
### Client ("target host")
 | 
					### Client ("target host")
 | 
				
			||||||
| 
						 | 
					@ -109,11 +110,12 @@ how to use cdist.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
There are at least the following branches available:
 | 
					There are at least the following branches available:
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 * master: the development branch
 | 
					 * Development: master
 | 
				
			||||||
 * 1.7: Bugfixes, cleanups, new type and explorer rename
 | 
					 * 2.0: Python rewrite of cdist core
 | 
				
			||||||
 | 
					
 | 
				
			||||||
Old versions:
 | 
					Old versions:
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					 * 1.7: Bugfixes, cleanups, new type and explorer rename
 | 
				
			||||||
 * 1.6: New types, cleaned up \_\_package* types, internal cleanup
 | 
					 * 1.6: New types, cleaned up \_\_package* types, internal cleanup
 | 
				
			||||||
 * 1.5: Focus on object orientation instead of global stage orientation
 | 
					 * 1.5: Focus on object orientation instead of global stage orientation
 | 
				
			||||||
 * 1.4: Support for redefiniton of objects (if equal)
 | 
					 * 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 <name> origin/<name>
 | 
					    git checkout -b <name> origin/<name>
 | 
				
			||||||
    
 | 
					    
 | 
				
			||||||
    # Stay on a specific version
 | 
					    # Stay on a specific version
 | 
				
			||||||
    version=1.7
 | 
					    version=2.0
 | 
				
			||||||
    git checkout -b $version origin/$version
 | 
					    git checkout -b $version origin/$version
 | 
				
			||||||
 | 
					
 | 
				
			||||||
### Mirrors
 | 
					### Mirrors
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 * git://github.com/telmich/cdist.git ([github](https://github.com/telmich/cdist))
 | 
					 * 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
 | 
					## 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
 | 
					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.
 | 
					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
 | 
					### Upgrading from 1.6 to 1.7
 | 
				
			||||||
 | 
					
 | 
				
			||||||
* If you used the global explorer **hardware_type**, you need to change
 | 
					* If you used the global explorer **hardware_type**, you need to change
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
							
								
								
									
										784
									
								
								bin/cdist
									
										
									
									
									
										Executable file
									
								
							
							
						
						
									
										784
									
								
								bin/cdist
									
										
									
									
									
										Executable file
									
								
							| 
						 | 
					@ -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 <http://www.gnu.org/licenses/>.
 | 
				
			||||||
 | 
					#
 | 
				
			||||||
 | 
					#
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					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        .   <k    .88
 | 
				
			||||||
 | 
					      .   '*88888bu      .       .@8Ned8"   :888ooo
 | 
				
			||||||
 | 
					 .udR88N    ^"*8888N   .@88u   .@^%8888"  -*8888888
 | 
				
			||||||
 | 
					<888'888k  beWE "888L ''888E` x88:  `)8b.   8888
 | 
				
			||||||
 | 
					9888 'Y"   888E  888E   888E  8888N=*8888   8888
 | 
				
			||||||
 | 
					9888       888E  888E   888E   %8"    R88   8888
 | 
				
			||||||
 | 
					9888       888E  888F   888E    @8Wou 9%   .8888Lu=
 | 
				
			||||||
 | 
					?8888u../ .888N..888    888&  .888888P`    ^%888*
 | 
				
			||||||
 | 
					 "8888P'   `"888*""     R888" `   ^"F        'Y"
 | 
				
			||||||
 | 
					   "P'        ""         ""
 | 
				
			||||||
 | 
					"""
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# Given paths from installation
 | 
				
			||||||
 | 
					REMOTE_BASE_DIR            = "/var/lib/cdist"
 | 
				
			||||||
 | 
					REMOTE_CONF_DIR            = os.path.join(REMOTE_BASE_DIR, "conf")
 | 
				
			||||||
 | 
					REMOTE_OBJECT_DIR          = os.path.join(REMOTE_BASE_DIR, "object")
 | 
				
			||||||
 | 
					REMOTE_TYPE_DIR            = os.path.join(REMOTE_CONF_DIR, "type")
 | 
				
			||||||
 | 
					REMOTE_GLOBAL_EXPLORER_DIR = os.path.join(REMOTE_CONF_DIR, "explorer")
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					CODE_HEADER                = "#!/bin/sh -e\n"
 | 
				
			||||||
 | 
					DOT_CDIST                  = ".cdist"
 | 
				
			||||||
 | 
					TYPE_PREFIX                = "__"
 | 
				
			||||||
 | 
					VERSION                    = "2.0.0"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					logging.basicConfig(level=logging.INFO, format='%(levelname)s: %(message)s')
 | 
				
			||||||
 | 
					log = logging.getLogger()
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					def file_to_list(filename):
 | 
				
			||||||
 | 
					   """Return list from \n seperated file"""
 | 
				
			||||||
 | 
					   if os.path.isfile(filename):
 | 
				
			||||||
 | 
					      file_fd = open(filename, "r")
 | 
				
			||||||
 | 
					      lines = file_fd.readlines()
 | 
				
			||||||
 | 
					      file_fd.close()
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					      # Remove \n from all lines
 | 
				
			||||||
 | 
					      lines = map(lambda s: s.strip(), lines)
 | 
				
			||||||
 | 
					   else:
 | 
				
			||||||
 | 
					      lines = []
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					   return lines
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					def exit_error(*args):
 | 
				
			||||||
 | 
					   log.error(*args)
 | 
				
			||||||
 | 
					   sys.exit(1)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					class Cdist:
 | 
				
			||||||
 | 
					   """Cdist main class to hold arbitrary data"""
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					   def __init__(self, target_host, 
 | 
				
			||||||
 | 
					               initial_manifest=False, remote_user="root",
 | 
				
			||||||
 | 
					               home=None, debug=False):
 | 
				
			||||||
 | 
					      self.target_host = target_host
 | 
				
			||||||
 | 
					      self.remote_prefix = ["ssh", "root@" + self.target_host]
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					      # Setup directory paths
 | 
				
			||||||
 | 
					      self.temp_dir = tempfile.mkdtemp()
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					      self.debug = debug
 | 
				
			||||||
 | 
					      
 | 
				
			||||||
 | 
					      if home:
 | 
				
			||||||
 | 
					         self.base_dir = home
 | 
				
			||||||
 | 
					      else:
 | 
				
			||||||
 | 
					         self.base_dir = os.path.abspath(os.path.join(os.path.dirname(__file__), os.pardir))
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					      self.conf_dir              = os.path.join(self.base_dir, "conf")
 | 
				
			||||||
 | 
					      self.cache_base_dir        = os.path.join(self.base_dir, "cache")
 | 
				
			||||||
 | 
					      self.cache_dir             = os.path.join(self.cache_base_dir, self.target_host)
 | 
				
			||||||
 | 
					      self.global_explorer_dir   = os.path.join(self.conf_dir, "explorer")
 | 
				
			||||||
 | 
					      self.lib_dir               = os.path.join(self.base_dir, "lib")
 | 
				
			||||||
 | 
					      self.manifest_dir          = os.path.join(self.conf_dir, "manifest")
 | 
				
			||||||
 | 
					      self.type_base_dir         = os.path.join(self.conf_dir, "type")
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					      self.out_dir = os.path.join(self.temp_dir, "out")
 | 
				
			||||||
 | 
					      os.mkdir(self.out_dir)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					      self.global_explorer_out_dir = os.path.join(self.out_dir, "explorer")
 | 
				
			||||||
 | 
					      os.mkdir(self.global_explorer_out_dir)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					      self.object_base_dir = os.path.join(self.out_dir, "object")
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					      # Setup binary directory + contents
 | 
				
			||||||
 | 
					      self.bin_dir = os.path.join(self.out_dir, "bin")
 | 
				
			||||||
 | 
					      os.mkdir(self.bin_dir)
 | 
				
			||||||
 | 
					      self.link_type_to_emulator()
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					      # List of type explorers transferred
 | 
				
			||||||
 | 
					      self.type_explorers_transferred = {}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					      # objects
 | 
				
			||||||
 | 
					      self.objects_prepared = []
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					      self.remote_user = remote_user
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					      # Mostly static, but can be overwritten on user demand
 | 
				
			||||||
 | 
					      if initial_manifest:
 | 
				
			||||||
 | 
					         self.initial_manifest = initial_manifest
 | 
				
			||||||
 | 
					      else:
 | 
				
			||||||
 | 
					         self.initial_manifest = os.path.join(self.manifest_dir, "init")
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					   def cleanup(self):
 | 
				
			||||||
 | 
					      # Do not use in __del__:
 | 
				
			||||||
 | 
					      # http://docs.python.org/reference/datamodel.html#customization
 | 
				
			||||||
 | 
					      # "other globals referenced by the __del__() method may already have been deleted 
 | 
				
			||||||
 | 
					      # or in the process of being torn down (e.g. the import machinery shutting down)"
 | 
				
			||||||
 | 
					      #
 | 
				
			||||||
 | 
					      log.debug("Saving" + self.temp_dir + "to " + self.cache_dir)
 | 
				
			||||||
 | 
					      # Remove previous cache
 | 
				
			||||||
 | 
					      if os.path.exists(self.cache_dir):
 | 
				
			||||||
 | 
					         shutil.rmtree(self.cache_dir)
 | 
				
			||||||
 | 
					      shutil.move(self.temp_dir, self.cache_dir)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					   def remote_mkdir(self, directory):
 | 
				
			||||||
 | 
					      """Create directory on remote side"""
 | 
				
			||||||
 | 
					      self.run_or_fail(["mkdir", "-p", directory], remote=True)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					   def remote_cat(filename):
 | 
				
			||||||
 | 
					      """Use cat on the remote side for output"""
 | 
				
			||||||
 | 
					      self.run_or_fail(["cat", filename], remote=True)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					   def shell_run_or_debug_fail(self, script, *args, **kargs):
 | 
				
			||||||
 | 
					      # Manually execute /bin/sh, because sh -e does what we want
 | 
				
			||||||
 | 
					      # and sh -c -e does not exit if /bin/false called
 | 
				
			||||||
 | 
					      args[0][:0] = [ "/bin/sh", "-e" ]
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					      remote = False
 | 
				
			||||||
 | 
					      if "remote" in kargs:
 | 
				
			||||||
 | 
					         if kargs["remote"]:
 | 
				
			||||||
 | 
					            args[0][:0] = self.remote_prefix
 | 
				
			||||||
 | 
					            remote = true
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					         del kargs["remote"]
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					      log.debug("Shell exec cmd: %s", args)
 | 
				
			||||||
 | 
					      log.debug("Shell exec env: %s", kargs['env'])
 | 
				
			||||||
 | 
					      try:
 | 
				
			||||||
 | 
					         subprocess.check_call(*args, **kargs)
 | 
				
			||||||
 | 
					      except subprocess.CalledProcessError:
 | 
				
			||||||
 | 
					         log.error("Code that raised the error:\n")
 | 
				
			||||||
 | 
					         if remote:
 | 
				
			||||||
 | 
					            remote_cat(script)
 | 
				
			||||||
 | 
					         else:
 | 
				
			||||||
 | 
					            script_fd = open(script)
 | 
				
			||||||
 | 
					            print(script_fd.read())
 | 
				
			||||||
 | 
					            script_fd.close()
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					         exit_error("Command failed (shell): " + " ".join(*args))
 | 
				
			||||||
 | 
					      except OSError as error:
 | 
				
			||||||
 | 
					         exit_error(" ".join(*args) + ": " + error.args[1])
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					   def run_or_fail(self, *args, **kargs):
 | 
				
			||||||
 | 
					      if "remote" in kargs:
 | 
				
			||||||
 | 
					         if kargs["remote"]:
 | 
				
			||||||
 | 
					            args[0][:0] = self.remote_prefix
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					         del kargs["remote"]
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					      log.debug("Exec: " + " ".join(*args))
 | 
				
			||||||
 | 
					      try:
 | 
				
			||||||
 | 
					         subprocess.check_call(*args, **kargs)
 | 
				
			||||||
 | 
					      except subprocess.CalledProcessError:
 | 
				
			||||||
 | 
					         exit_error("Command failed: " + " ".join(*args))
 | 
				
			||||||
 | 
					      except OSError as error:
 | 
				
			||||||
 | 
					         exit_error(" ".join(*args) + ": " + error.args[1])
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					   def remove_remote_dir(self, destination):
 | 
				
			||||||
 | 
					      self.run_or_fail(["rm", "-rf",  destination], remote=True)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					   def transfer_dir(self, source, destination):
 | 
				
			||||||
 | 
					      """Transfer directory and previously delete the remote destination"""
 | 
				
			||||||
 | 
					      self.remove_remote_dir(destination)
 | 
				
			||||||
 | 
					      self.run_or_fail(["scp", "-qr", source, 
 | 
				
			||||||
 | 
					                        self.remote_user + "@" + 
 | 
				
			||||||
 | 
					                        self.target_host + ":" + 
 | 
				
			||||||
 | 
					                        destination])
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					   def transfer_file(self, source, destination):
 | 
				
			||||||
 | 
					      """Transfer file"""
 | 
				
			||||||
 | 
					      self.run_or_fail(["scp", "-q", source, 
 | 
				
			||||||
 | 
					                        self.remote_user + "@" +
 | 
				
			||||||
 | 
					                        self.target_host + ":" +
 | 
				
			||||||
 | 
					                        destination])
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					   def global_explorer_output_path(self, explorer):
 | 
				
			||||||
 | 
					      """Returns path of the output for a global explorer"""
 | 
				
			||||||
 | 
					      return os.path.join(self.global_explorer_out_dir, explorer)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					   def type_explorer_output_dir(self, cdist_object):
 | 
				
			||||||
 | 
					      """Returns and creates dir of the output for a type explorer"""
 | 
				
			||||||
 | 
					      dir = os.path.join(self.object_dir(cdist_object), "explorer")
 | 
				
			||||||
 | 
					      if not os.path.isdir(dir):
 | 
				
			||||||
 | 
					         os.mkdir(dir)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					      return dir
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					   def remote_global_explorer_path(self, explorer):
 | 
				
			||||||
 | 
					      """Returns path to the remote explorer"""
 | 
				
			||||||
 | 
					      return os.path.join(REMOTE_GLOBAL_EXPLORER_DIR, explorer)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					   def list_global_explorers(self):
 | 
				
			||||||
 | 
					      """Return list of available explorers"""
 | 
				
			||||||
 | 
					      return os.listdir(self.global_explorer_dir)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					   def list_type_explorers(self, type):
 | 
				
			||||||
 | 
					      """Return list of available explorers for a specific type"""
 | 
				
			||||||
 | 
					      dir = self.type_dir(type, "explorer")
 | 
				
			||||||
 | 
					      if os.path.isdir(dir):
 | 
				
			||||||
 | 
					         list = os.listdir(dir)
 | 
				
			||||||
 | 
					      else:
 | 
				
			||||||
 | 
					         list = []
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					      log.debug("Explorers for %s in %s: %s", type, dir, list)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					      return list
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					   def list_types(self):
 | 
				
			||||||
 | 
					      return os.listdir(self.type_base_dir)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					   def list_object_paths(self, starting_point):
 | 
				
			||||||
 | 
					      """Return list of paths of existing objects"""
 | 
				
			||||||
 | 
					      object_paths = []
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					      for content in os.listdir(starting_point):
 | 
				
			||||||
 | 
					         full_path = os.path.join(starting_point, content)
 | 
				
			||||||
 | 
					         if os.path.isdir(full_path):
 | 
				
			||||||
 | 
					            object_paths.extend(self.list_object_paths(starting_point = full_path))
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					         # Directory contains .cdist -> 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)
 | 
				
			||||||
| 
						 | 
					@ -1,50 +0,0 @@
 | 
				
			||||||
#!/bin/sh
 | 
					 | 
				
			||||||
#
 | 
					 | 
				
			||||||
# 2011 Nico Schottelius (nico-cdist at schottelius.org)
 | 
					 | 
				
			||||||
#
 | 
					 | 
				
			||||||
# This file is part of cdist.
 | 
					 | 
				
			||||||
#
 | 
					 | 
				
			||||||
# cdist is free software: you can redistribute it and/or modify
 | 
					 | 
				
			||||||
# it under the terms of the GNU General Public License as published by
 | 
					 | 
				
			||||||
# the Free Software Foundation, either version 3 of the License, or
 | 
					 | 
				
			||||||
# (at your option) any later version.
 | 
					 | 
				
			||||||
#
 | 
					 | 
				
			||||||
# cdist is distributed in the hope that it will be useful,
 | 
					 | 
				
			||||||
# but WITHOUT ANY WARRANTY; without even the implied warranty of
 | 
					 | 
				
			||||||
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 | 
					 | 
				
			||||||
# GNU General Public License for more details.
 | 
					 | 
				
			||||||
#
 | 
					 | 
				
			||||||
# You should have received a copy of the GNU General Public License
 | 
					 | 
				
			||||||
# along with cdist. If not, see <http://www.gnu.org/licenses/>.
 | 
					 | 
				
			||||||
#
 | 
					 | 
				
			||||||
#
 | 
					 | 
				
			||||||
# This binary is executed on the remote side to execute code
 | 
					 | 
				
			||||||
# 
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
. cdist-config
 | 
					 | 
				
			||||||
[ $# -eq 2 ] || __cdist_usage "<object> <type>"
 | 
					 | 
				
			||||||
set -ue
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
__cdist_object_self="$1"; shift
 | 
					 | 
				
			||||||
__cdist_code_type="$1"; shift
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
if [ ! -d "$(__cdist_object_dir "$__cdist_object_self")" ]; then
 | 
					 | 
				
			||||||
   __cdist_exit_err "Object undefined"
 | 
					 | 
				
			||||||
fi  
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
__cdist_code="$(__cdist_object_code "$__cdist_object_self" "${__cdist_code_type}")"
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
__cdist_echo info "Checking code-${__cdist_code_type}"
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
if [ -e "$__cdist_code" ]; then
 | 
					 | 
				
			||||||
   if [ -f "$__cdist_code" ]; then
 | 
					 | 
				
			||||||
      if [ -x "$__cdist_code" ]; then
 | 
					 | 
				
			||||||
         __cdist_echo info "Executing code-${__cdist_code_type}"
 | 
					 | 
				
			||||||
         __cdist_exec_fail_on_error "$__cdist_code"
 | 
					 | 
				
			||||||
      else
 | 
					 | 
				
			||||||
         __cdist_exit_err "$__cdist_code exists, but is not executable."
 | 
					 | 
				
			||||||
      fi
 | 
					 | 
				
			||||||
   else
 | 
					 | 
				
			||||||
      __cdist_exit_err "$__cdist_code exists, but is not a file."
 | 
					 | 
				
			||||||
   fi
 | 
					 | 
				
			||||||
fi
 | 
					 | 
				
			||||||
							
								
								
									
										438
									
								
								bin/cdist-config
									
										
									
									
									
								
							
							
						
						
									
										438
									
								
								bin/cdist-config
									
										
									
									
									
								
							| 
						 | 
					@ -1,438 +0,0 @@
 | 
				
			||||||
#!/bin/sh
 | 
					 | 
				
			||||||
#
 | 
					 | 
				
			||||||
# 2010-2011 Nico Schottelius (nico-cdist at schottelius.org)
 | 
					 | 
				
			||||||
#
 | 
					 | 
				
			||||||
# This file is part of cdist.
 | 
					 | 
				
			||||||
#
 | 
					 | 
				
			||||||
# cdist is free software: you can redistribute it and/or modify
 | 
					 | 
				
			||||||
# it under the terms of the GNU General Public License as published by
 | 
					 | 
				
			||||||
# the Free Software Foundation, either version 3 of the License, or
 | 
					 | 
				
			||||||
# (at your option) any later version.
 | 
					 | 
				
			||||||
#
 | 
					 | 
				
			||||||
# cdist is distributed in the hope that it will be useful,
 | 
					 | 
				
			||||||
# but WITHOUT ANY WARRANTY; without even the implied warranty of
 | 
					 | 
				
			||||||
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 | 
					 | 
				
			||||||
# GNU General Public License for more details.
 | 
					 | 
				
			||||||
#
 | 
					 | 
				
			||||||
# You should have received a copy of the GNU General Public License
 | 
					 | 
				
			||||||
# along with cdist. If not, see <http://www.gnu.org/licenses/>.
 | 
					 | 
				
			||||||
#
 | 
					 | 
				
			||||||
#
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
__cdist_version="1.7.0"
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
# Fail if something bogus is going on
 | 
					 | 
				
			||||||
set -u
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
################################################################################
 | 
					 | 
				
			||||||
# cconf standard vars prefixed with cdist
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
__cdist_pwd="$(pwd -P)"
 | 
					 | 
				
			||||||
__cdist_mydir="${0%/*}";
 | 
					 | 
				
			||||||
__cdist_abs_mydir="$(cd "$__cdist_mydir" && pwd -P)"
 | 
					 | 
				
			||||||
__cdist_myname=${0##*/};
 | 
					 | 
				
			||||||
__cdist_abs_myname="$__cdist_abs_mydir/$__cdist_myname"
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
################################################################################
 | 
					 | 
				
			||||||
# Names / Constants
 | 
					 | 
				
			||||||
#
 | 
					 | 
				
			||||||
# Most values can be overriden from outside, so you can
 | 
					 | 
				
			||||||
# customise paths as you like (for distributors, geeks and hackers)
 | 
					 | 
				
			||||||
#
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
: ${__cdist_name_bin:=bin}
 | 
					 | 
				
			||||||
: ${__cdist_name_cache:=cache}
 | 
					 | 
				
			||||||
: ${__cdist_name_code:=code}
 | 
					 | 
				
			||||||
: ${__cdist_name_conf_dir:=conf}
 | 
					 | 
				
			||||||
: ${__cdist_name_dot_cdist:=.cdist}
 | 
					 | 
				
			||||||
: ${__cdist_name_explorer:=explorer}
 | 
					 | 
				
			||||||
: ${__cdist_name_gencode:=gencode}
 | 
					 | 
				
			||||||
: ${__cdist_name_gencode_local:=local}
 | 
					 | 
				
			||||||
: ${__cdist_name_gencode_remote:=remote}
 | 
					 | 
				
			||||||
: ${__cdist_name_global:=global}
 | 
					 | 
				
			||||||
: ${__cdist_name_host:=host}
 | 
					 | 
				
			||||||
: ${__cdist_name_init:=init}
 | 
					 | 
				
			||||||
: ${__cdist_name_manifest:=manifest}
 | 
					 | 
				
			||||||
: ${__cdist_name_object:=object}
 | 
					 | 
				
			||||||
: ${__cdist_name_object_finished:=done}
 | 
					 | 
				
			||||||
: ${__cdist_name_object_prepared:=prepared}
 | 
					 | 
				
			||||||
: ${__cdist_name_object_id:=object_id}
 | 
					 | 
				
			||||||
: ${__cdist_name_object_source:=source}
 | 
					 | 
				
			||||||
: ${__cdist_name_objects_created:=.objects_created}
 | 
					 | 
				
			||||||
: ${__cdist_name_out_dir:=out}
 | 
					 | 
				
			||||||
: ${__cdist_name_parameter:=parameter}
 | 
					 | 
				
			||||||
: ${__cdist_name_parameter_required:=required}
 | 
					 | 
				
			||||||
: ${__cdist_name_parameter_optional:=optional}
 | 
					 | 
				
			||||||
: ${__cdist_name_require:=require}
 | 
					 | 
				
			||||||
: ${__cdist_name_self:=self}
 | 
					 | 
				
			||||||
: ${__cdist_name_singleton:=singleton}
 | 
					 | 
				
			||||||
: ${__cdist_name_target_host:=target_host}
 | 
					 | 
				
			||||||
: ${__cdist_name_target_user:=target_user}
 | 
					 | 
				
			||||||
: ${__cdist_name_type:=type}
 | 
					 | 
				
			||||||
: ${__cdist_name_type_bin:=type_bin}
 | 
					 | 
				
			||||||
: ${__cdist_name_type_explorer:=type_explorer}
 | 
					 | 
				
			||||||
: ${__cdist_name_type_explorer_pushed:=.explorer_pushed}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
# Used for IDs: Allow everything not starting with - and .
 | 
					 | 
				
			||||||
: ${__cdist_sane_regexp:=[^-\.].*}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
# Default remote user
 | 
					 | 
				
			||||||
: ${__cdist_remote_user:=root}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
################################################################################
 | 
					 | 
				
			||||||
# Exported variable names (usable for non core
 | 
					 | 
				
			||||||
#
 | 
					 | 
				
			||||||
: ${__cdist_name_var_explorer:=__$__cdist_name_explorer}
 | 
					 | 
				
			||||||
: ${__cdist_name_var_type_explorer:=__$__cdist_name_type_explorer}
 | 
					 | 
				
			||||||
: ${__cdist_name_var_global:=__$__cdist_name_global}
 | 
					 | 
				
			||||||
: ${__cdist_name_var_manifest:=__$__cdist_name_manifest}
 | 
					 | 
				
			||||||
: ${__cdist_name_var_target_host:=__$__cdist_name_target_host}
 | 
					 | 
				
			||||||
: ${__cdist_name_var_target_user:=__$__cdist_name_target_user}
 | 
					 | 
				
			||||||
: ${__cdist_name_var_object:=__$__cdist_name_object}
 | 
					 | 
				
			||||||
: ${__cdist_name_var_object_id:=__$__cdist_name_object_id}
 | 
					 | 
				
			||||||
: ${__cdist_name_var_self:=__$__cdist_name_self}
 | 
					 | 
				
			||||||
: ${__cdist_name_var_type:=__$__cdist_name_type}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
################################################################################
 | 
					 | 
				
			||||||
# Tempfiles
 | 
					 | 
				
			||||||
# 
 | 
					 | 
				
			||||||
: ${__cdist_tmp_base_dir=/tmp}
 | 
					 | 
				
			||||||
__cdist_tmp_dir=$(mktemp -d "$__cdist_tmp_base_dir/cdist.XXXXXXXXXXXX")
 | 
					 | 
				
			||||||
__cdist_tmp_file=$(mktemp "$__cdist_tmp_dir/cdist.XXXXXXXXXXXX")
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
################################################################################
 | 
					 | 
				
			||||||
# Local Base
 | 
					 | 
				
			||||||
# 
 | 
					 | 
				
			||||||
: ${__cdist_local_base_dir:=$__cdist_tmp_dir}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
# Cache may *NOT* be below __cdist_local_base_dir!
 | 
					 | 
				
			||||||
: ${__cdist_local_base_cache_dir:=$__cdist_abs_mydir/../$__cdist_name_cache}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
: ${__cdist_conf_dir:="$(cd "$__cdist_abs_mydir/../conf" && pwd -P)"}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
: ${__cdist_explorer_dir:=$__cdist_conf_dir/$__cdist_name_explorer}
 | 
					 | 
				
			||||||
: ${__cdist_manifest_dir:=$__cdist_conf_dir/$__cdist_name_manifest}
 | 
					 | 
				
			||||||
: ${__cdist_manifest_init:=$__cdist_manifest_dir/$__cdist_name_init}
 | 
					 | 
				
			||||||
: ${__cdist_type_dir:=$__cdist_conf_dir/$__cdist_name_type}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
################################################################################
 | 
					 | 
				
			||||||
# Local output
 | 
					 | 
				
			||||||
# 
 | 
					 | 
				
			||||||
: ${__cdist_out_dir:=$__cdist_local_base_dir/$__cdist_name_out_dir}
 | 
					 | 
				
			||||||
: ${__cdist_out_explorer_dir:=$__cdist_out_dir/$__cdist_name_explorer}
 | 
					 | 
				
			||||||
: ${__cdist_out_object_dir:=$__cdist_out_dir/$__cdist_name_object}
 | 
					 | 
				
			||||||
: ${__cdist_out_type_dir:=$__cdist_out_dir/$__cdist_name_type}
 | 
					 | 
				
			||||||
: ${__cdist_out_type_bin_dir:=$__cdist_out_dir/$__cdist_name_type_bin}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
: ${__cdist_objects_created:=$__cdist_out_object_dir/$__cdist_name_objects_created}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
################################################################################
 | 
					 | 
				
			||||||
# Remote base
 | 
					 | 
				
			||||||
# 
 | 
					 | 
				
			||||||
: ${__cdist_remote_base_dir:=/var/lib/cdist}
 | 
					 | 
				
			||||||
: ${__cdist_remote_bin_dir:=$__cdist_remote_base_dir/$__cdist_name_bin}
 | 
					 | 
				
			||||||
: ${__cdist_remote_conf_dir:=$__cdist_remote_base_dir/$__cdist_name_conf_dir}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
: ${__cdist_remote_explorer_dir:=$__cdist_remote_conf_dir/$__cdist_name_explorer}
 | 
					 | 
				
			||||||
: ${__cdist_remote_type_dir:=$__cdist_remote_conf_dir/$__cdist_name_type}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
################################################################################
 | 
					 | 
				
			||||||
# Remote output
 | 
					 | 
				
			||||||
#
 | 
					 | 
				
			||||||
: ${__cdist_remote_out_dir:=$__cdist_remote_base_dir/$__cdist_name_out_dir}
 | 
					 | 
				
			||||||
: ${__cdist_remote_out_explorer_dir:=$__cdist_remote_out_dir/$__cdist_name_explorer}
 | 
					 | 
				
			||||||
: ${__cdist_remote_out_object_dir:=$__cdist_remote_out_dir/$__cdist_name_object}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
################################################################################
 | 
					 | 
				
			||||||
# Internal functions
 | 
					 | 
				
			||||||
#
 | 
					 | 
				
			||||||
__cdist_echo()
 | 
					 | 
				
			||||||
{
 | 
					 | 
				
			||||||
   __cdist_echo_type="$1"; shift
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
   set +u
 | 
					 | 
				
			||||||
   if [ "$__cdist_object_self" ]; then
 | 
					 | 
				
			||||||
      __cdist_echo_prefix="${__cdist_object_self}:"
 | 
					 | 
				
			||||||
   else
 | 
					 | 
				
			||||||
      __cdist_echo_prefix="core: "
 | 
					 | 
				
			||||||
   fi
 | 
					 | 
				
			||||||
   set -u
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
   case "$__cdist_echo_type" in
 | 
					 | 
				
			||||||
      debug)
 | 
					 | 
				
			||||||
         set +u
 | 
					 | 
				
			||||||
         if [ "$__cdist_debug" ]; then
 | 
					 | 
				
			||||||
            echo $__cdist_echo_prefix "Debug: $@"
 | 
					 | 
				
			||||||
         fi
 | 
					 | 
				
			||||||
         set -u
 | 
					 | 
				
			||||||
      ;;
 | 
					 | 
				
			||||||
      info)
 | 
					 | 
				
			||||||
         echo $__cdist_echo_prefix "$@"
 | 
					 | 
				
			||||||
      ;;
 | 
					 | 
				
			||||||
      warn)
 | 
					 | 
				
			||||||
         echo $__cdist_echo_prefix "Warning: $@"
 | 
					 | 
				
			||||||
      ;;
 | 
					 | 
				
			||||||
      error)
 | 
					 | 
				
			||||||
         echo $__cdist_echo_prefix "Error: $@" >&2
 | 
					 | 
				
			||||||
      ;;
 | 
					 | 
				
			||||||
      *)
 | 
					 | 
				
			||||||
         echo "CORE BUG, who created the broken commit in $0?" >&2
 | 
					 | 
				
			||||||
         exit 23
 | 
					 | 
				
			||||||
      ;;
 | 
					 | 
				
			||||||
   esac
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
__cdist_exec_fail_on_error()
 | 
					 | 
				
			||||||
{
 | 
					 | 
				
			||||||
   set +e
 | 
					 | 
				
			||||||
   sh -e "$@"
 | 
					 | 
				
			||||||
   if [ "$?" -ne 0 ]; then
 | 
					 | 
				
			||||||
      __cdist_echo error  "$1 exited non-zero"
 | 
					 | 
				
			||||||
      __cdist_echo warn "Faulty code:"
 | 
					 | 
				
			||||||
      cat "$1"
 | 
					 | 
				
			||||||
      __cdist_exit_err "Aborting due to non-zero exit code."
 | 
					 | 
				
			||||||
   fi
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
__cdist_exit_err()
 | 
					 | 
				
			||||||
{
 | 
					 | 
				
			||||||
   __cdist_echo error "$@"
 | 
					 | 
				
			||||||
   exit 1
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
__cdist_usage()
 | 
					 | 
				
			||||||
{
 | 
					 | 
				
			||||||
   __cdist_exit_err "$__cdist_myname: $@"
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
__cdist_init_deploy()
 | 
					 | 
				
			||||||
{
 | 
					 | 
				
			||||||
   __cdist_echo info "Creating clean directory structure "
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
   # Ensure there is no old stuff, neither local nor remote
 | 
					 | 
				
			||||||
   rm -rf "$__cdist_local_base_dir"
 | 
					 | 
				
			||||||
   ssh "${__cdist_remote_user}@$1" "rm -rf ${__cdist_remote_base_dir}"
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
   # Init base
 | 
					 | 
				
			||||||
   mkdir -p "$__cdist_local_base_dir"
 | 
					 | 
				
			||||||
   ssh "${__cdist_remote_user}@$1" "mkdir -p ${__cdist_remote_base_dir}"
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
   # Link configuration source directory - consistent with remote
 | 
					 | 
				
			||||||
   ln -sf "$__cdist_conf_dir" "$__cdist_local_base_dir/$__cdist_name_conf_dir"
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
################################################################################
 | 
					 | 
				
			||||||
# Cache
 | 
					 | 
				
			||||||
#
 | 
					 | 
				
			||||||
__cdist_cache_dir()
 | 
					 | 
				
			||||||
{
 | 
					 | 
				
			||||||
   cd "${__cdist_local_base_cache_dir}" && pwd -P
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
__cdist_host_cache_dir()
 | 
					 | 
				
			||||||
{
 | 
					 | 
				
			||||||
   echo "$(__cdist_cache_dir)/$1" 
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
################################################################################
 | 
					 | 
				
			||||||
# Object
 | 
					 | 
				
			||||||
#
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
__cdist_object_code()
 | 
					 | 
				
			||||||
{
 | 
					 | 
				
			||||||
   echo "$(__cdist_object_dir "$1")/${__cdist_name_code}-$2"
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
__cdist_object_prepared()
 | 
					 | 
				
			||||||
{
 | 
					 | 
				
			||||||
   echo "$(__cdist_object_dir "$1")/${__cdist_name_object_prepared}"
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
__cdist_object_finished()
 | 
					 | 
				
			||||||
{
 | 
					 | 
				
			||||||
   echo "$(__cdist_object_dir "$1")/${__cdist_name_object_finished}"
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
__cdist_object_dir()
 | 
					 | 
				
			||||||
{
 | 
					 | 
				
			||||||
   echo "$(__cdist_object_base_dir "$1")/${__cdist_name_dot_cdist}"
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
__cdist_object_base_dir()
 | 
					 | 
				
			||||||
{
 | 
					 | 
				
			||||||
   echo "${__cdist_out_object_dir}/$1"
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
__cdist_object_id_from_object()
 | 
					 | 
				
			||||||
{
 | 
					 | 
				
			||||||
   echo "${1#*/}"
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
# Find objects, remove ./ and /MARKER
 | 
					 | 
				
			||||||
__cdist_object_list()
 | 
					 | 
				
			||||||
{
 | 
					 | 
				
			||||||
   local basedir="$1"; shift
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
   # Use subshell to prevent changing cwd in program
 | 
					 | 
				
			||||||
   (
 | 
					 | 
				
			||||||
      cd "${basedir}"
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
      find . -name "$__cdist_name_dot_cdist" |    \
 | 
					 | 
				
			||||||
         sed -e 's;^./;;' -e "s;/${__cdist_name_dot_cdist}\$;;"
 | 
					 | 
				
			||||||
   )
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
__cdist_object_parameter_dir()
 | 
					 | 
				
			||||||
{
 | 
					 | 
				
			||||||
   echo "$(__cdist_object_dir "$1")/${__cdist_name_parameter}"
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
__cdist_object_require()
 | 
					 | 
				
			||||||
{
 | 
					 | 
				
			||||||
   echo "$(__cdist_object_dir "$1")/${__cdist_name_require}"
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
__cdist_object_source_name()
 | 
					 | 
				
			||||||
{
 | 
					 | 
				
			||||||
   echo "$1/${__cdist_name_object_source}"
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
__cdist_object_source()
 | 
					 | 
				
			||||||
{
 | 
					 | 
				
			||||||
   cat "$(__cdist_object_source_name "$1")"
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
__cdist_object_source_add()
 | 
					 | 
				
			||||||
{
 | 
					 | 
				
			||||||
   echo "$__cdist_manifest" >> "$(__cdist_object_source_name "$1")"
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
__cdist_object_type_explorer_dir()
 | 
					 | 
				
			||||||
{
 | 
					 | 
				
			||||||
   echo "$(__cdist_object_dir "$1")/${__cdist_name_explorer}"
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
################################################################################
 | 
					 | 
				
			||||||
# Remote
 | 
					 | 
				
			||||||
#
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
__cdist_remote_object_base_dir()
 | 
					 | 
				
			||||||
{
 | 
					 | 
				
			||||||
   echo "${__cdist_remote_out_object_dir}/$1"
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
__cdist_remote_object_dir()
 | 
					 | 
				
			||||||
{
 | 
					 | 
				
			||||||
   echo "$(__cdist_remote_object_base_dir "$1")/${__cdist_name_dot_cdist}"
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
__cdist_remote_object_parameter_dir()
 | 
					 | 
				
			||||||
{
 | 
					 | 
				
			||||||
   echo "$(__cdist_remote_object_dir "$1")/${__cdist_name_parameter}"
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
__cdist_remote_object_type_explorer_dir()
 | 
					 | 
				
			||||||
{
 | 
					 | 
				
			||||||
   echo "$(__cdist_remote_object_dir "$1")/${__cdist_name_explorer}"
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
__cdist_remote_type_explorer_dir()
 | 
					 | 
				
			||||||
{
 | 
					 | 
				
			||||||
   echo "${__cdist_remote_type_dir}/$1/${__cdist_name_explorer}"
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
################################################################################
 | 
					 | 
				
			||||||
# Traps
 | 
					 | 
				
			||||||
#
 | 
					 | 
				
			||||||
__cdist_tmp_removal()
 | 
					 | 
				
			||||||
{
 | 
					 | 
				
			||||||
   rm -rf "${__cdist_tmp_dir}"
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
# Does not work in children, will be called again in every script!
 | 
					 | 
				
			||||||
# Use only in interactive "front end" scripts
 | 
					 | 
				
			||||||
__cdist_kill_on_interrupt()
 | 
					 | 
				
			||||||
{
 | 
					 | 
				
			||||||
   __cdist_tmp_removal
 | 
					 | 
				
			||||||
   kill 0
 | 
					 | 
				
			||||||
   exit 1
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
# Remove tempfiles at normal exit
 | 
					 | 
				
			||||||
trap __cdist_tmp_removal EXIT
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
################################################################################
 | 
					 | 
				
			||||||
# Type
 | 
					 | 
				
			||||||
#
 | 
					 | 
				
			||||||
__cdist_type_dir()
 | 
					 | 
				
			||||||
{
 | 
					 | 
				
			||||||
   echo "${__cdist_type_dir}/$1"
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
__cdist_type_explorer_dir()
 | 
					 | 
				
			||||||
{
 | 
					 | 
				
			||||||
   echo "${__cdist_type_dir}/$1/${__cdist_name_explorer}"
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
__cdist_type_from_object()
 | 
					 | 
				
			||||||
{
 | 
					 | 
				
			||||||
   echo "${1%%/*}"
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
__cdist_type_has_explorer()
 | 
					 | 
				
			||||||
{
 | 
					 | 
				
			||||||
   # We only create output, if there's at least one explorer
 | 
					 | 
				
			||||||
   # and can thus be used as a boolean ;-)
 | 
					 | 
				
			||||||
   if [ -d "$(__cdist_type_explorer_dir "$1")" ]; then
 | 
					 | 
				
			||||||
      ls -1 "$(__cdist_type_explorer_dir "$1")"
 | 
					 | 
				
			||||||
   fi
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
__cdist_type_explorer_pushed()
 | 
					 | 
				
			||||||
{
 | 
					 | 
				
			||||||
   [ -f "${__cdist_out_type_dir}/${__cdist_name_type_explorer_pushed}" ] \
 | 
					 | 
				
			||||||
      && grep -x -q "$1" "${__cdist_out_type_dir}/${__cdist_name_type_explorer_pushed}"
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
__cdist_type_explorer_pushed_add()
 | 
					 | 
				
			||||||
{
 | 
					 | 
				
			||||||
   [ -d "$__cdist_out_type_dir" ] || mkdir "$__cdist_out_type_dir"
 | 
					 | 
				
			||||||
   echo "$1" >> "${__cdist_out_type_dir}/${__cdist_name_type_explorer_pushed}"
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
__cdist_type_gencode()
 | 
					 | 
				
			||||||
{
 | 
					 | 
				
			||||||
   echo "${__cdist_type_dir}/$1/${__cdist_name_gencode}-$2"
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
__cdist_type_manifest()
 | 
					 | 
				
			||||||
{
 | 
					 | 
				
			||||||
   echo "${__cdist_type_dir}/$1/${__cdist_name_manifest}"
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
__cdist_type_parameter_dir()
 | 
					 | 
				
			||||||
{
 | 
					 | 
				
			||||||
   echo "$(__cdist_type_dir "$1")/${__cdist_name_parameter}"
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
__cdist_type_parameter_optional()
 | 
					 | 
				
			||||||
{
 | 
					 | 
				
			||||||
   echo "$(__cdist_type_parameter_dir "$1")/$__cdist_name_parameter_optional"
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
__cdist_type_parameter_required()
 | 
					 | 
				
			||||||
{
 | 
					 | 
				
			||||||
   echo "$(__cdist_type_parameter_dir "$1")/$__cdist_name_parameter_required"
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
__cdist_type_singleton()
 | 
					 | 
				
			||||||
{
 | 
					 | 
				
			||||||
   echo "${__cdist_type_dir}/$1/${__cdist_name_singleton}"
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
| 
						 | 
					@ -1,59 +0,0 @@
 | 
				
			||||||
#!/bin/sh
 | 
					 | 
				
			||||||
#
 | 
					 | 
				
			||||||
# 2010-2011 Nico Schottelius (nico-cdist at schottelius.org)
 | 
					 | 
				
			||||||
#
 | 
					 | 
				
			||||||
# This file is part of cdist.
 | 
					 | 
				
			||||||
#
 | 
					 | 
				
			||||||
# cdist is free software: you can redistribute it and/or modify
 | 
					 | 
				
			||||||
# it under the terms of the GNU General Public License as published by
 | 
					 | 
				
			||||||
# the Free Software Foundation, either version 3 of the License, or
 | 
					 | 
				
			||||||
# (at your option) any later version.
 | 
					 | 
				
			||||||
#
 | 
					 | 
				
			||||||
# cdist is distributed in the hope that it will be useful,
 | 
					 | 
				
			||||||
# but WITHOUT ANY WARRANTY; without even the implied warranty of
 | 
					 | 
				
			||||||
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 | 
					 | 
				
			||||||
# GNU General Public License for more details.
 | 
					 | 
				
			||||||
#
 | 
					 | 
				
			||||||
# You should have received a copy of the GNU General Public License
 | 
					 | 
				
			||||||
# along with cdist. If not, see <http://www.gnu.org/licenses/>.
 | 
					 | 
				
			||||||
#
 | 
					 | 
				
			||||||
#
 | 
					 | 
				
			||||||
# Deploy configuration to a host
 | 
					 | 
				
			||||||
#
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
. cdist-config
 | 
					 | 
				
			||||||
[ $# -eq 1 ] || __cdist_usage "<target host>"
 | 
					 | 
				
			||||||
set -eu
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
# Kill children on interrupt - only in interactive scripts
 | 
					 | 
				
			||||||
trap __cdist_kill_on_interrupt INT TERM
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
__cdist_target_host="$1"
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
# Make target host available for non-core
 | 
					 | 
				
			||||||
export $__cdist_name_var_target_host="$__cdist_target_host"
 | 
					 | 
				
			||||||
export $__cdist_name_var_target_user="$__cdist_remote_user"
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
# Export variables for core, which others do not reset
 | 
					 | 
				
			||||||
export __cdist_local_base_dir
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
__cdist_echo info "cdist $__cdist_version: Configuring $__cdist_target_host "
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
################################################################################
 | 
					 | 
				
			||||||
# See cdist-stages(7)
 | 
					 | 
				
			||||||
#
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
# Prepare local and remote directories
 | 
					 | 
				
			||||||
__cdist_init_deploy           "$__cdist_target_host"
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
# Transfer cdist executables
 | 
					 | 
				
			||||||
__cdist_echo info "Transferring cdist binaries to the target host "
 | 
					 | 
				
			||||||
cdist-dir push                "$__cdist_target_host" \
 | 
					 | 
				
			||||||
   "${__cdist_abs_mydir}" "${__cdist_remote_bin_dir}"
 | 
					 | 
				
			||||||
cdist-explorer-run-global     "$__cdist_target_host"
 | 
					 | 
				
			||||||
cdist-manifest-run-init       "$__cdist_target_host"
 | 
					 | 
				
			||||||
cdist-object-all              "$__cdist_target_host" cdist-object-prepare
 | 
					 | 
				
			||||||
cdist-object-all              "$__cdist_target_host" cdist-object-run
 | 
					 | 
				
			||||||
cdist-cache                   "$__cdist_target_host"
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
__cdist_echo info "cdist $__cdist_version: Successfully finished run"
 | 
					 | 
				
			||||||
| 
						 | 
					@ -1,51 +0,0 @@
 | 
				
			||||||
#!/bin/sh
 | 
					 | 
				
			||||||
#
 | 
					 | 
				
			||||||
# 2011 Nico Schottelius (nico-cdist at schottelius.org)
 | 
					 | 
				
			||||||
#
 | 
					 | 
				
			||||||
# This file is part of cdist.
 | 
					 | 
				
			||||||
#
 | 
					 | 
				
			||||||
# cdist is free software: you can redistribute it and/or modify
 | 
					 | 
				
			||||||
# it under the terms of the GNU General Public License as published by
 | 
					 | 
				
			||||||
# the Free Software Foundation, either version 3 of the License, or
 | 
					 | 
				
			||||||
# (at your option) any later version.
 | 
					 | 
				
			||||||
#
 | 
					 | 
				
			||||||
# cdist is distributed in the hope that it will be useful,
 | 
					 | 
				
			||||||
# but WITHOUT ANY WARRANTY; without even the implied warranty of
 | 
					 | 
				
			||||||
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 | 
					 | 
				
			||||||
# GNU General Public License for more details.
 | 
					 | 
				
			||||||
#
 | 
					 | 
				
			||||||
# You should have received a copy of the GNU General Public License
 | 
					 | 
				
			||||||
# along with cdist. If not, see <http://www.gnu.org/licenses/>.
 | 
					 | 
				
			||||||
#
 | 
					 | 
				
			||||||
#
 | 
					 | 
				
			||||||
# Push a directory to a target, both sides have the same name (i.e. explorers)
 | 
					 | 
				
			||||||
# or
 | 
					 | 
				
			||||||
# Pull a directory from a target, both sides have the same name (i.e. explorers)
 | 
					 | 
				
			||||||
#
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
. cdist-config
 | 
					 | 
				
			||||||
[ $# -eq 4 ] || __cdist_usage "<push|pull> <target host> <src dir> <dst dir>"
 | 
					 | 
				
			||||||
set -ue
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
__cdist_action="$1"; shift
 | 
					 | 
				
			||||||
__cdist_target_host="$1"; shift
 | 
					 | 
				
			||||||
__cdist_src_dir="$1"; shift
 | 
					 | 
				
			||||||
__cdist_dst_dir="$1"; shift
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
# This will be the destination directory, so no subdirectories
 | 
					 | 
				
			||||||
# of the same name are created, if the directory is already existing
 | 
					 | 
				
			||||||
__cdist_top_dir="${__cdist_dst_dir%/*}"
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
if [ "$__cdist_action" = "push" ]; then
 | 
					 | 
				
			||||||
   ssh "${__cdist_remote_user}@${__cdist_target_host}" \
 | 
					 | 
				
			||||||
      "mkdir -p \"${__cdist_dst_dir}\""
 | 
					 | 
				
			||||||
   scp -qr "$__cdist_src_dir" \
 | 
					 | 
				
			||||||
      "${__cdist_remote_user}@${__cdist_target_host}:${__cdist_top_dir}"
 | 
					 | 
				
			||||||
elif [ "$__cdist_action" = "pull" ]; then
 | 
					 | 
				
			||||||
   mkdir -p "${__cdist_dst_dir}"
 | 
					 | 
				
			||||||
   scp -qr "${__cdist_remote_user}@${__cdist_target_host}:${__cdist_src_dir}" \
 | 
					 | 
				
			||||||
      "${__cdist_top_dir}"
 | 
					 | 
				
			||||||
else
 | 
					 | 
				
			||||||
   __cdist_exit_err "Unknown action $__cdist_action"
 | 
					 | 
				
			||||||
fi
 | 
					 | 
				
			||||||
| 
						 | 
					@ -1,43 +0,0 @@
 | 
				
			||||||
#!/bin/sh
 | 
					 | 
				
			||||||
#
 | 
					 | 
				
			||||||
# 2010-2011 Nico Schottelius (nico-cdist at schottelius.org)
 | 
					 | 
				
			||||||
#
 | 
					 | 
				
			||||||
# This file is part of cdist.
 | 
					 | 
				
			||||||
#
 | 
					 | 
				
			||||||
# cdist is free software: you can redistribute it and/or modify
 | 
					 | 
				
			||||||
# it under the terms of the GNU General Public License as published by
 | 
					 | 
				
			||||||
# the Free Software Foundation, either version 3 of the License, or
 | 
					 | 
				
			||||||
# (at your option) any later version.
 | 
					 | 
				
			||||||
#
 | 
					 | 
				
			||||||
# cdist is distributed in the hope that it will be useful,
 | 
					 | 
				
			||||||
# but WITHOUT ANY WARRANTY; without even the implied warranty of
 | 
					 | 
				
			||||||
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 | 
					 | 
				
			||||||
# GNU General Public License for more details.
 | 
					 | 
				
			||||||
#
 | 
					 | 
				
			||||||
# You should have received a copy of the GNU General Public License
 | 
					 | 
				
			||||||
# along with cdist. If not, see <http://www.gnu.org/licenses/>.
 | 
					 | 
				
			||||||
#
 | 
					 | 
				
			||||||
#
 | 
					 | 
				
			||||||
# Copy & run the global explorers, i.e. not bound to types
 | 
					 | 
				
			||||||
#
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
. cdist-config
 | 
					 | 
				
			||||||
[ $# -eq 1 ] || __cdist_usage "<target_host>"
 | 
					 | 
				
			||||||
set -ue
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
__cdist_target_host="$1"; shift
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
__cdist_echo info "Running global explorers "
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
# copy the explorers
 | 
					 | 
				
			||||||
cdist-dir push "$__cdist_target_host" \
 | 
					 | 
				
			||||||
   "${__cdist_explorer_dir}" "${__cdist_remote_explorer_dir}"
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
# run the initial explorers remotely
 | 
					 | 
				
			||||||
cdist-run-remote "${__cdist_target_host}" cdist-remote-explorer-run  \
 | 
					 | 
				
			||||||
   "$__cdist_name_var_explorer" "$__cdist_remote_explorer_dir"       \
 | 
					 | 
				
			||||||
   "$__cdist_remote_out_explorer_dir"
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
# retrieve the results
 | 
					 | 
				
			||||||
cdist-dir pull "$__cdist_target_host" \
 | 
					 | 
				
			||||||
   "${__cdist_remote_out_explorer_dir}" "${__cdist_out_explorer_dir}"
 | 
					 | 
				
			||||||
| 
						 | 
					@ -1,56 +0,0 @@
 | 
				
			||||||
#!/bin/sh
 | 
					 | 
				
			||||||
#
 | 
					 | 
				
			||||||
# 2010 Nico Schottelius (nico-cdist at schottelius.org)
 | 
					 | 
				
			||||||
#
 | 
					 | 
				
			||||||
# This file is part of cdist.
 | 
					 | 
				
			||||||
#
 | 
					 | 
				
			||||||
# cdist is free software: you can redistribute it and/or modify
 | 
					 | 
				
			||||||
# it under the terms of the GNU General Public License as published by
 | 
					 | 
				
			||||||
# the Free Software Foundation, either version 3 of the License, or
 | 
					 | 
				
			||||||
# (at your option) any later version.
 | 
					 | 
				
			||||||
#
 | 
					 | 
				
			||||||
# cdist is distributed in the hope that it will be useful,
 | 
					 | 
				
			||||||
# but WITHOUT ANY WARRANTY; without even the implied warranty of
 | 
					 | 
				
			||||||
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 | 
					 | 
				
			||||||
# GNU General Public License for more details.
 | 
					 | 
				
			||||||
#
 | 
					 | 
				
			||||||
# You should have received a copy of the GNU General Public License
 | 
					 | 
				
			||||||
# along with cdist. If not, see <http://www.gnu.org/licenses/>.
 | 
					 | 
				
			||||||
#
 | 
					 | 
				
			||||||
# 
 | 
					 | 
				
			||||||
# Let's build a cconfig tree from a configuration
 | 
					 | 
				
			||||||
# And save it into the cache tree
 | 
					 | 
				
			||||||
#
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
. cdist-config
 | 
					 | 
				
			||||||
[ $# -eq 2 ] || __cdist_usage "<target host> <manifest>"
 | 
					 | 
				
			||||||
set -u
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
__cdist_target_host="$1"; shift
 | 
					 | 
				
			||||||
__cdist_manifest="$1"; shift
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
################################################################################
 | 
					 | 
				
			||||||
# Export information for cdist-type-emulator or manifest
 | 
					 | 
				
			||||||
#
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
# Config dir should not get reset - FIXME: why did I do this?
 | 
					 | 
				
			||||||
export __cdist_conf_dir
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
# Used to record the source in the object
 | 
					 | 
				
			||||||
export __cdist_manifest
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
# Export information for manifests - __cdist_out_dir comes from cdist-config
 | 
					 | 
				
			||||||
export __global="$__cdist_out_dir"
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
################################################################################
 | 
					 | 
				
			||||||
# The actual run
 | 
					 | 
				
			||||||
#
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
# Ensure binaries exist and are up-to-date
 | 
					 | 
				
			||||||
cdist-type-build-emulation "${__cdist_out_type_bin_dir}" \
 | 
					 | 
				
			||||||
   || __cdist_exit_err "Failed to build type emulation binaries"
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
# prepend our path, so all cdist tools come before other tools
 | 
					 | 
				
			||||||
export PATH="${__cdist_out_type_bin_dir}:$PATH"
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
__cdist_exec_fail_on_error "${__cdist_manifest}"
 | 
					 | 
				
			||||||
| 
						 | 
					@ -1,75 +0,0 @@
 | 
				
			||||||
#!/bin/sh
 | 
					 | 
				
			||||||
#
 | 
					 | 
				
			||||||
# 2011 Nico Schottelius (nico-cdist at schottelius.org)
 | 
					 | 
				
			||||||
#
 | 
					 | 
				
			||||||
# This file is part of cdist.
 | 
					 | 
				
			||||||
#
 | 
					 | 
				
			||||||
# cdist is free software: you can redistribute it and/or modify
 | 
					 | 
				
			||||||
# it under the terms of the GNU General Public License as published by
 | 
					 | 
				
			||||||
# the Free Software Foundation, either version 3 of the License, or
 | 
					 | 
				
			||||||
# (at your option) any later version.
 | 
					 | 
				
			||||||
#
 | 
					 | 
				
			||||||
# cdist is distributed in the hope that it will be useful,
 | 
					 | 
				
			||||||
# but WITHOUT ANY WARRANTY; without even the implied warranty of
 | 
					 | 
				
			||||||
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 | 
					 | 
				
			||||||
# GNU General Public License for more details.
 | 
					 | 
				
			||||||
#
 | 
					 | 
				
			||||||
# You should have received a copy of the GNU General Public License
 | 
					 | 
				
			||||||
# along with cdist. If not, see <http://www.gnu.org/licenses/>.
 | 
					 | 
				
			||||||
#
 | 
					 | 
				
			||||||
#
 | 
					 | 
				
			||||||
# Deploy configuration to many hosts
 | 
					 | 
				
			||||||
#
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
. cdist-config
 | 
					 | 
				
			||||||
[ $# -ge 1 ] || __cdist_usage "[-p] <target host> [target host ]"
 | 
					 | 
				
			||||||
set -u
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
# Kill children on interrupt - only in interactive scripts
 | 
					 | 
				
			||||||
trap __cdist_kill_on_interrupt INT TERM
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
filter()
 | 
					 | 
				
			||||||
{
 | 
					 | 
				
			||||||
   awk -v host=$1 '{ print "[" host "] " $0 }'
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
parallel=""
 | 
					 | 
				
			||||||
if [ "$1" = "-p" ]; then
 | 
					 | 
				
			||||||
   parallel=yes
 | 
					 | 
				
			||||||
   shift
 | 
					 | 
				
			||||||
fi
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
i=0
 | 
					 | 
				
			||||||
while [ $# -gt 0 ]; do
 | 
					 | 
				
			||||||
   if [ "$parallel" ]; then
 | 
					 | 
				
			||||||
      cdist-deploy-to "$1" | filter "$1" &
 | 
					 | 
				
			||||||
      # Record pid and host for use later
 | 
					 | 
				
			||||||
      i=$((i+1))
 | 
					 | 
				
			||||||
      eval pid_$i=$!
 | 
					 | 
				
			||||||
      eval host_$i=\$1
 | 
					 | 
				
			||||||
   else
 | 
					 | 
				
			||||||
      cdist-deploy-to "$1" | filter "$1"
 | 
					 | 
				
			||||||
   fi
 | 
					 | 
				
			||||||
   shift
 | 
					 | 
				
			||||||
done
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
e=0
 | 
					 | 
				
			||||||
if [ "$parallel" ]; then
 | 
					 | 
				
			||||||
   __cdist_echo info "Waiting for cdist-deploy-to jobs to finish"
 | 
					 | 
				
			||||||
   while [ "$i" -gt 0 ]; do
 | 
					 | 
				
			||||||
      eval pid=\$pid_$i
 | 
					 | 
				
			||||||
      wait "$pid"
 | 
					 | 
				
			||||||
      if [ $? -ne 0 ]; then
 | 
					 | 
				
			||||||
         e=$((e+1))
 | 
					 | 
				
			||||||
         eval e_host_$e=\$host_$i
 | 
					 | 
				
			||||||
      fi
 | 
					 | 
				
			||||||
      i=$((i-1))
 | 
					 | 
				
			||||||
   done
 | 
					 | 
				
			||||||
fi
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
# Display all failed hosts after all runs are done, so the sysadmin gets them
 | 
					 | 
				
			||||||
while [ "$e" -gt 0 ]; do
 | 
					 | 
				
			||||||
   eval host=\$host_$e
 | 
					 | 
				
			||||||
   __cdist_echo error "Configuration of host $host failed."
 | 
					 | 
				
			||||||
   e=$((e-1))
 | 
					 | 
				
			||||||
done
 | 
					 | 
				
			||||||
| 
						 | 
					@ -1,56 +0,0 @@
 | 
				
			||||||
#!/bin/sh
 | 
					 | 
				
			||||||
#
 | 
					 | 
				
			||||||
# 2011 Nico Schottelius (nico-cdist at schottelius.org)
 | 
					 | 
				
			||||||
# 2011 Steven Armstrong (steven-cdist at armstrong.cc)
 | 
					 | 
				
			||||||
#
 | 
					 | 
				
			||||||
# This file is part of cdist.
 | 
					 | 
				
			||||||
#
 | 
					 | 
				
			||||||
# cdist is free software: you can redistribute it and/or modify
 | 
					 | 
				
			||||||
# it under the terms of the GNU General Public License as published by
 | 
					 | 
				
			||||||
# the Free Software Foundation, either version 3 of the License, or
 | 
					 | 
				
			||||||
# (at your option) any later version.
 | 
					 | 
				
			||||||
#
 | 
					 | 
				
			||||||
# cdist is distributed in the hope that it will be useful,
 | 
					 | 
				
			||||||
# but WITHOUT ANY WARRANTY; without even the implied warranty of
 | 
					 | 
				
			||||||
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 | 
					 | 
				
			||||||
# GNU General Public License for more details.
 | 
					 | 
				
			||||||
#
 | 
					 | 
				
			||||||
# You should have received a copy of the GNU General Public License
 | 
					 | 
				
			||||||
# along with cdist. If not, see <http://www.gnu.org/licenses/>.
 | 
					 | 
				
			||||||
#
 | 
					 | 
				
			||||||
# 
 | 
					 | 
				
			||||||
# Run the given command for each created object.
 | 
					 | 
				
			||||||
#
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
. cdist-config
 | 
					 | 
				
			||||||
[ $# -eq 2 ] || __cdist_usage "<target host> <command>"
 | 
					 | 
				
			||||||
set -eu
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
__cdist_target_host="$1"; shift
 | 
					 | 
				
			||||||
__cdist_command="$1"; shift
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
__cdist_objects="$__cdist_tmp_dir/objects"
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
# Ensure object dir exists, so marker can be created
 | 
					 | 
				
			||||||
mkdir -p "${__cdist_out_object_dir}"
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
# Loop until we do not create new objects anymore
 | 
					 | 
				
			||||||
# which is equal to all objects have been run
 | 
					 | 
				
			||||||
touch "$__cdist_objects_created"
 | 
					 | 
				
			||||||
while [ -f "$__cdist_objects_created" ]; do
 | 
					 | 
				
			||||||
   # Assume we're done after this run
 | 
					 | 
				
			||||||
   rm "$__cdist_objects_created"
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
   # Get listing of objects
 | 
					 | 
				
			||||||
   __cdist_object_list "$__cdist_out_object_dir" > "$__cdist_objects"
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
   # NEED TO CREATE ARRAY, SSH DESTROYS WHILE READ LOOP
 | 
					 | 
				
			||||||
   while read __cdist_object; do
 | 
					 | 
				
			||||||
      set -- "$@" "$__cdist_object"
 | 
					 | 
				
			||||||
   done < "$__cdist_objects"
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
   while [ $# -gt 0 ]; do
 | 
					 | 
				
			||||||
      __cdist_object="$1"; shift
 | 
					 | 
				
			||||||
      $__cdist_command "$__cdist_target_host" "$__cdist_object"
 | 
					 | 
				
			||||||
   done
 | 
					 | 
				
			||||||
done
 | 
					 | 
				
			||||||
| 
						 | 
					@ -1,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 <http://www.gnu.org/licenses/>.
 | 
					 | 
				
			||||||
#
 | 
					 | 
				
			||||||
#
 | 
					 | 
				
			||||||
# Exec the code for the given object locally and remote
 | 
					 | 
				
			||||||
#
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
. cdist-config
 | 
					 | 
				
			||||||
[ $# -eq 2 ] || __cdist_usage "<target host> <object>"
 | 
					 | 
				
			||||||
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}"
 | 
					 | 
				
			||||||
| 
						 | 
					@ -1,67 +0,0 @@
 | 
				
			||||||
#!/bin/sh
 | 
					 | 
				
			||||||
#
 | 
					 | 
				
			||||||
# 2010-2011 Nico Schottelius (nico-cdist at schottelius.org)
 | 
					 | 
				
			||||||
# 2011 Steven Armstrong (steven-cdist at armstrong.cc)
 | 
					 | 
				
			||||||
#
 | 
					 | 
				
			||||||
# This file is part of cdist.
 | 
					 | 
				
			||||||
#
 | 
					 | 
				
			||||||
# cdist is free software: you can redistribute it and/or modify
 | 
					 | 
				
			||||||
# it under the terms of the GNU General Public License as published by
 | 
					 | 
				
			||||||
# the Free Software Foundation, either version 3 of the License, or
 | 
					 | 
				
			||||||
# (at your option) any later version.
 | 
					 | 
				
			||||||
#
 | 
					 | 
				
			||||||
# cdist is distributed in the hope that it will be useful,
 | 
					 | 
				
			||||||
# but WITHOUT ANY WARRANTY; without even the implied warranty of
 | 
					 | 
				
			||||||
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 | 
					 | 
				
			||||||
# GNU General Public License for more details.
 | 
					 | 
				
			||||||
#
 | 
					 | 
				
			||||||
# You should have received a copy of the GNU General Public License
 | 
					 | 
				
			||||||
# along with cdist. If not, see <http://www.gnu.org/licenses/>.
 | 
					 | 
				
			||||||
#
 | 
					 | 
				
			||||||
# 
 | 
					 | 
				
			||||||
# Run the explorers for the given object on the target host.
 | 
					 | 
				
			||||||
#
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
. cdist-config
 | 
					 | 
				
			||||||
[ $# -eq 2 ] || __cdist_usage "<target host> <object>"
 | 
					 | 
				
			||||||
set -eu
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
__cdist_target_host="$1"; shift
 | 
					 | 
				
			||||||
__cdist_object_self="$1"; shift
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
__cdist_object_id="$(__cdist_object_id_from_object "$__cdist_object_self")"
 | 
					 | 
				
			||||||
__cdist_type="$(__cdist_type_from_object "$__cdist_object_self")"
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
# Check if type of object has >= 1 explorer
 | 
					 | 
				
			||||||
__cdist_has_explorer="$(__cdist_type_has_explorer "$__cdist_type")"
 | 
					 | 
				
			||||||
# Run the type explorers for the current object if any
 | 
					 | 
				
			||||||
if [ "$__cdist_has_explorer" ]; then
 | 
					 | 
				
			||||||
   if ! __cdist_type_explorer_pushed "$__cdist_type"; then
 | 
					 | 
				
			||||||
      src_dir="$(__cdist_type_explorer_dir "$__cdist_type")"
 | 
					 | 
				
			||||||
      dst_dir="$(__cdist_remote_type_explorer_dir "$__cdist_type")"
 | 
					 | 
				
			||||||
      __cdist_echo info "Transfering explorers for $__cdist_type "
 | 
					 | 
				
			||||||
      cdist-dir push "$__cdist_target_host" "$src_dir" "$dst_dir"
 | 
					 | 
				
			||||||
      __cdist_type_explorer_pushed_add "$__cdist_type"
 | 
					 | 
				
			||||||
   fi
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
   __cdist_echo info "Running explorers"
 | 
					 | 
				
			||||||
   # Copy object parameters
 | 
					 | 
				
			||||||
   cdist-dir push "$__cdist_target_host"                          \
 | 
					 | 
				
			||||||
      "$(__cdist_object_parameter_dir "$__cdist_object_self")"         \
 | 
					 | 
				
			||||||
      "$(__cdist_remote_object_parameter_dir "$__cdist_object_self")"
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
   # Execute explorers
 | 
					 | 
				
			||||||
   cdist-run-remote "$__cdist_target_host"                     \
 | 
					 | 
				
			||||||
      "$__cdist_name_var_object=\"$(__cdist_remote_object_dir "$__cdist_object_self")\"" \
 | 
					 | 
				
			||||||
      "$__cdist_name_var_object_id=\"$__cdist_object_id\""     \
 | 
					 | 
				
			||||||
      "$__cdist_name_var_self=\"$__cdist_object_self\""        \
 | 
					 | 
				
			||||||
      cdist-remote-explorer-run                                \
 | 
					 | 
				
			||||||
      "$__cdist_name_var_type_explorer"                        \
 | 
					 | 
				
			||||||
      "$(__cdist_remote_type_explorer_dir "$__cdist_type")"    \
 | 
					 | 
				
			||||||
      "$(__cdist_remote_object_type_explorer_dir "$__cdist_object_self")"
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
   # Copy back results
 | 
					 | 
				
			||||||
   cdist-dir pull "$__cdist_target_host"                             \
 | 
					 | 
				
			||||||
      "$(__cdist_remote_object_type_explorer_dir "$__cdist_object_self")" \
 | 
					 | 
				
			||||||
      "$(__cdist_object_type_explorer_dir "$__cdist_object_self")"
 | 
					 | 
				
			||||||
fi
 | 
					 | 
				
			||||||
| 
						 | 
					@ -1,62 +0,0 @@
 | 
				
			||||||
#!/bin/sh
 | 
					 | 
				
			||||||
#
 | 
					 | 
				
			||||||
# 2011 Nico Schottelius (nico-cdist at schottelius.org)
 | 
					 | 
				
			||||||
#
 | 
					 | 
				
			||||||
# This file is part of cdist.
 | 
					 | 
				
			||||||
#
 | 
					 | 
				
			||||||
# cdist is free software: you can redistribute it and/or modify
 | 
					 | 
				
			||||||
# it under the terms of the GNU General Public License as published by
 | 
					 | 
				
			||||||
# the Free Software Foundation, either version 3 of the License, or
 | 
					 | 
				
			||||||
# (at your option) any later version.
 | 
					 | 
				
			||||||
#
 | 
					 | 
				
			||||||
# cdist is distributed in the hope that it will be useful,
 | 
					 | 
				
			||||||
# but WITHOUT ANY WARRANTY; without even the implied warranty of
 | 
					 | 
				
			||||||
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 | 
					 | 
				
			||||||
# GNU General Public License for more details.
 | 
					 | 
				
			||||||
#
 | 
					 | 
				
			||||||
# You should have received a copy of the GNU General Public License
 | 
					 | 
				
			||||||
# along with cdist. If not, see <http://www.gnu.org/licenses/>.
 | 
					 | 
				
			||||||
#
 | 
					 | 
				
			||||||
#
 | 
					 | 
				
			||||||
# Generate code from one object (object must be relative path!)
 | 
					 | 
				
			||||||
# WARNING: OUTPUT ON STDOUT, ERRORS NEED TO BE ON STDERR!
 | 
					 | 
				
			||||||
#
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
. cdist-config
 | 
					 | 
				
			||||||
[ $# -eq 3 ] || __cdist_usage "<target host>" "<object>" "<type>"
 | 
					 | 
				
			||||||
set -eu
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
__cdist_target_host="$1"; shift
 | 
					 | 
				
			||||||
__cdist_object_self="$1"; shift
 | 
					 | 
				
			||||||
__cdist_gencode_type="$1"; shift
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
__cdist_type="$(__cdist_type_from_object "$__cdist_object_self")"
 | 
					 | 
				
			||||||
__cdist_type_gencode="$(__cdist_type_gencode "$__cdist_type" "$__cdist_gencode_type")"
 | 
					 | 
				
			||||||
__cdist_code_output="$(__cdist_object_code "$__cdist_object_self" "$__cdist_gencode_type")"
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
# export variables for the gencode script
 | 
					 | 
				
			||||||
export __object_id="$(__cdist_object_id_from_object "$__cdist_object_self")"
 | 
					 | 
				
			||||||
export __object="$(__cdist_object_dir "$__cdist_object_self")"
 | 
					 | 
				
			||||||
export __global="$__cdist_out_dir"
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
if [ -x "$__cdist_type_gencode" ]; then
 | 
					 | 
				
			||||||
   __cdist_exec_fail_on_error "$__cdist_type_gencode" > "$__cdist_tmp_file"
 | 
					 | 
				
			||||||
else
 | 
					 | 
				
			||||||
   if [ -e "$__cdist_type_gencode" ]; then
 | 
					 | 
				
			||||||
      __cdist_exit_err "$__cdist_type_gencode exists, but is not executable"
 | 
					 | 
				
			||||||
   fi
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
   # Ensure it's empty, if there is no gencode
 | 
					 | 
				
			||||||
   : > "$__cdist_tmp_file"
 | 
					 | 
				
			||||||
fi
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
# Only create code, if gencode created output
 | 
					 | 
				
			||||||
if [ "$(wc -l < "$__cdist_tmp_file")" -gt 0 ]; then
 | 
					 | 
				
			||||||
   cat - "$__cdist_tmp_file" << eof > "$__cdist_code_output"
 | 
					 | 
				
			||||||
#
 | 
					 | 
				
			||||||
# The following code was generated by $__cdist_type_gencode
 | 
					 | 
				
			||||||
#
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
eof
 | 
					 | 
				
			||||||
   chmod u+x "${__cdist_code_output}"
 | 
					 | 
				
			||||||
fi
 | 
					 | 
				
			||||||
| 
						 | 
					@ -1,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 <http://www.gnu.org/licenses/>.
 | 
					 | 
				
			||||||
#
 | 
					 | 
				
			||||||
# 
 | 
					 | 
				
			||||||
# For the given object create the code to be executed on the target.
 | 
					 | 
				
			||||||
#
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
. cdist-config
 | 
					 | 
				
			||||||
[ $# -eq 2 ] || __cdist_usage "<target host> <object>"
 | 
					 | 
				
			||||||
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}"
 | 
					 | 
				
			||||||
| 
						 | 
					@ -1,58 +0,0 @@
 | 
				
			||||||
#!/bin/sh
 | 
					 | 
				
			||||||
#
 | 
					 | 
				
			||||||
# 2010 Nico Schottelius (nico-cdist at schottelius.org)
 | 
					 | 
				
			||||||
# 2011 Steven Armstrong (steven-cdist at armstrong.cc)
 | 
					 | 
				
			||||||
#
 | 
					 | 
				
			||||||
# This file is part of cdist.
 | 
					 | 
				
			||||||
#
 | 
					 | 
				
			||||||
# cdist is free software: you can redistribute it and/or modify
 | 
					 | 
				
			||||||
# it under the terms of the GNU General Public License as published by
 | 
					 | 
				
			||||||
# the Free Software Foundation, either version 3 of the License, or
 | 
					 | 
				
			||||||
# (at your option) any later version.
 | 
					 | 
				
			||||||
#
 | 
					 | 
				
			||||||
# cdist is distributed in the hope that it will be useful,
 | 
					 | 
				
			||||||
# but WITHOUT ANY WARRANTY; without even the implied warranty of
 | 
					 | 
				
			||||||
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 | 
					 | 
				
			||||||
# GNU General Public License for more details.
 | 
					 | 
				
			||||||
#
 | 
					 | 
				
			||||||
# You should have received a copy of the GNU General Public License
 | 
					 | 
				
			||||||
# along with cdist. If not, see <http://www.gnu.org/licenses/>.
 | 
					 | 
				
			||||||
#
 | 
					 | 
				
			||||||
# 
 | 
					 | 
				
			||||||
# Run the manifest for the given object.
 | 
					 | 
				
			||||||
#
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
. cdist-config
 | 
					 | 
				
			||||||
[ $# -eq 2 ] || __cdist_usage "<target host> <object>"
 | 
					 | 
				
			||||||
set -eu
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
__cdist_target_host="$1"; shift
 | 
					 | 
				
			||||||
__cdist_object_self="$1"; shift
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
# FIXME: rename to __cdist_object_dir (everywhere!)
 | 
					 | 
				
			||||||
__cdist_cur_object_dir="$(__cdist_object_dir "$__cdist_object_self")"
 | 
					 | 
				
			||||||
__cdist_object_id="$(__cdist_object_id_from_object "$__cdist_object_self")"
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
__cdist_echo info "Checking manifest "
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
__cdist_type="$(__cdist_type_from_object "$__cdist_object_self")"
 | 
					 | 
				
			||||||
__cdist_manifest="$(__cdist_type_manifest "$__cdist_type")"
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
if [ -f "$__cdist_manifest" ]; then
 | 
					 | 
				
			||||||
   if [ -x "$__cdist_manifest" ]; then
 | 
					 | 
				
			||||||
      # Make __cdist_manifest available for cdist-type-emulator
 | 
					 | 
				
			||||||
      export __cdist_manifest
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
      __cdist_echo info "Executing manifest "
 | 
					 | 
				
			||||||
      export $__cdist_name_var_object="$__cdist_cur_object_dir"
 | 
					 | 
				
			||||||
      export $__cdist_name_var_object_id="$__cdist_object_id"
 | 
					 | 
				
			||||||
      export $__cdist_name_var_type="$(__cdist_type_dir "$__cdist_type")"
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
      cdist-manifest-run "$__cdist_target_host" "$__cdist_manifest"
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
      # Tell cdist-object-run-all that there may be new objects
 | 
					 | 
				
			||||||
      touch "$__cdist_objects_created"
 | 
					 | 
				
			||||||
   else
 | 
					 | 
				
			||||||
      __cdist_exit_err "${__cdist_manifest} needs to be executable."
 | 
					 | 
				
			||||||
   fi
 | 
					 | 
				
			||||||
fi
 | 
					 | 
				
			||||||
| 
						 | 
					@ -1,47 +0,0 @@
 | 
				
			||||||
#!/bin/sh
 | 
					 | 
				
			||||||
#
 | 
					 | 
				
			||||||
# 2011 Nico Schottelius (nico-cdist at schottelius.org)
 | 
					 | 
				
			||||||
# 2011 Steven Armstrong (steven-cdist at armstrong.cc)
 | 
					 | 
				
			||||||
#
 | 
					 | 
				
			||||||
# This file is part of cdist.
 | 
					 | 
				
			||||||
#
 | 
					 | 
				
			||||||
# cdist is free software: you can redistribute it and/or modify
 | 
					 | 
				
			||||||
# it under the terms of the GNU General Public License as published by
 | 
					 | 
				
			||||||
# the Free Software Foundation, either version 3 of the License, or
 | 
					 | 
				
			||||||
# (at your option) any later version.
 | 
					 | 
				
			||||||
#
 | 
					 | 
				
			||||||
# cdist is distributed in the hope that it will be useful,
 | 
					 | 
				
			||||||
# but WITHOUT ANY WARRANTY; without even the implied warranty of
 | 
					 | 
				
			||||||
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 | 
					 | 
				
			||||||
# GNU General Public License for more details.
 | 
					 | 
				
			||||||
#
 | 
					 | 
				
			||||||
# You should have received a copy of the GNU General Public License
 | 
					 | 
				
			||||||
# along with cdist. If not, see <http://www.gnu.org/licenses/>.
 | 
					 | 
				
			||||||
#
 | 
					 | 
				
			||||||
# 
 | 
					 | 
				
			||||||
# For the given object:
 | 
					 | 
				
			||||||
#  - run type explorers
 | 
					 | 
				
			||||||
#  - run type manifest
 | 
					 | 
				
			||||||
#
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
. cdist-config
 | 
					 | 
				
			||||||
[ $# -eq 2 ] || __cdist_usage "<target host> <object>"
 | 
					 | 
				
			||||||
set -eu
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
__cdist_target_host="$1"; shift
 | 
					 | 
				
			||||||
__cdist_object_self="$1"; shift
 | 
					 | 
				
			||||||
__cdist_object_dir="$(__cdist_object_dir "$__cdist_object_self")"
 | 
					 | 
				
			||||||
[ -d "$__cdist_object_dir" ] || __cdist_exit_err "Object undefined"
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
# Export to non-core for use in manifest and gencode scripts
 | 
					 | 
				
			||||||
export $__cdist_name_var_self=$__cdist_object_self
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
__cdist_object_prepared="$(__cdist_object_prepared "$__cdist_object_self")"
 | 
					 | 
				
			||||||
if [ ! -f "$__cdist_object_prepared" ]; then
 | 
					 | 
				
			||||||
   __cdist_echo info "Preparing object"
 | 
					 | 
				
			||||||
   cdist-object-explorer-run  "$__cdist_target_host" "$__cdist_object_self"
 | 
					 | 
				
			||||||
   cdist-object-manifest-run  "$__cdist_target_host" "$__cdist_object_self"
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
   # Mark this object as prepared
 | 
					 | 
				
			||||||
   touch "$__cdist_object_prepared"
 | 
					 | 
				
			||||||
fi
 | 
					 | 
				
			||||||
| 
						 | 
					@ -1,65 +0,0 @@
 | 
				
			||||||
#!/bin/sh
 | 
					 | 
				
			||||||
#
 | 
					 | 
				
			||||||
# 2011 Nico Schottelius (nico-cdist at schottelius.org)
 | 
					 | 
				
			||||||
# 2011 Steven Armstrong (steven-cdist at armstrong.cc)
 | 
					 | 
				
			||||||
#
 | 
					 | 
				
			||||||
# This file is part of cdist.
 | 
					 | 
				
			||||||
#
 | 
					 | 
				
			||||||
# cdist is free software: you can redistribute it and/or modify
 | 
					 | 
				
			||||||
# it under the terms of the GNU General Public License as published by
 | 
					 | 
				
			||||||
# the Free Software Foundation, either version 3 of the License, or
 | 
					 | 
				
			||||||
# (at your option) any later version.
 | 
					 | 
				
			||||||
#
 | 
					 | 
				
			||||||
# cdist is distributed in the hope that it will be useful,
 | 
					 | 
				
			||||||
# but WITHOUT ANY WARRANTY; without even the implied warranty of
 | 
					 | 
				
			||||||
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 | 
					 | 
				
			||||||
# GNU General Public License for more details.
 | 
					 | 
				
			||||||
#
 | 
					 | 
				
			||||||
# You should have received a copy of the GNU General Public License
 | 
					 | 
				
			||||||
# along with cdist. If not, see <http://www.gnu.org/licenses/>.
 | 
					 | 
				
			||||||
#
 | 
					 | 
				
			||||||
# 
 | 
					 | 
				
			||||||
# For the given object:
 | 
					 | 
				
			||||||
#  - run type explorers
 | 
					 | 
				
			||||||
#  - run type manifest
 | 
					 | 
				
			||||||
#  - generate code
 | 
					 | 
				
			||||||
#  - copy object to target
 | 
					 | 
				
			||||||
#  - execute code on target
 | 
					 | 
				
			||||||
#
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
. cdist-config
 | 
					 | 
				
			||||||
[ $# -eq 2 ] || __cdist_usage "<target host> <object>"
 | 
					 | 
				
			||||||
set -eu
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
__cdist_target_host="$1"; shift
 | 
					 | 
				
			||||||
__cdist_object_self="$1"; shift
 | 
					 | 
				
			||||||
__cdist_object_dir="$(__cdist_object_dir "$__cdist_object_self")"
 | 
					 | 
				
			||||||
[ -d "$__cdist_object_dir" ] || __cdist_exit_err "Object undefined"
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
# Export to non-core for use in manifest and gencode scripts
 | 
					 | 
				
			||||||
export $__cdist_name_var_self=$__cdist_object_self
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
__cdist_object_finished="$(__cdist_object_finished "$__cdist_object_self")"
 | 
					 | 
				
			||||||
if [ ! -f "$__cdist_object_finished" ]; then
 | 
					 | 
				
			||||||
   # Resolve dependencies, if any
 | 
					 | 
				
			||||||
   __cdist_object_require="$(__cdist_object_require "$__cdist_object_self")"
 | 
					 | 
				
			||||||
   if [ -f "$__cdist_object_require" ]; then
 | 
					 | 
				
			||||||
      # NEED TO CREATE ARRAY, SSH DESTROYS WHILE READ LOOP
 | 
					 | 
				
			||||||
      while read __cdist_requirement; do
 | 
					 | 
				
			||||||
         set -- "$@" "$__cdist_requirement"
 | 
					 | 
				
			||||||
      done < "$__cdist_object_require"
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
      while [ $# -gt 0 ]; do
 | 
					 | 
				
			||||||
         __cdist_requirement="$1"; shift
 | 
					 | 
				
			||||||
         __cdist_echo info "Resolving requirement $__cdist_requirement"
 | 
					 | 
				
			||||||
         cdist-object-run "$__cdist_target_host" "$__cdist_requirement"
 | 
					 | 
				
			||||||
      done
 | 
					 | 
				
			||||||
   fi
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
   cdist-object-gencode-run   "$__cdist_target_host" "$__cdist_object_self"
 | 
					 | 
				
			||||||
   cdist-object-push          "$__cdist_target_host" "$__cdist_object_self"
 | 
					 | 
				
			||||||
   cdist-object-code-run      "$__cdist_target_host" "$__cdist_object_self"
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
   # Mark this object as done
 | 
					 | 
				
			||||||
   touch "$__cdist_object_finished"
 | 
					 | 
				
			||||||
fi
 | 
					 | 
				
			||||||
| 
						 | 
					@ -1,68 +0,0 @@
 | 
				
			||||||
#!/bin/sh
 | 
					 | 
				
			||||||
#
 | 
					 | 
				
			||||||
# 2011 Nico Schottelius (nico-cdist at schottelius.org)
 | 
					 | 
				
			||||||
#
 | 
					 | 
				
			||||||
# This file is part of cdist.
 | 
					 | 
				
			||||||
#
 | 
					 | 
				
			||||||
# cdist is free software: you can redistribute it and/or modify
 | 
					 | 
				
			||||||
# it under the terms of the GNU General Public License as published by
 | 
					 | 
				
			||||||
# the Free Software Foundation, either version 3 of the License, or
 | 
					 | 
				
			||||||
# (at your option) any later version.
 | 
					 | 
				
			||||||
#
 | 
					 | 
				
			||||||
# cdist is distributed in the hope that it will be useful,
 | 
					 | 
				
			||||||
# but WITHOUT ANY WARRANTY; without even the implied warranty of
 | 
					 | 
				
			||||||
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 | 
					 | 
				
			||||||
# GNU General Public License for more details.
 | 
					 | 
				
			||||||
#
 | 
					 | 
				
			||||||
# You should have received a copy of the GNU General Public License
 | 
					 | 
				
			||||||
# along with cdist. If not, see <http://www.gnu.org/licenses/>.
 | 
					 | 
				
			||||||
#
 | 
					 | 
				
			||||||
#
 | 
					 | 
				
			||||||
# This binary is executed on the remote side to execute explorers
 | 
					 | 
				
			||||||
# 
 | 
					 | 
				
			||||||
# It supports different variables names to be used, so __explorers
 | 
					 | 
				
			||||||
# and __type_explorers can be submitted :-)
 | 
					 | 
				
			||||||
#
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
. cdist-config
 | 
					 | 
				
			||||||
[ $# -eq 3 ] || __cdist_usage "<variable name> <explorer dir> <out dir>"
 | 
					 | 
				
			||||||
set -ue
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
# Variable that defines the home of the explorers
 | 
					 | 
				
			||||||
__cdist_variable_name="$1"; shift
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
# Find explorers here
 | 
					 | 
				
			||||||
__cdist_explorer_dir="$1"; shift
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
# Write output here
 | 
					 | 
				
			||||||
__cdist_my_out_dir="$1"; shift
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
# Setup environment
 | 
					 | 
				
			||||||
export $__cdist_variable_name="$__cdist_explorer_dir"
 | 
					 | 
				
			||||||
export __global="$__cdist_remote_out_dir"
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
mkdir -p "$__cdist_my_out_dir"
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
# Ensure there is at least one explorer
 | 
					 | 
				
			||||||
num="$(ls -1 "$__cdist_explorer_dir" | wc -l)"
 | 
					 | 
				
			||||||
if [ "$num" -lt 1 ]; then
 | 
					 | 
				
			||||||
   __cdist_exit_err "${__cdist_explorer_dir}: Contains no explorers"
 | 
					 | 
				
			||||||
fi
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
# Execute all explorers
 | 
					 | 
				
			||||||
for explorer in "$__cdist_explorer_dir/"*; do
 | 
					 | 
				
			||||||
   explorer_name="${explorer##*/}"
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
   if [ -f "$explorer" ]; then
 | 
					 | 
				
			||||||
      if [ ! -x "$explorer" ]; then
 | 
					 | 
				
			||||||
         __cdist_exit_err "Explorer \"$explorer\" exists, but is not executable."
 | 
					 | 
				
			||||||
      fi
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
      # Execute explorers and save results in remote destination directory
 | 
					 | 
				
			||||||
      "$explorer" > "${__cdist_my_out_dir}/$explorer_name"
 | 
					 | 
				
			||||||
   else
 | 
					 | 
				
			||||||
      if [ -e "$explorer" ]; then
 | 
					 | 
				
			||||||
         __cdist_exit_err "Explorer \"$explorer\" exists, but is not a file."
 | 
					 | 
				
			||||||
      fi
 | 
					 | 
				
			||||||
   fi
 | 
					 | 
				
			||||||
done
 | 
					 | 
				
			||||||
| 
						 | 
					@ -1,182 +0,0 @@
 | 
				
			||||||
#!/bin/sh
 | 
					 | 
				
			||||||
#
 | 
					 | 
				
			||||||
# 2010-2011 Nico Schottelius (nico-cdist at schottelius.org)
 | 
					 | 
				
			||||||
#
 | 
					 | 
				
			||||||
# This file is part of cdist.
 | 
					 | 
				
			||||||
#
 | 
					 | 
				
			||||||
# cdist is free software: you can redistribute it and/or modify
 | 
					 | 
				
			||||||
# it under the terms of the GNU General Public License as published by
 | 
					 | 
				
			||||||
# the Free Software Foundation, either version 3 of the License, or
 | 
					 | 
				
			||||||
# (at your option) any later version.
 | 
					 | 
				
			||||||
#
 | 
					 | 
				
			||||||
# cdist is distributed in the hope that it will be useful,
 | 
					 | 
				
			||||||
# but WITHOUT ANY WARRANTY; without even the implied warranty of
 | 
					 | 
				
			||||||
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 | 
					 | 
				
			||||||
# GNU General Public License for more details.
 | 
					 | 
				
			||||||
#
 | 
					 | 
				
			||||||
# You should have received a copy of the GNU General Public License
 | 
					 | 
				
			||||||
# along with cdist. If not, see <http://www.gnu.org/licenses/>.
 | 
					 | 
				
			||||||
#
 | 
					 | 
				
			||||||
# 
 | 
					 | 
				
			||||||
# Wrapper script that generates cconfig from arguments
 | 
					 | 
				
			||||||
#
 | 
					 | 
				
			||||||
# This script will be called everytime the manifest decides to create
 | 
					 | 
				
			||||||
# a new type
 | 
					 | 
				
			||||||
#
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
. cdist-config
 | 
					 | 
				
			||||||
set -u
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
################################################################################
 | 
					 | 
				
			||||||
# Prepare object and type
 | 
					 | 
				
			||||||
#
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
__cdist_type="$__cdist_myname"
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
# Find out whether type is a singleton or regular type
 | 
					 | 
				
			||||||
if [ -f "$(__cdist_type_singleton "$__cdist_type")" ]; then
 | 
					 | 
				
			||||||
   __cdist_object_id="$__cdist_name_singleton"
 | 
					 | 
				
			||||||
else
 | 
					 | 
				
			||||||
   [ $# -ge 1 ] || __cdist_usage "<id> <options>"
 | 
					 | 
				
			||||||
   __cdist_object_id="$1"; shift
 | 
					 | 
				
			||||||
fi
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
# Verify object id
 | 
					 | 
				
			||||||
__cdist_object_id_sane=$(echo "$__cdist_object_id" | grep "^${__cdist_sane_regexp}\$")
 | 
					 | 
				
			||||||
if [ -z "$__cdist_object_id_sane" ]; then
 | 
					 | 
				
			||||||
   __cdist_usage "Insane object id, ${__cdist_object_id}."
 | 
					 | 
				
			||||||
fi
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
# Prevent double slash if id begins with /
 | 
					 | 
				
			||||||
if [ "$(echo $__cdist_object_id | grep "^/")" ]; then
 | 
					 | 
				
			||||||
   __cdist_object_self="${__cdist_type}${__cdist_object_id}"
 | 
					 | 
				
			||||||
else
 | 
					 | 
				
			||||||
   __cdist_object_self="${__cdist_type}/${__cdist_object_id}"
 | 
					 | 
				
			||||||
fi
 | 
					 | 
				
			||||||
################################################################################
 | 
					 | 
				
			||||||
# Internal quirks
 | 
					 | 
				
			||||||
#
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
# Append id for error messages
 | 
					 | 
				
			||||||
__cdist_myname="$__cdist_myname ($__cdist_object_id)"
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
################################################################################
 | 
					 | 
				
			||||||
# Create object in tmpdir first
 | 
					 | 
				
			||||||
#
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
# Save original destination
 | 
					 | 
				
			||||||
__cdist_out_object_dir_orig="$__cdist_out_object_dir"
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
# Store to tmp now
 | 
					 | 
				
			||||||
__cdist_out_object_dir="$__cdist_tmp_dir"
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
__cdist_new_object_dir="$(__cdist_object_dir "$__cdist_object_self")"
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
# Initialise object
 | 
					 | 
				
			||||||
mkdir -p "${__cdist_new_object_dir}"
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
# Record parameter
 | 
					 | 
				
			||||||
__cdist_parameter_dir="$(__cdist_object_parameter_dir "$__cdist_object_self")"
 | 
					 | 
				
			||||||
mkdir -p "${__cdist_parameter_dir}"
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
while [ $# -gt 0 ]; do
 | 
					 | 
				
			||||||
   opt="$1"; shift
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
   echo "$opt" | grep -q "^--${__cdist_sane_regexp}\$" || \
 | 
					 | 
				
			||||||
      __cdist_usage "Provide sane options"
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
   opt_file="${opt#--}"
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
   [ $# -ge 1 ] || __cdist_usage "Missing value for $opt"
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
   value="$1"; shift
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
   echo "${value}" > "${__cdist_parameter_dir}/${opt_file}"
 | 
					 | 
				
			||||||
done
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
# Record requirements
 | 
					 | 
				
			||||||
# it's fine, if it's not set
 | 
					 | 
				
			||||||
set +u
 | 
					 | 
				
			||||||
for requirement in $require; do
 | 
					 | 
				
			||||||
   echo $requirement >> "$(__cdist_object_require "$__cdist_object_self")"
 | 
					 | 
				
			||||||
   __cdist_echo info "Recording requirement $requirement"
 | 
					 | 
				
			||||||
done
 | 
					 | 
				
			||||||
set -u
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
################################################################################
 | 
					 | 
				
			||||||
# Check newly created object
 | 
					 | 
				
			||||||
#
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
#
 | 
					 | 
				
			||||||
# Ensure required parameters are given
 | 
					 | 
				
			||||||
#
 | 
					 | 
				
			||||||
if [ -f "$(__cdist_type_parameter_required "$__cdist_type")" ]; then
 | 
					 | 
				
			||||||
   while read required; do
 | 
					 | 
				
			||||||
      if [ ! -f "${__cdist_parameter_dir}/${required}" ]; then
 | 
					 | 
				
			||||||
         __cdist_usage "Missing required parameter $required"
 | 
					 | 
				
			||||||
      fi
 | 
					 | 
				
			||||||
   done < "$(__cdist_type_parameter_required "$__cdist_type")"
 | 
					 | 
				
			||||||
fi
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
#
 | 
					 | 
				
			||||||
# Ensure that only optional or required parameters are given
 | 
					 | 
				
			||||||
#
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
if [ -f "$(__cdist_type_parameter_optional "$__cdist_type")" ]; then
 | 
					 | 
				
			||||||
   cat "$(__cdist_type_parameter_optional "$__cdist_type")" > \
 | 
					 | 
				
			||||||
      "$__cdist_tmp_file"
 | 
					 | 
				
			||||||
fi
 | 
					 | 
				
			||||||
 
 | 
					 | 
				
			||||||
if [ -f "$(__cdist_type_parameter_required "$__cdist_type")" ]; then
 | 
					 | 
				
			||||||
   cat "$(__cdist_type_parameter_required "$__cdist_type")" >> \
 | 
					 | 
				
			||||||
      "$__cdist_tmp_file"
 | 
					 | 
				
			||||||
fi
 | 
					 | 
				
			||||||
   
 | 
					 | 
				
			||||||
cd "$__cdist_parameter_dir"
 | 
					 | 
				
			||||||
for parameter in $(ls -1); do
 | 
					 | 
				
			||||||
   is_valid=$(grep "^$parameter\$" "$__cdist_tmp_file")
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
   [ "$is_valid" ] || __cdist_usage "Unknown parameter $parameter"
 | 
					 | 
				
			||||||
done
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
################################################################################
 | 
					 | 
				
			||||||
# Merge object
 | 
					 | 
				
			||||||
#
 | 
					 | 
				
			||||||
# Restore original destination
 | 
					 | 
				
			||||||
__cdist_out_object_dir="$__cdist_out_object_dir_orig"
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
__cdist_object_dir="$(__cdist_object_dir "$__cdist_object_self")"
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
#
 | 
					 | 
				
			||||||
# If the object already exists and is exactly the same, merge it. Otherwise fail.
 | 
					 | 
				
			||||||
#
 | 
					 | 
				
			||||||
if [ -e "${__cdist_object_dir}" ]; then
 | 
					 | 
				
			||||||
   # Allow diff to fail
 | 
					 | 
				
			||||||
   set +e
 | 
					 | 
				
			||||||
   diff -ru "${__cdist_new_object_dir}/${__cdist_name_parameter}" \
 | 
					 | 
				
			||||||
      "${__cdist_object_dir}/${__cdist_name_parameter}"           \
 | 
					 | 
				
			||||||
      > "$__cdist_tmp_file"; ret=$?
 | 
					 | 
				
			||||||
   set -e
 | 
					 | 
				
			||||||
   
 | 
					 | 
				
			||||||
   if [ "$ret" != 0 ]; then
 | 
					 | 
				
			||||||
      # Go to standard error
 | 
					 | 
				
			||||||
      exec >&2
 | 
					 | 
				
			||||||
      echo "${__cdist_object_self} already exists differently."
 | 
					 | 
				
			||||||
      echo "Recorded source(s):"
 | 
					 | 
				
			||||||
      __cdist_object_source "${__cdist_object_dir}"
 | 
					 | 
				
			||||||
      echo "Differences:"
 | 
					 | 
				
			||||||
      cat "$__cdist_tmp_file"
 | 
					 | 
				
			||||||
      __cdist_exit_err "Aborting due to object conflict."
 | 
					 | 
				
			||||||
   fi
 | 
					 | 
				
			||||||
else
 | 
					 | 
				
			||||||
   #
 | 
					 | 
				
			||||||
   # Move object into tree:
 | 
					 | 
				
			||||||
   # Create full path minus .cdist and move .cdist
 | 
					 | 
				
			||||||
   #
 | 
					 | 
				
			||||||
   __cdist_new_object_base_dir="$(__cdist_object_base_dir "$__cdist_object_self")"
 | 
					 | 
				
			||||||
   mkdir -p "$__cdist_new_object_base_dir"
 | 
					 | 
				
			||||||
   mv "$__cdist_new_object_dir"  "$__cdist_new_object_base_dir"
 | 
					 | 
				
			||||||
fi
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
# Add "I was here message"
 | 
					 | 
				
			||||||
__cdist_object_source_add "${__cdist_object_dir}"
 | 
					 | 
				
			||||||
| 
						 | 
					@ -1,83 +0,0 @@
 | 
				
			||||||
#!/bin/sh
 | 
					 | 
				
			||||||
#
 | 
					 | 
				
			||||||
# 2011 Nico Schottelius (nico-cdist at schottelius.org)
 | 
					 | 
				
			||||||
#
 | 
					 | 
				
			||||||
# This file is part of cdist.
 | 
					 | 
				
			||||||
#
 | 
					 | 
				
			||||||
# cdist is free software: you can redistribute it and/or modify
 | 
					 | 
				
			||||||
# it under the terms of the GNU General Public License as published by
 | 
					 | 
				
			||||||
# the Free Software Foundation, either version 3 of the License, or
 | 
					 | 
				
			||||||
# (at your option) any later version.
 | 
					 | 
				
			||||||
#
 | 
					 | 
				
			||||||
# cdist is distributed in the hope that it will be useful,
 | 
					 | 
				
			||||||
# but WITHOUT ANY WARRANTY; without even the implied warranty of
 | 
					 | 
				
			||||||
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 | 
					 | 
				
			||||||
# GNU General Public License for more details.
 | 
					 | 
				
			||||||
#
 | 
					 | 
				
			||||||
# You should have received a copy of the GNU General Public License
 | 
					 | 
				
			||||||
# along with cdist. If not, see <http://www.gnu.org/licenses/>.
 | 
					 | 
				
			||||||
#
 | 
					 | 
				
			||||||
#
 | 
					 | 
				
			||||||
# Create a new type from scratch
 | 
					 | 
				
			||||||
#
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
. cdist-config
 | 
					 | 
				
			||||||
[ $# -eq 1 ] || __cdist_usage "<type>"
 | 
					 | 
				
			||||||
set -eu
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
__cdist_type="$1"; shift
 | 
					 | 
				
			||||||
__cdist_my_type_dir="$(__cdist_type_dir "$__cdist_type")"
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
if [ -d "$__cdist_my_type_dir" ]; then
 | 
					 | 
				
			||||||
   __cdist_usage "Type $__cdist_type already exists"
 | 
					 | 
				
			||||||
fi
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
echo "Creating type $__cdist_type in $__cdist_my_type_dir ..."
 | 
					 | 
				
			||||||
# Base
 | 
					 | 
				
			||||||
mkdir -p "$__cdist_my_type_dir"
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
# Parameter
 | 
					 | 
				
			||||||
mkdir -p "$(__cdist_type_parameter_dir "$__cdist_type")"
 | 
					 | 
				
			||||||
touch "$(__cdist_type_parameter_dir "$__cdist_type")/${__cdist_name_parameter_required}"
 | 
					 | 
				
			||||||
touch "$(__cdist_type_parameter_dir "$__cdist_type")/${__cdist_name_parameter_optional}"
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
# Manifest
 | 
					 | 
				
			||||||
cat "$__cdist_abs_mydir/../doc/dev/header" - << eof > "$__cdist_my_type_dir/${__cdist_name_manifest}"
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
#
 | 
					 | 
				
			||||||
# This is the manifest, which can be used to create other objects like this:
 | 
					 | 
				
			||||||
# __file /path/to/destination --source /from/where/
 | 
					 | 
				
			||||||
#
 | 
					 | 
				
			||||||
# To tell cdist to make use of it, you need to make it executable (chmod +x)
 | 
					 | 
				
			||||||
#
 | 
					 | 
				
			||||||
#
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
eof
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
# Gencode remote
 | 
					 | 
				
			||||||
cat "$__cdist_abs_mydir/../doc/dev/header" - << eof > "$(__cdist_type_dir "$__cdist_type")/${__cdist_name_gencode}-${__cdist_name_gencode_remote}"
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
#
 | 
					 | 
				
			||||||
# This file should generate code on stdout, which will be collected by cdist
 | 
					 | 
				
			||||||
# and run on the target.
 | 
					 | 
				
			||||||
#
 | 
					 | 
				
			||||||
# To tell cdist to make use of it, you need to make it executable (chmod +x)
 | 
					 | 
				
			||||||
#
 | 
					 | 
				
			||||||
#
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
eof
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
cat "$__cdist_abs_mydir/../doc/dev/header" - << eof > "$(__cdist_type_dir "$__cdist_type")/${__cdist_name_gencode}-${__cdist_name_gencode_local}"
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
#
 | 
					 | 
				
			||||||
# This file should generate code on stdout, which will be collected by cdist
 | 
					 | 
				
			||||||
# and run on the same machine cdist-deploy-to is executed.
 | 
					 | 
				
			||||||
#
 | 
					 | 
				
			||||||
# To tell cdist to make use of it, you need to make it executable (chmod +x)
 | 
					 | 
				
			||||||
#
 | 
					 | 
				
			||||||
#
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
eof
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
# Explorer
 | 
					 | 
				
			||||||
mkdir -p "$__cdist_my_type_dir/${__cdist_name_explorer}"
 | 
					 | 
				
			||||||
							
								
								
									
										1
									
								
								bin/cdist.py
									
										
									
									
									
										Symbolic link
									
								
							
							
						
						
									
										1
									
								
								bin/cdist.py
									
										
									
									
									
										Symbolic link
									
								
							| 
						 | 
					@ -0,0 +1 @@
 | 
				
			||||||
 | 
					cdist
 | 
				
			||||||
							
								
								
									
										15
									
								
								build.sh
									
										
									
									
									
								
							
							
						
						
									
										15
									
								
								build.sh
									
										
									
									
									
								
							| 
						 | 
					@ -88,18 +88,21 @@ case "$1" in
 | 
				
			||||||
   speeches)
 | 
					   speeches)
 | 
				
			||||||
      cd "$SPEECHESDIR"
 | 
					      cd "$SPEECHESDIR"
 | 
				
			||||||
      for speech in *tex; do
 | 
					      for speech in *tex; do
 | 
				
			||||||
         pdflatex $speech
 | 
					         pdflatex "$speech"
 | 
				
			||||||
         pdflatex $speech
 | 
					         pdflatex "$speech"
 | 
				
			||||||
         pdflatex $speech
 | 
					         pdflatex "$speech"
 | 
				
			||||||
      done
 | 
					      done
 | 
				
			||||||
   ;;
 | 
					   ;;
 | 
				
			||||||
      
 | 
					      
 | 
				
			||||||
   web)
 | 
					   web)
 | 
				
			||||||
      cp README ${WEBDIR}/${WEBPAGE}
 | 
					      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
 | 
					      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
 | 
					      cp ${SPEECHESDIR}/*.pdf ${WEBDIR}/${WEBBASE}/speeches
 | 
				
			||||||
      
 | 
					      
 | 
				
			||||||
      git describe > ${WEBDIR}/${WEBBASE}/man/VERSION
 | 
					      git describe > ${WEBDIR}/${WEBBASE}/man/VERSION
 | 
				
			||||||
| 
						 | 
					@ -108,7 +111,7 @@ case "$1" in
 | 
				
			||||||
      cd ${WEBDIR} && make pub
 | 
					      cd ${WEBDIR} && make pub
 | 
				
			||||||
   ;;
 | 
					   ;;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
   pub)
 | 
					   p|pu|pub)
 | 
				
			||||||
      git push --mirror
 | 
					      git push --mirror
 | 
				
			||||||
      git push --mirror github
 | 
					      git push --mirror github
 | 
				
			||||||
   ;;
 | 
					   ;;
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -65,6 +65,11 @@ if [ -f /etc/SuSE-release ]; then
 | 
				
			||||||
   exit 0
 | 
					   exit 0
 | 
				
			||||||
fi
 | 
					fi
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					if [ -f /etc/cdist-preos ]; then
 | 
				
			||||||
 | 
					   echo preos
 | 
				
			||||||
 | 
					   exit 0
 | 
				
			||||||
 | 
					fi
 | 
				
			||||||
 | 
					
 | 
				
			||||||
uname_s="$(uname -s)"
 | 
					uname_s="$(uname -s)"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
# Assume there is no tr on the client -> do lower case ourselves
 | 
					# Assume there is no tr on the client -> do lower case ourselves
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
							
								
								
									
										30
									
								
								conf/type/__package_rubygem/explorer/pkg_status
									
										
									
									
									
										Executable file
									
								
							
							
						
						
									
										30
									
								
								conf/type/__package_rubygem/explorer/pkg_status
									
										
									
									
									
										Executable file
									
								
							| 
						 | 
					@ -0,0 +1,30 @@
 | 
				
			||||||
 | 
					#!/bin/sh
 | 
				
			||||||
 | 
					#
 | 
				
			||||||
 | 
					# 2011 Chase Allen James (nx-cdist@nu-ex.com)
 | 
				
			||||||
 | 
					#
 | 
				
			||||||
 | 
					# This file is part of cdist.
 | 
				
			||||||
 | 
					#
 | 
				
			||||||
 | 
					# cdist is free software: you can redistribute it and/or modify
 | 
				
			||||||
 | 
					# it under the terms of the GNU General Public License as published by
 | 
				
			||||||
 | 
					# the Free Software Foundation, either version 3 of the License, or
 | 
				
			||||||
 | 
					# (at your option) any later version.
 | 
				
			||||||
 | 
					#
 | 
				
			||||||
 | 
					# cdist is distributed in the hope that it will be useful,
 | 
				
			||||||
 | 
					# but WITHOUT ANY WARRANTY; without even the implied warranty of
 | 
				
			||||||
 | 
					# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 | 
				
			||||||
 | 
					# GNU General Public License for more details.
 | 
				
			||||||
 | 
					#
 | 
				
			||||||
 | 
					# You should have received a copy of the GNU General Public License
 | 
				
			||||||
 | 
					# along with cdist. If not, see <http://www.gnu.org/licenses/>.
 | 
				
			||||||
 | 
					#
 | 
				
			||||||
 | 
					# Retrieve the status of a rubygem
 | 
				
			||||||
 | 
					#
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					if [ -f "$__object/parameter/name" ]; then
 | 
				
			||||||
 | 
					   name="$(cat "$__object/parameter/name")"
 | 
				
			||||||
 | 
					else
 | 
				
			||||||
 | 
					   name="$__object_id"
 | 
				
			||||||
 | 
					fi
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# Except gem failing, if package is not known / installed
 | 
				
			||||||
 | 
					gem list -i "$name" 2>/dev/null || exit 0
 | 
				
			||||||
							
								
								
									
										51
									
								
								conf/type/__package_rubygem/gencode-remote
									
										
									
									
									
										Executable file
									
								
							
							
						
						
									
										51
									
								
								conf/type/__package_rubygem/gencode-remote
									
										
									
									
									
										Executable file
									
								
							| 
						 | 
					@ -0,0 +1,51 @@
 | 
				
			||||||
 | 
					#!/bin/sh
 | 
				
			||||||
 | 
					#
 | 
				
			||||||
 | 
					# 2011 Chase Allen James <nx-cdist@nu-ex.com>
 | 
				
			||||||
 | 
					#
 | 
				
			||||||
 | 
					# This file is part of cdist.
 | 
				
			||||||
 | 
					#
 | 
				
			||||||
 | 
					# cdist is free software: you can redistribute it and/or modify
 | 
				
			||||||
 | 
					# it under the terms of the GNU General Public License as published by
 | 
				
			||||||
 | 
					# the Free Software Foundation, either version 3 of the License, or
 | 
				
			||||||
 | 
					# (at your option) any later version.
 | 
				
			||||||
 | 
					#
 | 
				
			||||||
 | 
					# cdist is distributed in the hope that it will be useful,
 | 
				
			||||||
 | 
					# but WITHOUT ANY WARRANTY; without even the implied warranty of
 | 
				
			||||||
 | 
					# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 | 
				
			||||||
 | 
					# GNU General Public License for more details.
 | 
				
			||||||
 | 
					#
 | 
				
			||||||
 | 
					# You should have received a copy of the GNU General Public License
 | 
				
			||||||
 | 
					# along with cdist. If not, see <http://www.gnu.org/licenses/>.
 | 
				
			||||||
 | 
					#
 | 
				
			||||||
 | 
					#
 | 
				
			||||||
 | 
					# Manage Rubygem packages
 | 
				
			||||||
 | 
					#
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					if [ -f "$__object/parameter/name" ]; then
 | 
				
			||||||
 | 
					   name="$(cat "$__object/parameter/name")"
 | 
				
			||||||
 | 
					else
 | 
				
			||||||
 | 
					   name="$__object_id"
 | 
				
			||||||
 | 
					fi
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					state="$(cat "$__object/parameter/state")"
 | 
				
			||||||
 | 
					is_installed="$(grep "true" "$__object/explorer/pkg_status" || true)"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					case "$state" in
 | 
				
			||||||
 | 
					   installed)
 | 
				
			||||||
 | 
					      # Install only if non-existent
 | 
				
			||||||
 | 
					      if [ -z "$is_installed" ]; then
 | 
				
			||||||
 | 
					         echo gem install \"$name\" --no-ri --no-rdoc
 | 
				
			||||||
 | 
					      fi
 | 
				
			||||||
 | 
					   ;;
 | 
				
			||||||
 | 
					   removed)
 | 
				
			||||||
 | 
					      # Remove only if existent
 | 
				
			||||||
 | 
					      if [ -n "$is_installed" ]; then
 | 
				
			||||||
 | 
					         echo gem uninstall \"$name\"
 | 
				
			||||||
 | 
					      fi
 | 
				
			||||||
 | 
					   ;;
 | 
				
			||||||
 | 
					   *)
 | 
				
			||||||
 | 
					      echo "Unknown state: $state" >&2
 | 
				
			||||||
 | 
					      exit 1
 | 
				
			||||||
 | 
					   ;;
 | 
				
			||||||
 | 
					esac
 | 
				
			||||||
							
								
								
									
										49
									
								
								conf/type/__package_rubygem/man.text
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										49
									
								
								conf/type/__package_rubygem/man.text
									
										
									
									
									
										Normal file
									
								
							| 
						 | 
					@ -0,0 +1,49 @@
 | 
				
			||||||
 | 
					cdist-type__package_rubygem(7)
 | 
				
			||||||
 | 
					==============================
 | 
				
			||||||
 | 
					Chase Allen James <nx-cdist@nu-ex.com>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					NAME
 | 
				
			||||||
 | 
					----
 | 
				
			||||||
 | 
					cdist-type__package_rubygem - Manage rubygem packages
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					DESCRIPTION
 | 
				
			||||||
 | 
					-----------
 | 
				
			||||||
 | 
					Rubygems is the default package management system for the Ruby programming language.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					REQUIRED PARAMETERS
 | 
				
			||||||
 | 
					-------------------
 | 
				
			||||||
 | 
					state::
 | 
				
			||||||
 | 
					   Either "installed" or "removed".
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					OPTIONAL PARAMETERS
 | 
				
			||||||
 | 
					-------------------
 | 
				
			||||||
 | 
					name::
 | 
				
			||||||
 | 
					   If supplied, use the name and not the object id as the package name.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					EXAMPLES
 | 
				
			||||||
 | 
					--------
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					--------------------------------------------------------------------------------
 | 
				
			||||||
 | 
					# Ensure sinatra is installed
 | 
				
			||||||
 | 
					__package_rubygem sinatra --state installed
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# Remove package
 | 
				
			||||||
 | 
					__package_rubygem rails --state removed
 | 
				
			||||||
 | 
					--------------------------------------------------------------------------------
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					SEE ALSO
 | 
				
			||||||
 | 
					--------
 | 
				
			||||||
 | 
					- cdist-type(7)
 | 
				
			||||||
 | 
					- cdist-type__package(7)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					COPYING
 | 
				
			||||||
 | 
					-------
 | 
				
			||||||
 | 
					Copyright \(C) 2011 Chase Allen James. Free use of this software is
 | 
				
			||||||
 | 
					granted under the terms of the GNU General Public License version 3 (GPLv3).
 | 
				
			||||||
							
								
								
									
										1
									
								
								conf/type/__package_rubygem/parameter/optional
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										1
									
								
								conf/type/__package_rubygem/parameter/optional
									
										
									
									
									
										Normal file
									
								
							| 
						 | 
					@ -0,0 +1 @@
 | 
				
			||||||
 | 
					name
 | 
				
			||||||
							
								
								
									
										1
									
								
								conf/type/__package_rubygem/parameter/required
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										1
									
								
								conf/type/__package_rubygem/parameter/required
									
										
									
									
									
										Normal file
									
								
							| 
						 | 
					@ -0,0 +1 @@
 | 
				
			||||||
 | 
					state
 | 
				
			||||||
| 
						 | 
					@ -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: Add explorers to reference
 | 
				
			||||||
	* Documentation: Typo cleanup (Derek Brost)
 | 
						* Documentation: Typo cleanup (Derek Brost)
 | 
				
			||||||
	* Type __key_value: Bugfix (Steven Armstrong)
 | 
						* Type __key_value: Bugfix (Steven Armstrong)
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
							
								
								
									
										12
									
								
								doc/dev/benchmark-parallel-deploy
									
										
									
									
									
										Executable file
									
								
							
							
						
						
									
										12
									
								
								doc/dev/benchmark-parallel-deploy
									
										
									
									
									
										Executable file
									
								
							| 
						 | 
					@ -0,0 +1,12 @@
 | 
				
			||||||
 | 
					#!/bin/sh
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					outfile="$1"; shift
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					(
 | 
				
			||||||
 | 
					   for host in "$@"; do
 | 
				
			||||||
 | 
					      hosts="$hosts $host"
 | 
				
			||||||
 | 
					      cdist config -c ~/p/cdist-nutzung -p $hosts 2>&1
 | 
				
			||||||
 | 
					   done
 | 
				
			||||||
 | 
					) | tee "$outfile"
 | 
				
			||||||
 | 
					echo "----------"
 | 
				
			||||||
 | 
					grep 'INFO: Total processing time for' "$outfile" | sed 's/.*: //'
 | 
				
			||||||
							
								
								
									
										24
									
								
								doc/dev/lastchanges
									
										
									
									
									
										Executable file
									
								
							
							
						
						
									
										24
									
								
								doc/dev/lastchanges
									
										
									
									
									
										Executable file
									
								
							| 
						 | 
					@ -0,0 +1,24 @@
 | 
				
			||||||
 | 
					#!/bin/sh
 | 
				
			||||||
 | 
					#
 | 
				
			||||||
 | 
					# 2011 Nico Schottelius (nico-cdist at schottelius.org)
 | 
				
			||||||
 | 
					#
 | 
				
			||||||
 | 
					# This file is part of cdist.
 | 
				
			||||||
 | 
					#
 | 
				
			||||||
 | 
					# cdist is free software: you can redistribute it and/or modify
 | 
				
			||||||
 | 
					# it under the terms of the GNU General Public License as published by
 | 
				
			||||||
 | 
					# the Free Software Foundation, either version 3 of the License, or
 | 
				
			||||||
 | 
					# (at your option) any later version.
 | 
				
			||||||
 | 
					#
 | 
				
			||||||
 | 
					# cdist is distributed in the hope that it will be useful,
 | 
				
			||||||
 | 
					# but WITHOUT ANY WARRANTY; without even the implied warranty of
 | 
				
			||||||
 | 
					# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 | 
				
			||||||
 | 
					# GNU General Public License for more details.
 | 
				
			||||||
 | 
					#
 | 
				
			||||||
 | 
					# You should have received a copy of the GNU General Public License
 | 
				
			||||||
 | 
					# along with cdist. If not, see <http://www.gnu.org/licenses/>.
 | 
				
			||||||
 | 
					#
 | 
				
			||||||
 | 
					#
 | 
				
			||||||
 | 
					# Show the lastest changes from this (upcoming) release
 | 
				
			||||||
 | 
					#
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					awk '/^$/ { exit } { print $0 } END { print "-----" }' < "${0%/*}/../changelog"
 | 
				
			||||||
							
								
								
									
										56
									
								
								doc/dev/logs/2011-04-27.benchmark
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										56
									
								
								doc/dev/logs/2011-04-27.benchmark
									
										
									
									
									
										Normal file
									
								
							| 
						 | 
					@ -0,0 +1,56 @@
 | 
				
			||||||
 | 
					% x200
 | 
				
			||||||
 | 
					data = [ 1 104; 2 129; 6 249 ; 25 1267  ]
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					% x201, 4.2.2.4 dns, eth
 | 
				
			||||||
 | 
					data = [ 1 143; 2 159; 3 198; 4 244; 5 299; 6 350; 7 435; 8 429 ];
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					% x201, von zuhause aus
 | 
				
			||||||
 | 
					data2 = [ 226 242 275 296 306 357 403 400 409 685 617 672 ]
 | 
				
			||||||
 | 
					plot(0:size(data)(2)-1, data)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					hold off;
 | 
				
			||||||
 | 
					plot(data(:,1), data(:,2))
 | 
				
			||||||
 | 
					% per host time:
 | 
				
			||||||
 | 
					data(:,2)' ./ data(:,1)'
 | 
				
			||||||
 | 
					hold on;
 | 
				
			||||||
 | 
					plot(data(:,1), data(:,2)' ./ data(:,1)')
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					Testing on
 | 
				
			||||||
 | 
					   Intel(R) Core(TM)2 Duo CPU     P8400  @ 2.26GHz
 | 
				
			||||||
 | 
					   4 GiB RAM
 | 
				
			||||||
 | 
					   Intel Gbit Nic
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					- 169 objects, all done (i.e. rerun)
 | 
				
			||||||
 | 
					- runs are cpu bound
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					1 host:
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					core: cdist 1.6.2: Successfully finished run
 | 
				
			||||||
 | 
					Run: 104s (1 minutes)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					2 hosts:
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					[13:48] kr:cdist-nutzung% mytime cdist-mass-deploy -p ikq03.ethz.ch ikq04.ethz.ch              
 | 
				
			||||||
 | 
					Run: 129s (2 minutes)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					6 hosts: (7 specified, but ikq01.ethz.ch is dead)
 | 
				
			||||||
 | 
					cdist-mass-deploy -p ikq01.ethz.ch ikq02.ethz.ch ikq03.ethz.ch ikq04.ethz.ch ikq05.ethz.ch ikq06.ethz.ch ikq07.ethz.ch
 | 
				
			||||||
 | 
					Run: 294s (4 minutes)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					25 hosts
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					[13:58] kr:cdist-nutzung% mytime cdist-mass-deploy -p $(sed 's/^root@//' ~/.dsh/group/ikr)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					Run: 723s (12 minutes)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					25 hosts without proxy command now:
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					Run: 1267s (21 minutes)
 | 
				
			||||||
 | 
					Run: 1212s (20 minutes)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					[14:11] kr:cdist-nutzung% mytime cdist-mass-deploy -p $(sed 's/^root@//' ~/.dsh/group/ikr)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
							
								
								
									
										9
									
								
								doc/dev/logs/2011-04-27.benchmark.dash
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										9
									
								
								doc/dev/logs/2011-04-27.benchmark.dash
									
										
									
									
									
										Normal file
									
								
							| 
						 | 
					@ -0,0 +1,9 @@
 | 
				
			||||||
 | 
					Run: 78s (1 minutes)
 | 
				
			||||||
 | 
					[13:25] kr:cdist-nutzung% mytime cdist-deploy-to ikq02.ethz.ch
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					% mit dash, eth, x201, Mit Apr 27 13:41:49 CEST 2011
 | 
				
			||||||
 | 
					data = [ 0 73 77 89 107 130 151 180 197 228 251 260 199 295 335 276 ]
 | 
				
			||||||
 | 
					plot(0:size(data2)(2)-1, data2)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
							
								
								
									
										20
									
								
								doc/dev/logs/2011-06-24.cinst_preos
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										20
									
								
								doc/dev/logs/2011-06-24.cinst_preos
									
										
									
									
									
										Normal file
									
								
							| 
						 | 
					@ -0,0 +1,20 @@
 | 
				
			||||||
 | 
					- new executable cinst-deploy-to
 | 
				
			||||||
 | 
					- types used by cinst are marked as such ('cinst-only')
 | 
				
			||||||
 | 
					- cdist-deploy-to and cinst-deploy-to read the same manifest
 | 
				
			||||||
 | 
					- cdist ignores types marked as 'cinst-only'
 | 
				
			||||||
 | 
					- cinst ignores types not marked as 'cinst-only'
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					- update $__explorer/os to recognize preos
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					- cinst types will ONLY BE CALLED if $__explorer/os == 'preos'
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					--------------------------------------------------------------------------------
 | 
				
			||||||
 | 
					cinst types:
 | 
				
			||||||
 | 
					__partition_msdos /dev/sda1 --type 83 --size 100M --bootable
 | 
				
			||||||
 | 
					__partition_msdos /dev/sda2 --type 82 --size 512M
 | 
				
			||||||
 | 
					__fs_jfs /dev/sda1 --args "-c -q"
 | 
				
			||||||
 | 
					__fstab_entry /dev/sda1 --type jfs --mountpoint / --options noatime --freq 0 --passno 0
 | 
				
			||||||
 | 
					__fstab_entry /dev/sda2 --type swap
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
							
								
								
									
										4
									
								
								doc/dev/logs/2011-09-08.obsolete_debugging
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										4
									
								
								doc/dev/logs/2011-09-08.obsolete_debugging
									
										
									
									
									
										Normal file
									
								
							| 
						 | 
					@ -0,0 +1,4 @@
 | 
				
			||||||
 | 
					Debugging cdist:
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					[0:13] kr:cdist-nutzung% ./local/update-local-core && __cdist_debug=1 __cdist_local_base_dir=/tmp/cdist cdist-deploy-to ikq04.ethz.ch
 | 
				
			||||||
 | 
					
 | 
				
			||||||
							
								
								
									
										110
									
								
								doc/dev/logs/2011-09-12
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										110
									
								
								doc/dev/logs/2011-09-12
									
										
									
									
									
										Normal file
									
								
							| 
						 | 
					@ -0,0 +1,110 @@
 | 
				
			||||||
 | 
					Benchmark from home/X201 (2 cores, 4 threads):
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					   ikq (1): 72.192397 
 | 
				
			||||||
 | 
					   ikq (2): INFO: Total processing time for 2 hosts: 74.1845
 | 
				
			||||||
 | 
					   ikq* (6): INFO: Total processing time: 117.572312
 | 
				
			||||||
 | 
					   ikq* + ikr3 (9): INFO: Total processing time: 120.307662
 | 
				
			||||||
 | 
					   ikq* + ikr (14): INFO: Total processing time: 139.769807
 | 
				
			||||||
 | 
					   ikq* + ikr (18): INFO: Total processing time: 186.354398
 | 
				
			||||||
 | 
					   ikq* + ikr (22): INFO: Total processing time: 225.793533
 | 
				
			||||||
 | 
					   ikq* + ikr (26): INFO: Total processing time: 237.06687
 | 
				
			||||||
 | 
					   ikq* + ikr (31): INFO: Total processing time: 276.912414
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					ikr07.ethz.ch ikr09.ethz.ch ikr10.ethz.ch ikr11.ethz.ch
 | 
				
			||||||
 | 
					ikr13.ethz.ch ikr14.ethz.ch ikr15.ethz.ch ikr16.ethz.ch
 | 
				
			||||||
 | 
					ikr17.ethz.ch ikr19.ethz.ch ikr20.ethz.ch ikr21.ethz.ch
 | 
				
			||||||
 | 
					ikr23.ethz.ch ikr24.ethz.ch ikr25.ethz.ch ikr26.ethz.ch
 | 
				
			||||||
 | 
					ikr27.ethz.ch ikr28.ethz.ch ikr29.ethz.ch ikr30.ethz.ch
 | 
				
			||||||
 | 
					ikr31.ethz.ch
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					cdist -c ~/p/cdist-nutzung -p ikq02.ethz.ch ikq03.ethz.ch ikq04.ethz.ch ikq05.ethz.ch ikq06.ethz.ch ikq07.ethz.ch ikr01.ethz.ch ikr02.ethz.ch ikr03.ethz.ch ikr05.ethz.ch ikr07.ethz.ch ikr09.ethz.ch ikr10.ethz.ch ikr11.ethz.ch ikr13.ethz.ch ikr14.ethz.ch ikr15.ethz.ch ikr16.ethz.ch ikr17.ethz.ch ikr19.ethz.ch ikr20.ethz.ch ikr21.ethz.ch
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					--------------------------------------------------------------------------------
 | 
				
			||||||
 | 
					INFO: Total processing time for 1 hosts: 72.166661
 | 
				
			||||||
 | 
					INFO: Total processing time for 2 hosts: 76.633228
 | 
				
			||||||
 | 
					INFO: Total processing time for 3 host(s): 77.199817
 | 
				
			||||||
 | 
					INFO: Total processing time for 4 host(s): 94.045175
 | 
				
			||||||
 | 
					INFO: Total processing time for 5 host(s): 103.226354
 | 
				
			||||||
 | 
					INFO: Total processing time for 6 host(s): 107.76097
 | 
				
			||||||
 | 
					INFO: Total processing time for 7 host(s): 101.571705
 | 
				
			||||||
 | 
					INFO: Total processing time for 8 host(s): 107.600093
 | 
				
			||||||
 | 
					INFO: Total processing time for 9 host(s): 116.500371
 | 
				
			||||||
 | 
					INFO: Total processing time for 10 host(s): 119.445805
 | 
				
			||||||
 | 
					INFO: Total processing time for 11 host(s): 123.944385
 | 
				
			||||||
 | 
					INFO: Total processing time for 12 host(s): 130.499098
 | 
				
			||||||
 | 
					INFO: Total processing time for 13 host(s): 137.250861
 | 
				
			||||||
 | 
					INFO: Total processing time for 14 host(s): 154.9841
 | 
				
			||||||
 | 
					INFO: Total processing time for 15 host(s): 139.659637
 | 
				
			||||||
 | 
					INFO: Total processing time for 16 host(s): 142.70005
 | 
				
			||||||
 | 
					INFO: Total processing time for 17 host(s): 148.541452
 | 
				
			||||||
 | 
					INFO: Total processing time for 18 host(s): 159.360809
 | 
				
			||||||
 | 
					INFO: Total processing time for 19 host(s): 171.907864
 | 
				
			||||||
 | 
					INFO: Total processing time for 20 host(s): 178.76695
 | 
				
			||||||
 | 
					INFO: Total processing time for 21 host(s): 183.856671
 | 
				
			||||||
 | 
					INFO: Total processing time for 22 host(s): 194.504221
 | 
				
			||||||
 | 
					INFO: Total processing time for 23 host(s): 207.314842
 | 
				
			||||||
 | 
					INFO: Total processing time for 24 host(s): 215.846502
 | 
				
			||||||
 | 
					INFO: Total processing time for 25 host(s): 217.223581
 | 
				
			||||||
 | 
					INFO: Total processing time for 26 host(s): 238.591705
 | 
				
			||||||
 | 
					INFO: Total processing time for 27 host(s): 238.478493
 | 
				
			||||||
 | 
					INFO: Total processing time for 28 host(s): 246.058718
 | 
				
			||||||
 | 
					INFO: Total processing time for 29 host(s): 264.208372
 | 
				
			||||||
 | 
					INFO: Total processing time for 30 host(s): 265.560685
 | 
				
			||||||
 | 
					INFO: Total processing time for 31 host(s): 282.264488
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					--------------------------------------------------------------------------------
 | 
				
			||||||
 | 
					Use:
 | 
				
			||||||
 | 
					   grep "^INFO: Total processing time" doc/dev/logs/2011-09-12 | sed 's/.*: //'
 | 
				
			||||||
 | 
					   octave
 | 
				
			||||||
 | 
					      times = [ /* paste here ]
 | 
				
			||||||
 | 
					      plot(times)
 | 
				
			||||||
 | 
					      # keep the graph
 | 
				
			||||||
 | 
					      hold on
 | 
				
			||||||
 | 
					      # Scale linearly with the single host value
 | 
				
			||||||
 | 
					      plot((1:31)*times(1))
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					--------------------------------------------------------------------------------
 | 
				
			||||||
 | 
					code:
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					octave
 | 
				
			||||||
 | 
					time = [
 | 
				
			||||||
 | 
					72.166661
 | 
				
			||||||
 | 
					76.633228
 | 
				
			||||||
 | 
					77.199817
 | 
				
			||||||
 | 
					94.045175
 | 
				
			||||||
 | 
					103.226354
 | 
				
			||||||
 | 
					107.76097
 | 
				
			||||||
 | 
					101.571705
 | 
				
			||||||
 | 
					107.600093
 | 
				
			||||||
 | 
					116.500371
 | 
				
			||||||
 | 
					119.445805
 | 
				
			||||||
 | 
					123.944385
 | 
				
			||||||
 | 
					130.499098
 | 
				
			||||||
 | 
					137.250861
 | 
				
			||||||
 | 
					154.9841
 | 
				
			||||||
 | 
					139.659637
 | 
				
			||||||
 | 
					142.70005
 | 
				
			||||||
 | 
					148.541452
 | 
				
			||||||
 | 
					159.360809
 | 
				
			||||||
 | 
					171.907864
 | 
				
			||||||
 | 
					178.76695
 | 
				
			||||||
 | 
					183.856671
 | 
				
			||||||
 | 
					194.504221
 | 
				
			||||||
 | 
					207.314842
 | 
				
			||||||
 | 
					215.846502
 | 
				
			||||||
 | 
					217.223581
 | 
				
			||||||
 | 
					238.591705
 | 
				
			||||||
 | 
					238.478493
 | 
				
			||||||
 | 
					246.058718
 | 
				
			||||||
 | 
					264.208372
 | 
				
			||||||
 | 
					265.560685
 | 
				
			||||||
 | 
					282.264488
 | 
				
			||||||
 | 
					]
 | 
				
			||||||
 | 
					plot(times, "-;cdist;", times(1)*[1:length(times)]', "-;linear;")
 | 
				
			||||||
 | 
					title("Configuration duration (cdist-2.0.0-rc4)")
 | 
				
			||||||
 | 
					ylabel("Number of hosts")
 | 
				
			||||||
 | 
					xlabel("Time in seconds")
 | 
				
			||||||
 | 
					print('cdist-2.0.0-rc4.png', '-dpng')
 | 
				
			||||||
 | 
					
 | 
				
			||||||
							
								
								
									
										3
									
								
								doc/dev/logs/2011-09-13
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										3
									
								
								doc/dev/logs/2011-09-13
									
										
									
									
									
										Normal file
									
								
							| 
						 | 
					@ -0,0 +1,3 @@
 | 
				
			||||||
 | 
					Name for installer:
 | 
				
			||||||
 | 
					   installer (flag)
 | 
				
			||||||
 | 
					   $__installer (variable) - gesetzt oder nicht
 | 
				
			||||||
							
								
								
									
										63
									
								
								doc/dev/logs/2011-09-16.benchmark-r815-no-control-socket
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										63
									
								
								doc/dev/logs/2011-09-16.benchmark-r815-no-control-socket
									
										
									
									
									
										Normal file
									
								
							| 
						 | 
					@ -0,0 +1,63 @@
 | 
				
			||||||
 | 
					48 core
 | 
				
			||||||
 | 
					model name      : AMD Opteron(tm) Processor 6174
 | 
				
			||||||
 | 
					128 GB RAM
 | 
				
			||||||
 | 
					Dell  PowerEdge R815
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					root@sgs-r815-01:~/cdist-nutzung# grep "Total processing time for"  deploy-all-benchmark-noikr13
 | 
				
			||||||
 | 
					INFO: Total processing time for 1 host(s): 257.641541
 | 
				
			||||||
 | 
					INFO: Total processing time for 2 host(s): 257.025783
 | 
				
			||||||
 | 
					INFO: Total processing time for 3 host(s): 258.933088
 | 
				
			||||||
 | 
					INFO: Total processing time for 4 host(s): 259.253074
 | 
				
			||||||
 | 
					INFO: Total processing time for 5 host(s): 260.331896
 | 
				
			||||||
 | 
					INFO: Total processing time for 6 host(s): 262.051349
 | 
				
			||||||
 | 
					INFO: Total processing time for 7 host(s): 323.820878
 | 
				
			||||||
 | 
					INFO: Total processing time for 8 host(s): 329.081856
 | 
				
			||||||
 | 
					INFO: Total processing time for 9 host(s): 333.346278
 | 
				
			||||||
 | 
					INFO: Total processing time for 10 host(s): 334.832419
 | 
				
			||||||
 | 
					INFO: Total processing time for 11 host(s): 330.572375
 | 
				
			||||||
 | 
					INFO: Total processing time for 12 host(s): 331.726628
 | 
				
			||||||
 | 
					INFO: Total processing time for 13 host(s): 331.740591
 | 
				
			||||||
 | 
					INFO: Total processing time for 14 host(s): 331.237139
 | 
				
			||||||
 | 
					INFO: Total processing time for 15 host(s): 331.718861
 | 
				
			||||||
 | 
					INFO: Total processing time for 16 host(s): 332.374645
 | 
				
			||||||
 | 
					INFO: Total processing time for 17 host(s): 331.510445
 | 
				
			||||||
 | 
					INFO: Total processing time for 18 host(s): 332.030743
 | 
				
			||||||
 | 
					INFO: Total processing time for 19 host(s): 332.193198
 | 
				
			||||||
 | 
					INFO: Total processing time for 20 host(s): 333.933765
 | 
				
			||||||
 | 
					INFO: Total processing time for 21 host(s): 335.292953
 | 
				
			||||||
 | 
					INFO: Total processing time for 22 host(s): 337.253608
 | 
				
			||||||
 | 
					INFO: Total processing time for 23 host(s): 337.831493
 | 
				
			||||||
 | 
					INFO: Total processing time for 24 host(s): 339.024737
 | 
				
			||||||
 | 
					INFO: Total processing time for 25 host(s): 343.515044
 | 
				
			||||||
 | 
					INFO: Total processing time for 26 host(s): 339.759678
 | 
				
			||||||
 | 
					INFO: Total processing time for 27 host(s): 339.378998
 | 
				
			||||||
 | 
					INFO: Total processing time for 28 host(s): 339.640378
 | 
				
			||||||
 | 
					INFO: Total processing time for 29 host(s): 340.885614
 | 
				
			||||||
 | 
					INFO: Total processing time for 30 host(s): 341.836923
 | 
				
			||||||
 | 
					INFO: Total processing time for 31 host(s): 343.825758
 | 
				
			||||||
 | 
					INFO: Total processing time for 32 host(s): 344.176089
 | 
				
			||||||
 | 
					INFO: Total processing time for 33 host(s): 345.408518
 | 
				
			||||||
 | 
					INFO: Total processing time for 34 host(s): 347.15322
 | 
				
			||||||
 | 
					INFO: Total processing time for 35 host(s): 351.330649
 | 
				
			||||||
 | 
					INFO: Total processing time for 36 host(s): 347.640758
 | 
				
			||||||
 | 
					INFO: Total processing time for 37 host(s): 347.381126
 | 
				
			||||||
 | 
					INFO: Total processing time for 38 host(s): 347.053406
 | 
				
			||||||
 | 
					INFO: Total processing time for 39 host(s): 347.453166
 | 
				
			||||||
 | 
					INFO: Total processing time for 40 host(s): 347.84804
 | 
				
			||||||
 | 
					INFO: Total processing time for 41 host(s): 349.035272
 | 
				
			||||||
 | 
					INFO: Total processing time for 42 host(s): 349.41507
 | 
				
			||||||
 | 
					INFO: Total processing time for 43 host(s): 351.208072
 | 
				
			||||||
 | 
					INFO: Total processing time for 44 host(s): 351.788401
 | 
				
			||||||
 | 
					INFO: Total processing time for 45 host(s): 351.730259
 | 
				
			||||||
 | 
					INFO: Total processing time for 46 host(s): 515.693497
 | 
				
			||||||
 | 
					INFO: Total processing time for 47 host(s): 352.702677
 | 
				
			||||||
 | 
					INFO: Total processing time for 48 host(s): 353.418003
 | 
				
			||||||
 | 
					INFO: Total processing time for 49 host(s): 355.07111
 | 
				
			||||||
 | 
					INFO: Total processing time for 50 host(s): 354.622388
 | 
				
			||||||
 | 
					INFO: Total processing time for 51 host(s): 355.192521
 | 
				
			||||||
 | 
					INFO: Total processing time for 52 host(s): 355.283238
 | 
				
			||||||
 | 
					INFO: Total processing time for 53 host(s): 358.112329
 | 
				
			||||||
 | 
					INFO: Total processing time for 54 host(s): 357.717426
 | 
				
			||||||
 | 
					INFO: Total processing time for 55 host(s): 357.748707
 | 
				
			||||||
 | 
					INFO: Total processing time for 56 host(s): 358.902118
 | 
				
			||||||
 | 
					INFO: Total processing time for 57 host(s): 367.817594
 | 
				
			||||||
							
								
								
									
										1373
									
								
								doc/dev/logs/2011-09-16.benchmark-r815-no-control-socket.dmidecode
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										1373
									
								
								doc/dev/logs/2011-09-16.benchmark-r815-no-control-socket.dmidecode
									
										
									
									
									
										Normal file
									
								
							
										
											
												File diff suppressed because it is too large
												Load diff
											
										
									
								
							| 
						 | 
					@ -5,26 +5,13 @@ Feel free to pick one!
 | 
				
			||||||
 | 
					
 | 
				
			||||||
CORE
 | 
					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
 | 
					- 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 use in manifest, code, etc.?
 | 
				
			||||||
      - for creating temporary files, etc.
 | 
					      - for creating temporary files, etc.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					@ -36,18 +23,11 @@ CORE
 | 
				
			||||||
      -> for current host
 | 
					      -> for current host
 | 
				
			||||||
      -> add function to cdist-config, import from cdist-cache
 | 
					      -> 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"
 | 
					- Define / document "this is what should be on host X"
 | 
				
			||||||
   and have it parsable by different (shinken) tool
 | 
					   and have it parsable by different (shinken) tool
 | 
				
			||||||
   -> given after manifest run already!
 | 
					   -> given after manifest run already!
 | 
				
			||||||
 | 
					
 | 
				
			||||||
- Allow types to have parameters without values (boolean flags).
 | 
					- use absent/present for state by default?
 | 
				
			||||||
   e.g. __chair fancychair --pink --wood
 | 
					 | 
				
			||||||
   would result in:
 | 
					 | 
				
			||||||
      $__object/parameter/
 | 
					 | 
				
			||||||
         pink     # empty file
 | 
					 | 
				
			||||||
         wood     # empty file
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
TYPES
 | 
					TYPES
 | 
				
			||||||
------
 | 
					------
 | 
				
			||||||
| 
						 | 
					@ -64,5 +44,3 @@ DOCUMENTATION
 | 
				
			||||||
- asciidoc interprets __, which we use for variables
 | 
					- asciidoc interprets __, which we use for variables
 | 
				
			||||||
  names -> seek through docs and replace with \_\_!
 | 
					  names -> seek through docs and replace with \_\_!
 | 
				
			||||||
- reference explorers in cdist-reference!
 | 
					- reference explorers in cdist-reference!
 | 
				
			||||||
- compare running times:
 | 
					 | 
				
			||||||
   one, 5, 10, 50, 100, 1000 hosts => how does cdist scale?
 | 
					 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -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
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -164,25 +164,25 @@ __manifest::
 | 
				
			||||||
   Available for: initial manifest
 | 
					   Available for: initial manifest
 | 
				
			||||||
__global::
 | 
					__global::
 | 
				
			||||||
   Directory that contains generic output like explorer.
 | 
					   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::
 | 
					__object::
 | 
				
			||||||
   Directory that contains the current 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::
 | 
					__object_id::
 | 
				
			||||||
   The type unique object id.
 | 
					   The type unique object id.
 | 
				
			||||||
   Available for: type manifest, type explorer, type codegen
 | 
					   Available for: type manifest, type explorer, type gencode
 | 
				
			||||||
__self::
 | 
					__object_fq::
 | 
				
			||||||
   The full qualified name of the current object.
 | 
					   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::
 | 
					__target_host::
 | 
				
			||||||
   The host we are deploying to.
 | 
					   The host we are deploying to.
 | 
				
			||||||
   Available for: initial manifest, type manifest, type codegen
 | 
					   Available for: initial manifest, type manifest, type gencode
 | 
				
			||||||
__target_user::
 | 
					__target_user::
 | 
				
			||||||
   User to use for authentication on remote host.
 | 
					   User to use for authentication on remote host.
 | 
				
			||||||
   Currently static in core.
 | 
					   Currently static in core.
 | 
				
			||||||
__type::
 | 
					__type::
 | 
				
			||||||
   Path to the current type.
 | 
					   Path to the current type.
 | 
				
			||||||
   Available for: type manifest
 | 
					   Available for: type manifest, type gencode
 | 
				
			||||||
__type_explorer::
 | 
					__type_explorer::
 | 
				
			||||||
   Directory that contains the type explorers.
 | 
					   Directory that contains the type explorers.
 | 
				
			||||||
   Available for: type explorer
 | 
					   Available for: type explorer
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -1,31 +0,0 @@
 | 
				
			||||||
cdist-cache(1)
 | 
					 | 
				
			||||||
==============
 | 
					 | 
				
			||||||
Nico Schottelius <nico-cdist--@--schottelius.org>
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
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).
 | 
					 | 
				
			||||||
| 
						 | 
					@ -1,34 +0,0 @@
 | 
				
			||||||
cdist-code-run(1)
 | 
					 | 
				
			||||||
=================
 | 
					 | 
				
			||||||
Nico Schottelius <nico-cdist--@--schottelius.org>
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
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).
 | 
					 | 
				
			||||||
| 
						 | 
					@ -1,43 +0,0 @@
 | 
				
			||||||
cdist-deploy-to(1)
 | 
					 | 
				
			||||||
==================
 | 
					 | 
				
			||||||
Nico Schottelius <nico-cdist--@--schottelius.org>
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
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 <git-checkout>/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).
 | 
					 | 
				
			||||||
| 
						 | 
					@ -1,38 +0,0 @@
 | 
				
			||||||
cdist-dir(1)
 | 
					 | 
				
			||||||
============
 | 
					 | 
				
			||||||
Nico Schottelius <nico-cdist--@--schottelius.org>
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
NAME
 | 
					 | 
				
			||||||
----
 | 
					 | 
				
			||||||
cdist-dir - Poor man's directory synchronisation
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
SYNOPSIS
 | 
					 | 
				
			||||||
--------
 | 
					 | 
				
			||||||
cdist-dir <push|pull> 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).
 | 
					 | 
				
			||||||
| 
						 | 
					@ -1,31 +0,0 @@
 | 
				
			||||||
cdist-explorer-run-global(1)
 | 
					 | 
				
			||||||
============================
 | 
					 | 
				
			||||||
Nico Schottelius <nico-cdist--@--schottelius.org>
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
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).
 | 
					 | 
				
			||||||
| 
						 | 
					@ -1,32 +0,0 @@
 | 
				
			||||||
cdist-manifest-run-init(1)
 | 
					 | 
				
			||||||
==========================
 | 
					 | 
				
			||||||
Nico Schottelius <nico-cdist--@--schottelius.org>
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
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).
 | 
					 | 
				
			||||||
| 
						 | 
					@ -1,31 +0,0 @@
 | 
				
			||||||
cdist-manifest-run(1)
 | 
					 | 
				
			||||||
=====================
 | 
					 | 
				
			||||||
Nico Schottelius <nico-cdist--@--schottelius.org>
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
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).
 | 
					 | 
				
			||||||
| 
						 | 
					@ -1,41 +0,0 @@
 | 
				
			||||||
cdist-mass-deploy(1)
 | 
					 | 
				
			||||||
====================
 | 
					 | 
				
			||||||
Nico Schottelius <nico-cdist--@--schottelius.org>
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
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).
 | 
					 | 
				
			||||||
| 
						 | 
					@ -1,31 +0,0 @@
 | 
				
			||||||
cdist-object-all(1)
 | 
					 | 
				
			||||||
===================
 | 
					 | 
				
			||||||
Steven Armstrong <steven-cdist--@--armstrong.cc>
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
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).
 | 
					 | 
				
			||||||
| 
						 | 
					@ -1,32 +0,0 @@
 | 
				
			||||||
cdist-object-code-run(1)
 | 
					 | 
				
			||||||
========================
 | 
					 | 
				
			||||||
Nico Schottelius <nico-cdist--@--schottelius.org>
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
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).
 | 
					 | 
				
			||||||
| 
						 | 
					@ -1,31 +0,0 @@
 | 
				
			||||||
cdist-object-explorer-run(1)
 | 
					 | 
				
			||||||
============================
 | 
					 | 
				
			||||||
Nico Schottelius <nico-cdist--@--schottelius.org>
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
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).
 | 
					 | 
				
			||||||
| 
						 | 
					@ -1,32 +0,0 @@
 | 
				
			||||||
cdist-object-gencode-run(1)
 | 
					 | 
				
			||||||
===========================
 | 
					 | 
				
			||||||
Nico Schottelius <nico-cdist--@--schottelius.org>
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
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).
 | 
					 | 
				
			||||||
| 
						 | 
					@ -1,33 +0,0 @@
 | 
				
			||||||
cdist-object-gencode(1)
 | 
					 | 
				
			||||||
=======================
 | 
					 | 
				
			||||||
Nico Schottelius <nico-cdist--@--schottelius.org>
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
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).
 | 
					 | 
				
			||||||
| 
						 | 
					@ -1,31 +0,0 @@
 | 
				
			||||||
cdist-object-manifest-run(1)
 | 
					 | 
				
			||||||
============================
 | 
					 | 
				
			||||||
Nico Schottelius <nico-cdist--@--schottelius.org>
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
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).
 | 
					 | 
				
			||||||
| 
						 | 
					@ -1,35 +0,0 @@
 | 
				
			||||||
cdist-object-prepare(1)
 | 
					 | 
				
			||||||
=======================
 | 
					 | 
				
			||||||
Steven Armstrong <steven-cdist--@--armstrong.cc>
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
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).
 | 
					 | 
				
			||||||
| 
						 | 
					@ -1,31 +0,0 @@
 | 
				
			||||||
cdist-object-push(1)
 | 
					 | 
				
			||||||
====================
 | 
					 | 
				
			||||||
Nico Schottelius <nico-cdist--@--schottelius.org>
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
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).
 | 
					 | 
				
			||||||
| 
						 | 
					@ -1,36 +0,0 @@
 | 
				
			||||||
cdist-object-run(1)
 | 
					 | 
				
			||||||
===================
 | 
					 | 
				
			||||||
Steven Armstrong <steven-cdist--@--armstrong.cc>
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
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).
 | 
					 | 
				
			||||||
| 
						 | 
					@ -1,33 +0,0 @@
 | 
				
			||||||
cdist-remote-explorer-run(1)
 | 
					 | 
				
			||||||
============================
 | 
					 | 
				
			||||||
Nico Schottelius <nico-cdist--@--schottelius.org>
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
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).
 | 
					 | 
				
			||||||
| 
						 | 
					@ -1,33 +0,0 @@
 | 
				
			||||||
cdist-run-remote(1)
 | 
					 | 
				
			||||||
===================
 | 
					 | 
				
			||||||
Nico Schottelius <nico-cdist--@--schottelius.org>
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
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).
 | 
					 | 
				
			||||||
| 
						 | 
					@ -1,33 +0,0 @@
 | 
				
			||||||
cdist-type-build-emulation(1)
 | 
					 | 
				
			||||||
=============================
 | 
					 | 
				
			||||||
Nico Schottelius <nico-cdist--@--schottelius.org>
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
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).
 | 
					 | 
				
			||||||
| 
						 | 
					@ -1,30 +0,0 @@
 | 
				
			||||||
cdist-type-template(1)
 | 
					 | 
				
			||||||
======================
 | 
					 | 
				
			||||||
Nico Schottelius <nico-cdist--@--schottelius.org>
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
NAME
 | 
					 | 
				
			||||||
----
 | 
					 | 
				
			||||||
cdist-type-template - Create a new type
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
SYNOPSIS
 | 
					 | 
				
			||||||
--------
 | 
					 | 
				
			||||||
cdist-type-template NAME
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
DESCRIPTION
 | 
					 | 
				
			||||||
-----------
 | 
					 | 
				
			||||||
cdist-type-template creates a new type and adds the usual files to it.
 | 
					 | 
				
			||||||
It is thought to be helpful when writing new types.
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
SEE ALSO
 | 
					 | 
				
			||||||
--------
 | 
					 | 
				
			||||||
cdist(7)
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
COPYING
 | 
					 | 
				
			||||||
-------
 | 
					 | 
				
			||||||
Copyright \(C) 2011 Nico Schottelius. Free use of this software is
 | 
					 | 
				
			||||||
granted under the terms of the GNU General Public License version 3 (GPLv3).
 | 
					 | 
				
			||||||
							
								
								
									
										103
									
								
								doc/man/man1/cdist.text
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										103
									
								
								doc/man/man1/cdist.text
									
										
									
									
									
										Normal file
									
								
							| 
						 | 
					@ -0,0 +1,103 @@
 | 
				
			||||||
 | 
					cdist(1)
 | 
				
			||||||
 | 
					========
 | 
				
			||||||
 | 
					Nico Schottelius <nico-cdist--@--schottelius.org>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					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).
 | 
				
			||||||
| 
						 | 
					@ -249,7 +249,7 @@ fi
 | 
				
			||||||
manifestinit="conf/manifest/init"
 | 
					manifestinit="conf/manifest/init"
 | 
				
			||||||
cat << eof
 | 
					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
 | 
					# Every machine becomes a marker, so sysadmins know that automatic
 | 
				
			||||||
							
								
								
									
										242
									
								
								doc/speeches/2011-05-20_cosin.tex
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										242
									
								
								doc/speeches/2011-05-20_cosin.tex
									
										
									
									
									
										Normal file
									
								
							| 
						 | 
					@ -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}
 | 
				
			||||||
| 
						 | 
					@ -0,0 +1,2 @@
 | 
				
			||||||
 | 
					>eof
 | 
				
			||||||
 | 
					129.132.186.89 # sgv-afs-sur5r
 | 
				
			||||||
| 
						 | 
					@ -0,0 +1 @@
 | 
				
			||||||
 | 
					eof
 | 
				
			||||||
| 
						 | 
					@ -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
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					@ -0,0 +1 @@
 | 
				
			||||||
 | 
					ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQC/Gbl64LT3VD5hsVtk1w670S2gue1OaW9XLg/Vk/iBqsYYrLGZh+TXJsAsXOSF1sZH6QSdNlpzTPsno9KFCTQTNlYe0IrWPGRrFGw1or3M6OugJrMeSiMYQ5nhH6HMjhzCFHH8Xh4Yku8fgi3ejPpySW8umx7nBL7ndiEJ9Y+lixNWMirEPLpz9YufFm9u8GX6bPrmjIBz6EhfxaqJ2N/N6gQB+4PmNopzqWHm+n4LToA9N8qwetSfhgEg7DVaD9SrJNjNTGSgii6CritT9sF8ZBq5CZG58DTyrxCndhhHte5OCGMb5ENgO4OBHA0MrD56unHrdAZCCosa9rI+pIll abr@cltHome03
 | 
				
			||||||
| 
						 | 
					@ -0,0 +1 @@
 | 
				
			||||||
 | 
					ssh-rsa AAAAB3NzaC1yc2EAAAABIwAAAQEA17fnWJMTAuIvWcdnsasdfEkBabeXEhYaR03Qc/KBpS+iToSeUzlc5SeXoAczqSMsC0uYpDnhll9q3aAN82Xo06RI2ytd7TeXvFcVwzvXB+sNUsvtyPZ5Uyx7d2WTI87bm169KhGTJCaww8p+qa2UhkjOOaXZwMGjkHlvZ3WSZr5mLar9O3r4PG8SIqoFF0m+tcc2fcWIK3df3jWIk8g6j/jTaoIa18qsK/rtO90Ql20FMQJOZTKGKjHIOx2FLnXY5WKrXmXyyffgFpqi1rUAkCkjCKnm65fDjecn6FplzSUuZo/IB2GnHGNQVnNkU/18/G8KQKu9clkMxuUl8DYJBQ== bugblue@jabber.eof.name
 | 
				
			||||||
| 
						 | 
					@ -0,0 +1 @@
 | 
				
			||||||
 | 
					ssh-rsa AAAAB3NzaC1yc2EAAAABIwAAAQEA1xfKoN8D3I0uGvc66E2cpnutdgALbSVIIWy0SBGV1ZLA4CehAL5BpMO0EI1TfH4LGgpjg+CnLXOSMd+bnvWjPTxGUbGcmK45UYCyn1LzSAfVKi9Mr06wbvQj0h5w1zEAwDqt63SHGjGOHO4TeCSrPxEROPMbZ1mP1ECsb4f+3WLWE5icbzOb/QMx2zNDd29rVvFJiJMOg4AiIs7pl/T7Qxg2yN6YlDIXSXLiE2i98O26kBNWRgAFcTNBqoUs5AkZ2F4LPUGbyuLpV+wtlpYcQXOUTLoRlKw+ovBQH3L6ae9n6+rFTIEEAS08C0MOzQPC3QjmfRMC8mxVkn22XnpHbQ== default
 | 
				
			||||||
| 
						 | 
					@ -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
 | 
				
			||||||
| 
						 | 
					@ -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
 | 
				
			||||||
| 
						 | 
					@ -1,6 +1,6 @@
 | 
				
			||||||
#!/bin/sh
 | 
					#!/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.
 | 
					# This file is part of cdist.
 | 
				
			||||||
#
 | 
					#
 | 
				
			||||||
| 
						 | 
					@ -17,27 +17,29 @@
 | 
				
			||||||
# You should have received a copy of the GNU General Public License
 | 
					# You should have received a copy of the GNU General Public License
 | 
				
			||||||
# along with cdist. If not, see <http://www.gnu.org/licenses/>.
 | 
					# along with cdist. If not, see <http://www.gnu.org/licenses/>.
 | 
				
			||||||
#
 | 
					#
 | 
				
			||||||
# Build pseudo binaries for type emulation
 | 
					 | 
				
			||||||
#
 | 
					#
 | 
				
			||||||
 | 
					
 | 
				
			||||||
. cdist-config
 | 
					 | 
				
			||||||
[ $# -eq 1 ] || __cdist_usage "<out dir>"
 | 
					 | 
				
			||||||
set -eu
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
__cdist_output_dir="$1"; shift
 | 
					__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
 | 
					cd "$__type/files/ssh"
 | 
				
			||||||
   __cdist_exit_err "$__cdist_type_dir must exist and contain available types"
 | 
					for key in *; do
 | 
				
			||||||
fi
 | 
					   require="__directory/root/.ssh"  \
 | 
				
			||||||
 | 
					      __addifnosuchline ssh-$key --file /root/.ssh/authorized_keys \
 | 
				
			||||||
 | 
					      --line "$(cat "$key")"
 | 
				
			||||||
 | 
					done
 | 
				
			||||||
 | 
					
 | 
				
			||||||
# Get Types
 | 
					for pkg in openafs-client openafs-krb5 krb5-user; do
 | 
				
			||||||
cd "${__cdist_type_dir}"
 | 
					   __package $pkg --state installed
 | 
				
			||||||
ls -1 > "${__cdist_tmp_file}"
 | 
					done
 | 
				
			||||||
 | 
					
 | 
				
			||||||
# Create binaries
 | 
					# Kerberos Config
 | 
				
			||||||
mkdir -p "${__cdist_output_dir}"
 | 
					__file /etc/krb5.conf --source "$__type/files/krb5/krb5.conf"
 | 
				
			||||||
while read type; do
 | 
					
 | 
				
			||||||
   ln -sf "${__cdist_type_emulator}" "${__cdist_output_dir}/${type}"
 | 
					# AFS config
 | 
				
			||||||
done < "${__cdist_tmp_file}"
 | 
					cd "$__type/files/afs"
 | 
				
			||||||
 | 
					for afsconf in *; do
 | 
				
			||||||
 | 
					   __file /etc/openafs/$afsconf --source "$__type/files/afs/$afsconf"
 | 
				
			||||||
 | 
					done
 | 
				
			||||||
							
								
								
									
										0
									
								
								other/examples/nico/conf/type/__nico_afs/singleton
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										0
									
								
								other/examples/nico/conf/type/__nico_afs/singleton
									
										
									
									
									
										Normal file
									
								
							| 
						 | 
					@ -0,0 +1 @@
 | 
				
			||||||
 | 
					scheibe
 | 
				
			||||||
| 
						 | 
					@ -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 
 | 
				
			||||||
							
								
								
									
										47
									
								
								other/examples/nico/conf/type/__nico_desktop/manifest
									
										
									
									
									
										Executable file
									
								
							
							
						
						
									
										47
									
								
								other/examples/nico/conf/type/__nico_desktop/manifest
									
										
									
									
									
										Executable file
									
								
							| 
						 | 
					@ -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 <http://www.gnu.org/licenses/>.
 | 
				
			||||||
 | 
					#
 | 
				
			||||||
 | 
					#
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#
 | 
				
			||||||
 | 
					# 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
 | 
				
			||||||
| 
						 | 
					@ -0,0 +1 @@
 | 
				
			||||||
 | 
					hostname
 | 
				
			||||||
							
								
								
									
										0
									
								
								other/examples/nico/conf/type/__nico_desktop/singleton
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										0
									
								
								other/examples/nico/conf/type/__nico_desktop/singleton
									
										
									
									
									
										Normal file
									
								
							| 
						 | 
					@ -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 
 | 
				
			||||||
							
								
								
									
										24
									
								
								other/examples/nico/conf/type/__nico_mpd/manifest
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										24
									
								
								other/examples/nico/conf/type/__nico_mpd/manifest
									
										
									
									
									
										Normal file
									
								
							| 
						 | 
					@ -0,0 +1,24 @@
 | 
				
			||||||
 | 
					#!/bin/sh
 | 
				
			||||||
 | 
					#
 | 
				
			||||||
 | 
					# 2011 Nico Schottelius (nico-cdist at schottelius.org)
 | 
				
			||||||
 | 
					#
 | 
				
			||||||
 | 
					# This file is part of cdist.
 | 
				
			||||||
 | 
					#
 | 
				
			||||||
 | 
					# cdist is free software: you can redistribute it and/or modify
 | 
				
			||||||
 | 
					# it under the terms of the GNU General Public License as published by
 | 
				
			||||||
 | 
					# the Free Software Foundation, either version 3 of the License, or
 | 
				
			||||||
 | 
					# (at your option) any later version.
 | 
				
			||||||
 | 
					#
 | 
				
			||||||
 | 
					# cdist is distributed in the hope that it will be useful,
 | 
				
			||||||
 | 
					# but WITHOUT ANY WARRANTY; without even the implied warranty of
 | 
				
			||||||
 | 
					# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 | 
				
			||||||
 | 
					# GNU General Public License for more details.
 | 
				
			||||||
 | 
					#
 | 
				
			||||||
 | 
					# You should have received a copy of the GNU General Public License
 | 
				
			||||||
 | 
					# along with cdist. If not, see <http://www.gnu.org/licenses/>.
 | 
				
			||||||
 | 
					#
 | 
				
			||||||
 | 
					#
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					__package mpd --state installed
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					require="__package/mpd" __file /etc/mpd.conf --source "$__type/files/mpd.conf"
 | 
				
			||||||
| 
						 | 
					@ -0,0 +1 @@
 | 
				
			||||||
 | 
					hostname
 | 
				
			||||||
							
								
								
									
										0
									
								
								other/examples/nico/conf/type/__nico_mpd/singleton
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										0
									
								
								other/examples/nico/conf/type/__nico_mpd/singleton
									
										
									
									
									
										Normal file
									
								
							| 
						 | 
					@ -0,0 +1,6 @@
 | 
				
			||||||
 | 
					# generated by cdist
 | 
				
			||||||
 | 
					auto lo eth0
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					iface lo inet loopback
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					iface eth0 inet dhcp
 | 
				
			||||||
| 
						 | 
					@ -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
 | 
				
			||||||
| 
						 | 
					@ -1,6 +1,6 @@
 | 
				
			||||||
#!/bin/sh
 | 
					#!/bin/sh
 | 
				
			||||||
#
 | 
					#
 | 
				
			||||||
# 2010 Nico Schottelius (nico-cdist at schottelius.org)
 | 
					# 2011 Nico Schottelius (nico-cdist at schottelius.org)
 | 
				
			||||||
#
 | 
					#
 | 
				
			||||||
# This file is part of cdist.
 | 
					# This file is part of cdist.
 | 
				
			||||||
#
 | 
					#
 | 
				
			||||||
| 
						 | 
					@ -18,22 +18,26 @@
 | 
				
			||||||
# along with cdist. If not, see <http://www.gnu.org/licenses/>.
 | 
					# along with cdist. If not, see <http://www.gnu.org/licenses/>.
 | 
				
			||||||
#
 | 
					#
 | 
				
			||||||
#
 | 
					#
 | 
				
			||||||
# Let's build a cconfig tree from a configuration
 | 
					
 | 
				
			||||||
# And save it into the cache tree
 | 
					case "$(cat "$__global/explorer/os")" in
 | 
				
			||||||
 | 
					   debian|ubuntu)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					      interface="$(cat $__object/parameter/interface)"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
      #
 | 
					      #
 | 
				
			||||||
 | 
					      # 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
 | 
				
			||||||
 | 
					
 | 
				
			||||||
. cdist-config
 | 
					      __file "$destination" --source "$source"
 | 
				
			||||||
[ $# -eq 1 ] || __cdist_usage "<target host>"
 | 
					   ;;
 | 
				
			||||||
set -u
 | 
					esac
 | 
				
			||||||
 | 
					 | 
				
			||||||
__cdist_target_host="$1"; shift
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
# Create base to move into
 | 
					 | 
				
			||||||
mkdir -p "${__cdist_local_base_cache_dir}"
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
# 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"
 | 
					 | 
				
			||||||
| 
						 | 
					@ -0,0 +1 @@
 | 
				
			||||||
 | 
					interface
 | 
				
			||||||
							
								
								
									
										0
									
								
								other/examples/nico/conf/type/__nico_network/singleton
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										0
									
								
								other/examples/nico/conf/type/__nico_network/singleton
									
										
									
									
									
										Normal file
									
								
							| 
						 | 
					@ -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 
 | 
				
			||||||
							
								
								
									
										47
									
								
								other/examples/nico/conf/type/__nico_nfs_client/manifest
									
										
									
									
									
										Executable file
									
								
							
							
						
						
									
										47
									
								
								other/examples/nico/conf/type/__nico_nfs_client/manifest
									
										
									
									
									
										Executable file
									
								
							| 
						 | 
					@ -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 <http://www.gnu.org/licenses/>.
 | 
				
			||||||
 | 
					#
 | 
				
			||||||
 | 
					#
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					__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
 | 
				
			||||||
| 
						 | 
					@ -18,16 +18,21 @@
 | 
				
			||||||
# along with cdist. If not, see <http://www.gnu.org/licenses/>.
 | 
					# along with cdist. If not, see <http://www.gnu.org/licenses/>.
 | 
				
			||||||
#
 | 
					#
 | 
				
			||||||
#
 | 
					#
 | 
				
			||||||
# 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 "<target_host> <binary> [opts]"
 | 
					# Standard everywhere packages
 | 
				
			||||||
set -ue
 | 
					#
 | 
				
			||||||
 | 
					__nico_packages
 | 
				
			||||||
__cdist_target_host="$1"; shift
 | 
					__motd
 | 
				
			||||||
 | 
					 | 
				
			||||||
ssh "${__cdist_remote_user}@${__cdist_target_host}"   \
 | 
					 | 
				
			||||||
   "export PATH=\"${__cdist_remote_bin_dir}:\$PATH\";" \
 | 
					 | 
				
			||||||
   "export __cdist_out_object_dir=\"$__cdist_remote_out_object_dir\";" \
 | 
					 | 
				
			||||||
   "$@"
 | 
					 | 
				
			||||||
							
								
								
									
										0
									
								
								other/examples/nico/conf/type/__nico_notebook/singleton
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										0
									
								
								other/examples/nico/conf/type/__nico_notebook/singleton
									
										
									
									
									
										Normal file
									
								
							
							
								
								
									
										33
									
								
								other/examples/nico/conf/type/__nico_packages/manifest
									
										
									
									
									
										Executable file
									
								
							
							
						
						
									
										33
									
								
								other/examples/nico/conf/type/__nico_packages/manifest
									
										
									
									
									
										Executable file
									
								
							| 
						 | 
					@ -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 <http://www.gnu.org/licenses/>.
 | 
				
			||||||
 | 
					#
 | 
				
			||||||
 | 
					#
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					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
 | 
				
			||||||
							
								
								
									
										0
									
								
								other/examples/nico/conf/type/__nico_packages/singleton
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										0
									
								
								other/examples/nico/conf/type/__nico_packages/singleton
									
										
									
									
									
										Normal file
									
								
							
							
								
								
									
										13
									
								
								other/examples/nico/conf/type/__nico_sudo/files/sudo-nico
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										13
									
								
								other/examples/nico/conf/type/__nico_sudo/files/sudo-nico
									
										
									
									
									
										Normal file
									
								
							| 
						 | 
					@ -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
 | 
				
			||||||
Some files were not shown because too many files have changed in this diff Show more
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue