Skip to content

Commit e48af2e

Browse files
tahmed-devabdosi
authored andcommitted
[mgmt-framework] Call sonic-cfggen Once (#4937)
Optimizing number of calls made to sonic-cfggen during service start up as it adds to total system boot up time. ***-Test 1*** there is an average saving of 1 to 1.5 sec between old script and new script ``` root@str-s6000-acs-14:/# time /usr/bin/rest-server-old.sh Generating temporary TLS server certificate ... 2020/07/09 19:03:33 wrote cert.pem 2020/07/09 19:03:33 wrote key.pem REST_SERVER_ARGS = -ui /rest_ui -logtostderr -cert /tmp/cert.pem -key /tmp/key.pem /usr/sbin/rest_server -ui /rest_ui -logtostderr -cert /tmp/cert.pem -key /tmp/key.pem real 0m8.790s user 0m7.993s sys 0m0.584s root@str-s6000-acs-14:/# time /usr/bin/rest-server-new.sh Generating temporary TLS server certificate ... 2020/07/09 19:03:45 wrote cert.pem 2020/07/09 19:03:45 wrote key.pem REST_SERVER_ARGS = -ui /rest_ui -logtostderr -cert /tmp/cert.pem -key /tmp/key.pem /usr/sbin/rest_server -ui /rest_ui -logtostderr -cert /tmp/cert.pem -key /tmp/key.pem real 0m6.940s user 0m5.670s sys 0m0.386s ``` ***-Test 2*** Built an image with this change and rest server is running with params as described in test 1 above ``` admin@str-s6000-acs-14:~$ ps -ef | grep rest_server root 3301 2866 2 02:09 pts/0 00:00:10 /usr/sbin/rest_server -ui /rest_ui -logtostderr -cert /tmp/cert.pem -key /tmp/key.pem ``` signed-off-by: Tamer Ahmed <[email protected]>
1 parent 7fc3846 commit e48af2e

File tree

3 files changed

+34
-18
lines changed

3 files changed

+34
-18
lines changed

dockers/docker-sonic-mgmt-framework/Dockerfile.j2

+1
Original file line numberDiff line numberDiff line change
@@ -34,6 +34,7 @@ debs/{{ deb }}{{' '}}
3434
{%- endfor %}
3535

3636
COPY ["start.sh", "rest-server.sh", "/usr/bin/"]
37+
COPY ["mgmt_vars.j2", "/usr/share/sonic/templates/"]
3738
COPY ["supervisord.conf", "/etc/supervisor/conf.d/"]
3839

3940
RUN apt-get clean -y; apt-get autoclean -y; apt-get autoremove -y
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,4 @@
1+
{
2+
"rest_server": {% if REST_SERVER is defined and "default" in RESET_SERVER.keys() %}{{ REST_SERVER['default'] }}{% else %}""{% endif %},
3+
"x509" : {% if "x509" in DEVICE_METADATA.keys() %}{{ DEVICE_METADATA["x509"] }}{% else %}""{% endif %}
4+
}

dockers/docker-sonic-mgmt-framework/rest-server.sh

+29-18
Original file line numberDiff line numberDiff line change
@@ -1,28 +1,39 @@
11
#!/usr/bin/env bash
22

33
# Startup script for SONiC Management REST Server
4+
EXIT_MGMT_VARS_FILE_NOT_FOUND=1
5+
MGMT_VARS_FILE=/usr/share/sonic/templates/mgmt_vars.j2
46

5-
SERVER_PORT=
6-
LOG_LEVEL=
7-
CLIENT_AUTH=
8-
SERVER_CRT=
9-
SERVER_KEY=
10-
CA_CERT=
11-
12-
# Read basic server settings from REST_SERVER|default entry
13-
HAS_REST_CONFIG=$(sonic-cfggen -d -v "1 if REST_SERVER and REST_SERVER['default']")
14-
if [ "$HAS_REST_CONFIG" == "1" ]; then
15-
SERVER_PORT=$(sonic-cfggen -d -v "REST_SERVER['default']['port']")
16-
CLIENT_AUTH=$(sonic-cfggen -d -v "REST_SERVER['default']['client_auth']")
17-
LOG_LEVEL=$(sonic-cfggen -d -v "REST_SERVER['default']['log_level']")
7+
if [ ! -f "$MGMT_VARS_FILE" ]; then
8+
echo "Mgmt vars template file not found"
9+
exit $EXIT_MGMT_VARS_FILE_NOT_FOUND
10+
fi
11+
12+
# Read basic server settings from mgmt vars entries
13+
MGMT_VARS=$(sonic-cfggen -d -t $MGMT_VARS_FILE)
14+
MGMT_VARS=${MGMT_VARS//[\']/\"}
15+
16+
REST_SERVER=$(echo $MGMT_VARS | jq -r '.rest_server')
17+
18+
if [ -n "$REST_SERVER" ]; then
19+
SERVER_PORT=$(echo $REST_SERVER | jq -r '.port')
20+
CLIENT_AUTH=$(echo $REST_SERVER | jq -r '.client_auth')
21+
LOG_LEVEL=$(echo $REST_SERVER | jq -r '.log_level')
22+
23+
SERVER_CRT=$(echo $REST_SERVER | jq -r '.server_crt')
24+
SERVER_KEY=$(echo $REST_SERVER | jq -r '.server_key')
25+
CA_CRT=$(echo $REST_SERVER | jq -r '.ca_crt')
26+
fi
27+
28+
if [[ -z $SERVER_CRT ]] && [[ -z $SERVER_KEY ]] && [[ -z $CA_CRT ]]; then
29+
X509=$(echo $MGMT_VARS | jq -r '.x509')
1830
fi
1931

2032
# Read certificate file paths from DEVICE_METADATA|x509 entry.
21-
HAS_X509_CONFIG=$(sonic-cfggen -d -v "1 if DEVICE_METADATA and DEVICE_METADATA['x509']")
22-
if [ "$HAS_X509_CONFIG" == "1" ]; then
23-
SERVER_CRT=$(sonic-cfggen -d -v "DEVICE_METADATA['x509']['server_crt']")
24-
SERVER_KEY=$(sonic-cfggen -d -v "DEVICE_METADATA['x509']['server_key']")
25-
CA_CRT=$(sonic-cfggen -d -v "DEVICE_METADATA['x509']['ca_crt']")
33+
if [ -n "$X509" ]; then
34+
SERVER_CRT=$(echo $X509 | jq -r '.server_crt')
35+
SERVER_KEY=$(echo $X509 | jq -r '.server_key')
36+
CA_CRT=$(echo $X509 | jq -r '.ca_crt')
2637
fi
2738

2839
# Create temporary server certificate if they not configured in ConfigDB

0 commit comments

Comments
 (0)