Merge remote-tracking branch 'ungleich/master' into cdist-type__hosts

This commit is contained in:
Darko Poljak 2017-02-02 19:45:48 +01:00
commit d3b3fef63b
227 changed files with 4524 additions and 427 deletions

View file

@ -59,16 +59,24 @@ class UnresolvableRequirementsError(cdist.Error):
class CdistBetaRequired(cdist.Error): class CdistBetaRequired(cdist.Error):
"""Beta functionality is used but beta is not enabled""" """Beta functionality is used but beta is not enabled"""
def __init__(self, command, arg): def __init__(self, command, arg=None):
self.command = command self.command = command
self.arg = arg self.arg = arg
def __str__(self): def __str__(self):
err_msg = ("\'{}\' argument of \'{}\' command is beta, but beta is " if self.arg is None:
"not enabled. If you want to use it please enable beta " err_msg = ("\'{}\' command is beta, but beta is "
"functionalities by using the -b/--enable-beta command " "not enabled. If you want to use it please enable beta "
"line flag.") "functionalities by using the -b/--beta command "
return err_msg.format(self.arg, self.command) "line flag or setting CDIST_BETA env var.")
fmt_args = [self.command, ]
else:
err_msg = ("\'{}\' argument of \'{}\' command is beta, but beta "
"is not enabled. If you want to use it please enable "
"beta functionalities by using the -b/--beta "
"command line flag or setting CDIST_BETA env var.")
fmt_args = [self.arg, self.command, ]
return err_msg.format(*fmt_args)
class CdistObjectError(Error): class CdistObjectError(Error):

210
cdist/argparse.py Normal file
View file

@ -0,0 +1,210 @@
import argparse
import cdist
import multiprocessing
import os
import logging
import collections
# set of beta sub-commands
BETA_COMMANDS = set(('install', ))
# set of beta arguments for sub-commands
BETA_ARGS = {
'config': set(('jobs', )),
}
EPILOG = "Get cdist at http://www.nico.schottelius.org/software/cdist/"
# Parser others can reuse
parser = None
_verbosity_level = {
0: logging.ERROR,
1: logging.WARNING,
2: logging.INFO,
}
_verbosity_level = collections.defaultdict(
lambda: logging.DEBUG, _verbosity_level)
def add_beta_command(cmd):
BETA_COMMANDS.add(cmd)
def add_beta_arg(cmd, arg):
if cmd in BETA_ARGS:
if arg not in BETA_ARGS[cmd]:
BETA_ARGS[cmd].append(arg)
else:
BETA_ARGS[cmd] = set((arg, ))
def check_beta(args_dict):
if 'beta' not in args_dict:
args_dict['beta'] = False
# Check only if beta is not enabled: if beta option is specified then
# raise error.
if not args_dict['beta']:
cmd = args_dict['command']
# first check if command is beta
if cmd in BETA_COMMANDS:
raise cdist.CdistBetaRequired(cmd)
# then check if some command's argument is beta
if cmd in BETA_ARGS:
for arg in BETA_ARGS[cmd]:
if arg in args_dict and args_dict[arg]:
raise cdist.CdistBetaRequired(cmd, arg)
def check_positive_int(value):
import argparse
try:
val = int(value)
except ValueError:
raise argparse.ArgumentTypeError(
"{} is invalid int value".format(value))
if val <= 0:
raise argparse.ArgumentTypeError(
"{} is invalid positive int value".format(val))
return val
def get_parsers():
global parser
# Construct parser others can reuse
if parser:
return parser
else:
parser = {}
# Options _all_ parsers have in common
parser['loglevel'] = argparse.ArgumentParser(add_help=False)
parser['loglevel'].add_argument(
'-d', '--debug',
help=('Set log level to debug (deprecated, use -vvv instead)'),
action='store_true', default=False)
parser['loglevel'].add_argument(
'-v', '--verbose',
help=('Increase the verbosity level. Every instance of -v '
'increments the verbosity level by one. Its default value is '
'0. There are 4 levels of verbosity. The order of levels '
'from the lowest to the highest are: ERROR (0), WARNING (1), '
'INFO (2) and DEBUG (3 or higher).'),
action='count', default=0)
parser['beta'] = argparse.ArgumentParser(add_help=False)
parser['beta'].add_argument(
'-b', '--beta',
help=('Enable beta functionalities. '
'Can also be enabled using CDIST_BETA env var.'),
action='store_true', dest='beta',
default='CDIST_BETA' in os.environ)
# Main subcommand parser
parser['main'] = argparse.ArgumentParser(
description='cdist ' + cdist.VERSION, parents=[parser['loglevel']])
parser['main'].add_argument(
'-V', '--version', help='Show version', action='version',
version='%(prog)s ' + cdist.VERSION)
parser['sub'] = parser['main'].add_subparsers(
title="Commands", dest="command")
# Banner
parser['banner'] = parser['sub'].add_parser(
'banner', parents=[parser['loglevel']])
parser['banner'].set_defaults(func=cdist.banner.banner)
# Config
parser['config_main'] = argparse.ArgumentParser(add_help=False)
parser['config_main'].add_argument(
'-c', '--conf-dir',
help=('Add configuration directory (can be repeated, '
'last one wins)'), action='append')
parser['config_main'].add_argument(
'-i', '--initial-manifest',
help='path to a cdist manifest or \'-\' to read from stdin.',
dest='manifest', required=False)
parser['config_main'].add_argument(
'-j', '--jobs', nargs='?',
type=check_positive_int,
help=('Specify the maximum number of parallel jobs, currently '
'only global explorers are supported'),
action='store', dest='jobs',
const=multiprocessing.cpu_count())
parser['config_main'].add_argument(
'-n', '--dry-run',
help='do not execute code', action='store_true')
parser['config_main'].add_argument(
'-o', '--out-dir',
help='directory to save cdist output in', dest="out_path")
# remote-copy and remote-exec defaults are environment variables
# if set; if not then None - these will be futher handled after
# parsing to determine implementation default
parser['config_main'].add_argument(
'--remote-copy',
help='Command to use for remote copy (should behave like scp)',
action='store', dest='remote_copy',
default=os.environ.get('CDIST_REMOTE_COPY'))
parser['config_main'].add_argument(
'--remote-exec',
help=('Command to use for remote execution '
'(should behave like ssh)'),
action='store', dest='remote_exec',
default=os.environ.get('CDIST_REMOTE_EXEC'))
# Config
parser['config_args'] = argparse.ArgumentParser(add_help=False)
parser['config_args'].add_argument(
'host', nargs='*', help='host(s) to operate on')
parser['config_args'].add_argument(
'-f', '--file',
help=('Read additional hosts to operate on from specified file '
'or from stdin if \'-\' (each host on separate line). '
'If no host or host file is specified then, by default, '
'read hosts from stdin.'),
dest='hostfile', required=False)
parser['config_args'].add_argument(
'-p', '--parallel',
help='operate on multiple hosts in parallel',
action='store_true', dest='parallel')
parser['config_args'].add_argument(
'-s', '--sequential',
help='operate on multiple hosts sequentially (default)',
action='store_false', dest='parallel')
parser['config'] = parser['sub'].add_parser(
'config', parents=[parser['loglevel'], parser['beta'],
parser['config_main'],
parser['config_args']])
parser['config'].set_defaults(func=cdist.config.Config.commandline)
# Install
parser['install'] = parser['sub'].add_parser('install', add_help=False,
parents=[parser['config']])
parser['install'].set_defaults(func=cdist.install.Install.commandline)
# Shell
parser['shell'] = parser['sub'].add_parser(
'shell', parents=[parser['loglevel']])
parser['shell'].add_argument(
'-s', '--shell',
help=('Select shell to use, defaults to current shell. Used shell'
' should be POSIX compatible shell.'))
parser['shell'].set_defaults(func=cdist.shell.Shell.commandline)
for p in parser:
parser[p].epilog = EPILOG
return parser
def handle_loglevel(args):
if args.debug:
retval = "-d/--debug is deprecated, use -vvv instead"
args.verbose = 3
else:
retval = None
logging.root.setLevel(_verbosity_level[args.verbose])
return retval

