103 lines
3.6 KiB
Django/Jinja
103 lines
3.6 KiB
Django/Jinja
#!/bin/bash
|
|
|
|
function getMountPoint()
|
|
{
|
|
echo $1 | python -c "import sys, json, os; mnts = [x for x in json.load(sys.stdin)[0]['Mounts'] if x['Destination'] == '/usr/share/sonic/hwsku']; print '' if len(mnts) == 0 else os.path.basename(mnts[0]['Source'])" 2>/dev/null
|
|
}
|
|
|
|
function postStartAction()
|
|
{
|
|
{%- if docker_container_name == "database" %}
|
|
until [[ $(/usr/bin/docker exec database redis-cli ping | grep -c PONG) -gt 0 ]]; do
|
|
sleep 1;
|
|
done
|
|
{%- elif docker_container_name == "swss" %}
|
|
docker exec swss rm -f /ready # remove cruft
|
|
if [[ -d /host/fast-reboot ]];
|
|
then
|
|
test -e /host/fast-reboot/fdb.json && docker cp /host/fast-reboot/fdb.json swss:/
|
|
test -e /host/fast-reboot/arp.json && docker cp /host/fast-reboot/arp.json swss:/
|
|
test -e /host/fast-reboot/default_routes.json && docker cp /host/fast-reboot/default_routes.json swss:/
|
|
rm -fr /host/fast-reboot
|
|
fi
|
|
docker exec swss touch /ready # signal swssconfig.sh to go
|
|
{%- elif docker_container_name == "snmp" %}
|
|
docker exec -i database redis-cli -n 6 HSET 'DEVICE_METADATA|localhost' chassis_serial_number $(decode-syseeprom -s)
|
|
{%- else %}
|
|
: # nothing
|
|
{%- endif %}
|
|
}
|
|
|
|
# Obtain our platform as we will mount directories with these names in each docker
|
|
PLATFORM=`sonic-cfggen -H -v DEVICE_METADATA.localhost.platform`
|
|
|
|
{%- if docker_container_name == "database" %}
|
|
# Don't mount HWSKU in {{docker_container_name}} container.
|
|
HWSKU=""
|
|
{%- else %}
|
|
# Obtain our HWSKU as we will mount directories with these names in each docker
|
|
HWSKU=`sonic-cfggen -d -v 'DEVICE_METADATA["localhost"]["hwsku"]'`
|
|
{%- endif %}
|
|
|
|
start() {
|
|
DOCKERCHECK=`docker inspect --type container {{docker_container_name}} 2>/dev/null`
|
|
if [ "$?" -eq "0" ]; then
|
|
DOCKERMOUNT=`getMountPoint "$DOCKERCHECK"`
|
|
if [ "$DOCKERMOUNT" == "$HWSKU" ]; then
|
|
echo "Starting existing {{docker_container_name}} container with HWSKU $HWSKU"
|
|
docker start {{docker_container_name}}
|
|
postStartAction
|
|
exit 0
|
|
fi
|
|
|
|
# docker created with a different HWSKU, remove and recreate
|
|
echo "Removing obsolete {{docker_container_name}} container with HWSKU $DOCKERMOUNT"
|
|
docker rm -f {{docker_container_name}}
|
|
fi
|
|
|
|
{%- if docker_container_name == "database" %}
|
|
echo "Starting new {{docker_container_name}} container"
|
|
{%- else %}
|
|
echo "Starting new {{docker_container_name}} container with HWSKU $HWSKU"
|
|
{%- endif %}
|
|
docker run -d {{docker_image_run_opt}} \
|
|
{%- if '--log-driver=json-file' in docker_image_run_opt or '--log-driver' not in docker_image_run_opt %}
|
|
--log-opt max-size=2M --log-opt max-file=5 \
|
|
{%- endif %}
|
|
{%- if docker_container_name == "syncd" and sonic_asic_platform == "mellanox" %}
|
|
-e SX_SNIFFER_ENABLE \
|
|
-e SX_SNIFFER_TARGET \
|
|
-e PRM_SNIFFER \
|
|
-e PRM_SNIFFER_FILE_PATH \
|
|
-v /var/log/mellanox/sniffer:/var/log/mellanox/sniffer:rw \
|
|
{%- endif %}
|
|
-v /var/run/redis:/var/run/redis:rw \
|
|
-v /usr/share/sonic/device/$PLATFORM:/usr/share/sonic/platform:ro \
|
|
{%- if docker_container_name != "database" %}
|
|
-v /usr/share/sonic/device/$PLATFORM/$HWSKU:/usr/share/sonic/hwsku:ro \
|
|
{%- endif %}
|
|
--tmpfs /tmp \
|
|
--tmpfs /var/tmp \
|
|
--name={{docker_container_name}} {{docker_image_name}}:latest
|
|
|
|
postStartAction
|
|
}
|
|
|
|
attach() {
|
|
docker attach --no-stdin {{docker_container_name}}
|
|
}
|
|
|
|
stop() {
|
|
docker stop {{docker_container_name}}
|
|
}
|
|
|
|
case "$1" in
|
|
start|stop|attach)
|
|
$1
|
|
;;
|
|
*)
|
|
echo "Usage: $0 {start|stop|attach}"
|
|
exit 1
|
|
;;
|
|
esac
|