Merge branch 'master' into install_integration

This commit is contained in:
Nico Schottelius 2014-06-13 13:34:31 +02:00
commit 9bf2d58a8f
131 changed files with 1636 additions and 272 deletions

View file

@ -20,6 +20,13 @@
A2XM=a2x -f manpage --no-xmllint -a encoding=UTF-8 A2XM=a2x -f manpage --no-xmllint -a encoding=UTF-8
A2XH=a2x -f xhtml --no-xmllint -a encoding=UTF-8 A2XH=a2x -f xhtml --no-xmllint -a encoding=UTF-8
# Create cross-links in html man pages
# We look for something like "cdist-type(7)" and make a href out of it
# The first matching group is the man page name and the second group
# is the man page section (1 or 7). The first three lines of the input
# (xml, DOCTYPE, head tags) are ignored, since the head tags contains
# the title of the page and should not contain a href.
CROSSLINK=sed --in-place '1,3!s/\([[:alnum:]_-]*\)(\([17]\))/<a href="..\/man\2\/\1.html">&<\/a>/g'
helper=./bin/build-helper helper=./bin/build-helper
MANDIR=docs/man MANDIR=docs/man
@ -86,6 +93,7 @@ MANSTATICALL=$(MANSTATICMAN) $(MANSTATICHTML)
# Creating the type html page # Creating the type html page
%.html: %.text %.html: %.text
$(A2XH) $^ $(A2XH) $^
$(CROSSLINK) $@
man: $(MANTYPEALL) $(MANREFALL) $(MANSTATICALL) man: $(MANTYPEALL) $(MANREFALL) $(MANSTATICALL)
@ -99,7 +107,7 @@ man-dist: man check-date
cp ${MAN7DSTDIR}/*.html ${MAN7DSTDIR}/*.css ${MANWEBDIR}/man7 cp ${MAN7DSTDIR}/*.html ${MAN7DSTDIR}/*.css ${MANWEBDIR}/man7
cd ${MANWEBDIR} && git add . && git commit -m "cdist manpages update: $(CHANGELOG_VERSION)" || true cd ${MANWEBDIR} && git add . && git commit -m "cdist manpages update: $(CHANGELOG_VERSION)" || true
man-fix-link: web-pub man-latest-link: web-pub
# Fix ikiwiki, which does not like symlinks for pseudo security # Fix ikiwiki, which does not like symlinks for pseudo security
ssh tee.schottelius.org \ ssh tee.schottelius.org \
"cd /home/services/www/nico/www.nico.schottelius.org/www/software/cdist/man && rm -f latest && ln -sf "$(CHANGELOG_VERSION)" latest" "cd /home/services/www/nico/www.nico.schottelius.org/www/software/cdist/man && rm -f latest && ln -sf "$(CHANGELOG_VERSION)" latest"
@ -146,7 +154,8 @@ web-dist: web-blog web-doc
web-pub: web-dist man-dist speeches-dist web-pub: web-dist man-dist speeches-dist
cd "${WEBDIR}" && make pub cd "${WEBDIR}" && make pub
web-release-all: man-fix-link web-release-all: man-latest-link
web-release-all-no-latest: web-pub
################################################################################ ################################################################################
# Release: Mailinglist # Release: Mailinglist

View file

@ -104,6 +104,11 @@ eof
;; ;;
ml-release) ml-release)
if [ $# -ne 1 ]; then
echo "$0 ml-release version" >&2
exit 1
fi
version=$1; shift version=$1; shift
to_a=cdist to_a=cdist
@ -142,40 +147,22 @@ eof
freecode-release) freecode-release)
version=$1; shift version=$1; shift
api_token=$(awk '/machine freecode login/ { print $8 }' ~/.netrc)
printf "Enter tag list for freecode release %s> " "$version" printf "Enter tag list for freecode release %s> " "$version"
read taglist read taglist
printf "Enter changelog for freecode release %s> " "$version" printf "Enter changelog for freecode release %s> " "$version"
read changelog read changelog
echo "Submit preview" echo "Submitting to freecode ..."
cat << eof python2 ~/p/foreign/freecode-submit-2.7/freecode-submit -P cdist \
tag_list = $taglist -v "$version" -c "$changelog" \
changelog = $changelog -t "$taglist" \
version = $version -n
eof
printf "Press enter to submit to freecode> "
read dummy
cat << eof | cfreecode-api release-add cdist
{
"auth_code": "$api_token",
"release": {
"tag_list": "$taglist",
"version": "$version",
"changelog": "$changelog",
"hidden_from_frontpage": false
}
}
eof
;; ;;
release-git-tag) release-git-tag)
target_version=$($0 changelog-version) target_version=$($0 changelog-version)
if git rev-parse --verify refs/tags/$target_version; then if git rev-parse --verify refs/tags/$target_version 2>/dev/null; then
echo "Tag for $target_version exists, aborting" echo "Tag for $target_version exists, aborting"
exit 1 exit 1
fi fi
@ -256,7 +243,11 @@ eof
make pub make pub
# publish man, speeches, website # publish man, speeches, website
if [ "$masterbranch" = yes ]; then
make web-release-all make web-release-all
else
make web-release-all-no-latest
fi
# Ensure that pypi release has the right version # Ensure that pypi release has the right version
"$0" version "$0" version

31
cdist/conf/explorer/cpu_cores Executable file
View file

@ -0,0 +1,31 @@
#!/bin/sh
#
# 2014 Daniel Heule (hda at sfs.biz)
# 2014 Thomas Oettli (otho at sfs.biz)
#
# 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/>.
#
#
# FIXME: other system types (not linux ...)
if [ -r /proc/cpuinfo ]; then
cores="$(cat /proc/cpuinfo | grep "core id" | sort | uniq | wc -l)"
if [ ${cores} -eq 0 ]; then
cores="1"
fi
echo "${cores}"
fi

31
cdist/conf/explorer/cpu_sockets Executable file
View file

@ -0,0 +1,31 @@
#!/bin/sh
#
# 2014 Daniel Heule (hda at sfs.biz)
# 2014 Thomas Oettli (otho at sfs.biz)
#
# 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/>.
#
#
# FIXME: other system types (not linux ...)
if [ -r /proc/cpuinfo ]; then
sockets="$(cat /proc/cpuinfo | grep "physical id" | sort | uniq | wc -l)"
if [ ${sockets} -eq 0 ]; then
sockets="$(cat /proc/cpuinfo | grep "processor" | wc -l)"
fi
echo "${sockets}"
fi

View file

@ -24,12 +24,12 @@
# #
# Use ip, if available # Use ip, if available
if command -v ip; then if command -v ip >/dev/null; then
ip -o link show | sed -n 's/^[0-9]\+: \(.\+\): <.*/\1/p' ip -o link show | sed -n 's/^[0-9]\+: \(.\+\): <.*/\1/p'
exit 0 exit 0
fi fi
if ! command -v ifconfig; then if ! command -v ifconfig >/dev/null; then
# no ifconfig, nothing we could do # no ifconfig, nothing we could do
exit 0 exit 0
fi fi

View file

@ -0,0 +1,54 @@
#!/bin/sh
#
# 2014 Daniel Heule (hda at sfs.biz)
# 2014 Thomas Oettli (otho at sfs.biz)
#
# 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/>.
#
#
# FIXME: other system types (not linux ...)
if [ -r /proc/cpuinfo ]; then
# this should only exist on virtual guest machines,
# tested on vmware, xen, kvm
if grep -q "hypervisor" /proc/cpuinfo; then
# this file is aviable in xen guest systems
if [ -r /sys/hypervisor/type ]; then
if grep -q -i "xen" /sys/hypervisor/type; then
echo virtual_by_xen
exit
fi
else
if [ -r /sys/class/dmi/id/product_name ]; then
if grep -q -i 'vmware' /sys/class/dmi/id/product_name; then
echo "virtual_by_vmware"
exit
else
if grep -q -i 'bochs' /sys/class/dmi/id/product_name; then
echo "virtual_by_kvm"
exit
fi
fi
fi
fi
echo "virtual_by_unknown"
else
echo "physical"
fi
else
echo "unknown"
fi

27
cdist/conf/explorer/memory Executable file
View file

@ -0,0 +1,27 @@
#!/bin/sh
#
# 2014 Daniel Heule (hda at sfs.biz)
# 2014 Thomas Oettli (otho at sfs.biz)
#
# 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/>.
#
#
# FIXME: other system types (not linux ...)
if [ -r /proc/meminfo ]; then
echo "$(cat /proc/meminfo | grep "MemTotal:" | awk '{print $2}')"
fi

View file

