Skip to content

Commit

Permalink
Initial commit for introducing the SONiC Platform Development Env (Re…
Browse files Browse the repository at this point in the history
…submit PR#3778)
  • Loading branch information
geans-pin committed May 5, 2021
1 parent 3967c28 commit c152419
Show file tree
Hide file tree
Showing 20 changed files with 1,184 additions and 1 deletion.
19 changes: 18 additions & 1 deletion Makefile.work
Original file line number Diff line number Diff line change
Expand Up @@ -241,6 +241,7 @@ SONIC_BUILD_INSTRUCTION := make \
SONIC_IMAGE_VERSION=$(SONIC_IMAGE_VERSION) \
ENABLE_DHCP_GRAPH_SERVICE=$(ENABLE_DHCP_GRAPH_SERVICE) \
ENABLE_ZTP=$(ENABLE_ZTP) \
ENABLE_PDE=$(ENABLE_PDE) \
SHUTDOWN_BGP_ON_START=$(SHUTDOWN_BGP_ON_START) \
INCLUDE_KUBERNETES=$(INCLUDE_KUBERNETES) \
KUBERNETES_VERSION=$(KUBERNETES_VERSION) \
Expand Down Expand Up @@ -271,7 +272,18 @@ SONIC_BUILD_INSTRUCTION := make \
SLAVE_DIR=$(SLAVE_DIR) \
$(SONIC_OVERRIDE_BUILD_VARS)

.PHONY: sonic-slave-build sonic-slave-bash init reset
PDESUBMODULES = src/sonic-linux-kernel \
src/sonic-utilities \
src/sonic-platform-common \
src/sonic-swss-common \
src/sonic-swss \
src/sonic-py-swsssdk \
src/redis-dump-load \
src/sonic-sairedis \
src/sonic-ztp \
src/sonic-platform-daemons \
src/sonic-platform-pde
.PHONY: sonic-slave-build sonic-slave-bash init initpde reset

.DEFAULT_GOAL := all

Expand Down Expand Up @@ -340,6 +352,11 @@ showtag:
@echo $(SLAVE_IMAGE):$(SLAVE_TAG)
@echo $(SLAVE_BASE_IMAGE):$(SLAVE_BASE_TAG)

initpde:
$(QUIET)for submodule in $(PDESUBMODULES) ; do \
git submodule update --init --recursive $$submodule ; \
done
$(QUIET)git submodule foreach --recursive '[ -f .git ] && echo "gitdir: $$(realpath --relative-to=. $$(cut -d" " -f2 .git))" > .git'
init :
@git submodule update --init --recursive
@git submodule foreach --recursive '[ -f .git ] && echo "gitdir: $$(realpath --relative-to=. $$(cut -d" " -f2 .git))" > .git'
Expand Down
91 changes: 91 additions & 0 deletions dockers/docker-pde/Dockerfile.j2
Original file line number Diff line number Diff line change
@@ -0,0 +1,91 @@
FROM {{ docker_pde_load_image }}

ARG docker_container_name
ENV PYTHONPATH=/usr/share/sonic/platform

RUN [ -f /etc/rsyslog.conf ] && sed -ri "s/%syslogtag%/$docker_container_name#%syslogtag%/;" /etc/rsyslog.conf

# Make apt-get non-interactive
ENV DEBIAN_FRONTEND=noninteractive

{% if ARTIFACTORY_URL is defined and ARTIFACTORY_URL|length -%}
# Insert Artifactory URL references
COPY ["files/03_stretch_af.list", "/etc/apt/sources.list.d/"]
{%- endif %}

# Update apt's cache of available packages
RUN apt-get update && apt-get install -y ipmitool telnet busybox kmod libpcap-dev

# Packages for benchmark tool - nench.sh
RUN apt-get install -y bzip2 curl ioping openssl bc sysstat

# Packages for PDDF
RUN apt-get install -y python-jsonschema i2c-tools

RUN pip install pytest pexpect

{% if docker_pde_debs.strip() -%}
# Copy locally-built Debian package dependencies
COPY \
{% for deb in docker_pde_debs.split(' ') -%}
debs/{{ deb }}{{' '}}
{%- endfor -%}
/debs/

# Install locally-built Debian packages and implicitly install their dependencies
RUN dpkg_apt() { [ -f $1 ] && { dpkg -i $1 || apt-get -y install -f; } || return 1; }{%- for deb in docker_pde_debs.split(' ') %}; \
dpkg_apt /debs/{{ deb }}
{%- endfor %}
{%- endif %}

{% if docker_pde_pydebs.strip() -%}
# Copy locally-built Debian package dependencies
COPY \
{% for deb in docker_pde_pydebs.split(' ') -%}
python-debs/{{ deb }}{{' '}}
{%- endfor -%}
/debs/

# Install locally-built Debian packages and implicitly install their dependencies
{%- for deb in docker_pde_pydebs.split(' ') %}
RUN dpkg_apt() { [ -f $1 ] && { dpkg -i $1 || apt-get -y install -f; } || return 1; }; dpkg_apt /debs/{{ deb }}
{%- endfor %}
{%- endif %}

{% if docker_pde_whls.strip() -%}
# Copy locally-built Python wheel dependencies
COPY \
{% for whl in docker_pde_whls.split(' ') -%}
python-wheels/{{ whl }}{{' '}}
{%- endfor -%}
/python-wheels/

# Install locally-built Python wheel dependencies
RUN pip install \
{% for whl in docker_pde_whls.split(' ') -%}
/python-wheels/{{ whl }}{{' '}}
{%- endfor %}
{% endif %}

{% if ARTIFACTORY_URL is defined and ARTIFACTORY_URL|length -%}
# Remove Artifactory URL references
RUN rm -f /etc/apt/sources.list.d/03_stretch_af.list && apt-get update
{%- endif %}

# Clean up
RUN apt-get clean -y; \
apt-get autoclean -y; \
apt-get autoremove -y
RUN rm -rf /debs ~/.cache

RUN mkdir -p /home/pde

COPY ["bench.sh", "/usr/bin/"]
COPY ["stress-sfp-i2c.py", "/home/pde"]
COPY ["supervisord.conf", "/etc/supervisor/conf.d/"]
COPY ["syseeprom.py", "/usr/bin/"]
COPY ["docker_init.sh", "/usr/bin/"]
COPY ["cancun_files/cancun_4.5.0/*", "cancun_files/cancun_6.6.1/*", "cancun_files/cancun_4.3.0/*", "/usr/lib/cancun/"]
COPY ["syncd_init_common.sh", "/usr/bin/"]

ENTRYPOINT ["/usr/bin/docker_init.sh"]
38 changes: 38 additions & 0 deletions dockers/docker-pde/base_image_files/pde-bench
Original file line number Diff line number Diff line change
@@ -0,0 +1,38 @@
#!/bin/bash

CSV=/tmp/bench.csv

# Make sure only root can run our script
if [ "$(id -u)" != "0" ]; then
echo "This script must be run as root" 1>&2
exit 1
fi

# Start PDE if it's deactivated
if [ $(docker ps | grep -c pde) -eq 0 ]; then
pde.sh start
fi

# Allow 5 seconds for PDE to be coming up
for t in $(seq 1 5)
do
if [ $(docker ps | grep -c pde) -gt 0 ]; then
break
fi
sleep 1
done
if [ $(docker ps | grep -c pde) -eq 0 ]; then
echo "docker-pde is not alive, existing ..."
exit 1
fi

# Launch the benchmark test suite
docker exec -it pde /usr/bin/bench.sh
echo "$(docker exec -it pde cat ${CSV})" > ${CSV}

echo ""
echo "CSV Report: ${CSV}"
echo "-----------------------------------------------------------------------"
echo "$(cat ${CSV})"
echo "-----------------------------------------------------------------------"

Loading

0 comments on commit c152419

Please sign in to comment.