@@ -15,6 +15,7 @@ ARG NEO4J_PASS=""
1515ARG NEO4J_ENDPOINT=""
1616ARG AWS_API_PORT=9000
1717ARG AWS_CONSOLE_PORT=9001
18+ ARG USE_K8S="OFF"
1819
1920ENV DEBIAN_FRONTEND=noninteractive
2021ENV DEBCONF_NOWARNINGS="yes"
@@ -32,6 +33,12 @@ ENV NEO4J_ENDPOINT="${NEO4J_ENDPOINT}"
3233ENV AWS_API_PORT="${AWS_API_PORT}"
3334ENV AWS_CONSOLE_PORT="${AWS_CONSOLE_PORT}"
3435
36+ # Convert ARG value to uppercase and set ENV
37+ # hadolint ignore=SC3059
38+ RUN export USE_K8S=$(echo "${USE_K8S^^}") && \
39+ echo "export USE_K8S=${USE_K8S}" >> /etc/profile.d/envvars.sh
40+ ENV USE_K8S="${USE_K8S}"
41+
3542############################################################
3643# BUILD DEPENDENCIES
3744FROM base AS build
@@ -41,15 +48,15 @@ FROM base AS build
4148RUN apt-get update -y && apt-get upgrade -y && \
4249 apt-get install -o 'Acquire::Retries=3' -y --no-install-suggests \
4350 --no-install-recommends --fix-broken --fix-missing \
44- apt-transport-https automake bison build-essential bzip2 ca-certificates \
51+ apt-transport-https automake bazel-bootstrap bison build-essential bzip2 ca-certificates \
4552 cppzmq-dev curl ed flex g++ gcc git gnupg-agent javacc libarchive-tools libatlas-base-dev \
46- libavcodec-dev libavformat-dev libavutil-dev libboost-all-dev libbz2-dev libc-ares-dev \
53+ libavcodec-dev libavformat-dev libavutil-dev libbison-dev libboost-all-dev libbz2-dev libc-ares-dev \
4754 libcurl4-openssl-dev libdc1394-dev libgflags-dev libgoogle-glog-dev \
4855 libgtk-3-dev libgtk2.0-dev libhdf5-dev libjpeg-dev libjpeg62-turbo-dev libjsoncpp-dev \
4956 libleveldb-dev liblmdb-dev liblz4-dev libncurses5-dev libopenblas-dev libopenmpi-dev \
5057 libpng-dev librdkafka-dev libsnappy-dev libssl-dev libswscale-dev libtbb-dev libtbbmalloc2 \
51- libtiff-dev libtiff5-dev libtool linux-libc-dev mpich openjdk-17-jdk-headless \
52- pkg-config procps software-properties-common swig unzip uuid-dev && \
58+ libtiff-dev libtiff5-dev libtool libwebsockets-dev linux-libc-dev mpich openjdk-17-jdk-headless \
59+ pkg-config procps software-properties-common swig uncrustify unzip uuid-dev && \
5360 apt-get --purge remove -y python3.11 && apt-get autoremove -y && \
5461 apt-get clean && rm -rf /var/lib/apt/lists/*
5562
@@ -69,7 +76,7 @@ WORKDIR /dependencies
6976ENV AUTOCONF_VERSION="2.71" \
7077 AWS_SDK_VERSION="1.11.336" \
7178 CMAKE_VERSION="v3.28.5" \
72- FAISS_VERSION="v1.7.4 " \
79+ FAISS_VERSION="v1.9.0 " \
7380 LIBEDIT_VERSION="20230828-3.1" \
7481 OPENCV_VERSION="4.9.0" \
7582 PEG_VERSION="0.1.19" \
@@ -163,6 +170,31 @@ RUN curl -L -O https://github.com/gpakosz/peg/releases/download/${PEG_VERSION}/p
163170 ./configure --disable-werror --prefix=/opt/dist/usr && \
164171 make clean check && make install -w --debug
165172
173+ # FOR KUBERNETES ORCHESTRATION
174+ # hadolint ignore=DL3003,SC2086
175+ RUN if [ "${USE_K8S}" = "ON" ]; then \
176+ git clone --depth 1 https://github.com/yaml/libyaml.git /dependencies/libyaml && \
177+ cd /dependencies/libyaml && \
178+ mkdir build && \
179+ cd build && \
180+ cmake -DCMAKE_INSTALL_PREFIX=/usr/local -DBUILD_TESTING=OFF -DBUILD_SHARED_LIBS=ON .. && \
181+ make ${BUILD_THREADS} && \
182+ make install; \
183+ fi
184+
185+ # hadolint ignore=DL3003,SC2086
186+ RUN if [ "${USE_K8S}" = "ON" ]; then \
187+ git clone https://github.com/kubernetes-client/c.git /dependencies/k8s && \
188+ ls /dependencies/k8s && \
189+ CLIENT_REPO_ROOT=/dependencies/k8s && \
190+ cd ${CLIENT_REPO_ROOT}/kubernetes && \
191+ mkdir build && \
192+ cd build && \
193+ cmake -DCMAKE_PREFIX_PATH=/usr/local -DCMAKE_INSTALL_PREFIX=/usr/local .. && \
194+ make ${BUILD_THREADS} && \
195+ make install; \
196+ fi
197+
166198# CLEANUP
167199RUN rm -rf /dependencies /usr/local/share/doc /usr/local/share/man && \
168200 mkdir -p /opt/dist/usr/include/x86_64-linux-gnu && \
@@ -172,7 +204,12 @@ RUN rm -rf /dependencies /usr/local/share/doc /usr/local/share/man && \
172204############################################################
173205# FINAL IMAGE
174206FROM base
175- ARG BUILD_COVERAGE="on"
207+ ARG BUILD_COVERAGE="ON"
208+
209+ # Convert ARG value to uppercase and set ENV
210+ # hadolint ignore=SC3059
211+ RUN export BUILD_COVERAGE=$(echo "${BUILD_COVERAGE^^}") && \
212+ echo "export BUILD_COVERAGE=${BUILD_COVERAGE}" >> /etc/profile.d/envvars.sh
176213ENV BUILD_COVERAGE="${BUILD_COVERAGE}"
177214
178215# COPY FILES
@@ -183,38 +220,46 @@ COPY client /vdms/client
183220COPY distributed /vdms/distributed
184221COPY include /vdms/include
185222COPY remote_function /vdms/remote_function
223+ COPY resources /vdms/resources
186224COPY src /vdms/src
187225COPY tests /vdms/tests
188226COPY user_defined_operations /vdms/user_defined_operations
189227COPY utils /vdms/utils
190228COPY CMakeLists.txt /vdms/CMakeLists.txt
191229COPY config-vdms.json /vdms/config-vdms.json
230+ COPY kubernetes/global_vdms_setup_script.sh /vdms/kubernetes/global_vdms_setup_script.sh
231+ COPY kubernetes/kubeConfig.json /vdms/kubernetes/kubeConfig.json
192232COPY docker/override_default_config.py /vdms/override_default_config.py
193233COPY --from=build /opt/dist /
194234COPY --from=build /usr/local/bin/python${PYTHON_BASE} /usr/local/bin/python${PYTHON_BASE}
195235COPY --from=build /usr/local/lib/python${PYTHON_BASE} /usr/local/lib/python${PYTHON_BASE}
196236COPY --from=build ${VIRTUAL_ENV} ${VIRTUAL_ENV}
237+ COPY --from=build /usr/local/include/kubernete[s] /usr/local/include/kubernetes
238+ COPY --from=build /usr/include/libwebsocket[s] /usr/include/libwebsockets
239+ COPY --from=build /usr/local/lib/libkubernetes.s[o] /usr/local/lib/libkubernetes.so
240+ COPY --from=build /usr/local/lib/libyaml.s[o] /usr/local/lib/libyaml.so
241+ COPY --from=build /usr/lib/x86_64-linux-gnu/libwebsockets.s[o] /usr/lib/x86_64-linux-gnu/libwebsockets.so
197242ENV PATH="$VIRTUAL_ENV/bin:$PATH"
198243
199244# hadolint ignore=DL3008,SC2086
200245RUN apt-get update -y && apt-get upgrade -y && \
201246 apt-get install -o 'Acquire::Retries=3' -y --no-install-suggests \
202247 --no-install-recommends --fix-broken --fix-missing \
203- build-essential bzip2 cppzmq-dev curl g++ gcc git javacc libarchive-tools libavcodec-dev \
248+ build-essential bzip2 cppzmq-dev curl g++ gcc git javacc libarchive-tools libavcodec-dev bazel-bootstrap \
204249 libavformat-dev libcurl4-openssl-dev libdc1394-dev libgoogle-glog-dev libgtk-3-dev \
205250 libhdf5-dev libjpeg62-turbo-dev libjsoncpp-dev libopenblas-dev libpng-dev librdkafka-dev \
206- libssl-dev libswscale-dev libtbb-dev libtbbmalloc2 libtiff5-dev libzip -dev openjdk-17-jdk-headless \
207- procps && \
251+ libssl-dev libswscale-dev libtbb-dev libtbbmalloc2 libtiff5-dev libwebsockets -dev libzip-dev \
252+ openjdk-17-jdk-headless procps uncrustify && \
208253 apt-get --purge remove -y python3.11 && apt-get autoremove -y && \
209254 apt-get clean && rm -rf /var/lib/apt/lists/* && \
210255 echo "/usr/local/lib" >> /etc/ld.so.conf.d/all-libs.conf && ldconfig && \
211256 python3 -m pip install --no-cache-dir "numpy>=${NUMPY_MIN_VERSION},<2.0.0" "protobuf==4.${PROTOBUF_VERSION}" \
212- "coverage>=7.3.1" "cryptography>=42 .0.7 "
257+ "coverage>=7.3.1" "cryptography>=44 .0.1 "
213258
214259# COVERAGE TESTING
215260WORKDIR /vdms
216261# hadolint ignore=DL3008,SC2086
217- RUN if [ "${BUILD_COVERAGE}" = "on " ]; then \
262+ RUN if [ "${BUILD_COVERAGE}" = "ON " ]; then \
218263 apt-get update -y ; \
219264 apt-get install -y --no-install-suggests --no-install-recommends gdb ; \
220265 apt-get clean ; \
@@ -239,11 +284,12 @@ RUN git submodule update --init --recursive && \
239284 sed -i "s|#include <stdio.h>|#include <stdio.h>\n#include <stdexcept>|" /vdms/src/pmgd/test/neighbortest.cc && \
240285 sed -i "s|#include <stdio.h>|#include <stdio.h>\n#include <stdexcept>|" /vdms/src/pmgd/tools/mkgraph.cc && \
241286 mkdir -p /vdms/build && cd /vdms/build && \
242- cmake -DCODE_COVERAGE="${BUILD_COVERAGE}" .. && make ${BUILD_THREADS} && \
287+ cmake -DUSE_K8S="${USE_K8S}" - DCODE_COVERAGE="${BUILD_COVERAGE}" .. && make ${BUILD_THREADS} VERBOSE=1 && \
243288 echo '#!/bin/bash' > /start.sh && echo 'cd /vdms/build' >> /start.sh && \
244- echo 'python /vdms/override_default_config.py -i /vdms/config-vdms.json -o /vdms/build/config-vdms.json' >> /start.sh && \
289+ echo 'python3 /vdms/override_default_config.py -i /vdms/config-vdms.json -o /vdms/build/config-vdms.json' >> /start.sh && \
245290 echo './vdms' >> /start.sh && chmod 755 /start.sh
246291
247- ENV PYTHONPATH=/vdms/client/python:${PYTHONPATH}
292+ ENV PYTHONPATH=/vdms/client/python
293+
248294HEALTHCHECK CMD echo "This is a healthcheck test." || exit 1
249295CMD ["/start.sh"]
0 commit comments