@ -25,7 +25,7 @@ destination="/$__object_id"
os=$("$__explorer/os") os=$("$__explorer/os")
case "$os" in case "$os" in
"freebsd") "freebsd"|"openbsd")
# FIXME: should be something like this based on man page, but can not test # FIXME: should be something like this based on man page, but can not test
stat -f "type: %ST stat -f "type: %ST
owner: %Du %Su owner: %Du %Su
@ -33,6 +33,15 @@ group: %Dg %Sg
mode: %Op %Sp mode: %Op %Sp
size: %Dz size: %Dz
links: %Dl links: %Dl
" "$destination"
;;
"macosx")
stat -f "type: %HT
owner: %Du %Su
group: %Dg %Sg
mode: %Lp %Sp
size: %Dz
links: %Dl
" "$destination" " "$destination"
;; ;;
*) *)

View file

@ -25,12 +25,19 @@ destination="/$__object_id"
os=$("$__explorer/os") os=$("$__explorer/os")
case "$os" in case "$os" in
"freebsd") "freebsd"|"openbsd")
# FIXME: should be something like this based on man page, but can not test # FIXME: should be something like this based on man page, but can not test
stat -f "type: %ST stat -f "type: %ST
owner: %Du %Su owner: %Du %Su
group: %Dg %Sg group: %Dg %Sg
mode: %Op %Sp mode: %Op %Sp
" "$destination"
;;
"macosx")
stat -f "type: %HT
owner: %Du %Su
group: %Dg %Sg
mode: %Lp %Sp
" "$destination" " "$destination"
;; ;;
*) *)

View file

@ -0,0 +1,23 @@
#!/bin/sh
#
# 2014 Nico Schottelius (nico-cdist at schottelius.org)
#
# This file is part of cdist.
#
# cdist is free software: you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation, either version 3 of the License, or
# (at your option) any later version.
#
# cdist is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with cdist. If not, see <http://www.gnu.org/licenses/>.
#
name="$__object_id"
dog vdi list -r "$name"

View file

@ -0,0 +1,42 @@
#!/bin/sh
#
# 2014 Nico Schottelius (nico-cdist at schottelius.org)
#
# This file is part of cdist.
#
# cdist is free software: you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation, either version 3 of the License, or
# (at your option) any later version.
#
# cdist is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with cdist. If not, see <http://www.gnu.org/licenses/>.
#
state_should="$(cat "$__object/parameter/state")"
num_vdi_lines=$(wc -l < "$__object/explorer/list")
name="$__object_id"
if [ "$num_vdi_lines" = 1 ]; then
state_is=present
else
state_is=absent
fi
[ "$state_is" = "$state_should" ] && exit 0
case "$state_should" in
present)
size="$(cat "$__object/parameter/size")"
echo "dog vdi create '$name' '$size'"
;;
absent)
echo "dog vdi delete '$name'"
;;
esac

View file

@ -0,0 +1,56 @@
cdist-type__dog_vdi(7)
======================
Nico Schottelius <nico-cdist--@--schottelius.org>
NAME
----
cdist-type__dog_vdi - Manage Sheepdog VM images
DESCRIPTION
-----------
The dog program is used to create images for sheepdog
to be used in qemu.
OPTIONAL PARAMETERS
-------------------
state::
Either "present" or "absent", defaults to "present"
size::
Size of the image in "dog vdi" compatible units.
Required if state is "present".
EXAMPLES
--------
--------------------------------------------------------------------------------
# Create a 50G size image
__dog_vdi nico-privat.sky.ungleich.ch --size 50G
# Create a 50G size image (more explicit)
__dog_vdi nico-privat.sky.ungleich.ch --size 50G --state present
# Remove image
__dog_vdi nico-privat.sky.ungleich.ch --state absent
# Remove image - keeping --size is ok
__dog_vdi nico-privat.sky.ungleich.ch --size 50G --state absent
--------------------------------------------------------------------------------
SEE ALSO
--------
- cdist-type(7)
- dog(8)
- qemu(1)
COPYING
-------
Copyright \(C) 2014 Nico Schottelius. Free use of this software is
granted under the terms of the GNU General Public License version 3 (GPLv3).

View file

@ -0,0 +1,37 @@
#!/bin/sh
#
# 2014 Nico Schottelius (nico-cdist at schottelius.org)
#
# This file is part of cdist.
#
# cdist is free software: you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation, either version 3 of the License, or
# (at your option) any later version.
#
# cdist is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with cdist. If not, see <http://www.gnu.org/licenses/>.
#
state_should="$(cat "$__object/parameter/state")"
case "$state_should" in
present)
if [ ! -f "$__object/parameter/size" ]; then
echo "Size is required when state is present" >&2
exit 1
fi
;;
absent)
:
;;
*)
echo "Unsupported state: $state_should" >&2
exit 1
;;
esac

View file

@ -0,0 +1 @@
present

View file

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

View file

@ -25,7 +25,7 @@ destination="/$__object_id"
os=$("$__explorer/os") os=$("$__explorer/os")
case "$os" in case "$os" in
"freebsd") "freebsd"|"openbsd")
# FIXME: should be something like this based on man page, but can not test # FIXME: should be something like this based on man page, but can not test
stat -f "type: %ST stat -f "type: %ST
owner: %Du %Su owner: %Du %Su
@ -33,6 +33,15 @@ group: %Dg %Sg
mode: %Op %Sp mode: %Op %Sp
size: %Dz size: %Dz
links: %Dl links: %Dl
" "$destination"
;;
"macosx")
stat -f "type: %HT
owner: %Du %Su
group: %Dg %Sg
mode: %Lp %Sp
size: %Dz
links: %Dl
" "$destination" " "$destination"
;; ;;
*) *)

View file

@ -26,6 +26,7 @@ state::
branch:: branch::
Create this branch by checking out the remote branch of this name Create this branch by checking out the remote branch of this name
Default branch is "master"
group:: group::
Group to chgrp to. Group to chgrp to.

View file

@ -24,6 +24,9 @@
__package git --state present __package git --state present
state_should="$(cat "$__object/parameter/state")" state_should="$(cat "$__object/parameter/state")"
owner="$(cat "$__object/parameter/owner")"
group="$(cat "$__object/parameter/group")"
mode="$(cat "$__object/parameter/mode")"
# Let __directory handle removal of git repos # Let __directory handle removal of git repos
@ -33,7 +36,10 @@ case "$state_should" in
;; ;;
absent) absent)
__directory "$__object_id" --state absent __directory "$__object_id" --state absent \
--owner "$owner" \
--group "$group" \
--mode "$mode"
;; ;;
*) *)

View file

@ -21,6 +21,10 @@
# Retrieve the contents of /etc/hostname # Retrieve the contents of /etc/hostname
# #
# Almost any distribution
if [ -f /etc/hostname ]; then if [ -f /etc/hostname ]; then
cat /etc/hostname cat /etc/hostname
# SuSE
elif [ -f /etc/HOSTNAME ]; then
cat /etc/HOSTNAME
fi fi

View file

@ -0,0 +1,26 @@
#!/bin/sh
#
# 2014 Nico Schottelius (nico-cdist at schottelius.org)
#
# This file is part of cdist.
#
# cdist is free software: you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation, either version 3 of the License, or
# (at your option) any later version.
#
# cdist is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with cdist. If not, see <http://www.gnu.org/licenses/>.
#
#
# Retrieve the contents of /etc/hostname
#
if [ -f /etc/sysconfig/network ]; then
awk -F= '/^HOSTNAME=/ { print $2 }' /etc/sysconfig/network
fi

View file

@ -28,14 +28,28 @@ fi
os=$(cat "$__global/explorer/os") os=$(cat "$__global/explorer/os")
name_running=$(cat "$__global/explorer/hostname") name_running=$(cat "$__global/explorer/hostname")
name_config=$(cat "$__object/explorer/hostname_file") name_config=$(cat "$__object/explorer/hostname_file")
name_sysconfig=$(cat "$__object/explorer/hostname_sysconfig")
has_hostnamectl=$(cat "$__object/explorer/has_hostnamectl") has_hostnamectl=$(cat "$__object/explorer/has_hostnamectl")
################################################################################ ################################################################################
# If everything is ok -> exit # If everything is ok -> exit
# #
case "$os" in
archlinux|debian|suse|ubuntu)
if [ "$name_config" = "$name_should" -a "$name_running" = "$name_should" ]; then if [ "$name_config" = "$name_should" -a "$name_running" = "$name_should" ]; then
exit 0 exit 0
fi fi
;;
centos)
if [ "$name_sysconfig" = "$name_should" -a "$name_running" = "$name_should" ]; then
exit 0
fi
;;
*)
echo "Unsupported os: $os" >&2
exit 1
;;
esac
################################################################################ ################################################################################
# Setup hostname # Setup hostname
@ -45,6 +59,17 @@ echo changed >> "$__messages_out"
if [ "$has_hostnamectl" ]; then if [ "$has_hostnamectl" ]; then
echo "hostnamectl set-hostname '$name_should'" echo "hostnamectl set-hostname '$name_should'"
else else
case "$os" in
archlinux|debian|ubuntu)
echo "hostname '$name_should'" echo "hostname '$name_should'"
echo "printf '%s\n' '$name_should' > /etc/hostname" echo "printf '%s\n' '$name_should' > /etc/hostname"
;;
centos)
echo "hostname '$name_should'"
;;
suse)
echo "hostname '$name_should'"
echo "printf '%s\n' '$name_should' > /etc/HOSTNAME"
;;
esac
fi fi