View file

@ -0,0 +1,2 @@
cd /dev
echo sd? hd? vd?

View file

@ -39,6 +39,11 @@ if [ -f /etc/cdist-preos ]; then
exit 0 exit 0
fi fi
if [ -d /gnu/store ]; then
echo guixsd
exit 0
fi
### Debian and derivatives ### Debian and derivatives
if grep -q ^DISTRIB_ID=Ubuntu /etc/lsb-release 2>/dev/null; then if grep -q ^DISTRIB_ID=Ubuntu /etc/lsb-release 2>/dev/null; then
echo ubuntu echo ubuntu

View file

@ -61,7 +61,11 @@ case "$($__explorer/os)" in
cat /etc/slackware-version cat /etc/slackware-version
;; ;;
suse) suse)
cat /etc/SuSE-release if [ -f /etc/os-release ]; then
cat /etc/os-release
else
cat /etc/SuSE-release
fi
;; ;;
ubuntu) ubuntu)
lsb_release -sr lsb_release -sr

View file

@ -0,0 +1,31 @@
#!/bin/sh
#
# 2016 Ander Punnar (cdist at kvlt.ee)
#
# 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/>.
#
apt_version_is=$(dpkg-query --show --showformat '${Version}' apt)
# from APT changelog:
# apt (0.8.14.2) UNRELEASED; urgency=low
# provide a 'dpkg --set-selections' wrapper to set/release holds
apt_version_should=0.8.14.2
dpkg --compare-versions $apt_version_should le $apt_version_is \
&& echo 0 \
|| echo 1

View file

@ -0,0 +1,30 @@
#!/bin/sh
#
# 2016 Ander Punnar (cdist at kvlt.ee)
#
# 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/>.
#
if [ -f "$__object/parameter/name" ]; then
name="$(cat "$__object/parameter/name")"
else
name="$__object_id"
fi
dpkg-query --show --showformat '${Status}' $name 2>/dev/null \
| grep -q 'ok installed' \
&& echo 0 \
|| echo 1

View file

@ -0,0 +1,27 @@
#!/bin/sh
#
# 2016 Ander Punnar (cdist at kvlt.ee)
#
# 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/>.
#
if [ -f "$__object/parameter/name" ]; then
name="$(cat "$__object/parameter/name")"
else
name="$__object_id"
fi
apt-mark showhold | grep -q $name && echo hold || echo unhold

View file

@ -0,0 +1,56 @@
#!/bin/sh
#
# 2016 Ander Punnar (cdist at kvlt.ee)
#
# 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/>.
#
if [ -f "$__object/parameter/name" ]; then
name="$(cat "$__object/parameter/name")"
else
name="$__object_id"
fi
apt_version="$(cat "$__object/explorer/apt_version")"
if [ "$apt_version" != '0' ]; then
echo 'APT version not supported' >&2
exit 1
fi
package_installed="$(cat "$__object/explorer/package_installed")"
if [ "$package_installed" != '0' ]; then
exit 0
fi
state_should="$(cat "$__object/parameter/state")"
state_is="$(cat "$__object/explorer/state")"
if [ "$state_should" = "$state_is" ]; then
exit 0
fi
case "$state_should" in
hold|unhold)
echo "apt-mark $state_should $name > /dev/null"
;;
*)
echo "Unknown state: $state_should" >&2
exit 1
;;
esac

View file

@ -0,0 +1,47 @@
cdist-type__apt_mark(7)
=======================
NAME
----
cdist-type__apt_mark - set package state as 'hold' or 'unhold'
DESCRIPTION
-----------
See apt-mark(8) for details.
REQUIRED PARAMETERS
-------------------
state
Either "hold" or "unhold".
OPTIONAL PARAMETERS
-------------------
name
If supplied, use the name and not the object id as the package name.
EXAMPLES
--------
.. code-block:: sh
# hold package
__apt_mark quagga --state hold
# unhold package
__apt_mark quagga --state unhold
AUTHORS
-------
Ander Punnar <cdist--@--kvlt.ee>
COPYING
-------
Copyright \(C) 2016 Ander Punnar. 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.

View file

@ -0,0 +1 @@
name

View file

@ -0,0 +1 @@
state

View file

@ -30,7 +30,7 @@ username
source source
Select the source from which to clone cdist from. Select the source from which to clone cdist from.
Defaults to "git://github.com/telmich/cdist.git". Defaults to "git://github.com/ungleich/cdist.git".
branch branch
@ -47,7 +47,7 @@ EXAMPLES
__cdist /home/cdist/cdist __cdist /home/cdist/cdist
# Use alternative source # Use alternative source
__cdist --source "git://git.schottelius.org/cdist" /home/cdist/cdist __cdist --source "git://github.com/ungleich/cdist" /home/cdist/cdist
AUTHORS AUTHORS

View file

@ -1 +1 @@
git://github.com/telmich/cdist.git git://github.com/ungleich/cdist.git

View file

@ -2,7 +2,7 @@
# #
# Copyright (C) 2011 Daniel Maher (phrawzty+cdist at gmail.com) # Copyright (C) 2011 Daniel Maher (phrawzty+cdist at gmail.com)
# #
# This file is part of cdist (https://github.com/telmich/cdist/). # This file is part of cdist.
# #
# cdist is free software: you can redistribute it and/or modify # cdist is free software: you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by # it under the terms of the GNU General Public License as published by

View file

@ -0,0 +1,48 @@
#!/bin/sh
#
# 2012 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/>.
#
chroot="/$__object_id"
cat << DONE
# Prepare chroot
[ -d "${chroot}/proc" ] || mkdir "${chroot}/proc"
mountpoint -q "${chroot}/proc" \
|| mount -t proc -o nosuid,noexec,nodev proc "${chroot}/proc"
[ -d "${chroot}/sys" ] || mkdir "${chroot}/sys"
mountpoint -q "${chroot}/sys" \
|| mount -t sysfs -o nosuid,noexec,nodev sys "${chroot}/sys"
[ -d "${chroot}/dev" ] || mkdir "${chroot}/dev"
mountpoint -q "${chroot}/dev" \
|| mount -t devtmpfs -o mode=0755,nosuid udev "${chroot}/dev"
[ -d "${chroot}/dev/pts" ] || mkdir "${chroot}/dev/pts"
mountpoint -q "${chroot}/dev/pts" \
|| mount -t devpts -o mode=0620,gid=5,nosuid,noexec devpts "${chroot}/dev/pts"
[ -d "${chroot}/tmp" ] || mkdir -m 1777 "${chroot}/tmp"
mountpoint -q "${chroot}/tmp" \
|| mount -t tmpfs -o mode=1777,strictatime,nodev,nosuid tmpfs "${chroot}/tmp"
if [ ! -f "${chroot}/etc/resolv.conf" ]; then
cp /etc/resolv.conf "${chroot}/etc/"
fi
DONE

