Merge branch 'master' into 2.1_doc_restructure
This commit is contained in:
commit
eb6478ce58
113 changed files with 1074 additions and 1136 deletions
|
@ -26,4 +26,8 @@ dir=${0%/*}
|
|||
# Ensure version is present - the bundled/shipped version contains a static version,
|
||||
# the git version contains a dynamic version
|
||||
"$dir/../build" version
|
||||
PYTHONPATH="${dir}/../" "$dir/../scripts/cdist" "$@"
|
||||
|
||||
libdir=$(cd "${dir}/../" && pwd -P)
|
||||
export PYTHONPATH="${libdir}"
|
||||
|
||||
"$dir/../scripts/cdist" "$@"
|
||||
|
|
88
build
88
build
|
@ -35,6 +35,7 @@ A2XH="a2x -f xhtml --no-xmllint -a encoding=UTF-8"
|
|||
|
||||
# Developer webbase
|
||||
WEBDIR=$HOME/niconetz
|
||||
WEBBLOG=$WEBDIR/blog
|
||||
WEBBASE=$WEBDIR/software/cdist
|
||||
WEBMAN=$WEBBASE/man/$version
|
||||
WEBPAGE=${WEBBASE}.mdwn
|
||||
|
@ -108,7 +109,14 @@ case "$1" in
|
|||
|
||||
$0 pub
|
||||
|
||||
$0 dist-post
|
||||
$0 dist-blog
|
||||
$0 dist-freecode
|
||||
$0 dist-ml
|
||||
$0 dist-manual
|
||||
;;
|
||||
|
||||
changelog-changes)
|
||||
awk -F: 'BEGIN { start=0 } { if ($0 ~ /^[[:digit:]]/) { if(start == 0) {start = 1 } else { exit } } else { if(start==1) {print $0 }} }' "$basedir/docs/changelog"
|
||||
;;
|
||||
|
||||
changelog-version)
|
||||
|
@ -142,15 +150,78 @@ case "$1" in
|
|||
|
||||
;;
|
||||
|
||||
dist-post)
|
||||
blog)
|
||||
version=$($0 changelog-version)
|
||||
blogfile=$WEBBLOG/cdist-${version}-released.mdwn
|
||||
cat << eof > "$blogfile"
|
||||
[[!meta title="Cdist $version released"]]
|
||||
|
||||
Here's a short overview about the changes found in this release:
|
||||
|
||||
eof
|
||||
|
||||
$0 changelog-changes >> "$blogfile"
|
||||
|
||||
cat << eof >> "$blogfile"
|
||||
For more information visit the [[cdist homepage|software/cdist]].
|
||||
|
||||
[[!tag cdist config unix]]
|
||||
eof
|
||||
;;
|
||||
|
||||
dist-blog)
|
||||
$0 blog
|
||||
version=$($0 changelog-version)
|
||||
file=cdist-${version}-released.mdwn
|
||||
cd "$WEBBLOG"
|
||||
git add "$file"
|
||||
git commit -m "New cdist version (blogentry): $version" "$file"
|
||||
git push
|
||||
;;
|
||||
|
||||
dist-ml)
|
||||
$0 blog
|
||||
version=$($0 changelog-version)
|
||||
to_a=cdist
|
||||
to_d=l.schottelius.org
|
||||
to=${to_a}@${to_d}
|
||||
|
||||
from_a=nico-cdist
|
||||
from_d=schottelius.org
|
||||
from=${from_a}@${from_d}
|
||||
|
||||
(
|
||||
cat << eof
|
||||
From: Nico -telmich- Schottelius <$from>
|
||||
To: cdist mailing list <$to>
|
||||
Subject: cdist $version released
|
||||
|
||||
Hello .*,
|
||||
|
||||
cdist $version has been released with the following changes:
|
||||
|
||||
eof
|
||||
|
||||
"$0" changelog-changes
|
||||
cat << eof
|
||||
|
||||
Cheers,
|
||||
|
||||
Nico
|
||||
|
||||
--
|
||||
Automatisation at its best level. With cdist.
|
||||
eof
|
||||
) | /usr/sbin/sendmail -f "$from" "$to"
|
||||
;;
|
||||
|
||||
|
||||
dist-manual)
|
||||
cat << notes
|
||||
|
||||
To be done manually...
|
||||
|
||||
- freecode release
|
||||
- blog entry
|
||||
- linkedin entry
|
||||
- mailinglist update
|
||||
notes
|
||||
|
||||
;;
|
||||
|
@ -214,13 +285,13 @@ eof
|
|||
printf "Press enter to submit to freecode> "
|
||||
read dummy
|
||||
|
||||
cat << eof | cfreecode-api release cdist
|
||||
cat << eof | cfreecode-api release-add cdist
|
||||
{
|
||||
"auth_code": "$api_token",
|
||||
"release": {
|
||||
"tag_list": "REPLACEME",
|
||||
"tag_list": "$taglist",
|
||||
"version": "$version",
|
||||
"changelog": "REPLACEMETOO",
|
||||
"changelog": "$changelog",
|
||||
"hidden_from_frontpage": false
|
||||
}
|
||||
}
|
||||
|
@ -302,6 +373,7 @@ eof
|
|||
|
||||
test)
|
||||
shift # skip t
|
||||
export PYTHONPATH="$(pwd -P)"
|
||||
|
||||
if [ $# -lt 1 ]; then
|
||||
python3 -m cdist.test
|
||||
|
|
|
@ -20,7 +20,7 @@
|
|||
|
||||
name="$__object_id"
|
||||
|
||||
__package python-software-properties --state installed
|
||||
__package python-software-properties --state present
|
||||
|
||||
require="__package/python-software-properties" \
|
||||
__file /usr/local/bin/remove-apt-repository \
|
||||
|
|
|
@ -20,7 +20,7 @@
|
|||
|
||||
# run 'apt-get update' if anything in /etc/apt is newer then /var/lib/apt/lists
|
||||
cat << DONE
|
||||
if find /etc/apt -cnewer /var/lib/apt/lists | grep . > /dev/null; then
|
||||
if find /etc/apt -mindepth 1 -cnewer /var/lib/apt/lists | grep . > /dev/null; then
|
||||
apt-get update || apt-get update
|
||||
fi
|
||||
DONE
|
||||
|
|
|
@ -1,42 +0,0 @@
|
|||
#!/bin/sh
|
||||
#
|
||||
# 2011 Steven Armstrong (steven-cdist at armstrong.cc)
|
||||
#
|
||||
# This file is part of cdist.
|
||||
#
|
||||
# cdist is free software: you can redistribute it and/or modify
|
||||
# it under the terms of the GNU General Public License as published by
|
||||
# the Free Software Foundation, either version 3 of the License, or
|
||||
# (at your option) any later version.
|
||||
#
|
||||
# cdist is distributed in the hope that it will be useful,
|
||||
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
# GNU General Public License for more details.
|
||||
#
|
||||
# You should have received a copy of the GNU General Public License
|
||||
# along with cdist. If not, see <http://www.gnu.org/licenses/>.
|
||||
#
|
||||
|
||||
name="/$__object_id"
|
||||
map="$(cat "$__object/parameter/map")"
|
||||
|
||||
if [ -f "$__object/parameter/type" ]; then
|
||||
type="$(cat "$__object/parameter/type")"
|
||||
else
|
||||
type="file"
|
||||
echo "$type" > "$__object/parameter/type"
|
||||
fi
|
||||
|
||||
# Generate entry for use in auto.master
|
||||
entry="${name} ${type}:${map}"
|
||||
if [ -f "$__object/parameter/options" ]; then
|
||||
entry="$entry $(cat "$__object/parameter/options")"
|
||||
fi
|
||||
if [ -f "$__object/parameter/comment" ]; then
|
||||
echo "# $(cat "$__object/parameter/comment")" > "$__object/parameter/entry"
|
||||
fi
|
||||
echo "$entry" >> "$__object/parameter/entry"
|
||||
|
||||
require="$__object_name" __autofs_master
|
||||
|
|
@ -1,3 +0,0 @@
|
|||
# Generated from cdist __autofs_master
|
||||
# Do not change this file. Changes will be overwritten.
|
||||
|
|
@ -1 +0,0 @@
|
|||
header
|
|
@ -1,6 +1,6 @@
|
|||
#!/bin/sh
|
||||
#
|
||||
# 2011 Nico Schottelius (nico-cdist at schottelius.org)
|
||||
# 2011-2012 Nico Schottelius (nico-cdist at schottelius.org)
|
||||
#
|
||||
# This file is part of cdist.
|
||||
#
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
#!/bin/sh
|
||||
#
|
||||
# 2011 Nico Schottelius (nico-cdist at schottelius.org)
|
||||
# 2011-2012 Nico Schottelius (nico-cdist at schottelius.org)
|
||||
#
|
||||
# This file is part of cdist.
|
||||
#
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
#!/bin/sh
|
||||
#
|
||||
# 2011 Nico Schottelius (nico-cdist at schottelius.org)
|
||||
# 2011-2012 Nico Schottelius (nico-cdist at schottelius.org)
|
||||
#
|
||||
# This file is part of cdist.
|
||||
#
|
||||
|
@ -22,12 +22,13 @@
|
|||
#
|
||||
|
||||
destination="/$__object_id"
|
||||
state_should="$(cat "$__object/parameter/state")"
|
||||
state_should=present
|
||||
[ -f "$__object/parameter/state" ] && state_should="$(cat "$__object/parameter/state")"
|
||||
exists="$(cat "$__object/explorer/exists")"
|
||||
|
||||
[ "$state_should" = "exists" -a "$exists" = "yes" ] && exit 0 # nothing to do
|
||||
|
||||
if [ "$state_should" = "present" ]; then
|
||||
if [ "$state_should" = "present" -o "$state_should" = "exists" ]; then
|
||||
if [ -f "$__object/parameter/source" ]; then
|
||||
source="$(cat "$__object/parameter/source")"
|
||||
if [ "$source" = "-" ]; then
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
#!/bin/sh
|
||||
#
|
||||
# 2011 Nico Schottelius (nico-cdist at schottelius.org)
|
||||
# 2011-2012 Nico Schottelius (nico-cdist at schottelius.org)
|
||||
#
|
||||
# This file is part of cdist.
|
||||
#
|
||||
|
@ -22,11 +22,12 @@
|
|||
#
|
||||
|
||||
destination="/$__object_id"
|
||||
state_should="$(cat "$__object/parameter/state")"
|
||||
state_should=present
|
||||
[ -f "$__object/parameter/state" ] && state_should="$(cat "$__object/parameter/state")"
|
||||
exists="$(cat "$__object/explorer/exists")"
|
||||
|
||||
case "$state_should" in
|
||||
present)
|
||||
present|exists)
|
||||
# No source? Create empty file
|
||||
if [ ! -f "$__object/parameter/source" ]; then
|
||||
if [ "$exists" = "no" ]; then
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
#!/bin/sh
|
||||
#
|
||||
# 2011 Nico Schottelius (nico-cdist at schottelius.org)
|
||||
# 2011-2012 Nico Schottelius (nico-cdist at schottelius.org)
|
||||
#
|
||||
# This file is part of cdist.
|
||||
#
|
||||
|
@ -25,7 +25,6 @@ os="$(cat "$__global/explorer/os")"
|
|||
|
||||
if [ -f "$__object/parameter/source" ]; then
|
||||
source="$(cat "$__object/parameter/source")"
|
||||
echo using $source
|
||||
else
|
||||
case "$os" in
|
||||
archlinux|redhat)
|
||||
|
|
|
@ -1,6 +1,7 @@
|
|||
#!/bin/sh
|
||||
#
|
||||
# 2011 Steven Armstrong (steven-cdist at armstrong.cc)
|
||||
# 2012 Nico Schottelius (nico-cdist at schottelius.org)
|
||||
#
|
||||
# This file is part of cdist.
|
||||
#
|
||||
|
@ -18,18 +19,18 @@
|
|||
# along with cdist. If not, see <http://www.gnu.org/licenses/>.
|
||||
#
|
||||
|
||||
key="$(cat "$__object/parameter/key")"
|
||||
key="$__object_id"
|
||||
[ -f "$__object/parameter/key" ] && key="$(cat "$__object/parameter/key")"
|
||||
state_should=present
|
||||
[ -f "$__object/parameter/state" ] && state_should="$(cat "$__object/parameter/state")"
|
||||
|
||||
file="$(cat "$__object/parameter/file")"
|
||||
delimiter="$(cat "$__object/parameter/delimiter")"
|
||||
value="$(cat "$__object/parameter/value")"
|
||||
|
||||
state_is="$(cat "$__object/explorer/state")"
|
||||
state_should="$(cat "$__object/parameter/state")"
|
||||
|
||||
if [ "$state_is" = "$state_should" ]; then
|
||||
# nothing to do
|
||||
exit 0
|
||||
fi
|
||||
[ "$state_is" = "$state_should" ] && exit 0
|
||||
|
||||
case "$state_should" in
|
||||
absent)
|
||||
|
|
|
@ -1,6 +1,7 @@
|
|||
#!/bin/sh
|
||||
#
|
||||
# 2011 Steven Armstrong (steven-cdist at armstrong.cc)
|
||||
# 2012 Nico Schottelius (nico-cdist at schottelius.org)
|
||||
#
|
||||
# This file is part of cdist.
|
||||
#
|
||||
|
@ -18,13 +19,10 @@
|
|||
# along with cdist. If not, see <http://www.gnu.org/licenses/>.
|
||||
#
|
||||
|
||||
# set defaults
|
||||
key="$(cat "$__object/parameter/key" 2>/dev/null \
|
||||
|| echo "$__object_id" | tee "$__object/parameter/key")"
|
||||
state="$(cat "$__object/parameter/state" 2>/dev/null \
|
||||
|| echo "present" | tee "$__object/parameter/state")"
|
||||
state_should=present
|
||||
[ -f "$__object/parameter/state" ] && state_should="$(cat "$__object/parameter/state")"
|
||||
|
||||
if [ "$state" = "present" -a ! -f "$__object/parameter/value" ]; then
|
||||
if [ "$state_should" = "present" -a ! -f "$__object/parameter/value" ]; then
|
||||
echo "Missing required parameter 'value'" >&2
|
||||
exit 1
|
||||
fi
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
#!/bin/sh
|
||||
#
|
||||
# 2011 Nico Schottelius (nico-cdist at schottelius.org)
|
||||
# 2011-2012 Nico Schottelius (nico-cdist at schottelius.org)
|
||||
#
|
||||
# This file is part of cdist.
|
||||
#
|
||||
|
@ -34,18 +34,16 @@ case "$type" in
|
|||
lnopt=""
|
||||
;;
|
||||
*)
|
||||
echo "Unknown type: $type" >&2
|
||||
echo "Unknown link type: $type" >&2
|
||||
exit 1
|
||||
;;
|
||||
esac
|
||||
|
||||
state_is="$(cat "$__object/explorer/state")"
|
||||
state_should="$(cat "$__object/parameter/state")"
|
||||
state_should=present
|
||||
[ -f "$__object/parameter/state" ] && state_should="$(cat "$__object/parameter/state")"
|
||||
|
||||
if [ "$state_should" = "$state_is" ]; then
|
||||
# nothing to do
|
||||
exit 0
|
||||
fi
|
||||
[ "$state_should" = "$state_is" ] && exit 0
|
||||
|
||||
case "$state_should" in
|
||||
present)
|
||||
|
|
|
@ -1,38 +0,0 @@
|
|||
#!/bin/sh
|
||||
#
|
||||
# 2011 Steven Armstrong (steven-cdist at armstrong.cc)
|
||||
#
|
||||
# This file is part of cdist.
|
||||
#
|
||||
# cdist is free software: you can redistribute it and/or modify
|
||||
# it under the terms of the GNU General Public License as published by
|
||||
# the Free Software Foundation, either version 3 of the License, or
|
||||
# (at your option) any later version.
|
||||
#
|
||||
# cdist is distributed in the hope that it will be useful,
|
||||
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
# GNU General Public License for more details.
|
||||
#
|
||||
# You should have received a copy of the GNU General Public License
|
||||
# along with cdist. If not, see <http://www.gnu.org/licenses/>.
|
||||
#
|
||||
|
||||
device="$(cat "$__object/parameter/device")"
|
||||
type="$(cat "$__object/parameter/type")"
|
||||
|
||||
if [ "$type" = "swap" ]; then
|
||||
echo "mkswap $device"
|
||||
else
|
||||
command="mkfs -t $type -q"
|
||||
if [ -f "$__object/parameter/options" ]; then
|
||||
options="$(cat "$__object/parameter/options")"
|
||||
command="$command $options"
|
||||
fi
|
||||
command="$command $device"
|
||||
if [ -f "$__object/parameter/blocks" ]; then
|
||||
blocks="$(cat "$__object/parameter/blocks")"
|
||||
command="$command $blocks"
|
||||
fi
|
||||
echo "$command"
|
||||
fi
|
|
@ -1,57 +0,0 @@
|
|||
cdist-type__mkfs(7)
|
||||
===================
|
||||
Steven Armstrong <steven-cdist--@--armstrong.cc>
|
||||
|
||||
|
||||
NAME
|
||||
----
|
||||
cdist-type__mkfs - build a linux file system
|
||||
|
||||
|
||||
DESCRIPTION
|
||||
-----------
|
||||
This cdist type is a wrapper for the mkfs command.
|
||||
|
||||
|
||||
REQUIRED PARAMETERS
|
||||
-------------------
|
||||
type::
|
||||
The filesystem type to use. Same as mkfs -t.
|
||||
|
||||
|
||||
OPTIONAL PARAMETERS
|
||||
-------------------
|
||||
device::
|
||||
defaults to object_id
|
||||
|
||||
options::
|
||||
file system-specific options to be passed to the mkfs command
|
||||
|
||||
blocks::
|
||||
the number of blocks to be used for the file system
|
||||
|
||||
|
||||
EXAMPLES
|
||||
--------
|
||||
|
||||
--------------------------------------------------------------------------------
|
||||
# reiserfs /dev/sda5
|
||||
__mkfs /dev/sda5 --type reiserfs
|
||||
# same thing with explicit device
|
||||
__mkfs whatever --device /dev/sda5 --type reiserfs
|
||||
|
||||
# jfs with journal on /dev/sda2
|
||||
__mkfs /dev/sda1 --type jfs --options "-j /dev/sda2"
|
||||
--------------------------------------------------------------------------------
|
||||
|
||||
|
||||
SEE ALSO
|
||||
--------
|
||||
- cdist-type(7)
|
||||
- mkfs(8)
|
||||
|
||||
|
||||
COPYING
|
||||
-------
|
||||
Copyright \(C) 2011 Steven Armstrong. Free use of this software is
|
||||
granted under the terms of the GNU General Public License version 3 (GPLv3).
|
|
@ -1,3 +0,0 @@
|
|||
device
|
||||
options
|
||||
blocks
|
|
@ -1 +0,0 @@
|
|||
type
|
|
@ -34,7 +34,7 @@ type::
|
|||
__package_emerge for Gentoo
|
||||
|
||||
state::
|
||||
The state the package should be in, either "present" or "absent"
|
||||
Either "present" or "absent", defaults to "present"
|
||||
|
||||
|
||||
EXAMPLES
|
||||
|
|
|
@ -25,7 +25,7 @@ name::
|
|||
If supplied, use the name and not the object id as the package name.
|
||||
|
||||
state::
|
||||
The state the package should be in, either "present" or "absent"
|
||||
Either "present" or "absent", defaults to "present"
|
||||
|
||||
|
||||
EXAMPLES
|
||||
|
|
|
@ -24,7 +24,7 @@ name::
|
|||
If supplied, use the name and not the object id as the package name.
|
||||
|
||||
state::
|
||||
The state the package should be in, either "present" or "absent"
|
||||
Either "present" or "absent", defaults to "present"
|
||||
|
||||
|
||||
EXAMPLES
|
||||
|
|
|
@ -24,7 +24,7 @@ name::
|
|||
If supplied, use the name and not the object id as the package name.
|
||||
|
||||
state::
|
||||
The state the package should be in, either "present" or "absent"
|
||||
Either "present" or "absent", defaults to "present"
|
||||
|
||||
|
||||
EXAMPLES
|
||||
|
|
|
@ -10,8 +10,7 @@ cdist-type__package_pacman - Manage packages with pacman
|
|||
|
||||
DESCRIPTION
|
||||
-----------
|
||||
Pacman is usually used on the Archlinux distribution to manage
|
||||
packages.
|
||||
Pacman is usually used on the Archlinux distribution to manage packages.
|
||||
|
||||
|
||||
REQUIRED PARAMETERS
|
||||
|
@ -25,7 +24,7 @@ name::
|
|||
If supplied, use the name and not the object id as the package name.
|
||||
|
||||
state::
|
||||
The state the package should be in, either "present" or "absent"
|
||||
Either "present" or "absent", defaults to "present"
|
||||
|
||||
|
||||
EXAMPLES
|
||||
|
|
|
@ -28,7 +28,7 @@ pip::
|
|||
Instead of using pip from PATH, use the specific pip path.
|
||||
|
||||
state::
|
||||
Either "present" or "absent".
|
||||
Either "present" or "absent", defaults to "present"
|
||||
|
||||
|
||||
EXAMPLES
|
||||
|
|
|
@ -33,7 +33,7 @@ pkgsite::
|
|||
If supplied, use to install from a specific package repository.
|
||||
|
||||
state::
|
||||
Either "present" or "absent".
|
||||
Either "present" or "absent", defaults to "present"
|
||||
|
||||
|
||||
EXAMPLES
|
||||
|
|
|
@ -27,7 +27,7 @@ flavor::
|
|||
If supplied, use to avoid ambiguity.
|
||||
|
||||
state::
|
||||
The state the package should be in, either "present" or "absent"
|
||||
Either "present" or "absent", defaults to "present"
|
||||
|
||||
|
||||
EXAMPLES
|
||||
|
|
|
@ -24,7 +24,7 @@ name::
|
|||
If supplied, use the name and not the object id as the package name.
|
||||
|
||||
state::
|
||||
The state the package should be in, either "present" or "absent"
|
||||
Either "present" or "absent", defaults to "present"
|
||||
|
||||
|
||||
EXAMPLES
|
||||
|
|
|
@ -26,8 +26,7 @@ name::
|
|||
If supplied, use the name and not the object id as the package name.
|
||||
|
||||
state::
|
||||
The state the package should be in, either "present" or "absent"
|
||||
(the old values "installed" or "removed" will be removed in cdist 2.1).
|
||||
Either "present" or "absent", defaults to "present"
|
||||
|
||||
|
||||
EXAMPLES
|
||||
|
|
|
@ -24,7 +24,7 @@ name::
|
|||
If supplied, use the name and not the object id as the package name.
|
||||
|
||||
state::
|
||||
The state the package should be in, either "present" or "absent"
|
||||
Either "present" or "absent", defaults to "present"
|
||||
|
||||
|
||||
EXAMPLES
|
||||
|
|
|
@ -1,62 +0,0 @@
|
|||
cdist-type__partition_msdos(7)
|
||||
==============================
|
||||
Steven Armstrong <steven-cdist--@--armstrong.cc>
|
||||
|
||||
|
||||
NAME
|
||||
----
|
||||
cdist-type__partition_msdos - creates msdos partitions
|
||||
|
||||
|
||||
DESCRIPTION
|
||||
-----------
|
||||
This cdist type allows you to create msdos paritions.
|
||||
|
||||
|
||||
REQUIRED PARAMETERS
|
||||
-------------------
|
||||
type::
|
||||
the partition type used in fdisk (such as 82 or 83) or "extended"
|
||||
|
||||
|
||||
OPTIONAL PARAMETERS
|
||||
-------------------
|
||||
partition::
|
||||
defaults to object_id
|
||||
bootable::
|
||||
mark partition as bootable, true or false, defaults to false
|
||||
size::
|
||||
the size of the partition (such as 32M or 15G, whole numbers
|
||||
only), '+' for remaining space, or 'n%' for percentage of remaining
|
||||
(these should only be used after all specific partition sizes are
|
||||
specified). Defaults to +.
|
||||
|
||||
|
||||
EXAMPLES
|
||||
--------
|
||||
|
||||
--------------------------------------------------------------------------------
|
||||
# 128MB, linux, bootable
|
||||
__partition_msdos /dev/sda1 --type 83 --size 128M --bootable true
|
||||
# 512MB, swap
|
||||
__partition_msdos /dev/sda2 --type 82 --size 512M
|
||||
# 100GB, extended
|
||||
__partition_msdos /dev/sda3 --type extended --size 100G
|
||||
# 10GB, linux
|
||||
__partition_msdos /dev/sda5 --type 83 --size 10G
|
||||
# 50% of the free space of the extended partition, linux
|
||||
__partition_msdos /dev/sda6 --type 83 --size 50%
|
||||
# rest of the extended partition, linux
|
||||
__partition_msdos /dev/sda7 --type 83 --size +
|
||||
--------------------------------------------------------------------------------
|
||||
|
||||
|
||||
SEE ALSO
|
||||
--------
|
||||
- cdist-type(7)
|
||||
|
||||
|
||||
COPYING
|
||||
-------
|
||||
Copyright \(C) 2011 Steven Armstrong. Free use of this software is
|
||||
granted under the terms of the GNU General Public License version 3 (GPLv3).
|
|
@ -1,41 +0,0 @@
|
|||
#!/bin/sh
|
||||
#
|
||||
# 2011 Steven Armstrong (steven-cdist at armstrong.cc)
|
||||
#
|
||||
# This file is part of cdist.
|
||||
#
|
||||
# cdist is free software: you can redistribute it and/or modify
|
||||
# it under the terms of the GNU General Public License as published by
|
||||
# the Free Software Foundation, either version 3 of the License, or
|
||||
# (at your option) any later version.
|
||||
#
|
||||
# cdist is distributed in the hope that it will be useful,
|
||||
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
# GNU General Public License for more details.
|
||||
#
|
||||
# You should have received a copy of the GNU General Public License
|
||||
# along with cdist. If not, see <http://www.gnu.org/licenses/>.
|
||||
#
|
||||
|
||||
# set defaults
|
||||
if [ -f "$__object/parameter/partition" ]; then
|
||||
partition="(cat "$__object/parameter/partition")"
|
||||
else
|
||||
partition="/$__object_id"
|
||||
echo "$partition" > "$__object/parameter/partition"
|
||||
fi
|
||||
device="$(echo "$partition" | sed 's/[0-9]//g')"
|
||||
echo "$device" > "$__object/parameter/device"
|
||||
minor="$(echo "$partition" | sed 's/[^0-9]//g')"
|
||||
echo "$minor" > "$__object/parameter/minor"
|
||||
|
||||
if [ ! -f "$__object/parameter/bootable" ]; then
|
||||
echo "false" > "$__object/parameter/bootable"
|
||||
fi
|
||||
if [ ! -f "$__object/parameter/size" ]; then
|
||||
echo "+" > "$__object/parameter/size"
|
||||
fi
|
||||
|
||||
# pull in the type that actually does something with the above parameters
|
||||
require="$__object_name" __partition_msdos_apply
|
|
@ -1,3 +0,0 @@
|
|||
partition
|
||||
bootable
|
||||
size
|
|
@ -1 +0,0 @@
|
|||
type
|
|
@ -1,3 +0,0 @@
|
|||
#!/bin/sh
|
||||
|
||||
cat /proc/partitions
|
|
@ -1,61 +0,0 @@
|
|||
die() {
|
||||
echo "[__partition_msdos_apply] $@" >&2
|
||||
exit 1
|
||||
}
|
||||
debug() {
|
||||
#echo "[__partition_msdos_apply] $@" >&2
|
||||
:
|
||||
}
|
||||
|
||||
fdisk_command() {
|
||||
local device="$1"
|
||||
local cmd="$2"
|
||||
|
||||
debug fdisk_command "running fdisk command '${cmd}' on device ${device}"
|
||||
printf "${cmd}\nw\n" | fdisk -c -u "$device"
|
||||
# give disk some time
|
||||
sleep 1
|
||||
return $?
|
||||
}
|
||||
|
||||
create_disklabel() {
|
||||
local device=$1
|
||||
|
||||
debug create_disklabel "creating new msdos disklabel"
|
||||
fdisk_command ${device} "o"
|
||||
return $?
|
||||
}
|
||||
|
||||
create_partition() {
|
||||
local device="$1"
|
||||
local minor="$2"
|
||||
local size="$3"
|
||||
local type="$4"
|
||||
local primary_count="$5"
|
||||
|
||||
if [ "$type" = "extended" -o "$type" = "5" ]; then
|
||||
# Extended partition
|
||||
primary_extended="e\n"
|
||||
first_minor="${minor}\n"
|
||||
[ "${minor}" = "4" ] && first_minor=""
|
||||
type_minor="${minor}\n"
|
||||
[ "${minor}" = "1" ] && type_minor=""
|
||||
type="5"
|
||||
elif [ "${minor}" -lt "5" ]; then
|
||||
primary_extended="p\n"
|
||||
first_minor="${minor}\n"
|
||||
[ "${minor}" = "4" ] && first_minor=""
|
||||
type_minor="${minor}\n"
|
||||
[ "${minor}" = "1" ] && type_minor=""
|
||||
else
|
||||
# Logical partitions
|
||||
first_minor="${minor}\n"
|
||||
type_minor="${minor}\n"
|
||||
primary_extended="l\n"
|
||||
[ "$primary_count" -gt "3" ] && primary_extended=""
|
||||
fi
|
||||
[ -n "${size}" ] && size="+${size}M"
|
||||
fdisk_command ${device} "n\n${primary_extended}${first_minor}\n${size}\nt\n${type_minor}${type}\n"
|
||||
return $?
|
||||
}
|
||||
|
|
@ -1,138 +0,0 @@
|
|||
#!/bin/sh
|
||||
#
|
||||
# 2011 Steven Armstrong (steven-cdist at armstrong.cc)
|
||||
#
|
||||
# This file is part of cdist.
|
||||
#
|
||||
# cdist is free software: you can redistribute it and/or modify
|
||||
# it under the terms of the GNU General Public License as published by
|
||||
# the Free Software Foundation, either version 3 of the License, or
|
||||
# (at your option) any later version.
|
||||
#
|
||||
# cdist is distributed in the hope that it will be useful,
|
||||
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
# GNU General Public License for more details.
|
||||
#
|
||||
# You should have received a copy of the GNU General Public License
|
||||
# along with cdist. If not, see <http://www.gnu.org/licenses/>.
|
||||
#
|
||||
|
||||
die() {
|
||||
echo "[__partition_msdos_apply] $@" >&2
|
||||
exit 1
|
||||
}
|
||||
debug() {
|
||||
#echo "[__partition_msdos_apply] $@" >&2
|
||||
:
|
||||
}
|
||||
|
||||
# Convert a size specifier 1G 100M or 50% into the corresponding numeric MB.
|
||||
size_to_mb() {
|
||||
local size=$1
|
||||
local available_size="$2"
|
||||
|
||||
local number_suffix="$(echo ${size} | sed -e 's:\.[0-9]\+::' -e 's:\([0-9]\+\)\([MmGg%]\)[Bb]\?:\1|\2:')"
|
||||
local number="$(echo ${number_suffix} | cut -d '|' -f1)"
|
||||
local suffix="$(echo ${number_suffix} | cut -d '|' -f2)"
|
||||
|
||||
case "$suffix" in
|
||||
M|m)
|
||||
size="$number"
|
||||
;;
|
||||
G|g)
|
||||
size="$(( $number * 1024 ))"
|
||||
;;
|
||||
%)
|
||||
size="$(( $available_size * $number / 100 ))"
|
||||
;;
|
||||
*)
|
||||
size="-1"
|
||||
esac
|
||||
echo "$size"
|
||||
}
|
||||
|
||||
# include function library for use on target
|
||||
cat "$__type/files/lib.sh"
|
||||
|
||||
partitions="$__object/explorer/partitions"
|
||||
objects=$(find "$__global/object/__partition_msdos" -path "*.cdist")
|
||||
current_device=""
|
||||
available_device_size=
|
||||
available_extended_size=
|
||||
available_size=
|
||||
primary_count=0
|
||||
for object in $objects; do
|
||||
device="$(cat "$object/parameter/device")"
|
||||
if [ "$current_device" != "$device" ]; then
|
||||
echo "create_disklabel \"$device\" || die 'Failed to create disklabel for $device'"
|
||||
current_device="$device"
|
||||
device_name=$(echo ${device} | sed -e 's:^/dev/::;s:/:\\/:g')
|
||||
available_device_size=$(( $(awk "/${device_name}\$/ { print \$3; }" "$partitions") / 1024))
|
||||
# make sure we don't go past the end of the drive
|
||||
available_device_size=$((available_device_size - 2))
|
||||
available_extended_size=0
|
||||
primary_count=0
|
||||
debug "----- $device"
|
||||
debug "current_device=$current_device"
|
||||
debug "available_device_size=$available_device_size"
|
||||
fi
|
||||
|
||||
type="$(cat "$object/parameter/type")"
|
||||
partition="$(cat "$object/parameter/partition")"
|
||||
minor="$(cat "$object/parameter/minor")"
|
||||
|
||||
bootable="$(cat "$object/parameter/bootable")"
|
||||
size="$(cat "$object/parameter/size")"
|
||||
|
||||
|
||||
if [ "${minor}" -lt "5" ]; then
|
||||
# Primary partitions
|
||||
primary_count=$(( $primary_count + 1 ))
|
||||
available_size=$available_device_size
|
||||
else
|
||||
# Logical partitions
|
||||
available_size=$available_extended_size
|
||||
fi
|
||||
|
||||
if [ "$size" = "+" ]; then
|
||||
# use rest of device
|
||||
partition_size=""
|
||||
available_size=0
|
||||
else
|
||||
partition_size=$(size_to_mb "$size" "$available_size")
|
||||
available_size="$(( $available_size - $partition_size ))"
|
||||
fi
|
||||
|
||||
if [ "${minor}" -lt "5" ]; then
|
||||
# Primary partitions
|
||||
available_device_size=$available_size
|
||||
if [ "$type" = "extended" -o "$type" = "5" ]; then
|
||||
# Extended partition
|
||||
available_extended_size=$partition_size
|
||||
fi
|
||||
else
|
||||
# Logical paritions
|
||||
available_extended_size=$available_size
|
||||
fi
|
||||
|
||||
[ "$partition_size" = "-1" ] && die "could not translate size '$size' to a usable value"
|
||||
debug "----- $partition"
|
||||
debug "primary_count=$primary_count"
|
||||
debug "current_device=$current_device"
|
||||
debug "device=$device"
|
||||
debug "type=$type"
|
||||
debug "partition=$partition"
|
||||
debug "minor=$minor"
|
||||
debug "bootable=$bootable"
|
||||
debug "size=$size"
|
||||
debug "partition_size=$partition_size"
|
||||
debug "available_size=$available_size"
|
||||
debug "available_device_size=$available_device_size"
|
||||
debug "available_extended_size=$available_extended_size"
|
||||
debug "----------"
|
||||
|
||||
echo "create_partition '$device' '$minor' '$partition_size' '$type' '$primary_count' \
|
||||
|| die 'Failed to create partition: $partition'"
|
||||
done
|
||||
|
|
@ -26,6 +26,7 @@ source::
|
|||
Note that this type is almost useless without a ruleset defined, but it's technically not
|
||||
needed, e.g. for the case of disabling the firewall temporarily.
|
||||
|
||||
|
||||
EXAMPLES
|
||||
--------
|
||||
|
||||
|
|
|
@ -36,6 +36,7 @@ __postgres_database mydbname --state present --owner mydbusername
|
|||
SEE ALSO
|
||||
--------
|
||||
- cdist-type(7)
|
||||
- cdist-type__postgres_role(7)
|
||||
|
||||
|
||||
COPYING
|
||||
|
|
|
@ -22,33 +22,28 @@ name="$__object_id"
|
|||
state_is="$(cat "$__object/explorer/state")"
|
||||
state_should="$(cat "$__object/parameter/state")"
|
||||
|
||||
if [ "$state_is" != "$state_should" ]; then
|
||||
case "$state_should" in
|
||||
[ "$state_is" = "$state_should" ] && exit 0
|
||||
|
||||
case "$state_should" in
|
||||
present)
|
||||
optional="password
|
||||
login
|
||||
createdb
|
||||
createrole
|
||||
superuser"
|
||||
for parameter in $optional; do
|
||||
if [ -f "$__object/parameter/$parameter" ]; then
|
||||
value="$(cat "$__object/parameter/$parameter")"
|
||||
eval $parameter=$value
|
||||
if [ -f "$__object/parameter/password" ]; then
|
||||
password="$(cat "$__object/parameter/$parameter")"
|
||||
fi
|
||||
booleans=""
|
||||
for boolean in login createdb createrole superuser; do
|
||||
if [ ! -f "$__object/parameter/$boolean" ]; then
|
||||
boolean="no${boolean}"
|
||||
fi
|
||||
upper=$(echo $boolean | tr '[a-z]' '[A-Z]')
|
||||
booleans="$booleans $upper"
|
||||
done
|
||||
|
||||
[ -n "$password" ] && password="PASSWORD '$password'"
|
||||
[ "$login" = "true" ] && login="LOGIN" || login="NOLOGIN"
|
||||
[ "$createdb" = "true" ] && createdb="CREATEDB" || createdb="NOCREATEDB"
|
||||
[ "$createrole" = "true" ] && createrole="CREATEROLE" || createrole="NOCREATEROLE"
|
||||
[ "$superuser" = "true" ] && superuser="SUPERUSER" || superuser="NOSUPERUSER"
|
||||
[ "$inherit" = "true" ] && inherit="INHERIT" || inherit="NOINHERIT"
|
||||
|
||||
cmd="CREATE ROLE $name WITH $password $login $createdb $createrole $superuser $inherit"
|
||||
cmd="CREATE ROLE $name WITH $password $booleans"
|
||||
echo "su - postgres -c \"psql -c \\\"$cmd\\\"\""
|
||||
;;
|
||||
absent)
|
||||
echo "su - postgres -c \"dropuser \\\"$name\\\"\""
|
||||
;;
|
||||
esac
|
||||
fi
|
||||
esac
|
||||
|
|
|
@ -16,22 +16,27 @@ This cdist type allows you to create or drop postgres roles.
|
|||
REQUIRED PARAMETERS
|
||||
-------------------
|
||||
state::
|
||||
either 'present' or 'absent'
|
||||
Either "present" or "absent", defaults to "present"
|
||||
|
||||
|
||||
OPTIONAL PARAMETERS
|
||||
-------------------
|
||||
All optional parameter map directly to the corresponding postgres createrole
|
||||
All parameter map directly to the corresponding postgres createrole
|
||||
parameters.
|
||||
|
||||
password::
|
||||
|
||||
BOOLEAN PARAMETERS
|
||||
------------------
|
||||
All parameter map directly to the corresponding postgres createrole
|
||||
parameters.
|
||||
|
||||
login::
|
||||
createdb::
|
||||
createrole::
|
||||
superuser::
|
||||
inherit::
|
||||
|
||||
|
||||
EXAMPLES
|
||||
--------
|
||||
|
||||
|
@ -40,15 +45,16 @@ __postgres_role myrole --state present
|
|||
|
||||
__postgres_role myrole --state present --password 'secret'
|
||||
|
||||
__postgres_role admin --state present --password 'very-secret' --superuser true
|
||||
__postgres_role admin --state present --password 'very-secret' --superuser
|
||||
|
||||
__postgres_role dbcustomer --state present --password 'bla' --createdb true
|
||||
__postgres_role dbcustomer --state present --password 'bla' --createdb
|
||||
--------------------------------------------------------------------------------
|
||||
|
||||
|
||||
SEE ALSO
|
||||
--------
|
||||
- cdist-type(7)
|
||||
- cdist-type__postgres_database(7)
|
||||
- http://www.postgresql.org/docs/current/static/sql-createrole.html
|
||||
|
||||
|
||||
|
|
5
cdist/conf/type/__postgres_role/parameter/boolean
Normal file
5
cdist/conf/type/__postgres_role/parameter/boolean
Normal file
|
@ -0,0 +1,5 @@
|
|||
login
|
||||
createdb
|
||||
createrole
|
||||
superuser
|
||||
inherit
|
|
@ -1,6 +1 @@
|
|||
password
|
||||
login
|
||||
createdb
|
||||
createrole
|
||||
superuser
|
||||
inherit
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
#!/bin/sh
|
||||
#
|
||||
# 2011 Nico Schottelius (nico-cdist at schottelius.org)
|
||||
# 2011-2012 Nico Schottelius (nico-cdist at schottelius.org)
|
||||
#
|
||||
# This file is part of cdist.
|
||||
#
|
||||
|
|
|
@ -16,9 +16,7 @@ This cdist type allows you to define the state of a process.
|
|||
REQUIRED PARAMETERS
|
||||
-------------------
|
||||
state::
|
||||
State of the process: Either present or absent
|
||||
(old values "stopped" and "running" are deprecated and will be removed in
|
||||
cdist 2.1).
|
||||
Either "present" or "absent", defaults to "present"
|
||||
|
||||
|
||||
OPTIONAL PARAMETERS
|
||||
|
@ -66,6 +64,7 @@ __process rpcstatd --state present --start "/etc/init.d/statd start" \
|
|||
SEE ALSO
|
||||
--------
|
||||
- cdist-type(7)
|
||||
- cdist-type__start_on_boot(7)
|
||||
|
||||
|
||||
COPYING
|
||||
|
|
|
@ -2,7 +2,8 @@
|
|||
# State: absent is handled by manifest - we need only to do stuff if image is
|
||||
# not existing and state != absent
|
||||
#
|
||||
[ -f "$__object/parameter/state" ] && state="$(cat "$__object/parameter/state")"
|
||||
state="present"
|
||||
[ -f "$__object/parameter/state" ] state="$(cat "$__object/parameter/state")"
|
||||
[ "$state" = "absent" ] && exit 0
|
||||
|
||||
exists="$(cat "$__object/explorer/exists")"
|
||||
|
@ -15,6 +16,6 @@ exists="$(cat "$__object/explorer/exists")"
|
|||
format=qcow2
|
||||
[ -f "$__object/parameter/format" ] && format="$(cat "$__object/parameter/format")"
|
||||
size="$(cat "$__object/parameter/size")"
|
||||
vm="/$__object_id"
|
||||
diskimage="/$__object_id"
|
||||
|
||||
echo qemu-img create -f \"$format\" \"$vm\" \"$size\"
|
||||
echo qemu-img create -f \"$format\" \"$diskimage\" \"$size\"
|
||||
|
|
|
@ -24,8 +24,7 @@ size::
|
|||
OPTIONAL PARAMETERS
|
||||
-------------------
|
||||
state::
|
||||
The state of the image file: either "present" or "absent".
|
||||
Defaults to "present".
|
||||
Either "present" or "absent", defaults to "present"
|
||||
|
||||
|
||||
EXAMPLES
|
||||
|
|
|
@ -3,12 +3,13 @@
|
|||
#
|
||||
|
||||
format=qcow2
|
||||
state=present
|
||||
[ -f "$__object/parameter/format" ] && format="$(cat "$__object/parameter/format")"
|
||||
[ -f "$__object/parameter/state" ] && state="$(cat "$__object/parameter/state")"
|
||||
|
||||
vm="/$__object_id"
|
||||
diskimage="/$__object_id"
|
||||
|
||||
# Absent is ensured by __file, present by gencode-remote
|
||||
if [ "$state" = "absent" ]; then
|
||||
__file "$vm" --state absent
|
||||
__file "$diskimage" --state absent
|
||||
fi
|
||||
|
|
|
@ -1,6 +1,7 @@
|
|||
#!/bin/sh
|
||||
#
|
||||
# 2012 Evax Software <contact@evax.fr>
|
||||
# 2012 Nico Schottelius (nico-cdist at schottelius.org)
|
||||
#
|
||||
# This file is part of cdist.
|
||||
#
|
||||
|
@ -21,8 +22,10 @@
|
|||
user="$__object_id"
|
||||
state_is="$(cat "$__object/explorer/state")"
|
||||
state_should="$(cat "$__object/parameter/state")"
|
||||
if [ "$state_is" != "$state_should" ]; then
|
||||
case "$state_should" in
|
||||
|
||||
[ "$state_is" = "$state_should" ] && exit 0
|
||||
|
||||
case "$state_should" in
|
||||
present)
|
||||
cat << DONE
|
||||
su - $user -c "unset rvm_path; unset rvm_bin_path; unset rvm_prefix; unset rvm_version; curl -L get.rvm.io | bash -s stable"
|
||||
|
@ -33,8 +36,6 @@ DONE
|
|||
su - $user -c "rm -Rf \"\\\$HOME/.rvm\";
|
||||
sed '/rvm\/scripts\/rvm/d' \"\\\$HOME/.bashrc\" > \"\\\$HOME/.bashrc.cdist-tmp\"
|
||||
mv \"\\\$HOME/.bashrc.cdist-tmp\" \"\\\$HOME/.bashrc\""
|
||||
|
||||
DONE
|
||||
;;
|
||||
esac
|
||||
fi
|
||||
esac
|
||||
|
|
|
@ -1,6 +1,7 @@
|
|||
#!/bin/sh
|
||||
#
|
||||
# 2012 Evax Software <contact@evax.fr>
|
||||
# 2012 Nico Schottelius (nico-cdist at schottelius.org)
|
||||
#
|
||||
# This file is part of cdist.
|
||||
#
|
||||
|
@ -30,8 +31,8 @@ fi
|
|||
if su - "$user" -c "source \"\$HOME/.rvm/scripts/rvm\"
|
||||
rvm list | grep -q $ruby"; then
|
||||
if su - "$user" -c "source \"\$HOME/.rvm/scripts/rvm\"
|
||||
rvm use $ruby > /dev/null; rvm gemset list | grep -q $gemsetname &&
|
||||
rvm use $gemset > /dev/null && gem list | grep -q $gem"; then
|
||||
rvm use $ruby > /dev/null 2>&1; rvm gemset list | grep -q $gemsetname &&
|
||||
rvm use $gemset > /dev/null 2>&1 && gem list | grep -q $gem"; then
|
||||
echo "present"
|
||||
exit 0
|
||||
fi
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
#!/bin/sh
|
||||
#
|
||||
#!/bin/sh #
|
||||
# 2012 Evax Software <contact@evax.fr>
|
||||
# 2012 Nico Schottelius (nico-cdist at schottelius.org)
|
||||
#
|
||||
# This file is part of cdist.
|
||||
#
|
||||
|
@ -25,19 +25,18 @@ gemsetname="$(echo "$gemset" | cut -d '@' -f 2)"
|
|||
state_is="$(cat "$__object/explorer/state")"
|
||||
user="$(cat "$__object/parameter/user")"
|
||||
state_should="$(cat "$__object/parameter/state")"
|
||||
if [ "$state_is" != "$state_should" ]; then
|
||||
case "$state_should" in
|
||||
|
||||
[ "$state_is" = "$state_should" ] && exit 0
|
||||
|
||||
case "$state_should" in
|
||||
present)
|
||||
cat << DONE
|
||||
su - "$user" -c "source \"\\\$HOME/.rvm/scripts/rvm\"
|
||||
rvm use $gemset; gem install $gem"
|
||||
su - "$user" -c 'source ~/.rvm/scripts/rvm; rvm use "$gemset"; gem install "$gem"'
|
||||
DONE
|
||||
;;
|
||||
absent)
|
||||
cat << DONE
|
||||
su - "$user" -c "source \"\\\$HOME/.rvm/scripts/rvm\"
|
||||
rvm use $gemset; gem uninstall $gem"
|
||||
su - "$user" -c 'source ~/.rvm/scripts/rvm; rvm use "$gemset"; gem uninstall "$gem"'
|
||||
DONE
|
||||
;;
|
||||
esac
|
||||
fi
|
||||
esac
|
||||
|
|
|
@ -20,7 +20,7 @@ user::
|
|||
gemset::
|
||||
The gemset to use
|
||||
state::
|
||||
Either "present" or "absent".
|
||||
Either "present" or "absent"
|
||||
|
||||
OPTIONAL PARAMETERS
|
||||
-------------------
|
||||
|
|
|
@ -1,38 +0,0 @@
|
|||
#!/bin/sh
|
||||
#
|
||||
# 2012 Evax Software <contact@evax.fr>
|
||||
#
|
||||
# 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/>.
|
||||
#
|
||||
|
||||
gem="$__object_id"
|
||||
gemset="$(cat "$__object/parameter/gemset")"
|
||||
ruby="$(echo "$gemset" | cut -d '@' -f 1)"
|
||||
gemsetname="$(echo "$gemset" | cut -d '@' -f 2)"
|
||||
user="$(cat "$__object/parameter/user")"
|
||||
state="$(cat "$__object/explorer/state")"
|
||||
if [ -f "$__object/parameter/default" ]; then
|
||||
default="$(cat "$__object/parameter/default")"
|
||||
else
|
||||
default="no"
|
||||
echo $default > "$__object/parameter/default"
|
||||
fi
|
||||
|
||||
__rvm "$user" --state present
|
||||
require="__rvm/$user" \
|
||||
__rvm_ruby $ruby --user "$user" --state present --default $default
|
||||
require="__rvm_ruby/$ruby" \
|
||||
__rvm_gemset $gemset --user "$user" --state present --default $default
|
|
@ -22,14 +22,14 @@ gemset="$__object_id"
|
|||
ruby="$(echo "$gemset" | cut -d '@' -f 1)"
|
||||
gemsetname="$(echo "$gemset" | cut -d '@' -f2)"
|
||||
user="$(cat "$__object/parameter/user")"
|
||||
if su - "$user" -c "[ ! -d \"\$HOME/.rvm\" ]" ; then
|
||||
|
||||
if [ ! -e "~$user/.rvm/scripts/rvm" ] ; then
|
||||
echo "absent"
|
||||
exit 0
|
||||
fi
|
||||
if su - "$user" -c "source \"\$HOME/.rvm/scripts/rvm\"
|
||||
rvm list | grep -q $ruby"; then
|
||||
if su - "$user" -c "source \"\$HOME/.rvm/scripts/rvm\"
|
||||
rvm use $ruby > /dev/null; rvm gemset list | grep -q $gemsetname"; then
|
||||
|
||||
if su - "$user" -c 'source ~/.rvm/scripts/rvm; rvm list strings | grep -q "^$ruby\$"'; then
|
||||
if su - "$user" -c 'source ~/.rvm/scripts/rvm; rvm use "$ruby" > /dev/null; rvm gemset list strings | cut -f 1 -d " " | grep -q "^$gemsetname\$"'; then
|
||||
echo "present"
|
||||
exit 0
|
||||
fi
|
||||
|
|
|
@ -1,6 +1,7 @@
|
|||
#!/bin/sh
|
||||
#
|
||||
# 2012 Evax Software <contact@evax.fr>
|
||||
# 2012 Nico Schottelius (nico-cdist at schottelius.org)
|
||||
#
|
||||
# This file is part of cdist.
|
||||
#
|
||||
|
@ -25,29 +26,27 @@ state_is="$(cat "$__object/explorer/state")"
|
|||
user="$(cat "$__object/parameter/user")"
|
||||
default="$(cat "$__object/parameter/default" 2>/dev/null || true)"
|
||||
state_should="$(cat "$__object/parameter/state")"
|
||||
if [ "$state_is" != "$state_should" ]; then
|
||||
case "$state_should" in
|
||||
|
||||
[ "$state_is" = "$state_should" ] && exit 0
|
||||
|
||||
case "$state_should" in
|
||||
present)
|
||||
cat << DONE
|
||||
su - "$user" -c "source \"\\\$HOME/.rvm/scripts/rvm\"
|
||||
rvm $gemset --create"
|
||||
su - "$user" -c "source ~/.rvm/scripts/rvm; rvm $gemset --create"
|
||||
DONE
|
||||
case "$default" in
|
||||
no)
|
||||
;;
|
||||
*)
|
||||
cat << DONE
|
||||
su - "$user" -c "source \"\\\$HOME/.rvm/scripts/rvm\"
|
||||
rvm use --default $gemset"
|
||||
su - "$user" -c "source ~/.rvm/scripts/rvm; rvm use --default $gemset"
|
||||
DONE
|
||||
;;
|
||||
esac
|
||||
;;
|
||||
absent)
|
||||
cat << DONE
|
||||
su - "$user" -c "source \"\\\$HOME/.rvm/scripts/rvm\"
|
||||
rvm use $ruby; rvm --force gemset delete $gemsetname"
|
||||
su - "$user" -c "source ~/.rvm/scripts/rvm; rvm use $ruby; rvm --force gemset delete $gemsetname"
|
||||
DONE
|
||||
;;
|
||||
esac
|
||||
fi
|
||||
esac
|
||||
|
|
|
@ -1,36 +0,0 @@
|
|||
#!/bin/sh
|
||||
#
|
||||
# 2012 Evax Software <contact@evax.fr>
|
||||
#
|
||||
# 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/>.
|
||||
#
|
||||
|
||||
gemset="$__object_id"
|
||||
ruby="$(echo "$gemset" | cut -d '@' -f 1)"
|
||||
gemsetname="$(echo "$gemset" | cut -d '@' -f 2)"
|
||||
user="$(cat "$__object/parameter/user")"
|
||||
state="$(cat "$__object/explorer/state")"
|
||||
if [ -f "$__object/parameter/default" ]; then
|
||||
default="$(cat "$__object/parameter/default")"
|
||||
else
|
||||
default="no"
|
||||
echo $default > "$__object/parameter/default"
|
||||
fi
|
||||
|
||||
__rvm "$user" --state present
|
||||
require="__rvm/$user" \
|
||||
__rvm_ruby $ruby --user "$user" --state present --default $default
|
||||
|
|
@ -24,23 +24,24 @@ user="$(cat "$__object/parameter/user")"
|
|||
default="$(cat "$__object/parameter/default" 2>/dev/null || true)"
|
||||
state_should="$(cat "$__object/parameter/state")"
|
||||
|
||||
if [ "$state_is" != "$state_should" ]; then
|
||||
case "$state_should" in
|
||||
[ "$state_is" = "$state_should" ] && exit 0
|
||||
|
||||
case "$state_should" in
|
||||
present)
|
||||
echo "su - \"$user\" -c \"source \\\$HOME/.rvm/scripts/rvm;"\
|
||||
"rvm install $ruby\""
|
||||
case "$default" in
|
||||
no)
|
||||
;;
|
||||
*)
|
||||
if [ -f "$__object/parameter/default" ]; then
|
||||
echo "su - \"$user\" -c \"source \\\$HOME/.rvm/scripts/rvm;"\
|
||||
"rvm use --default $ruby\""
|
||||
;;
|
||||
esac
|
||||
fi
|
||||
;;
|
||||
absent)
|
||||
echo "su - \"$user\" -c \"source \\\$HOME/.rvm/scripts/rvm;"\
|
||||
"rvm remove $ruby\""
|
||||
;;
|
||||
esac
|
||||
fi
|
||||
|
||||
*)
|
||||
echo "Unknown state $state_should" >&2
|
||||
exit 1
|
||||
;;
|
||||
esac
|
||||
|
|
|
@ -20,10 +20,10 @@ user::
|
|||
state::
|
||||
Either "present" or "absent".
|
||||
|
||||
OPTIONAL PARAMETERS
|
||||
-------------------
|
||||
BOOLEAN PARAMETERS
|
||||
------------------
|
||||
default:
|
||||
If set to anything but "no" (the default), set the given version as default
|
||||
Set the given version as default
|
||||
|
||||
EXAMPLES
|
||||
--------
|
||||
|
@ -33,7 +33,7 @@ EXAMPLES
|
|||
__rvm_ruby ruby-1.9.3-p0 --user thelonious --state present
|
||||
|
||||
# Install ruby 1.9.3 through rvm for user ornette and make it the default
|
||||
__rvm_ruby ruby-1.9.3-p0 --user ornette --state present --default yes
|
||||
__rvm_ruby ruby-1.9.3-p0 --user ornette --state present --default
|
||||
|
||||
# Remove ruby 1.9.3 for user john
|
||||
__rvm_ruby ruby-1.9.3-p0 --user john --state absent
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
#!/bin/sh
|
||||
#
|
||||
# 2012 Evax Software <contact@evax.fr>
|
||||
# 2012 Nico Schottelius (nico-cdist at schottelius.org)
|
||||
#
|
||||
# This file is part of cdist.
|
||||
#
|
||||
|
@ -17,67 +17,9 @@
|
|||
# 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/default" ]; then
|
||||
default="$(cat "$__object/parameter/default")"
|
||||
else
|
||||
default="no"
|
||||
echo "$default" > "$__object/parameter/default"
|
||||
fi
|
||||
|
||||
ruby="$__object_id"
|
||||
user="$(cat "$__object/parameter/user")"
|
||||
state="$(cat "$__object/explorer/state")"
|
||||
|
||||
apt_ruby="build-essential openssl libreadline6 libreadline6-dev curl git-core
|
||||
zlib1g zlib1g-dev libssl-dev libyaml-dev libsqlite3-0 libsqlite3-dev sqlite3
|
||||
libxml2-dev libxslt-dev autoconf libc6-dev ncurses-dev automake libtool bison
|
||||
subversion"
|
||||
apt_jruby="curl g++ openjdk-6-jre-headless"
|
||||
apt_jruby_head="ant openjdk-6-jdk"
|
||||
apt_ironruby="curl mono-2.0-devel"
|
||||
|
||||
emerge_ruby="libiconv readline zlib openssl curl git libyaml sqlite libxslt
|
||||
libtool gcc autoconf automake bison m4"
|
||||
emerge_jruby="dev-java/sun-jdk dev-java/sun-jre-bin"
|
||||
emerge_ironruby="dev-lang/mono"
|
||||
|
||||
pacman_ruby="gcc patch curl zlib readline libxml2 libxslt git autoconf
|
||||
diffutils make libtool bison subversion"
|
||||
pacman_jruby="jdk jre curl"
|
||||
pacman_ironruby="mono"
|
||||
|
||||
yum_ruby="gcc-c++ patch readline readline-devel zlib zlib-devel libyaml-devel
|
||||
libffi-devel openssl-devel make bzip2 autoconf automake libtool bison
|
||||
iconv-devel"
|
||||
yum_jruby="java"
|
||||
|
||||
os="$(cat "$__global/explorer/os")"
|
||||
case "$os" in
|
||||
archlinux) type="pacman" ;;
|
||||
debian|ubuntu) type="apt" ;;
|
||||
gentoo) type="emerge" ;;
|
||||
fedora|redhat|centos) type="yum" ;;
|
||||
*);;
|
||||
esac
|
||||
case "$ruby" in
|
||||
ruby-head*)
|
||||
deps_list="${type}_ruby_head"
|
||||
;;
|
||||
ruby*)
|
||||
deps_list="${type}_ruby"
|
||||
;;
|
||||
jruby-head*)
|
||||
deps_list="${type}_jruby_head"
|
||||
;;
|
||||
jruby*)
|
||||
deps_list="${type}_jruby"
|
||||
;;
|
||||
ironruby*)
|
||||
deps_list="${type}_ironruby"
|
||||
;;
|
||||
esac
|
||||
deps=$(eval echo \$$deps_list)
|
||||
for p in $deps; do __package_${type} $p --state present; done
|
||||
|
||||
__rvm "$user" --state present
|
||||
# Required packages for building ruby
|
||||
for package in bzip2 gcc make; do
|
||||
__package "$package" --state present
|
||||
done
|
||||
|
|
|
@ -21,7 +21,7 @@
|
|||
# This type allows to send a public ssh key from a user to the
|
||||
# authorized_keys of another
|
||||
#
|
||||
#require="__package openssh-server --state installed"
|
||||
#require="__package openssh-server --state present"
|
||||
# Get option srcuser if defined
|
||||
if [ -f "$__object/parameter/srcuser" ]; then
|
||||
srcuser=`cat "$__object/parameter/srcuser"`
|
||||
|
@ -64,4 +64,3 @@ require="__directory${sshpath}" \
|
|||
# the line added depends on authorized_keys existence
|
||||
require="__file${sshpath}/authorized_keys" __addifnosuchline sshkey --file \
|
||||
"$sshpath/authorized_keys" --line "$rsa"
|
||||
|
||||
|
|
|
@ -24,7 +24,7 @@ None.
|
|||
OPTIONAL PARAMETERS
|
||||
-------------------
|
||||
state::
|
||||
'present' or 'absent', defaults to 'present'
|
||||
Either "present" or "absent", defaults to "present"
|
||||
|
||||
|
||||
EXAMPLES
|
||||
|
@ -45,6 +45,7 @@ __start_on_boot puppet --state absent
|
|||
SEE ALSO
|
||||
--------
|
||||
- cdist-type(7)
|
||||
- cdist-type__process(7)
|
||||
|
||||
|
||||
COPYING
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
#!/bin/sh
|
||||
#
|
||||
# 2011 Steven Armstrong (steven-cdist at armstrong.cc)
|
||||
# 2012 Steven Armstrong (steven-cdist at armstrong.cc)
|
||||
#
|
||||
# This file is part of cdist.
|
||||
#
|
||||
|
@ -18,9 +18,13 @@
|
|||
# along with cdist. If not, see <http://www.gnu.org/licenses/>.
|
||||
#
|
||||
#
|
||||
# Generate auto.master config based on all defined __autofs_map ojbects.
|
||||
#
|
||||
# This type allows to configure the desired localtime timezone.
|
||||
|
||||
auto_master="$__object/files/auto.master"
|
||||
cat "$(cat "$__object/parameter/header")" > "$auto_master"
|
||||
find "$__global/object/__autofs_map" -path "*.cdist/parameter/entry" | xargs cat >> "$auto_master"
|
||||
timezone="$__object_id"
|
||||
os=$(cat "$__global/explorer/os")
|
||||
|
||||
case "$os" in
|
||||
ubuntu|debian)
|
||||
echo "echo \"$timezone\" > /etc/timezone"
|
||||
;;
|
||||
esac
|
|
@ -1,6 +1,8 @@
|
|||
#!/bin/sh
|
||||
#
|
||||
# 2011 Ramon Salvadó (rsalvado at gnuine dot com)
|
||||
# 2012 Steven Armstrong (steven-cdist at armstrong.cc)
|
||||
# 2012 Nico Schottelius (nico-cdist at schottelius.org)
|
||||
#
|
||||
# This file is part of cdist.
|
||||
#
|
||||
|
@ -21,8 +23,17 @@
|
|||
# This type allows to configure the desired localtime timezone.
|
||||
|
||||
timezone="$__object_id"
|
||||
os=$(cat "$__global/explorer/os")
|
||||
|
||||
__package tzdata --state installed
|
||||
require="__package/tzdata" __link /etc/localtime \
|
||||
case "$os" in
|
||||
archlinux|debian|ubuntu)
|
||||
__package tzdata --state present
|
||||
require="__package/tzdata" __link /etc/localtime \
|
||||
--source "/usr/share/zoneinfo/${timezone}" \
|
||||
--type symbolic
|
||||
;;
|
||||
*)
|
||||
echo "Unsupported OS $os" >&2
|
||||
exit 1
|
||||
;;
|
||||
esac
|
||||
|
|
|
@ -54,6 +54,7 @@ __user foobar --uid 1001 --shell /bin/zsh --home /home/foobar
|
|||
SEE ALSO
|
||||
--------
|
||||
- cdist-type(7)
|
||||
- usermod(8) or pw(8)
|
||||
|
||||
|
||||
COPYING
|
||||
|
|
|
@ -79,7 +79,6 @@ class ConfigInstall(object):
|
|||
|
||||
def stage_prepare(self):
|
||||
"""Do everything for a deploy, minus the actual code stage"""
|
||||
self.local.link_emulator(self.context.exec_path)
|
||||
self.explorer.run_global_explorers(self.local.global_explorer_out_path)
|
||||
self.manifest.run_initial_manifest(self.context.initial_manifest)
|
||||
|
||||
|
|
|
@ -1,7 +1,7 @@
|
|||
#!/usr/bin/env python3
|
||||
# -*- coding: utf-8 -*-
|
||||
#
|
||||
# 2010-2011 Nico Schottelius (nico-cdist at schottelius.org)
|
||||
# 2010-2012 Nico Schottelius (nico-cdist at schottelius.org)
|
||||
#
|
||||
# This file is part of cdist.
|
||||
#
|
||||
|
@ -38,7 +38,7 @@ class Context(object):
|
|||
remote_copy,
|
||||
remote_exec,
|
||||
initial_manifest=False,
|
||||
conf_dirs=[],
|
||||
add_conf_dirs=[],
|
||||
exec_path=sys.argv[0],
|
||||
debug=False):
|
||||
|
||||
|
@ -59,7 +59,7 @@ class Context(object):
|
|||
self.temp_dir = tempfile.mkdtemp()
|
||||
self.out_path = os.path.join(self.temp_dir, "out")
|
||||
|
||||
self.local = local.Local(self.target_host, conf_dirs, self.out_path)
|
||||
self.local = local.Local(self.target_host, self.out_path, self.exec_path, add_conf_dirs=add_conf_dirs)
|
||||
|
||||
self.initial_manifest = (initial_manifest or
|
||||
os.path.join(self.local.manifest_path, "init"))
|
||||
|
@ -87,6 +87,6 @@ class Context(object):
|
|||
def filter(self, record):
|
||||
"""Add hostname to logs via logging Filter"""
|
||||
|
||||
record.msg = self.target_host + ": " + record.msg
|
||||
record.msg = self.target_host + ": " + str(record.msg)
|
||||
|
||||
return True
|
||||
|
|
|
@ -24,7 +24,6 @@ import os
|
|||
|
||||
import cdist
|
||||
|
||||
|
||||
class NoSuchTypeError(cdist.Error):
|
||||
def __init__(self, type_path, type_absolute_path):
|
||||
self.type_path = type_path
|
||||
|
|
|
@ -1,7 +1,7 @@
|
|||
# -*- coding: utf-8 -*-
|
||||
#
|
||||
# 2011 Steven Armstrong (steven-cdist at armstrong.cc)
|
||||
# 2011 Nico Schottelius (nico-cdist at schottelius.org)
|
||||
# 2011-2012 Nico Schottelius (nico-cdist at schottelius.org)
|
||||
#
|
||||
# This file is part of cdist.
|
||||
#
|
||||
|
@ -57,6 +57,29 @@ type manifeste is:
|
|||
creates: new objects through type emulator
|
||||
'''
|
||||
|
||||
class NoInitialManifestError(cdist.Error):
|
||||
"""
|
||||
Display missing initial manifest:
|
||||
- Display path if user given
|
||||
- try to resolve link if it is a link
|
||||
- Omit path if default (is a linked path in temp directory without
|
||||
much help)
|
||||
"""
|
||||
|
||||
def __init__(self, manifest_path, user_supplied):
|
||||
msg_header = "Initial manifest missing"
|
||||
|
||||
if user_supplied:
|
||||
if os.path.islink(manifest_path):
|
||||
self.message = "%s: %s -> %s" % (msg_header, manifest_path, os.path.realpath(manifest_path))
|
||||
else:
|
||||
self.message = "%s: %s" % (msg_header, manifest_path)
|
||||
else:
|
||||
self.message = "%s" % (msg_header)
|
||||
|
||||
def __str__(self):
|
||||
return repr(self.message)
|
||||
|
||||
|
||||
class Manifest(object):
|
||||
"""Executes cdist manifests.
|
||||
|
@ -70,33 +93,52 @@ class Manifest(object):
|
|||
|
||||
self.env = {
|
||||
'PATH': "%s:%s" % (self.local.bin_path, os.environ['PATH']),
|
||||
'__target_host': self.target_host,
|
||||
'__global': self.local.out_path,
|
||||
'__cdist_type_base_path': self.local.type_path, # for use in type emulator
|
||||
'__global': self.local.out_path,
|
||||
'__target_host': self.target_host,
|
||||
}
|
||||
if self.log.getEffectiveLevel() == logging.DEBUG:
|
||||
self.env.update({'__cdist_debug': "yes" })
|
||||
|
||||
|
||||
def run_initial_manifest(self, script):
|
||||
def env_initial_manifest(self, initial_manifest):
|
||||
env = os.environ.copy()
|
||||
env.update(self.env)
|
||||
env['__cdist_manifest'] = initial_manifest
|
||||
env['__manifest'] = self.local.manifest_path
|
||||
env['__cdist_manifest'] = script
|
||||
self.log.info("Running initial manifest " + self.local.manifest_path)
|
||||
self.local.run_script(script, env=env)
|
||||
|
||||
def run_type_manifest(self, cdist_object):
|
||||
script = os.path.join(self.local.type_path, cdist_object.cdist_type.manifest_path)
|
||||
if os.path.isfile(script):
|
||||
return env
|
||||
|
||||
def run_initial_manifest(self, initial_manifest=None):
|
||||
if not initial_manifest:
|
||||
initial_manifest = self.local.initial_manifest
|
||||
user_supplied = False
|
||||
else:
|
||||
user_supplied = True
|
||||
|
||||
self.log.info("Running initial manifest " + initial_manifest)
|
||||
|
||||
if not os.path.isfile(initial_manifest):
|
||||
raise NoInitialManifestError(initial_manifest, user_supplied)
|
||||
|
||||
self.local.run_script(initial_manifest, env=self.env_initial_manifest(initial_manifest))
|
||||
|
||||
def env_type_manifest(self, cdist_object):
|
||||
type_manifest = os.path.join(self.local.type_path, cdist_object.cdist_type.manifest_path)
|
||||
env = os.environ.copy()
|
||||
env.update(self.env)
|
||||
env.update({
|
||||
'__cdist_manifest': type_manifest,
|
||||
'__manifest': self.local.manifest_path,
|
||||
'__object': cdist_object.absolute_path,
|
||||
'__object_id': cdist_object.object_id,
|
||||
'__object_name': cdist_object.name,
|
||||
'__type': cdist_object.cdist_type.absolute_path,
|
||||
'__cdist_manifest': script,
|
||||
})
|
||||
self.local.run_script(script, env=env)
|
||||
|
||||
return env
|
||||
|
||||
def run_type_manifest(self, cdist_object):
|
||||
type_manifest = os.path.join(self.local.type_path, cdist_object.cdist_type.manifest_path)
|
||||
if os.path.isfile(type_manifest):
|
||||
self.local.run_script(type_manifest, env=self.env_type_manifest(cdist_object))
|
||||
|
|
|
@ -29,16 +29,19 @@ import cdist
|
|||
from cdist import core
|
||||
|
||||
class Emulator(object):
|
||||
def __init__(self, argv):
|
||||
def __init__(self, argv, stdin=sys.stdin, env=os.environ):
|
||||
self.argv = argv
|
||||
self.stdin = stdin
|
||||
self.env = env
|
||||
|
||||
self.object_id = False
|
||||
|
||||
self.global_path = os.environ['__global']
|
||||
self.target_host = os.environ['__target_host']
|
||||
self.global_path = self.env['__global']
|
||||
self.target_host = self.env['__target_host']
|
||||
|
||||
# Internally only
|
||||
self.object_source = os.environ['__cdist_manifest']
|
||||
self.type_base_path = os.environ['__cdist_type_base_path']
|
||||
self.object_source = self.env['__cdist_manifest']
|
||||
self.type_base_path = self.env['__cdist_type_base_path']
|
||||
|
||||
self.object_base_path = os.path.join(self.global_path, "object")
|
||||
|
||||
|
@ -62,7 +65,7 @@ class Emulator(object):
|
|||
def run(self):
|
||||
"""Emulate type commands (i.e. __file and co)"""
|
||||
|
||||
if '__install' in os.environ:
|
||||
if '__install' in self.env:
|
||||
if not self.cdist_type.is_install:
|
||||
self.log.debug("Running in install mode, ignoring non install type")
|
||||
return True
|
||||
|
@ -79,7 +82,7 @@ class Emulator(object):
|
|||
logformat = '%(levelname)s: %(message)s'
|
||||
logging.basicConfig(format=logformat)
|
||||
|
||||
if '__cdist_debug' in os.environ:
|
||||
if '__cdist_debug' in self.env:
|
||||
logging.root.setLevel(logging.DEBUG)
|
||||
else:
|
||||
logging.root.setLevel(logging.INFO)
|
||||
|
@ -146,32 +149,27 @@ class Emulator(object):
|
|||
# Record / Append source
|
||||
self.cdist_object.source.append(self.object_source)
|
||||
|
||||
chunk_size = 8192
|
||||
def _read_stdin(self):
|
||||
return sys.stdin.buffer.read(self.chunk_size)
|
||||
def save_stdin(self):
|
||||
"""If something is written to stdin, save it in the object as
|
||||
$__object/stdin so it can be accessed in manifest and gencode-*
|
||||
scripts.
|
||||
"""
|
||||
if not sys.stdin.isatty():
|
||||
if not self.stdin.isatty():
|
||||
try:
|
||||
# go directly to file instead of using CdistObject's api
|
||||
# as that does not support streaming
|
||||
# FIXME: no streaming needed anymore - use a raw file (not yet there?)
|
||||
path = os.path.join(self.cdist_object.absolute_path, 'stdin')
|
||||
with open(path, 'wb') as fd:
|
||||
chunk = self._read_stdin()
|
||||
while chunk:
|
||||
fd.write(chunk)
|
||||
chunk = self._read_stdin()
|
||||
with open(path, 'w') as fd:
|
||||
fd.write(self.stdin.read())
|
||||
except EnvironmentError as e:
|
||||
raise cdist.Error('Failed to read from stdin: %s' % e)
|
||||
|
||||
def record_requirements(self):
|
||||
"""record requirements"""
|
||||
|
||||
if "require" in os.environ:
|
||||
requirements = os.environ['require']
|
||||
if "require" in self.env:
|
||||
requirements = self.env['require']
|
||||
self.log.debug("reqs = " + requirements)
|
||||
for requirement in requirements.split(" "):
|
||||
# Ignore empty fields - probably the only field anyway
|
||||
|
@ -191,7 +189,7 @@ class Emulator(object):
|
|||
"""An object shall automatically depend on all objects that it defined in it's type manifest.
|
||||
"""
|
||||
# __object_name is the name of the object whose type manifest is currently executed
|
||||
__object_name = os.environ.get('__object_name', None)
|
||||
__object_name = self.env.get('__object_name', None)
|
||||
if __object_name:
|
||||
# The object whose type manifest is currently run
|
||||
parent = self.cdist_object.object_from_name(__object_name)
|
||||
|
|
|
@ -37,24 +37,30 @@ class Local(object):
|
|||
Directly accessing the local side from python code is a bug.
|
||||
|
||||
"""
|
||||
def __init__(self, target_host, conf_dirs, out_path, cache_dir=None):
|
||||
def __init__(self, target_host, out_path, exec_path, add_conf_dirs=[], cache_dir=None):
|
||||
|
||||
self.target_host = target_host
|
||||
self.add_conf_dirs = conf_dirs
|
||||
self.out_path = out_path
|
||||
self.exec_path = exec_path
|
||||
|
||||
self._add_conf_dirs = add_conf_dirs
|
||||
|
||||
self._init_log()
|
||||
self._init_permissions()
|
||||
self._init_home_dir()
|
||||
self._init_paths()
|
||||
self._init_cache_dir(cache_dir)
|
||||
self._init_conf_dirs()
|
||||
|
||||
def _init_home_dir(self):
|
||||
@property
|
||||
def dist_conf_dir(self):
|
||||
return os.path.abspath(os.path.join(os.path.dirname(cdist.__file__), "conf"))
|
||||
|
||||
@property
|
||||
def home_dir(self):
|
||||
if 'HOME' in os.environ:
|
||||
self.home_dir = os.environ['HOME']
|
||||
return os.path.join(os.environ['HOME'], ".cdist")
|
||||
else:
|
||||
self.home_dir = None
|
||||
return None
|
||||
|
||||
def _init_log(self):
|
||||
self.log = logging.getLogger(self.target_host)
|
||||
|
@ -79,17 +85,16 @@ class Local(object):
|
|||
self.conf_dirs = []
|
||||
|
||||
# Comes with the distribution
|
||||
system_conf_dir = os.path.join(os.path.dirname(cdist.__file__), "conf")
|
||||
system_conf_dir = os.path.abspath(os.path.join(os.path.dirname(cdist.__file__), "conf"))
|
||||
self.conf_dirs.append(system_conf_dir)
|
||||
|
||||
# Is the default place for user created explorer, type and manifest
|
||||
if self.home_dir:
|
||||
user_conf_dir = os.path.join(self.home_dir, ".cdist")
|
||||
self.conf_dirs.append(user_conf_dir)
|
||||
self.conf_dirs.append(self.home_dir)
|
||||
|
||||
# Add user supplied directories
|
||||
if self.add_conf_dirs:
|
||||
self.conf_dirs.extend(self.add_conf_dirs)
|
||||
if self._add_conf_dirs:
|
||||
self.conf_dirs.extend(self._add_conf_dirs)
|
||||
|
||||
def _init_cache_dir(self, cache_dir):
|
||||
if cache_dir:
|
||||
|
@ -146,16 +151,16 @@ class Local(object):
|
|||
def create_files_dirs(self):
|
||||
self._create_context_dirs()
|
||||
self._create_conf_path_and_link_conf_dirs()
|
||||
self._link_types_for_emulator()
|
||||
|
||||
def _create_context_dirs(self):
|
||||
self.mkdir(self.out_path)
|
||||
|
||||
self.mkdir(self.conf_path)
|
||||
self.mkdir(self.global_explorer_out_path)
|
||||
self.mkdir(self.bin_path)
|
||||
|
||||
def _create_conf_path_and_link_conf_dirs(self):
|
||||
self.mkdir(self.conf_path)
|
||||
|
||||
# Link destination directories
|
||||
for sub_dir in [ "explorer", "manifest", "type" ]:
|
||||
self.mkdir(os.path.join(self.conf_path, sub_dir))
|
||||
|
@ -185,9 +190,9 @@ class Local(object):
|
|||
except OSError as e:
|
||||
raise cdist.Error("Linking %s %s to %s failed: %s" % (sub_dir, src, dst, e.__str__()))
|
||||
|
||||
def link_emulator(self, exec_path):
|
||||
def _link_types_for_emulator(self):
|
||||
"""Link emulator to types"""
|
||||
src = os.path.abspath(exec_path)
|
||||
src = os.path.abspath(self.exec_path)
|
||||
for cdist_type in core.CdistType.list_types(self.type_path):
|
||||
dst = os.path.join(self.bin_path, cdist_type.name)
|
||||
self.log.debug("Linking emulator: %s to %s", src, dst)
|
||||
|
|
|
@ -1,7 +1,7 @@
|
|||
# -*- coding: utf-8 -*-
|
||||
#
|
||||
# 2011 Steven Armstrong (steven-cdist at armstrong.cc)
|
||||
# 2011 Nico Schottelius (nico-cdist at schottelius.org)
|
||||
# 2011-2012 Nico Schottelius (nico-cdist at schottelius.org)
|
||||
#
|
||||
# This file is part of cdist.
|
||||
#
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
# -*- coding: utf-8 -*-
|
||||
#
|
||||
# 2011 Nico Schottelius (nico-cdist at schottelius.org)
|
||||
# 2011-2012 Nico Schottelius (nico-cdist at schottelius.org)
|
||||
#
|
||||
# This file is part of cdist.
|
||||
#
|
||||
|
@ -24,13 +24,19 @@ import unittest
|
|||
import tempfile
|
||||
|
||||
cdist_base_path = os.path.abspath(
|
||||
os.path.join(os.path.dirname(os.path.realpath(__file__)), "../../../"))
|
||||
os.path.join(os.path.dirname(os.path.realpath(__file__)), "../../"))
|
||||
|
||||
cdist_exec_path = os.path.join(cdist_base_path, "bin/cdist")
|
||||
cdist_exec_path = os.path.join(cdist_base_path, "scripts/cdist")
|
||||
|
||||
global_fixtures_dir = os.path.abspath(os.path.join(os.path.dirname(__file__), "fixtures"))
|
||||
|
||||
class CdistTestCase(unittest.TestCase):
|
||||
|
||||
remote_exec = os.path.join(global_fixtures_dir, "remote", "exec")
|
||||
remote_copy = os.path.join(global_fixtures_dir, "remote", "copy")
|
||||
|
||||
target_host = 'cdisttesthost'
|
||||
|
||||
def mkdtemp(self, **kwargs):
|
||||
return tempfile.mkdtemp(prefix='tmp.cdist.test.', **kwargs)
|
||||
|
||||
|
|
|
@ -1,6 +1,7 @@
|
|||
# -*- coding: utf-8 -*-
|
||||
#
|
||||
# 2010-2011 Steven Armstrong (steven-cdist at armstrong.cc)
|
||||
# 2012 Nico Schottelius (nico-cdist at schottelius.org)
|
||||
#
|
||||
# This file is part of cdist.
|
||||
#
|
||||
|
@ -34,23 +35,29 @@ import cdist.context
|
|||
import os.path as op
|
||||
my_dir = op.abspath(op.dirname(__file__))
|
||||
fixtures = op.join(my_dir, 'fixtures')
|
||||
local_base_path = fixtures
|
||||
|
||||
add_conf_dir = op.join(fixtures, 'conf')
|
||||
|
||||
class AutorequireTestCase(test.CdistTestCase):
|
||||
|
||||
def setUp(self):
|
||||
self.orig_environ = os.environ
|
||||
os.environ = os.environ.copy()
|
||||
self.target_host = 'localhost'
|
||||
self.temp_dir = self.mkdtemp()
|
||||
os.environ['__cdist_out_dir'] = self.temp_dir
|
||||
|
||||
self.out_dir = os.path.join(self.temp_dir, "out")
|
||||
self.remote_out_dir = os.path.join(self.temp_dir, "remote")
|
||||
|
||||
os.environ['__cdist_out_dir'] = self.out_dir
|
||||
os.environ['__cdist_remote_out_dir'] = self.remote_out_dir
|
||||
|
||||
self.context = cdist.context.Context(
|
||||
target_host=self.target_host,
|
||||
base_path=local_base_path,
|
||||
remote_copy=self.remote_copy,
|
||||
remote_exec=self.remote_exec,
|
||||
add_conf_dirs=[add_conf_dir],
|
||||
exec_path=test.cdist_exec_path,
|
||||
debug=False)
|
||||
|
||||
self.config = config.Config(self.context)
|
||||
|
||||
def tearDown(self):
|
||||
|
|
|
@ -1,6 +1,7 @@
|
|||
# -*- coding: utf-8 -*-
|
||||
#
|
||||
# 2011 Steven Armstrong (steven-cdist at armstrong.cc)
|
||||
# 2012 Nico Schottelius (nico-cdist at schottelius.org)
|
||||
#
|
||||
# This file is part of cdist.
|
||||
#
|
||||
|
@ -19,10 +20,9 @@
|
|||
#
|
||||
#
|
||||
|
||||
import getpass
|
||||
import os
|
||||
import shutil
|
||||
import getpass
|
||||
import logging
|
||||
|
||||
import cdist
|
||||
from cdist import core
|
||||
|
@ -34,23 +34,27 @@ from cdist.core import code
|
|||
import os.path as op
|
||||
my_dir = op.abspath(op.dirname(__file__))
|
||||
fixtures = op.join(my_dir, 'fixtures')
|
||||
local_base_path = fixtures
|
||||
conf_dir = op.join(fixtures, 'conf')
|
||||
|
||||
class CodeTestCase(test.CdistTestCase):
|
||||
|
||||
def setUp(self):
|
||||
self.target_host = 'localhost'
|
||||
|
||||
self.local_base_path = local_base_path
|
||||
self.out_path = self.mkdtemp()
|
||||
self.local = local.Local(self.target_host, self.local_base_path, self.out_path)
|
||||
self.local.create_directories()
|
||||
|
||||
self.local = local.Local(
|
||||
target_host=self.target_host,
|
||||
out_path = self.out_path,
|
||||
exec_path = cdist.test.cdist_exec_path,
|
||||
add_conf_dirs=[conf_dir])
|
||||
self.local.create_files_dirs()
|
||||
|
||||
self.remote_base_path = self.mkdtemp()
|
||||
self.user = getpass.getuser()
|
||||
remote_exec = "ssh -o User=%s -q" % self.user
|
||||
remote_copy = "scp -o User=%s -q" % self.user
|
||||
remote_exec = self.remote_exec
|
||||
remote_copy = self.remote_copy
|
||||
self.remote = remote.Remote(self.target_host, self.remote_base_path, remote_exec, remote_copy)
|
||||
self.remote.create_files_dirs()
|
||||
|
||||
self.code = code.Code(self.target_host, self.local, self.remote)
|
||||
|
||||
|
@ -58,8 +62,6 @@ class CodeTestCase(test.CdistTestCase):
|
|||
self.cdist_object = core.CdistObject(self.cdist_type, self.local.object_path, 'whatever')
|
||||
self.cdist_object.create()
|
||||
|
||||
self.log = logging.getLogger("cdist")
|
||||
|
||||
def tearDown(self):
|
||||
shutil.rmtree(self.out_path)
|
||||
shutil.rmtree(self.remote_base_path)
|
||||
|
|
|
@ -1,6 +1,7 @@
|
|||
# -*- coding: utf-8 -*-
|
||||
#
|
||||
# 2010-2011 Steven Armstrong (steven-cdist at armstrong.cc)
|
||||
# 2012 Nico Schottelius (nico-cdist at schottelius.org)
|
||||
#
|
||||
# This file is part of cdist.
|
||||
#
|
||||
|
@ -19,6 +20,7 @@
|
|||
#
|
||||
#
|
||||
|
||||
import io
|
||||
import os
|
||||
import shutil
|
||||
import string
|
||||
|
@ -33,89 +35,80 @@ from cdist import core
|
|||
from cdist import config
|
||||
import cdist.context
|
||||
|
||||
local_base_path = test.cdist_base_path
|
||||
import os.path as op
|
||||
my_dir = op.abspath(op.dirname(__file__))
|
||||
fixtures = op.join(my_dir, 'fixtures')
|
||||
conf_dir = op.join(fixtures, 'conf')
|
||||
|
||||
class EmulatorTestCase(test.CdistTestCase):
|
||||
|
||||
def setUp(self):
|
||||
self.orig_environ = os.environ
|
||||
os.environ = os.environ.copy()
|
||||
self.temp_dir = self.mkdtemp()
|
||||
handle, self.script = self.mkstemp(dir=self.temp_dir)
|
||||
os.close(handle)
|
||||
self.target_host = 'localhost'
|
||||
out_path = self.temp_dir
|
||||
self.local = local.Local(self.target_host, local_base_path, out_path)
|
||||
self.local.create_directories()
|
||||
self.env = {
|
||||
'PATH': "%s:%s" % (self.local.bin_path, os.environ['PATH']),
|
||||
'__target_host': self.target_host,
|
||||
'__global': self.local.out_path,
|
||||
'__cdist_type_base_path': self.local.type_path, # for use in type emulator
|
||||
'__manifest': self.local.manifest_path,
|
||||
'__cdist_manifest': self.script,
|
||||
}
|
||||
|
||||
self.local = local.Local(
|
||||
target_host=self.target_host,
|
||||
out_path=out_path,
|
||||
exec_path=test.cdist_exec_path,
|
||||
add_conf_dirs=[conf_dir])
|
||||
self.local.create_files_dirs()
|
||||
|
||||
self.manifest = core.Manifest(self.target_host, self.local)
|
||||
self.env = self.manifest.env_initial_manifest(self.script)
|
||||
|
||||
def tearDown(self):
|
||||
os.environ = self.orig_environ
|
||||
shutil.rmtree(self.temp_dir)
|
||||
|
||||
def test_nonexistent_type_exec(self):
|
||||
argv = ['__does-not-exist']
|
||||
os.environ.update(self.env)
|
||||
self.assertRaises(core.NoSuchTypeError, emulator.Emulator, argv)
|
||||
self.assertRaises(core.NoSuchTypeError, emulator.Emulator, argv, env=self.env)
|
||||
|
||||
def test_nonexistent_type_requirement(self):
|
||||
argv = ['__file', '/tmp/foobar']
|
||||
os.environ.update(self.env)
|
||||
os.environ['require'] = '__does-not-exist/some-id'
|
||||
emu = emulator.Emulator(argv)
|
||||
self.env['require'] = '__does-not-exist/some-id'
|
||||
emu = emulator.Emulator(argv, env=self.env)
|
||||
self.assertRaises(core.NoSuchTypeError, emu.run)
|
||||
|
||||
def test_illegal_object_id_requirement(self):
|
||||
argv = ['__file', '/tmp/foobar']
|
||||
os.environ.update(self.env)
|
||||
os.environ['require'] = '__file/bad/id/with/.cdist/inside'
|
||||
emu = emulator.Emulator(argv)
|
||||
self.env['require'] = '__file/bad/id/with/.cdist/inside'
|
||||
emu = emulator.Emulator(argv, env=self.env)
|
||||
self.assertRaises(core.IllegalObjectIdError, emu.run)
|
||||
|
||||
def test_missing_object_id_requirement(self):
|
||||
argv = ['__file', '/tmp/foobar']
|
||||
os.environ.update(self.env)
|
||||
os.environ['require'] = '__file'
|
||||
emu = emulator.Emulator(argv)
|
||||
self.env['require'] = '__file'
|
||||
emu = emulator.Emulator(argv, env=self.env)
|
||||
self.assertRaises(core.IllegalObjectIdError, emu.run)
|
||||
|
||||
def test_singleton_object_requirement(self):
|
||||
argv = ['__file', '/tmp/foobar']
|
||||
os.environ.update(self.env)
|
||||
os.environ['require'] = '__issue'
|
||||
emu = emulator.Emulator(argv)
|
||||
self.env['require'] = '__issue'
|
||||
emu = emulator.Emulator(argv, env=self.env)
|
||||
emu.run()
|
||||
# if we get here all is fine
|
||||
|
||||
def test_requirement_pattern(self):
|
||||
argv = ['__file', '/tmp/foobar']
|
||||
os.environ.update(self.env)
|
||||
os.environ['require'] = '__file/etc/*'
|
||||
emu = emulator.Emulator(argv)
|
||||
self.env['require'] = '__file/etc/*'
|
||||
emu = emulator.Emulator(argv, env=self.env)
|
||||
# if we get here all is fine
|
||||
|
||||
|
||||
import os.path as op
|
||||
my_dir = op.abspath(op.dirname(__file__))
|
||||
fixtures = op.join(my_dir, 'fixtures')
|
||||
|
||||
class AutoRequireEmulatorTestCase(test.CdistTestCase):
|
||||
|
||||
def setUp(self):
|
||||
self.temp_dir = self.mkdtemp()
|
||||
self.target_host = 'localhost'
|
||||
out_path = self.temp_dir
|
||||
_local_base_path = fixtures
|
||||
self.local = local.Local(self.target_host, _local_base_path, out_path)
|
||||
self.local.create_directories()
|
||||
self.local.link_emulator(cdist.test.cdist_exec_path)
|
||||
out_path = os.path.join(self.temp_dir, "out")
|
||||
|
||||
self.local = local.Local(
|
||||
target_host=self.target_host,
|
||||
out_path=out_path,
|
||||
exec_path=test.cdist_exec_path,
|
||||
add_conf_dirs=[conf_dir])
|
||||
self.local.create_files_dirs()
|
||||
self.manifest = core.Manifest(self.target_host, self.local)
|
||||
|
||||
def tearDown(self):
|
||||
|
@ -135,22 +128,19 @@ class ArgumentsTestCase(test.CdistTestCase):
|
|||
|
||||
def setUp(self):
|
||||
self.temp_dir = self.mkdtemp()
|
||||
self.target_host = 'localhost'
|
||||
out_path = self.temp_dir
|
||||
handle, self.script = self.mkstemp(dir=self.temp_dir)
|
||||
os.close(handle)
|
||||
_local_base_path = fixtures
|
||||
self.local = local.Local(self.target_host, _local_base_path, out_path)
|
||||
self.local.create_directories()
|
||||
self.local.link_emulator(test.cdist_exec_path)
|
||||
self.env = {
|
||||
'PATH': "%s:%s" % (self.local.bin_path, os.environ['PATH']),
|
||||
'__target_host': self.target_host,
|
||||
'__global': self.local.out_path,
|
||||
'__cdist_type_base_path': self.local.type_path, # for use in type emulator
|
||||
'__manifest': self.local.manifest_path,
|
||||
'__cdist_manifest': self.script,
|
||||
}
|
||||
|
||||
self.local = local.Local(
|
||||
target_host=self.target_host,
|
||||
out_path=out_path,
|
||||
exec_path=test.cdist_exec_path,
|
||||
add_conf_dirs=[conf_dir])
|
||||
self.local.create_files_dirs()
|
||||
|
||||
self.manifest = core.Manifest(self.target_host, self.local)
|
||||
self.env = self.manifest.env_initial_manifest(self.script)
|
||||
|
||||
def tearDown(self):
|
||||
shutil.rmtree(self.temp_dir)
|
||||
|
@ -227,40 +217,59 @@ class StdinTestCase(test.CdistTestCase):
|
|||
def setUp(self):
|
||||
self.orig_environ = os.environ
|
||||
os.environ = os.environ.copy()
|
||||
self.target_host = 'localhost'
|
||||
self.temp_dir = self.mkdtemp()
|
||||
os.environ['__cdist_out_dir'] = self.temp_dir
|
||||
local_base_path = fixtures
|
||||
|
||||
self.context = cdist.context.Context(
|
||||
self.temp_dir = self.mkdtemp()
|
||||
out_path = os.path.join(self.temp_dir, "out")
|
||||
|
||||
self.local = local.Local(
|
||||
target_host=self.target_host,
|
||||
remote_copy='scp -o User=root -q',
|
||||
remote_exec='ssh -o User=root -q',
|
||||
base_path=local_base_path,
|
||||
out_path=out_path,
|
||||
exec_path=test.cdist_exec_path,
|
||||
debug=False)
|
||||
self.config = config.Config(self.context)
|
||||
add_conf_dirs=[conf_dir])
|
||||
|
||||
self.local.create_files_dirs()
|
||||
|
||||
self.manifest = core.Manifest(
|
||||
target_host=self.target_host,
|
||||
local = self.local)
|
||||
|
||||
def tearDown(self):
|
||||
os.environ = self.orig_environ
|
||||
shutil.rmtree(self.temp_dir)
|
||||
|
||||
def test_file_from_stdin(self):
|
||||
handle, destination = self.mkstemp(dir=self.temp_dir)
|
||||
os.close(handle)
|
||||
source_handle, source = self.mkstemp(dir=self.temp_dir)
|
||||
candidates = string.ascii_letters+string.digits
|
||||
with os.fdopen(source_handle, 'w') as fd:
|
||||
for x in range(100):
|
||||
fd.write(''.join(random.sample(candidates, len(candidates))))
|
||||
"""
|
||||
Test whether reading from stdin works
|
||||
"""
|
||||
|
||||
handle, initial_manifest = self.mkstemp(dir=self.temp_dir)
|
||||
with os.fdopen(handle, 'w') as fd:
|
||||
fd.write('__file_from_stdin %s --source %s\n' % (destination, source))
|
||||
self.context.initial_manifest = initial_manifest
|
||||
self.config.stage_prepare()
|
||||
######################################################################
|
||||
# Create string with random content
|
||||
random_string = str(random.sample(range(1000), 800))
|
||||
random_buffer = io.BytesIO(bytes(random_string, 'utf-8'))
|
||||
|
||||
cdist_type = core.CdistType(self.config.local.type_path, '__file')
|
||||
cdist_object = core.CdistObject(cdist_type, self.config.local.object_path, destination)
|
||||
# Test weither stdin has been stored correctly
|
||||
self.assertTrue(filecmp.cmp(source, os.path.join(cdist_object.absolute_path, 'stdin')))
|
||||
######################################################################
|
||||
# Prepare required args and environment for emulator
|
||||
type_name = '__file'
|
||||
object_id = "cdist-test-id"
|
||||
argv = [type_name, object_id]
|
||||
|
||||
initial_manifest_path = "/cdist-test/path/that/does/not/exist"
|
||||
env = self.manifest.env_initial_manifest(initial_manifest_path)
|
||||
|
||||
######################################################################
|
||||
# Create path where stdin should reside at
|
||||
cdist_type = core.CdistType(self.local.type_path, type_name)
|
||||
cdist_object = core.CdistObject(cdist_type, self.local.object_path, object_id)
|
||||
stdin_out_path = os.path.join(cdist_object.absolute_path, 'stdin')
|
||||
|
||||
######################################################################
|
||||
# Run emulator
|
||||
emu = emulator.Emulator(argv, stdin=random_buffer, env=env)
|
||||
emu.run()
|
||||
|
||||
######################################################################
|
||||
# Read where emulator should have placed stdin
|
||||
with open(stdin_out_path, 'r') as fd:
|
||||
stdin_saved_by_emulator = fd.read()
|
||||
|
||||
self.assertEqual(random_string, stdin_saved_by_emulator)
|
||||
|
|
|
@ -1 +0,0 @@
|
|||
../../../../../conf/type/__file
|
|
@ -1,6 +1,7 @@
|
|||
# -*- coding: utf-8 -*-
|
||||
#
|
||||
# 2010-2011 Steven Armstrong (steven-cdist at armstrong.cc)
|
||||
# 2012 Nico Schottelius (nico-cdist at schottelius.org)
|
||||
#
|
||||
# This file is part of cdist.
|
||||
#
|
||||
|
@ -25,9 +26,6 @@ import shutil
|
|||
import string
|
||||
import random
|
||||
|
||||
#import logging
|
||||
#logging.basicConfig(level=logging.DEBUG, format='%(levelname)s: %(message)s')
|
||||
|
||||
import cdist
|
||||
from cdist import test
|
||||
from cdist.exec import local
|
||||
|
@ -35,17 +33,23 @@ from cdist.exec import local
|
|||
import os.path as op
|
||||
my_dir = op.abspath(op.dirname(__file__))
|
||||
fixtures = op.join(my_dir, 'fixtures')
|
||||
local_base_path = fixtures
|
||||
|
||||
conf_dir = op.join(fixtures, "conf")
|
||||
|
||||
class LocalTestCase(test.CdistTestCase):
|
||||
|
||||
def setUp(self):
|
||||
self.temp_dir = self.mkdtemp()
|
||||
|
||||
target_host = 'localhost'
|
||||
self.temp_dir = self.mkdtemp()
|
||||
self.out_path = self.temp_dir
|
||||
self.base_path = local_base_path
|
||||
self.local = local.Local(target_host, self.base_path, self.out_path)
|
||||
|
||||
self.local = local.Local(
|
||||
target_host=target_host,
|
||||
out_path=self.out_path,
|
||||
exec_path=test.cdist_exec_path
|
||||
)
|
||||
|
||||
self.home_dir = os.path.join(os.environ['HOME'], ".cdist")
|
||||
|
||||
def tearDown(self):
|
||||
shutil.rmtree(self.temp_dir)
|
||||
|
@ -53,19 +57,10 @@ class LocalTestCase(test.CdistTestCase):
|
|||
### test api
|
||||
|
||||
def test_cache_path(self):
|
||||
self.assertEqual(self.local.cache_path, os.path.join(self.base_path, "cache"))
|
||||
self.assertEqual(self.local.cache_path, os.path.join(self.home_dir, "cache"))
|
||||
|
||||
def test_conf_path(self):
|
||||
self.assertEqual(self.local.conf_path, os.path.join(self.base_path, "conf"))
|
||||
|
||||
def test_global_explorer_path(self):
|
||||
self.assertEqual(self.local.global_explorer_path, os.path.join(self.base_path, "conf", "explorer"))
|
||||
|
||||
def test_manifest_path(self):
|
||||
self.assertEqual(self.local.manifest_path, os.path.join(self.base_path, "conf", "manifest"))
|
||||
|
||||
def test_type_path(self):
|
||||
self.assertEqual(self.local.type_path, os.path.join(self.base_path, "conf", "type"))
|
||||
self.assertEqual(self.local.conf_path, os.path.join(self.out_path, "conf"))
|
||||
|
||||
def test_out_path(self):
|
||||
self.assertEqual(self.local.out_path, self.out_path)
|
||||
|
@ -81,6 +76,53 @@ class LocalTestCase(test.CdistTestCase):
|
|||
|
||||
### /test api
|
||||
|
||||
### test internal implementation
|
||||
|
||||
def test_global_explorer_path(self):
|
||||
self.assertEqual(self.local.global_explorer_path, os.path.join(self.out_path, "conf", "explorer"))
|
||||
|
||||
def test_manifest_path(self):
|
||||
self.assertEqual(self.local.manifest_path, os.path.join(self.out_path, "conf", "manifest"))
|
||||
|
||||
def test_type_path(self):
|
||||
self.assertEqual(self.local.type_path, os.path.join(self.out_path, "conf", "type"))
|
||||
|
||||
def test_dist_conf_dir_linking(self):
|
||||
"""Ensure that links are correctly created for types included in distribution"""
|
||||
|
||||
test_type="__file"
|
||||
|
||||
link_test_local = local.Local(
|
||||
target_host='localhost',
|
||||
out_path=self.out_path,
|
||||
exec_path=test.cdist_exec_path,
|
||||
)
|
||||
|
||||
link_test_local._create_conf_path_and_link_conf_dirs()
|
||||
|
||||
our_type_dir = os.path.join(link_test_local.type_path, test_type)
|
||||
|
||||
self.assertTrue(os.path.isdir(our_type_dir))
|
||||
|
||||
def test_added_conf_dir_linking(self):
|
||||
"""Ensure that links are correctly created for types in added conf directories"""
|
||||
|
||||
test_type="__cdist_test_type"
|
||||
|
||||
link_test_local = local.Local(
|
||||
target_host='localhost',
|
||||
out_path=self.out_path,
|
||||
exec_path=test.cdist_exec_path,
|
||||
add_conf_dirs=[conf_dir]
|
||||
)
|
||||
|
||||
link_test_local._create_conf_path_and_link_conf_dirs()
|
||||
|
||||
our_type_dir = os.path.join(link_test_local.type_path, test_type)
|
||||
|
||||
self.assertTrue(os.path.isdir(our_type_dir))
|
||||
|
||||
### other tests
|
||||
|
||||
def test_run_success(self):
|
||||
self.local.run(['/bin/true'])
|
||||
|
@ -98,7 +140,7 @@ class LocalTestCase(test.CdistTestCase):
|
|||
handle, script = self.mkstemp(dir=self.temp_dir)
|
||||
with os.fdopen(handle, "w") as fd:
|
||||
fd.writelines(["#!/bin/sh\n", "/bin/false"])
|
||||
self.assertRaises(local.LocalScriptError, self.local.run_script, script)
|
||||
self.assertRaises(cdist.Error, self.local.run_script, script)
|
||||
|
||||
def test_run_script_get_output(self):
|
||||
handle, script = self.mkstemp(dir=self.temp_dir)
|
||||
|
@ -117,7 +159,8 @@ class LocalTestCase(test.CdistTestCase):
|
|||
self.local.rmdir(temp_dir)
|
||||
self.assertFalse(os.path.isdir(temp_dir))
|
||||
|
||||
def test_create_directories(self):
|
||||
self.local.create_directories()
|
||||
def test_create_files_dirs(self):
|
||||
self.local.create_files_dirs()
|
||||
self.assertTrue(os.path.isdir(self.local.out_path))
|
||||
self.assertTrue(os.path.isdir(self.local.bin_path))
|
||||
self.assertTrue(os.path.isdir(self.local.conf_path))
|
||||
|
|
|
@ -1,7 +1,7 @@
|
|||
# -*- coding: utf-8 -*-
|
||||
#
|
||||
# 2010-2011 Steven Armstrong (steven-cdist at armstrong.cc)
|
||||
# 2011 Nico Schottelius (nico-cdist at schottelius.org)
|
||||
# 2011-2012 Nico Schottelius (nico-cdist at schottelius.org)
|
||||
#
|
||||
# This file is part of cdist.
|
||||
#
|
||||
|
@ -23,7 +23,6 @@
|
|||
import os
|
||||
import shutil
|
||||
import getpass
|
||||
import logging
|
||||
|
||||
import cdist
|
||||
from cdist import core
|
||||
|
@ -35,35 +34,45 @@ from cdist.core import explorer
|
|||
import os.path as op
|
||||
my_dir = op.abspath(op.dirname(__file__))
|
||||
fixtures = op.join(my_dir, 'fixtures')
|
||||
local_base_path = fixtures
|
||||
conf_dir = op.join(fixtures, "conf")
|
||||
|
||||
class ExplorerClassTestCase(test.CdistTestCase):
|
||||
|
||||
def setUp(self):
|
||||
self.target_host = 'localhost'
|
||||
|
||||
self.local_base_path = local_base_path
|
||||
self.out_path = self.mkdtemp()
|
||||
self.local = local.Local(self.target_host, self.local_base_path, self.out_path)
|
||||
self.local.create_directories()
|
||||
self.temp_dir = self.mkdtemp()
|
||||
self.out_path = os.path.join(self.temp_dir, "out")
|
||||
self.remote_base_path = os.path.join(self.temp_dir, "remote")
|
||||
os.makedirs(self.remote_base_path)
|
||||
|
||||
self.remote_base_path = self.mkdtemp()
|
||||
self.user = getpass.getuser()
|
||||
remote_exec = "ssh -o User=%s -q" % self.user
|
||||
remote_copy = "scp -o User=%s -q" % self.user
|
||||
self.remote = remote.Remote(self.target_host, self.remote_base_path, remote_exec, remote_copy)
|
||||
self.local = local.Local(
|
||||
target_host=self.target_host,
|
||||
out_path=self.out_path,
|
||||
exec_path=test.cdist_exec_path,
|
||||
add_conf_dirs=[conf_dir])
|
||||
|
||||
self.explorer = explorer.Explorer(self.target_host, self.local, self.remote)
|
||||
self.local.create_files_dirs()
|
||||
|
||||
self.log = logging.getLogger(self.target_host)
|
||||
self.remote = remote.Remote(
|
||||
self.target_host,
|
||||
self.remote_base_path,
|
||||
self.remote_exec,
|
||||
self.remote_copy)
|
||||
self.remote.create_files_dirs()
|
||||
|
||||
self.explorer = explorer.Explorer(
|
||||
self.target_host,
|
||||
self.local,
|
||||
self.remote)
|
||||
|
||||
def tearDown(self):
|
||||
shutil.rmtree(self.out_path)
|
||||
shutil.rmtree(self.remote_base_path)
|
||||
shutil.rmtree(self.temp_dir)
|
||||
|
||||
def test_list_global_explorer_names(self):
|
||||
expected = ['foobar', 'global']
|
||||
self.assertEqual(self.explorer.list_global_explorer_names(), expected)
|
||||
names = self.explorer.list_global_explorer_names()
|
||||
self.assertIn("foobar", names)
|
||||
self.assertIn("global", names)
|
||||
|
||||
def test_transfer_global_explorers(self):
|
||||
self.explorer.transfer_global_explorers()
|
||||
|
@ -72,14 +81,20 @@ class ExplorerClassTestCase(test.CdistTestCase):
|
|||
self.assertEqual(sorted(os.listdir(source)), sorted(os.listdir(destination)))
|
||||
|
||||
def test_run_global_explorer(self):
|
||||
"""Checkt that running ONE global explorer works"""
|
||||
self.explorer.transfer_global_explorers()
|
||||
output = self.explorer.run_global_explorer('global')
|
||||
self.assertEqual(output, 'global\n')
|
||||
|
||||
def test_run_global_explorers(self):
|
||||
"""Ensure output is created for every global explorer"""
|
||||
out_path = self.mkdtemp()
|
||||
|
||||
self.explorer.run_global_explorers(out_path)
|
||||
self.assertEqual(sorted(os.listdir(out_path)), sorted(['foobar', 'global']))
|
||||
names = sorted(self.explorer.list_global_explorer_names())
|
||||
output = sorted(os.listdir(out_path))
|
||||
|
||||
self.assertEqual(names, output)
|
||||
shutil.rmtree(out_path)
|
||||
|
||||
def test_list_type_explorer_names(self):
|
||||
|
|
1
cdist/test/fixtures/remote
vendored
Symbolic link
1
cdist/test/fixtures/remote
vendored
Symbolic link
|
@ -0,0 +1 @@
|
|||
../../../other/examples/remote/local
|
|
@ -1,6 +1,7 @@
|
|||
# -*- coding: utf-8 -*-
|
||||
#
|
||||
# 2010-2011 Steven Armstrong (steven-cdist at armstrong.cc)
|
||||
# 2012 Nico Schottelius (nico-cdist at schottelius.org)
|
||||
#
|
||||
# This file is part of cdist.
|
||||
#
|
||||
|
@ -37,8 +38,7 @@ from cdist.core import manifest
|
|||
import os.path as op
|
||||
my_dir = op.abspath(op.dirname(__file__))
|
||||
fixtures = op.join(my_dir, 'fixtures')
|
||||
local_base_path = fixtures
|
||||
|
||||
conf_dir = op.join(fixtures, 'conf')
|
||||
|
||||
class ManifestTestCase(test.CdistTestCase):
|
||||
|
||||
|
@ -48,9 +48,13 @@ class ManifestTestCase(test.CdistTestCase):
|
|||
self.temp_dir = self.mkdtemp()
|
||||
self.target_host = 'localhost'
|
||||
out_path = self.temp_dir
|
||||
self.local = local.Local(self.target_host, local_base_path, out_path)
|
||||
self.local.create_directories()
|
||||
self.local.link_emulator(cdist.test.cdist_exec_path)
|
||||
self.local = local.Local(
|
||||
target_host=self.target_host,
|
||||
out_path=out_path,
|
||||
exec_path = cdist.test.cdist_exec_path,
|
||||
add_conf_dirs=[conf_dir])
|
||||
self.local.create_files_dirs()
|
||||
|
||||
self.manifest = manifest.Manifest(self.target_host, self.local)
|
||||
self.log = logging.getLogger(self.target_host)
|
||||
|
||||
|
@ -103,6 +107,8 @@ class ManifestTestCase(test.CdistTestCase):
|
|||
self.assertEqual(output_dict['__object_name'], cdist_object.name)
|
||||
|
||||
def test_debug_env_setup(self):
|
||||
current_level = self.log.getEffectiveLevel()
|
||||
self.log.setLevel(logging.DEBUG)
|
||||
manifest = cdist.core.manifest.Manifest(self.target_host, self.local)
|
||||
self.assertTrue("__cdist_debug" in manifest.env)
|
||||
self.log.setLevel(current_level)
|
||||
|
|
|
@ -4,6 +4,30 @@ Changelog
|
|||
* Changes are always commented with their author in (braces)
|
||||
* Exception: No braces means author == Nico Schottelius
|
||||
|
||||
2.1.0pre8:
|
||||
* Type cleanup: __apt_ppa, __apt_ppa_update_index, __file,
|
||||
__ssh_authorized_key, __timezone, all install types (Steven Armstrong)
|
||||
* Types: Remove all parameter changing code
|
||||
* Type __rvm_ruby: Change parameter "default" to be boolean
|
||||
|
||||
2.1.0pre7: 2012-11-07
|
||||
* Core: All unit tests restored back to working
|
||||
* Core: Print error message on missing initial manifest
|
||||
|
||||
2.1.0pre6: 2012-11-05
|
||||
* New Example: Turn remote calls into local calls (used for unittesting)
|
||||
* Core: Export PYTHONPATH, it's also needed by emulator
|
||||
* Bugfix Type __rvm_ruby: Add clean package dependencies
|
||||
* Bugfix Type __rvm_gem: Run rvm as user, not as root
|
||||
* Cleanup Type __rvm, __rvm_gemset: Use shortcut version
|
||||
* Bugfix __rvm_gemset: Correctly check for gemsets
|
||||
* Cleanup Type __postgres_database, __postgres_role: Reference each other
|
||||
in documentation
|
||||
* Cleanp Type __postgres_role: Use boolean parameters where appropriate
|
||||
* Cleanp Type __postgres_role: Use shortcut version
|
||||
|
||||
2.1.0pre5: 2012-11-01
|
||||
* Core: First round of tests updated to work with multiple configuration directories
|
||||
|
||||
2.1.0pre4: 2012-10-31
|
||||
* Dist: PyPi: Moved cdist.py to script/cdist to avoid double import
|
||||
|
@ -27,7 +51,7 @@ Changelog
|
|||
Parameter state accepts only "present" and "absent"
|
||||
* Dist: Initial support for pypi packaging
|
||||
|
||||
2.0.15:
|
||||
2.0.15: 2012-11-02
|
||||
* Core: Make variable __object_name available in type explorers (Steven Armtrong)
|
||||
* New Type: __qemu_img
|
||||
* New Type: __line
|
||||
|
|
5
docs/dev/logs/2012-05-23.urls
Normal file
5
docs/dev/logs/2012-05-23.urls
Normal file
|
@ -0,0 +1,5 @@
|
|||
http://nu-ex.com/cv.html
|
||||
|
||||
https://lists.metalab.at/pipermail/devops/2012-January/000089.html
|
||||
|
||||
http://www.ir0nik.com/wordpress/?p=121
|
47
docs/dev/logs/2012-11-02.migration_to_2.1
Normal file
47
docs/dev/logs/2012-11-02.migration_to_2.1
Normal file
|
@ -0,0 +1,47 @@
|
|||
create a new branch to ensure nothing breaks
|
||||
|
||||
% git checkout -b 2.1_merge
|
||||
|
||||
fetch latest upstream changes (change origin if you use another
|
||||
remote name for upstream cdist)
|
||||
|
||||
% git fetch -v origin
|
||||
|
||||
Now try to merge upstream into the new branch.
|
||||
|
||||
|
||||
% git merge origin/2.1
|
||||
|
||||
fix any conflicts that may have been occurred due to local changes
|
||||
and then **git add** and *git commit** those changes.
|
||||
|
||||
As the types have a new location, **cdist/conf/** now, you have to move
|
||||
your own types there as well:
|
||||
|
||||
% git mv conf/type/* cdist/conf/
|
||||
|
||||
The manifest location also changed, so move this one as well:
|
||||
|
||||
% git mv conf/manifest/* cdist/conf/manifest/
|
||||
|
||||
Use **git status** to review the changes and ensure they
|
||||
are in the git database:
|
||||
|
||||
% git commit -m "Move types and manifests for 2.1 migration"
|
||||
|
||||
This should be everything necessary for a 2.1 migration. Test the result
|
||||
by running cdist on one of your staging hosts:
|
||||
|
||||
% ./bin/cdist config -v staging-host
|
||||
|
||||
|
||||
You can now cleanup the empty conf/ directory:
|
||||
|
||||
% rmdir conf/* && rmdir conf
|
||||
|
||||
|
||||
|
||||
--------------------------------------------------------------------------------
|
||||
|
||||
Boolean parameter introduced:
|
||||
__directory /path/to --parents yes => __directory /path/to --parents
|
|
@ -77,7 +77,7 @@ git clone git://git.schottelius.org/cdist
|
|||
|
||||
# Create manifest (maps configuration to host(s)
|
||||
cd cdist
|
||||
echo '__file /etc/cdist-configured' > conf/manifest/init
|
||||
echo '__file /etc/cdist-configured' > cdist/conf/manifest/init
|
||||
|
||||
# Configure localhost in verbose mode
|
||||
./bin/cdist config -v localhost
|
||||
|
|
1
other/archived_types/.README.unmaintained
Normal file
1
other/archived_types/.README.unmaintained
Normal file
|
@ -0,0 +1 @@
|
|||
This type is not maintained by anymore and has thus been removed from cdist.
|
3
other/archived_types/README
Normal file
3
other/archived_types/README
Normal file
|
@ -0,0 +1,3 @@
|
|||
This directory contains types that used to be included with
|
||||
cdist, but are not in use anymore. Have a look at the README
|
||||
file in each type, to find out why it was removed.
|
1
other/archived_types/__autofs/README
Symbolic link
1
other/archived_types/__autofs/README
Symbolic link
|
@ -0,0 +1 @@
|
|||
../.README.unmaintained
|
|
@ -1,21 +1,21 @@
|
|||
cdist-type__partition_msdos_apply(7)
|
||||
====================================
|
||||
cdist-type__autofs(7)
|
||||
=====================
|
||||
Steven Armstrong <steven-cdist--@--armstrong.cc>
|
||||
|
||||
|
||||
NAME
|
||||
----
|
||||
cdist-type__partition_msdos_apply - Apply dos partition settings
|
||||
cdist-type__autofs - install and start autofs
|
||||
|
||||
|
||||
DESCRIPTION
|
||||
-----------
|
||||
Create the partitions defined with __partition_msdos
|
||||
This space intentionally left blank.
|
||||
|
||||
|
||||
REQUIRED PARAMETERS
|
||||
-------------------
|
||||
None
|
||||
None.
|
||||
|
||||
|
||||
OPTIONAL PARAMETERS
|
||||
|
@ -27,16 +27,16 @@ EXAMPLES
|
|||
--------
|
||||
|
||||
--------------------------------------------------------------------------------
|
||||
__partition_msdos_apply
|
||||
__autofs
|
||||
--------------------------------------------------------------------------------
|
||||
|
||||
|
||||
SEE ALSO
|
||||
--------
|
||||
- cdist-type(7)
|
||||
- cdist-type__partition_msdos_apply(7)
|
||||
|
||||
|
||||
COPYING
|
||||
-------
|
||||
Copyright \(C) 2011 Steven Armstrong. Free use of this software is
|
||||
Copyright \(C) 2012 Steven Armstrong. Free use of this software is
|
||||
granted under the terms of the GNU General Public License version 3 (GPLv3).
|
|
@ -1,6 +1,7 @@
|
|||
#!/bin/sh
|
||||
#
|
||||
# 2011 Steven Armstrong (steven-cdist at armstrong.cc)
|
||||
# 2012 Steven Armstrong (steven-cdist at armstrong.cc)
|
||||
# 2012 Nico Schottelius (nico-cdist at schottelius.org)
|
||||
#
|
||||
# This file is part of cdist.
|
||||
#
|
||||
|
@ -18,14 +19,16 @@
|
|||
# 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")"
|
||||
os=$(cat "$__global/explorer/os")
|
||||
|
||||
options="(cat "$__object/parameter/options")"
|
||||
case "$os" in
|
||||
ubuntu|debian|archlinux)
|
||||
__package autofs --state present
|
||||
__start_on_boot autofs --state present
|
||||
;;
|
||||
*)
|
||||
echo "Unsupported OS: $os" >&2
|
||||
exit 1
|
||||
;;
|
||||
esac
|
1
other/archived_types/__autofs_map/README
Symbolic link
1
other/archived_types/__autofs_map/README
Symbolic link
|
@ -0,0 +1 @@
|
|||
../.README.unmaintained
|
50
other/archived_types/__autofs_map/explorer/entry
Executable file
50
other/archived_types/__autofs_map/explorer/entry
Executable file
|
@ -0,0 +1,50 @@
|
|||
#!/bin/sh
|
||||
#
|
||||
# 2011 - 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/>.
|
||||
#
|
||||
|
||||
candidates="/etc/auto.master /etc/autofs/auto.master"
|
||||
find_auto_master() {
|
||||
# get the path of the auto.master file
|
||||
for candidate in $candidates; do
|
||||
if [ -f "$candidate" ]; then
|
||||
echo "$candidate"
|
||||
return
|
||||
fi
|
||||
done
|
||||
}
|
||||
|
||||
auto_master="$(find_auto_master)"
|
||||
|
||||
# no auto.master, nothing we could do
|
||||
[ -f "$auto_master" ] || exit 0
|
||||
|
||||
# NOTE: keep variables in sync in manifest/explorer/gencode-*
|
||||
prefix="#cdist:$__object_name"
|
||||
suffix="#/cdist:$__object_name"
|
||||
awk -v prefix="$prefix" -v suffix="$suffix" '{
|
||||
if (index($0,prefix)) {
|
||||
triggered=1
|
||||
}
|
||||
if (triggered) {
|
||||
if (index($0,suffix)) {
|
||||
triggered=0
|
||||
}
|
||||
print
|
||||
}
|
||||
}' "$auto_master"
|
93
other/archived_types/__autofs_map/gencode-remote
Executable file
93
other/archived_types/__autofs_map/gencode-remote
Executable file
|
@ -0,0 +1,93 @@
|
|||
#!/bin/sh
|
||||
#
|
||||
# 2011 - 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/>.
|
||||
#
|
||||
|
||||
entry="$__object/files/entry"
|
||||
state_should="$(cat "$__object/parameter/state" 2>/dev/null || echo present)"
|
||||
if [ ! -s "$__object/explorer/entry" ]; then
|
||||
state_is='absent'
|
||||
else
|
||||
state_is=$(diff -q "$entry" "$__object/explorer/entry" >/dev/null \
|
||||
&& echo present \
|
||||
|| echo changed
|
||||
)
|
||||
fi
|
||||
|
||||
if [ "$state_should" = "$state_is" ]; then
|
||||
# Nothing to do, move along
|
||||
exit 0
|
||||
fi
|
||||
|
||||
cat << DONE
|
||||
candidates="/etc/auto.master /etc/autofs/auto.master"
|
||||
find_auto_master() {
|
||||
# get the path of the auto.master file
|
||||
for candidate in \$candidates; do
|
||||
if [ -f "\$candidate" ]; then
|
||||
echo "\$candidate"
|
||||
return
|
||||
fi
|
||||
done
|
||||
}
|
||||
|
||||
auto_master="\$(find_auto_master)"
|
||||
|
||||
if [ ! -f "\$auto_master" ]; then
|
||||
echo "Could not determine auto.master location, tried: \$candidates" >&2
|
||||
exit 1
|
||||
fi
|
||||
DONE
|
||||
|
||||
remove_entry() {
|
||||
# NOTE: keep variables in sync in manifest/explorer/gencode-*
|
||||
prefix="#cdist:$__object_name"
|
||||
suffix="#/cdist:$__object_name"
|
||||
cat << DONE
|
||||
awk -v prefix="$prefix" -v suffix="$suffix" '
|
||||
{
|
||||
if (index(\$0,prefix)) {
|
||||
triggered=1
|
||||
}
|
||||
if (triggered) {
|
||||
if (index(\$0,suffix)) {
|
||||
triggered=0
|
||||
}
|
||||
} else {
|
||||
print
|
||||
}
|
||||
}' "\$auto_master" > "\$auto_master"+
|
||||
mv -f "\$auto_master"+ "\$auto_master"
|
||||
DONE
|
||||
}
|
||||
|
||||
case "$state_should" in
|
||||
present)
|
||||
if [ "$state_is" = "changed" ]; then
|
||||
remove_entry
|
||||
fi
|
||||
cat << DONE
|
||||
cat >> "\$auto_master" << EOC
|
||||
$(cat "$entry")
|
||||
EOC
|
||||
DONE
|
||||
;;
|
||||
absent)
|
||||
remove_entry
|
||||
;;
|
||||
esac
|
|
@ -36,25 +36,35 @@ comment::
|
|||
auto.master.
|
||||
|
||||
|
||||
BOOLEAN PARAMETERS
|
||||
------------------
|
||||
noreload::
|
||||
don't reload autofs after the entry has been changed
|
||||
|
||||
|
||||
EXAMPLES
|
||||
--------
|
||||
|
||||
--------------------------------------------------------------------------------
|
||||
# Add auto mounter at /net
|
||||
# Add auto mounter at /net and reload
|
||||
__autofs_map /net --map /etc/auto.net --type program
|
||||
|
||||
# Add auto mounter at /pub
|
||||
__autofs_map /pub --map /etc/auto.pub \
|
||||
--type file --options nosuid,rw,bg,hard,intr --ghost
|
||||
# Add auto mounter at /pub and don't reload
|
||||
__autofs_map /pub \
|
||||
--map /etc/auto.pub \
|
||||
--type file \
|
||||
--options "nosuid,rw,bg,hard,intr --ghost" \
|
||||
--noreload
|
||||
--------------------------------------------------------------------------------
|
||||
|
||||
|
||||
SEE ALSO
|
||||
--------
|
||||
- cdist-type(7)
|
||||
- cdist-type__autofs_reload(7)
|
||||
|
||||
|
||||
COPYING
|
||||
-------
|
||||
Copyright \(C) 2011 Steven Armstrong. Free use of this software is
|
||||
Copyright \(C) 2012 Steven Armstrong. Free use of this software is
|
||||
granted under the terms of the GNU General Public License version 3 (GPLv3).
|
55
other/archived_types/__autofs_map/manifest
Executable file
55
other/archived_types/__autofs_map/manifest
Executable file
|
@ -0,0 +1,55 @@
|
|||
#!/bin/sh
|
||||
#
|
||||
# 2011 - 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/>.
|
||||
#
|
||||
|
||||
name="/$__object_id"
|
||||
map="$(cat "$__object/parameter/map")"
|
||||
type="$(cat "$__object/parameter/type" 2>/dev/null || echo "file")"
|
||||
options="$(cat "$__object/parameter/options" 2>/dev/null || true)"
|
||||
|
||||
# NOTE: keep variables in sync in manifest/explorer/gencode-*
|
||||
prefix="#cdist:$__object_name"
|
||||
suffix="#/cdist:$__object_name"
|
||||
|
||||
mkdir "$__object/files"
|
||||
|
||||
# Generate entry for inclusion in auto.master
|
||||
entry="$__object/files/entry"
|
||||
echo "$prefix" > "$entry"
|
||||
if [ -f "$__object/parameter/comment" ]; then
|
||||
echo "# $(cat "$__object/parameter/comment")" >> "$entry"
|
||||
fi
|
||||
echo "$name $type:$map $options" >> $entry
|
||||
echo "$suffix" >> "$entry"
|
||||
|
||||
# Reload autofs after changes if the user wishes this
|
||||
if [ ! -f "$__object/parameter/noreload" ]; then
|
||||
state_should="$(cat "$__object/parameter/state" 2>/dev/null || echo present)"
|
||||
if [ ! -s "$__object/explorer/entry" ]; then
|
||||
state_is='absent'
|
||||
else
|
||||
state_is=$(diff -q "$entry" "$__object/explorer/entry" >/dev/null \
|
||||
&& echo present \
|
||||
|| echo changed
|
||||
)
|
||||
fi
|
||||
if [ "$state_is" != "$state_should" ]; then
|
||||
require="$__object_name" __autofs_reload
|
||||
fi
|
||||
fi
|
1
other/archived_types/__autofs_map/parameter/boolean
Normal file
1
other/archived_types/__autofs_map/parameter/boolean
Normal file
|
@ -0,0 +1 @@
|
|||
noreload
|
Some files were not shown because too many files have changed in this diff Show more
Loading…
Reference in a new issue