View file

@ -20,6 +20,12 @@
# #
os=$(cat "$__global/explorer/os") os=$(cat "$__global/explorer/os")
if [ -f "$__object/parameter/name" ]; then
name_should="$(cat "$__object/parameter/name")"
else
name_should="$(echo "${__target_host%%.*}")"
fi
not_supported() { not_supported() {
echo "Your operating system ($os) is currently not supported by this type (${__type##*/})." >&2 echo "Your operating system ($os) is currently not supported by this type (${__type##*/})." >&2
@ -28,10 +34,17 @@ not_supported() {
} }
case "$os" in case "$os" in
archlinux|debian|ubuntu) archlinux|debian|suse|ubuntu)
# handled in gencode-remote # handled in gencode-remote
: :
;; ;;
centos)
__key_value sysconfig-hostname \
--file /etc/sysconfig/network \
--delimiter '=' \
--key HOSTNAME \
--value "$name_should" --exact_delimiter
;;
*) *)
not_supported not_supported
;; ;;

View file

@ -41,7 +41,7 @@ __iptables_rule established --rule "-A INPUT -m state --state RELATED,ESTABLISH
# Some service rules # Some service rules
__iptables_rule http --rule "-A INPUT -p tcp --dport 80 -j ACCEPT" __iptables_rule http --rule "-A INPUT -p tcp --dport 80 -j ACCEPT"
__iptables_rule ssh --rule "-A INPUT -p tcp --dport 80 -j ACCEPT" __iptables_rule ssh --rule "-A INPUT -p tcp --dport 22 -j ACCEPT"
__iptables_rule https --rule "-A INPUT -p tcp --dport 443 -j ACCEPT" __iptables_rule https --rule "-A INPUT -p tcp --dport 443 -j ACCEPT"
# Ensure some rules are not present anymore # Ensure some rules are not present anymore

View file

@ -26,7 +26,7 @@
#set -x #set -x
if [ -f "$__object/parameter/jaildir" ]; then if [ -f "$__object/parameter/jaildir" ]; then
jaildir="$(cat "$__object/parameter/name")" jaildir="$(cat "$__object/parameter/jaildir")"
else else
jaildir="/usr/jail" jaildir="/usr/jail"
fi fi

View file

@ -32,7 +32,7 @@ else
fi fi
if [ -f "$__object/parameter/jaildir" ]; then if [ -f "$__object/parameter/jaildir" ]; then
jaildir="$(cat "$__object/parameter/name")" jaildir="$(cat "$__object/parameter/jaildir")"
else else
jaildir="/usr/jail" jaildir="/usr/jail"
fi fi

View file

@ -32,14 +32,14 @@ else
fi fi
if [ -f "$__object/parameter/jaildir" ]; then if [ -f "$__object/parameter/jaildir" ]; then
jaildir="$(cat "$__object/parameter/name")" jaildir="$(cat "$__object/parameter/jaildir")"
else else
jaildir="/usr/jail" jaildir="/usr/jail"
fi fi
# backslash-escaped $jaildir # backslash-escaped $jaildir
sjaildir="$(echo ${jaildir} | sed 's#/#\\/#g')" sjaildir="$(echo ${jaildir} | sed 's#/#\\/#g')"
jls_output="$(jls | grep "[ ^I]${sjaildir}\/${name}\$")" || true jls_output="$(jls | grep "[ ]${sjaildir}\/${name}\$")" || true
if [ -n "${jls_output}" ]; then if [ -n "${jls_output}" ]; then
echo "STARTED" echo "STARTED"

View file

@ -1,6 +1,6 @@
#!/bin/sh #!/bin/sh
# #
# 2012 Jake Guffey (jake.guffey at eprotex.com) # 2012,2014 Jake Guffey (jake.guffey at eprotex.com)
# #
# This file is part of cdist. # This file is part of cdist.
# #
@ -104,6 +104,7 @@ stopJail() {
# Check $status before issuing command # Check $status before issuing command
if [ "$status" = "STARTED" ]; then if [ "$status" = "STARTED" ]; then
echo "/etc/rc.d/jail stop ${name}" echo "/etc/rc.d/jail stop ${name}"
echo "stop" >> "$__messages_out"
fi fi
} }
@ -111,6 +112,7 @@ startJail() {
# Check $status before issuing command # Check $status before issuing command
if [ "$status" = "NOTSTART" ]; then if [ "$status" = "NOTSTART" ]; then
echo "/etc/rc.d/jail start ${name}" echo "/etc/rc.d/jail start ${name}"
echo "start" >> "$__messages_out"
fi fi
} }
@ -162,6 +164,7 @@ EOF
rm -f /etc/rc.conf.bak rm -f /etc/rc.conf.bak
fi fi
EOF EOF
echo "delete" >> "$__messages_out"
} }
createJail() { createJail() {
@ -215,6 +218,7 @@ cat <<EOF
fi fi
EOF EOF
echo "create" >> "$__messages_out"
# Create the ro+rw mountpoint entries in fstab # Create the ro+rw mountpoint entries in fstab
cat <<EOF cat <<EOF
@ -310,6 +314,7 @@ if [ "$onboot" = "yes" ]; then
fi fi
unset jail_list unset jail_list
EOF EOF
echo "onboot" >> "$__messages_out"
fi fi
# Add the normal entries into the jail's rc.conf # Add the normal entries into the jail's rc.conf

View file

@ -16,7 +16,7 @@ This type is used on FreeBSD to manage jails.
REQUIRED PARAMETERS REQUIRED PARAMETERS
------------------- -------------------
state:: state::
Either "present" or "absent." Either "present" or "absent", defaults to "present".
jailbase:: jailbase::
The location of the .tgz archive containing the base fs for your jails. The location of the .tgz archive containing the base fs for your jails.
@ -67,6 +67,19 @@ be removed then re-added with the correct IP address/netmask or the appropriate
line (jail_<name>_ip="...") modified within rc.conf through some alternate line (jail_<name>_ip="...") modified within rc.conf through some alternate
means. means.
MESSAGES
--------
start::
The jail was started
stop::
The jail was stopped
create:
The jail was created
delete::
The jail was deleted
onboot::
The jail was configured to start on boot
EXAMPLES EXAMPLES
-------- --------

View file

@ -0,0 +1 @@
present

View file

@ -5,3 +5,4 @@ interface
devfs-ruleset devfs-ruleset
jaildir jaildir
jailbase jailbase
state

View file

@ -1,6 +1,7 @@
#!/bin/sh #!/bin/sh
# #
# 2011 Steven Armstrong (steven-cdist at armstrong.cc) # 2011 Steven Armstrong (steven-cdist at armstrong.cc)
# 2014 Daniel Heule (hda at sfs.biz)
# #
# This file is part of cdist. # This file is part of cdist.
# #
@ -18,36 +19,85 @@
# along with cdist. If not, see <http://www.gnu.org/licenses/>. # along with cdist. If not, see <http://www.gnu.org/licenses/>.
# #
key="$(cat "$__object/parameter/key" 2>/dev/null \ export key="$(cat "$__object/parameter/key" 2>/dev/null \
|| echo "$__object_id")" || echo "$__object_id")"
state="$(cat "$__object/parameter/state" 2>/dev/null \ export state="$(cat "$__object/parameter/state")"
|| echo "present")"
file="$(cat "$__object/parameter/file")"
delimiter="$(cat "$__object/parameter/delimiter")"
value="$(cat "$__object/parameter/value" 2>/dev/null \
|| echo "__CDIST_NOTSET__")"
case "$state" in file="$(cat "$__object/parameter/file")"
absent)
if grep -q -E "^$key$delimiter+" "$file"; then if [ ! -f "$file" ]; then
# if the key exists, with whatever value, we will have to remove it echo "nosuchfile"
# so report it as present exit
echo present
else
# key does not exist
echo absent
fi fi
;;
present) export delimiter="$(cat "$__object/parameter/delimiter")"
if grep -q -E "^$key$delimiter+$value$" "$file"; then export value="$(cat "$__object/parameter/value" 2>/dev/null \
# key exists and value is same || echo "__CDIST_NOTSET__")"
echo present if [ -f "$__object/parameter/exact_delimiter" ]; then
elif grep -q -E "^$key$delimiter+" "$file"; then export exact_delimiter=1
# key exists, but value is empty or different
echo wrongvalue
else else
# key does not exist export exact_delimiter=0
echo absent
fi fi
;;
esac awk -f - "$file" <<"AWK_EOF"
BEGIN {
state=ENVIRON["state"]
key=ENVIRON["key"]
delimiter=ENVIRON["delimiter"]
value=ENVIRON["value"]
exact_delimiter=ENVIRON["exact_delimiter"]
found=0
}
# enter the main loop
{
i = index($0,key)
if(i == 1) {
delval = substr($0,length(key)+1)
delpos = index(delval,delimiter)
if(delpos == 0) {
# in this case, the delimiter was not found
next
}
if(delpos > 1) {
spaces = substr(delval,1,delpos-1)
sub(/[ \t]*/,"",spaces)
if( length(spaces) > 0 ) {
# if there are not only spaces between key and delimiter,
# continue since we we are on the wrong line
next
}
if( exact_delimiter == 1) {
# we have key and delimiter, but since additional spaces are not alowed
# return wrongformat
found=1
print "wrongformat"
exit
}
}
found=1
if(state == "absent") {
# on state absent, only the ocurance is relevant, so exit here
print "present"
exit
}
linevalue=substr(delval,delpos + length(delimiter))
if(exact_delimiter == 0){
#ok, now strip tabs and whitespaces at the beginning of the value
sub(/[ \t]*/,"",linevalue)
}
# Key with separator found
if(linevalue == value) {
# exact match found, so state is present
print "present"
}
else {
print "wrongvalue"
}
exit
}
}
END {
if(found == 0)
print "absent"
}
AWK_EOF