View file

@ -0,0 +1,42 @@
cdist-type__chroot_mount(7)
===================================
NAME
----
cdist-type__chroot_mount - mount a chroot
DESCRIPTION
-----------
Mount and prepare a chroot for running commands within it.
REQUIRED PARAMETERS
-------------------
None
OPTIONAL PARAMETERS
-------------------
None
EXAMPLES
--------
.. code-block:: sh
__chroot_mount /path/to/chroot
AUTHORS
-------
Steven Armstrong <steven-cdist--@--armstrong.cc>
COPYING
-------
Copyright \(C) 2012 Steven Armstrong. 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.

View file

@ -0,0 +1,36 @@
#!/bin/sh
#
# 2012 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/>.
#
chroot="/$__object_id"
cat << DONE
umount -l "${chroot}/tmp"
umount -l "${chroot}/dev/pts"
umount -l "${chroot}/dev"
umount -l "${chroot}/sys"
umount -l "${chroot}/proc"
rm -f "${chroot}/etc/resolv.conf"
if [ -d "${chroot}/etc/resolvconf/resolv.conf.d" ]; then
# ensure /etc/resolvconf/resolv.conf.d/tail is not linked to \
# e.g. /etc/resolvconf/resolv.conf.d/original
rm -f "${chroot}/etc/resolvconf/resolv.conf.d/tail"
touch "${chroot}/etc/resolvconf/resolv.conf.d/tail"
fi
DONE

View file

@ -0,0 +1,47 @@
cdist-type__chroot_umount(7)
============================
NAME
----
cdist-type__chroot_umount - unmount a chroot mounted by __chroot_mount
DESCRIPTION
-----------
Undo what __chroot_mount did.
REQUIRED PARAMETERS
-------------------
None
OPTIONAL PARAMETERS
-------------------
None
EXAMPLES
--------
.. code-block:: sh
__chroot_umount /path/to/chroot
SEE ALSO
--------
:strong:`cdist-type__chroot_mount`\ (7)
AUTHORS
-------
Steven Armstrong <steven-cdist--@--armstrong.cc>
COPYING
-------
Copyright \(C) 2012 Steven Armstrong. 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.

View file

@ -0,0 +1 @@
695240564 24003648 consul

View file

@ -0,0 +1 @@
https://releases.hashicorp.com/consul/0.7.0/consul_0.7.0_linux_amd64.zip

View file

@ -0,0 +1 @@
3128343188 28402769 consul

View file

@ -0,0 +1 @@
https://releases.hashicorp.com/consul/0.7.1/consul_0.7.1_linux_amd64.zip

View file

@ -107,7 +107,7 @@ rejoin-after-leave
server server
used to control if an agent is in server or client mode used to control if an agent is in server or client mode
syslog enable-syslog
enables logging to syslog enables logging to syslog
verify-incoming verify-incoming

View file

@ -98,7 +98,7 @@ for param in $(ls "$__object/parameter/"); do
key="$(echo "${param%-*}" | tr '-' '_')" key="$(echo "${param%-*}" | tr '-' '_')"
printf ' ,"%s": "%s"\n' "$key" "$destination" printf ' ,"%s": "%s"\n' "$key" "$destination"
;; ;;
disable-remote-exec|disable-update-check|leave-on-terminate|rejoin-after-leave|server|syslog|verify-incoming|verify-outgoing) disable-remote-exec|disable-update-check|leave-on-terminate|rejoin-after-leave|server|enable-syslog|verify-incoming|verify-outgoing)
# handle boolean parameters # handle boolean parameters
key="$(echo "$param" | tr '-' '_')" key="$(echo "$param" | tr '-' '_')"
printf ' ,"%s": true\n' "$key" printf ' ,"%s": true\n' "$key"

View file

@ -3,6 +3,6 @@ disable-update-check
leave-on-terminate leave-on-terminate
rejoin-after-leave rejoin-after-leave
server server
syslog enable-syslog
verify-incoming verify-incoming
verify-outgoing verify-outgoing

View file

@ -11,7 +11,7 @@ DESCRIPTION
Generate and deploy check definitions for a consul agent. Generate and deploy check definitions for a consul agent.
See http://www.consul.io/docs/agent/checks.html for parameter documentation. See http://www.consul.io/docs/agent/checks.html for parameter documentation.
Use either script toghether with interval, or use ttl. Use either script together with interval, or use ttl.
REQUIRED PARAMETERS REQUIRED PARAMETERS

View file

@ -22,4 +22,9 @@
name="$__object_name" name="$__object_name"
user="$(cat "$__object/parameter/user")" user="$(cat "$__object/parameter/user")"
crontab -u $user -l 2>/dev/null | grep "# $name\$" || true if [ -f "$__object/parameter/raw_command" ]; then
command="$(cat "$__object/parameter/command")"
crontab -u $user -l 2>/dev/null | grep "^$command\$" || true
else
crontab -u $user -l 2>/dev/null | grep "# $name\$" || true
fi

17
cdist/conf/type/__cron/gencode-remote Executable file → Normal file
View file

@ -3,6 +3,7 @@
# 2011 Steven Armstrong (steven-cdist at armstrong.cc) # 2011 Steven Armstrong (steven-cdist at armstrong.cc)
# 2013 Nico Schottelius (nico-cdist at schottelius.org) # 2013 Nico Schottelius (nico-cdist at schottelius.org)
# 2013 Thomas Oettli (otho at sfs.biz) # 2013 Thomas Oettli (otho at sfs.biz)
# 2017 Daniel Heule (hda at sfs.biz)
# #
# This file is part of cdist. # This file is part of cdist.
# #
@ -26,7 +27,7 @@ command="$(cat "$__object/parameter/command")"
if [ -f "$__object/parameter/raw" ]; then if [ -f "$__object/parameter/raw" ]; then
raw="$(cat "$__object/parameter/raw")" raw="$(cat "$__object/parameter/raw")"
entry="$raw $command" entry="$raw $command # $name"
elif [ -f "$__object/parameter/raw_command" ]; then elif [ -f "$__object/parameter/raw_command" ]; then
entry="$command" entry="$command"
else else
@ -35,10 +36,9 @@ else
day_of_month="$(cat "$__object/parameter/day_of_month" 2>/dev/null || echo "*")" day_of_month="$(cat "$__object/parameter/day_of_month" 2>/dev/null || echo "*")"
month="$(cat "$__object/parameter/month" 2>/dev/null || echo "*")" month="$(cat "$__object/parameter/month" 2>/dev/null || echo "*")"
day_of_week="$(cat "$__object/parameter/day_of_week" 2>/dev/null || echo "*")" day_of_week="$(cat "$__object/parameter/day_of_week" 2>/dev/null || echo "*")"
entry="$minute $hour $day_of_month $month $day_of_week $command" entry="$minute $hour $day_of_month $month $day_of_week $command # $name"
fi fi
entry="$entry # $name"
mkdir "$__object/files" mkdir "$__object/files"
echo "$entry" > "$__object/files/entry" echo "$entry" > "$__object/files/entry"
@ -58,7 +58,7 @@ state_should="$(cat "$__object/parameter/state" 2>/dev/null || echo "present")"
# These are the old markers # These are the old markers
prefix="#cdist:__cron/$__object_id" prefix="#cdist:__cron/$__object_id"
suffix="#/cdist:__cron/$__object_id" suffix="#/cdist:__cron/$__object_id"
filter="^# DO NOT EDIT THIS FILE|^# \(.* installed on |^# \(Cron version V" filter="^# DO NOT EDIT THIS FILE|^# \(.* installed on |^# \(Cron version V|^# \(Cronie version .\..\)$"
cat << DONE cat << DONE
crontab -u $user -l 2>/dev/null | grep -v -E "$filter" | awk -v prefix="$prefix" -v suffix="$suffix" ' crontab -u $user -l 2>/dev/null | grep -v -E "$filter" | awk -v prefix="$prefix" -v suffix="$suffix" '
{ {
@ -85,7 +85,12 @@ case "$state_should" in
echo ") | crontab -u $user -" echo ") | crontab -u $user -"
;; ;;
absent) absent)
echo "( crontab -u $user -l 2>/dev/null | grep -v -E \"$filter\" 2>/dev/null || true ) | \\" if [ -f "$__object/parameter/raw_command" ]; then
echo "grep -v \"# $name\\$\" | crontab -u $user -" echo "( crontab -u $user -l 2>/dev/null | grep -v -E \"$filter\" 2>/dev/null || true ) | \\"
echo "grep -v \"^$entry\\$\" | crontab -u $user -"
else
echo "( crontab -u $user -l 2>/dev/null | grep -v -E \"$filter\" 2>/dev/null || true ) | \\"
echo "grep -v \"# $name\\$\" | crontab -u $user -"
fi
;; ;;
esac esac

