forked from ungleich-public/cdist
Merge branches 'preos' and 'install_integration' into 4.0-pre-not-stable
This commit is contained in:
commit
5f9eef3bbb
55 changed files with 765 additions and 182 deletions
8
Makefile
8
Makefile
|
@ -20,6 +20,13 @@
|
|||
|
||||
A2XM=a2x -f manpage --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
|
||||
|
||||
MANDIR=docs/man
|
||||
|
@ -86,6 +93,7 @@ MANSTATICALL=$(MANSTATICMAN) $(MANSTATICHTML)
|
|||
# Creating the type html page
|
||||
%.html: %.text
|
||||
$(A2XH) $^
|
||||
$(CROSSLINK) $@
|
||||
|
||||
man: $(MANTYPEALL) $(MANREFALL) $(MANSTATICALL)
|
||||
|
||||
|
|
|
@ -104,6 +104,11 @@ eof
|
|||
;;
|
||||
|
||||
ml-release)
|
||||
if [ $# -ne 1 ]; then
|
||||
echo "$0 ml-release version" >&2
|
||||
exit 1
|
||||
fi
|
||||
|
||||
version=$1; shift
|
||||
|
||||
to_a=cdist
|
||||
|
@ -142,35 +147,17 @@ eof
|
|||
|
||||
freecode-release)
|
||||
version=$1; shift
|
||||
api_token=$(awk '/machine freecode login/ { print $8 }' ~/.netrc)
|
||||
|
||||
printf "Enter tag list for freecode release %s> " "$version"
|
||||
read taglist
|
||||
|
||||
printf "Enter changelog for freecode release %s> " "$version"
|
||||
read changelog
|
||||
|
||||
echo "Submit preview"
|
||||
cat << eof
|
||||
tag_list = $taglist
|
||||
changelog = $changelog
|
||||
version = $version
|
||||
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
|
||||
|
||||
echo "Submitting to freecode ..."
|
||||
python2 ~/p/foreign/freecode-submit-2.7/freecode-submit -P cdist \
|
||||
-v "$version" -c "$changelog" \
|
||||
-t "$taglist" \
|
||||
-n
|
||||
;;
|
||||
|
||||
release-git-tag)
|
||||
|
|
|
@ -24,12 +24,12 @@
|
|||
#
|
||||
|
||||
# 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'
|
||||
exit 0
|
||||
fi
|
||||
|
||||
if ! command -v ifconfig; then
|
||||
if ! command -v ifconfig >/dev/null; then
|
||||
# no ifconfig, nothing we could do
|
||||
exit 0
|
||||
fi
|
||||
|
|
|
@ -25,7 +25,7 @@ destination="/$__object_id"
|
|||
|
||||
os=$("$__explorer/os")
|
||||
case "$os" in
|
||||
"freebsd")
|
||||
"freebsd"|"openbsd")
|
||||
# FIXME: should be something like this based on man page, but can not test
|
||||
stat -f "type: %ST
|
||||
owner: %Du %Su
|
||||
|
@ -35,6 +35,15 @@ size: %Dz
|
|||
links: %Dl
|
||||
" "$destination"
|
||||
;;
|
||||
"macosx")
|
||||
stat -f "type: %HT
|
||||
owner: %Du %Su
|
||||
group: %Dg %Sg
|
||||
mode: %Lp %Sp
|
||||
size: %Dz
|
||||
links: %Dl
|
||||
" "$destination"
|
||||
;;
|
||||
*)
|
||||
stat --printf="type: %F
|
||||
owner: %u %U
|
||||
|
|
|
@ -25,7 +25,7 @@ destination="/$__object_id"
|
|||
|
||||
os=$("$__explorer/os")
|
||||
case "$os" in
|
||||
"freebsd")
|
||||
"freebsd"|"openbsd")
|
||||
# FIXME: should be something like this based on man page, but can not test
|
||||
stat -f "type: %ST
|
||||
owner: %Du %Su
|
||||
|
@ -33,6 +33,13 @@ group: %Dg %Sg
|
|||
mode: %Op %Sp
|
||||
" "$destination"
|
||||
;;
|
||||
"macosx")
|
||||
stat -f "type: %HT
|
||||
owner: %Du %Su
|
||||
group: %Dg %Sg
|
||||
mode: %Lp %Sp
|
||||
" "$destination"
|
||||
;;
|
||||
*)
|
||||
stat --printf="type: %F
|
||||
owner: %u %U
|
||||
|
|
|
@ -33,6 +33,15 @@ group: %Dg %Sg
|
|||
mode: %Op %Sp
|
||||
size: %Dz
|
||||
links: %Dl
|
||||
" "$destination"
|
||||
;;
|
||||
"macosx")
|
||||
stat -f "type: %HT
|
||||
owner: %Du %Su
|
||||
group: %Dg %Sg
|
||||
mode: %Lp %Sp
|
||||
size: %Dz
|
||||
links: %Dl
|
||||
" "$destination"
|
||||
;;
|
||||
*)
|
||||
|
|
|
@ -21,6 +21,10 @@
|
|||
# Retrieve the contents of /etc/hostname
|
||||
#
|
||||
|
||||
# Almost any distribution
|
||||
if [ -f /etc/hostname ]; then
|
||||
cat /etc/hostname
|
||||
# SuSE
|
||||
elif [ -f /etc/HOSTNAME ]; then
|
||||
cat /etc/HOSTNAME
|
||||
fi
|
||||
|
|
26
cdist/conf/type/__hostname/explorer/hostname_sysconfig
Executable file
26
cdist/conf/type/__hostname/explorer/hostname_sysconfig
Executable 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
|
|
@ -28,14 +28,28 @@ fi
|
|||
os=$(cat "$__global/explorer/os")
|
||||
name_running=$(cat "$__global/explorer/hostname")
|
||||
name_config=$(cat "$__object/explorer/hostname_file")
|
||||
name_sysconfig=$(cat "$__object/explorer/hostname_sysconfig")
|
||||
has_hostnamectl=$(cat "$__object/explorer/has_hostnamectl")
|
||||
|
||||
################################################################################
|
||||
# If everything is ok -> exit
|
||||
#
|
||||
if [ "$name_config" = "$name_should" -a "$name_running" = "$name_should" ]; then
|
||||
exit 0
|
||||
fi
|
||||
case "$os" in
|
||||
archlinux|debian|suse|ubuntu)
|
||||
if [ "$name_config" = "$name_should" -a "$name_running" = "$name_should" ]; then
|
||||
exit 0
|
||||
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
|
||||
|
@ -45,6 +59,17 @@ echo changed >> "$__messages_out"
|
|||
if [ "$has_hostnamectl" ]; then
|
||||
echo "hostnamectl set-hostname '$name_should'"
|
||||
else
|
||||
echo "hostname '$name_should'"
|
||||
echo "printf '%s\n' '$name_should' > /etc/hostname"
|
||||
case "$os" in
|
||||
archlinux|debian|ubuntu)
|
||||
echo "hostname '$name_should'"
|
||||
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
|
||||
|
|
|
@ -20,6 +20,12 @@
|
|||
#
|
||||
|
||||
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() {
|
||||
echo "Your operating system ($os) is currently not supported by this type (${__type##*/})." >&2
|
||||
|
@ -28,11 +34,18 @@ not_supported() {
|
|||
}
|
||||
|
||||
case "$os" in
|
||||
archlinux|debian|ubuntu)
|
||||
# handled in gencode-remote
|
||||
:
|
||||
;;
|
||||
*)
|
||||
not_supported
|
||||
;;
|
||||
archlinux|debian|suse|ubuntu)
|
||||
# handled in gencode-remote
|
||||
:
|
||||
;;
|
||||
centos)
|
||||
__key_value sysconfig-hostname \
|
||||
--file /etc/sysconfig/network \
|
||||
--delimiter '=' \
|
||||
--key HOSTNAME \
|
||||
--value "$name_should" --exact_delimiter
|
||||
;;
|
||||
*)
|
||||
not_supported
|
||||
;;
|
||||
esac
|
||||
|
|
|
@ -39,7 +39,7 @@ fi
|
|||
# backslash-escaped $jaildir
|
||||
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
|
||||
echo "STARTED"
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
#!/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.
|
||||
#
|
||||
|
@ -104,6 +104,7 @@ stopJail() {
|
|||
# Check $status before issuing command
|
||||
if [ "$status" = "STARTED" ]; then
|
||||
echo "/etc/rc.d/jail stop ${name}"
|
||||
echo "stop" >> "$__messages_out"
|
||||
fi
|
||||
}
|
||||
|
||||
|
@ -111,6 +112,7 @@ startJail() {
|
|||
# Check $status before issuing command
|
||||
if [ "$status" = "NOTSTART" ]; then
|
||||
echo "/etc/rc.d/jail start ${name}"
|
||||
echo "start" >> "$__messages_out"
|
||||
fi
|
||||
}
|
||||
|
||||
|
@ -162,6 +164,7 @@ EOF
|
|||
rm -f /etc/rc.conf.bak
|
||||
fi
|
||||
EOF
|
||||
echo "delete" >> "$__messages_out"
|
||||
}
|
||||
|
||||
createJail() {
|
||||
|
@ -215,6 +218,7 @@ cat <<EOF
|
|||
fi
|
||||
|
||||
EOF
|
||||
echo "create" >> "$__messages_out"
|
||||
|
||||
# Create the ro+rw mountpoint entries in fstab
|
||||
cat <<EOF
|
||||
|
@ -310,6 +314,7 @@ if [ "$onboot" = "yes" ]; then
|
|||
fi
|
||||
unset jail_list
|
||||
EOF
|
||||
echo "onboot" >> "$__messages_out"
|
||||
fi
|
||||
|
||||
# Add the normal entries into the jail's rc.conf
|
||||
|
|
|
@ -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
|
||||
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
|
||||
--------
|
||||
|
||||
|
|
|
@ -29,8 +29,8 @@
|
|||
# Can only be used on FreeBSD
|
||||
os="$(cat "$__global/explorer/os")"
|
||||
if [ ! "$os" = "freebsd" ]; then
|
||||
echo "__jail can only be used on FreeBSD targets!" >&2
|
||||
exit 1
|
||||
echo "__jail can only be used on FreeBSD targets!" >&2
|
||||
exit 1
|
||||
fi
|
||||
|
||||
jaildir="$(cat "$__object/parameter/jaildir")"
|
||||
|
|
|
@ -1,6 +1,7 @@
|
|||
#!/bin/sh
|
||||
#
|
||||
# 2011 Steven Armstrong (steven-cdist at armstrong.cc)
|
||||
# 2014 Daniel Heule (hda at sfs.biz)
|
||||
#
|
||||
# This file is part of cdist.
|
||||
#
|
||||
|
@ -18,36 +19,85 @@
|
|||
# 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")"
|
||||
state="$(cat "$__object/parameter/state" 2>/dev/null \
|
||||
|| echo "present")"
|
||||
file="$(cat "$__object/parameter/file")"
|
||||
delimiter="$(cat "$__object/parameter/delimiter")"
|
||||
value="$(cat "$__object/parameter/value" 2>/dev/null \
|
||||
|| echo "__CDIST_NOTSET__")"
|
||||
export state="$(cat "$__object/parameter/state")"
|
||||
|
||||
case "$state" in
|
||||
absent)
|
||||
if grep -q -E "^$key$delimiter+" "$file"; then
|
||||
# if the key exists, with whatever value, we will have to remove it
|
||||
# so report it as present
|
||||
echo present
|
||||
else
|
||||
# key does not exist
|
||||
echo absent
|
||||
fi
|
||||
;;
|
||||
present)
|
||||
if grep -q -E "^$key$delimiter+$value$" "$file"; then
|
||||
# key exists and value is same
|
||||
echo present
|
||||
elif grep -q -E "^$key$delimiter+" "$file"; then
|
||||
# key exists, but value is empty or different
|
||||
echo wrongvalue
|
||||
else
|
||||
# key does not exist
|
||||
echo absent
|
||||
fi
|
||||
;;
|
||||
esac
|
||||
file="$(cat "$__object/parameter/file")"
|
||||
|
||||
if [ ! -f "$file" ]; then
|
||||
echo "nosuchfile"
|
||||
exit
|
||||
fi
|
||||
|
||||
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
|
||||
|
||||
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
|
||||
|
|
102
cdist/conf/type/__key_value/files/remote_script.sh
Normal file
102
cdist/conf/type/__key_value/files/remote_script.sh
Normal 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"
|
|
@ -2,6 +2,7 @@
|
|||
#
|
||||
# 2011 Steven Armstrong (steven-cdist at armstrong.cc)
|
||||
# 2012-2014 Nico Schottelius (nico-cdist at schottelius.org)
|
||||
# 2014 Daniel Heule (hda at sfs.biz)
|
||||
#
|
||||
# This file is part of cdist.
|
||||
#
|
||||
|
@ -19,55 +20,56 @@
|
|||
# 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")"
|
||||
|
||||
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" = "$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
|
||||
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
|
||||
echo "remove" >> "$__messages_out"
|
||||
;;
|
||||
present)
|
||||
case "$state_is" in
|
||||
absent)
|
||||
# add new key and value
|
||||
printf 'echo "%s%s%s" >> "%s"' "$key" "$delimiter" "$value_escaped" "$file"
|
||||
echo "add" >> "$__messages_out"
|
||||
absent|nosuchfile)
|
||||
# nothing to do
|
||||
;;
|
||||
wrongvalue)
|
||||
# change exisiting value
|
||||
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 "changevalue" >> "$__messages_out"
|
||||
wrongformat|wrongvalue|present)
|
||||
echo "remove" >> "$__messages_out"
|
||||
;;
|
||||
*)
|
||||
echo "Unknown explorer state: $state_is" >&2
|
||||
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
|
||||
;;
|
||||
*)
|
||||
echo "Unknown state: $state_should" >&2
|
||||
exit 1
|
||||
;;
|
||||
esac
|
||||
|
||||
cat "$__type/files/remote_script.sh"
|
||||
|
|
|
@ -25,21 +25,36 @@ delimiter::
|
|||
OPTIONAL PARAMETERS
|
||||
-------------------
|
||||
state::
|
||||
present or absent, defaults to present. If present, sets the key to value,
|
||||
if absent, removes the key from the file.
|
||||
present or absent, defaults to present. If present, sets the key to value,
|
||||
if absent, removes the key from the file.
|
||||
key::
|
||||
The key to change. Defaults to object_id.
|
||||
The key to change. Defaults to object_id.
|
||||
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
|
||||
--------
|
||||
create::
|
||||
remove::
|
||||
Removed existing key and value
|
||||
insert::
|
||||
Added key and value
|
||||
change::
|
||||
Changed value of existing key
|
||||
remove::
|
||||
Removed existing key and value
|
||||
create::
|
||||
A new line was inserted in a new file
|
||||
|
||||
|
||||
EXAMPLES
|
||||
|
@ -55,13 +70,19 @@ __key_value my-fancy-id --file /etc/login.defs --key SYS_UID_MAX --value 666 \
|
|||
|
||||
# Enable packet forwarding
|
||||
__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
|
||||
__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
|
||||
--------
|
||||
- cdist-type(7)
|
||||
|
|
1
cdist/conf/type/__key_value/parameter/boolean
Normal file
1
cdist/conf/type/__key_value/parameter/boolean
Normal file
|
@ -0,0 +1 @@
|
|||
exact_delimiter
|
1
cdist/conf/type/__key_value/parameter/default/comment
Normal file
1
cdist/conf/type/__key_value/parameter/default/comment
Normal file
|
@ -0,0 +1 @@
|
|||
|
|
@ -1,3 +1,4 @@
|
|||
key
|
||||
value
|
||||
state
|
||||
comment
|
||||
|
|
|
@ -29,6 +29,9 @@ case "$os" in
|
|||
# Debian needs a seperate package
|
||||
__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
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
#!/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.
|
||||
#
|
||||
|
@ -27,6 +27,14 @@ else
|
|||
name="$__object_id"
|
||||
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")"
|
||||
|
||||
if grep -q -E "(centos|redhat|amazon)" "$__global/explorer/os"; then
|
||||
|
@ -47,7 +55,7 @@ fi
|
|||
|
||||
case "$state_should" in
|
||||
present)
|
||||
echo yum $opts install \"$name\"
|
||||
echo yum $opts install \"$install_name\"
|
||||
;;
|
||||
absent)
|
||||
echo yum $opts remove \"$name\"
|
||||
|
|
|
@ -27,6 +27,8 @@ name::
|
|||
|
||||
state::
|
||||
Either "present" or "absent", defaults to "present"
|
||||
url::
|
||||
URL to use for the package
|
||||
|
||||
|
||||
EXAMPLES
|
||||
|
@ -41,6 +43,9 @@ __package_yum python --state present --name python2
|
|||
|
||||
# Remove obsolete package
|
||||
__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
|
||||
--------------------------------------------------------------------------------
|
||||
|
||||
|
||||
|
|
|
@ -1,2 +1,3 @@
|
|||
name
|
||||
state
|
||||
url
|
||||
|
|
|
@ -27,13 +27,18 @@ os=$(cat "$__global/explorer/os")
|
|||
|
||||
case "$os" in
|
||||
archlinux|debian|ubuntu)
|
||||
__package tzdata --state present
|
||||
require="__package/tzdata" __link /etc/localtime \
|
||||
--source "/usr/share/zoneinfo/${timezone}" \
|
||||
--type symbolic
|
||||
package=tzdata
|
||||
;;
|
||||
suse)
|
||||
package=timezone
|
||||
;;
|
||||
*)
|
||||
echo "Unsupported OS $os" >&2
|
||||
exit 1
|
||||
;;
|
||||
esac
|
||||
|
||||
__package "$package" --state present
|
||||
require="__package/$package" __link /etc/localtime \
|
||||
--source "/usr/share/zoneinfo/${timezone}" \
|
||||
--type symbolic
|
||||
|
|
61
cdist/conf/type/__yum_repo/files/repo.template
Executable file
61
cdist/conf/type/__yum_repo/files/repo.template
Executable 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
|
91
cdist/conf/type/__yum_repo/man.text
Normal file
91
cdist/conf/type/__yum_repo/man.text
Normal 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).
|
40
cdist/conf/type/__yum_repo/manifest
Executable file
40
cdist/conf/type/__yum_repo/manifest
Executable 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
|
3
cdist/conf/type/__yum_repo/notes
Normal file
3
cdist/conf/type/__yum_repo/notes
Normal 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
|
5
cdist/conf/type/__yum_repo/parameter/boolean
Normal file
5
cdist/conf/type/__yum_repo/parameter/boolean
Normal file
|
@ -0,0 +1,5 @@
|
|||
enabled
|
||||
repo_gpgcheck
|
||||
disablegroups
|
||||
keepalive
|
||||
skip_if_unavailable
|
1
cdist/conf/type/__yum_repo/parameter/default/state
Normal file
1
cdist/conf/type/__yum_repo/parameter/default/state
Normal file
|
@ -0,0 +1 @@
|
|||
present
|
27
cdist/conf/type/__yum_repo/parameter/optional
Normal file
27
cdist/conf/type/__yum_repo/parameter/optional
Normal 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
|
2
cdist/conf/type/__yum_repo/parameter/optional_multiple
Normal file
2
cdist/conf/type/__yum_repo/parameter/optional_multiple
Normal file
|
@ -0,0 +1,2 @@
|
|||
baseurl
|
||||
gpgkey
|
|
@ -18,11 +18,11 @@
|
|||
# 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
|
||||
uri="$(cat "$__object/parameter/repo_uri")"
|
||||
if [ -f "$__object/parameter/uri" ]; then
|
||||
uri="$(cat "$__object/parameter/uri")"
|
||||
else
|
||||
uri="$__object_id"
|
||||
fi
|
||||
|
|
|
@ -25,7 +25,7 @@
|
|||
#exec >&2
|
||||
#set -x
|
||||
|
||||
zypper_def_opts=" -q "
|
||||
zypper_def_opts=" -q --non-interactive --gpg-auto-import-keys "
|
||||
|
||||
if [ -f "$__object/parameter/repo_desc" ]; then
|
||||
desc="$(cat "$__object/parameter/repo_desc")"
|
||||
|
@ -33,8 +33,8 @@ else
|
|||
desc="$__object_id"
|
||||
fi
|
||||
|
||||
if [ -f "$__object/parameter/repo_uri" ]; then
|
||||
uri="$(cat "$__object/parameter/repo_uri")"
|
||||
if [ -f "$__object/parameter/uri" ]; then
|
||||
uri="$(cat "$__object/parameter/uri")"
|
||||
else
|
||||
uri="$__object_id"
|
||||
fi
|
||||
|
@ -65,7 +65,7 @@ fi
|
|||
case "$state" in
|
||||
present)
|
||||
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
|
||||
fi
|
||||
if [ -z "$repo_id" ]; then
|
||||
|
|
|
@ -22,13 +22,13 @@ OPTIONAL PARAMETERS
|
|||
-------------------
|
||||
state::
|
||||
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 +
|
||||
for all following states, the repo can be searched via repo_id or repo_uri +
|
||||
#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 uri +
|
||||
#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 +
|
||||
#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.
|
||||
|
||||
repo_desc::
|
||||
|
@ -43,10 +43,10 @@ EXAMPLES
|
|||
|
||||
--------------------------------------------------------------------------------
|
||||
# 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
|
||||
__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)
|
||||
__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
|
||||
|
||||
# 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
|
||||
__zypper_repo testrepo4 --state disabled --repo_id 4
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
state
|
||||
repo_uri
|
||||
uri
|
||||
repo_desc
|
||||
repo_id
|
||||
|
|
|
@ -20,8 +20,8 @@
|
|||
#
|
||||
# Manage services with Zypper (mostly suse)
|
||||
#
|
||||
if [ -f "$__object/parameter/service_uri" ]; then
|
||||
uri="$(cat "$__object/parameter/service_uri")"
|
||||
if [ -f "$__object/parameter/uri" ]; then
|
||||
uri="$(cat "$__object/parameter/uri")"
|
||||
else
|
||||
uri="/$__object_id"
|
||||
fi
|
||||
|
|
|
@ -20,8 +20,8 @@
|
|||
#
|
||||
# Manage services with Zypper (mostly suse)
|
||||
#
|
||||
if [ -f "$__object/parameter/service_uri" ]; then
|
||||
uri="$(cat "$__object/parameter/service_uri")"
|
||||
if [ -f "$__object/parameter/uri" ]; then
|
||||
uri="$(cat "$__object/parameter/uri")"
|
||||
else
|
||||
uri="/$__object_id"
|
||||
fi
|
||||
|
|
|
@ -25,7 +25,7 @@
|
|||
#exec >&2
|
||||
#set -x
|
||||
|
||||
zypper_def_opts=" -q "
|
||||
zypper_def_opts=" -q --non-interactive --gpg-auto-import-keys "
|
||||
|
||||
if [ -f "$__object/parameter/service_desc" ]; then
|
||||
desc="$(cat "$__object/parameter/service_desc")"
|
||||
|
@ -33,8 +33,8 @@ else
|
|||
desc="$__object_id"
|
||||
fi
|
||||
|
||||
if [ -f "$__object/parameter/service_uri" ]; then
|
||||
uri="$(cat "$__object/parameter/service_uri")"
|
||||
if [ -f "$__object/parameter/uri" ]; then
|
||||
uri="$(cat "$__object/parameter/uri")"
|
||||
else
|
||||
uri="$__object_id"
|
||||
fi
|
||||
|
@ -73,10 +73,12 @@ case "$state_should" in
|
|||
present)
|
||||
echo zypper $zypper_def_opts addservice -t "$stype" "$uri" \"$desc\"
|
||||
echo zypper $zypper_def_opts refs
|
||||
echo zypper $zypper_def_opts ref
|
||||
;;
|
||||
absent)
|
||||
echo zypper $zypper_def_opts removeservice "$service_id"
|
||||
echo zypper $zypper_def_opts refs
|
||||
echo zypper $zypper_def_opts ref
|
||||
;;
|
||||
*)
|
||||
echo "Unknown state: $state_should" >&2
|
||||
|
|
|
@ -15,7 +15,7 @@ zypper is usually used on SuSE systems to manage services.
|
|||
|
||||
REQUIRED PARAMETERS
|
||||
-------------------
|
||||
service_uri::
|
||||
uri::
|
||||
Uri of the service
|
||||
|
||||
|
||||
|
@ -45,13 +45,13 @@ EXAMPLES
|
|||
|
||||
--------------------------------------------------------------------------------
|
||||
# Ensure that internal SLES11 SP3 RIS is in installed and all other services and repos are discarded
|
||||
__zypper_service INTERNAL_SLES11_SP3 --service_desc "Internal SLES11 SP3 RIS" --service_uri "http://path/to/your/ris/dir" --remove-all-other-services --remove-all-repos
|
||||
__zypper_service INTERNAL_SLES11_SP3 --service_desc "Internal SLES11 SP3 RIS" --uri "http://path/to/your/ris/dir" --remove-all-other-services --remove-all-repos
|
||||
|
||||
# Ensure that internal SLES11 SP3 RIS is in installed, no changes to ohter services or repos
|
||||
__zypper_service INTERNAL_SLES11_SP3 --service_desc "Internal SLES11 SP3 RIS" --service_uri "http://path/to/your/ris/dir"
|
||||
__zypper_service INTERNAL_SLES11_SP3 --service_desc "Internal SLES11 SP3 RIS" --uri "http://path/to/your/ris/dir"
|
||||
|
||||
# Drop service by uri, no changes to ohter services or repos
|
||||
__zypper_service INTERNAL_SLES11_SP3 --state absent --service_uri "http://path/to/your/ris/dir"
|
||||
__zypper_service INTERNAL_SLES11_SP3 --state absent --uri "http://path/to/your/ris/dir"
|
||||
|
||||
--------------------------------------------------------------------------------
|
||||
|
||||
|
|
|
@ -25,10 +25,9 @@
|
|||
#exec >&2
|
||||
#set -x
|
||||
|
||||
zypper_def_opts=" -q "
|
||||
|
||||
if [ -f "$__object/parameter/service_uri" ]; then
|
||||
uri="$(cat "$__object/parameter/service_uri")"
|
||||
if [ -f "$__object/parameter/uri" ]; then
|
||||
uri="$(cat "$__object/parameter/uri")"
|
||||
else
|
||||
uri="$__object_id"
|
||||
fi
|
||||
|
|
|
@ -1 +1 @@
|
|||
service_uri
|
||||
uri
|
||||
|
|
|
@ -143,6 +143,9 @@ class DirectoryDict(collections.MutableMapping):
|
|||
fd.write(str(v) + '\n')
|
||||
else:
|
||||
fd.write(str(value))
|
||||
# ensure file ends with a single newline
|
||||
if value and value[-1] != '\n':
|
||||
fd.write('\n')
|
||||
except EnvironmentError as e:
|
||||
raise cdist.Error(str(e))
|
||||
|
||||
|
@ -281,7 +284,7 @@ class FileStringProperty(FileBasedProperty):
|
|||
value = ""
|
||||
try:
|
||||
with open(path, "r") as fd:
|
||||
value = fd.read()
|
||||
value = fd.read().rstrip('\n')
|
||||
except EnvironmentError:
|
||||
pass
|
||||
return value
|
||||
|
@ -292,6 +295,9 @@ class FileStringProperty(FileBasedProperty):
|
|||
try:
|
||||
with open(path, "w") as fd:
|
||||
fd.write(str(value))
|
||||
# ensure file ends with a single newline
|
||||
if value[-1] != '\n':
|
||||
fd.write('\n')
|
||||
except EnvironmentError as e:
|
||||
raise cdist.Error(str(e))
|
||||
else:
|
||||
|
|
|
@ -12,8 +12,31 @@ Changelog
|
|||
* Core: Integrate initial preos support
|
||||
|
||||
|
||||
3.1.2:
|
||||
3.1.6:
|
||||
* Type __package_yum: Support retrieving package via URL
|
||||
* Type __hostname: Support SuSE and have CentOS use sysconfig value
|
||||
* Type __locale: Support SuSE
|
||||
* Type __timezone: Support SuSE
|
||||
* Type __file: Support MacOS X (Manuel Hutter)
|
||||
|
||||
3.1.5: 2014-05-05
|
||||
* Type __zypper_repo: Automatically import gpg keys (Daniel Heule)
|
||||
* Type __zypper_service: Automatically import gpg keys (Daniel Heule)
|
||||
|
||||
3.1.4: 2014-05-04
|
||||
* Core: Ensure all created files end in \n (Steven Armstrong)
|
||||
* Documentation: Cleanup up, added HTML links (Tomas Pospisek)
|
||||
* Explorer interfaces: Remove test output (Daniel Heule)
|
||||
* Type __jail: Add messaging support (Jake Guffey)
|
||||
|
||||
3.1.3: 2014-04-29
|
||||
* New Type: __yum_repo (Steven Armstrong)
|
||||
* Type __hostname: Add support for CentOS
|
||||
|
||||
3.1.2: 2014-04-12
|
||||
* Documentation: Add missing environment variables to reference
|
||||
* Type __qemu_img: size is optional, if state is not present
|
||||
* Type __key_value: Rewrite using awk (Daniel Heule)
|
||||
* New Type: __dog_vdi
|
||||
|
||||
3.1.1: 2014-03-26
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
#!/bin/sh
|
||||
#
|
||||
# 2010-2013 Nico Schottelius (nico-cdist at schottelius.org)
|
||||
# 2010-2014 Nico Schottelius (nico-cdist at schottelius.org)
|
||||
# 2014 Daniel Heule (hda at sfs.biz)
|
||||
#
|
||||
# This file is part of cdist.
|
||||
|
@ -237,6 +237,12 @@ The following environment variables influence the behaviour of cdist:
|
|||
require::
|
||||
Setup dependencies between objects (see cdist-manifest(7))
|
||||
|
||||
CDIST_LOCAL_SHELL::
|
||||
Use this shell locally instead of /bin/sh to execute scripts
|
||||
|
||||
CDIST_REMOTE_SHELL::
|
||||
Use this shell remotely instead of /bin/sh to execute scripts
|
||||
|
||||
CDIST_OVERRIDE::
|
||||
Allow overwriting type parameters (see cdist-manifest(7))
|
||||
|
||||
|
|
|
@ -26,7 +26,7 @@ cdist supports different subcommands as explained below.
|
|||
|
||||
GENERAL
|
||||
-------
|
||||
All commands except the following options:
|
||||
All commands accept the following options:
|
||||
|
||||
-d, --debug::
|
||||
Set log level to debug
|
||||
|
@ -34,7 +34,7 @@ All commands except the following options:
|
|||
-h, --help::
|
||||
Show the help screen
|
||||
|
||||
-v, --verbose:
|
||||
-v, --verbose::
|
||||
Set log level to info, be more verbose
|
||||
|
||||
-V, --version::
|
||||
|
@ -72,10 +72,10 @@ Configure one or more hosts
|
|||
-s, --sequential::
|
||||
Operate on multiple hosts sequentially
|
||||
|
||||
--remote-copy REMOTE_COPY:
|
||||
--remote-copy REMOTE_COPY::
|
||||
Command to use for remote copy (should behave like scp)
|
||||
|
||||
--remote-exec REMOTE_EXEC:
|
||||
--remote-exec REMOTE_EXEC::
|
||||
Command to use for remote execution (should behave like ssh)
|
||||
|
||||
SHELL
|
||||
|
|
|
@ -25,7 +25,7 @@ location.
|
|||
For starters, having cdist (which includes the configuration database) on
|
||||
your notebook should be fine.
|
||||
Additionally an external copy of the git repository the configuration
|
||||
relies in is recommended, for use as backup as well to allow easy collaboration
|
||||
relies on is recommended, for use as backup as well as to allow easy collaboration
|
||||
with others.
|
||||
|
||||
For more sophisticated setups developing cdist configurations with multiple
|
||||
|
|
|
@ -13,7 +13,7 @@ DESCRIPTION
|
|||
Manifests are used to define which objects to create.
|
||||
Objects are instances of **types**, like in object oriented programming languages.
|
||||
An object is represented by the combination of
|
||||
**type + slash + object name**: **__file/etc/cdist-configured** is an
|
||||
**type + slash + object name**: **\__file/etc/cdist-configured** is an
|
||||
object of the type ***__file*** with the name ***etc/cdist-configured***.
|
||||
|
||||
All available types can be found in the **cdist/conf/type/** directory,
|
||||
|
@ -29,7 +29,7 @@ at an example:
|
|||
__package apache2 --state absent
|
||||
|
||||
# Same with the __directory type
|
||||
__directory /tmp/cdist --state present
|
||||
__directory /tmp/cdist --state present
|
||||
--------------------------------------------------------------------------------
|
||||
|
||||
These two lines create objects, which will later be used to realise the
|
||||
|
@ -89,7 +89,7 @@ SPLITTING UP THE INITIAL MANIFEST
|
|||
---------------------------------
|
||||
If you want to split up your initial manifest, you can create other shell
|
||||
scripts in **cdist/conf/manifest/** and include them in **cdist/conf/manifest/init**.
|
||||
Cdist provides the environment variable ***__manifest*** to reference to
|
||||
Cdist provides the environment variable ***__manifest*** to reference
|
||||
the directory containing the initial manifest (see cdist-reference(7)).
|
||||
|
||||
The following example would include every file with a **.sh** suffix:
|
||||
|
@ -110,24 +110,39 @@ setup the variable "require" to contain the requirements. Multiple
|
|||
requirements can be added white space separated.
|
||||
|
||||
--------------------------------------------------------------------------------
|
||||
# No dependency
|
||||
__file /etc/cdist-configured
|
||||
|
||||
# Require above object
|
||||
require="__file/etc/cdist-configured" __link /tmp/cdist-testfile \
|
||||
--source /etc/cdist-configured --type symbolic
|
||||
|
||||
# Require two objects
|
||||
require="__file/etc/cdist-configured __link/tmp/cdist-testfile" \
|
||||
__file /tmp/cdist-another-testfile
|
||||
1 # No dependency
|
||||
2 __file /etc/cdist-configured
|
||||
3
|
||||
4 # Require above object
|
||||
5 require="__file/etc/cdist-configured" __link /tmp/cdist-testfile \
|
||||
6 --source /etc/cdist-configured --type symbolic
|
||||
7
|
||||
8 # Require two objects
|
||||
9 require="__file/etc/cdist-configured __link/tmp/cdist-testfile" \
|
||||
10 __file /tmp/cdist-another-testfile
|
||||
|
||||
|
||||
--------------------------------------------------------------------------------
|
||||
|
||||
Above the "require" variable is only set for the command that is
|
||||
immediately following it. Dependencies should allways be declared that way.
|
||||
|
||||
On line 4 you can see that the instantion of a type "__link" object needs
|
||||
the object "__file/etc/cdist-configured" to be present, before it can proceed.
|
||||
|
||||
This also means that the "__link" command must make sure, that either
|
||||
"__file/etc/cdist-configured" allready is present, or, if it's not, it needs
|
||||
to be created. The task of cdist is to make sure, that the dependency will be
|
||||
resolved appropriately and thus "__file/etc/cdist-configured" be created
|
||||
if necessary before "__link" proceeds (or to abort execution with an error).
|
||||
|
||||
All objects that are created in a type manifest are automatically required
|
||||
from the type that is calling them. This is called "autorequirement" in
|
||||
cdist jargon.
|
||||
|
||||
You can find an more in depth description of the flow execution of manifests
|
||||
in cdist-stages(7) and of how types work in cdist-type(7).
|
||||
|
||||
CREATE DEPENDENCIES FROM EXECUTION ORDER
|
||||
-----------------------------------------
|
||||
You can tell cdist to execute all types in the order in which they are created
|
||||
|
@ -138,8 +153,6 @@ automatically depends on the previously created object.
|
|||
It essentially helps you to build up blocks of code that build upon each other
|
||||
(like first creating the directory xyz than the file below the directory).
|
||||
|
||||
THIS IS A BETA FEATURE AND MAY BE REMOVED OR CHANGED AT ANY TIME.
|
||||
|
||||
|
||||
OVERRIDES
|
||||
---------
|
||||
|
@ -149,15 +162,13 @@ If you whish, you can setup the environment variable CDIST_OVERRIDE
|
|||
(any value or even empty is ok) to tell cdist, that this object override is
|
||||
wanted and should be accepted.
|
||||
ATTENTION: Only use this feature if you are 100% sure in which order
|
||||
cdist encounter the affected objects, otherwhise this results
|
||||
into an undefined situation.
|
||||
cdist encounters the affected objects, otherwhise this results
|
||||
in an undefined situation.
|
||||
|
||||
If CDIST_OVERRIDE and CDIST_ORDER_DEPENDENCY is set for an object,
|
||||
If CDIST_OVERRIDE and CDIST_ORDER_DEPENDENCY are set for an object,
|
||||
CDIST_ORDER_DEPENDENCY will be ignored, because adding a dependency in case of
|
||||
overrides would result in circular dependencies, which is an error.
|
||||
|
||||
THIS IS A BETA FEATURE AND MAY BE REMOVED OR CHANGED AT ANY TIME.
|
||||
|
||||
|
||||
|
||||
|
||||
|
@ -198,7 +209,7 @@ How to override objects:
|
|||
--------------------------------------------------------------------------------
|
||||
# for example in the inital manifest
|
||||
|
||||
# reate user account foobar with some hash for password
|
||||
# create user account foobar with some hash for password
|
||||
__user foobar --password 'some_fancy_hash' --home /home/foobarexample
|
||||
|
||||
# ... many statements and includes in the manifest later ...
|
||||
|
@ -210,8 +221,8 @@ __user foobar --password 'some_other_hash'
|
|||
|
||||
# this tells cdist, that you know that this is an override and should be accepted
|
||||
CDIST_OVERRIDE=yes __user foobar --password 'some_other_hash'
|
||||
# its only an override, means the parameter --home is not touched
|
||||
# and stay at the original value of /home/foobarexample
|
||||
# it's only an override, means the parameter --home is not touched
|
||||
# and stays at the original value of /home/foobarexample
|
||||
--------------------------------------------------------------------------------
|
||||
|
||||
Dependencies defined by execution order work as following:
|
||||
|
|
|
@ -25,7 +25,7 @@ to use.
|
|||
HOW TO USE A TYPE
|
||||
-----------------
|
||||
You can use types from the initial manifest or the type manifest like a
|
||||
normal command:
|
||||
normal shell command:
|
||||
|
||||
--------------------------------------------------------------------------------
|
||||
# Creates empty file /etc/cdist-configured
|
||||
|
|
BIN
docs/speeches/2014-05-08_linuxtag_berlin.odp
Normal file
BIN
docs/speeches/2014-05-08_linuxtag_berlin.odp
Normal file
Binary file not shown.
BIN
docs/speeches/2014-05-08_linuxtag_berlin.pdf
Normal file
BIN
docs/speeches/2014-05-08_linuxtag_berlin.pdf
Normal file
Binary file not shown.
BIN
docs/speeches/2014-05-19_cdi.st-zkb_linux_erfa.odp
Normal file
BIN
docs/speeches/2014-05-19_cdi.st-zkb_linux_erfa.odp
Normal file
Binary file not shown.
BIN
docs/speeches/2014-05-19_cdi.st-zkb_linux_erfa.pdf
Normal file
BIN
docs/speeches/2014-05-19_cdi.st-zkb_linux_erfa.pdf
Normal file
Binary file not shown.
Loading…
Reference in a new issue