diff --git a/containers/manila/buildrequirements.lock b/containers/manila/buildrequirements.lock new file mode 120000 index 0000000..823367e --- /dev/null +++ b/containers/manila/buildrequirements.lock @@ -0,0 +1 @@ +buildrequirements.lock.master \ No newline at end of file diff --git a/containers/manila/buildrequirements.lock.master b/containers/manila/buildrequirements.lock.master new file mode 100644 index 0000000..3f7e9dc --- /dev/null +++ b/containers/manila/buildrequirements.lock.master @@ -0,0 +1,220 @@ +# +# This file is autogenerated by pip-compile with Python 3.14 +# by the following command: +# +# pybuild-deps compile --output-file=buildrequirements.lock.master requirements.lock.master +# +build==1.5.0 + # via cmd2 +calver==2025.10.20 + # via trove-classifiers +cffi==2.0.0 + # via pynacl +cython==3.2.9 + # via + # lxml + # pyyaml + # sqlalchemy +flit-core==3.12.0 + # via + # jinja2 + # markdown-it-py + # mdurl + # pyparsing + # pyproject-hooks + # typing-extensions + # wheel +flit-core==4.0.2 + # via + # build + # idna + # packaging + # pathspec +hatch-fancy-pypi-readme==25.1.0 + # via + # attrs + # jsonschema +hatch-vcs==0.5.0 + # via + # attrs + # eventlet + # jsonschema + # jsonschema-specifications + # platformdirs + # prettytable + # referencing + # testresources + # testscenarios + # urllib3 +hatchling==1.31.0 + # via + # attrs + # dnspython + # eventlet + # hatch-fancy-pypi-readme + # hatch-vcs + # jsonschema + # jsonschema-specifications + # legacy-cgi + # platformdirs + # prettytable + # pygments + # redis + # referencing + # rich-argparse + # testresources + # testscenarios + # uhashring + # urllib3 + # wcwidth +maturin==1.14.1 + # via rpds-py +packaging==26.2 + # via + # build + # hatchling + # setuptools-scm + # vcs-versioning + # wheel +pathspec==1.1.1 + # via hatchling +pbr==7.0.3 + # via + # castellan + # cliff + # debtcollector + # futurist + # keystoneauth1 + # keystonemiddleware + # openstacksdk + # os-service-types + # osc-lib + # oslo-cache + # oslo-concurrency + # oslo-config + # oslo-context + # oslo-db + # oslo-i18n + # oslo-log + # oslo-messaging + # oslo-metrics + # oslo-middleware + # oslo-policy + # oslo-privsep + # oslo-reports + # oslo-rootwrap + # oslo-serialization + # oslo-service + # oslo-upgradecheck + # oslo-utils + # osprofiler + # pycadf + # python-barbicanclient + # python-cinderclient + # python-keystoneclient + # python-neutronclient + # python-novaclient + # stevedore + # tooz +pluggy==1.6.0 + # via hatchling +poetry-core==2.4.1 + # via + # iso8601 + # rich +pycparser==3.0 + # via cffi +pyproject-hooks==1.2.0 + # via build +semantic-version==2.10.0 + # via setuptools-rust +setuptools-rust==1.13.0 + # via + # bcrypt + # maturin +setuptools-scm==10.2.1 + # via + # cachetools + # cmd2 + # cotyledon + # hatch-vcs + # pluggy + # setuptools-rust + # tenacity + # urllib3 +setuptools-scm==7.1.0 + # via python-dateutil +trove-classifiers==2026.6.1.19 + # via hatchling +typing-extensions==4.15.0 + # via setuptools-scm +vcs-versioning==2.2.3 + # via setuptools-scm +wheel==0.47.0 + # via + # autopage + # bcrypt + # fasteners + # mako + # pycparser + # pynacl + # python-dateutil + # python-novaclient + # tzdata + # voluptuous + # wrapt + +# The following packages are considered to be unsafe in a requirements file: +setuptools==82.0.1 + # via charset-normalizer +setuptools==83.0.0 + # via + # alembic + # autopage + # bcrypt + # cachetools + # calver + # certifi + # cffi + # cmd2 + # cotyledon + # decorator + # dogpile-cache + # fasteners + # greenlet + # invoke + # lxml + # mako + # markupsafe + # maturin + # msgpack + # netaddr + # paramiko + # pastedeploy + # pathspec + # pbr + # pluggy + # prometheus-client + # prompt-toolkit + # psutil + # pycparser + # pyjwt + # pymysql + # pynacl + # pyperclip + # python-dateutil + # python-novaclient + # pyyaml + # repoze-lru + # requests + # setuptools-rust + # setuptools-scm + # sqlalchemy + # sqlalchemy-utils + # statsd + # tenacity + # trove-classifiers + # tzdata + # vcs-versioning + # wrapt + # yappi diff --git a/containers/manila/common/manila-sudoers b/containers/manila/common/manila-sudoers new file mode 100644 index 0000000..5d83061 --- /dev/null +++ b/containers/manila/common/manila-sudoers @@ -0,0 +1 @@ +manila ALL = (root) NOPASSWD: /usr/bin/manila-rootwrap /etc/manila/rootwrap.conf * diff --git a/containers/manila/manila-api/Containerfile b/containers/manila/manila-api/Containerfile new file mode 100644 index 0000000..970293f --- /dev/null +++ b/containers/manila/manila-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/manila + +ARG CONSTRAINTS_FILE=requirements.lock +COPY ${CONSTRAINTS_FILE} /deps-upper-constraints.txt +COPY src/ /src/ +COPY manila-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 manila-api/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 manila-api/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 \ + -c /deps-upper-constraints.txt \ + --find-links=/wheels/pkgs \ + --wheel-dir=/wheels/deps /wheels/pkgs/*.whl + +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/manila && \ + cp -a ${SERVICE_SRC}/etc/manila/api-paste.ini /configfiles/etc/manila/ + +# --- Runtime stage --- +FROM ${BASE_IMAGE} + +LABEL summary="OpenStack Manila API" \ + io.k8s.description="Manila API service (WSGI via httpd) built from source with kolla interface" + +RUN uid_gid_manage manila + +COPY manila-api/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 manila-api/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/manila /var/log/manila /var/lib/manila /var/cache/manila && \ + chown -R manila:manila /etc/manila /var/log/manila /var/lib/manila /var/cache/manila && \ + chmod 770 /var/log/manila /var/lib/manila /var/cache/manila + +COPY --from=build /configfiles/etc/manila/api-paste.ini /etc/manila/api-paste.ini + +RUN chmod 640 /etc/manila/api-paste.ini && \ + chown manila:manila /etc/manila/api-paste.ini + +RUN mkdir -p /var/www/cgi-bin/manila +COPY scripts/manila-wsgi /var/www/cgi-bin/manila +RUN chown -R manila /var/www/cgi-bin/manila && chmod 755 /var/www/cgi-bin/manila/manila-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 manila + +USER manila diff --git a/containers/manila/manila-api/bindeps.txt b/containers/manila/manila-api/bindeps.txt new file mode 100644 index 0000000..9104a42 --- /dev/null +++ b/containers/manila/manila-api/bindeps.txt @@ -0,0 +1,8 @@ +# Apache WSGI server for manila-api +httpd +mod_ssl +python3-mod_wsgi +python3 +python3-pip +# cryptography from RPM for certifications and CVE handling +python3-cryptography diff --git a/containers/manila/manila-api/builddeps.txt b/containers/manila/manila-api/builddeps.txt new file mode 100644 index 0000000..2ceaa24 --- /dev/null +++ b/containers/manila/manila-api/builddeps.txt @@ -0,0 +1,17 @@ +# Compiler toolchain and headers for building Python C extensions +git-core +gcc +gcc-c++ +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/manila/manila-api/pythonbuilddeps.txt b/containers/manila/manila-api/pythonbuilddeps.txt new file mode 100644 index 0000000..1d45dc6 --- /dev/null +++ b/containers/manila/manila-api/pythonbuilddeps.txt @@ -0,0 +1 @@ +pbr diff --git a/containers/manila/manila-api/pythondeps.txt b/containers/manila/manila-api/pythondeps.txt new file mode 100644 index 0000000..44f63f5 --- /dev/null +++ b/containers/manila/manila-api/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/manila/manila-api/src/.gitkeep b/containers/manila/manila-api/src/.gitkeep new file mode 100644 index 0000000..e69de29 diff --git a/containers/manila/manila-scheduler/Containerfile b/containers/manila/manila-scheduler/Containerfile new file mode 100644 index 0000000..1e218b1 --- /dev/null +++ b/containers/manila/manila-scheduler/Containerfile @@ -0,0 +1,87 @@ +ARG BASE_IMAGE=localhost/openstack/openstack-base:latest + +# --- Build stage: compile wheels from source --- +FROM ${BASE_IMAGE} AS build + +ARG SERVICE_SRC=/src/manila + +ARG CONSTRAINTS_FILE=requirements.lock +COPY ${CONSTRAINTS_FILE} /deps-upper-constraints.txt +COPY src/ /src/ +COPY manila-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 manila-scheduler/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 manila-scheduler/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 \ + -c /deps-upper-constraints.txt \ + --find-links=/wheels/pkgs \ + --wheel-dir=/wheels/deps /wheels/pkgs/*.whl + +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 Manila Scheduler" \ + io.k8s.description="Manila scheduler service built from source with kolla interface" + +RUN uid_gid_manage manila + +COPY manila-scheduler/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 manila-scheduler/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/manila /var/log/manila /var/lib/manila /var/cache/manila && \ + chown -R manila:manila /etc/manila /var/log/manila /var/lib/manila /var/cache/manila && \ + chmod 770 /var/log/manila /var/lib/manila /var/cache/manila + +USER manila diff --git a/containers/manila/manila-scheduler/bindeps.txt b/containers/manila/manila-scheduler/bindeps.txt new file mode 100644 index 0000000..075dfe4 --- /dev/null +++ b/containers/manila/manila-scheduler/bindeps.txt @@ -0,0 +1,5 @@ +# No extra system dependencies beyond base image +python3 +python3-pip +# cryptography from RPM for certifications and CVE handling +python3-cryptography diff --git a/containers/manila/manila-scheduler/builddeps.txt b/containers/manila/manila-scheduler/builddeps.txt new file mode 100644 index 0000000..2ceaa24 --- /dev/null +++ b/containers/manila/manila-scheduler/builddeps.txt @@ -0,0 +1,17 @@ +# Compiler toolchain and headers for building Python C extensions +git-core +gcc +gcc-c++ +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/manila/manila-scheduler/pythonbuilddeps.txt b/containers/manila/manila-scheduler/pythonbuilddeps.txt new file mode 100644 index 0000000..1d45dc6 --- /dev/null +++ b/containers/manila/manila-scheduler/pythonbuilddeps.txt @@ -0,0 +1 @@ +pbr diff --git a/containers/manila/manila-scheduler/pythondeps.txt b/containers/manila/manila-scheduler/pythondeps.txt new file mode 100644 index 0000000..44f63f5 --- /dev/null +++ b/containers/manila/manila-scheduler/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/manila/manila-scheduler/src/.gitkeep b/containers/manila/manila-scheduler/src/.gitkeep new file mode 100644 index 0000000..e69de29 diff --git a/containers/manila/manila-share/Containerfile b/containers/manila/manila-share/Containerfile new file mode 100644 index 0000000..7d4b91a --- /dev/null +++ b/containers/manila/manila-share/Containerfile @@ -0,0 +1,100 @@ +ARG BASE_IMAGE=localhost/openstack/openstack-base:latest + +# --- Build stage: compile wheels from source --- +FROM ${BASE_IMAGE} AS build + +ARG SERVICE_SRC=/src/manila + +ARG CONSTRAINTS_FILE=requirements.lock +COPY ${CONSTRAINTS_FILE} /deps-upper-constraints.txt +COPY src/ /src/ +COPY manila-share/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 manila-share/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 manila-share/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 \ + -c /deps-upper-constraints.txt \ + --find-links=/wheels/pkgs \ + --wheel-dir=/wheels/deps /wheels/pkgs/*.whl + +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/manila && \ + cp -a ${SERVICE_SRC}/etc/manila/rootwrap.conf /configfiles/etc/manila/ && \ + cp -a ${SERVICE_SRC}/etc/manila/rootwrap.d /configfiles/etc/manila/ + +# --- Runtime stage --- +FROM ${BASE_IMAGE} + +LABEL summary="OpenStack Manila Share" \ + io.k8s.description="Manila share service built from source with kolla interface" + +RUN uid_gid_manage manila + +COPY manila-share/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 manila-share/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/manila /var/log/manila /var/lib/manila /var/cache/manila && \ + chown -R manila:manila /etc/manila /var/log/manila /var/lib/manila /var/cache/manila && \ + chmod 770 /var/log/manila /var/lib/manila /var/cache/manila + +COPY --from=build /configfiles/etc/manila/rootwrap.conf /etc/manila/rootwrap.conf +COPY --from=build /configfiles/etc/manila/rootwrap.d /etc/manila/rootwrap.d + +COPY common/manila-sudoers /etc/sudoers.d/manila-sudoers + +RUN chmod 750 /etc/sudoers.d && \ + chmod 440 /etc/sudoers.d/manila-sudoers && \ + chown -R manila:manila /etc/manila + +USER manila diff --git a/containers/manila/manila-share/bindeps.txt b/containers/manila/manila-share/bindeps.txt new file mode 100644 index 0000000..2f6a932 --- /dev/null +++ b/containers/manila/manila-share/bindeps.txt @@ -0,0 +1,8 @@ +python3 +python3-pip +# cryptography from RPM for certifications and CVE handling +python3-cryptography +# Ceph storage backend (from centos10-storage repo in base image) +ceph-common +dbus-tools +sqlite diff --git a/containers/manila/manila-share/builddeps.txt b/containers/manila/manila-share/builddeps.txt new file mode 100644 index 0000000..2ceaa24 --- /dev/null +++ b/containers/manila/manila-share/builddeps.txt @@ -0,0 +1,17 @@ +# Compiler toolchain and headers for building Python C extensions +git-core +gcc +gcc-c++ +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/manila/manila-share/pythonbuilddeps.txt b/containers/manila/manila-share/pythonbuilddeps.txt new file mode 100644 index 0000000..1d45dc6 --- /dev/null +++ b/containers/manila/manila-share/pythonbuilddeps.txt @@ -0,0 +1 @@ +pbr diff --git a/containers/manila/manila-share/pythondeps.txt b/containers/manila/manila-share/pythondeps.txt new file mode 100644 index 0000000..44f63f5 --- /dev/null +++ b/containers/manila/manila-share/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/manila/manila-share/src/.gitkeep b/containers/manila/manila-share/src/.gitkeep new file mode 100644 index 0000000..e69de29 diff --git a/containers/manila/manila/Containerfile b/containers/manila/manila/Containerfile new file mode 100644 index 0000000..4e1a0b4 --- /dev/null +++ b/containers/manila/manila/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/manila + +ARG CONSTRAINTS_FILE=requirements.lock +COPY ${CONSTRAINTS_FILE} /deps-upper-constraints.txt +COPY src/ /src/ +COPY manila/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 manila/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 manila/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 \ + -c /deps-upper-constraints.txt \ + --find-links=/wheels/pkgs \ + --wheel-dir=/wheels/deps /wheels/pkgs/*.whl + +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/manila && \ + cp -a ${SERVICE_SRC}/etc/manila/api-paste.ini /configfiles/etc/manila/ && \ + cp -a ${SERVICE_SRC}/etc/manila/rootwrap.conf /configfiles/etc/manila/ && \ + cp -a ${SERVICE_SRC}/etc/manila/rootwrap.d /configfiles/etc/manila/ + +# --- Runtime stage --- +FROM ${BASE_IMAGE} + +LABEL summary="OpenStack Manila (data, generic)" \ + io.k8s.description="Manila shared filesystem service built from source with kolla interface" + +RUN uid_gid_manage manila + +COPY manila/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 manila/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/manila /var/log/manila /var/lib/manila /var/cache/manila && \ + chown -R manila:manila /etc/manila /var/log/manila /var/lib/manila /var/cache/manila && \ + chmod 770 /var/log/manila /var/lib/manila /var/cache/manila + +COPY --from=build /configfiles/etc/manila/api-paste.ini /etc/manila/api-paste.ini +COPY --from=build /configfiles/etc/manila/rootwrap.conf /etc/manila/rootwrap.conf +COPY --from=build /configfiles/etc/manila/rootwrap.d /etc/manila/rootwrap.d + +# Sudoers for rootwrap +COPY common/manila-sudoers /etc/sudoers.d/manila-sudoers + +RUN chmod 640 /etc/manila/api-paste.ini && \ + chmod 750 /etc/sudoers.d && \ + chmod 440 /etc/sudoers.d/manila-sudoers && \ + chown -R manila:manila /etc/manila + +USER manila diff --git a/containers/manila/manila/bindeps.txt b/containers/manila/manila/bindeps.txt new file mode 100644 index 0000000..075dfe4 --- /dev/null +++ b/containers/manila/manila/bindeps.txt @@ -0,0 +1,5 @@ +# No extra system dependencies beyond base image +python3 +python3-pip +# cryptography from RPM for certifications and CVE handling +python3-cryptography diff --git a/containers/manila/manila/builddeps.txt b/containers/manila/manila/builddeps.txt new file mode 100644 index 0000000..2ceaa24 --- /dev/null +++ b/containers/manila/manila/builddeps.txt @@ -0,0 +1,17 @@ +# Compiler toolchain and headers for building Python C extensions +git-core +gcc +gcc-c++ +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/manila/manila/pythonbuilddeps.txt b/containers/manila/manila/pythonbuilddeps.txt new file mode 100644 index 0000000..1d45dc6 --- /dev/null +++ b/containers/manila/manila/pythonbuilddeps.txt @@ -0,0 +1 @@ +pbr diff --git a/containers/manila/manila/pythondeps.txt b/containers/manila/manila/pythondeps.txt new file mode 100644 index 0000000..44f63f5 --- /dev/null +++ b/containers/manila/manila/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/manila/manila/src/.gitkeep b/containers/manila/manila/src/.gitkeep new file mode 100644 index 0000000..e69de29 diff --git a/containers/manila/requirements.lock b/containers/manila/requirements.lock new file mode 120000 index 0000000..c466dc0 --- /dev/null +++ b/containers/manila/requirements.lock @@ -0,0 +1 @@ +requirements.lock.master \ No newline at end of file diff --git a/containers/manila/requirements.lock.master b/containers/manila/requirements.lock.master new file mode 100644 index 0000000..2c6a582 --- /dev/null +++ b/containers/manila/requirements.lock.master @@ -0,0 +1,727 @@ +# +# This file is autogenerated by pip-compile with Python 3.14 +# by the following command: +# +# pip-compile --allow-unsafe --constraint=upper-constraints.txt.master --output-file=requirements.lock.master --strip-extras manila-api/pythonbuilddeps.txt manila-api/pythondeps.txt manila-scheduler/pythonbuilddeps.txt manila-scheduler/pythondeps.txt manila-share/pythonbuilddeps.txt manila-share/pythondeps.txt manila/pythonbuilddeps.txt manila/pythondeps.txt src/manila/requirements.txt +# +alembic==1.18.5 + # via + # -c upper-constraints.txt.master + # -r src/manila/requirements.txt + # 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 +autopage==0.6.0 + # via + # -c upper-constraints.txt.master + # cliff +bcrypt==5.0.0 + # via + # -c upper-constraints.txt.master + # oslo-middleware + # paramiko +cachetools==7.1.4 + # via + # -c upper-constraints.txt.master + # -r src/manila/requirements.txt + # oslo-messaging +castellan==5.8.0 + # via + # -c upper-constraints.txt.master + # -r src/manila/requirements.txt +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 + # osc-lib + # python-barbicanclient + # python-neutronclient +cmd2==4.0.0 + # via + # -c upper-constraints.txt.master + # cliff +cotyledon==2.2.0 + # via + # -c upper-constraints.txt.master + # oslo-service +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 + # python-neutronclient +decorator==5.3.1 + # via + # -c upper-constraints.txt.master + # dogpile-cache + # openstacksdk +defusedxml==0.7.1 + # via + # -c upper-constraints.txt.master + # -r src/manila/requirements.txt +dnspython==2.8.0 + # via + # -c upper-constraints.txt.master + # eventlet +dogpile-cache==1.5.0 + # via + # -c upper-constraints.txt.master + # openstacksdk + # oslo-cache +eventlet==0.41.0 + # via + # -c upper-constraints.txt.master + # -r src/manila/requirements.txt + # oslo-service +fasteners==0.20 + # via + # -c upper-constraints.txt.master + # oslo-concurrency + # tooz +futurist==3.4.0 + # via + # -c upper-constraints.txt.master + # oslo-messaging + # oslo-service + # tooz +greenlet==3.5.3 + # via + # -c upper-constraints.txt.master + # -r src/manila/requirements.txt + # eventlet + # oslo-service + # sqlalchemy +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 + # keystoneauth1 + # openstacksdk + # 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 + # openstacksdk +jsonpatch==1.33 + # via + # -c upper-constraints.txt.master + # openstacksdk +jsonpointer==3.1.1 + # via + # -c upper-constraints.txt.master + # jsonpatch +jsonschema==4.26.0 + # via + # -c upper-constraints.txt.master + # -r src/manila/requirements.txt +jsonschema-specifications==2025.9.1 + # via + # -c upper-constraints.txt.master + # jsonschema +keystoneauth1==5.15.0 + # via + # -c upper-constraints.txt.master + # -r src/manila/requirements.txt + # castellan + # keystonemiddleware + # openstacksdk + # osc-lib + # python-barbicanclient + # python-cinderclient + # python-keystoneclient + # python-neutronclient + # python-novaclient +keystonemiddleware==13.0.0 + # via + # -c upper-constraints.txt.master + # -r src/manila/requirements.txt +kombu==5.6.2 + # via + # -c upper-constraints.txt.master + # oslo-messaging +legacy-cgi==2.6.4 + # via webob +lxml==6.1.1 + # via + # -c upper-constraints.txt.master + # -r src/manila/requirements.txt +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 + # -r src/manila/requirements.txt + # oslo-config + # oslo-utils + # osprofiler + # python-neutronclient +openstacksdk==4.18.0 + # via + # -c upper-constraints.txt.master + # -r src/manila/requirements.txt + # osc-lib + # python-neutronclient +os-service-types==1.8.2 + # via + # -c upper-constraints.txt.master + # keystoneauth1 + # openstacksdk +osc-lib==4.7.0 + # via + # -c upper-constraints.txt.master + # python-neutronclient +oslo-cache==4.3.0 + # via + # -c upper-constraints.txt.master + # -r manila-api/pythondeps.txt + # -r manila-scheduler/pythondeps.txt + # -r manila-share/pythondeps.txt + # -r manila/pythondeps.txt + # keystonemiddleware +oslo-concurrency==7.6.1 + # via + # -c upper-constraints.txt.master + # -r src/manila/requirements.txt + # oslo-service + # osprofiler +oslo-config==10.6.0 + # via + # -c upper-constraints.txt.master + # -r src/manila/requirements.txt + # castellan + # keystonemiddleware + # oslo-cache + # oslo-concurrency + # oslo-db + # oslo-log + # oslo-messaging + # oslo-metrics + # oslo-middleware + # oslo-policy + # oslo-privsep + # oslo-reports + # oslo-service + # oslo-upgradecheck + # osprofiler + # pycadf + # python-keystoneclient +oslo-context==6.5.0 + # via + # -c upper-constraints.txt.master + # -r src/manila/requirements.txt + # castellan + # keystonemiddleware + # oslo-log + # oslo-messaging + # oslo-middleware + # oslo-policy +oslo-db==18.1.0 + # via + # -c upper-constraints.txt.master + # -r manila-api/pythondeps.txt + # -r manila-scheduler/pythondeps.txt + # -r manila-share/pythondeps.txt + # -r manila/pythondeps.txt + # -r src/manila/requirements.txt +oslo-i18n==6.9.0 + # via + # -c upper-constraints.txt.master + # -r src/manila/requirements.txt + # castellan + # keystonemiddleware + # osc-lib + # oslo-cache + # oslo-concurrency + # oslo-config + # oslo-db + # oslo-log + # oslo-middleware + # oslo-policy + # oslo-privsep + # oslo-reports + # oslo-service + # oslo-upgradecheck + # oslo-utils + # python-barbicanclient + # python-cinderclient + # python-keystoneclient + # python-neutronclient + # python-novaclient +oslo-log==8.3.0 + # via + # -c upper-constraints.txt.master + # -r src/manila/requirements.txt + # castellan + # keystonemiddleware + # oslo-cache + # oslo-messaging + # oslo-metrics + # oslo-privsep + # oslo-service + # python-neutronclient +oslo-messaging==18.2.0 + # via + # -c upper-constraints.txt.master + # -r src/manila/requirements.txt +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/manila/requirements.txt + # oslo-messaging +oslo-policy==6.0.0 + # via + # -c upper-constraints.txt.master + # -r src/manila/requirements.txt + # oslo-upgradecheck +oslo-privsep==3.12.0 + # via + # -c upper-constraints.txt.master + # -r src/manila/requirements.txt +oslo-reports==3.9.0 + # via + # -c upper-constraints.txt.master + # -r src/manila/requirements.txt +oslo-rootwrap==7.10.0 + # via + # -c upper-constraints.txt.master + # -r src/manila/requirements.txt +oslo-serialization==5.11.0 + # via + # -c upper-constraints.txt.master + # -r src/manila/requirements.txt + # keystonemiddleware + # oslo-log + # oslo-messaging + # oslo-policy + # oslo-reports + # osprofiler + # pycadf + # python-barbicanclient + # python-keystoneclient + # python-neutronclient + # python-novaclient + # tooz +oslo-service==4.8.0 + # via + # -c upper-constraints.txt.master + # -r src/manila/requirements.txt + # oslo-messaging +oslo-upgradecheck==2.8.0 + # via + # -c upper-constraints.txt.master + # -r src/manila/requirements.txt +oslo-utils==10.1.1 + # via + # -c upper-constraints.txt.master + # -r src/manila/requirements.txt + # castellan + # keystonemiddleware + # osc-lib + # 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 + # osprofiler + # python-barbicanclient + # python-cinderclient + # python-keystoneclient + # python-neutronclient + # python-novaclient + # tooz +osprofiler==4.4.0 + # via + # -c upper-constraints.txt.master + # -r src/manila/requirements.txt +packaging==26.2 + # via + # -c upper-constraints.txt.master + # -r src/manila/requirements.txt + # kombu + # oslo-utils + # python-keystoneclient +paramiko==4.0.0 + # via + # -c upper-constraints.txt.master + # -r src/manila/requirements.txt +paste==3.10.1 + # via + # -c upper-constraints.txt.master + # -r src/manila/requirements.txt + # oslo-service +pastedeploy==3.1.0 + # via + # -c upper-constraints.txt.master + # -r src/manila/requirements.txt + # oslo-service +pbr==7.0.3 + # via + # -c upper-constraints.txt.master + # -r manila-api/pythonbuilddeps.txt + # -r manila-scheduler/pythonbuilddeps.txt + # -r manila-share/pythonbuilddeps.txt + # -r manila/pythonbuilddeps.txt + # -r src/manila/requirements.txt + # castellan + # keystonemiddleware + # openstacksdk + # os-service-types + # osc-lib + # oslo-concurrency + # oslo-context + # oslo-i18n + # oslo-log + # oslo-messaging + # oslo-metrics + # oslo-middleware + # oslo-reports + # oslo-rootwrap + # oslo-utils + # python-barbicanclient + # python-cinderclient + # python-keystoneclient + # python-neutronclient + # python-novaclient +platformdirs==4.10.0 + # via + # -c upper-constraints.txt.master + # openstacksdk +prettytable==3.18.0 + # via + # -c upper-constraints.txt.master + # cliff + # oslo-upgradecheck + # osprofiler + # python-cinderclient + # 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 +psutil==7.2.2 + # via + # -c upper-constraints.txt.master + # openstacksdk + # oslo-reports + # oslo-utils +pycadf==4.1.0 + # via + # -c upper-constraints.txt.master + # keystonemiddleware +pycparser==3.0 + # via + # -c upper-constraints.txt.master + # cffi +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 +pyparsing==3.3.2 + # via + # -c upper-constraints.txt.master + # -r src/manila/requirements.txt + # oslo-utils +pyperclip==1.11.0 + # via + # -c upper-constraints.txt.master + # cmd2 +python-barbicanclient==7.5.0 + # via + # -c upper-constraints.txt.master + # castellan +python-binary-memcached==0.32.0 + # via + # -c upper-constraints.txt.master + # oslo-cache +python-cinderclient==9.9.0 + # via + # -c upper-constraints.txt.master + # -r src/manila/requirements.txt +python-dateutil==2.9.0.post0 + # via + # -c upper-constraints.txt.master + # oslo-log +python-keystoneclient==5.8.0 + # via + # -c upper-constraints.txt.master + # keystonemiddleware + # python-neutronclient +python-memcached==1.62 + # via + # -c upper-constraints.txt.master + # oslo-cache +python-neutronclient==13.0.0 + # via + # -c upper-constraints.txt.master + # -r src/manila/requirements.txt +python-novaclient==18.13.0 + # via + # -c upper-constraints.txt.master + # -r src/manila/requirements.txt +pyyaml==6.0.3 + # via + # -c upper-constraints.txt.master + # cliff + # openstacksdk + # 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/manila/requirements.txt + # castellan + # keystoneauth1 + # keystonemiddleware + # osc-lib + # oslo-config + # oslo-policy + # osprofiler + # python-barbicanclient + # python-cinderclient + # python-keystoneclient + # python-neutronclient +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/manila/requirements.txt + # oslo-service +rpds-py==2026.5.1 + # via + # -c upper-constraints.txt.master + # jsonschema + # referencing +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/manila/requirements.txt + # alembic + # oslo-db + # sqlalchemy-utils +sqlalchemy-utils==0.42.1 + # via + # -c upper-constraints.txt.master + # -r src/manila/requirements.txt +statsd==4.0.1 + # via + # -c upper-constraints.txt.master + # oslo-middleware +stevedore==5.9.0 + # via + # -c upper-constraints.txt.master + # -r src/manila/requirements.txt + # castellan + # cliff + # dogpile-cache + # keystoneauth1 + # osc-lib + # oslo-config + # oslo-db + # oslo-messaging + # oslo-middleware + # oslo-policy + # python-cinderclient + # python-keystoneclient + # python-novaclient + # tooz +tenacity==9.1.4 + # via + # -c upper-constraints.txt.master + # -r src/manila/requirements.txt + # 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/manila/requirements.txt +typing-extensions==4.15.0 + # via + # -c upper-constraints.txt.master + # alembic + # cotyledon + # keystoneauth1 + # os-service-types + # oslo-context + # oslo-middleware + # sqlalchemy +tzdata==2026.2 + # via + # -c upper-constraints.txt.master + # kombu +uhashring==2.4 + # via + # -c upper-constraints.txt.master + # python-binary-memcached +urllib3==2.7.0 + # via + # -c upper-constraints.txt.master + # requests +vine==5.1.0 + # via + # -c upper-constraints.txt.master + # amqp + # kombu +voluptuous==0.16.0 + # via + # -c upper-constraints.txt.master + # tooz +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/manila/requirements.txt + # keystonemiddleware + # oslo-messaging + # oslo-middleware + # oslo-service + # osprofiler +wrapt==2.2.2 + # via + # -c upper-constraints.txt.master + # debtcollector +yappi==1.7.6 + # via + # -c upper-constraints.txt.master + # oslo-service + +# The following packages are considered to be unsafe in a requirements file: diff --git a/containers/manila/rpms.in.yaml b/containers/manila/rpms.in.yaml new file mode 100644 index 0000000..1db654e --- /dev/null +++ b/containers/manila/rpms.in.yaml @@ -0,0 +1,35 @@ +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 + - dbus-tools + - gcc + - gcc-c++ + - git-core + - httpd + - libffi-devel + - mod_ssl + - openssl-devel + - python3 + - python3-cryptography + - python3-devel + - python3-mod_wsgi + - python3-pip + - python3-setuptools + - python3-wheel + - rust + - sqlite diff --git a/containers/manila/scripts/manila-wsgi b/containers/manila/scripts/manila-wsgi new file mode 100755 index 0000000..89f40e7 --- /dev/null +++ b/containers/manila/scripts/manila-wsgi @@ -0,0 +1,6 @@ +#! /usr/bin/python3 -sP +# PBR Generated from 'wsgi_scripts' + +from manila.wsgi.wsgi import initialize_application + +application = initialize_application() diff --git a/containers/manila/sources.txt b/containers/manila/sources.txt new file mode 100644 index 0000000..c25bab4 --- /dev/null +++ b/containers/manila/sources.txt @@ -0,0 +1,2 @@ +master upper-constraints https://opendev.org/openstack/requirements.git master ddab97be8a4c5fe248db071fde9013ba530d7f72 +master manila https://opendev.org/openstack/manila.git master 1b702bf6246921dc475fc425368e7789142707ea diff --git a/containers/manila/src/.gitkeep b/containers/manila/src/.gitkeep new file mode 100644 index 0000000..e69de29 diff --git a/containers/manila/upper-constraints.txt b/containers/manila/upper-constraints.txt new file mode 120000 index 0000000..b2ebb3b --- /dev/null +++ b/containers/manila/upper-constraints.txt @@ -0,0 +1 @@ +upper-constraints.txt.master \ No newline at end of file diff --git a/containers/manila/upper-constraints.txt.master b/containers/manila/upper-constraints.txt.master new file mode 100644 index 0000000..4a22daa --- /dev/null +++ b/containers/manila/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