2019-06-22 13:26:23 -05:00
|
|
|
{% from "dockers/dockerfile-macros.j2" import install_debian_packages, install_python_wheels, copy_files %}
|
2022-04-27 19:39:37 -05:00
|
|
|
FROM docker-config-engine-bullseye-{{DOCKER_USERNAME}}:{{DOCKER_USERTAG}}
|
2017-02-06 10:40:57 -06:00
|
|
|
|
2018-06-25 12:48:42 -05:00
|
|
|
ARG docker_container_name
|
First cut image update for kubernetes support. (#5421)
* First cut image update for kubernetes support.
With this,
1) dockers dhcp_relay, lldp, pmon, radv, snmp, telemetry are enabled
for kube management
init_cfg.json configure set_owner as kube for these
2) Each docker's start.sh updated to call container_startup.py to register going up
As part of this call, it registers the current owner as local/kube and its version
The images are built with its version ingrained into image during build
3) Update all docker's bash script to call 'container start/stop/wait' instead of 'docker start/stop/wait'.
For all locally managed containers, it calls docker commands, hence no change for locally managed.
4) Introduced a new ctrmgrd service, that helps with transition between owners as kube & local and carry over any labels update from STATE-DB to API server
5) hostcfgd updated to handle owner change
6) Reboot scripts are updatd to tag kube running images as local, so upon reboot they run the same image.
7) Added kube_commands.py to handle all updates with Kubernetes API serrver -- dedicated for k8s interaction only.
2020-12-22 10:01:33 -06:00
|
|
|
ARG image_version
|
2018-06-25 12:48:42 -05:00
|
|
|
|
2017-05-08 17:43:31 -05:00
|
|
|
# Make apt-get non-interactive
|
2017-02-06 10:40:57 -06:00
|
|
|
ENV DEBIAN_FRONTEND=noninteractive
|
|
|
|
|
First cut image update for kubernetes support. (#5421)
* First cut image update for kubernetes support.
With this,
1) dockers dhcp_relay, lldp, pmon, radv, snmp, telemetry are enabled
for kube management
init_cfg.json configure set_owner as kube for these
2) Each docker's start.sh updated to call container_startup.py to register going up
As part of this call, it registers the current owner as local/kube and its version
The images are built with its version ingrained into image during build
3) Update all docker's bash script to call 'container start/stop/wait' instead of 'docker start/stop/wait'.
For all locally managed containers, it calls docker commands, hence no change for locally managed.
4) Introduced a new ctrmgrd service, that helps with transition between owners as kube & local and carry over any labels update from STATE-DB to API server
5) hostcfgd updated to handle owner change
6) Reboot scripts are updatd to tag kube running images as local, so upon reboot they run the same image.
7) Added kube_commands.py to handle all updates with Kubernetes API serrver -- dedicated for k8s interaction only.
2020-12-22 10:01:33 -06:00
|
|
|
# Pass the image_version to container
|
|
|
|
ENV IMAGE_VERSION=$image_version
|
|
|
|
|
2017-05-08 17:43:31 -05:00
|
|
|
# Update apt's cache of available packages
|
2017-02-06 10:40:57 -06:00
|
|
|
RUN apt-get update
|
|
|
|
|
[dhcp_relay] Use dhcprelayd to manage critical processes (#17236)
Modify j2 template files in docker-dhcp-relay. Add dhcprelayd to group dhcp-relay instead of isc-dhcp-relay-VlanXXX, which would make dhcprelayd to become critical process.
In dhcprelayd, subscribe FEATURE table to check whether dhcp_server feature is enabled.
2.1 If dhcp_server feature is disabled, means we need original dhcp_relay functionality, dhcprelayd would do nothing. Because dhcrelay/dhcpmon configuration is generated in supervisord configuration, they will automatically run.
2.2 If dhcp_server feature is enabled, dhcprelayd will stop dhcpmon/dhcrelay processes started by supervisord and subscribe dhcp_server related tables in config_db to start dhcpmon/dhcrelay processes.
2.3 While dhcprelayd running, it will regularly check feature status (by default per 5s) and would encounter below 4 state change about dhcp_server feature:
A) disabled -> enabled
In this scenario, dhcprelayd will subscribe dhcp_server related tables and stop dhcpmon/dhcrelay processes started by supervisord and start new pair of dhcpmon/dhcrelay processes. After this, dhcpmon/dhcrelay processes are totally managed by dhcprelayd.
B) enabled -> enabled
In this scenaro, dhcprelayd will monitor db changes in dhcp_server related tables to determine whether to restart dhcpmon/dhrelay processes.
C) enabled -> disabled
In this scenario, dhcprelayd would unsubscribe dhcp_server related tables and kill dhcpmon/dhcrelay processes started by itself. And then dhcprelayd will start dhcpmon/dhcrelay processes via supervisorctl.
D) disabled -> disabled
dhcprelayd will check whether dhcrelay processes running status consistent with supervisord configuration file. If they are not consistent, dhcprelayd will kill itself, then dhcp_relay container will stop because dhcprelayd is critical process.
2023-11-27 11:30:01 -06:00
|
|
|
RUN apt-get install -y libjsoncpp-dev \
|
|
|
|
python3-dev \
|
|
|
|
build-essential
|
2023-11-02 10:09:01 -05:00
|
|
|
|
|
|
|
RUN pip3 install psutil
|
|
|
|
|
2023-09-05 12:16:39 -05:00
|
|
|
RUN apt-get install -y libjsoncpp-dev
|
|
|
|
|
2017-06-24 14:05:04 -05:00
|
|
|
{% if docker_dhcp_relay_debs.strip() -%}
|
|
|
|
# Copy built Debian packages
|
2019-06-22 13:26:23 -05:00
|
|
|
{{ copy_files("debs/", docker_dhcp_relay_debs.split(' '), "/debs/") }}
|
2017-06-24 14:05:04 -05:00
|
|
|
|
|
|
|
# Install built Debian packages and implicitly install their dependencies
|
2019-06-22 13:26:23 -05:00
|
|
|
{{ install_debian_packages(docker_dhcp_relay_debs.split(' ')) }}
|
2017-06-24 14:05:04 -05:00
|
|
|
{%- endif %}
|
2017-02-06 10:40:57 -06:00
|
|
|
|
2023-11-02 10:09:01 -05:00
|
|
|
{% if docker_dhcp_relay_whls.strip() %}
|
|
|
|
# Copy locally-built Python wheel dependencies
|
|
|
|
{{ copy_files("python-wheels/", docker_dhcp_relay_whls.split(' '), "/python-wheels/") }}
|
|
|
|
|
|
|
|
# Install locally-built Python wheel dependencies
|
|
|
|
{{ install_python_wheels(docker_dhcp_relay_whls.split(' ')) }}
|
|
|
|
{% endif %}
|
|
|
|
|
2017-05-08 17:43:31 -05:00
|
|
|
# Clean up
|
2023-11-02 10:09:01 -05:00
|
|
|
RUN apt-get remove -y build-essential \
|
|
|
|
python3-dev
|
2019-06-22 13:26:23 -05:00
|
|
|
RUN apt-get clean -y && \
|
|
|
|
apt-get autoclean -y && \
|
|
|
|
apt-get autoremove -y && \
|
|
|
|
rm -rf /debs
|
2017-02-06 10:40:57 -06:00
|
|
|
|
2017-10-05 01:35:43 -05:00
|
|
|
COPY ["docker_init.sh", "start.sh", "/usr/bin/"]
|
2020-08-17 17:47:14 -05:00
|
|
|
COPY ["docker-dhcp-relay.supervisord.conf.j2", "port-name-alias-map.txt.j2", "wait_for_intf.sh.j2", "/usr/share/sonic/templates/"]
|
2022-04-12 12:44:17 -05:00
|
|
|
COPY ["dhcp-relay.programs.j2", "dhcpv4-relay.agents.j2", "dhcpv6-relay.agents.j2", "dhcp-relay.monitors.j2", "/usr/share/sonic/templates/"]
|
2019-11-05 20:32:14 -06:00
|
|
|
COPY ["files/supervisor-proc-exit-listener", "/usr/bin"]
|
|
|
|
COPY ["critical_processes", "/etc/supervisor"]
|
2021-07-15 12:35:56 -05:00
|
|
|
COPY ["cli", "/cli/"]
|
2022-11-13 23:41:33 -06:00
|
|
|
# Copy regex json and rsyslog_plugin.conf file into rsyslog.d
|
|
|
|
COPY ["*.json", "/etc/rsyslog.d/"]
|
|
|
|
COPY ["files/rsyslog_plugin.conf.j2", "/etc/rsyslog.d/"]
|
|
|
|
|
|
|
|
# Create dhcp_relay_regex.conf
|
|
|
|
RUN j2 -f json /etc/rsyslog.d/rsyslog_plugin.conf.j2 /etc/rsyslog.d/events_info.json > /etc/rsyslog.d/dhcp_relay_events.conf
|
|
|
|
RUN rm -f /etc/rsyslog.d/rsyslog_plugin.conf.j2
|
|
|
|
RUN rm -f /etc/rsyslog.d/events_info.json
|
2017-02-06 10:40:57 -06:00
|
|
|
|
2017-10-05 01:35:43 -05:00
|
|
|
ENTRYPOINT ["/usr/bin/docker_init.sh"]
|