cda61290ac
* Create a SONiC configuration management service * Perform config db migration after loading config_db.json to redis DB * Migrate config-setup post migration hooks on image upgrade config-setup post migration hooks help user to migrate configurations from old image to new image. If the installed hooks are user defined they will not be part of the newly installed image. So these hooks have to be migrated to new image and only then they can be executing when the new image is booting. The changes in this fix migrate config-setup post-migration hooks and ensure that any hooks with the same filename in newly installed image are not overwritten. It is expected that users install new hooks as per their requirement and not edit existing hooks. Any changes to existing hooks need to be done as part of new image and not post bootup.
152 lines
4.9 KiB
Bash
Executable File
152 lines
4.9 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
|
|
DEVICE_TYPE=`sonic-cfggen -m -v DEVICE_METADATA.localhost.type`
|
|
if [ "${DEVICE_TYPE}" != "MgmtToRRouter" ]; then
|
|
pfcwd start_default
|
|
fi
|
|
|
|
if [[ -x /usr/bin/db_migrator.py ]]; then
|
|
# Set latest version number
|
|
/usr/bin/db_migrator.py -o set_version
|
|
fi
|
|
}
|
|
|
|
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 [ "$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
|
|
|
|
# If ZTP package is available and enabled, use ZTP to download and load the graph.
|
|
if [ -e /usr/bin/ztp ] && [ "$(ztp status -c)" != "0:DISABLED" ]; then
|
|
echo "ZTP is available and enabled. Skipping graph update."
|
|
exit 0
|
|
fi
|
|
|
|
ACL_URL=$acl_src
|
|
|
|
if [ "$src" = "dhcp" ]; then
|
|
# Enable dhcp client on management port eth0
|
|
/sbin/dhclient -4 -v -pf /run/dhclient.eth0.pid -lf /var/lib/dhcp/dhclient.eth0.leases -I -df /var/lib/dhcp/dhclient6.eth0.leases eth0 &
|
|
disown
|
|
|
|
while [ ! -f /tmp/dhcp_graph_url ]; do
|
|
echo "Waiting for DHCP response..."
|
|
sleep 1
|
|
done
|
|
|
|
if [ "`cat /tmp/dhcp_graph_url`" = "N/A" ]; then
|
|
echo "No graph_url option in DHCP response. Skipping graph update and generating an empty configuration."
|
|
PLATFORM=`sonic-cfggen -H -v DEVICE_METADATA.localhost.platform`
|
|
if [ -f /etc/sonic/minigraph.xml ]; then
|
|
sonic-cfggen -H -m /etc/sonic/minigraph.xml --preset empty > /tmp/device_meta.json
|
|
else
|
|
PRESET=(`head -n 1 /usr/share/sonic/device/$PLATFORM/default_sku`)
|
|
sonic-cfggen -H -k ${PRESET[0]} --preset empty > /tmp/device_meta.json
|
|
fi
|
|
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
|
|
|