[Ovirt-devel] [PATCH node] Reworked logging for standalone mode
Alan Pevec
apevec at redhat.com
Sun Jan 18 16:21:12 UTC 2009
From: Perry Myers <pmyers at redhat.com>
Entire firstboot is logged to both console/logfile using tee. Selected
sections of the code are set to only log stdout/stderr to logfile to prevent
data overload on console. In these cases log() function is used to write
to the console.
TEE and log() must not be redefined in the scripts.
Signed-off-by: Perry Myers <pmyers at redhat.com>
---
scripts/ovirt | 2 +
scripts/ovirt-config-boot | 20 +++++++++++-------
scripts/ovirt-config-collectd | 5 ++++
scripts/ovirt-config-hostname | 7 ++++++
scripts/ovirt-config-logging | 5 ++++
scripts/ovirt-config-networking | 28 +++++++++++++++-----------
scripts/ovirt-config-password | 15 ++++++++++++-
scripts/ovirt-config-setup | 6 +++-
scripts/ovirt-config-storage | 41 +++++++++++++++++++++++++-------------
scripts/ovirt-early | 2 +
scripts/ovirt-firstboot | 11 ++++++---
scripts/ovirt-functions | 38 ++++++++++++++++++++++++++++++++++-
scripts/ovirt-post | 2 +
13 files changed, 138 insertions(+), 44 deletions(-)
diff --git a/scripts/ovirt b/scripts/ovirt
index 6a48e47..f789d24 100755
--- a/scripts/ovirt
+++ b/scripts/ovirt
@@ -75,7 +75,9 @@ case "$1" in
printf "Starting ovirt: "
{
+ log "Starting ovirt"
start
+ log "Completed ovirt"
} >> $OVIRT_LOGFILE 2>&1
test $? == 0 && success || failure
diff --git a/scripts/ovirt-config-boot b/scripts/ovirt-config-boot
index 69e02d9..8c25d47 100755
--- a/scripts/ovirt-config-boot
+++ b/scripts/ovirt-config-boot
@@ -22,19 +22,21 @@
. /etc/init.d/functions
. /etc/init.d/ovirt-functions
+trap '__st=$?; stop_log; exit $__st' 0
+trap 'exit $?' 1 2 13 15
ovirt_boot_setup() {
local disk=$1
local live=$2
local bootparams=$3
- printf "installing oVirt Node image ... "
+ log "installing oVirt Node image."
mount_boot
# check that /boot mounted ok and find partition number for GRUB
BOOT=$(mount|awk '$3 == "/boot" {print $1}')
BOOT=$(( ${BOOT#$disk} - 1 ))
rc=$?
if [ $rc -ne 0 -o $BOOT -lt 0 ]; then
- printf "boot partition not available\n"
+ log "boot partition not available."
return $rc
fi
mount_liveos
@@ -54,7 +56,7 @@ ovirt_boot_setup() {
&& cp -p $live/$syslinux/vmlinuz0 /boot
rc=$?
if [ $rc -ne 0 ]; then
- printf "image copy failed\n"
+ log "image copy failed."
return $rc
fi
# append LVM support to the livecd initramfs
@@ -113,7 +115,7 @@ setup --prefix=/grub (hd0)
EOF
rc=$?
if [ $rc -ne 0 ]; then
- printf "boot loader install failed\n"
+ log "boot loader install failed."
return $rc
fi
umount /liveos
@@ -121,14 +123,14 @@ EOF
# caller decides when to reboot
rm -rf $tmpdir
- printf "done.\n"
+ log "done."
# avoid reboot loops using Cobbler PXE only once
# Cobbler XMLRPC post-install trigger (XXX is there cobbler SRV record?):
# wget "http://192.168.50.2/cblr/svc/op/trig/mode/post/system/$(hostname)"
# -O /dev/null
}
-
+start_log
disk=$1
live=$2
bootparams=$3
@@ -150,13 +152,15 @@ parted $disk -s "print all" > /dev/null
if [ 0 -eq $? ]; then
ovirt_boot_setup "$disk" "$live" "$bootparams"
else
- printf "Please configure $disk before attempting to install the node image.\n"
- printf "Use the option 'Disk Partitioning' from the main menu.\n"
+ log "Please configure $disk before attempting to install the node image."
+ log "Use the option 'Disk Partitioning' from the main menu."
doreboot="no"
fi
if [ -z "$doreboot" -o "$doreboot" = "yes" ]; then
disable_firstboot
ovirt_store_firstboot_config
+ stop_log
reboot
fi
+stop_log
diff --git a/scripts/ovirt-config-collectd b/scripts/ovirt-config-collectd
index 6ece6be..bbc5a89 100755
--- a/scripts/ovirt-config-collectd
+++ b/scripts/ovirt-config-collectd
@@ -5,6 +5,9 @@
. /etc/init.d/functions
. /etc/init.d/ovirt-functions
+trap '__st=$?; stop_log; exit $__st' 0
+trap 'exit $?' 1 2 13 15
+
collectd_conf="/etc/collectd.conf"
# Creates the collectd file based on the following inputs
@@ -15,6 +18,7 @@ ovirt_collectd() {
local collectd_server=$1
local collectd_port=$2
+ start_log
if [ -f $collectd_conf.in ]; then
sed -e "s/@COLLECTD_SERVER@/$collectd_server/" \
-e "s/@COLLECTD_PORT@/$collectd_port/" $collectd_conf.in \
@@ -26,6 +30,7 @@ ovirt_collectd() {
chkconfig collectd on
service collectd restart
+ stop_log
}
prompt_user() {
diff --git a/scripts/ovirt-config-hostname b/scripts/ovirt-config-hostname
index 2375675..bf60c70 100755
--- a/scripts/ovirt-config-hostname
+++ b/scripts/ovirt-config-hostname
@@ -5,18 +5,25 @@
. /etc/init.d/functions
. /etc/init.d/ovirt-functions
+trap '__st=$?; stop_log; exit $__st' 0
+trap 'exit $?' 1 2 13 15
+
HOSTNAME_FILE="/etc/sysconfig/network"
function set_hostname {
+ start_log
augtool <<EOF
set /files$HOSTNAME_FILE/HOSTNAME "$1"
EOF
+ stop_log
}
function remove_hostname {
+ start_log
augtool <<EOF
rm /files$HOSTNAME_FILE/HOSTNAME
EOF
+ stop_log
}
function prompt_user {
diff --git a/scripts/ovirt-config-logging b/scripts/ovirt-config-logging
index d6826c6..ba91468 100755
--- a/scripts/ovirt-config-logging
+++ b/scripts/ovirt-config-logging
@@ -5,6 +5,9 @@
. /etc/init.d/functions
. /etc/init.d/ovirt-functions
+trap '__st=$?; stop_log; exit $__st' 0
+trap 'exit $?' 1 2 13 15
+
RSYSLOG_FILE="/etc/rsyslog.conf"
# Creates the rsyslog file based on the following inputs
@@ -62,7 +65,9 @@ local7.* /var/log/boot.log
*.* $DELIM$1:$2
EOF
+start_log
/sbin/service rsyslog restart
+stop_log
}
function is_numeric {
diff --git a/scripts/ovirt-config-networking b/scripts/ovirt-config-networking
index 6d55816..4b4ff10 100755
--- a/scripts/ovirt-config-networking
+++ b/scripts/ovirt-config-networking
@@ -13,11 +13,10 @@ WORKDIR=$(mktemp -d) || exit 1
# Remove $WORKDIR upon interrupt (and HUP, PIPE, TERM) and upon normal
# termination, being careful not to change the exit status.
-trap '__st=$?; rm -rf "$WORKDIR"; exit $__st' 0
+trap '__st=$?; rm -rf "$WORKDIR"; stop_log; exit $__st' 0
trap 'exit $?' 1 2 13 15
CONFIG_FILE_ROOT="/files/etc/sysconfig/network-scripts/ifcfg"
-CONFIG_LOG_FILE="/var/log/ovirt-network-setup.log"
function configure_interface
{
@@ -220,7 +219,7 @@ else
setup_menu
while true; do
- printf "\n\n oVirt Node Networking Configuration\n\n"
+ printf "\n\n oVirt Node Networking Configuration\n\n" >&2
select NIC in $NICS
do
@@ -234,13 +233,18 @@ else
done
fi
-{
- printf "Configuring network.\n"
- if ls "$WORKDIR"/augtool-* > /dev/null 2>&1 ; then
- config="$WORKDIR"/config-augtool
- cat "$WORKDIR"/augtool-* > $config \
- && augtool $config \
- && service network restart
+start_log
+if ls "$WORKDIR"/augtool-* > /dev/null 2>&1 ; then
+ log "Configuring network"
+ config="$WORKDIR"/config-augtool
+ cat "$WORKDIR"/augtool-* > $config \
+ && augtool $config \
+ && service network restart
+ if [ $? = 0 ]; then
+ log "Network configured successfully"
+ else
+ log "Error configuring network, see $OVIRT_LOGFILE"
fi
- ovirt_store_config /etc/sysconfig/network-scripts/ifcfg*
-} 2>&1 | tee $CONFIG_LOG_FILE
+fi
+ovirt_store_config /etc/sysconfig/network-scripts/ifcfg*
+stop_log
diff --git a/scripts/ovirt-config-password b/scripts/ovirt-config-password
index 47be3f7..89b91da 100755
--- a/scripts/ovirt-config-password
+++ b/scripts/ovirt-config-password
@@ -1,12 +1,22 @@
#!/bin/bash
#
# Set the root password and others
+# Source functions library
+. /etc/init.d/functions
+. /etc/init.d/ovirt-functions
+
+trap '__st=$?; stop_log; exit $__st' 0
+trap 'exit $?' 1 2 13 15
function sasl_password {
user=$1
passwd=$2
- printf "adding user $user to the sasl list for libvirt\n"
+
+ printf "\nadding user $user to the sasl list for libvirt\n"
+
+ start_log
printf '%s\n' "$passwd" | saslpasswd2 -a libvirt -p "$user"
+ stop_log
}
# Usage: set_sasl_password USER
@@ -25,7 +35,9 @@ function set_sasl_password {
local confirm=$REPLY
if test "$passwd" = "$confirm"; then
if [ "$user" = "root" ]; then
+ start_log
printf '%s\n' "$passwd" | passwd --stdin "$user"
+ stop_log
fi
sasl_password "$user" "$passwd"
return 0
@@ -53,4 +65,3 @@ set_sasl_password root
printf "\nAdding new SASL users for libvirt"
# TODO list existing users in /etc/libvirt/passwd.db
while prompt_sasl_user; do :; done
-
diff --git a/scripts/ovirt-config-setup b/scripts/ovirt-config-setup
index 380d79d..21e6b0e 100755
--- a/scripts/ovirt-config-setup
+++ b/scripts/ovirt-config-setup
@@ -2,6 +2,8 @@
#
# Entry point for configuring an oVirt node when running in standalone mode.
+. /etc/init.d/ovirt-functions
+
# symlinked scripts for menu options, link name is menu label
CONFIG_DIR=/etc/ovirt-config-setup.d
@@ -29,7 +31,7 @@ while true; do
PS3="Please select an option: "
while true ; do
- printf "\n\n oVirt Node Standalone Configuration\n\n"
+ printf "\n\n oVirt Node Standalone Configuration\n\n" >&2
select OPTION in "${OPTIONS[@]}"
do
@@ -38,7 +40,7 @@ while true; do
"$CONTINUE") exit 0 ;;
*)
clear;
- $CONFIG_DIR/*"$OPTION";
+ $CONFIG_DIR/*"$OPTION" 2>&1 | $TEE;
break ;;
esac
done
diff --git a/scripts/ovirt-config-storage b/scripts/ovirt-config-storage
index 9928920..2424361 100755
--- a/scripts/ovirt-config-storage
+++ b/scripts/ovirt-config-storage
@@ -12,6 +12,9 @@ ME=$(basename "$0")
warn() { printf '%s: %s\n' "$ME" "$*" >&2; }
die() { warn "$*"; exit 1; }
+trap '__st=$?; stop_log; exit $__st' 0
+trap 'exit $?' 1 2 13 15
+
default_boot_size=50
default_root_size=256
default_config_size=5
@@ -178,24 +181,25 @@ perform_partitioning()
DRIVE_FILE=$(echo $DRIVE | tr '/' '_')
if [ -f /tmp/ovirt-config-storage-$DRIVE_FILE ]; then
printf "\n\nERROR:\n"
- printf "\nStorage Configuration has already been run for $DRIVE_FILE.\n"
- printf "To run it again, please reboot the Node from\n USB/cdrom/PXE\n"
+ printf "Storage Configuration has already been run for $DRIVE.\n"
+ printf "To run it again, please reboot the Node from USB/cdrom/PXE\n"
printf "in stand-alone mode.\n\n\n"
return 1
fi
touch /tmp/ovirt-config-storage-$DRIVE_FILE
- printf "Preparing local storage. Please wait..."
+ start_log
+ log "Starting partitioning of $DRIVE"
- LOG=/var/log/ovirt-partition.log
- {
+ log "Removing old LVM partitions"
wipe_lvm_on_disk
# Exit upon any failure.
set -e
# FIXME: save a backup copy, just in case?
+ log "Wiping old boot sector"
dd if=/dev/zero of=$DRIVE bs=1024K count=1
blockdev --rereadpt $DRIVE
partprobe -s $DRIVE
@@ -204,6 +208,7 @@ perform_partitioning()
# ensure minimal BOOT partition
BOOT_SIZE=10
fi
+ log "Creating boot partition"
parted $DRIVE -s "mklabel ${LABEL_TYPE}"
parted $DRIVE -s "mkpartfs primary ext2 0M ${BOOT_SIZE}M"
parted $DRIVE -s "mkpart primary ext2 ${BOOT_SIZE}M ${SPACE}M"
@@ -214,57 +219,65 @@ perform_partitioning()
# sync GPT to the legacy MBR partitions
if [ "gpt" == "$LABEL_TYPE" ]; then
- gptsync $DRIVE
+ log "Running gptsync to create legacy mbr"
+ gptsync $DRIVE
fi
+ log "Creating physical volume"
pvcreate "${DRIVE}2"
pvck
+ log "Creating volume group"
vgcreate /dev/HostVG "${DRIVE}2"
+ log "Creating boot filesystem"
mke2fs -T ext3 "${DRIVE}1" -L "BOOT"
tune2fs -c 0 -i 0 "${DRIVE}1"
mkdir -p /dev/disk/by-label
ln -snf "${DRIVE}1" /dev/disk/by-label/BOOT
if [ "$SWAP_SIZE" -gt 0 ]; then
+ log "Creating swap partition"
lvcreate --name Swap --size ${SWAP_SIZE}M /dev/HostVG
mkswap -L "SWAP" /dev/HostVG/Swap
echo "/dev/HostVG/Swap swap swap defaults 0 0" >> /etc/fstab
fi
if [ "$ROOT_SIZE" -gt 0 ]; then
+ log "Creating root partition"
lvcreate --name Root --size ${ROOT_SIZE}M /dev/HostVG
mke2fs -T ext3 /dev/HostVG/Root -L "ROOT"
tune2fs -c 0 -i 0 /dev/HostVG/Root
fi
if [ "$CONFIG_SIZE" -gt 0 ]; then
+ log "Creating config partition"
lvcreate --name Config --size ${CONFIG_SIZE}M /dev/HostVG
mke2fs -T ext3 /dev/HostVG/Config -L "CONFIG"
tune2fs -c 0 -i 0 /dev/HostVG/Config
fi
if [ "$LOGGING_SIZE" -gt 0 ]; then
+ log "Creating log partition"
lvcreate --name Logging --size ${LOGGING_SIZE}M /dev/HostVG
mke2fs -T ext3 /dev/HostVG/Logging -L "LOGGING"
tune2fs -c 0 -i 0 /dev/HostVG/Logging
echo "/dev/HostVG/Logging /var/log ext3 defaults 0 0" >> /etc/fstab
- mount_logging
fi
+ log "Creating data partition"
lvcreate --name Data -l 100%FREE /dev/HostVG
mke2fs -T ext3 /dev/HostVG/Data -L "DATA"
tune2fs -c 0 -i 0 /dev/HostVG/Data
echo "/dev/HostVG/Data /data ext3 defaults 0 0" >> /etc/fstab
echo "/data/images /var/lib/libvirt/images bind bind 0 0" >> /etc/fstab
+ log "Mounting data partition"
mount_data
+ log "Mounting config partition"
if mount_config; then
ovirt_store_config /etc/fstab
fi
- } 2>&1 | tee $LOG
- if [ $? -eq 0 ]; then
- printf "Completed!\n\n"
- else
- printf "FAILED! See $LOG\n\n"
- fi
+ mount_logging
+ log "Completed!"
+
+ stop_log
}
do_confirm()
@@ -357,7 +370,7 @@ else
PS3="Choose an option: "
while true; do
- printf "\n\n oVirt Node Storage Configuration\n\n"
+ printf "\n\n oVirt Node Storage Configuration\n\n" >&2
select OPTION in $OPTIONS
do
diff --git a/scripts/ovirt-early b/scripts/ovirt-early
index f31e977..6c7b29b 100755
--- a/scripts/ovirt-early
+++ b/scripts/ovirt-early
@@ -391,7 +391,9 @@ case "$1" in
printf "Starting ovirt-early: "
{
+ log "Starting ovirt-early"
start
+ log "Completed ovirt-early"
} >> $OVIRT_LOGFILE 2>&1
test $? == 0 && success || failure
diff --git a/scripts/ovirt-firstboot b/scripts/ovirt-firstboot
index c7ddfe4..575fa89 100755
--- a/scripts/ovirt-firstboot
+++ b/scripts/ovirt-firstboot
@@ -27,6 +27,9 @@
. /etc/init.d/functions
. /etc/init.d/ovirt-functions
+trap '__st=$?; stop_log; exit $__st' 0
+trap 'exit $?' 1 2 13 15
+
start ()
{
if ! is_firstboot && ! is_auto_install; then
@@ -57,7 +60,9 @@ start ()
fi
disable_firstboot
- ovirt_store_firstboot_config >> $OVIRT_LOGFILE 2>&1
+ start_log
+ ovirt_store_firstboot_config
+ stop_log
}
case "$1" in
@@ -68,9 +73,7 @@ case "$1" in
printf "Starting ovirt-firstboot: "
- {
- start
- }
+ start
test $? == 0 && success || failure
echo
diff --git a/scripts/ovirt-functions b/scripts/ovirt-functions
index 814a8ae..5016f79 100644
--- a/scripts/ovirt-functions
+++ b/scripts/ovirt-functions
@@ -1,6 +1,8 @@
# -*-Shell-script-*-
OVIRT_LOGFILE=/var/log/ovirt.log
+TEE="tee -a $OVIRT_LOGFILE"
+_log_status=1
# label of the oVirt partition
OVIRT_LABEL=OVIRT
@@ -28,6 +30,37 @@ OVIRT_CONFIG_FILES="\
/etc/collectd.conf
"
+# Save stdout to fd 6 and stderr to fd 7. Redirect normal stdout/stderr
+# to log file
+start_log() {
+ if [ "$_log_status" = 1 ]; then
+ exec 6>&1
+ exec 7>&2
+ exec 1>>$OVIRT_LOGFILE
+ exec 2>&1
+ _log_status=0
+ fi
+}
+
+# Restore stdout/stderr from fd 6 and 7, respectively. Close fd 6 and 7
+stop_log() {
+ if [ "$_log_status" != 1 ]; then
+ exec 1>&6 6>&-
+ exec 2>&7 7>&-
+ _log_status=1
+ fi
+}
+
+log() {
+ printf "$(date +'%b %d %H:%M:%S') "
+
+ if [ "$_log_status" = 1 ]; then
+ echo "$@"
+ else
+ echo "$@" >&6
+ fi
+}
+
ovirt_store_firstboot_config() {
# persist config for standalone
ovirt_store_config $OVIRT_CONFIG_FILES
@@ -220,15 +253,16 @@ mount_logging() {
fi
if [ -e /dev/HostVG/Logging ] ; then
+ log "Mounting log partition"
# backup the logs
if [ -e /var/log.bak ]; then
rm -rf /var/log.bak
fi
- cp -a /var/log /var/log.bak
+ cp -av /var/log /var/log.bak
mount /dev/HostVG/Logging /var/log
+ cp -av /var/log.bak/* /var/log
restorecon -rv /var/log
- mv /var/log.bak/* /var/log
rm -Rf /var/log.bak
service rsyslog restart
diff --git a/scripts/ovirt-post b/scripts/ovirt-post
index 5c06927..3861973 100755
--- a/scripts/ovirt-post
+++ b/scripts/ovirt-post
@@ -34,7 +34,9 @@ case "$1" in
printf "Starting ovirt-post: "
{
+ log "Starting ovirt-post"
start
+ log "Completed ovirt-post"
} >> $OVIRT_LOGFILE 2>&1
test $? == 0 && success || failure
--
1.6.0.6
More information about the ovirt-devel
mailing list