View file

@ -0,0 +1,56 @@
cdist-type__docker(7)
=====================
NAME
----
cdist-type__docker - install docker-engine
DESCRIPTION
-----------
Installs latest docker-engine package from dockerproject.org.
REQUIRED PARAMETERS
-------------------
None.
OPTIONAL PARAMETERS
-------------------
None.
BOOLEAN PARAMETERS
------------------
experimental
Install the experimental docker-engine package instead of the latest stable release.
state
'present' or 'absent', defaults to 'present'
EXAMPLES
--------
.. code-block:: sh
# Install docker
__docker
# Install experimental
__docker --experimental
# Remove docker
__docker --state absent
AUTHORS
-------
Steven Armstrong <steven-cdist--@--armstrong.cc>
COPYING
-------
Copyright \(C) 2016 Steven Armstrong. Free use of this software is
granted under the terms of the GNU General Public License version 3 (GPLv3).

View file

@ -0,0 +1,83 @@
#!/bin/sh
#
# 2016 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/>.
#
os=$(cat "$__global/explorer/os")
state=$(cat "$__object/parameter/state")
case "$os" in
centos)
component="main"
if [ -f "$__object/parameter/experimental" ]; then
component="experimental"
fi
__yum_repo docker \
--name 'Docker Repository' \
--baseurl "https://yum.dockerproject.org/repo/$component/centos/\$releasever/" \
--enabled \
--gpgcheck 1 \
--gpgkey 'https://yum.dockerproject.org/gpg' \
--state ${state}
require="__yum_repo/docker" __package docker-engine --state ${state}
;;
ubuntu)
component="main"
if [ -f "$__object/parameter/experimental" ]; then
component="experimental"
fi
__package apparmor --state ${state}
__package ca-certificates --state ${state}
__package apt-transport-https --state ${state}
__apt_key docker --keyid 58118E89F3A912897C070ADBF76221572C52609D --state ${state}
export CDIST_ORDER_DEPENDENCY=on
__apt_source docker \
--uri https://apt.dockerproject.org/repo \
--distribution "ubuntu-$(cat "$__global/explorer/lsb_codename")" \
--state ${state} \
--component "$component"
__package docker-engine --state ${state}
unset CDIST_ORDER_DEPENDENCY
;;
debian)
component="main"
if [ -f "$__object/parameter/experimental" ]; then
component="experimental"
fi
__package apt-transport-https --state ${state}
__package ca-certificates --state ${state}
__package gnupg2 --state ${state}
__apt_key docker --keyid 58118E89F3A912897C070ADBF76221572C52609D --state ${state}
export CDIST_ORDER_DEPENDENCY=on
__apt_source docker \
--uri https://apt.dockerproject.org/repo \
--distribution "debian-$(cat "$__global/explorer/lsb_codename")" \
--state ${state} \
--component "$component"
__package docker-engine --state ${state}
unset CDIST_ORDER_DEPENDENCY
;;
*)
echo "Your operating system ($os) is currently not supported by this type (${__type##*/})." >&2
echo "Please contribute an implementation for it if you can." >&2
exit 1
;;
esac

View file

@ -0,0 +1 @@
experimental

View file

@ -0,0 +1 @@
present

View file

@ -0,0 +1 @@
state

View file

View file

@ -0,0 +1,31 @@
#!/bin/sh
#
# 2016 Dominique Roux (dominique.roux at ungleich.ch)
#
# 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/>.
#
# Variables
version="$(cat "$__object/parameter/version")"
state="$(cat "$__object/parameter/state")"
if [ ${state} = "present" ]; then
# Download docker-compose file
echo 'curl -L "https://github.com/docker/compose/releases/download/'${version}'/docker-compose-$(uname -s)-$(uname -m)" -o /tmp/docker-compose'
echo 'mv /tmp/docker-compose /usr/local/bin/docker-compose'
# Change permissions
echo 'chmod +x /usr/local/bin/docker-compose'
fi

View file

@ -0,0 +1,58 @@
cdist-type__docker_compose(7)
=============================
NAME
----
cdist-type__docker_compose - install docker-compose
DESCRIPTION
-----------
Installs docker-compose package.
State 'absent' will not remove docker binary itself,
only docker-compose binary will be removed
REQUIRED PARAMETERS
-------------------
None.
OPTIONAL PARAMETERS
-------------------
version
Define docker_compose version, defaults to "1.9.0"
state
'present' or 'absent', defaults to 'present'
BOOLEAN PARAMETERS
------------------
None.
EXAMPLES
--------
.. code-block:: sh
# Install docker-compose
__docker_compose
# Install version 1.9.0-rc4
__docker_compose --version 1.9.0-rc4
# Remove docker-compose
__docker_compose --state absent
AUTHORS
-------
Dominique Roux <dominique.roux--@--ungleich.ch>
COPYING
-------
Copyright \(C) 2016 Dominique Roux. Free use of this software is
granted under the terms of the GNU General Public License version 3 or later (GPLv3+).

View file

@ -0,0 +1,33 @@
#!/bin/sh
#
# 2016 Dominique Roux (dominique.roux at ungleich.ch)
#
# 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/>.
#
#
state="$(cat "$__object/parameter/state")"
# Needed packages
if [ ${state} = "present" ]; then
__docker
__package curl
elif [ ${state} = "absent" ]; then
__file /usr/local/bin/docker-compose --state absent
else
echo "Unknown state: ${state}" >&2
exit 1
fi

View file

@ -0,0 +1 @@
present

View file

@ -0,0 +1 @@
1.9.0

View file

@ -0,0 +1,2 @@
state
version

View file