View file

@ -0,0 +1,102 @@
export key="$(cat "$__object/parameter/key" 2>/dev/null \
|| echo "$__object_id")"
export state="$(cat "$__object/parameter/state")"
file="$(cat "$__object/parameter/file")"
export delimiter="$(cat "$__object/parameter/delimiter")"
export value="$(cat "$__object/parameter/value" 2>/dev/null \
|| echo "__CDIST_NOTSET__")"
if [ -f "$__object/parameter/exact_delimiter" ]; then
export exact_delimiter=1
else
export exact_delimiter=0
fi
tmpfile=$(mktemp "${file}.cdist.XXXXXXXXXX")
# preserve ownership and permissions by copying existing file over tmpfile
if [ -f "$file" ]; then
cp -p "$file" "$tmpfile"
else
touch "$file"
fi
awk -f - "$file" >"$tmpfile" <<"AWK_EOF"
BEGIN {
# import variables in a secure way ..
state=ENVIRON["state"]
key=ENVIRON["key"]
delimiter=ENVIRON["delimiter"]
value=ENVIRON["value"]
comment=ENVIRON["comment"]
exact_delimiter=ENVIRON["exact_delimiter"]
inserted=0
lastline=""
lastlinepopulated=0
line=key delimiter value
}
# enter the main loop
{
# I dont use regex, this is by design, so we can match against every value without special meanings of chars ...
i = index($0,key)
if(i == 1) {
delval = substr($0,length(key)+1)
delpos = index(delval,delimiter)
if(delpos > 1) {
spaces = substr(delval,1,delpos-1)
sub(/[ \t]*/,"",spaces)
if( length(spaces) > 0 ) {
# if there are not only spaces between key and delimiter,
# continue since we we are on the wrong line
if(lastlinepopulated == 1) {
print lastline
}
lastline=$0
lastlinepopulated=1
next
}
}
if(state == "absent") {
if(lastline == comment) {
# if comment is present, clear lastlinepopulated flag
lastlinepopulated=0
}
# if absent, simple yump over this line
next
}
else {
# if comment is present and not present in last line
if (lastlinepopulated == 1) {
print lastline
if( comment != "" && lastline != comment) {
print comment
}
lastlinepopulated=0
}
inserted=1
# state is present, so insert correct line here
print line
lastline=line
next
}
}
else {
if(lastlinepopulated == 1) {
print lastline
}
lastline=$0
lastlinepopulated=1
}
}
END {
if(lastlinepopulated == 1) {
print lastline
}
if(inserted == 0 && state == "present" ) {
if(comment != "" && lastline != comment){
print comment
}
print line
}
}
AWK_EOF
mv -f "$tmpfile" "$file"

View file

@ -1,7 +1,8 @@
#!/bin/sh #!/bin/sh
# #
# 2011 Steven Armstrong (steven-cdist at armstrong.cc) # 2011 Steven Armstrong (steven-cdist at armstrong.cc)
# 2012 Nico Schottelius (nico-cdist at schottelius.org) # 2012-2014 Nico Schottelius (nico-cdist at schottelius.org)
# 2014 Daniel Heule (hda at sfs.biz)
# #
# This file is part of cdist. # This file is part of cdist.
# #
@ -19,52 +20,56 @@
# along with cdist. If not, see <http://www.gnu.org/licenses/>. # along with cdist. If not, see <http://www.gnu.org/licenses/>.
# #
key="$__object_id"
[ -f "$__object/parameter/key" ] && key="$(cat "$__object/parameter/key")"
state_should="$(cat "$__object/parameter/state")" state_should="$(cat "$__object/parameter/state")"
file="$(cat "$__object/parameter/file")"
delimiter="$(cat "$__object/parameter/delimiter")"
# escape double quotes, as that is what we use ourself below
value_escaped="$(cat "$__object/parameter/value" | sed -e "s/\([\"]\)/\\\\\1/g")"
state_is="$(cat "$__object/explorer/state")" state_is="$(cat "$__object/explorer/state")"
[ "$state_is" = "$state_should" ] && exit 0 if [ "$state_is" = "$state_should" ]; then
exit 0
fi
# here we check only if the states are valid,
# emmit messages and
# let awk do the work ...
case "$state_should" in case "$state_should" in
absent) absent)
# remove lines starting with key
cat << DONE
tmpfile=\$(mktemp ${file}.cdist.XXXXXXXXXX)
# preserve ownership and permissions by copying existing file over tmpfile
cp -p "$file" "\$tmpfile"
sed '/^$key\($delimiter\+\)/d' "$file" > "\$tmpfile"
mv -f "\$tmpfile" "$file"
DONE
;;
present)
case "$state_is" in case "$state_is" in
absent) absent|nosuchfile)
# add new key and value # nothing to do
printf 'echo "%s%s%s" >> "%s"' "$key" "$delimiter" "$value_escaped" "$file"
;; ;;
wrongvalue) wrongformat|wrongvalue|present)
# change exisiting value echo "remove" >> "$__messages_out"
cat << DONE
tmpfile=\$(mktemp ${file}.cdist.XXXXXXXXXX)
# preserve ownership and permissions by copying existing file over tmpfile
cp -p "$file" "\$tmpfile"
sed "s|^$key\($delimiter\+\).*|$key\\1$value_escaped|" "$file" > "\$tmpfile"
mv -f "\$tmpfile" "$file"
DONE
;; ;;
*) *)
echo "Unknown explorer state: $state_is" >&2 echo "Unknown explorer state: $state_is" >&2
exit 1 exit 1
;;
esac
;;
present)
case "$state_is" in
nosuchfile)
echo "create" >> "$__messages_out"
;;
absent)
echo "insert" >> "$__messages_out"
;;
wrongformated|wrongvalue)
echo "change" >> "$__messages_out"
;;
present)
# nothing to do
;;
*)
echo "Unknown explorer state: $state_is" >&2
exit 1
;;
esac esac
;; ;;
*) *)
echo "Unknown state: $state_should" >&2 echo "Unknown state: $state_should" >&2
exit 1 exit 1
;;
esac esac
cat "$__type/files/remote_script.sh"

View file

