types to handle autofs maps

Signed-off-by: Steven Armstrong <steven@icarus.ethz.ch>
This commit is contained in:
Steven Armstrong 2012-11-07 14:28:30 +01:00
parent 7a1f81dc7b
commit 03cc2a63b1
13 changed files with 273 additions and 55 deletions

View file

@ -0,0 +1,42 @@
cdist-type__autofs(7)
=====================
Steven Armstrong <steven-cdist--@--armstrong.cc>
NAME
----
cdist-type__autofs - install and start autofs
DESCRIPTION
-----------
This space intentionally left blank.
REQUIRED PARAMETERS
-------------------
None.
OPTIONAL PARAMETERS
-------------------
None.
EXAMPLES
--------
--------------------------------------------------------------------------------
__autofs
--------------------------------------------------------------------------------
SEE ALSO
--------
- cdist-type(7)
COPYING
-------
Copyright \(C) 2012 Steven Armstrong. Free use of this software is
granted under the terms of the GNU General Public License version 3 (GPLv3).

View file

@ -1,6 +1,6 @@
#!/bin/sh
#
# 2011 Steven Armstrong (steven-cdist at armstrong.cc)
# 2012 Steven Armstrong (steven-cdist at armstrong.cc)
#
# This file is part of cdist.
#
@ -17,10 +17,22 @@
# You should have received a copy of the GNU General Public License
# along with cdist. If not, see <http://www.gnu.org/licenses/>.
#
#
# Generate auto.master config based on all defined __autofs_map ojbects.
#
auto_master="$__object/files/auto.master"
cat "$(cat "$__object/parameter/header")" > "$auto_master"
find "$__global/object/__autofs_map" -path "*.cdist/parameter/entry" | xargs cat >> "$auto_master"
os=$(cat "$__global/explorer/os")
not_supported() {
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
}
case "$os" in
ubuntu|debian|archlinux)
__package autofs --state present
__start_on_boot autofs --state present
;;
*)
not_supported
;;
esac

View file

@ -0,0 +1,50 @@
#!/bin/sh
#
# 2011 - 2012 Steven Armstrong (steven-cdist at armstrong.cc)
#
# This file is part of cdist.
#
# cdist is free software: you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation, either version 3 of the License, or
# (at your option) any later version.
#
# cdist is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with cdist. If not, see <http://www.gnu.org/licenses/>.
#
candidates="/etc/auto.master /etc/autofs/auto.master"
find_auto_master() {
# get the path of the auto.master file
for candidate in $candidates; do
if [ -f "$candidate" ]; then
echo "$candidate"
return
fi
done
}
auto_master="$(find_auto_master)"
# no auto.master, nothing we could do
[ -f "$auto_master" ] || exit 0
# NOTE: keep variables in sync in manifest/explorer/gencode-*
prefix="#cdist:$__object_name"
suffix="#/cdist:$__object_name"
awk -v prefix="$prefix" -v suffix="$suffix" '{
if (index($0,prefix)) {
triggered=1
}
if (triggered) {
if (index($0,suffix)) {
triggered=0
}
print
}
}' "$auto_master"

View file

@ -0,0 +1,93 @@
#!/bin/sh
#
# 2011 - 2012 Steven Armstrong (steven-cdist at armstrong.cc)
#
# This file is part of cdist.
#
# cdist is free software: you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation, either version 3 of the License, or
# (at your option) any later version.
#
# cdist is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with cdist. If not, see <http://www.gnu.org/licenses/>.
#
entry="$__object/files/entry"
state_should="$(cat "$__object/parameter/state" 2>/dev/null || echo present)"
if [ ! -s "$__object/explorer/entry" ]; then
state_is='absent'
else
state_is=$(diff -q "$entry" "$__object/explorer/entry" >/dev/null \
&& echo present \
|| echo changed
)
fi
if [ "$state_should" = "$state_is" ]; then
# Nothing to do, move along
exit 0
fi
cat << DONE
candidates="/etc/auto.master /etc/autofs/auto.master"
find_auto_master() {
# get the path of the auto.master file
for candidate in \$candidates; do
if [ -f "\$candidate" ]; then
echo "\$candidate"
return
fi
done
}
auto_master="\$(find_auto_master)"
if [ ! -f "\$auto_master" ]; then
echo "Could not determine auto.master location, tried: \$candidates" >&2
exit 1
fi
DONE
remove_entry() {
# NOTE: keep variables in sync in manifest/explorer/gencode-*
prefix="#cdist:$__object_name"
suffix="#/cdist:$__object_name"
cat << DONE
awk -v prefix="$prefix" -v suffix="$suffix" '
{
if (index(\$0,prefix)) {
triggered=1
}
if (triggered) {
if (index(\$0,suffix)) {
triggered=0
}
} else {
print
}
}' "\$auto_master" > "\$auto_master"+
mv -f "\$auto_master"+ "\$auto_master"
DONE
}
case "$state_should" in
present)
if [ "$state_is" = "changed" ]; then
remove_entry
fi
cat << DONE
cat >> "\$auto_master" << EOC
$(cat "$entry")
EOC
DONE
;;
absent)
remove_entry
;;
esac

View file