@ -66,8 +66,15 @@ destination_upload="\$($__remote_exec $__target_host "mktemp $tempfile_template"
DONE DONE
if [ "$upload_file" ]; then if [ "$upload_file" ]; then
echo upload >> "$__messages_out" echo upload >> "$__messages_out"
# IPv6 fix
if $(echo "${__target_host}" | grep -q -E '^[0-9a-fA-F:]+$')
then
my_target_host="[${__target_host}]"
else
my_target_host="${__target_host}"
fi
cat << DONE cat << DONE
$__remote_copy "$source" "${__target_host}:\$destination_upload" $__remote_copy "$source" "${my_target_host}:\$destination_upload"
DONE DONE
fi fi
# move uploaded file into place # move uploaded file into place

View file

@ -37,7 +37,7 @@ device
| or /dev/mapper/xxxx | or /dev/mapper/xxxx
label label
Label which sould apply on the filesystem. Label which should be applied on the filesystem.
mkfsoptions mkfsoptions
Additional options which are inserted to the mkfs.xxx call. Additional options which are inserted to the mkfs.xxx call.
@ -46,15 +46,15 @@ mkfsoptions
BOOLEAN PARAMETERS BOOLEAN PARAMETERS
------------------ ------------------
force force
Normaly, this type does nothing if a filesystem is found Normally, this type does nothing if a filesystem is found
on the target device. If you specify force, it's formated on the target device. If you specify force, it's formatted
if the filesystem type or label differs from parameters. if the filesystem type or label differs from parameters.
Warning: This option can easily lead into data loss! Warning: This option can easily lead into data loss!
MESSAGES MESSAGES
-------- --------
filesystem <fstype> on <device> \: <discoverd device> created filesystem <fstype> on <device> \: <discoverd device> created
Filesytem was created on <discoverd device> Filesystem was created on <discoverd device>
EXAMPLES EXAMPLES
@ -62,7 +62,7 @@ EXAMPLES
.. code-block:: sh .. code-block:: sh
# Ensures that device /dev/sdb is formated with xfs # Ensures that device /dev/sdb is formatted with xfs
__filesystem /dev/sdb --fstype xfs --label Testdisk1 __filesystem /dev/sdb --fstype xfs --label Testdisk1
# The same thing with btrfs and disk spezified by pci path to disk 1:0 on vmware # The same thing with btrfs and disk spezified by pci path to disk 1:0 on vmware
__filesystem dev_sdb --fstype btrfs --device /dev/disk/by-path/pci-0000:0b:00.0-scsi-0:0:0:0 --label Testdisk2 __filesystem dev_sdb --fstype btrfs --device /dev/disk/by-path/pci-0000:0b:00.0-scsi-0:0:0:0 --label Testdisk2

View file

@ -0,0 +1,84 @@
#!/bin/sh
#
# 2016 Darko Poljak(darko.poljak at ungleich.ch)
#
# 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/>.
#
#
startstate="$(cat "$__object/parameter/startstate")"
init=$(cat "$__global/explorer/init")
os=$(cat "$__global/explorer/os")
os_version=$(cat "$__global/explorer/os_version")
name="firewalld"
case "${startstate}" in
present)
cmd="start"
;;
absent)
cmd="stop"
;;
*)
echo "Unknown startstate: ${startstate}" >&2
exit 1
;;
esac
if [ "$init" = 'systemd' ]; then
# this handles ALL linux distros with systemd
# e.g. archlinux, gentoo in some cases, new RHEL and SLES versions
echo "systemctl \"$cmd\" \"$name\""
else
case "$os" in
debian)
case "$os_version" in
[1-7]*)
echo "service \"$name\" \"$cmd\""
;;
8*)
echo "systemctl \"$cmd\" \"$name\""
;;
*)
echo "Unsupported version $os_version of $os" >&2
exit 1
;;
esac
;;
gentoo)
echo service \"$name\" \"$cmd\"
;;
amazon|scientific|centos|fedora|owl|redhat|suse)
echo service \"$name\" \"$cmd\"
;;
openwrt)
echo "/etc/init.d/\"$name\" \"$cmd\""
;;
ubuntu)
echo "service \"$name\" \"$cmd\""
;;
*)
echo "Unsupported os: $os" >&2
exit 1
;;
esac
fi

View file

@ -0,0 +1,53 @@
cdist-type__firewalld_start(7)
==============================
NAME
----
cdist-type__firewalld_start - start and enable firewalld
DESCRIPTION
-----------
This cdist type allows you to start and enable firewalld.
REQUIRED PARAMETERS
-------------------
None
OPTIONAL PARAMETERS
-------------------
startstate
'present' or 'absent', start/stop firewalld. Default is 'present'.
bootstate
'present' or 'absent', enable/disable firewalld on boot. Default is 'present'.
EXAMPLES
--------
.. code-block:: sh
# start and enable firewalld
__firewalld_start
# only enable firewalld to start on boot
__firewalld_start --startstate present --bootstate absent
SEE ALSO
--------
:strong:`firewalld`\ (8)
AUTHORS
-------
Darko Poljak <darko.poljak--@--ungleich.ch>
COPYING
-------
Copyright \(C) 2016 Darko Poljak. 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.

View file

@ -0,0 +1,23 @@
#!/bin/sh
#
# 2016 Darko Poljak (darko.poljak at ungleich.ch)
#
# 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/>.
bootstate="$(cat "$__object/parameter/bootstate")"
__package firewalld
require="__package/firewalld" __start_on_boot firewalld --state "${bootstate}"

View file

@ -0,0 +1 @@
present

View file

@ -0,0 +1 @@
present

View file

@ -0,0 +1,2 @@
bootstate
startstate

View file

@ -44,7 +44,7 @@ EXAMPLES
__git /home/services/dokuwiki --source git://github.com/splitbrain/dokuwiki.git __git /home/services/dokuwiki --source git://github.com/splitbrain/dokuwiki.git
# Checkout cdist, stay on branch 2.1 # Checkout cdist, stay on branch 2.1
__git /home/nico/cdist --source git://github.com/telmich/cdist.git --branch 2.1 __git /home/nico/cdist --source git://github.com/ungleich/cdist.git --branch 2.1
AUTHORS AUTHORS

View file

@ -40,7 +40,7 @@ case "$os" in
exit 0 exit 0
fi fi
;; ;;
scientific|centos) scientific|centos|openbsd)
if [ "$name_sysconfig" = "$name_should" -a "$name_running" = "$name_should" ]; then if [ "$name_sysconfig" = "$name_should" -a "$name_running" = "$name_should" ]; then
exit 0 exit 0
fi fi
@ -64,7 +64,7 @@ else
echo "hostname '$name_should'" echo "hostname '$name_should'"
echo "printf '%s\n' '$name_should' > /etc/hostname" echo "printf '%s\n' '$name_should' > /etc/hostname"
;; ;;
centos) centos|openbsd)
echo "hostname '$name_should'" echo "hostname '$name_should'"
;; ;;
suse) suse)

View file

@ -23,7 +23,14 @@ os=$(cat "$__global/explorer/os")
if [ -f "$__object/parameter/name" ]; then if [ -f "$__object/parameter/name" ]; then
name_should="$(cat "$__object/parameter/name")" name_should="$(cat "$__object/parameter/name")"
else else
name_should="$(echo "${__target_host%%.*}")" case "$os" in
openbsd)
name_should="$(echo "${__target_host}")"
;;
*)
name_should="$(echo "${__target_host%%.*}")"
;;
esac
fi fi
@ -45,6 +52,9 @@ case "$os" in
--key HOSTNAME \ --key HOSTNAME \
--value "$name_should" --exact_delimiter --value "$name_should" --exact_delimiter
;; ;;
openbsd)
echo "$name_should" | __file /etc/myname --source -
;;
*) *)
not_supported not_supported
;; ;;