@ -31,6 +31,30 @@ key::
The key to change. Defaults to object_id. The key to change. Defaults to object_id.
value:: value::
The value for the key. Optional if state=absent, required otherwise. The value for the key. Optional if state=absent, required otherwise.
comment::
If supplied, the value will be inserted before the line with the key,
but only if the key or value must be changed.
You need to ensure yourself that the line is prefixed with the correct
comment sign. (for example # or ; or wathever ..)
BOOLEAN PARAMETERS
------------------
exact_delimiter::
If supplied, treat additional whitespaces between key, delimiter and value
as wrong value.
MESSAGES
--------
remove::
Removed existing key and value
insert::
Added key and value
change::
Changed value of existing key
create::
A new line was inserted in a new file
EXAMPLES EXAMPLES
@ -46,13 +70,19 @@ __key_value my-fancy-id --file /etc/login.defs --key SYS_UID_MAX --value 666 \
# Enable packet forwarding # Enable packet forwarding
__key_value net.ipv4.ip_forward --file /etc/sysctl.conf --value 1 \ __key_value net.ipv4.ip_forward --file /etc/sysctl.conf --value 1 \
--delimiter '=' --delimiter ' = ' --comment '# my linux kernel should act as a router'
# Remove existing key/value # Remove existing key/value
__key_value LEGACY_KEY --file /etc/somefile --state absent --delimiter '=' __key_value LEGACY_KEY --file /etc/somefile --state absent --delimiter '='
-------------------------------------------------------------------------------- --------------------------------------------------------------------------------
MORE INFORMATION
----------------
This type try to handle as many values as possible, so it doesn't use regexes.
So you need to exactly specify the key and delimiter. Delimiter can be of any lenght.
SEE ALSO SEE ALSO
-------- --------
- cdist-type(7) - cdist-type(7)

View file

@ -0,0 +1 @@
exact_delimiter

View file

@ -0,0 +1 @@

View file

@ -1,3 +1,4 @@
key key
value value
state state
comment

View file

@ -1,6 +1,7 @@
#!/bin/sh #!/bin/sh
# #
# 2012 Nico Schottelius (nico-cdist at schottelius.org) # 2012 Nico Schottelius (nico-cdist at schottelius.org)
# 2014 Steven Armstrong (steven-cdist at armstrong.cc)
# #
# This file is part of cdist. # This file is part of cdist.
# #
@ -74,8 +75,13 @@ case "$state_should" in
fi fi
cat << eof cat << eof
tmp=\$(mktemp) tmpfile=\$(mktemp ${file}.cdist.XXXXXXXXXX)
grep -v $greparg '$regex' '$file' > \$tmp && cat "\$tmp" > '$file' && rm -f "\$tmp" # preserve ownership and permissions of existing file
if [ -f "$file" ]; then
cp -p "$file" "\$tmpfile"
fi
grep -v $greparg '$regex' '$file' > \$tmpfile || true
mv -f "\$tmpfile" "$file"
eof eof
;; ;;
*) *)

View file

@ -1,6 +1,6 @@
#!/bin/sh #!/bin/sh
# #
# 2012 Steven Armstrong (steven-cdist at armstrong.cc) # 2012-2014 Steven Armstrong (steven-cdist at armstrong.cc)
# #
# This file is part of cdist. # This file is part of cdist.
# #
@ -34,8 +34,13 @@ case "$type" in
symbolic) symbolic)
cd "$destination_dir" cd "$destination_dir"
source_is=$(ls -l "$destination" | sed 's/.*-> //g') source_is=$(ls -l "$destination" | sed 's/.*-> //g')
if [ -h "$destination" -a "$source_is" = "$source" ]; then if [ -h "$destination" ]; then
# ignore trailing slashes for comparison
if [ "${source_is%/}" = "${source%/}" ]; then
echo present echo present
else
echo wrongsource
fi
else else
echo absent echo absent
fi fi

View file

@ -1,7 +1,7 @@
#!/bin/sh #!/bin/sh
# #
# 2011-2012 Nico Schottelius (nico-cdist at schottelius.org) # 2011-2012 Nico Schottelius (nico-cdist at schottelius.org)
# 2013 Steven Armstrong (steven-cdist at armstrong.cc) # 2013-2014 Steven Armstrong (steven-cdist at armstrong.cc)
# #
# This file is part of cdist. # This file is part of cdist.
# #
@ -18,9 +18,6 @@
# You should have received a copy of the GNU General Public License # You should have received a copy of the GNU General Public License
# along with cdist. If not, see <http://www.gnu.org/licenses/>. # along with cdist. If not, see <http://www.gnu.org/licenses/>.
# #
#
# Mostly a wrapper for ln
#
destination="/$__object_id" destination="/$__object_id"
@ -50,20 +47,22 @@ case "$state_should" in
present) present)
if [ "$file_type" = "directory" ]; then if [ "$file_type" = "directory" ]; then
# our destination is currently a directory, delete it # our destination is currently a directory, delete it
cat << DONE printf 'rm -rf "%s" &&\n' "$destination"
rm -rf "$destination" else
DONE if [ "$state_is" = "wrongsource" ]; then
# our destination is a symlink but points to the wrong source,
# delete it
printf 'rm -f "%s" &&\n' "$destination"
fi
fi fi
# create our link # create our link
cat << DONE printf 'ln %s -f "%s" "%s"\n' "$lnopt" "$source" "$destination"
ln ${lnopt} -f "$source" "$destination"
DONE
;; ;;
absent) absent)
# only delete if it is a sym/hard link # only delete if it is a sym/hard link
if [ "$file_type" = "symlink" -o "$file_type" = "hardlink" ]; then if [ "$file_type" = "symlink" -o "$file_type" = "hardlink" ]; then
echo rm -f \"$destination\" printf 'rm -f "%s"\n' "$destination"
fi fi
;; ;;
*) *)

View file

@ -16,7 +16,7 @@ This cdist type allows you to setup locales.
OPTIONAL PARAMETERS OPTIONAL PARAMETERS
------------------- -------------------
state:: state::
'present' or 'absent' 'present' or 'absent', defaults to present
EXAMPLES EXAMPLES
@ -43,5 +43,5 @@ SEE ALSO
COPYING COPYING
------- -------
Copyright \(C) 2013 Nico Schottelius. Free use of this software is Copyright \(C) 2013-2014 Nico Schottelius. Free use of this software is
granted under the terms of the GNU General Public License version 3 (GPLv3). granted under the terms of the GNU General Public License version 3 (GPLv3).

View file

@ -1,6 +1,6 @@
#!/bin/sh #!/bin/sh
# #
# 2013 Nico Schottelius (nico-cdist at schottelius.org) # 2013-2014 Nico Schottelius (nico-cdist at schottelius.org)
# #
# This file is part of cdist. # This file is part of cdist.
# #
@ -29,4 +29,12 @@ case "$os" in
# Debian needs a seperate package # Debian needs a seperate package
__package locales --state present __package locales --state present
;; ;;
suse)
:
;;
*)
echo "Sorry, do not know how to handle os: $os" >&2
echo "Please edit the type ${__type##*/} to fix this." >&2
exit 1
;;
esac esac

View file

@ -50,8 +50,11 @@ fi
pkg_version="$(cat "$__object/explorer/pkg_version")" pkg_version="$(cat "$__object/explorer/pkg_version")"
# TODO: Shouldn't be hardcoded if [ -f "$__object/parameter/pkg_path" ]; then
echo export PKG_PATH=ftp://ftp.openbsd.org/pub/OpenBSD/$os_version/packages/$machine/ pkg_path="$(cat "$__object/parameter/pkg_path")"
else
pkg_path="ftp://ftp.openbsd.org/pub/OpenBSD/$os_version/packages/$machine/"
fi
if [ "$pkg_version" ]; then if [ "$pkg_version" ]; then
state_is="present" state_is="present"
@ -65,10 +68,16 @@ case "$state_should" in
present) present)
# use this because pkg_add doesn't properly handle errors # use this because pkg_add doesn't properly handle errors
cat << eof cat << eof
status=\$(pkg_add "$pkgopts" "$name--$flavor") export PKG_PATH="$pkg_path"
status=\$(pkg_add "$pkgopts" "$name--$flavor" 2>&1)
pkg_info | grep "^${name}.*${flavor}" > /dev/null 2>&1
# no error # We didn't find the package in the list of 'installed packages', so it failed
if [ -n "\$status" ]; then # This is necessary because pkg_add doesn't return properly
if [ \$? -ne 0 ]; then
if [ -z "\${status}" ]; then
status="Failed to add package, uncaught exception."
fi
echo "Error: \$status" echo "Error: \$status"
exit 1 exit 1
fi fi
@ -79,9 +88,14 @@ eof
# use this because pkg_add doesn't properly handle errors # use this because pkg_add doesn't properly handle errors
cat << eof cat << eof
status=\$(pkg_delete "$pkgopts" "$name--$flavor") status=\$(pkg_delete "$pkgopts" "$name--$flavor")
pkg_info | grep "^${name}.*${flavor}" > /dev/null 2>&1
# no error # We found the package in the list of 'installed packages'
if [ -n "\$status" ]; then # This would indicate that pkg_delete failed, send the output of pkg_delete
if [ \$? -eq 0 ]; then
if [ -z "\${status}" ]; then
status="Failed to remove package, uncaught exception."
fi
echo "Error: \$status" echo "Error: \$status"
exit 1 exit 1
fi fi

View file

