sonic-buildimage/dockers/docker-sonic-mgmt/Dockerfile.j2
slutati1536 de43c6a163
Added retry to sonic-mgmt docker container (#7997)
Why I did it
the motivation for this PR is to add retry_call to several test cases in the community, for example, the following cases:

test_show_platform_fanstatus_mocked
test_show_platform_temperature_mocked
are executing a command once and comparing the output to the expected mock data,
sometimes differences between the mock and the actual are causing the tests to fail.

retry will make these tests more stable.
retry will also be more efficient than sleep which will cause the tests to run longer because sometimes it is not necessary to sleep all that time, retry will only run a function only until it passed.

How I did it
added retry to the docker file

How to verify it
I run the tests with retry on the docker after installing the retry package

Signed-off-by: Sharon Lutati <slutati@nvidia.com>
2021-07-20 09:28:10 -07:00

185 lines
6.2 KiB
Django/Jinja

FROM ubuntu:18.04
ENV DEBIAN_FRONTEND=noninteractive
RUN apt-get update && apt-get install -y build-essential \
cmake \
curl \
default-jre \
gcc \
git \
inetutils-ping \
iproute2 \
isc-dhcp-client \
libffi-dev \
libssl-dev \
libxml2 \
libxslt1-dev \
make \
openssh-server \
psmisc \
python \
python-dev \
python-scapy \
python-setuptools \
python-pip \
python3-pip \
python3-venv \
rsyslog \
snmp \
sshpass \
sudo \
tcpdump \
telnet \
vim
RUN pip install cffi==1.10.0 \
contextlib2==0.6.0.post1 \
cryptography==3.3.2 \
"future>=0.16.0" \
gitpython \
ipaddr \
ipython==5.4.1 \
ixnetwork-restpy==1.0.64 \
ixnetwork-open-traffic-generator==0.0.79 \
snappi[ixnetwork]==0.3.13 \
jinja2==2.7.2 \
jsonpatch \
lxml \
natsort \
netaddr \
netmiko==2.4.2 \
paramiko==2.7.1 \
passlib \
pexpect \
prettytable \
psutil \
pyasn1==0.1.9 \
pyfiglet \
pylint==1.8.1 \
pyro4 \
pysnmp==4.2.5 \
pytest-repeat \
pytest-html \
pytest-xdist==1.28.0 \
pytest==4.6.5 \
redis \
requests \
rpyc \
six \
tabulate \
textfsm \
virtualenv \
retry \
&& git clone https://github.com/p4lang/scapy-vxlan.git \
&& cd scapy-vxlan \
&& python setup.py install \
&& cd .. \
&& rm -fr scapy-vxlan \
&& wget https://github.com/nanomsg/nanomsg/archive/1.0.0.tar.gz \
&& tar xvfz 1.0.0.tar.gz \
&& cd nanomsg-1.0.0 \
&& mkdir -p build \
&& cd build \
&& cmake .. \
&& make install \
&& ldconfig \
&& cd ../.. \
&& rm -fr nanomsg-1.0.0 \
&& rm -f 1.0.0.tar.gz \
&& pip install nnpy \
&& pip install dpkt
# Install docker-ce-cli
RUN apt-get update \
&& apt-get install -y \
apt-transport-https \
ca-certificates \
curl \
gnupg-agent \
software-properties-common \
&& curl -fsSL https://download.docker.com/linux/ubuntu/gpg | apt-key add - \
&& add-apt-repository "deb [arch=amd64] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable" \
&& apt-get update \
&& apt-get install -y docker-ce-cli
# Install Azure CLI
RUN curl -sL https://aka.ms/InstallAzureCLIDeb | bash
# Install Microsoft Azure Kusto Library for Python
RUN pip install azure-kusto-data==0.0.13 \
azure-kusto-ingest==0.0.13
RUN pip install wheel==0.33.6
## Copy and install sonic-mgmt docker dependencies
COPY \
{% for deb in docker_sonic_mgmt_debs.split(' ') -%}
debs/{{ deb }}{{' '}}
{%- endfor -%}
debs/
RUN dpkg -i \
{% for deb in docker_sonic_mgmt_debs.split(' ') -%}
debs/{{ deb }}{{' '}}
{%- endfor %}
RUN pip install ansible==2.8.12
RUN pip install pysubnettree
# Install pytest-ansible module with 'become', 'become_user' parameters support
RUN git clone https://github.com/ansible/pytest-ansible.git \
&& cd pytest-ansible \
&& git checkout d33c025f070a9c870220a157cc5a999fda68de44 \
&& python setup.py install \
&& cd .. \
&& rm -fr pytest-ansible
RUN mkdir /var/run/sshd
EXPOSE 22
# Add user
ARG user
ARG uid
ARG guid
ARG hostname
ENV BUILD_HOSTNAME $hostname
ENV USER $user
ENV CC=gcc CPP=cpp CXX=c++ LDSHARED="gcc -pthread -shared" PYMSSQL_BUILD_WITH_BUNDLED_FREETDS=1
RUN groupadd -f -r -g $guid g$user
RUN useradd $user -l -u $uid -g $guid -d /var/$user -m -s /bin/bash
COPY sonic-jenkins.pub /var/$user/.ssh/authorized_keys2
RUN echo "Host *\n\tStrictHostKeyChecking no\n" > /var/$user/.ssh/config
RUN chown $user /var/$user/.ssh -R
RUN chmod go= /var/$user/.ssh -R
# Add user to sudoers
RUN echo "$user ALL=(ALL) NOPASSWD:ALL" >>/etc/sudoers
USER $user
WORKDIR /var/$user
# Add az symlink for backwards compatibility
RUN mkdir bin && ln -s /usr/bin/az bin/az
# Install Virtual Environments
RUN python -m virtualenv --system-site-packages env-201811
RUN env-201811/bin/pip install cryptography==3.3.2 ansible==2.0.0.2
RUN python3 -m venv env-python3
RUN env-python3/bin/pip3 install cryptography==3.3.2 azure-kusto-data azure-kusto-ingest defusedxml pytest aiohttp
# NOTE: There is an ordering dependency for pycryptodome. Leaving this at
# the end until we figure that out.
RUN pip install pycryptodome==3.9.8
# Install allure-pytest library
RUN pip install --upgrade setuptools \
&& pip install allure-pytest==2.8.22