View file

@ -0,0 +1,73 @@
#!/bin/sh
#
# 2011 Steven Armstrong (steven-cdist at armstrong.cc)
#
# This file is part of cdist.
#
# cdist is free software: you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation, either version 3 of the License, or
# (at your option) any later version.
#
# cdist is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with cdist. If not, see <http://www.gnu.org/licenses/>.
#
device="$(cat "$__object/parameter/device")"
chroot="$(cat "$__object/parameter/chroot")"
cat << DONE
os=\$(
if grep -q ^DISTRIB_ID=Ubuntu ${chroot}/etc/lsb-release 2>/dev/null; then
echo ubuntu
exit 0
fi
if [ -f ${chroot}/etc/arch-release ]; then
echo archlinux
exit 0
fi
if [ -f ${chroot}/etc/debian_version ]; then
echo debian
exit 0
fi
)
# Ensure /tmp exists
[ -d "${chroot}/tmp" ] || mkdir -m 1777 "${chroot}/tmp"
# Generate script to run in chroot
script=\$(mktemp "${chroot}/tmp/__install_bootloader_grub.XXXXXXXXXX")
# Link file descriptor #6 with stdout
exec 6>&1
# Link stdout with \$script
exec > \$script
echo "#!/bin/sh -l"
echo "grub-install $device"
case \$os in
archlinux)
# bugfix/workarround: rebuild initramfs
# FIXME: doesn't belong here
echo "mkinitcpio -p linux"
echo "grub-mkconfig -o /boot/grub/grub.cfg"
;;
ubuntu|debian) echo "update-grub" ;;
esac
# Restore stdout and close file descriptor #6.
exec 1>&6 6>&-
# Make script executable
chmod +x "\$script"
# Run script in chroot
relative_script="\${script#$chroot}"
chroot "$chroot" "\$relative_script"
DONE

View file

@ -0,0 +1,48 @@
cdist-type__install_bootloader_grub(7)
======================================
NAME
----
cdist-type__install_bootloader_grub - install grub2 bootloader on given disk
DESCRIPTION
-----------
This cdist type allows you to install grub2 bootloader on given disk.
REQUIRED PARAMETERS
-------------------
None
OPTIONAL PARAMETERS
-------------------
device
The device to install grub to. Defaults to object_id
chroot
where to chroot before running grub-install. Defaults to /target.
EXAMPLES
--------
.. code-block:: sh
__install_bootloader_grub /dev/sda
__install_bootloader_grub /dev/sda --chroot /mnt/foobar
AUTHORS
-------
Steven Armstrong <steven-cdist--@--armstrong.cc>
COPYING
-------
Copyright \(C) 2011 Steven Armstrong. 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.

View file

@ -0,0 +1,25 @@
#!/bin/sh
#
# 2011 Steven Armstrong (steven-cdist at armstrong.cc)
#
# This file is part of cdist.
#
# cdist is free software: you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation, either version 3 of the License, or
# (at your option) any later version.
#
# cdist is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with cdist. If not, see <http://www.gnu.org/licenses/>.
#
# set defaults
device="$(cat "$__object/parameter/device" 2>/dev/null \
|| echo "/$__object_id" | tee "$__object/parameter/device")"
chroot="$(cat "$__object/parameter/chroot" 2>/dev/null \
|| echo "/target" | tee "$__object/parameter/chroot")"

View file

@ -0,0 +1,2 @@
device
chroot

View file

@ -0,0 +1 @@
../__chroot_mount/gencode-remote

View file

@ -0,0 +1,42 @@
cdist-type__install_chroot_mount(7)
===================================
NAME
----
cdist-type__install_chroot_mount - mount a chroot with install command
DESCRIPTION
-----------
Mount and prepare a chroot for running commands within it.
REQUIRED PARAMETERS
-------------------
None
OPTIONAL PARAMETERS
-------------------
None
EXAMPLES
--------
.. code-block:: sh
__install_chroot_mount /path/to/chroot
AUTHORS
-------
Steven Armstrong <steven-cdist--@--armstrong.cc>
COPYING
-------
Copyright \(C) 2012 Steven Armstrong. 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.

View file

@ -0,0 +1 @@
../__chroot_umount/gencode-remote

View file

@ -0,0 +1,47 @@
cdist-type__install_chroot_umount(7)
====================================
NAME
----
cdist-type__install_chroot_umount - unmount a chroot mounted by __install_chroot_mount
DESCRIPTION
-----------
Undo what __install_chroot_mount did.
REQUIRED PARAMETERS
-------------------
None
OPTIONAL PARAMETERS
-------------------
None
EXAMPLES
--------
.. code-block:: sh
__install_chroot_umount /path/to/chroot
SEE ALSO
--------
:strong:`cdist-type__install_chroot_mount`\ (7)
AUTHORS
-------
Steven Armstrong <steven-cdist--@--armstrong.cc>
COPYING
-------
Copyright \(C) 2012 Steven Armstrong. 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.

View file

@ -0,0 +1,48 @@
#!/bin/sh
#
# 2011 Steven Armstrong (steven-cdist at armstrong.cc)
#
# This file is part of cdist.
#
# cdist is free software: you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation, either version 3 of the License, or
# (at your option) any later version.
#
# cdist is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with cdist. If not, see <http://www.gnu.org/licenses/>.
#
#
# __remote_copy script to run cdist against a chroot on a remote host via ssh.
#
# Usage:
# __remote_copy="/path/to/this/script /path/to/your/chroot" cdist config target-id
#
log() {
echo "$@" | logger -t "__install_config copy"
:
}
chroot="$1"; shift
target_host="$__target_host"
scp="scp -o User=root -q"
# postfix target_host with chroot location
code="$(echo "$@" | sed "s|$target_host:|$target_host:$chroot|g")"
log "target_host: $target_host"
log "chroot: $chroot"
log "@: $@"
log "code: $code"
# copy files into chroot
$scp $code
log "-----"

View file

@ -0,0 +1,48 @@
#!/bin/sh
#
# 2011-2013 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/>.
#
#
# __remote_exec script to run cdist against a chroot on a remote host via ssh.
#
# Usage:
# __remote_exec="/path/to/this/script /path/to/your/chroot" cdist config target-id
#
log() {
echo "$@" | logger -t "__install_config exec"
:
}
chroot="$1"; shift
target_host="$__target_host"
# In exec mode the first argument is the __target_host which we already got from env. Get rid of it.
shift
ssh="ssh -o User=root -q $target_host"
code="$ssh chroot $chroot sh -c '$@'"
log "target_host: $target_host"
log "chroot: $chroot"
log "@: $@"
log "code: $code"
# Run the code
$code
log "-----"

View file

@ -0,0 +1,50 @@
#!/bin/sh
#
# 2011 Steven Armstrong (steven-cdist at armstrong.cc)
#
# This file is part of cdist.
#
# cdist is free software: you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation, either version 3 of the License, or
# (at your option) any later version.
#
# cdist is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with cdist. If not, see <http://www.gnu.org/licenses/>.
#
chroot="$(cat "$__object/parameter/chroot")"
remote_exec="$__type/files/remote/exec"
remote_copy="$__type/files/remote/copy"
cdist_args="-v"
[ "$__debug" = "yes" ] && cdist_args="$cdist_args -d"
cat << DONE
#echo "__apt_noautostart --state present" \
# | cdist $cdist_args \
# config \
# --initial-manifest - \
# --remote-exec="$remote_exec $chroot" \
# --remote-copy="$remote_copy $chroot" \
# $__target_host
cdist $cdist_args \
config \
--remote-exec="$remote_exec $chroot" \
--remote-copy="$remote_copy $chroot" \
$__target_host
#echo "__apt_noautostart --state absent" \
# | cdist $cdist_args \
# config \
# --initial-manifest - \
# --remote-exec="$remote_exec $chroot" \
# --remote-copy="$remote_copy $chroot" \
# $__target_host
DONE