@ -29,6 +29,8 @@ flavor::
state:: state::
Either "present" or "absent", defaults to "present" Either "present" or "absent", defaults to "present"
pkg_path::
Manually specify a PKG_PATH to add packages from.
EXAMPLES EXAMPLES
-------- --------
@ -45,6 +47,10 @@ __package_pkg_openbsd python --state present --name python2
# Remove obsolete package # Remove obsolete package
__package_pkg_openbsd puppet --state absent __package_pkg_openbsd puppet --state absent
# Add a package using a particular mirror
__package_pkg_openbsd bash \
--pkg_path http://openbsd.mirrorcatalogs.com/snapshots/packages/amd64
-------------------------------------------------------------------------------- --------------------------------------------------------------------------------

View file

@ -1,3 +1,4 @@
name name
flavor flavor
state state
pkg_path

View file

@ -1,6 +1,6 @@
#!/bin/sh #!/bin/sh
# #
# 2011 Nico Schottelius (nico-cdist at schottelius.org) # 2011-2014 Nico Schottelius (nico-cdist at schottelius.org)
# #
# This file is part of cdist. # This file is part of cdist.
# #
@ -27,6 +27,14 @@ else
name="$__object_id" name="$__object_id"
fi fi
# Support installing from an URL
if [ -f "$__object/parameter/url" ]; then
install_name="$(cat "$__object/parameter/url")"
else
install_name="$name"
fi
state_should="$(cat "$__object/parameter/state")" state_should="$(cat "$__object/parameter/state")"
if grep -q -E "(centos|redhat|amazon)" "$__global/explorer/os"; then if grep -q -E "(centos|redhat|amazon)" "$__global/explorer/os"; then
@ -47,7 +55,7 @@ fi
case "$state_should" in case "$state_should" in
present) present)
echo yum $opts install \"$name\" echo yum $opts install \"$install_name\"
;; ;;
absent) absent)
echo yum $opts remove \"$name\" echo yum $opts remove \"$name\"

View file

@ -27,6 +27,8 @@ name::
state:: state::
Either "present" or "absent", defaults to "present" Either "present" or "absent", defaults to "present"
url::
URL to use for the package
EXAMPLES EXAMPLES
@ -41,6 +43,9 @@ __package_yum python --state present --name python2
# Remove obsolete package # Remove obsolete package
__package_yum puppet --state absent __package_yum puppet --state absent
__package epel-release-6-8 \
--url http://mirror.switch.ch/ftp/mirror/epel/6/i386/epel-release-6-8.noarch.rpm
-------------------------------------------------------------------------------- --------------------------------------------------------------------------------

View file

@ -1,2 +1,3 @@
name name
state state
url

View file

@ -16,7 +16,7 @@ This type is used on *BSD systems to manage the pf firewall's ruleset.
REQUIRED PARAMETERS REQUIRED PARAMETERS
------------------- -------------------
state:: state::
Either "absent" (no ruleset at all) or "present" Either "absent" (no ruleset at all) or "present", defaults to "present".
OPTIONAL PARAMETERS OPTIONAL PARAMETERS

View file

@ -0,0 +1 @@
present

View file

@ -1 +1,2 @@
source source
state

View file

@ -19,8 +19,7 @@
# #
name="$__object_id" name="$__object_id"
state_should="present" state_should="$(cat "$__object/parameter/state")"
[ -f "$__object/parameter/state" ] && state_should="$(cat "$__object/parameter/state")"
state_is="$(cat "$__object/explorer/state")" state_is="$(cat "$__object/explorer/state")"
if [ "$state_should" != "$state_is" ]; then if [ "$state_should" != "$state_is" ]; then

View file

@ -16,7 +16,7 @@ This cdist type allows you to create or drop postgres databases.
OPTIONAL PARAMETERS OPTIONAL PARAMETERS
------------------- -------------------
state:: state::
either 'present' or 'absent' either 'present' or 'absent', defaults to 'present'.
owner:: owner::
the role owning this database the role owning this database

View file

@ -0,0 +1 @@
present

View file

@ -20,8 +20,7 @@
name="$__object_id" name="$__object_id"
state_is="$(cat "$__object/explorer/state")" state_is="$(cat "$__object/explorer/state")"
state_should="present" state_should="$(cat "$__object/parameter/state")"
[ -f "$__object/parameter/state" ] && state_should="$(cat "$__object/parameter/state")"
[ "$state_is" = "$state_should" ] && exit 0 [ "$state_is" = "$state_should" ] && exit 0

View file

@ -0,0 +1 @@
present

View file

@ -14,17 +14,15 @@ The qemu-img program is used to create qemu images for
qemu and (qemu-)kvm. qemu and (qemu-)kvm.
REQUIRED PARAMETERS
-------------------
size::
Size of the image in qemu-img compatible units.
See qemu-img(1).
OPTIONAL PARAMETERS OPTIONAL PARAMETERS
------------------- -------------------
state:: state::
Either "present" or "absent", defaults to "present" Either "present" or "absent", defaults to "present"
size::
Size of the image in qemu-img compatible units.
Required if state is "present".
EXAMPLES EXAMPLES
@ -42,9 +40,10 @@ __qemu_img /home/services/kvm/vm/myoldvm/system-disk --state absent
SEE ALSO SEE ALSO
-------- --------
- cdist-type(7) - cdist-type(7)
- qemu-img(1)
COPYING COPYING
------- -------
Copyright \(C) 2012 Nico Schottelius. Free use of this software is Copyright \(C) 2012-2014 Nico Schottelius. Free use of this software is
granted under the terms of the GNU General Public License version 3 (GPLv3). granted under the terms of the GNU General Public License version 3 (GPLv3).

View file

@ -3,11 +3,23 @@
# #
format="$(cat "$__object/parameter/format")" format="$(cat "$__object/parameter/format")"
state="$(cat "$__object/parameter/state")" state_should="$(cat "$__object/parameter/state")"
diskimage="/$__object_id" diskimage="/$__object_id"
# Absent is ensured by __file, present by gencode-remote case "$state_should" in
if [ "$state" = "absent" ]; then present)
__file "$diskimage" --state absent if [ ! -f "$__object/parameter/size" ]; then
echo "Size is required when state is present" >&2
exit 1
fi fi
;;
absent)
# Absent is ensured by __file, present by gencode-remote
__file "$diskimage" --state absent
;;
*)
echo "Unsupported state: $state_should" >&2
exit 1
;;
esac

View file

@ -1,2 +1,3 @@
format format
state state
size

View file

@ -1 +0,0 @@
size

View file

@ -0,0 +1,49 @@
cdist-type__rbenv(7)
====================
Nico Schottelius <nico-cdist--@--schottelius.org>
NAME
----
cdist-type__rbenv - Manage rbenv installation
DESCRIPTION
-----------
This cdist type allows you to manage rbenv installations.
It also installs ruby-build.
OPTIONAL PARAMETERS
-------------------
state::
Either "present" or "absent", defaults to "present"
owner::
Which user should own the rbenv installation, defaults to root
EXAMPLES
--------
--------------------------------------------------------------------------------
# Install rbenv including ruby-build for nico
__rbenv /home/nico
# Install rbenv including ruby-build for nico
__rbenv /home/nico --owner nico
# Bastian does not need rbenv anymore, he began to code C99
__rbenv /home/bastian --state absent
--------------------------------------------------------------------------------
SEE ALSO
--------
- cdist-type(7)
COPYING
-------
Copyright \(C) 2012-2014 Nico Schottelius. Free use of this software is
granted under the terms of the GNU General Public License version 3 (GPLv3).

View file

@ -0,0 +1,38 @@
#!/bin/sh
#
# 2012-2014 Nico Schottelius (nico-cdist at schottelius.org)
#
# This file is part of cdist.
#
# cdist is free software: you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation, either version 3 of the License, or
# (at your option) any later version.
#
# cdist is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with cdist. If not, see <http://www.gnu.org/licenses/>.
#
#
homedir="$__object_id"
state_should="$(cat "$__object/parameter/state")"
owner="$(cat "$__object/parameter/owner")"
rbenvdir="$homedir/.rbenv"
rubybuilddir="$rbenvdir/plugins/ruby-build"
__git "$rbenvdir" \
--source git://github.com/sstephenson/rbenv.git \
--owner "$owner" \
--state "$state_should"
require="__git/$rbenvdir" __git "$rubybuilddir" \
--source git://github.com/sstephenson/ruby-build.git \
--owner "$owner" \
--state "$state_should"

View file

@ -0,0 +1 @@
present

View file

@ -0,0 +1 @@
owner

View file

@ -16,7 +16,7 @@ RVM is the Ruby enVironment Manager for the Ruby programming language.
REQUIRED PARAMETERS REQUIRED PARAMETERS
------------------- -------------------
state:: state::
Either "present" or "absent". Either "present" or "absent", defaults to "present".
EXAMPLES EXAMPLES

View file

@ -0,0 +1 @@
present

View file

