os-net-config: add configure_safe_defaults
This patch adds a new configure_safe_defaults function that is called on EXIT. If the exit code is non-zero the function executes code to configure DHCP on all active interfaces. Since DHCP is used to initially bootstrap all TripleO instances via the provisioning network this should always be a safe default and allow communication with Heat to persist if an invalid (breaking) network configuration change is pushed out. This would facilitate immediate Heat notification of the failure and subsequent Heat updates to potentially help correct the invalid network configuration. Change-Id: Ibccba1ee77aa13c85a78a75d2e6cd179f87d7d16 Depends-on: Ibe0e32bc09979bc68b92a722b2bfa383e77502a9
This commit is contained in:
parent
4769640d92
commit
cae4740ee2
@ -48,9 +48,58 @@ function ping_metadata_ip() {
|
||||
fi
|
||||
}
|
||||
|
||||
function configure_safe_defaults() {
|
||||
|
||||
[[ $? == 0 ]] && return 0
|
||||
|
||||
cat > /etc/os-net-config/dhcp_all_interfaces.yaml <<EOF_CAT
|
||||
# This file is an autogenerated safe defaults file for os-net-config
|
||||
# which runs DHCP on all discovered interfaces to ensure connectivity
|
||||
# back to the undercloud for updates
|
||||
network_config:
|
||||
EOF_CAT
|
||||
|
||||
for iface in $(ls /sys/class/net | grep -v ^lo$); do
|
||||
local mac_addr_type="$(cat /sys/class/net/${iface}/addr_assign_type)"
|
||||
if [ "$mac_addr_type" != "0" ]; then
|
||||
echo "Device has generated MAC, skipping."
|
||||
else
|
||||
ip link set dev $iface up &>/dev/null
|
||||
HAS_LINK="$(cat /sys/class/net/${iface}/carrier)"
|
||||
|
||||
TRIES=10
|
||||
while [ "$HAS_LINK" == "0" -a $TRIES -gt 0 ]; do
|
||||
HAS_LINK="$(cat /sys/class/net/${iface}/carrier)"
|
||||
if [ "$HAS_LINK" == "1" ]; then
|
||||
break
|
||||
else
|
||||
sleep 1
|
||||
fi
|
||||
TRIES=$(( TRIES - 1 ))
|
||||
done
|
||||
if [ "$HAS_LINK" == "1" ] ; then
|
||||
cat >> /etc/os-net-config/dhcp_all_interfaces.yaml <<EOF_CAT
|
||||
-
|
||||
type: interface
|
||||
name: $iface
|
||||
use_dhcp: true
|
||||
EOF_CAT
|
||||
fi
|
||||
fi
|
||||
done
|
||||
os-net-config -c /etc/os-net-config/dhcp_all_interfaces.yaml -v --detailed-exit-codes --cleanup
|
||||
RETVAL=$?
|
||||
if [[ $RETVAL == 2 ]]; then
|
||||
ping_metadata_ip
|
||||
elif [[ $RETVAL != 0 ]]; then
|
||||
echo "ERROR: configuration of safe defaults failed."
|
||||
fi
|
||||
}
|
||||
|
||||
NET_CONFIG=$(os-apply-config --key os_net_config --type raw --key-default '')
|
||||
|
||||
if [ -n "$NET_CONFIG" ]; then
|
||||
trap configure_safe_defaults EXIT
|
||||
os-net-config -c /etc/os-net-config/config.json -v --detailed-exit-codes
|
||||
RETVAL=$?
|
||||
if [[ $RETVAL == 2 ]]; then
|
||||
|
Loading…
Reference in New Issue
Block a user