View file

View file

@ -0,0 +1,47 @@
cdist-type__install_config(7)
=============================
NAME
----
cdist-type__install_config - run cdist config as part of the installation
DESCRIPTION
-----------
This cdist type allows you to run cdist config as part of the installation.
It does this by using a custom __remote_{copy,exec} prefix which runs
cdist config against the /target chroot on the remote host.
REQUIRED PARAMETERS
-------------------
None
OPTIONAL PARAMETERS
-------------------
chroot
where to chroot before running grub-install. Defaults to /target.
EXAMPLES
--------
.. code-block:: sh
__install_config
__install_config --chroot /mnt/somewhere
AUTHORS
-------
Steven Armstrong <steven-cdist--@--armstrong.cc>
COPYING
-------
Copyright \(C) 2011 Steven Armstrong. 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.

View file

@ -0,0 +1,23 @@
#!/bin/sh
#
# 2011 Steven Armstrong (steven-cdist at armstrong.cc)
#
# This file is part of cdist.
#
# cdist is free software: you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation, either version 3 of the License, or
# (at your option) any later version.
#
# cdist is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with cdist. If not, see <http://www.gnu.org/licenses/>.
#
# set defaults
chroot="$(cat "$__object/parameter/chroot" 2>/dev/null \
|| echo "/target" | tee "$__object/parameter/chroot")"

View file

@ -0,0 +1 @@
chroot

View file

@ -0,0 +1 @@
../__file/explorer

View file

@ -0,0 +1 @@
../__file/gencode-local

View file

@ -0,0 +1 @@
../__file/gencode-remote

View file

View file

@ -0,0 +1,112 @@
cdist-type__install_file(7)
===========================
NAME
----
cdist-type__install_file - Manage files with install command.
DESCRIPTION
-----------
This cdist type allows you to create files, remove files and set file
attributes on the target.
If the file already exists on the target, then if it is a:
regular file, and state is:
present
replace it with the source file if they are not equal
exists
do nothing
symlink
replace it with the source file
directory
replace it with the source file
In any case, make sure that the file attributes are as specified.
REQUIRED PARAMETERS
-------------------
None.
OPTIONAL PARAMETERS
-------------------
state
'present', 'absent' or 'exists', defaults to 'present' where:
present
the file is exactly the one from source
absent
the file does not exist
exists
the file from source but only if it doesn't already exist
group
Group to chgrp to.
mode
Unix permissions, suitable for chmod.
owner
User to chown to.
source
If supplied, copy this file from the host running cdist to the target.
If not supplied, an empty file or directory will be created.
If source is '-' (dash), take what was written to stdin as the file content.
MESSAGES
--------
chgrp <group>
Changed group membership
chown <owner>
Changed owner
chmod <mode>
Changed mode
create
Empty file was created (no --source specified)
remove
File exists, but state is absent, file will be removed by generated code.
upload
File was uploaded
EXAMPLES
--------
.. code-block:: sh
# Create /etc/cdist-configured as an empty file
__install_file /etc/cdist-configured
# The same thing
__install_file /etc/cdist-configured --state present
# Use __file from another type
__install_file /etc/issue --source "$__type/files/archlinux" --state present
# Delete existing file
__install_file /etc/cdist-configured --state absent
# Supply some more settings
__install_file /etc/shadow --source "$__type/files/shadow" \
--owner root --group shadow --mode 0640 \
--state present
# Provide a default file, but let the user change it
__install_file /home/frodo/.bashrc --source "/etc/skel/.bashrc" \
--state exists \
--owner frodo --mode 0600
# Take file content from stdin
__install_file /tmp/whatever --owner root --group root --mode 644 --source - << DONE
Here goes the content for /tmp/whatever
DONE
AUTHORS
-------
Nico Schottelius <nico-cdist--@--schottelius.org>
COPYING
-------
Copyright \(C) 2011-2013 Nico Schottelius. 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.

View file

@ -0,0 +1 @@
../__file/parameter

View file

View file

@ -0,0 +1,53 @@
cdist-type__install_fstab(7)
============================
NAME
----
cdist-type__install_fstab - generate /etc/fstab during installation
DESCRIPTION
-----------
Uses __install_generate_fstab to generate a /etc/fstab file and uploads it
to the target machine at ${prefix}/etc/fstab.
REQUIRED PARAMETERS
-------------------
None
OPTIONAL PARAMETERS
-------------------
prefix
The prefix under which to generate the /etc/fstab file.
Defaults to /target.
EXAMPLES
--------
.. code-block:: sh
__install_fstab
__install_fstab --prefix /mnt/target
SEE ALSO
--------
:strong:`cdist-type__install_generate_fstab`\ (7),
:strong:`cdist-type__install_mount`\ (7)
AUTHORS
-------
Steven Armstrong <steven-cdist--@--armstrong.cc>
COPYING
-------
Copyright \(C) 2011 Steven Armstrong. 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.

View file

@ -0,0 +1,29 @@
#!/bin/sh
#
# 2011 Steven Armstrong (steven-cdist at armstrong.cc)
#
# This file is part of cdist.
#
# cdist is free software: you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation, either version 3 of the License, or
# (at your option) any later version.
#
# cdist is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with cdist. If not, see <http://www.gnu.org/licenses/>.
#
prefix="$(cat "$__object/parameter/prefix" 2>/dev/null || echo "/target")"
[ -d "$__object/files" ] || mkdir "$__object/files"
__install_generate_fstab --uuid --destination "$__object/files/fstab"
require="__install_generate_fstab" \
__install_file "${prefix}/etc/fstab" --source "$__object/files/fstab" \
--mode 644 \
--owner root \
--group root

View file

@ -0,0 +1 @@
file

View file

@ -0,0 +1 @@
# Generated by cdist __install_generate_fstab

View file

@ -0,0 +1,59 @@
#!/bin/sh
#
# 2011 Steven Armstrong (steven-cdist at armstrong.cc)
#
# This file is part of cdist.
#
# cdist is free software: you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation, either version 3 of the License, or
# (at your option) any later version.
#
# cdist is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with cdist. If not, see <http://www.gnu.org/licenses/>.
#
destination="$(cat "$__object/parameter/destination")"
cat "$__type/files/fstab.header" > "$destination"
mkdir "$__object/files"
# get current UUID's from target_host
$__remote_exec $__target_host blkid > "$__object/files/blkid"
for object in $(find "$__global/object/__install_mount" -path "*.cdist"); do
device="$(cat "$object/parameter/device")"
dir="$(cat "$object/parameter/dir")"
prefix="$(cat "$object/parameter/prefix")"
type="$(cat "$object/parameter/type")"
if [ -f "$object/parameter/options" ]; then
options="$(cat "$object/parameter/options")"
else
options="defaults"
fi
dump=0
case "$type" in
swap)
pass=0
dir="$type"
;;
tmpfs)
pass=0
;;
*)
pass=1
;;
esac
if [ -f "$__object/parameter/uuid" ]; then
uuid="$(grep -w $device "$__object/files/blkid" | awk '{print $2}')"
if [ -n "$uuid" ]; then
echo "# $dir was on $device during installation" >> "$destination"
device="$uuid"
fi
fi
echo "$device $dir $type $options $dump $pass" >> "$destination"
done

