192 lines
6.1 KiB
Bash
Executable File
192 lines
6.1 KiB
Bash
Executable File
#!/bin/bash
|
|
|
|
CONFIG_DB_INDEX=4
|
|
|
|
reload_minigraph()
|
|
{
|
|
echo "Reloading minigraph..."
|
|
if [ ! -f /etc/sonic/init_cfg.json ]; then
|
|
echo "{}" > /etc/sonic/init_cfg.json
|
|
fi
|
|
redis-cli -n $CONFIG_DB_INDEX FLUSHDB
|
|
sonic-cfggen -H -m -j /etc/sonic/init_cfg.json --write-to-db
|
|
redis-cli -n $CONFIG_DB_INDEX SET "CONFIG_DB_INITIALIZED" "1"
|
|
if [ -f /etc/sonic/acl.json ]; then
|
|
acl-loader update full /etc/sonic/acl.json
|
|
fi
|
|
config qos reload
|
|
}
|
|
|
|
copy_default_minigraph()
|
|
{
|
|
. /host/machine.conf
|
|
if [ -n "$aboot_platform" ]; then
|
|
platform=$aboot_platform
|
|
elif [ -n "$onie_platform" ]; then
|
|
platform=$onie_platform
|
|
else
|
|
echo "Unknown sonic platform."
|
|
exit 1
|
|
fi
|
|
echo "Copying default minigraph..."
|
|
cp /usr/share/sonic/device/$platform/minigraph.xml /etc/sonic/
|
|
}
|
|
|
|
|
|
if [ ! -f /etc/sonic/updategraph.conf ]; then
|
|
echo "No updategraph.conf found, generating a default one."
|
|
echo "enabled=false" >/etc/sonic/updategraph.conf
|
|
fi
|
|
|
|
. /etc/sonic/updategraph.conf
|
|
|
|
if [ -f /tmp/pending_config_migration ]; then
|
|
if [ "$enabled" = "true" ]; then
|
|
echo "Use minigraph.xml from old system..."
|
|
cp /etc/sonic/old_config/minigraph.xml /etc/sonic/
|
|
if [ -f /etc/sonic/old_config/init_cfg.json ]; then
|
|
cp /etc/sonic/old_config/init_cfg.json /etc/sonic/
|
|
fi
|
|
if [ -f /etc/sonic/old_config/snmp.yml ]; then
|
|
cp /etc/sonic/old_config/snmp.yml /etc/sonic/
|
|
fi
|
|
if [ -f /etc/sonic/old_config/acl.json ]; then
|
|
cp /etc/sonic/old_config/acl.json /etc/sonic/
|
|
fi
|
|
reload_minigraph
|
|
sonic-cfggen -d --print-data > /etc/sonic/config_db.json
|
|
else
|
|
echo "Use config_db.json from old system..."
|
|
cp /etc/sonic/old_config/config_db.json /etc/sonic/
|
|
sonic-cfggen -j /etc/sonic/config_db.json --write-to-db
|
|
fi
|
|
rm -f /tmp/pending_config_migration
|
|
sed -i "/enabled=/d" /etc/sonic/updategraph.conf
|
|
echo "enabled=false" >> /etc/sonic/updategraph.conf
|
|
exit 0
|
|
fi
|
|
|
|
if [ -f /tmp/pending_config_initialization ]; then
|
|
rm -f /tmp/pending_config_initialization
|
|
if [ "$enabled" != "true" ]; then
|
|
copy_default_minigraph
|
|
reload_minigraph
|
|
sonic-cfggen -d --print-data > /etc/sonic/config_db.json
|
|
exit 0
|
|
fi
|
|
fi
|
|
|
|
if [ "$enabled" = "reload_only" ]; then
|
|
reload_minigraph
|
|
sed -i "/enabled=/d" /etc/sonic/updategraph.conf
|
|
echo "enabled=false" >> /etc/sonic/updategraph.conf
|
|
exit 0
|
|
fi
|
|
|
|
if [ "$enabled" != "true" ]; then
|
|
echo "Disabled in updategraph.conf. Skipping graph update."
|
|
exit 0
|
|
fi
|
|
|
|
ACL_URL=$acl_src
|
|
|
|
if [ "$src" = "dhcp" ]; then
|
|
while [ ! -f /tmp/dhcp_graph_url ]; do
|
|
echo "Waiting for DHCP response..."
|
|
sleep 1
|
|
done
|
|
|
|
if [ "`cat /tmp/dhcp_graph_url`" = "default" ]; then
|
|
echo "No graph_url option in DHCP response. Skipping graph update and using existing minigraph."
|
|
if [ "$dhcp_as_static" = "true" ]; then
|
|
sed -i "/enabled=/d" /etc/sonic/updategraph.conf
|
|
echo "enabled=false" >> /etc/sonic/updategraph.conf
|
|
fi
|
|
exit 0
|
|
fi
|
|
if [ "`cat /tmp/dhcp_graph_url`" = "N/A" ]; then
|
|
echo "'N/A' found in DHCP response. Skipping graph update and generating an empty configuration."
|
|
if [ ! -f /etc/sonic/minigraph.xml ]; then
|
|
copy_default_minigraph
|
|
fi
|
|
echo '{"DEVICE_METADATA":' > /tmp/device_meta.json
|
|
sonic-cfggen -H -m /etc/sonic/minigraph.xml --var-json DEVICE_METADATA >> /tmp/device_meta.json
|
|
echo '}' >> /tmp/device_meta.json
|
|
if [ -f /etc/sonic/init_cfg.json ]; then
|
|
sonic-cfggen -j /tmp/device_meta.json -j /etc/sonic/init_cfg.json --print-data > /etc/sonic/config_db.json
|
|
else
|
|
cp -f /tmp/device_meta.json /etc/sonic/config_db.json
|
|
fi
|
|
redis-cli -n $CONFIG_DB_INDEX FLUSHDB
|
|
sonic-cfggen -j /etc/sonic/config_db.json --write-to-db
|
|
redis-cli -n $CONFIG_DB_INDEX SET "CONFIG_DB_INITIALIZED" "1"
|
|
if [ "$dhcp_as_static" = "true" ]; then
|
|
sed -i "/enabled=/d" /etc/sonic/updategraph.conf
|
|
echo "enabled=false" >> /etc/sonic/updategraph.conf
|
|
fi
|
|
exit 0
|
|
fi
|
|
|
|
|
|
HOSTNAME=`hostname -s`
|
|
GRAPH_URL=`sonic-cfggen -t /tmp/dhcp_graph_url -a "{\"hostname\": \"$HOSTNAME\"}"`
|
|
URL_REGEX='^(https?|ftp|file)://[-A-Za-z0-9\+&@#/%?=~_|!:,.;]*[-A-Za-z0-9\+&@#/%=~_|]$'
|
|
if [[ ! $GRAPH_URL =~ $URL_REGEX ]]; then
|
|
echo "\"$GRAPH_URL\" is not a valid url. Skipping graph update."
|
|
exit 0
|
|
fi
|
|
if [ "$dhcp_as_static" = "true" ]; then
|
|
sed -i "/src=/d" /etc/sonic/updategraph.conf
|
|
echo "src=\"$GRAPH_URL\"" >> /etc/sonic/updategraph.conf
|
|
fi
|
|
|
|
if [ -f /tmp/dhcp_acl_url ]; then
|
|
ACL_URL=`sonic-cfggen -t /tmp/dhcp_acl_url -a "{\"hostname\": \"$HOSTNAME\"}"`
|
|
if [[ ! $ACL_URL =~ $URL_REGEX ]]; then
|
|
echo "\"$ACL_URL\" is not a valid url. Skipping acl update."
|
|
ACL_URL=""
|
|
fi
|
|
if [ "$dhcp_as_static" = "true" ]; then
|
|
sed -i "/acl_src=/d" /etc/sonic/updategraph.conf
|
|
echo "acl_src=\"$ACL_URL\"" >> /etc/sonic/updategraph.conf
|
|
fi
|
|
fi
|
|
else
|
|
GRAPH_URL=$src
|
|
fi
|
|
|
|
if [ -f /etc/sonic/minigraph.xml ]; then
|
|
echo "Renaming minigraph.xml to minigraph.old"
|
|
mv /etc/sonic/minigraph.xml /etc/sonic/minigraph.old
|
|
fi
|
|
|
|
echo "Getting minigraph from $GRAPH_URL"
|
|
|
|
while true; do
|
|
curl -f $GRAPH_URL -o /etc/sonic/minigraph.xml --connect-timeout 15 && break
|
|
sleep 5
|
|
done
|
|
|
|
if [ -n "$ACL_URL" ]; then
|
|
if [ -f /etc/sonic/acl.json ]; then
|
|
echo "Renaming acl.json to acl.json.old"
|
|
mv /etc/sonic/acl.json /etc/sonic/acl.json.old
|
|
fi
|
|
echo "Getting ACL config from $ACL_URL"
|
|
|
|
while true; do
|
|
curl -f $ACL_URL -o /etc/sonic/acl.json --connect-timeout 15 && break
|
|
sleep 5
|
|
done
|
|
else
|
|
echo "Skip ACL config download."
|
|
fi
|
|
|
|
reload_minigraph
|
|
sonic-cfggen -d --print-data > /etc/sonic/config_db.json
|
|
|
|
# Mark as disabled after graph is successfully downloaded
|
|
sed -i "/enabled=/d" /etc/sonic/updategraph.conf
|
|
echo "enabled=false" >> /etc/sonic/updategraph.conf
|
|
|