[Ovirt-devel] [PATCH] Add support for vendor hooks during ovirt-early start()
Ryan Harper
ryanh at us.ibm.com
Mon Nov 16 19:21:45 UTC 2009
Add a kernel parameter, vendor= which takes a path to a script
embedded in the image. If this script is executable, we will then
source it during ovirt-early start() after command line processing
and before mounting of /config. We also call a post hook at the end of
ovirt-early start().
Also include a sample vendor script.
Signed-off-by: Ryan Harper <ryanh at us.ibm.com>
---
scripts/ovirt-early | 25 ++++++++++++++++++++++++-
scripts/ovirt-vendor.sample | 35 +++++++++++++++++++++++++++++++++++
2 files changed, 59 insertions(+), 1 deletions(-)
create mode 100644 scripts/ovirt-vendor.sample
diff --git a/scripts/ovirt-early b/scripts/ovirt-early
index cdd4afd..7683948 100755
--- a/scripts/ovirt-early
+++ b/scripts/ovirt-early
@@ -369,9 +369,27 @@ start() {
console=*)
bootparams="$bootparams $i"
;;
+ vendor=*)
+ i=${i#vendor=}
+ # path to vendor script:
+ # has 2 stages:
+ # vendor_pre_hook()
+ # vendor_post_host()
+ # pre_hook runs after cmdline processing but before the rest of ovirt-early
+ # post_hook runs at the end of ovirt-early start()
+ [ -x "${i}" ] && {
+ vendor_script="$i"
+ log "Found vendor script: ${vendor_script}";
+ bootparams="$bootparams $i"
+ }
esac
done
+ if [ -n "${vendor_script}" ]; then
+ . ${vendor_script}
+ vendor_pre_hook
+ fi
+
if [ -z "$ip_netmask" ]; then
ip_netmask=$netmask
fi
@@ -379,7 +397,8 @@ start() {
ip_gateway=$gateway
fi
# save boot parameters as defaults for ovirt-config-*
- params="bootif init vol_boot_size vol_swap_size vol_root_size vol_config_size vol_logging_size vol_data_size local_boot standalone overcommit ip_address ip_netmask ip_gateway ipv6 dns ntp vlan ssh_pwauth syslog_server syslog_port collectd_server collectd_port bootparams hostname firstboot"
+ # and allow vendor prehook set params to be saved
+ params="${params} bootif init vol_boot_size vol_swap_size vol_root_size vol_config_size vol_logging_size vol_data_size local_boot standalone overcommit ip_address ip_netmask ip_gateway ipv6 dns ntp vlan ssh_pwauth syslog_server syslog_port collectd_server collectd_port bootparams hostname firstboot"
# mount /config unless firstboot is forced
if [ "$firstboot" != "1" ]; then
mount_config
@@ -434,6 +453,10 @@ start() {
fi
fi
+ if [ -n "${vendor_script}" ]; then
+ vendor_post_hook
+ fi
+
return 0
}
diff --git a/scripts/ovirt-vendor.sample b/scripts/ovirt-vendor.sample
new file mode 100644
index 0000000..7a57ddd
--- /dev/null
+++ b/scripts/ovirt-vendor.sample
@@ -0,0 +1,35 @@
+#!/bin/bash
+
+# This is a sample vendor script
+#
+# We need to provide two hook functions:
+# - vendor_pre_hook()
+# - vendor_post_hook()
+#
+# pre_hook is called after command line processing in ovirt-early, before
+# /config is mounted
+#
+# post_hook is called at the very end of ovirt-early start()
+#
+
+# as an example, lets look for a new kernel parameter and save it
+function vendor_pre_hook()
+{
+ log "Entering vendor pre hook";
+ for i in $(cat /proc/cmdline); do
+ case $i in
+ vendor=*)
+ bootparams="$bootparams $i"
+ ;;
+ esac
+ done
+ params="${params} vendor";
+ log "Exiting vendor pre hook";
+}
+
+function vendor_post_hook()
+{
+ log "Entering vendor post hook";
+
+ log "Exiting vendor post hook";
+}
--
1.6.2.5
--
Ryan Harper
Software Engineer; Linux Technology Center
IBM Corp., Austin, Tx
ryanh at us.ibm.com
More information about the ovirt-devel
mailing list