@ -36,25 +36,35 @@ comment::
auto.master.
BOOLEAN PARAMETERS
------------------
noreload::
don't reload autofs after the entry has been changed
EXAMPLES
--------
--------------------------------------------------------------------------------
# Add auto mounter at /net
# Add auto mounter at /net and reload
__autofs_map /net --map /etc/auto.net --type program
# Add auto mounter at /pub
__autofs_map /pub --map /etc/auto.pub \
--type file --options nosuid,rw,bg,hard,intr --ghost
# Add auto mounter at /pub and don't reload
__autofs_map /pub \
--map /etc/auto.pub \
--type file \
--options "nosuid,rw,bg,hard,intr --ghost" \
--noreload
--------------------------------------------------------------------------------
SEE ALSO
--------
- cdist-type(7)
- cdist-type__autofs_reload(7)
COPYING
-------
Copyright \(C) 2011 Steven Armstrong. Free use of this software is
Copyright \(C) 2012 Steven Armstrong. Free use of this software is
granted under the terms of the GNU General Public License version 3 (GPLv3).

View file

@ -1,6 +1,6 @@
#!/bin/sh
#
# 2011 Steven Armstrong (steven-cdist at armstrong.cc)
# 2011 - 2012 Steven Armstrong (steven-cdist at armstrong.cc)
#
# This file is part of cdist.
#
@ -20,23 +20,36 @@
name="/$__object_id"
map="$(cat "$__object/parameter/map")"
type="$(cat "$__object/parameter/type" 2>/dev/null || echo "file")"
options="$(cat "$__object/parameter/options" 2>/dev/null || true)"
if [ -f "$__object/parameter/type" ]; then
type="$(cat "$__object/parameter/type")"
else
type="file"
echo "$type" > "$__object/parameter/type"
fi
# NOTE: keep variables in sync in manifest/explorer/gencode-*
prefix="#cdist:$__object_name"
suffix="#/cdist:$__object_name"
# Generate entry for use in auto.master
entry="${name} ${type}:${map}"
if [ -f "$__object/parameter/options" ]; then
entry="$entry $(cat "$__object/parameter/options")"
fi
mkdir "$__object/files"
# Generate entry for inclusion in auto.master
entry="$__object/files/entry"
echo "$prefix" > "$entry"
if [ -f "$__object/parameter/comment" ]; then
echo "# $(cat "$__object/parameter/comment")" > "$__object/parameter/entry"
echo "# $(cat "$__object/parameter/comment")" >> "$entry"
fi
echo "$entry" >> "$__object/parameter/entry"
require="$__object_name" __autofs_master
echo "$name $type:$map $options" >> $entry
echo "$suffix" >> "$entry"
# Reload autofs after changes if the user wishes this
if [ ! -f "$__object/parameter/noreload" ]; then
state_should="$(cat "$__object/parameter/state" 2>/dev/null || echo present)"
if [ ! -s "$__object/explorer/entry" ]; then
state_is='absent'
else
state_is=$(diff -q "$entry" "$__object/explorer/entry" >/dev/null \
&& echo present \
|| echo changed
)
fi
if [ "$state_is" != "$state_should" ]; then
require="$__object_name" __autofs_reload
fi
fi

View file

@ -0,0 +1 @@
noreload

View file

@ -1,3 +0,0 @@
# Generated from cdist __autofs_master
# Do not change this file. Changes will be overwritten.

View file

@ -1 +0,0 @@
header

View file

@ -1,6 +1,6 @@
#!/bin/sh
#
# 2011 Steven Armstrong (steven-cdist at armstrong.cc)
# 2012 Steven Armstrong (steven-cdist at armstrong.cc)
#
# This file is part of cdist.
#
@ -19,13 +19,19 @@
#
if [ ! -f "$__object/parameter/header" ]; then
echo "$__type/files/auto.master.header" > "$__object/parameter/header"
fi
os=$(cat "$__global/explorer/os")
[ -d "$__object/files" ] || mkdir "$__object/files"
require="$__object_name" __file /etc/auto.master --source "$__object/files/auto.master" \
--mode 644 \
--owner root \
--group root
not_supported() {
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
}
case "$os" in
ubuntu|debian|archlinux)
echo "pkill -HUP automount"
;;
*)
not_supported
;;
esac

View file

@ -1,38 +1,33 @@
cdist-type__autofs_master(7)
cdist-type__autofs_reload(7)
============================
Steven Armstrong <steven-cdist--@--armstrong.cc>
NAME
----
cdist-type__autofs_master - Generate the auto.master file
cdist-type__autofs_reload - tell automounter to reload config file
DESCRIPTION
-----------
This cdist type generates a auto.master configuration from given __autofs_map
definitions. See cdist-type__auto_map(7).
This space intentionally left blank.
REQUIRED PARAMETERS
-------------------
None
None.
OPTIONAL PARAMETERS
-------------------
header::
Absolute path to a file used as the header for the generated auto.master
file.
None.
EXAMPLES
--------
--------------------------------------------------------------------------------
# auto.master with default header
__autofs_master
# auto.master with custom header
__autofs_master --header /path/to/header
__autofs_reload
--------------------------------------------------------------------------------
@ -43,5 +38,5 @@ SEE ALSO
COPYING
-------
Copyright \(C) 2011 Steven Armstrong. Free use of this software is
Copyright \(C) 2012 Steven Armstrong. Free use of this software is
granted under the terms of the GNU General Public License version 3 (GPLv3).