36b59c001c
There is a wide variety of tracing options through the various shell scripts. Some use "set -eux", others explicity set xtrace and others do nothing. There is a "-x" option to bin/disk-image-create but it doesn't flow down to the many scripts it calls. This adds a global integer variable set by disk-image-create DIB_DEBUG_TRACE. All scripts have a stanza added to detect this and turn on tracing. Any other tracing methods are rolled into this. So the standard header is --- if [ "${DIB_DEBUG_TRACE:-0}" -gt 0 ]; then set -x fi set -eu set -o pipefail --- Multiple -x options can be specified to dib-create-image, which increases the value of DIB_DEBUG_TRACE. If script authors feel their script should only trace at higher levels, they should modify the "-gt" value. If they feel it should trace by default, they can modify the default value also. Changes to pachset 16 : scripts which currently trace themselves by default have retained this behaviour with DIB_DEBUG_TRACE defaulting to "1". This was done by running [1] on patch set 15. See the thread beginning at [2] dib-lint is also updated to look for the variable being matched. [1] https://gist.github.com/ianw/71bbda9e6acc74ccd0fd [2] http://lists.openstack.org/pipermail/openstack-dev/2014-November/051575.html Change-Id: I6c5a962260741dcf6f89da9a33b96372a719b7b0
102 lines
2.5 KiB
Bash
Executable file
102 lines
2.5 KiB
Bash
Executable file
#!/bin/bash
|
|
|
|
if [ ${DIB_DEBUG_TRACE:-0} -gt 0 ]; then
|
|
set -x
|
|
fi
|
|
set -eu
|
|
set -o pipefail
|
|
|
|
INTERFACE=${1:-} #optional, if not specified configure all available interfaces
|
|
ENI_FILE="/etc/network/interfaces"
|
|
|
|
PATH=/sbin:$PATH
|
|
|
|
if [ -d "/etc/network" ]; then
|
|
CONF_TYPE="eni"
|
|
elif [ -d "/etc/sysconfig/network-scripts/" ]; then
|
|
CONF_TYPE="netscripts"
|
|
else
|
|
echo "Unsupported network configuration type!"
|
|
exit 1
|
|
fi
|
|
|
|
ARGS="$0 $@"
|
|
|
|
function serialize_me() {
|
|
if [ "$CONF_TYPE" == "eni" ]; then
|
|
# Serialize runs so that we don't miss hot-add interfaces
|
|
FLOCKED=${FLOCKED:-}
|
|
if [ -z "$FLOCKED" ] ; then
|
|
FLOCKED=true exec flock -x $ENI_FILE $ARGS
|
|
fi
|
|
fi
|
|
}
|
|
|
|
function get_if_link() {
|
|
cat /sys/class/net/${1}/carrier
|
|
}
|
|
|
|
function enable_interface() {
|
|
local interface=$1
|
|
|
|
serialize_me
|
|
if [ "$CONF_TYPE" == "eni" ]; then
|
|
printf "auto $interface\niface $interface inet dhcp\n\n" >>$ENI_FILE
|
|
elif [ "$CONF_TYPE" == "netscripts" ]; then
|
|
printf "DEVICE=\"$interface\"\nBOOTPROTO=\"dhcp\"\nONBOOT=\"yes\"\nTYPE=\"Ethernet\"" >"/etc/sysconfig/network-scripts/ifcfg-$interface"
|
|
fi
|
|
echo "Configured $1"
|
|
|
|
}
|
|
|
|
function config_exists() {
|
|
local interface=$1
|
|
if [ "$CONF_TYPE" == "netscripts" ]; then
|
|
if [ -f "/etc/sysconfig/network-scripts/ifcfg-$interface" ]; then
|
|
return 0
|
|
fi
|
|
else
|
|
ifquery $interface >/dev/null 2>&1 && return 0 || return 1
|
|
fi
|
|
return 1
|
|
}
|
|
|
|
function inspect_interface() {
|
|
local interface=$1
|
|
local mac_addr_type="$(cat /sys/class/net/${interface}/addr_assign_type)"
|
|
|
|
echo -n "Inspecting interface: $interface..."
|
|
if config_exists $interface; then
|
|
echo "Has config, skipping."
|
|
elif [ "$mac_addr_type" != "0" ]; then
|
|
echo "Device has generated MAC, skipping."
|
|
else
|
|
ip link set dev $interface up &>/dev/null
|
|
HAS_LINK="$(get_if_link $interface)"
|
|
|
|
TRIES=10
|
|
while [ "$HAS_LINK" == "0" -a $TRIES -gt 0 ]; do
|
|
HAS_LINK="$(get_if_link $interface)"
|
|
if [ "$HAS_LINK" == "1" ]; then
|
|
break
|
|
else
|
|
sleep 1
|
|
fi
|
|
TRIES=$(( TRIES - 1 ))
|
|
done
|
|
if [ "$HAS_LINK" == "1" ] ; then
|
|
enable_interface "$interface"
|
|
else
|
|
echo "No link detected, skipping"
|
|
fi
|
|
fi
|
|
|
|
}
|
|
|
|
if [ -n "$INTERFACE" ]; then
|
|
inspect_interface $INTERFACE
|
|
else
|
|
for iface in $(ls /sys/class/net | grep -v ^lo$); do
|
|
inspect_interface $iface
|
|
done
|
|
fi
|