View file

@ -0,0 +1,53 @@
cdist-type__install_generate_fstab(7)
=====================================
NAME
----
cdist-type__install_generate_fstab - generate /etc/fstab during installation
DESCRIPTION
-----------
Generates a /etc/fstab file from information retrieved from
__install_mount definitions.
REQUIRED PARAMETERS
-------------------
destination
The path where to store the generated fstab file.
Note that this is a path on the server, where cdist is running, not the target host.
OPTIONAL PARAMETERS
-------------------
None
BOOLEAN PARAMETERS
-------------------
uuid
use UUID instead of device in fstab
EXAMPLES
--------
.. code-block:: sh
__install_generate_fstab --destination /path/where/you/want/fstab
__install_generate_fstab --uuid --destination /path/where/you/want/fstab
AUTHORS
-------
Steven Armstrong <steven-cdist--@--armstrong.cc>
COPYING
-------
Copyright \(C) 2012 Steven Armstrong. 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.

View file

@ -0,0 +1 @@
uuid

View file

@ -0,0 +1 @@
destination

View file

@ -0,0 +1,53 @@
#!/bin/sh
#
# 2011-2013 Steven Armstrong (steven-cdist at armstrong.cc)
#
# This file is part of cdist.
#
# cdist is free software: you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation, either version 3 of the License, or
# (at your option) any later version.
#
# cdist is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with cdist. If not, see <http://www.gnu.org/licenses/>.
#
device="$(cat "$__object/parameter/device")"
type="$(cat "$__object/parameter/type")"
case "$type" in
swap)
echo "mkswap $device"
;;
xfs)
command="mkfs.xfs -f -q"
if [ -f "$__object/parameter/options" ]; then
options="$(cat "$__object/parameter/options")"
command="$command $options"
fi
command="$command $device"
if [ -f "$__object/parameter/blocks" ]; then
blocks="$(cat "$__object/parameter/blocks")"
command="$command $blocks"
fi
echo "$command"
;;
*)
command="mkfs -t $type -q"
if [ -f "$__object/parameter/options" ]; then
options="$(cat "$__object/parameter/options")"
command="$command $options"
fi
command="$command $device"
if [ -f "$__object/parameter/blocks" ]; then
blocks="$(cat "$__object/parameter/blocks")"
command="$command $blocks"
fi
echo "$command"
esac

View file

View file

@ -0,0 +1,62 @@
cdist-type__install_mkfs(7)
===========================
NAME
----
cdist-type__install_mkfs - build a linux file system
DESCRIPTION
-----------
This cdist type is a wrapper for the mkfs command.
REQUIRED PARAMETERS
-------------------
type
The filesystem type to use. Same as used with mkfs -t.
OPTIONAL PARAMETERS
-------------------
device
defaults to object_id
options
file system-specific options to be passed to the mkfs command
blocks
the number of blocks to be used for the file system
EXAMPLES
--------
.. code-block:: sh
# reiserfs /dev/sda5
__install_mkfs /dev/sda5 --type reiserfs
# same thing with explicit device
__install_mkfs whatever --device /dev/sda5 --type reiserfs
# jfs with journal on /dev/sda2
__install_mkfs /dev/sda1 --type jfs --options "-j /dev/sda2"
SEE ALSO
--------
:strong:`mkfs`\ (8)
AUTHORS
-------
Steven Armstrong <steven-cdist--@--armstrong.cc>
COPYING
-------
Copyright \(C) 2011 Steven Armstrong. 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.

View file

@ -0,0 +1,31 @@
#!/bin/sh
#
# 2011 Steven Armstrong (steven-cdist at armstrong.cc)
#
# This file is part of cdist.
#
# cdist is free software: you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation, either version 3 of the License, or
# (at your option) any later version.
#
# cdist is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with cdist. If not, see <http://www.gnu.org/licenses/>.
#
# set defaults
if [ -f "$__object/parameter/device" ]; then
device="(cat "$__object/parameter/device")"
else
device="/$__object_id"
echo "$device" > "$__object/parameter/device"
fi
type="(cat "$__object/parameter/type")"
options="(cat "$__object/parameter/options")"

View file

@ -0,0 +1,3 @@
device
options
blocks

View file

@ -0,0 +1 @@
type

View file

@ -0,0 +1,59 @@
#!/bin/sh
#
# 2011-2013 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/>.
#
get_type_from_mkfs() {
_device="$1"
for mkfs_object in $(find "$__global/object/__install_mkfs" -path "*.cdist"); do
mkfs_device="$(cat "$mkfs_object/parameter/device")"
if [ "$_device" = "$mkfs_device" ]; then
cat "$mkfs_object/parameter/type"
break
fi
done
unset _device
unset mkfs_device
unset mkfs_object
}
device="$(cat "$__object/parameter/device")"
dir="$(cat "$__object/parameter/dir")"
prefix="$(cat "$__object/parameter/prefix")"
if [ -f "$__object/parameter/type" ]; then
type="$(cat "$__object/parameter/type")"
else
type="$(get_type_from_mkfs "$device")"
# store for later use by others
echo "$type" > "$__object/parameter/type"
fi
[ -n "$type" ] || die "Can't determine type for $__object"
if [ "$type" = "swap" ]; then
echo "swapon \"$device\""
else
if [ -f "$__object/parameter/options" ]; then
options="$(cat "$__object/parameter/options")"
else
options=""
fi
[ -n "$options" ] && options="-o $options"
mount_point="${prefix}${dir}"
echo "[ -d \"$mount_point\" ] || mkdir -p \"$mount_point\""
echo "mount -t \"$type\" $options \"$device\" \"$mount_point\""
fi

View file

View file

@ -0,0 +1,65 @@
cdist-type__install_mount(7)
============================
NAME
----
cdist-type__install_mount - mount filesystems in the installer
DESCRIPTION
-----------
Mounts filesystems in the installer. Collects data to generate /etc/fstab.
REQUIRED PARAMETERS
-------------------
device
the device to mount
OPTIONAL PARAMETERS
-------------------
dir
where to mount device. Defaults to object_id.
options
mount options passed to mount(8) and used in /etc/fstab
type
filesystem type passed to mount(8) and used in /etc/fstab.
If type is swap, 'dir' is ignored.
Defaults to the filesystem used in __install_mkfs for the same 'device'.
prefix
the prefix to prepend to 'dir' when mounting in the installer.
Defaults to /target.
EXAMPLES
--------
.. code-block:: sh
__install_mount slash --dir / --device /dev/sda5 --options noatime
require="__install_mount/slash" __install_mount /boot --device /dev/sda1
__install_mount swap --device /dev/sda2 --type swap
require="__install_mount/slash" __install_mount /tmp --device tmpfs --type tmpfs
SEE ALSO
--------
:strong:`cdist-type__install_mkfs`\ (7),
:strong:`cdist-type__install_mount_apply` (7)
AUTHORS
-------
Steven Armstrong <steven-cdist--@--armstrong.cc>
COPYING
-------
Copyright \(C) 2011 Steven Armstrong. 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.

Some files were not shown because too many files have changed in this diff Show more