[telemetry] Call sonic-cfggen Once (#4901)

sonic-cfggen call is slow and this is taking place in the SONiC
boot up process. The change uses templates to assemble all required
vars into single template file. With this change, telemetry now calls
once into sonic-cfggen.

signed-off-by: Tamer Ahmed <tamer.ahmed@microsoft.com>
This commit is contained in:
Tamer Ahmed 2020-07-08 10:27:05 -07:00 committed by Qi Luo
parent 153f880e6b
commit f4eae5dabd
5 changed files with 31 additions and 19 deletions

View File

@ -64,7 +64,9 @@ RUN apt-get update && \
net-tools \ net-tools \
# for arm arch: Installing j2cli dependency package MarkupSafe from source relies on weeksetuptools and wheel # for arm arch: Installing j2cli dependency package MarkupSafe from source relies on weeksetuptools and wheel
python-setuptools \ python-setuptools \
python-wheel python-wheel \
# for processing/handling json files in bash environment
jq
# For templating # For templating
RUN pip install j2cli RUN pip install j2cli

View File

@ -62,7 +62,9 @@ RUN apt-get update && \
net-tools \ net-tools \
# for arm arch: Installing j2cli dependency package MarkupSafe from source relies on weeksetuptools and wheel # for arm arch: Installing j2cli dependency package MarkupSafe from source relies on weeksetuptools and wheel
python-setuptools \ python-setuptools \
python-wheel python-wheel \
# for processing json files in bash environment
jq
# For templating # For templating
RUN pip install j2cli RUN pip install j2cli

View File

@ -22,7 +22,7 @@ RUN apt-get clean -y && \
apt-get autoremove -y && \ apt-get autoremove -y && \
rm -rf /debs rm -rf /debs
COPY ["start.sh", "telemetry.sh", "dialout.sh", "/usr/bin/"] COPY ["start.sh", "telemetry.sh", "dialout.sh", "telemetry_vars.j2", "/usr/bin/"]
COPY ["supervisord.conf", "/etc/supervisor/conf.d/"] COPY ["supervisord.conf", "/etc/supervisor/conf.d/"]
COPY ["files/supervisor-proc-exit-listener", "/usr/bin"] COPY ["files/supervisor-proc-exit-listener", "/usr/bin"]
COPY ["critical_processes", "/etc/supervisor"] COPY ["critical_processes", "/etc/supervisor"]

View File

@ -2,36 +2,38 @@
# Try to read telemetry and certs config from ConfigDB. # Try to read telemetry and certs config from ConfigDB.
# Use default value if no valid config exists # Use default value if no valid config exists
X509=`sonic-cfggen -d -v "DEVICE_METADATA['x509']"` TELEMETRY_VARS=$(sonic-cfggen -d -t telemetry_vars.j2)
gnmi=`sonic-cfggen -d -v "TELEMETRY['gnmi']"` TELEMETRY_VARS=${TELEMETRY_VARS//[\']/\"}
certs=`sonic-cfggen -d -v "TELEMETRY['certs']"` X509=$(echo $TELEMETRY_VARS | jq -r '.x509')
GNMI=$(echo $TELEMETRY_VARS | jq -r '.gnmi')
CERTS=$(echo $TELEMETRY_VARS | jq -r '.certs')
TELEMETRY_ARGS=" -logtostderr" TELEMETRY_ARGS=" -logtostderr"
export CVL_SCHEMA_PATH=/usr/sbin/schema export CVL_SCHEMA_PATH=/usr/sbin/schema
if [ -n "$certs" ]; then if [ -n "$CERTS" ]; then
SERVER_CRT=`sonic-cfggen -d -v "TELEMETRY['certs']['server_crt']"` SERVER_CRT=$(echo $CERTS | jq -r '.server_crt')
SERVER_KEY=`sonic-cfggen -d -v "TELEMETRY['certs']['server_key']"` SERVER_KEY=$(echo $CERTS | jq -r '.server_key')
if [ -z $SERVER_CRT ] || [ -z $SERVER_KEY ]; then if [ -z $SERVER_CRT ] || [ -z $SERVER_KEY ]; then
TELEMETRY_ARGS+=" --insecure" TELEMETRY_ARGS+=" --insecure"
else else
TELEMETRY_ARGS+=" --server_crt $SERVER_CRT --server_key $SERVER_KEY " TELEMETRY_ARGS+=" --server_crt $SERVER_CRT --server_key $SERVER_KEY "
fi fi
CA_CRT=`sonic-cfggen -d -v "TELEMETRY['certs']['ca_crt']"` CA_CRT=$(echo $CERTS | jq -r '.ca_crt')
if [ ! -z $CA_CRT ]; then if [ ! -z $CA_CRT ]; then
TELEMETRY_ARGS+=" --ca_crt $CA_CRT" TELEMETRY_ARGS+=" --ca_crt $CA_CRT"
fi fi
elif [ -n "$X509" ]; then elif [ -n "$X509" ]; then
SERVER_CRT=`sonic-cfggen -d -v "DEVICE_METADATA['x509']['server_crt']"` SERVER_CRT=$(echo $X509 | jq -r '.server_crt')
SERVER_KEY=`sonic-cfggen -d -v "DEVICE_METADATA['x509']['server_key']"` SERVER_KEY=$(echo $X509 | jq -r '.server_key')
if [ -z $SERVER_CRT ] || [ -z $SERVER_KEY ]; then if [ -z $SERVER_CRT ] || [ -z $SERVER_KEY ]; then
TELEMETRY_ARGS+=" --insecure" TELEMETRY_ARGS+=" --insecure"
else else
TELEMETRY_ARGS+=" --server_crt $SERVER_CRT --server_key $SERVER_KEY " TELEMETRY_ARGS+=" --server_crt $SERVER_CRT --server_key $SERVER_KEY "
fi fi
CA_CRT=`sonic-cfggen -d -v "DEVICE_METADATA['x509']['ca_crt']"` CA_CRT=$(echo $X509 | jq -r '.ca_crt')
if [ ! -z $CA_CRT ]; then if [ ! -z $CA_CRT ]; then
TELEMETRY_ARGS+=" --ca_crt $CA_CRT" TELEMETRY_ARGS+=" --ca_crt $CA_CRT"
fi fi
@ -40,19 +42,20 @@ else
fi fi
# If no configuration entry exists for TELEMETRY, create one default port # If no configuration entry exists for TELEMETRY, create one default port
if [ -z "$gnmi" ]; then if [ -z "$GNMI" ]; then
sonic-db-cli CONFIG_DB hset "TELEMETRY|gnmi" port 8080 PORT=8080
sonic-db-cli CONFIG_DB hset "TELEMETRY|gnmi" port $PORT
else
PORT=$(echo $GNMI | jq -r '.port')
fi fi
PORT=`sonic-cfggen -d -v "TELEMETRY['gnmi']['port']"`
TELEMETRY_ARGS+=" --port $PORT" TELEMETRY_ARGS+=" --port $PORT"
CLIENT_AUTH=`sonic-cfggen -d -v "TELEMETRY['gnmi']['client_auth']"` CLIENT_AUTH=$(echo $GNMI | jq -r '.client_auth')
if [ -z $CLIENT_AUTH ] || [ $CLIENT_AUTH == "false" ]; then if [ -z $CLIENT_AUTH ] || [ $CLIENT_AUTH == "false" ]; then
TELEMETRY_ARGS+=" --allow_no_client_auth" TELEMETRY_ARGS+=" --allow_no_client_auth"
fi fi
LOG_LEVEL=`sonic-cfggen -d -v "TELEMETRY['gnmi']['log_level']"` LOG_LEVEL=$(echo $GNMI | jq -r '.log_level')
if [ ! -z $LOG_LEVEL ]; then if [ ! -z $LOG_LEVEL ]; then
TELEMETRY_ARGS+=" -v=$LOG_LEVEL" TELEMETRY_ARGS+=" -v=$LOG_LEVEL"
else else

View File

@ -0,0 +1,5 @@
{
"certs": "{% if "certs" in TELEMETRY.keys() %}{{ TELEMETRY["certs"] }}{% endif %}",
"gnmi" : "{% if "gnmi" in TELEMETRY.keys() %}{{ TELEMETRY["gnmi"] }}{% endif %}",
"x509" : "{% if "x509" in DEVICE_METADATA.keys() %}{{ DEVICE_METADATA["x509"] }}{% endif %}"
}