56ae5edc7f
Existing dockers has paths mounted according to the HWSKU. When HWSKU changes, these dockers need to be destroyed and recreated with the correct paths mounted.
85 lines
2.6 KiB
Django/Jinja
85 lines
2.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" %}
|
|
:
|
|
{%- else %}
|
|
while true; do
|
|
if [[ "$(docker exec -i database redis-cli ping)" =~ PONG.* ]]; then
|
|
break
|
|
fi
|
|
sleep 1
|
|
done
|
|
{%- endif %}
|
|
}
|
|
|
|
# Obtain our platform as we will mount directories with these names in each docker
|
|
PLATFORM=`sonic-cfggen -v 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 {{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 %}
|
|
-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 %}
|
|
--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
|