commit 1c4e1e32601fdc6c053d0f7c53b9be115a0017db
parent 5083b0361a9096944671668922a504b16e426266
Author: Jan Pobrislo <ccx@webprojekty.cz>
Date: Thu, 19 Jun 2014 19:46:31 +0200
variable tracing
Diffstat:
3 files changed, 52 insertions(+), 53 deletions(-)
diff --git a/bin/confz b/bin/confz
@@ -7,9 +7,10 @@ setopt extended_glob warn_create_global
typeset -gA vars vars_prev
typeset -ga do_command
-typeset -g confz_indent check_only
+typeset -g confz_indent check_only verbose
-check_only=0
+: ${check_only:=0}
+: ${verbose:=0}
# helper that prints out error message and exits
die() {
@@ -38,6 +39,29 @@ confz_do() {
"$@" || die "command failed with error $?: ${(q)@}"
}
+# trace-printing helper for setting $vars values
+setvar() {
+ if (($verbose)); then
+ print -r - "$confz_indent$fg[cyan]$1$fg[default]=${(qqq)2}"
+ fi
+ vars[$1]=$2
+}
+
+# set $vars parameter if it's empty (ie. set default value)
+defvar() {
+ [[ -z $1 ]] && setvar $1 $2
+}
+
+# check if variables are nonempty
+checkvars() {
+ local var
+ local -a empty
+ for var in "$@"; do
+ [[ -z $vars[$var] ]] && empty+=( $var )
+ done
+ (( $#empty )) && die "required parameters are empty: ${(q)empty}"
+}
+
# autoload all relevant functions and run confz_*_init
confz_load() {
local func
@@ -86,10 +110,10 @@ require() {
# parse variable assignments
while (( $# )); do
case $1 in
- (:*) vars[${1#:}]=${vars_prev[${1#:}]};;
+ (:*) setvar ${1#:} ${vars_prev[${1#:}]};;
(%*=*) lift[${${1#%}%%=*}]=${${1#%}#*=};;
(%*) lift[${1#%}]=${1#%};;
- (*=*) vars[${1%%=*}]=${1#*=};;
+ (*=*) setvar ${1%%=*} ${1#*=};;
(--) shift; break;;
(*) die "$name: unrecognised argument: ${(qqq)1}";;
esac
@@ -122,15 +146,15 @@ require() {
# restore $do_command
do_command=( "${do_command_prev[@]}" )
- # lift %variables from calee to caller
- for outer inner in ${(kv)lift}; do
- vars_prev[$outer]=${vars[$inner]}
- done
-
# restore old $vars and put calee's $vars into $vars_prev
vars_switch=( "${(kv)vars[@]}" )
vars=( "${(kv)vars_prev[@]}" )
vars_prev=( "${(kv)vars_switch[@]}" )
+
+ # lift %variables from calee to caller
+ for outer inner in ${(kv)lift}; do
+ setvar $outer ${vars_prev[$inner]}
+ done
}
# "dependency" that represents toplevel and gets it's deps out of argv
diff --git a/zsh-functions/confz_fs_init b/zsh-functions/confz_fs_init
@@ -7,16 +7,17 @@
# configure LVM2 logical volume
confz_logical_volume_check() {
- [[ -n ${vars[vg_name]:=$DEFAULT_VG} ]] || \
+ defvar vg_name $DEFAULT_VG
+ [[ -n ${vars[vg_name]} ]] || \
die "$0: DEFAULT_VG is unset and no 'vg_name' was passed"
- [[ -n ${vars[size]:=$DEFAULT_VOLUME_SIZE} ]] || \
+ defvar size $DEFAULT_VOLUME_SIZE
+ [[ -n ${vars[size]} ]] || \
die "$0: DEFAULT_VOLUME_SIZE is unset and no 'size' was passed"
- [[ -n ${vars[lv_name]} ]] || \
- die "$0: no 'lv_name' was passed"
+ checkvars lv_name
- vars[device]=/dev/mapper/$vars[vg_name]-$vars[lv_name]
+ setvar device /dev/mapper/$vars[vg_name]-$vars[lv_name]
do_command=(
lvcreate
@@ -31,14 +32,11 @@ confz_logical_volume_check() {
# create filesystem on block device
confz_filesystem_check() {
- [[ -n ${vars[device]} ]] || \
- die "$0: no 'device' was passed"
-
- [[ -n ${vars[filesystem]:=$DEFAULT_FS} ]] || \
+ defvar filesystem $DEFAULT_FS
+ [[ -n ${vars[filesystem]} ]] || \
die "$0: DEFAULT_FS is unset and no 'filesystem' was passed"
- [[ -n ${vars[label]} ]] || \
- die "$0: no 'label' was passed"
+ checkvars label device filesystem
[[ -b ${vars[device]} ]] || \
die "$0: not a block device: ${(qqq)vars[device]}"
@@ -69,20 +67,9 @@ confz_filesystem_check() {
# put mountpoint for device into /etc/fstab
confz_fstab_check() {
- [[ -n ${vars[device]} ]] || \
- die "$0: no 'device' was passed"
-
- [[ -n ${vars[mountpoint]} ]] || \
- die "$0: no 'mountpoint' was passed"
-
- [[ -n ${vars[filesystem]} ]] || \
- die "$0: no 'filesystem' was passed"
-
- [[ -n ${vars[opts]} ]] || \
- die "$0: no 'opts' was passed"
-
- : ${vars[dump]:=0}
- : ${vars[pass]:=2}
+ checkvars device mountpoint filesystem opts
+ defvar dump 0
+ defvar pass 2
local device mountpoint filesystem opts dump pass
sed '/^[ \t]*#/d;s/#.*//;s/[ \t]\+/ /g' /etc/fstab | \
@@ -121,11 +108,7 @@ confz_fstab_do() {
# make device mounted on mountpoint
confz_mounted_check() {
- [[ -n ${vars[device]} ]] || \
- die "$0: no 'device' was passed"
-
- [[ -n ${vars[mountpoint]} ]] || \
- die "$0: no 'mountpoint' was passed"
+ checkvars device mountpoint
grep -q "^${vars[device]} ${vars[mountpoint]} " /proc/mounts
}
@@ -138,18 +121,10 @@ confz_mounted_check() {
# create LVM2 logical volume, and make sure it's in fstab and mounted
confz_mounted_volume_check() {
- [[ -n ${vars[lv_name]} ]] || \
- die "$0: no 'lv_name' was passed"
-
- [[ -n ${vars[mountpoint]} ]] || \
- die "$0: no 'mountpoint' was passed"
-
- [[ -n ${vars[size]} ]] || \
- die "$0: no 'size' was passed"
-
- : ${vars[filesystem]:=xfs}
- : ${vars[opts]:=noatime}
- : ${vars[label]:=${vars[lv_name]}}
+ checkvars lv_name opts label
+ defvar filesystem xfs
+ defvar opts noatime
+ defvar label $vars[lv_name]
require logical_volume %device :vg_name :size :lv_name
require filesystem :device :label :filesystem
diff --git a/zsh-functions/confz_vserver_init b/zsh-functions/confz_vserver_init
@@ -38,8 +38,8 @@ confz_vserver_check() {
[[ -n ${vars[source]} ]] || \
die "$0: no 'source' was passed"
- vars[etcdir]=/etc/vservers/${vars[name]}
- vars[vdir]=/vservers/${vars[name]}
+ setvar etcdir /etc/vservers/${vars[name]}
+ setvar vdir /vservers/${vars[name]}
local ctx ret
ret=1