diff --git a/containers/cinder/bindeps.txt b/containers/cinder/bindeps.txt new file mode 100644 index 0000000..a8be40e --- /dev/null +++ b/containers/cinder/bindeps.txt @@ -0,0 +1,4 @@ +python3 +python3-pip +# cryptography from RPM for certifications and CVE handling +python3-cryptography diff --git a/containers/cinder/builddeps.txt b/containers/cinder/builddeps.txt new file mode 100644 index 0000000..26faccd --- /dev/null +++ b/containers/cinder/builddeps.txt @@ -0,0 +1,19 @@ +# Compiler toolchain and headers for building Python C extensions +git-core +gcc +gcc-c++ +python3 +python3-pip +python3-devel +python3-setuptools +python3-wheel +libffi-devel +openssl-devel +python3-cryptography +# Required to build lxml +libxml2-devel +libxslt-devel +# To build bcrypt from source +rust +# To build rpds-py from source +cargo diff --git a/containers/cinder/buildrequirements.lock b/containers/cinder/buildrequirements.lock new file mode 120000 index 0000000..823367e --- /dev/null +++ b/containers/cinder/buildrequirements.lock @@ -0,0 +1 @@ +buildrequirements.lock.master \ No newline at end of file diff --git a/containers/cinder/buildrequirements.lock.master b/containers/cinder/buildrequirements.lock.master new file mode 100644 index 0000000..c9246d9 --- /dev/null +++ b/containers/cinder/buildrequirements.lock.master @@ -0,0 +1,34 @@ +# +# +# pybuild-deps compile --no-annotate --output-file=buildrequirements.lock.master requirements.lock.master +# +build==1.5.0 +calver==2025.10.20 +cffi==2.0.0 +cython==3.2.9 +flit-core==3.12.0 +flit-core==4.0.2 +hatch-fancy-pypi-readme==25.1.0 +hatch-vcs==0.5.0 +hatchling==1.32.0 +maturin==1.14.1 +packaging==26.2 +pathspec==1.1.1 +pbr==7.0.3 +pluggy==1.6.0 +poetry-core==2.4.1 +pycparser==3.0 +pyproject-hooks==1.2.0 +semantic-version==2.10.0 +setuptools-rust==1.13.0 +setuptools-scm==10.2.1 +setuptools-scm==7.1.0 +tomlkit==0.15.1 +trove-classifiers==2026.6.1.19 +typing-extensions==4.15.0 +vcs-versioning==2.2.4 +wheel==0.47.0 + +# The following packages are considered to be unsafe in a requirements file: +setuptools==82.0.1 +setuptools==84.0.0 diff --git a/containers/cinder/cinder-api/Containerfile b/containers/cinder/cinder-api/Containerfile new file mode 100644 index 0000000..f333d54 --- /dev/null +++ b/containers/cinder/cinder-api/Containerfile @@ -0,0 +1,103 @@ +ARG BASE_IMAGE=localhost/openstack/openstack-base:latest + +# --- Build stage: compile wheels from source --- +FROM ${BASE_IMAGE} AS build + +ARG SERVICE_SRC=/src/cinder + +ARG CONSTRAINTS_FILE=requirements.lock +COPY ${CONSTRAINTS_FILE} /deps-upper-constraints.txt +COPY src/ /src/ +COPY cinder-api/src/ /src/ + +# We can force build from source of all packages optionally +ARG PIP_NO_BINARY="" +ENV PIP_NO_BINARY=${PIP_NO_BINARY} +# required to build rpds-py from source +ENV MATURIN_NO_INSTALL_RUST=true + +COPY builddeps.txt /tmp/builddeps.txt +RUN pkgs=$(cat /tmp/builddeps.txt | grep -v '^#' | grep -v '^$' | tr '\n' ' ') && \ + if [ -n "${pkgs}" ]; then microdnf -y install ${pkgs} && microdnf clean all; fi + +COPY pythonbuilddeps.txt /tmp/pythonbuilddeps.txt +RUN pkgs=$(cat /tmp/pythonbuilddeps.txt | grep -v '^#' | grep -v '^$' | tr '\n' ' ') && \ + if [ -n "${pkgs}" ]; then pip3 install --no-cache-dir -c /deps-upper-constraints.txt ${pkgs}; fi && \ + rm /tmp/pythonbuilddeps.txt + +RUN cp /deps-upper-constraints.txt /tmp/build-constraints.txt && \ + for src_dir in /src/*/ /src/overrides/*/; do \ + if [ -d "${src_dir}" ] && [ -f "${src_dir}/setup.cfg" ]; then \ + pkg_name=$(grep -m1 '^name' "${src_dir}/setup.cfg" | sed 's/.*=\s*//'); \ + sed -i "/^${pkg_name}[=!<>]/Id" /tmp/build-constraints.txt; \ + fi; \ + done + +RUN for pkg in /src/*/ /src/overrides/*/; do \ + if [ -d "${pkg}" ] && [ -f "${pkg}/setup.cfg" -o -f "${pkg}/setup.py" -o -f "${pkg}/pyproject.toml" ]; then \ + pip3 wheel --no-cache-dir --no-deps \ + --wheel-dir=/wheels/pkgs "${pkg}"; \ + fi; \ + done + +RUN pip3 wheel --no-cache-dir --no-deps \ + --find-links=/wheels/pkgs \ + --wheel-dir=/wheels/deps -r /deps-upper-constraints.txt + +RUN for src_dir in /src/*/ /src/overrides/*/; do \ + if [ -d "${src_dir}" ] && [ -f "${src_dir}/setup.cfg" ]; then \ + pkg_name=$(grep -m1 '^name' "${src_dir}/setup.cfg" | sed 's/.*=\s*//'); \ + commit=$(git -C "${src_dir}" rev-parse HEAD 2>/dev/null || echo "unknown"); \ + version=$(ls /wheels/pkgs/${pkg_name//-/_}-*.whl 2>/dev/null | head -1 | sed 's/.*-\([0-9][^-]*\)-.*/\1/' || echo "unknown"); \ + echo "${pkg_name},${commit},${version}"; \ + fi; \ + done > /source-built-packages.txt + + +RUN mkdir -p /configfiles/etc/cinder && \ + cp -a ${SERVICE_SRC}/etc/cinder/api-paste.ini /configfiles/etc/cinder/ + +# --- Runtime stage --- +FROM ${BASE_IMAGE} + +LABEL summary="OpenStack Cinder API" \ + io.k8s.description="Cinder API service (WSGI via httpd) built from source with kolla interface" + +RUN uid_gid_manage cinder + +COPY bindeps.txt /tmp/bindeps.txt +COPY cinder-api/bindeps.txt /tmp/bindeps-extra.txt +RUN pkgs=$(cat /tmp/bindeps.txt /tmp/bindeps-extra.txt | grep -v '^#' | grep -v '^$' | tr '\n' ' ') && \ + if [ -n "${pkgs}" ]; then microdnf -y install ${pkgs} && microdnf clean all; fi && \ + rm -f /tmp/bindeps.txt /tmp/bindeps-extra.txt + +COPY --from=build /wheels /wheels +COPY --from=build /tmp/build-constraints.txt /deps-upper-constraints.txt +COPY --from=build /source-built-packages.txt /source-built-packages.txt +COPY pythondeps.txt /tmp/pythondeps.txt +RUN extrapkgs=$(cat /tmp/pythondeps.txt | grep -v '^#' | grep -v '^$' | tr '\n' ' ') && \ + pip3 install --no-cache-dir --prefix=/usr \ + -c /deps-upper-constraints.txt \ + --find-links=/wheels/deps \ + --find-links=/wheels/pkgs \ + /wheels/pkgs/*.whl ${extrapkgs} && \ + rm -rf /wheels /tmp/pythondeps.txt + +RUN mkdir -p /etc/cinder /var/log/cinder /var/lib/cinder /var/cache/cinder && \ + chown -R cinder:cinder /etc/cinder /var/log/cinder /var/lib/cinder /var/cache/cinder && \ + chmod 770 /var/log/cinder /var/lib/cinder /var/cache/cinder + +COPY --from=build /configfiles/etc/cinder/api-paste.ini /etc/cinder/api-paste.ini + +RUN chmod 640 /etc/cinder/api-paste.ini && \ + chown cinder:cinder /etc/cinder/api-paste.ini + +RUN mkdir -p /var/www/cgi-bin/cinder +COPY scripts/cinder-wsgi /var/www/cgi-bin/cinder +RUN chown -R cinder /var/www/cgi-bin/cinder && chmod 755 /var/www/cgi-bin/cinder/cinder-wsgi + +RUN sed -i -r 's,^(Listen 80),#\1,' /etc/httpd/conf/httpd.conf && \ + sed -i -r 's,^(Listen 443),#\1,' /etc/httpd/conf.d/ssl.conf 2>/dev/null || true && \ + usermod --append --groups apache cinder + +USER cinder diff --git a/containers/cinder/cinder-api/bindeps.txt b/containers/cinder/cinder-api/bindeps.txt new file mode 100644 index 0000000..21735d2 --- /dev/null +++ b/containers/cinder/cinder-api/bindeps.txt @@ -0,0 +1,4 @@ +# Apache WSGI server for cinder-api +httpd +mod_ssl +python3-mod_wsgi diff --git a/containers/cinder/cinder-api/src/.gitkeep b/containers/cinder/cinder-api/src/.gitkeep new file mode 100644 index 0000000..e69de29 diff --git a/containers/cinder/cinder-backup/Containerfile b/containers/cinder/cinder-backup/Containerfile new file mode 100644 index 0000000..236cd9b --- /dev/null +++ b/containers/cinder/cinder-backup/Containerfile @@ -0,0 +1,90 @@ +ARG BASE_IMAGE=localhost/openstack/openstack-base:latest + +# --- Build stage: compile wheels from source --- +FROM ${BASE_IMAGE} AS build + +ARG SERVICE_SRC=/src/cinder + +ARG CONSTRAINTS_FILE=requirements.lock +COPY ${CONSTRAINTS_FILE} /deps-upper-constraints.txt +COPY src/ /src/ +COPY cinder-backup/src/ /src/ + +# We can force build from source of all packages optionally +ARG PIP_NO_BINARY="" +ENV PIP_NO_BINARY=${PIP_NO_BINARY} +# required to build rpds-py from source +ENV MATURIN_NO_INSTALL_RUST=true + +COPY builddeps.txt /tmp/builddeps.txt +RUN pkgs=$(cat /tmp/builddeps.txt | grep -v '^#' | grep -v '^$' | tr '\n' ' ') && \ + if [ -n "${pkgs}" ]; then microdnf -y install ${pkgs} && microdnf clean all; fi + +COPY pythonbuilddeps.txt /tmp/pythonbuilddeps.txt +RUN pkgs=$(cat /tmp/pythonbuilddeps.txt | grep -v '^#' | grep -v '^$' | tr '\n' ' ') && \ + if [ -n "${pkgs}" ]; then pip3 install --no-cache-dir -c /deps-upper-constraints.txt ${pkgs}; fi && \ + rm /tmp/pythonbuilddeps.txt + +RUN cp /deps-upper-constraints.txt /tmp/build-constraints.txt && \ + for src_dir in /src/*/ /src/overrides/*/; do \ + if [ -d "${src_dir}" ] && [ -f "${src_dir}/setup.cfg" ]; then \ + pkg_name=$(grep -m1 '^name' "${src_dir}/setup.cfg" | sed 's/.*=\s*//'); \ + sed -i "/^${pkg_name}[=!<>]/Id" /tmp/build-constraints.txt; \ + fi; \ + done + +RUN for pkg in /src/*/ /src/overrides/*/; do \ + if [ -d "${pkg}" ] && [ -f "${pkg}/setup.cfg" -o -f "${pkg}/setup.py" -o -f "${pkg}/pyproject.toml" ]; then \ + pip3 wheel --no-cache-dir --no-deps \ + --wheel-dir=/wheels/pkgs "${pkg}"; \ + fi; \ + done + +RUN pip3 wheel --no-cache-dir --no-deps \ + --find-links=/wheels/pkgs \ + --wheel-dir=/wheels/deps -r /deps-upper-constraints.txt + +RUN for src_dir in /src/*/ /src/overrides/*/; do \ + if [ -d "${src_dir}" ] && [ -f "${src_dir}/setup.cfg" ]; then \ + pkg_name=$(grep -m1 '^name' "${src_dir}/setup.cfg" | sed 's/.*=\s*//'); \ + commit=$(git -C "${src_dir}" rev-parse HEAD 2>/dev/null || echo "unknown"); \ + version=$(ls /wheels/pkgs/${pkg_name//-/_}-*.whl 2>/dev/null | head -1 | sed 's/.*-\([0-9][^-]*\)-.*/\1/' || echo "unknown"); \ + echo "${pkg_name},${commit},${version}"; \ + fi; \ + done > /source-built-packages.txt + + +# --- Runtime stage --- +FROM ${BASE_IMAGE} + +LABEL summary="OpenStack Cinder Backup" \ + io.k8s.description="Cinder backup service built from source with kolla interface" + +ENV MALLOC_ARENA_MAX=1 \ + MALLOC_MMAP_THRESHOLD_=131072 \ + MALLOC_TRIM_THRESHOLD_=262144 + +RUN uid_gid_manage cinder + +COPY bindeps.txt /tmp/bindeps.txt +RUN pkgs=$(cat /tmp/bindeps.txt | grep -v '^#' | grep -v '^$' | tr '\n' ' ') && \ + if [ -n "${pkgs}" ]; then microdnf -y install ${pkgs} && microdnf clean all; fi && \ + rm /tmp/bindeps.txt + +COPY --from=build /wheels /wheels +COPY --from=build /tmp/build-constraints.txt /deps-upper-constraints.txt +COPY --from=build /source-built-packages.txt /source-built-packages.txt +COPY pythondeps.txt /tmp/pythondeps.txt +RUN extrapkgs=$(cat /tmp/pythondeps.txt | grep -v '^#' | grep -v '^$' | tr '\n' ' ') && \ + pip3 install --no-cache-dir --prefix=/usr \ + -c /deps-upper-constraints.txt \ + --find-links=/wheels/deps \ + --find-links=/wheels/pkgs \ + /wheels/pkgs/*.whl ${extrapkgs} && \ + rm -rf /wheels /tmp/pythondeps.txt + +RUN mkdir -p /etc/cinder /var/log/cinder /var/lib/cinder /var/cache/cinder && \ + chown -R cinder:cinder /etc/cinder /var/log/cinder /var/lib/cinder /var/cache/cinder && \ + chmod 770 /var/log/cinder /var/lib/cinder /var/cache/cinder + +USER cinder diff --git a/containers/cinder/cinder-backup/src/.gitkeep b/containers/cinder/cinder-backup/src/.gitkeep new file mode 100644 index 0000000..e69de29 diff --git a/containers/cinder/cinder-scheduler/Containerfile b/containers/cinder/cinder-scheduler/Containerfile new file mode 100644 index 0000000..3bb5509 --- /dev/null +++ b/containers/cinder/cinder-scheduler/Containerfile @@ -0,0 +1,86 @@ +ARG BASE_IMAGE=localhost/openstack/openstack-base:latest + +# --- Build stage: compile wheels from source --- +FROM ${BASE_IMAGE} AS build + +ARG SERVICE_SRC=/src/cinder + +ARG CONSTRAINTS_FILE=requirements.lock +COPY ${CONSTRAINTS_FILE} /deps-upper-constraints.txt +COPY src/ /src/ +COPY cinder-scheduler/src/ /src/ + +# We can force build from source of all packages optionally +ARG PIP_NO_BINARY="" +ENV PIP_NO_BINARY=${PIP_NO_BINARY} +# required to build rpds-py from source +ENV MATURIN_NO_INSTALL_RUST=true + +COPY builddeps.txt /tmp/builddeps.txt +RUN pkgs=$(cat /tmp/builddeps.txt | grep -v '^#' | grep -v '^$' | tr '\n' ' ') && \ + if [ -n "${pkgs}" ]; then microdnf -y install ${pkgs} && microdnf clean all; fi + +COPY pythonbuilddeps.txt /tmp/pythonbuilddeps.txt +RUN pkgs=$(cat /tmp/pythonbuilddeps.txt | grep -v '^#' | grep -v '^$' | tr '\n' ' ') && \ + if [ -n "${pkgs}" ]; then pip3 install --no-cache-dir -c /deps-upper-constraints.txt ${pkgs}; fi && \ + rm /tmp/pythonbuilddeps.txt + +RUN cp /deps-upper-constraints.txt /tmp/build-constraints.txt && \ + for src_dir in /src/*/ /src/overrides/*/; do \ + if [ -d "${src_dir}" ] && [ -f "${src_dir}/setup.cfg" ]; then \ + pkg_name=$(grep -m1 '^name' "${src_dir}/setup.cfg" | sed 's/.*=\s*//'); \ + sed -i "/^${pkg_name}[=!<>]/Id" /tmp/build-constraints.txt; \ + fi; \ + done + +RUN for pkg in /src/*/ /src/overrides/*/; do \ + if [ -d "${pkg}" ] && [ -f "${pkg}/setup.cfg" -o -f "${pkg}/setup.py" -o -f "${pkg}/pyproject.toml" ]; then \ + pip3 wheel --no-cache-dir --no-deps \ + --wheel-dir=/wheels/pkgs "${pkg}"; \ + fi; \ + done + +RUN pip3 wheel --no-cache-dir --no-deps \ + --find-links=/wheels/pkgs \ + --wheel-dir=/wheels/deps -r /deps-upper-constraints.txt + +RUN for src_dir in /src/*/ /src/overrides/*/; do \ + if [ -d "${src_dir}" ] && [ -f "${src_dir}/setup.cfg" ]; then \ + pkg_name=$(grep -m1 '^name' "${src_dir}/setup.cfg" | sed 's/.*=\s*//'); \ + commit=$(git -C "${src_dir}" rev-parse HEAD 2>/dev/null || echo "unknown"); \ + version=$(ls /wheels/pkgs/${pkg_name//-/_}-*.whl 2>/dev/null | head -1 | sed 's/.*-\([0-9][^-]*\)-.*/\1/' || echo "unknown"); \ + echo "${pkg_name},${commit},${version}"; \ + fi; \ + done > /source-built-packages.txt + + +# --- Runtime stage --- +FROM ${BASE_IMAGE} + +LABEL summary="OpenStack Cinder Scheduler" \ + io.k8s.description="Cinder scheduler service built from source with kolla interface" + +RUN uid_gid_manage cinder + +COPY bindeps.txt /tmp/bindeps.txt +RUN pkgs=$(cat /tmp/bindeps.txt | grep -v '^#' | grep -v '^$' | tr '\n' ' ') && \ + if [ -n "${pkgs}" ]; then microdnf -y install ${pkgs} && microdnf clean all; fi && \ + rm /tmp/bindeps.txt + +COPY --from=build /wheels /wheels +COPY --from=build /tmp/build-constraints.txt /deps-upper-constraints.txt +COPY --from=build /source-built-packages.txt /source-built-packages.txt +COPY pythondeps.txt /tmp/pythondeps.txt +RUN extrapkgs=$(cat /tmp/pythondeps.txt | grep -v '^#' | grep -v '^$' | tr '\n' ' ') && \ + pip3 install --no-cache-dir --prefix=/usr \ + -c /deps-upper-constraints.txt \ + --find-links=/wheels/deps \ + --find-links=/wheels/pkgs \ + /wheels/pkgs/*.whl ${extrapkgs} && \ + rm -rf /wheels /tmp/pythondeps.txt + +RUN mkdir -p /etc/cinder /var/log/cinder /var/lib/cinder /var/cache/cinder && \ + chown -R cinder:cinder /etc/cinder /var/log/cinder /var/lib/cinder /var/cache/cinder && \ + chmod 770 /var/log/cinder /var/lib/cinder /var/cache/cinder + +USER cinder diff --git a/containers/cinder/cinder-scheduler/src/.gitkeep b/containers/cinder/cinder-scheduler/src/.gitkeep new file mode 100644 index 0000000..e69de29 diff --git a/containers/cinder/cinder-volume/Containerfile b/containers/cinder/cinder-volume/Containerfile new file mode 100644 index 0000000..e2378da --- /dev/null +++ b/containers/cinder/cinder-volume/Containerfile @@ -0,0 +1,104 @@ +ARG BASE_IMAGE=localhost/openstack/openstack-base:latest + +# --- Build stage: compile wheels from source --- +FROM ${BASE_IMAGE} AS build + +ARG SERVICE_SRC=/src/cinder + +ARG CONSTRAINTS_FILE=requirements.lock +COPY ${CONSTRAINTS_FILE} /deps-upper-constraints.txt +COPY src/ /src/ +COPY cinder-volume/src/ /src/ + +# We can force build from source of all packages optionally +ARG PIP_NO_BINARY="" +ENV PIP_NO_BINARY=${PIP_NO_BINARY} +# required to build rpds-py from source +ENV MATURIN_NO_INSTALL_RUST=true + +COPY builddeps.txt /tmp/builddeps.txt +RUN pkgs=$(cat /tmp/builddeps.txt | grep -v '^#' | grep -v '^$' | tr '\n' ' ') && \ + if [ -n "${pkgs}" ]; then microdnf -y install ${pkgs} && microdnf clean all; fi + +COPY pythonbuilddeps.txt /tmp/pythonbuilddeps.txt +RUN pkgs=$(cat /tmp/pythonbuilddeps.txt | grep -v '^#' | grep -v '^$' | tr '\n' ' ') && \ + if [ -n "${pkgs}" ]; then pip3 install --no-cache-dir -c /deps-upper-constraints.txt ${pkgs}; fi && \ + rm /tmp/pythonbuilddeps.txt + +RUN cp /deps-upper-constraints.txt /tmp/build-constraints.txt && \ + for src_dir in /src/*/ /src/overrides/*/; do \ + if [ -d "${src_dir}" ] && [ -f "${src_dir}/setup.cfg" ]; then \ + pkg_name=$(grep -m1 '^name' "${src_dir}/setup.cfg" | sed 's/.*=\s*//'); \ + sed -i "/^${pkg_name}[=!<>]/Id" /tmp/build-constraints.txt; \ + fi; \ + done + +RUN for pkg in /src/*/ /src/overrides/*/; do \ + if [ -d "${pkg}" ] && [ -f "${pkg}/setup.cfg" -o -f "${pkg}/setup.py" -o -f "${pkg}/pyproject.toml" ]; then \ + pip3 wheel --no-cache-dir --no-deps \ + --wheel-dir=/wheels/pkgs "${pkg}"; \ + fi; \ + done + +RUN pip3 wheel --no-cache-dir --no-deps \ + --find-links=/wheels/pkgs \ + --wheel-dir=/wheels/deps -r /deps-upper-constraints.txt + +RUN for src_dir in /src/*/ /src/overrides/*/; do \ + if [ -d "${src_dir}" ] && [ -f "${src_dir}/setup.cfg" ]; then \ + pkg_name=$(grep -m1 '^name' "${src_dir}/setup.cfg" | sed 's/.*=\s*//'); \ + commit=$(git -C "${src_dir}" rev-parse HEAD 2>/dev/null || echo "unknown"); \ + version=$(ls /wheels/pkgs/${pkg_name//-/_}-*.whl 2>/dev/null | head -1 | sed 's/.*-\([0-9][^-]*\)-.*/\1/' || echo "unknown"); \ + echo "${pkg_name},${commit},${version}"; \ + fi; \ + done > /source-built-packages.txt + + +RUN mkdir -p /configfiles/etc/cinder && \ + cp -a ${SERVICE_SRC}/etc/cinder/rootwrap.conf /configfiles/etc/cinder/ && \ + cp -a ${SERVICE_SRC}/etc/cinder/rootwrap.d /configfiles/etc/cinder/ + +# --- Runtime stage --- +FROM ${BASE_IMAGE} + +LABEL summary="OpenStack Cinder Volume" \ + io.k8s.description="Cinder volume service built from source with kolla interface" + +ENV MALLOC_ARENA_MAX=1 \ + MALLOC_MMAP_THRESHOLD_=131072 \ + MALLOC_TRIM_THRESHOLD_=262144 + +RUN uid_gid_manage cinder + +COPY bindeps.txt /tmp/bindeps.txt +COPY cinder-volume/bindeps.txt /tmp/bindeps-extra.txt +RUN pkgs=$(cat /tmp/bindeps.txt /tmp/bindeps-extra.txt | grep -v '^#' | grep -v '^$' | tr '\n' ' ') && \ + if [ -n "${pkgs}" ]; then microdnf -y install ${pkgs} && microdnf clean all; fi && \ + rm -f /tmp/bindeps.txt /tmp/bindeps-extra.txt + +COPY --from=build /wheels /wheels +COPY --from=build /tmp/build-constraints.txt /deps-upper-constraints.txt +COPY --from=build /source-built-packages.txt /source-built-packages.txt +COPY pythondeps.txt /tmp/pythondeps.txt +RUN extrapkgs=$(cat /tmp/pythondeps.txt | grep -v '^#' | grep -v '^$' | tr '\n' ' ') && \ + pip3 install --no-cache-dir --prefix=/usr \ + -c /deps-upper-constraints.txt \ + --find-links=/wheels/deps \ + --find-links=/wheels/pkgs \ + /wheels/pkgs/*.whl ${extrapkgs} && \ + rm -rf /wheels /tmp/pythondeps.txt + +RUN mkdir -p /etc/cinder /var/log/cinder /var/lib/cinder /var/cache/cinder && \ + chown -R cinder:cinder /etc/cinder /var/log/cinder /var/lib/cinder /var/cache/cinder && \ + chmod 770 /var/log/cinder /var/lib/cinder /var/cache/cinder + +COPY --from=build /configfiles/etc/cinder/rootwrap.conf /etc/cinder/rootwrap.conf +COPY --from=build /configfiles/etc/cinder/rootwrap.d /etc/cinder/rootwrap.d + +COPY common/cinder-sudoers /etc/sudoers.d/cinder-sudoers + +RUN chmod 750 /etc/sudoers.d && \ + chmod 440 /etc/sudoers.d/cinder-sudoers && \ + chown -R cinder:cinder /etc/cinder + +USER cinder diff --git a/containers/cinder/cinder-volume/bindeps.txt b/containers/cinder/cinder-volume/bindeps.txt new file mode 100644 index 0000000..252ccad --- /dev/null +++ b/containers/cinder/cinder-volume/bindeps.txt @@ -0,0 +1,4 @@ +# iSCSI target support +iscsi-initiator-utils +# Ceph RBD support (from centos10-storage repo in base image) +ceph-common diff --git a/containers/cinder/cinder-volume/src/.gitkeep b/containers/cinder/cinder-volume/src/.gitkeep new file mode 100644 index 0000000..e69de29 diff --git a/containers/cinder/common/cinder-sudoers b/containers/cinder/common/cinder-sudoers new file mode 100644 index 0000000..8000f8c --- /dev/null +++ b/containers/cinder/common/cinder-sudoers @@ -0,0 +1 @@ +cinder ALL = (root) NOPASSWD: /usr/bin/cinder-rootwrap /etc/cinder/rootwrap.conf * diff --git a/containers/cinder/pythonbuilddeps.txt b/containers/cinder/pythonbuilddeps.txt new file mode 100644 index 0000000..1d45dc6 --- /dev/null +++ b/containers/cinder/pythonbuilddeps.txt @@ -0,0 +1 @@ +pbr diff --git a/containers/cinder/pythondeps.txt b/containers/cinder/pythondeps.txt new file mode 100644 index 0000000..44f63f5 --- /dev/null +++ b/containers/cinder/pythondeps.txt @@ -0,0 +1,4 @@ +# Database driver (mysql extra for oslo.db) +oslo.db[mysql] +# Caching backend (dogpile extra for oslo.cache) +oslo.cache[dogpile] diff --git a/containers/cinder/requirements.lock b/containers/cinder/requirements.lock new file mode 120000 index 0000000..c466dc0 --- /dev/null +++ b/containers/cinder/requirements.lock @@ -0,0 +1 @@ +requirements.lock.master \ No newline at end of file diff --git a/containers/cinder/requirements.lock.master b/containers/cinder/requirements.lock.master new file mode 100644 index 0000000..5d5c0ab --- /dev/null +++ b/containers/cinder/requirements.lock.master @@ -0,0 +1,852 @@ +# +# +# pip-compile --allow-unsafe --constraint=upper-constraints.txt.master --output-file=requirements.lock.master --strip-extras pythonbuilddeps.txt pythondeps.txt src/cinder/requirements.txt +# +alembic==1.18.5 + # via + # -c upper-constraints.txt.master + # oslo-db +amqp==5.3.1 + # via + # -c upper-constraints.txt.master + # kombu + # oslo-messaging +attrs==26.1.0 + # via + # -c upper-constraints.txt.master + # jsonschema + # referencing +automaton==3.4.0 + # via + # -c upper-constraints.txt.master + # taskflow +autopage==0.6.0 + # via + # -c upper-constraints.txt.master + # cliff +bcrypt==5.0.0 + # via + # -c upper-constraints.txt.master + # oslo-middleware + # paramiko +boto3==1.35.99 + # via + # -c upper-constraints.txt.master + # -r src/cinder/requirements.txt +botocore==1.35.99 + # via + # -c upper-constraints.txt.master + # boto3 + # s3transfer +cachetools==7.1.4 + # via + # -c upper-constraints.txt.master + # -r src/cinder/requirements.txt + # oslo-messaging + # taskflow +castellan==5.8.0 + # via + # -c upper-constraints.txt.master + # -r src/cinder/requirements.txt + # cursive +certifi==2026.7.22 + # via requests +cffi==2.0.0 + # via + # -c upper-constraints.txt.master + # cryptography + # oslo-privsep + # pynacl +charset-normalizer==3.4.7 + # via + # -c upper-constraints.txt.master + # requests +cliff==4.15.0 + # via + # -c upper-constraints.txt.master + # python-barbicanclient +cmd2==4.0.0 + # via + # -c upper-constraints.txt.master + # cliff +cotyledon==2.2.0 + # via + # -c upper-constraints.txt.master + # oslo-service +cursive==0.3.0 + # via + # -c upper-constraints.txt.master + # -r src/cinder/requirements.txt +debtcollector==3.1.0 + # via + # -c upper-constraints.txt.master + # futurist + # oslo-concurrency + # oslo-db + # oslo-log + # oslo-messaging + # oslo-privsep + # oslo-rootwrap + # oslo-service + # python-keystoneclient + # taskflow +decorator==5.3.1 + # via + # -c upper-constraints.txt.master + # -r src/cinder/requirements.txt + # dogpile-cache +distro==1.9.0 + # via + # -c upper-constraints.txt.master + # -r src/cinder/requirements.txt +dnspython==2.8.0 + # via + # -c upper-constraints.txt.master + # eventlet +dogpile-cache==1.5.0 + # via + # -c upper-constraints.txt.master + # oslo-cache +eventlet==0.41.0 + # via + # -c upper-constraints.txt.master + # -r src/cinder/requirements.txt + # oslo-service +fasteners==0.20 + # via + # -c upper-constraints.txt.master + # oslo-concurrency + # taskflow + # tooz +futurist==3.4.0 + # via + # -c upper-constraints.txt.master + # -r src/cinder/requirements.txt + # oslo-messaging + # oslo-service + # taskflow + # tooz +google-api-core==2.31.0 + # via + # -c upper-constraints.txt.master + # google-api-python-client +google-api-python-client==2.198.0 + # via + # -c upper-constraints.txt.master + # -r src/cinder/requirements.txt +google-auth==2.55.1 + # via + # -c upper-constraints.txt.master + # google-api-core + # google-api-python-client + # google-auth-httplib2 +google-auth-httplib2==0.4.0 + # via + # -c upper-constraints.txt.master + # google-api-python-client +googleapis-common-protos==1.75.0 + # via + # -c upper-constraints.txt.master + # google-api-core +greenlet==3.5.3 + # via + # -c upper-constraints.txt.master + # -r src/cinder/requirements.txt + # eventlet + # oslo-service + # sqlalchemy +httplib2==0.32.0 + # via + # -c upper-constraints.txt.master + # google-api-python-client + # google-auth-httplib2 +idna==3.18 + # via + # -c upper-constraints.txt.master + # requests +invoke==3.0.3 + # via + # -c upper-constraints.txt.master + # paramiko +iso8601==2.1.0 + # via + # -c upper-constraints.txt.master + # -r src/cinder/requirements.txt + # keystoneauth1 + # oslo-utils + # python-novaclient +jinja2==3.1.6 + # via + # -c upper-constraints.txt.master + # oslo-middleware + # oslo-reports +jmespath==1.1.0 + # via + # -c upper-constraints.txt.master + # boto3 + # botocore +jsonpatch==1.33 + # via + # -c upper-constraints.txt.master + # warlock +jsonpointer==3.1.1 + # via + # -c upper-constraints.txt.master + # jsonpatch +jsonschema==4.26.0 + # via + # -c upper-constraints.txt.master + # -r src/cinder/requirements.txt + # taskflow + # warlock +jsonschema-specifications==2025.9.1 + # via + # -c upper-constraints.txt.master + # jsonschema +keystoneauth1==5.15.0 + # via + # -c upper-constraints.txt.master + # -r src/cinder/requirements.txt + # castellan + # keystonemiddleware + # python-barbicanclient + # python-glanceclient + # python-keystoneclient + # python-novaclient +keystonemiddleware==13.0.0 + # via + # -c upper-constraints.txt.master + # -r src/cinder/requirements.txt +kombu==5.6.2 + # via + # -c upper-constraints.txt.master + # oslo-messaging +lxml==6.1.1 + # via + # -c upper-constraints.txt.master + # -r src/cinder/requirements.txt + # oslo-vmware +mako==1.3.12 + # via + # -c upper-constraints.txt.master + # alembic +markdown-it-py==4.2.0 + # via + # -c upper-constraints.txt.master + # rich +markupsafe==3.0.3 + # via + # -c upper-constraints.txt.master + # jinja2 + # mako +mdurl==0.1.2 + # via + # -c upper-constraints.txt.master + # markdown-it-py +msgpack==1.2.1 + # via + # -c upper-constraints.txt.master + # oslo-privsep + # oslo-serialization + # tooz +netaddr==1.3.0 + # via + # -c upper-constraints.txt.master + # oslo-config + # oslo-utils + # oslo-versionedobjects + # osprofiler +networkx==3.6.1 + # via + # -c upper-constraints.txt.master + # taskflow +os-brick==7.1.0 + # via + # -c upper-constraints.txt.master + # -r src/cinder/requirements.txt +os-service-types==1.8.2 + # via + # -c upper-constraints.txt.master + # keystoneauth1 +oslo-cache==4.3.0 + # via + # -c upper-constraints.txt.master + # -r pythondeps.txt + # keystonemiddleware +oslo-concurrency==7.6.1 + # via + # -c upper-constraints.txt.master + # -r src/cinder/requirements.txt + # os-brick + # oslo-service + # oslo-vmware + # osprofiler +oslo-config==10.6.0 + # via + # -c upper-constraints.txt.master + # -r src/cinder/requirements.txt + # castellan + # keystonemiddleware + # os-brick + # oslo-cache + # oslo-concurrency + # oslo-db + # oslo-log + # oslo-messaging + # oslo-metrics + # oslo-middleware + # oslo-policy + # oslo-privsep + # oslo-reports + # oslo-service + # oslo-upgradecheck + # oslo-versionedobjects + # osprofiler + # pycadf + # python-keystoneclient +oslo-context==6.5.0 + # via + # -c upper-constraints.txt.master + # -r src/cinder/requirements.txt + # castellan + # keystonemiddleware + # os-brick + # oslo-log + # oslo-messaging + # oslo-middleware + # oslo-policy + # oslo-versionedobjects + # oslo-vmware +oslo-db==18.1.0 + # via + # -c upper-constraints.txt.master + # -r pythondeps.txt + # -r src/cinder/requirements.txt +oslo-i18n==6.9.0 + # via + # -c upper-constraints.txt.master + # -r src/cinder/requirements.txt + # castellan + # cursive + # keystonemiddleware + # os-brick + # oslo-cache + # oslo-concurrency + # oslo-config + # oslo-db + # oslo-log + # oslo-middleware + # oslo-policy + # oslo-privsep + # oslo-reports + # oslo-service + # oslo-upgradecheck + # oslo-utils + # oslo-versionedobjects + # oslo-vmware + # python-barbicanclient + # python-glanceclient + # python-keystoneclient + # python-novaclient +oslo-log==8.3.0 + # via + # -c upper-constraints.txt.master + # -r src/cinder/requirements.txt + # castellan + # cursive + # keystonemiddleware + # os-brick + # oslo-cache + # oslo-messaging + # oslo-metrics + # oslo-privsep + # oslo-service + # oslo-versionedobjects +oslo-messaging==18.2.0 + # via + # -c upper-constraints.txt.master + # -r src/cinder/requirements.txt + # oslo-versionedobjects +oslo-metrics==0.16.0 + # via + # -c upper-constraints.txt.master + # oslo-messaging +oslo-middleware==8.2.0 + # via + # -c upper-constraints.txt.master + # -r src/cinder/requirements.txt + # oslo-messaging +oslo-policy==6.0.0 + # via + # -c upper-constraints.txt.master + # -r src/cinder/requirements.txt + # oslo-upgradecheck +oslo-privsep==3.12.0 + # via + # -c upper-constraints.txt.master + # -r src/cinder/requirements.txt + # os-brick +oslo-reports==3.9.0 + # via + # -c upper-constraints.txt.master + # -r src/cinder/requirements.txt +oslo-rootwrap==7.10.0 + # via + # -c upper-constraints.txt.master + # -r src/cinder/requirements.txt +oslo-serialization==5.11.0 + # via + # -c upper-constraints.txt.master + # -r src/cinder/requirements.txt + # cursive + # keystonemiddleware + # os-brick + # oslo-log + # oslo-messaging + # oslo-policy + # oslo-reports + # osprofiler + # pycadf + # python-barbicanclient + # python-keystoneclient + # python-novaclient + # taskflow + # tooz +oslo-service==4.8.0 + # via + # -c upper-constraints.txt.master + # -r src/cinder/requirements.txt + # os-brick + # oslo-messaging + # oslo-vmware +oslo-upgradecheck==2.8.0 + # via + # -c upper-constraints.txt.master + # -r src/cinder/requirements.txt +oslo-utils==10.1.1 + # via + # -c upper-constraints.txt.master + # -r src/cinder/requirements.txt + # castellan + # cursive + # keystonemiddleware + # os-brick + # oslo-cache + # oslo-concurrency + # oslo-db + # oslo-log + # oslo-messaging + # oslo-metrics + # oslo-middleware + # oslo-policy + # oslo-privsep + # oslo-reports + # oslo-serialization + # oslo-service + # oslo-upgradecheck + # oslo-versionedobjects + # oslo-vmware + # osprofiler + # python-barbicanclient + # python-glanceclient + # python-keystoneclient + # python-novaclient + # taskflow + # tooz +oslo-versionedobjects==3.11.0 + # via + # -c upper-constraints.txt.master + # -r src/cinder/requirements.txt +oslo-vmware==4.10.0 + # via + # -c upper-constraints.txt.master + # -r src/cinder/requirements.txt +osprofiler==4.4.0 + # via + # -c upper-constraints.txt.master + # -r src/cinder/requirements.txt +packaging==26.2 + # via + # -c upper-constraints.txt.master + # -r src/cinder/requirements.txt + # kombu + # oslo-utils + # python-keystoneclient +paramiko==4.0.0 + # via + # -c upper-constraints.txt.master + # -r src/cinder/requirements.txt +paste==3.10.1 + # via + # -c upper-constraints.txt.master + # -r src/cinder/requirements.txt + # oslo-service +pastedeploy==3.1.0 + # via + # -c upper-constraints.txt.master + # -r src/cinder/requirements.txt + # oslo-service +pbr==7.0.3 + # via + # -c upper-constraints.txt.master + # -r pythonbuilddeps.txt + # -r src/cinder/requirements.txt + # castellan + # cursive + # keystonemiddleware + # os-brick + # os-service-types + # oslo-concurrency + # oslo-context + # oslo-i18n + # oslo-log + # oslo-messaging + # oslo-metrics + # oslo-middleware + # oslo-reports + # oslo-rootwrap + # oslo-utils + # oslo-vmware + # python-barbicanclient + # python-glanceclient + # python-keystoneclient + # python-novaclient + # taskflow +prettytable==3.18.0 + # via + # -c upper-constraints.txt.master + # automaton + # cliff + # oslo-upgradecheck + # osprofiler + # python-glanceclient + # python-novaclient +prometheus-client==0.25.0 + # via + # -c upper-constraints.txt.master + # oslo-metrics +prompt-toolkit==3.0.52 + # via + # -c upper-constraints.txt.master + # cmd2 +proto-plus==1.28.0 + # via + # -c upper-constraints.txt.master + # google-api-core +protobuf==7.35.1 + # via + # -c upper-constraints.txt.master + # google-api-core + # googleapis-common-protos + # proto-plus +psutil==7.2.2 + # via + # -c upper-constraints.txt.master + # os-brick + # oslo-reports + # oslo-utils +pyasn1==0.6.3 + # via + # -c upper-constraints.txt.master + # pyasn1-modules +pyasn1-modules==0.4.2 + # via + # -c upper-constraints.txt.master + # google-auth +pycadf==4.1.0 + # via + # -c upper-constraints.txt.master + # keystonemiddleware +pycparser==3.0 + # via + # -c upper-constraints.txt.master + # cffi +pydot==4.0.1 + # via + # -c upper-constraints.txt.master + # taskflow +pygments==2.20.0 + # via + # -c upper-constraints.txt.master + # rich +pyjwt==2.13.0 + # via + # -c upper-constraints.txt.master + # keystonemiddleware +pymemcache==4.0.0 + # via + # -c upper-constraints.txt.master + # oslo-cache +pymysql==1.2.0 + # via + # -c upper-constraints.txt.master + # oslo-db +pynacl==1.6.2 + # via + # -c upper-constraints.txt.master + # paramiko +pyopenssl==24.2.1 + # via + # -c upper-constraints.txt.master + # python-glanceclient +pyparsing==3.3.2 + # via + # -c upper-constraints.txt.master + # -r src/cinder/requirements.txt + # httplib2 + # oslo-utils + # pydot +pyperclip==1.11.0 + # via + # -c upper-constraints.txt.master + # cmd2 +python-barbicanclient==7.5.0 + # via + # -c upper-constraints.txt.master + # -r src/cinder/requirements.txt + # castellan +python-binary-memcached==0.32.0 + # via + # -c upper-constraints.txt.master + # oslo-cache +python-dateutil==2.9.0.post0 + # via + # -c upper-constraints.txt.master + # botocore + # oslo-log +python-glanceclient==4.12.0 + # via + # -c upper-constraints.txt.master + # -r src/cinder/requirements.txt +python-keystoneclient==5.8.0 + # via + # -c upper-constraints.txt.master + # -r src/cinder/requirements.txt + # keystonemiddleware +python-memcached==1.62 + # via + # -c upper-constraints.txt.master + # oslo-cache +python-novaclient==18.13.0 + # via + # -c upper-constraints.txt.master + # -r src/cinder/requirements.txt +python-swiftclient==4.10.0 + # via + # -c upper-constraints.txt.master + # -r src/cinder/requirements.txt +pyudev==0.24.4 + # via + # -c upper-constraints.txt.master + # rtslib-fb +pyyaml==6.0.3 + # via + # -c upper-constraints.txt.master + # cliff + # oslo-config + # oslo-messaging + # oslo-policy + # oslo-utils +redis==8.0.1 + # via + # -c upper-constraints.txt.master + # oslo-cache +referencing==0.37.0 + # via + # -c upper-constraints.txt.master + # jsonschema + # jsonschema-specifications +repoze-lru==0.8 + # via + # -c upper-constraints.txt.master + # routes +requests==2.34.2 + # via + # -c upper-constraints.txt.master + # -r src/cinder/requirements.txt + # castellan + # google-api-core + # keystoneauth1 + # keystonemiddleware + # os-brick + # oslo-config + # oslo-policy + # oslo-vmware + # osprofiler + # python-barbicanclient + # python-glanceclient + # python-keystoneclient + # python-swiftclient +rfc3986==2.0.0 + # via + # -c upper-constraints.txt.master + # oslo-config +rich==15.0.0 + # via + # -c upper-constraints.txt.master + # cmd2 + # rich-argparse +rich-argparse==1.8.0 + # via + # -c upper-constraints.txt.master + # cmd2 +routes==2.5.1 + # via + # -c upper-constraints.txt.master + # -r src/cinder/requirements.txt + # oslo-service +rpds-py==2026.5.1 + # via + # -c upper-constraints.txt.master + # jsonschema + # referencing +rtslib-fb==2.2.4 + # via + # -c upper-constraints.txt.master + # -r src/cinder/requirements.txt +s3transfer==0.10.4 + # via + # -c upper-constraints.txt.master + # boto3 +setproctitle==1.3.7 + # via + # -c upper-constraints.txt.master + # cotyledon +six==1.17.0 + # via + # -c upper-constraints.txt.master + # python-binary-memcached + # python-dateutil + # routes +sqlalchemy==2.0.51 + # via + # -c upper-constraints.txt.master + # -r src/cinder/requirements.txt + # alembic + # oslo-db +statsd==4.0.1 + # via + # -c upper-constraints.txt.master + # oslo-middleware +stevedore==5.9.0 + # via + # -c upper-constraints.txt.master + # -r src/cinder/requirements.txt + # castellan + # cliff + # dogpile-cache + # keystoneauth1 + # oslo-config + # oslo-db + # oslo-messaging + # oslo-middleware + # oslo-policy + # python-keystoneclient + # python-novaclient + # taskflow + # tooz +suds-community==1.2.0 + # via + # -c upper-constraints.txt.master + # oslo-vmware +tabulate==0.10.0 + # via + # -c upper-constraints.txt.master + # -r src/cinder/requirements.txt +taskflow==6.3.0 + # via + # -c upper-constraints.txt.master + # -r src/cinder/requirements.txt +tenacity==9.1.4 + # via + # -c upper-constraints.txt.master + # -r src/cinder/requirements.txt + # os-brick + # taskflow + # tooz +testresources==2.1.2 + # via + # -c upper-constraints.txt.master + # oslo-db +testscenarios==0.6.2 + # via + # -c upper-constraints.txt.master + # oslo-db +tooz==9.0.1 + # via + # -c upper-constraints.txt.master + # -r src/cinder/requirements.txt +typing-extensions==4.15.0 + # via + # -c upper-constraints.txt.master + # alembic + # automaton + # cotyledon + # keystoneauth1 + # os-service-types + # oslo-context + # oslo-middleware + # referencing + # sqlalchemy +tzdata==2026.2 + # via + # -c upper-constraints.txt.master + # -r src/cinder/requirements.txt + # kombu +uhashring==2.4 + # via + # -c upper-constraints.txt.master + # python-binary-memcached +uritemplate==4.2.0 + # via + # -c upper-constraints.txt.master + # google-api-python-client +urllib3==2.7.0 + # via + # -c upper-constraints.txt.master + # -r src/cinder/requirements.txt + # botocore + # oslo-vmware + # requests +vine==5.1.0 + # via + # -c upper-constraints.txt.master + # amqp + # kombu +voluptuous==0.16.0 + # via + # -c upper-constraints.txt.master + # tooz +warlock==2.1.0 + # via + # -c upper-constraints.txt.master + # python-glanceclient +wcwidth==0.8.1 + # via + # -c upper-constraints.txt.master + # prettytable + # prompt-toolkit +webob==1.8.10 + # via + # -c upper-constraints.txt.master + # -r src/cinder/requirements.txt + # keystonemiddleware + # oslo-messaging + # oslo-middleware + # oslo-service + # osprofiler +wrapt==2.2.2 + # via + # -c upper-constraints.txt.master + # debtcollector + # python-glanceclient +yappi==1.7.6 + # via + # -c upper-constraints.txt.master + # oslo-service +zstd==1.5.7.3 + # via + # -c upper-constraints.txt.master + # -r src/cinder/requirements.txt + +# The following packages are considered to be unsafe in a requirements file: diff --git a/containers/cinder/rpms.in.yaml b/containers/cinder/rpms.in.yaml new file mode 100644 index 0000000..845a025 --- /dev/null +++ b/containers/cinder/rpms.in.yaml @@ -0,0 +1,36 @@ +contentOrigin: + repofiles: + - ./rpms.repo +context: + bare: true + +# +# To update rpms.lock.yaml: +# rpm-lockfile-prototype rpms.in.yaml +# + +arches: + - x86_64 + - aarch64 + +packages: + - cargo + - ceph-common + - gcc + - gcc-c++ + - git-core + - httpd + - iscsi-initiator-utils + - libffi-devel + - libxml2-devel + - libxslt-devel + - mod_ssl + - openssl-devel + - python3 + - python3-cryptography + - python3-devel + - python3-mod_wsgi + - python3-pip + - python3-setuptools + - python3-wheel + - rust diff --git a/containers/cinder/scripts/cinder-wsgi b/containers/cinder/scripts/cinder-wsgi new file mode 100755 index 0000000..0ab6b7f --- /dev/null +++ b/containers/cinder/scripts/cinder-wsgi @@ -0,0 +1,3 @@ +#! /usr/bin/python3 -sP +from cinder.wsgi import wsgi +application = wsgi.initialize_application() diff --git a/containers/cinder/sources.txt b/containers/cinder/sources.txt new file mode 100644 index 0000000..96cd311 --- /dev/null +++ b/containers/cinder/sources.txt @@ -0,0 +1,2 @@ +master upper-constraints https://opendev.org/openstack/requirements.git master a56b052dc4bd64f4a1fa035a28f3358ad79caefc +master cinder https://opendev.org/openstack/cinder.git master 6fad01356c5950653b3734a762ed2386043579d2 diff --git a/containers/cinder/src/.gitkeep b/containers/cinder/src/.gitkeep new file mode 100644 index 0000000..e69de29 diff --git a/containers/cinder/upper-constraints.txt b/containers/cinder/upper-constraints.txt new file mode 120000 index 0000000..b2ebb3b --- /dev/null +++ b/containers/cinder/upper-constraints.txt @@ -0,0 +1 @@ +upper-constraints.txt.master \ No newline at end of file diff --git a/containers/cinder/upper-constraints.txt.master b/containers/cinder/upper-constraints.txt.master new file mode 100644 index 0000000..4a22daa --- /dev/null +++ b/containers/cinder/upper-constraints.txt.master @@ -0,0 +1,582 @@ +# WARNING: OpenStack makes no security guarantees about third-party +# dependencies listed here, and does not keep track of any +# vulnerabilities they contain. Versions of these dependencies are +# frozen at each coordinated release in order to stabilize upstream +# testing, and can contain known vulnerabilities. Consumers are +# *STRONGLY* encouraged to rely on curated distributions of OpenStack +# or manage security patching of dependencies themselves. +voluptuous===0.16.0 +chardet===6.0.0.post1 +enum-compat===0.0.3 +netmiko===4.7.0 +sshtunnel===0.4.0 +PasteDeploy===3.1.0 +Routes===2.5.1 +rtslib-fb===2.2.4 +oslo.limit===2.12.0 +restructuredtext_lint===2.0.2 +yarl===1.24.2 +tzdata===2026.2 +smmap===5.0.3 +confget===5.1.2 +XStatic-Angular-Bootstrap===2.5.0.1 +WebOb===1.8.10 +sphinxcontrib-actdiag===3.0.0 +pecan===1.8.0 +os-api-ref===3.2.0 +python-ldap===3.4.7 +oslo.concurrency===7.6.1 +websocket-client===1.9.0 +osprofiler===4.4.0 +os-resource-classes===1.1.0 +mypy_extensions===1.1.0 +tabulate===0.10.0 +python-ironic-inspector-client===5.4.0 +lxml===6.1.1 +vintage===0.4.1 +rst2txt===1.1.0 +setproctitle===1.3.7 +pytest===9.0.3 +python-slugify===8.0.4 +cursive===0.3.0 +oslo.service===4.8.0 +django-appconf===1.2.0 +ntc_templates===9.1.0 +sphinxcontrib-nwdiag===2.0.0 +rbd-iscsi-client===0.1.8 +alabaster===1.0.0 +multidict===6.7.1 +pbr===7.0.3 +munch===4.0.0 +waiting===1.5.0 +attrs===26.1.0 +jwcrypto===1.5.8 +Pint===0.25.3 +oslo.i18n===6.9.0 +jsonpath-rw-ext===1.2.2 +python-mistralclient===6.2.0 +oslo.context===6.5.0 +rcssmin===1.2.2 +pycadf===4.1.0 +grpcio===1.81.1 +sniffio===1.3.1 +fixtures===4.3.2 +neutron-lib===4.2.0 +XStatic-FileSaver===1.3.2.1 +jaraco.functools===4.5.0 +oslo.metrics===0.16.0 +storage-interfaces===1.0.5 +pydantic===2.13.4 +pystache===0.6.8 +XStatic-Font-Awesome===6.2.1.2 +aiohttp===3.14.1 +waitress===3.0.2 +os-refresh-config===14.0.1 +pysnmp===7.1.27 +Mako===1.3.12 +sphinxcontrib-htmlhelp===2.1.0 +XStatic-jQuery===3.7.1.1 +sphinx-copybutton===0.5.2 +beartype===0.22.9 +ddt===1.7.2 +pyserial===3.5 +moto===5.2.2 +infi.dtypes.wwn===0.1.1 +awscrt===0.35.0 +pcre2===0.7.0 +python-freezerclient===6.4.0 +python-vitrageclient===5.4.0 +py-pure-client===1.89.0 +krest===1.3.8 +psycopg2===2.9.12 +networkx===3.6.1 +cheroot===11.1.2 +XStatic-Angular===1.8.2.3 +zuul-sphinx===0.8.1 +ply===3.11 +google-api-core===2.31.0 +requests-toolbelt===1.0.0 +simplejson===4.1.1 +python-swiftclient===4.10.0 +pyOpenSSL===24.2.1 +typing-inspection===0.4.2 +monasca-common===3.8.0 +hyperframe===6.1.0 +zeroconf===0.150.0 +scipy===1.17.1 +opentelemetry-exporter-otlp===1.43.0 +rsd-lib===1.2.0 +XStatic-Jasmine===2.4.1.3 +googleapis-common-protos===1.75.0 +python-glanceclient===4.12.0 +prometheus_client===0.25.0 +jaraco.classes===3.4.0 +debtcollector===3.1.0 +responses===0.26.1 +prompt_toolkit===3.0.52 +croniter===6.2.2 +horizon===26.0.0 +octavia-lib===3.11.0 +python-watcherclient===4.10.0 +MarkupSafe===3.0.3 +doc8===2.0.0 +pymongo===4.17.0 +python-cloudkittyclient===6.1.0 +soupsieve===2.8.4 +sqlparse===0.5.5 +oslotest===6.1.1 +jsonpointer===3.1.1 +defusedxml===0.7.1 +opentelemetry-sdk===1.43.0 +netaddr===1.3.0 +pyghmi===1.6.18 +sphinxcontrib-blockdiag===3.0.0 +aiosqlite===0.22.1 +priority===2.0.0 +gnocchiclient===7.2.0 +wcwidth===0.8.1 +sphinxcontrib.datatemplates===0.11.0 +jsonpath-rw===1.4.0 +prettytable===3.18.0 +vine===5.1.0 +pathspec===1.1.1 +taskflow===6.3.0 +arrow===1.4.0 +semantic-version===2.10.0 +ConfigArgParse===1.7.5 +async-timeout===5.0.1 +virtualbmc===3.3.0 +SQLAlchemy===2.0.51 +pyroute2===0.8.1 +google-auth===2.55.1 +kazoo===2.11.0 +pyspnego===0.12.1 +trio-websocket===0.12.2 +XStatic-roboto-fontface===0.8.0.1 +pyudev===0.24.4 +eventlet===0.41.0 +openstack-doc-tools===4.0.3 +oslo.messaging===18.2.0 +jira===3.10.5 +PyJWT===2.13.0 +typing_extensions===4.15.0 +zVMCloudConnector===1.6.3 +paramiko===4.0.0 +ifaddr===0.2.0 +reno===4.1.0 +ncclient===0.7.1 +imagesize===2.0.0 +pydot===4.0.1 +urllib3===2.7.0 +graphviz===0.21 +PyKMIP===0.10.0 +python-observabilityclient===1.3.0 +whereto===0.6.0 +networking-generic-switch===10.0.0 +pywbem===1.9.0 +python-subunit===1.4.6 +pycparser===3.0 +mock===5.2.0 +PyYAML===6.0.3 +beautifulsoup4===4.15.0 +ovs===3.7.1 +cryptography===43.0.3 +httpcore===1.0.9 +URLObject===3.0.0 +psycopg2-binary===2.9.12 +glance_store===5.6.0 +openstack-release-test===8.5.0 +requests-mock===1.12.1 +os-apply-config===14.0.1 +gunicorn===26.0.0 +storpool===7.3.0 +textfsm===2.1.0 +python-3parclient===4.4 +libvirt-python===12.4.0 +python-zunclient===5.4.0 +tzlocal===5.4.3 +sysv_ipc===1.2.0 +sphinxcontrib-jsmath===1.0.1 +django_compressor===4.6.0 +awscurl===0.44 +trio===0.33.0 +python-novaclient===18.13.0 +pact===1.12.0 +bcrypt===5.0.0 +os-client-config===2.3.0 +XStatic-Angular-Gettext===2.4.1.1 +Deprecated===1.3.1 +h11===0.16.0 +Pygments===2.20.0 +XStatic-Hogan===2.0.0.5 +api_object_schema===2.0.0 +XStatic-objectpath===1.2.1.1 +python-manilaclient===6.2.0 +sphinxcontrib-serializinghtml===2.0.0 +requests===2.34.2 +snowballstemmer===3.1.1 +Jinja2===3.1.6 +XStatic-Bootstrap-SCSS===3.4.1.1 +pyzabbix===1.3.1 +ptyprocess===0.7.0 +amqp===5.3.1 +ruamel.yaml===0.19.1 +websockify===0.13.0 +gssapi===1.11.1 +XStatic-JQuery.quicksearch===2.0.3.3 +pyasn1_modules===0.4.2 +mpmath===1.3.0 +python-binary-memcached===0.32.0 +jaraco.context===6.1.2 +django-debreach===2.1.0 +sphinx-feature-classification===2.1.0 +XStatic-JQuery-Migrate===3.3.2.2 +pytest-html===4.2.0 +appdirs===1.4.4 +google-auth-httplib2===0.4.0 +daiquiri===3.4.0 +influxdb===5.3.2 +funcparserlib===2.0.0a0 +passlib===1.7.4 +cliff===4.15.0 +os-brick===7.1.0 +valkey===6.1.1 +scp===0.15.0 +lark===1.3.1 +python-zaqarclient===4.6.0 +ldappool===3.0.0 +hpack===4.2.0 +joblib===1.5.3 +roman-numerals===4.1.0 +google-api-python-client===2.198.0 +castellan===5.8.0 +oslo.versionedobjects===3.11.0 +enmerkar===0.7.1 +webcolors===25.10.0 +aodhclient===3.11.0 +autobahn===26.6.2 +SQLAlchemy-Utils===0.42.1 +retryz===0.1.9 +pluggy===1.6.0 +coverage===7.14.3 +pyee===13.0.1 +freezegun===1.5.5 +mdurl===0.1.2 +toml===0.10.2 +pycdlib===1.16.0 +pyperclip===1.11.0 +cassandra-driver===3.30.0 +XStatic-Angular-Schema-Form===0.8.13.1 +opentelemetry-exporter-otlp-proto-http===1.43.0 +gabbi===4.2.0 +nwdiag===3.0.0 +XStatic-bootswatch===3.3.7.1 +annotated-types===0.7.0 +pytest-xdist===3.8.0 +XStatic-JS-Yaml===3.13.1.2 +XStatic-term.js===0.0.7.1 +oslo.log===8.3.0 +nodeenv===1.10.0 +gossip===2.5.0 +suds-community===1.2.0 +os_vif===5.1.0 +qrcode===8.2 +oslo.middleware===8.2.0 +XStatic-mdi===1.6.50.3 +pydantic_core===2.46.4 +uritemplate===4.2.0 +docutils===0.21.2 +threadpoolctl===3.6.0 +os-ken===4.2.1 +ujson===5.13.0 +selenium===4.45.0 +pytest-subtests===0.15.0 +mistral-lib===3.5.1 +dogtag-pki===11.2.1 +XStatic-Angular-UUID===0.0.4.1 +dfs_sdk===1.2.27 +sphinxcontrib-seqdiag===3.0.0 +os-win===5.9.0 +capacity===1.3.14 +playwright===1.60.0 +markdown-it-py===4.2.0 +retrying===1.4.2 +python-discovery===1.4.2 +platformdirs===4.10.0 +pydotplus===2.0.2 +boto3===1.35.99 +jeepney===0.9.0 +stestr===4.2.1 +pillow===12.2.0 +infoblox-client===0.6.2 +oslo.serialization===5.11.0 +warlock===2.1.0 +exabgp===5.0.9 +aiomysql===0.3.2 +sphinxcontrib-httpdomain===2.0.0 +metalsmith===2.5.0 +s3transfer===0.10.4 +text-unidecode===1.3 +sphinxcontrib-svg2pdfconverter===2.1.0 +oslo.vmware===4.10.0 +autopage===0.6.0 +gitdb===4.0.12 +python-monascaclient===2.8.0 +opentelemetry-api===1.43.0 +frozenlist===1.8.0 +automaton===3.4.0 +os-service-types===1.8.2 +keyring===25.7.0 +elementpath===4.8.0 +wsgi_intercept===1.13.1 +jsonschema-specifications===2025.9.1 +testscenarios===0.6.2 +sphinxcontrib-pecanwsme===0.11.0 +sadisplay===0.4.9 +enum34===1.1.10 +infinisdk===289.1.3 +rich-argparse===1.8.0 +packaging===26.2 +opentelemetry-exporter-otlp-proto-grpc===1.43.0 +psutil===7.2.2 +txaio===26.6.1 +elasticsearch===9.4.1 +asgiref===3.11.1 +XStatic-JQuery.TableSorter===2.14.5.3 +pifpaf===3.4.0 +blockdiag===3.0.0 +testtools===2.9.1 +infi.dtypes.iqn===0.4.0 +jsonpath-ng===1.8.0 +XStatic-tv4===1.2.7.1 +XStatic-JSEncrypt===2.3.1.2 +python-cinderclient===9.9.0 +keystonemiddleware===13.0.0 +django-formtools===2.6.1 +XStatic-Spin===1.2.5.3 +rich===15.0.0 +os-traits===3.8.0 +typepy===1.3.5 +SecretStorage===3.5.0 +XStatic-Rickshaw===1.5.1.3 +iso8601===2.1.0 +tooz===9.0.1 +idna===3.18 +Hypercorn===0.18.0 +yamlloader===1.6.0 +protobuf===7.35.1 +sushy===5.12.0 +python-neutronclient===13.0.0 +pika===1.4.1 +oslo.cache===4.3.0 +WebTest===3.0.7 +os-collect-config===14.0.1 +edgegrid-python===2.0.7 +python-octaviaclient===3.14.0 +pysaml2===7.5.4 +requests-oauthlib===2.0.0 +oslo.reports===3.9.0 +bitmath===2.1.1 +ceilometermiddleware===3.12.0 +testrepository===0.0.22 +sympy===1.14.0 +Logbook===1.9.2 +PyNaCl===1.6.2 +osc-lib===4.7.0 +py-consul===1.7.1 +python-consul===1.1.0 +more-itertools===11.1.0 +seqdiag===3.0.0 +numpy===2.4.6 +msgpack===1.2.1 +Sphinx===9.0.4 +oslo.config===10.6.0 +openstackdocstheme===3.6.0 +osc-placement===4.9.0 +rpds-py===2026.5.1 +zake===0.2.2 +flux===1.4.0 +flexparser===0.4 +krb5===0.9.0 +PyMySQL===1.2.0 +uhashring===2.4 +kubernetes===36.0.2 +httplib2===0.32.0 +betamax===0.9.0 +construct===2.10.70 +pytest-metadata===3.1.1 +pyparsing===3.3.2 +geomet===1.1.0 +opentelemetry-exporter-otlp-proto-common===1.43.0 +distlib===0.4.3 +ast_serialize===0.5.0 +dogpile.cache===1.5.0 +python-barbicanclient===7.5.0 +salt===3008.0 +opentelemetry-semantic-conventions===0.64b0 +blinker===1.9.0 +WSME===0.12.1 +oslo.upgradecheck===2.8.0 +sherlock===0.4.1 +stevedore===5.9.0 +botocore===1.35.99 +xmltodict===1.0.4 +pyasn1===0.6.3 +oslo.rootwrap===7.10.0 +Django===5.2.15 +pexpect===4.9.0 +elastic-transport===9.4.2 +cmd2===4.0.0 +python-json-logger===4.1.0 +redis===8.0.1 +jmespath===1.1.0 +cbor2===6.1.2 +click===8.4.2 +XStatic-smart-table===1.4.13.3 +kuryr-lib===3.4.1 +jsonpatch===1.33 +libsass===0.23.0 +os-testr===3.0.0 +cotyledon===2.2.0 +xattr===1.3.0 +systemd-python===235 +python-memcached===1.62 +openstacksdk===4.18.0 +infi.dtypes.nqn===0.1.0 +six===1.17.0 +h2===4.3.0 +dulwich===1.2.6 +sentinels===1.1.1 +kombu===5.6.2 +distro===1.9.0 +zstd===1.5.7.3 +yaql===3.2.0 +durationpy===0.10 +requestsexceptions===1.4.0 +testresources===2.1.2 +falcon===4.3.1 +tomlkit===0.15.0 +etcd3gw===2.7.0 +Flask-RESTful===0.3.10 +GitPython===3.1.50 +python-ironicclient===6.2.0 +babel===2.18.0 +XStatic===1.0.3 +XStatic-Angular-FileUpload===12.2.13.2 +python-openstackclient===10.2.1 +pyzmq===27.1.0 +oslo.db===18.1.0 +simplegeneric===0.8.1 +yappi===1.7.6 +mbstrdecoder===1.1.5 +wsproto===1.3.2 +pymemcache===4.0.0 +wrapt===2.2.2 +PySocks===1.7.1 +oslo.privsep===3.12.0 +sphinxcontrib-apidoc===0.6.0 +oslo.policy===6.0.0 +hvac===2.4.0 +pyeclib===1.8.0 +rfc3986===2.0.0 +tenacity===9.1.4 +invoke===3.0.3 +python-designateclient===7.0.0 +pytest-cov===7.1.0 +reactivex===4.1.0 +Paste===3.10.1 +pytest-django===4.12.0 +XStatic-Json2yaml===0.1.1.1 +boto===2.49.0 +hyperlink===21.0.0 +mitba===1.1.1 +python-masakariclient===8.8.0 +Werkzeug===3.1.8 +outcome===1.3.0.post0 +APScheduler===3.11.2 +xmlschema===2.5.1 +python-troveclient===8.10.0 +cachez===0.1.2 +XStatic-Bootstrap-Datepicker===1.4.0.1 +netifaces===0.11.0 +propcache===0.5.2 +cachetools===7.1.4 +flexcache===0.3 +sphinxcontrib-qthelp===2.0.0 +keystoneauth1===5.15.0 +statsd===4.0.1 +proto-plus===1.28.0 +python-keystoneclient===5.8.0 +diskimage-builder===3.42.0 +heat-translator===3.5.0 +python-magnumclient===4.11.0 +docker===7.1.0 +repoze-lru===0.8 +storops===1.2.12 +anyio===4.14.1 +aiosignal===1.4.0 +XStatic-Angular-lrdragndrop===1.0.2.7 +ovsdbapp===2.18.0 +aniso8601===10.0.1 +rjsmin===1.2.5 +icalendar===7.2.0 +configparser===7.2.0 +decorator===5.3.1 +DateTimeRange===2.3.2 +cffi===2.0.0 +python-cyborgclient===2.8.0 +futurist===3.4.0 +jsonschema===4.26.0 +sphinxcontrib-devhelp===2.0.0 +python-blazarclient===4.5.0 +alembic===1.18.5 +execnet===2.1.2 +sphinxcontrib-programoutput===0.20 +storpool.spopenstack===3.2.0 +dnspython===2.8.0 +oauthlib===3.3.1 +zipp===4.1.0 +greenlet===3.5.3 +XStatic-Angular-Vis===4.16.0.1 +iniconfig===2.3.0 +referencing===0.37.0 +confluent-kafka===2.14.2 +backports.tarfile===1.2.0 +narwhals===2.22.1 +xvfbwrapper===0.2.23 +influxdb-client===1.50.0 +tosca-parser===2.14.0 +python-consul2===0.1.5 +charset-normalizer===3.4.7 +Flask===3.1.3 +httpx===0.28.1 +sqlalchemy-filters===0.13.0 +sphinxcontrib-runcmd===0.2.0 +confspirator===0.3.0 +fasteners===0.20 +importlib_metadata===9.0.0 +sortedcontainers===2.4.0 +microversion_parse===2.1.0 +python-linstor===1.28.2 +filelock===3.29.4 +python-tackerclient===2.5.0 +python-heatclient===5.2.0 +oslo.utils===10.1.1 +requests-kerberos===0.15.0 +itsdangerous===2.2.0 +XStatic-jquery-ui===1.13.0.2 +monasca-statsd===2.7.0 +python-dateutil===2.9.0.post0 +virtualenv===21.5.1 +colorama===0.4.6 +confetti===2.5.3 +ironic-lib===7.0.0 +aiohappyeyeballs===2.6.2 +pytz===2026.2 +opentelemetry-proto===1.43.0 +XStatic-D3===3.5.17.1 +actdiag===3.0.0 +sphinxcontrib-applehelp===2.0.0 +scikit-learn===1.9.0 +a2wsgi===1.10.10 +respx===0.23.1