@ -20,7 +20,7 @@ user::
gemset:: gemset::
The gemset to use The gemset to use
state:: state::
Either "present" or "absent" Either "present" or "absent", defaults to "present".
OPTIONAL PARAMETERS OPTIONAL PARAMETERS
------------------- -------------------

View file

@ -0,0 +1 @@
present

View file

@ -1 +1,2 @@
default default
state

View file

@ -1,3 +1,2 @@
state
gemset gemset
user user

View file

@ -18,7 +18,7 @@ REQUIRED PARAMETERS
user:: user::
The remote user account to use The remote user account to use
state:: state::
Either "present" or "absent". Either "present" or "absent", defaults to "present".
BOOLEAN PARAMETERS BOOLEAN PARAMETERS
------------------- -------------------

View file

@ -0,0 +1 @@
present

View file

@ -1,2 +1 @@
state
user user

View file

@ -18,7 +18,7 @@ REQUIRED PARAMETERS
user:: user::
The remote user account to use The remote user account to use
state:: state::
Either "present" or "absent". Either "present" or "absent", defaults to "present".
BOOLEAN PARAMETERS BOOLEAN PARAMETERS
------------------ ------------------

View file

@ -0,0 +1 @@
present

View file

@ -0,0 +1 @@
state

View file

@ -1,2 +1 @@
state
user user

View file

@ -0,0 +1,22 @@
#!/bin/sh
#
# 2014 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/>.
#
gid="$("$__type_explorer/passwd" | cut -d':' -f 4)"
getent group "$gid" || true

View file

@ -40,9 +40,6 @@ state::
file:: file::
an alternative destination file, defaults to ~$owner/.ssh/authorized_keys an alternative destination file, defaults to ~$owner/.ssh/authorized_keys
comment::
an optional comment
BOOLEAN PARAMETERS BOOLEAN PARAMETERS
------------------ ------------------
@ -67,12 +64,11 @@ __ssh_authorized_keys root \
__ssh_authorized_keys user-name \ __ssh_authorized_keys user-name \
--key "ssh-rsa AXYZAAB3NzaC1yc2..." --key "ssh-rsa AXYZAAB3NzaC1yc2..."
# same as above, but with explicit owner, two keys and a comment # same as above, but with explicit owner and two keys
__ssh_authorized_keys some-fancy-id \ __ssh_authorized_keys some-fancy-id \
--owner user-name \ --owner user-name \
--key "ssh-rsa AXYZAAB3NzaC1yc2..." \ --key "ssh-rsa AXYZAAB3NzaC1yc2..." \
--key "ssh-rsa AZXYAAB3NzaC1yc2..." \ --key "ssh-rsa AZXYAAB3NzaC1yc2..."
--comment "allow the members of project foo to login"
# same as above, but authorized_keys file in non standard location # same as above, but authorized_keys file in non standard location
__ssh_authorized_keys some-fancy-id \ __ssh_authorized_keys some-fancy-id \
@ -97,5 +93,5 @@ SEE ALSO
COPYING COPYING
------- -------
Copyright \(C) 2012 Steven Armstrong. Free use of this software is Copyright \(C) 2012-2014 Steven Armstrong. Free use of this software is
granted under the terms of the GNU General Public License version 3 (GPLv3). granted under the terms of the GNU General Public License version 3 (GPLv3).

View file

@ -1,6 +1,7 @@
#!/bin/sh #!/bin/sh
# #
# 2012 Steven Armstrong (steven-cdist at armstrong.cc) # 2012-2014 Steven Armstrong (steven-cdist at armstrong.cc)
# 2014 Nico Schottelius (nico-cdist at schottelius.org)
# #
# This file is part of cdist. # This file is part of cdist.
# #
@ -32,7 +33,7 @@ else
fi fi
if [ ! -f "$__object/parameter/noparent" -o ! -f "$__object/parameter/nofile" ]; then if [ ! -f "$__object/parameter/noparent" -o ! -f "$__object/parameter/nofile" ]; then
group="$(cut -d':' -f 4 "$__object/explorer/passwd")" group="$(cut -d':' -f 1 "$__object/explorer/group")"
if [ -z "$group" ]; then if [ -z "$group" ]; then
echo "Failed to get owners group from explorer." >&2 echo "Failed to get owners group from explorer." >&2
exit 1 exit 1
@ -56,16 +57,32 @@ if [ ! -f "$__object/parameter/noparent" -o ! -f "$__object/parameter/nofile" ];
fi fi
fi fi
# Generate entry for inclusion in authorized_keys file # Remove legacy blocks created by old versions of this type
( # FIXME: remove me in 3.2+
if [ -f "$__object/parameter/comment" ]; then
echo "# $(cat "$__object/parameter/comment")"
fi
cat "$__object/parameter/key"
) | \
__block "$__object_name" \ __block "$__object_name" \
--file "$file" \ --file "$file" \
--prefix "#cdist:$__object_name" \ --prefix "#cdist:$__object_name" \
--suffix "#/cdist:$__object_name" \ --suffix "#/cdist:$__object_name" \
--state "$state" \ --state 'absent' \
--text - --text - << DONE
remove legacy block
DONE
_cksum() {
echo "$1" | cksum | cut -d' ' -f 1
}
while read key; do
cksum_key="$(_cksum "$key")"
line_id="${owner}-${cksum_key}"
set -- "$line_id"
set -- "$@" --file "$file"
set -- "$@" --regex ".*$key.*"
if [ "$state" = 'present' ]; then
set -- "$@" --line "$key"
fi
set -- "$@" --state "$state"
# Ensure __line does not read stdin
require="__block/$__object_name" __line "$@" < /dev/null
done < "$__object/parameter/key"

View file

@ -1,4 +1,3 @@
owner owner
state state
file file
comment

View file

@ -27,13 +27,18 @@ os=$(cat "$__global/explorer/os")
case "$os" in case "$os" in
archlinux|debian|ubuntu) archlinux|debian|ubuntu)
__package tzdata --state present package=tzdata
require="__package/tzdata" __link /etc/localtime \ ;;
--source "/usr/share/zoneinfo/${timezone}" \ suse)
--type symbolic package=timezone
;; ;;
*) *)
echo "Unsupported OS $os" >&2 echo "Unsupported OS $os" >&2
exit 1 exit 1
;; ;;
esac esac
__package "$package" --state present
require="__package/$package" __link /etc/localtime \
--source "/usr/share/zoneinfo/${timezone}" \
--type symbolic

View file

@ -26,9 +26,10 @@ os="$($__explorer/os)"
# Default to using shadow passwords # Default to using shadow passwords
database="shadow" database="shadow"
if [ "$os" = "freebsd" ]; then case "$os" in
database="passwd" "freebsd"|"openbsd") database="passwd";;
fi esac
getent "$database" "$name" || true getent "$database" "$name" || true

View file

@ -0,0 +1,61 @@
#!/bin/sh
set -u
cat << DONE
# Created by cdist ${__type##*/}
# Do not change. Changes will be overwritten.
#
[$repo_name]
DONE
# single value properties
single_value='name
metalink
mirrorlist
gpgcakey
gpgcheck
exclude
includepkgs
failovermethod
timeout
http_caching
retries
throttle
bandwidth
sslcacert
sslverify
sslclientcert
sslclientkey
ssl_check_cert_permissions
metadata_expire
mirrorlist_expire
proxy
proxy_username
proxy_password
username
password
cost'
for key in $single_value; do
if [ -f "$__object/parameter/$key" ]; then
printf '%s=%s\n' "$key" "$(cat "$__object/parameter/$key")"
fi
done
# multi value properties
for key in baseurl gpgkey; do
if [ -f "$__object/parameter/$key" ]; then
printf '%s=' "$key"
prefix=''
while read line; do
printf '%s%s\n' "$prefix" "$line"
prefix=' '
done < "$__object/parameter/$key"
fi
done
# boolean properties
for key in enabled repo_gpgcheck keepalive skip_if_unavailable; do
if [ -f "$__object/parameter/$key" ]; then
printf '%s=1\n' "$key"
fi
done
# special cases
if [ -f "$__object/parameter/disablegroups" ]; then
printf 'enablegroups=0\n'
fi

View file

