Skip to content

Commit 12400a4

Browse files
authored
[docker-restapi]: Fix authentication in restapi (#4383)
- enabling http/https endpoint and mounting the certificates directory - updating the sonic-restapi submodule
1 parent a02255e commit 12400a4

File tree

8 files changed

+82
-6
lines changed

8 files changed

+82
-6
lines changed

dockers/docker-sonic-restapi/Dockerfile.j2

+3
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,9 @@ RUN apt-get update
2020
## Clean up
2121
RUN apt-get clean -y; apt-get autoclean -y; apt-get autoremove -y
2222

23+
COPY ["start.sh", "restapi.sh", "/usr/bin/"]
2324
COPY ["supervisord.conf", "/etc/supervisor/conf.d/"]
25+
COPY ["files/supervisor-proc-exit-listener", "/usr/bin"]
26+
COPY ["critical_processes", "/etc/supervisor"]
2427

2528
ENTRYPOINT ["/usr/bin/supervisord"]
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
###############################################################################
2+
## Monit configuration for restapi container
3+
## process list:
4+
## restapi
5+
###############################################################################
6+
check process restapi matching "/usr/sbin/go-server-server"
7+
if does not exist for 5 times within 5 cycles then alert
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
restapi
+38
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,38 @@
1+
#!/usr/bin/env bash
2+
3+
RESTAPI_ARGS=""
4+
while true
5+
do
6+
client_auth=`sonic-cfggen -d -v "RESTAPI['config']['client_auth']"`
7+
if [[ $client_auth == 'true' ]]; then
8+
certs=`sonic-cfggen -d -v "RESTAPI['certs']"`
9+
allow_insecure=`sonic-cfggen -d -v "RESTAPI['config']['allow_insecure']"`
10+
if [[ $allow_insecure == 'true' ]]; then
11+
RESTAPI_ARGS=" -enablehttp=true"
12+
else
13+
RESTAPI_ARGS=" -enablehttp=false"
14+
fi
15+
if [[ -n "$certs" ]]; then
16+
SERVER_CRT=`sonic-cfggen -d -v "RESTAPI['certs']['server_crt']"`
17+
SERVER_KEY=`sonic-cfggen -d -v "RESTAPI['certs']['server_key']"`
18+
CLIENT_CA_CRT=`sonic-cfggen -d -v "RESTAPI['certs']['client_ca_crt']"`
19+
CLIENT_CRT_CNAME=`sonic-cfggen -d -v "RESTAPI['certs']['client_crt_cname']"`
20+
if [[ -f $SERVER_CRT && -f $SERVER_KEY && -f $CLIENT_CA_CRT ]]; then
21+
RESTAPI_ARGS+=" -enablehttps=true -servercert=$SERVER_CRT -serverkey=$SERVER_KEY -clientcert=$CLIENT_CA_CRT -clientcertcommonname=$CLIENT_CRT_CNAME"
22+
break
23+
fi
24+
fi
25+
fi
26+
logger "Waiting for certificates..."
27+
sleep 60
28+
done
29+
30+
LOG_LEVEL=`sonic-cfggen -d -v "RESTAPI['config']['log_level']"`
31+
if [ ! -z $LOG_LEVEL ]; then
32+
RESTAPI_ARGS+=" -loglevel=$LOG_LEVEL"
33+
else
34+
RESTAPI_ARGS+=" -loglevel=trace"
35+
fi
36+
37+
logger "RESTAPI_ARGS: $RESTAPI_ARGS"
38+
exec /usr/sbin/go-server-server ${RESTAPI_ARGS}

dockers/docker-sonic-restapi/start.sh

-1
Original file line numberDiff line numberDiff line change
@@ -6,5 +6,4 @@ echo "# Config files managed by sonic-config-engine" > /var/sonic/config_status
66
rm -f /var/run/rsyslogd.pid
77

88
supervisorctl start rsyslogd
9-
109
supervisorctl start restapi

dockers/docker-sonic-restapi/supervisord.conf

+26-4
Original file line numberDiff line numberDiff line change
@@ -3,10 +3,32 @@ logfile_maxbytes=1MB
33
logfile_backups=2
44
nodaemon=true
55

6-
[program:restapi]
7-
command=/usr/sbin/go-server-server -loglevel trace
6+
[eventlistener:supervisor-proc-exit-listener]
7+
command=/usr/bin/supervisor-proc-exit-listener --container-name restapi
8+
events=PROCESS_STATE_EXITED
9+
autostart=true
10+
autorestart=false
11+
12+
[program:start.sh]
13+
command=/usr/bin/start.sh
814
priority=1
915
autostart=true
1016
autorestart=false
11-
stdout_logfile=/tmp/rest-api.out.log
12-
stderr_logfile=/tmp/rest-api.err.log
17+
stdout_logfile=syslog
18+
stderr_logfile=syslog
19+
20+
[program:restapi]
21+
command=/usr/bin/restapi.sh
22+
priority=1
23+
autostart=false
24+
autorestart=true
25+
stdout_logfile=syslog
26+
stderr_logfile=syslog
27+
28+
[program:rsyslogd]
29+
command=/usr/sbin/rsyslogd -n
30+
priority=2
31+
autostart=false
32+
autorestart=true
33+
stdout_logfile=syslog
34+
stderr_logfile=syslog

rules/docker-restapi.mk

+6
Original file line numberDiff line numberDiff line change
@@ -18,5 +18,11 @@ endif
1818

1919
$(DOCKER_RESTAPI)_CONTAINER_NAME = restapi
2020
$(DOCKER_RESTAPI)_RUN_OPT += --cap-add NET_ADMIN --privileged -t
21+
$(DOCKER_RESTAPI)_RUN_OPT += --network="host"
2122
$(DOCKER_RESTAPI)_RUN_OPT += -v /var/run/redis/redis.sock:/var/run/redis/redis.sock
23+
$(DOCKER_RESTAPI)_RUN_OPT += -v /etc/sonic/certificates:/etc/sonic/certificates:ro
24+
$(DOCKER_RESTAPI)_RUN_OPT += -p=8081:8081/tcp
2225
$(DOCKER_RESTAPI)_RUN_OPT += -p=8090:8090/tcp
26+
27+
$(DOCKER_RESTAPI)_FILES += $(SUPERVISOR_PROC_EXIT_LISTENER_SCRIPT)
28+
$(DOCKER_RESTAPI)_BASE_IMAGE_FILES += monit_restapi:/etc/monit/conf.d

src/sonic-restapi

0 commit comments

Comments
 (0)