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 #!/bin/sh
# #
# 2011 Steven Armstrong (steven-cdist at armstrong.cc) # 2012 Steven Armstrong (steven-cdist at armstrong.cc)
# #
# This file is part of cdist. # This file is part of cdist.
# #
@ -17,10 +17,22 @@
# 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/>.
# #
#
# Generate auto.master config based on all defined __autofs_map ojbects.
#
auto_master="$__object/files/auto.master"
cat "$(cat "$__object/parameter/header")" > "$auto_master" os=$(cat "$__global/explorer/os")
find "$__global/object/__autofs_map" -path "*.cdist/parameter/entry" | xargs cat >> "$auto_master"
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. auto.master.
BOOLEAN PARAMETERS
------------------
noreload::
don't reload autofs after the entry has been changed
EXAMPLES EXAMPLES
-------- --------
-------------------------------------------------------------------------------- --------------------------------------------------------------------------------
# Add auto mounter at /net # Add auto mounter at /net and reload
__autofs_map /net --map /etc/auto.net --type program __autofs_map /net --map /etc/auto.net --type program
# Add auto mounter at /pub # Add auto mounter at /pub and don't reload
__autofs_map /pub --map /etc/auto.pub \ __autofs_map /pub \
--type file --options nosuid,rw,bg,hard,intr --ghost --map /etc/auto.pub \
--type file \
--options "nosuid,rw,bg,hard,intr --ghost" \
--noreload
-------------------------------------------------------------------------------- --------------------------------------------------------------------------------
SEE ALSO SEE ALSO
-------- --------
- cdist-type(7) - cdist-type(7)
- cdist-type__autofs_reload(7)
COPYING 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). granted under the terms of the GNU General Public License version 3 (GPLv3).

View file

@ -1,6 +1,6 @@
#!/bin/sh #!/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. # This file is part of cdist.
# #
@ -20,23 +20,36 @@
name="/$__object_id" name="/$__object_id"
map="$(cat "$__object/parameter/map")" 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 # NOTE: keep variables in sync in manifest/explorer/gencode-*
type="$(cat "$__object/parameter/type")" prefix="#cdist:$__object_name"
else suffix="#/cdist:$__object_name"
type="file"
echo "$type" > "$__object/parameter/type"
fi
# Generate entry for use in auto.master mkdir "$__object/files"
entry="${name} ${type}:${map}"
if [ -f "$__object/parameter/options" ]; then # Generate entry for inclusion in auto.master
entry="$entry $(cat "$__object/parameter/options")" entry="$__object/files/entry"
fi echo "$prefix" > "$entry"
if [ -f "$__object/parameter/comment" ]; then if [ -f "$__object/parameter/comment" ]; then
echo "# $(cat "$__object/parameter/comment")" > "$__object/parameter/entry" echo "# $(cat "$__object/parameter/comment")" >> "$entry"
fi fi
echo "$entry" >> "$__object/parameter/entry" echo "$name $type:$map $options" >> $entry
echo "$suffix" >> "$entry"
require="$__object_name" __autofs_master
# 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 #!/bin/sh
# #
# 2011 Steven Armstrong (steven-cdist at armstrong.cc) # 2012 Steven Armstrong (steven-cdist at armstrong.cc)
# #
# This file is part of cdist. # This file is part of cdist.
# #
@ -19,13 +19,19 @@
# #
if [ ! -f "$__object/parameter/header" ]; then os=$(cat "$__global/explorer/os")
echo "$__type/files/auto.master.header" > "$__object/parameter/header"
fi
[ -d "$__object/files" ] || mkdir "$__object/files" not_supported() {
require="$__object_name" __file /etc/auto.master --source "$__object/files/auto.master" \ echo "Your operating system ($os) is currently not supported by this type (${__type##*/})." >&2
--mode 644 \ echo "Please contribute an implementation for it if you can." >&2
--owner root \ exit 1
--group root }
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> Steven Armstrong <steven-cdist--@--armstrong.cc>
NAME NAME
---- ----
cdist-type__autofs_master - Generate the auto.master file cdist-type__autofs_reload - tell automounter to reload config file
DESCRIPTION DESCRIPTION
----------- -----------
This cdist type generates a auto.master configuration from given __autofs_map This space intentionally left blank.
definitions. See cdist-type__auto_map(7).
REQUIRED PARAMETERS REQUIRED PARAMETERS
------------------- -------------------
None None.
OPTIONAL PARAMETERS OPTIONAL PARAMETERS
------------------- -------------------
header:: None.
Absolute path to a file used as the header for the generated auto.master
file.
EXAMPLES EXAMPLES
-------- --------
-------------------------------------------------------------------------------- --------------------------------------------------------------------------------
# auto.master with default header __autofs_reload
__autofs_master
# auto.master with custom header
__autofs_master --header /path/to/header
-------------------------------------------------------------------------------- --------------------------------------------------------------------------------
@ -43,5 +38,5 @@ SEE ALSO
COPYING 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). granted under the terms of the GNU General Public License version 3 (GPLv3).