@ -0,0 +1,91 @@
cdist-type__yum_repo(7)
=======================
Steven Armstrong <steven-cdist--@--armstrong.cc>
NAME
----
cdist-type__yum_repo - manage yum repositories
DESCRIPTION
-----------
For all undocumented parameters see yum.conf(5).
REQUIRED PARAMETERS
-------------------
None.
OPTIONAL PARAMETERS
-------------------
state::
'present' or 'absent'. Defaults to 'present'
repositoryid::
Defaults to __object_id.
name::
baseurl::
Can be specified multiple times.
metalink::
mirrorlist::
gpgkey::
Can be specified multiple times.
gpgcakey::
gpgcheck::
exclude::
includepkgs::
failovermethod::
timeout::
http_caching::
retries::
throttle::
bandwidth::
sslcacert::
sslverify::
sslclientcert::
sslclientkey::
ssl_check_cert_permissions::
metadata_expire::
mirrorlist_expire::
proxy::
proxy_username::
proxy_password::
username::
password::
cost::
BOOLEAN PARAMETERS
------------------
enabled::
repo_gpgcheck::
disablegroups::
! enablegroups
keepalive::
skip_if_unavailable::
EXAMPLES
--------
--------------------------------------------------------------------------------
__yum_repo epel \
--name 'Extra Packages for Enterprise Linux 6 - $basearch' \
--mirrorlist 'https://mirrors.fedoraproject.org/metalink?repo=epel-$releasever&arch=$basearch' \
--failovermethod priority \
--enabled \
--gpgcheck 1 \
--gpgkey https://fedoraproject.org/static/0608B895.txt
--------------------------------------------------------------------------------
SEE ALSO
--------
- cdist-type(7)
COPYING
-------
Copyright \(C) 2014 Steven Armstrong. Free use of this software is
granted under the terms of the GNU General Public License version 3 (GPLv3).

View file

@ -0,0 +1,40 @@
#!/bin/sh
#
# 2014 Steven Armstrong (steven-cdist at armstrong.cc)
#
# This file is part of cdist.
#
# cdist is free software: you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation, either version 3 of the License, or
# (at your option) any later version.
#
# cdist is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with cdist. If not, see <http://www.gnu.org/licenses/>.
#
os=$(cat "$__global/explorer/os")
state="$(cat "$__object/parameter/state")"
case "$os" in
centos)
repo_name="$__object_id"
export repo_name
repo_file="/etc/yum.repos.d/${repo_name}.repo"
"$__type/files/repo.template" | \
__file "$repo_file" \
--owner root --group root --mode 644 \
--state "$state" \
--source -
;;
*)
echo "Your operating system ($os) is currently not supported by this type (${__type##*/})." >&2
echo "Please contribute an implementation for it if you can." >&2
exit 1
;;
esac

View file

@ -0,0 +1,3 @@
https://access.redhat.com/site/documentation/en-US/Red_Hat_Enterprise_Linux/6/html/Deployment_Guide/sec-Configuring_Yum_and_Yum_Repositories.html
https://access.redhat.com/site/documentation/en-US/Red_Hat_Enterprise_Linux_OpenStack_Platform/2/html/Getting_Started_Guide/sect-Configuring_Software_Repositories.html
http://docs.puppetlabs.com/references/latest/type.html#yumrepo

View file

@ -0,0 +1,5 @@
enabled
repo_gpgcheck
disablegroups
keepalive
skip_if_unavailable

View file

@ -0,0 +1 @@
present

View file

@ -0,0 +1,27 @@
bandwidth
cost
exclude
failovermethod
gpgcakey
gpgcheck
http_caching
includepkgs
metadata_expire
mirrorlist
mirrorlist_expire
name
password
proxy
proxy_password
proxy_username
repositoryid
retries
sslcacert
ssl_check_cert_permissions
sslclientcert
sslclientkey
sslverify
state
throttle
timeout
username

View file

@ -0,0 +1,2 @@
baseurl
gpgkey

View file

@ -18,11 +18,11 @@
# along with cdist. If not, see <http://www.gnu.org/licenses/>. # along with cdist. If not, see <http://www.gnu.org/licenses/>.
# #
# #
# Retrieve the id from the repo with the uri from parameter repo_uri - parsed zypper output # Retrieve the id from the repo with the uri from parameter uri - parsed zypper output
# #
# #
if [ -f "$__object/parameter/repo_uri" ]; then if [ -f "$__object/parameter/uri" ]; then
uri="$(cat "$__object/parameter/repo_uri")" uri="$(cat "$__object/parameter/uri")"
else else
uri="$__object_id" uri="$__object_id"
fi fi

View file

@ -25,7 +25,7 @@
#exec >&2 #exec >&2
#set -x #set -x
zypper_def_opts=" -q " zypper_def_opts=" -q --non-interactive --gpg-auto-import-keys "
if [ -f "$__object/parameter/repo_desc" ]; then if [ -f "$__object/parameter/repo_desc" ]; then
desc="$(cat "$__object/parameter/repo_desc")" desc="$(cat "$__object/parameter/repo_desc")"
@ -33,8 +33,8 @@ else
desc="$__object_id" desc="$__object_id"
fi fi
if [ -f "$__object/parameter/repo_uri" ]; then if [ -f "$__object/parameter/uri" ]; then
uri="$(cat "$__object/parameter/repo_uri")" uri="$(cat "$__object/parameter/uri")"
else else
uri="$__object_id" uri="$__object_id"
fi fi
@ -65,7 +65,7 @@ fi
case "$state" in case "$state" in
present) present)
if [ -z "$desc" ] || [ -z "$uri" ]; then if [ -z "$desc" ] || [ -z "$uri" ]; then
echo "parameter repo_desc and repo_uri for $state needed" >&2 echo "parameter repo_desc and uri for $state needed" >&2
exit 4 exit 4
fi fi
if [ -z "$repo_id" ]; then if [ -z "$repo_id" ]; then

View file

@ -22,13 +22,13 @@ OPTIONAL PARAMETERS
------------------- -------------------
state:: state::
Either "present" or "absent" or "enabled" or "disabled", defaults to "present" + Either "present" or "absent" or "enabled" or "disabled", defaults to "present" +
#present# - make sure that the repo is aviable, needs repo_uri and repo_desc + #present# - make sure that the repo is aviable, needs uri and repo_desc +
for all following states, the repo can be searched via repo_id or repo_uri + for all following states, the repo can be searched via repo_id or uri +
#absent# - drop the repo if found + #absent# - drop the repo if found +
#enabled# - a repo can have state disabled if installed via zypper service (ris), in this case, you can enable the repo + #enabled# - a repo can have state disabled if installed via zypper service (ris), in this case, you can enable the repo +
#disabled# - instead of absent (drop), a repo can also set to disabled, wich makes it inaccessible + #disabled# - instead of absent (drop), a repo can also set to disabled, wich makes it inaccessible +
repo_uri:: uri::
If supplied, use the uri and not the object id as repo uri. If supplied, use the uri and not the object id as repo uri.
repo_desc:: repo_desc::
@ -43,10 +43,10 @@ EXAMPLES
-------------------------------------------------------------------------------- --------------------------------------------------------------------------------
# Ensure testrepo in installed # Ensure testrepo in installed
__zypper_repo testrepo --state present --repo_uri http://url.to.your.repo/with/path __zypper_repo testrepo --state present --uri http://url.to.your.repo/with/path
# Drop repo by repo uri # Drop repo by repo uri
__zypper_repo testrepo --state absent --repo_uri http://url.to.your.repo/with/path __zypper_repo testrepo --state absent --uri http://url.to.your.repo/with/path
# Drop repo by id number (attention: repos are always numbered from 1 to max) # Drop repo by id number (attention: repos are always numbered from 1 to max)
__zypper_repo testrepo --state absent --repo_id 1 __zypper_repo testrepo --state absent --repo_id 1
@ -55,7 +55,7 @@ __zypper_repo testrepo --state absent --repo_id 1
__zypper_repo testrepo2 --state enabled --repo_id 2 __zypper_repo testrepo2 --state enabled --repo_id 2
# enable repo by uri # enable repo by uri
__zypper_repo testrepo3 --state enabled --repo_uri http://url.to.your.repo/with/path __zypper_repo testrepo3 --state enabled --uri http://url.to.your.repo/with/path
# disable a repo works like enabling it # disable a repo works like enabling it
__zypper_repo testrepo4 --state disabled --repo_id 4 __zypper_repo testrepo4 --state disabled --repo_id 4

View file

@ -1,4 +1,4 @@
state state
repo_uri uri
repo_desc repo_desc
repo_id repo_id

View file

@ -20,8 +20,8 @@
# #
# Manage services with Zypper (mostly suse) # Manage services with Zypper (mostly suse)
# #
if [ -f "$__object/parameter/service_uri" ]; then if [ -f "$__object/parameter/uri" ]; then
uri="$(cat "$__object/parameter/service_uri")" uri="$(cat "$__object/parameter/uri")"
else else
uri="/$__object_id" uri="/$__object_id"
fi fi

View file

@ -20,8 +20,8 @@
# #
# Manage services with Zypper (mostly suse) # Manage services with Zypper (mostly suse)
# #
if [ -f "$__object/parameter/service_uri" ]; then if [ -f "$__object/parameter/uri" ]; then
uri="$(cat "$__object/parameter/service_uri")" uri="$(cat "$__object/parameter/uri")"
else else
uri="/$__object_id" uri="/$__object_id"
fi fi

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