From f197edb0259bbff0b70755c0204bc987f4332f68 Mon Sep 17 00:00:00 2001 From: Emma Foley Date: Wed, 5 Aug 2026 16:13:35 -0400 Subject: [PATCH 1/5] Containerfiles created with /generate-containerfile Assisted-By: Cladue Opus 4.6 --- containers/aodh/aodh-api/Containerfile | 100 +++ containers/aodh/aodh-api/bindeps.txt | 4 + containers/aodh/aodh-api/builddeps.txt | 10 + containers/aodh/aodh-api/pythonbuilddeps.txt | 1 + containers/aodh/aodh-api/pythondeps.txt | 2 + containers/aodh/aodh-api/src/.gitkeep | 0 containers/aodh/aodh-evaluator/Containerfile | 92 +++ containers/aodh/aodh-evaluator/bindeps.txt | 1 + containers/aodh/aodh-evaluator/builddeps.txt | 10 + .../aodh/aodh-evaluator/pythonbuilddeps.txt | 1 + containers/aodh/aodh-evaluator/pythondeps.txt | 2 + containers/aodh/aodh-evaluator/src/.gitkeep | 0 containers/aodh/aodh-listener/Containerfile | 92 +++ containers/aodh/aodh-listener/bindeps.txt | 1 + containers/aodh/aodh-listener/builddeps.txt | 10 + .../aodh/aodh-listener/pythonbuilddeps.txt | 1 + containers/aodh/aodh-listener/pythondeps.txt | 2 + containers/aodh/aodh-listener/src/.gitkeep | 0 containers/aodh/aodh-notifier/Containerfile | 92 +++ containers/aodh/aodh-notifier/bindeps.txt | 1 + containers/aodh/aodh-notifier/builddeps.txt | 10 + .../aodh/aodh-notifier/pythonbuilddeps.txt | 1 + containers/aodh/aodh-notifier/pythondeps.txt | 2 + containers/aodh/aodh-notifier/src/.gitkeep | 0 .../config/usr/share/aodh/aodh-dist.conf | 3 + containers/aodh/sources.txt | 3 + containers/aodh/src/.gitkeep | 0 containers/aodh/upper-constraints.txt.master | 581 ++++++++++++++++++ .../ceilometer-central/Containerfile | 99 +++ .../ceilometer/ceilometer-central/bindeps.txt | 1 + .../ceilometer-central/builddeps.txt | 10 + .../ceilometer-central/pythonbuilddeps.txt | 1 + .../ceilometer-central/pythondeps.txt | 2 + .../ceilometer-central/src/.gitkeep | 0 .../ceilometer-compute/Containerfile | 99 +++ .../ceilometer/ceilometer-compute/bindeps.txt | 2 + .../ceilometer-compute/builddeps.txt | 10 + .../ceilometer-compute/pythonbuilddeps.txt | 1 + .../ceilometer-compute/pythondeps.txt | 2 + .../ceilometer-compute/src/.gitkeep | 0 .../ceilometer/ceilometer-ipmi/Containerfile | 107 ++++ .../ceilometer/ceilometer-ipmi/bindeps.txt | 2 + .../ceilometer/ceilometer-ipmi/builddeps.txt | 10 + .../config/etc/sudoers.d/ceilometer | 2 + .../ceilometer-ipmi/pythonbuilddeps.txt | 1 + .../ceilometer/ceilometer-ipmi/pythondeps.txt | 2 + .../ceilometer/ceilometer-ipmi/src/.gitkeep | 0 .../ceilometer-notification/Containerfile | 108 ++++ .../ceilometer-notification/bindeps.txt | 1 + .../ceilometer-notification/builddeps.txt | 10 + .../pythonbuilddeps.txt | 1 + .../ceilometer-notification/pythondeps.txt | 2 + .../ceilometer-notification/src/.gitkeep | 0 .../usr/share/ceilometer/ceilometer-dist.conf | 3 + containers/ceilometer/sources.txt | 3 + containers/ceilometer/src/.gitkeep | 0 .../cloudkitty/cloudkitty-api/Containerfile | 103 ++++ .../cloudkitty/cloudkitty-api/bindeps.txt | 4 + .../cloudkitty/cloudkitty-api/builddeps.txt | 8 + .../cloudkitty-api/pythonbuilddeps.txt | 1 + .../cloudkitty/cloudkitty-api/pythondeps.txt | 4 + .../cloudkitty/cloudkitty-api/src/.gitkeep | 0 .../cloudkitty-processor/Containerfile | 93 +++ .../cloudkitty-processor/bindeps.txt | 1 + .../cloudkitty-processor/builddeps.txt | 8 + .../cloudkitty-processor/pythonbuilddeps.txt | 1 + .../cloudkitty-processor/pythondeps.txt | 4 + .../cloudkitty-processor/src/.gitkeep | 0 .../common/config/usr/bin/cloudkitty-api | 5 + containers/cloudkitty/sources.txt | 3 + containers/cloudkitty/src/.gitkeep | 0 71 files changed, 1736 insertions(+) create mode 100644 containers/aodh/aodh-api/Containerfile create mode 100644 containers/aodh/aodh-api/bindeps.txt create mode 100644 containers/aodh/aodh-api/builddeps.txt create mode 100644 containers/aodh/aodh-api/pythonbuilddeps.txt create mode 100644 containers/aodh/aodh-api/pythondeps.txt create mode 100644 containers/aodh/aodh-api/src/.gitkeep create mode 100644 containers/aodh/aodh-evaluator/Containerfile create mode 100644 containers/aodh/aodh-evaluator/bindeps.txt create mode 100644 containers/aodh/aodh-evaluator/builddeps.txt create mode 100644 containers/aodh/aodh-evaluator/pythonbuilddeps.txt create mode 100644 containers/aodh/aodh-evaluator/pythondeps.txt create mode 100644 containers/aodh/aodh-evaluator/src/.gitkeep create mode 100644 containers/aodh/aodh-listener/Containerfile create mode 100644 containers/aodh/aodh-listener/bindeps.txt create mode 100644 containers/aodh/aodh-listener/builddeps.txt create mode 100644 containers/aodh/aodh-listener/pythonbuilddeps.txt create mode 100644 containers/aodh/aodh-listener/pythondeps.txt create mode 100644 containers/aodh/aodh-listener/src/.gitkeep create mode 100644 containers/aodh/aodh-notifier/Containerfile create mode 100644 containers/aodh/aodh-notifier/bindeps.txt create mode 100644 containers/aodh/aodh-notifier/builddeps.txt create mode 100644 containers/aodh/aodh-notifier/pythonbuilddeps.txt create mode 100644 containers/aodh/aodh-notifier/pythondeps.txt create mode 100644 containers/aodh/aodh-notifier/src/.gitkeep create mode 100644 containers/aodh/common/config/usr/share/aodh/aodh-dist.conf create mode 100644 containers/aodh/sources.txt create mode 100644 containers/aodh/src/.gitkeep create mode 100644 containers/aodh/upper-constraints.txt.master create mode 100644 containers/ceilometer/ceilometer-central/Containerfile create mode 100644 containers/ceilometer/ceilometer-central/bindeps.txt create mode 100644 containers/ceilometer/ceilometer-central/builddeps.txt create mode 100644 containers/ceilometer/ceilometer-central/pythonbuilddeps.txt create mode 100644 containers/ceilometer/ceilometer-central/pythondeps.txt create mode 100644 containers/ceilometer/ceilometer-central/src/.gitkeep create mode 100644 containers/ceilometer/ceilometer-compute/Containerfile create mode 100644 containers/ceilometer/ceilometer-compute/bindeps.txt create mode 100644 containers/ceilometer/ceilometer-compute/builddeps.txt create mode 100644 containers/ceilometer/ceilometer-compute/pythonbuilddeps.txt create mode 100644 containers/ceilometer/ceilometer-compute/pythondeps.txt create mode 100644 containers/ceilometer/ceilometer-compute/src/.gitkeep create mode 100644 containers/ceilometer/ceilometer-ipmi/Containerfile create mode 100644 containers/ceilometer/ceilometer-ipmi/bindeps.txt create mode 100644 containers/ceilometer/ceilometer-ipmi/builddeps.txt create mode 100644 containers/ceilometer/ceilometer-ipmi/config/etc/sudoers.d/ceilometer create mode 100644 containers/ceilometer/ceilometer-ipmi/pythonbuilddeps.txt create mode 100644 containers/ceilometer/ceilometer-ipmi/pythondeps.txt create mode 100644 containers/ceilometer/ceilometer-ipmi/src/.gitkeep create mode 100644 containers/ceilometer/ceilometer-notification/Containerfile create mode 100644 containers/ceilometer/ceilometer-notification/bindeps.txt create mode 100644 containers/ceilometer/ceilometer-notification/builddeps.txt create mode 100644 containers/ceilometer/ceilometer-notification/pythonbuilddeps.txt create mode 100644 containers/ceilometer/ceilometer-notification/pythondeps.txt create mode 100644 containers/ceilometer/ceilometer-notification/src/.gitkeep create mode 100644 containers/ceilometer/common/config/usr/share/ceilometer/ceilometer-dist.conf create mode 100644 containers/ceilometer/sources.txt create mode 100644 containers/ceilometer/src/.gitkeep create mode 100644 containers/cloudkitty/cloudkitty-api/Containerfile create mode 100644 containers/cloudkitty/cloudkitty-api/bindeps.txt create mode 100644 containers/cloudkitty/cloudkitty-api/builddeps.txt create mode 100644 containers/cloudkitty/cloudkitty-api/pythonbuilddeps.txt create mode 100644 containers/cloudkitty/cloudkitty-api/pythondeps.txt create mode 100644 containers/cloudkitty/cloudkitty-api/src/.gitkeep create mode 100644 containers/cloudkitty/cloudkitty-processor/Containerfile create mode 100644 containers/cloudkitty/cloudkitty-processor/bindeps.txt create mode 100644 containers/cloudkitty/cloudkitty-processor/builddeps.txt create mode 100644 containers/cloudkitty/cloudkitty-processor/pythonbuilddeps.txt create mode 100644 containers/cloudkitty/cloudkitty-processor/pythondeps.txt create mode 100644 containers/cloudkitty/cloudkitty-processor/src/.gitkeep create mode 100644 containers/cloudkitty/common/config/usr/bin/cloudkitty-api create mode 100644 containers/cloudkitty/sources.txt create mode 100644 containers/cloudkitty/src/.gitkeep diff --git a/containers/aodh/aodh-api/Containerfile b/containers/aodh/aodh-api/Containerfile new file mode 100644 index 0000000..50f7f82 --- /dev/null +++ b/containers/aodh/aodh-api/Containerfile @@ -0,0 +1,100 @@ +ARG BASE_IMAGE=localhost/openstack/openstack-base:latest + +# --- Build stage: compile wheels and collect upstream config --- +FROM ${BASE_IMAGE} AS build + +ARG SERVICE_SRC=/src/aodh + +ARG CONSTRAINTS_FILE=requirements.lock +COPY ${CONSTRAINTS_FILE} /deps-upper-constraints.txt +COPY src/ /src/ +COPY aodh-api/src/ /src/ + +COPY aodh-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 aodh-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-build-isolation --no-deps \ + --wheel-dir=/wheels "${pkg}"; \ + fi; \ + done + +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/${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 pip3 install --no-cache-dir --prefix=/usr \ + -c /tmp/build-constraints.txt \ + /wheels/*.whl + +RUN mkdir -p /configfiles/etc/aodh && \ + oslo-config-generator \ + --config-file ${SERVICE_SRC}/aodh/cmd/aodh-config-generator.conf \ + --output-file /configfiles/etc/aodh/aodh.conf && \ + sed -i "/#pybasedir.*/d" /configfiles/etc/aodh/aodh.conf && \ + cp -a ${SERVICE_SRC}/aodh/api/api-paste.ini /configfiles/etc/aodh/ + +# --- Runtime stage --- +FROM ${BASE_IMAGE} + +LABEL summary="OpenStack Aodh API" \ + io.k8s.description="Aodh alarming API container built from source with kolla interface" + +RUN uid_gid_manage aodh + +COPY aodh-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 aodh-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 \ + /wheels/*.whl ${extrapkgs} && \ + rm -rf /wheels /tmp/pythondeps.txt + +RUN mkdir -p /etc/aodh /var/log/aodh /var/lib/aodh /var/lib/aodh/tmp && \ + chmod 750 /var/log/aodh && \ + chown -R aodh:aodh /etc/aodh /var/log/aodh /var/lib/aodh + +COPY --from=build /configfiles/etc/aodh/aodh.conf /etc/aodh/aodh.conf +COPY --from=build /configfiles/etc/aodh/api-paste.ini /etc/aodh/api-paste.ini +COPY common/config/usr/share/aodh/aodh-dist.conf /usr/share/aodh/aodh-dist.conf + +RUN chmod 640 /etc/aodh/aodh.conf \ + /etc/aodh/api-paste.ini && \ + chmod 640 /usr/share/aodh/aodh-dist.conf && \ + chown -R root:aodh /etc/aodh /usr/share/aodh + +# WSGI setup: copy aodh-api to cgi-bin and configure httpd +RUN mkdir -p /var/www/cgi-bin/aodh && \ + chmod 755 /var/www/cgi-bin/aodh && \ + cp -a /usr/bin/aodh-api /var/www/cgi-bin/aodh/ && \ + 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 aodh + +USER aodh diff --git a/containers/aodh/aodh-api/bindeps.txt b/containers/aodh/aodh-api/bindeps.txt new file mode 100644 index 0000000..762af80 --- /dev/null +++ b/containers/aodh/aodh-api/bindeps.txt @@ -0,0 +1,4 @@ +# Apache httpd for WSGI +httpd +mod_ssl +python3-mod_wsgi diff --git a/containers/aodh/aodh-api/builddeps.txt b/containers/aodh/aodh-api/builddeps.txt new file mode 100644 index 0000000..1135c4b --- /dev/null +++ b/containers/aodh/aodh-api/builddeps.txt @@ -0,0 +1,10 @@ +git-core +gcc +gcc-c++ +python3-devel +python3-setuptools +python3-wheel +libffi-devel +openssl-devel +libxml2-devel +libxslt-devel diff --git a/containers/aodh/aodh-api/pythonbuilddeps.txt b/containers/aodh/aodh-api/pythonbuilddeps.txt new file mode 100644 index 0000000..1d45dc6 --- /dev/null +++ b/containers/aodh/aodh-api/pythonbuilddeps.txt @@ -0,0 +1 @@ +pbr diff --git a/containers/aodh/aodh-api/pythondeps.txt b/containers/aodh/aodh-api/pythondeps.txt new file mode 100644 index 0000000..3603265 --- /dev/null +++ b/containers/aodh/aodh-api/pythondeps.txt @@ -0,0 +1,2 @@ +# Database driver (mysql extra for oslo.db) +oslo.db[mysql] diff --git a/containers/aodh/aodh-api/src/.gitkeep b/containers/aodh/aodh-api/src/.gitkeep new file mode 100644 index 0000000..e69de29 diff --git a/containers/aodh/aodh-evaluator/Containerfile b/containers/aodh/aodh-evaluator/Containerfile new file mode 100644 index 0000000..55adb57 --- /dev/null +++ b/containers/aodh/aodh-evaluator/Containerfile @@ -0,0 +1,92 @@ +ARG BASE_IMAGE=localhost/openstack/openstack-base:latest + +# --- Build stage: compile wheels and collect upstream config --- +FROM ${BASE_IMAGE} AS build + +ARG SERVICE_SRC=/src/aodh + +ARG CONSTRAINTS_FILE=requirements.lock +COPY ${CONSTRAINTS_FILE} /deps-upper-constraints.txt +COPY src/ /src/ +COPY aodh-evaluator/src/ /src/ + +COPY aodh-evaluator/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 aodh-evaluator/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-build-isolation --no-deps \ + --wheel-dir=/wheels "${pkg}"; \ + fi; \ + done + +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/${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 pip3 install --no-cache-dir --prefix=/usr \ + -c /tmp/build-constraints.txt \ + /wheels/*.whl + +RUN mkdir -p /configfiles/etc/aodh && \ + oslo-config-generator \ + --config-file ${SERVICE_SRC}/aodh/cmd/aodh-config-generator.conf \ + --output-file /configfiles/etc/aodh/aodh.conf && \ + sed -i "/#pybasedir.*/d" /configfiles/etc/aodh/aodh.conf && \ + cp -a ${SERVICE_SRC}/aodh/api/api-paste.ini /configfiles/etc/aodh/ + +# --- Runtime stage --- +FROM ${BASE_IMAGE} + +LABEL summary="OpenStack Aodh Evaluator" \ + io.k8s.description="Aodh alarm evaluator container built from source with kolla interface" + +RUN uid_gid_manage aodh + +COPY aodh-evaluator/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 aodh-evaluator/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 \ + /wheels/*.whl ${extrapkgs} && \ + rm -rf /wheels /tmp/pythondeps.txt + +RUN mkdir -p /etc/aodh /var/log/aodh /var/lib/aodh /var/lib/aodh/tmp && \ + chmod 750 /var/log/aodh && \ + chown -R aodh:aodh /etc/aodh /var/log/aodh /var/lib/aodh + +COPY --from=build /configfiles/etc/aodh/aodh.conf /etc/aodh/aodh.conf +COPY --from=build /configfiles/etc/aodh/api-paste.ini /etc/aodh/api-paste.ini +COPY common/config/usr/share/aodh/aodh-dist.conf /usr/share/aodh/aodh-dist.conf + +RUN chmod 640 /etc/aodh/aodh.conf \ + /etc/aodh/api-paste.ini && \ + chmod 640 /usr/share/aodh/aodh-dist.conf && \ + chown -R root:aodh /etc/aodh /usr/share/aodh + +USER aodh diff --git a/containers/aodh/aodh-evaluator/bindeps.txt b/containers/aodh/aodh-evaluator/bindeps.txt new file mode 100644 index 0000000..44e1e94 --- /dev/null +++ b/containers/aodh/aodh-evaluator/bindeps.txt @@ -0,0 +1 @@ +# No extra system dependencies for evaluator diff --git a/containers/aodh/aodh-evaluator/builddeps.txt b/containers/aodh/aodh-evaluator/builddeps.txt new file mode 100644 index 0000000..1135c4b --- /dev/null +++ b/containers/aodh/aodh-evaluator/builddeps.txt @@ -0,0 +1,10 @@ +git-core +gcc +gcc-c++ +python3-devel +python3-setuptools +python3-wheel +libffi-devel +openssl-devel +libxml2-devel +libxslt-devel diff --git a/containers/aodh/aodh-evaluator/pythonbuilddeps.txt b/containers/aodh/aodh-evaluator/pythonbuilddeps.txt new file mode 100644 index 0000000..1d45dc6 --- /dev/null +++ b/containers/aodh/aodh-evaluator/pythonbuilddeps.txt @@ -0,0 +1 @@ +pbr diff --git a/containers/aodh/aodh-evaluator/pythondeps.txt b/containers/aodh/aodh-evaluator/pythondeps.txt new file mode 100644 index 0000000..3603265 --- /dev/null +++ b/containers/aodh/aodh-evaluator/pythondeps.txt @@ -0,0 +1,2 @@ +# Database driver (mysql extra for oslo.db) +oslo.db[mysql] diff --git a/containers/aodh/aodh-evaluator/src/.gitkeep b/containers/aodh/aodh-evaluator/src/.gitkeep new file mode 100644 index 0000000..e69de29 diff --git a/containers/aodh/aodh-listener/Containerfile b/containers/aodh/aodh-listener/Containerfile new file mode 100644 index 0000000..37dc066 --- /dev/null +++ b/containers/aodh/aodh-listener/Containerfile @@ -0,0 +1,92 @@ +ARG BASE_IMAGE=localhost/openstack/openstack-base:latest + +# --- Build stage: compile wheels and collect upstream config --- +FROM ${BASE_IMAGE} AS build + +ARG SERVICE_SRC=/src/aodh + +ARG CONSTRAINTS_FILE=requirements.lock +COPY ${CONSTRAINTS_FILE} /deps-upper-constraints.txt +COPY src/ /src/ +COPY aodh-listener/src/ /src/ + +COPY aodh-listener/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 aodh-listener/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-build-isolation --no-deps \ + --wheel-dir=/wheels "${pkg}"; \ + fi; \ + done + +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/${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 pip3 install --no-cache-dir --prefix=/usr \ + -c /tmp/build-constraints.txt \ + /wheels/*.whl + +RUN mkdir -p /configfiles/etc/aodh && \ + oslo-config-generator \ + --config-file ${SERVICE_SRC}/aodh/cmd/aodh-config-generator.conf \ + --output-file /configfiles/etc/aodh/aodh.conf && \ + sed -i "/#pybasedir.*/d" /configfiles/etc/aodh/aodh.conf && \ + cp -a ${SERVICE_SRC}/aodh/api/api-paste.ini /configfiles/etc/aodh/ + +# --- Runtime stage --- +FROM ${BASE_IMAGE} + +LABEL summary="OpenStack Aodh Listener" \ + io.k8s.description="Aodh alarm event listener container built from source with kolla interface" + +RUN uid_gid_manage aodh + +COPY aodh-listener/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 aodh-listener/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 \ + /wheels/*.whl ${extrapkgs} && \ + rm -rf /wheels /tmp/pythondeps.txt + +RUN mkdir -p /etc/aodh /var/log/aodh /var/lib/aodh /var/lib/aodh/tmp && \ + chmod 750 /var/log/aodh && \ + chown -R aodh:aodh /etc/aodh /var/log/aodh /var/lib/aodh + +COPY --from=build /configfiles/etc/aodh/aodh.conf /etc/aodh/aodh.conf +COPY --from=build /configfiles/etc/aodh/api-paste.ini /etc/aodh/api-paste.ini +COPY common/config/usr/share/aodh/aodh-dist.conf /usr/share/aodh/aodh-dist.conf + +RUN chmod 640 /etc/aodh/aodh.conf \ + /etc/aodh/api-paste.ini && \ + chmod 640 /usr/share/aodh/aodh-dist.conf && \ + chown -R root:aodh /etc/aodh /usr/share/aodh + +USER aodh diff --git a/containers/aodh/aodh-listener/bindeps.txt b/containers/aodh/aodh-listener/bindeps.txt new file mode 100644 index 0000000..754281a --- /dev/null +++ b/containers/aodh/aodh-listener/bindeps.txt @@ -0,0 +1 @@ +# No extra system dependencies for listener diff --git a/containers/aodh/aodh-listener/builddeps.txt b/containers/aodh/aodh-listener/builddeps.txt new file mode 100644 index 0000000..1135c4b --- /dev/null +++ b/containers/aodh/aodh-listener/builddeps.txt @@ -0,0 +1,10 @@ +git-core +gcc +gcc-c++ +python3-devel +python3-setuptools +python3-wheel +libffi-devel +openssl-devel +libxml2-devel +libxslt-devel diff --git a/containers/aodh/aodh-listener/pythonbuilddeps.txt b/containers/aodh/aodh-listener/pythonbuilddeps.txt new file mode 100644 index 0000000..1d45dc6 --- /dev/null +++ b/containers/aodh/aodh-listener/pythonbuilddeps.txt @@ -0,0 +1 @@ +pbr diff --git a/containers/aodh/aodh-listener/pythondeps.txt b/containers/aodh/aodh-listener/pythondeps.txt new file mode 100644 index 0000000..3603265 --- /dev/null +++ b/containers/aodh/aodh-listener/pythondeps.txt @@ -0,0 +1,2 @@ +# Database driver (mysql extra for oslo.db) +oslo.db[mysql] diff --git a/containers/aodh/aodh-listener/src/.gitkeep b/containers/aodh/aodh-listener/src/.gitkeep new file mode 100644 index 0000000..e69de29 diff --git a/containers/aodh/aodh-notifier/Containerfile b/containers/aodh/aodh-notifier/Containerfile new file mode 100644 index 0000000..3e1e88b --- /dev/null +++ b/containers/aodh/aodh-notifier/Containerfile @@ -0,0 +1,92 @@ +ARG BASE_IMAGE=localhost/openstack/openstack-base:latest + +# --- Build stage: compile wheels and collect upstream config --- +FROM ${BASE_IMAGE} AS build + +ARG SERVICE_SRC=/src/aodh + +ARG CONSTRAINTS_FILE=requirements.lock +COPY ${CONSTRAINTS_FILE} /deps-upper-constraints.txt +COPY src/ /src/ +COPY aodh-notifier/src/ /src/ + +COPY aodh-notifier/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 aodh-notifier/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-build-isolation --no-deps \ + --wheel-dir=/wheels "${pkg}"; \ + fi; \ + done + +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/${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 pip3 install --no-cache-dir --prefix=/usr \ + -c /tmp/build-constraints.txt \ + /wheels/*.whl + +RUN mkdir -p /configfiles/etc/aodh && \ + oslo-config-generator \ + --config-file ${SERVICE_SRC}/aodh/cmd/aodh-config-generator.conf \ + --output-file /configfiles/etc/aodh/aodh.conf && \ + sed -i "/#pybasedir.*/d" /configfiles/etc/aodh/aodh.conf && \ + cp -a ${SERVICE_SRC}/aodh/api/api-paste.ini /configfiles/etc/aodh/ + +# --- Runtime stage --- +FROM ${BASE_IMAGE} + +LABEL summary="OpenStack Aodh Notifier" \ + io.k8s.description="Aodh alarm notifier container built from source with kolla interface" + +RUN uid_gid_manage aodh + +COPY aodh-notifier/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 aodh-notifier/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 \ + /wheels/*.whl ${extrapkgs} && \ + rm -rf /wheels /tmp/pythondeps.txt + +RUN mkdir -p /etc/aodh /var/log/aodh /var/lib/aodh /var/lib/aodh/tmp && \ + chmod 750 /var/log/aodh && \ + chown -R aodh:aodh /etc/aodh /var/log/aodh /var/lib/aodh + +COPY --from=build /configfiles/etc/aodh/aodh.conf /etc/aodh/aodh.conf +COPY --from=build /configfiles/etc/aodh/api-paste.ini /etc/aodh/api-paste.ini +COPY common/config/usr/share/aodh/aodh-dist.conf /usr/share/aodh/aodh-dist.conf + +RUN chmod 640 /etc/aodh/aodh.conf \ + /etc/aodh/api-paste.ini && \ + chmod 640 /usr/share/aodh/aodh-dist.conf && \ + chown -R root:aodh /etc/aodh /usr/share/aodh + +USER aodh diff --git a/containers/aodh/aodh-notifier/bindeps.txt b/containers/aodh/aodh-notifier/bindeps.txt new file mode 100644 index 0000000..3511c5b --- /dev/null +++ b/containers/aodh/aodh-notifier/bindeps.txt @@ -0,0 +1 @@ +# No extra system dependencies for notifier diff --git a/containers/aodh/aodh-notifier/builddeps.txt b/containers/aodh/aodh-notifier/builddeps.txt new file mode 100644 index 0000000..1135c4b --- /dev/null +++ b/containers/aodh/aodh-notifier/builddeps.txt @@ -0,0 +1,10 @@ +git-core +gcc +gcc-c++ +python3-devel +python3-setuptools +python3-wheel +libffi-devel +openssl-devel +libxml2-devel +libxslt-devel diff --git a/containers/aodh/aodh-notifier/pythonbuilddeps.txt b/containers/aodh/aodh-notifier/pythonbuilddeps.txt new file mode 100644 index 0000000..1d45dc6 --- /dev/null +++ b/containers/aodh/aodh-notifier/pythonbuilddeps.txt @@ -0,0 +1 @@ +pbr diff --git a/containers/aodh/aodh-notifier/pythondeps.txt b/containers/aodh/aodh-notifier/pythondeps.txt new file mode 100644 index 0000000..3603265 --- /dev/null +++ b/containers/aodh/aodh-notifier/pythondeps.txt @@ -0,0 +1,2 @@ +# Database driver (mysql extra for oslo.db) +oslo.db[mysql] diff --git a/containers/aodh/aodh-notifier/src/.gitkeep b/containers/aodh/aodh-notifier/src/.gitkeep new file mode 100644 index 0000000..e69de29 diff --git a/containers/aodh/common/config/usr/share/aodh/aodh-dist.conf b/containers/aodh/common/config/usr/share/aodh/aodh-dist.conf new file mode 100644 index 0000000..b64aadb --- /dev/null +++ b/containers/aodh/common/config/usr/share/aodh/aodh-dist.conf @@ -0,0 +1,3 @@ +[DEFAULT] +log_dir = /var/log/aodh +use_stderr = False diff --git a/containers/aodh/sources.txt b/containers/aodh/sources.txt new file mode 100644 index 0000000..6661d25 --- /dev/null +++ b/containers/aodh/sources.txt @@ -0,0 +1,3 @@ +# stream name repo branch pinned-hash +master upper-constraints https://opendev.org/openstack/requirements.git master 22c7e800bda7e90d83ab215df50a610477e623d0 +master aodh https://opendev.org/openstack/aodh.git master c712b95314d3684934b8d7cf1d400cc103c54fdf diff --git a/containers/aodh/src/.gitkeep b/containers/aodh/src/.gitkeep new file mode 100644 index 0000000..e69de29 diff --git a/containers/aodh/upper-constraints.txt.master b/containers/aodh/upper-constraints.txt.master new file mode 100644 index 0000000..929a523 --- /dev/null +++ b/containers/aodh/upper-constraints.txt.master @@ -0,0 +1,581 @@ +# 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.2.4 +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 +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 diff --git a/containers/ceilometer/ceilometer-central/Containerfile b/containers/ceilometer/ceilometer-central/Containerfile new file mode 100644 index 0000000..f823030 --- /dev/null +++ b/containers/ceilometer/ceilometer-central/Containerfile @@ -0,0 +1,99 @@ +ARG BASE_IMAGE=localhost/openstack/openstack-base:latest + +# --- Build stage: compile wheels and collect upstream config --- +FROM ${BASE_IMAGE} AS build + +ARG SERVICE_SRC=/src/ceilometer + +ARG CONSTRAINTS_FILE=requirements.lock +COPY ${CONSTRAINTS_FILE} /deps-upper-constraints.txt +COPY src/ /src/ +COPY ceilometer-central/src/ /src/ + +COPY ceilometer-central/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 ceilometer-central/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-build-isolation --no-deps \ + --wheel-dir=/wheels "${pkg}"; \ + fi; \ + done + +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/${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 pip3 install --no-cache-dir --prefix=/usr \ + -c /tmp/build-constraints.txt \ + /wheels/*.whl + +RUN mkdir -p /configfiles/etc/ceilometer && \ + oslo-config-generator \ + --config-file ${SERVICE_SRC}/etc/ceilometer/ceilometer-config-generator.conf \ + --output-file /configfiles/etc/ceilometer/ceilometer.conf && \ + sed -i "/#pybasedir.*/d" /configfiles/etc/ceilometer/ceilometer.conf && \ + sed -i 's/#meter_definitions_dirs.*/#meter_definitions_dirs =/g' /configfiles/etc/ceilometer/ceilometer.conf && \ + cp -a ${SERVICE_SRC}/ceilometer/pipeline/data/pipeline.yaml /configfiles/etc/ceilometer/ && \ + cp -a ${SERVICE_SRC}/etc/ceilometer/polling.yaml /configfiles/etc/ceilometer/ && \ + cp -a ${SERVICE_SRC}/ceilometer/publisher/data/gnocchi_resources.yaml /configfiles/etc/ceilometer/ + +# --- Runtime stage --- +FROM ${BASE_IMAGE} + +LABEL summary="OpenStack Ceilometer Central Agent" \ + io.k8s.description="Ceilometer central polling agent container built from source with kolla interface" + +RUN uid_gid_manage ceilometer + +COPY ceilometer-central/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 ceilometer-central/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 \ + /wheels/*.whl ${extrapkgs} && \ + rm -rf /wheels /tmp/pythondeps.txt + +RUN mkdir -p /etc/ceilometer /var/log/ceilometer /var/lib/ceilometer /var/lib/ceilometer/tmp && \ + chmod 750 /var/log/ceilometer && \ + chown -R ceilometer:ceilometer /etc/ceilometer /var/log/ceilometer /var/lib/ceilometer + +COPY --from=build /configfiles/etc/ceilometer/ceilometer.conf /etc/ceilometer/ceilometer.conf +COPY --from=build /configfiles/etc/ceilometer/pipeline.yaml /etc/ceilometer/pipeline.yaml +COPY --from=build /configfiles/etc/ceilometer/polling.yaml /etc/ceilometer/polling.yaml +COPY --from=build /configfiles/etc/ceilometer/gnocchi_resources.yaml /etc/ceilometer/gnocchi_resources.yaml +COPY common/config/usr/share/ceilometer/ceilometer-dist.conf /usr/share/ceilometer/ceilometer-dist.conf + +RUN chmod 640 /etc/ceilometer/ceilometer.conf \ + /etc/ceilometer/pipeline.yaml \ + /etc/ceilometer/polling.yaml \ + /etc/ceilometer/gnocchi_resources.yaml && \ + chmod 640 /usr/share/ceilometer/ceilometer-dist.conf && \ + chown -R root:ceilometer /etc/ceilometer /usr/share/ceilometer + +USER ceilometer diff --git a/containers/ceilometer/ceilometer-central/bindeps.txt b/containers/ceilometer/ceilometer-central/bindeps.txt new file mode 100644 index 0000000..e613c3b --- /dev/null +++ b/containers/ceilometer/ceilometer-central/bindeps.txt @@ -0,0 +1 @@ +# No extra system dependencies for central agent diff --git a/containers/ceilometer/ceilometer-central/builddeps.txt b/containers/ceilometer/ceilometer-central/builddeps.txt new file mode 100644 index 0000000..1135c4b --- /dev/null +++ b/containers/ceilometer/ceilometer-central/builddeps.txt @@ -0,0 +1,10 @@ +git-core +gcc +gcc-c++ +python3-devel +python3-setuptools +python3-wheel +libffi-devel +openssl-devel +libxml2-devel +libxslt-devel diff --git a/containers/ceilometer/ceilometer-central/pythonbuilddeps.txt b/containers/ceilometer/ceilometer-central/pythonbuilddeps.txt new file mode 100644 index 0000000..1d45dc6 --- /dev/null +++ b/containers/ceilometer/ceilometer-central/pythonbuilddeps.txt @@ -0,0 +1 @@ +pbr diff --git a/containers/ceilometer/ceilometer-central/pythondeps.txt b/containers/ceilometer/ceilometer-central/pythondeps.txt new file mode 100644 index 0000000..3bc7f3c --- /dev/null +++ b/containers/ceilometer/ceilometer-central/pythondeps.txt @@ -0,0 +1,2 @@ +# Caching backend +oslo.cache[dogpile] diff --git a/containers/ceilometer/ceilometer-central/src/.gitkeep b/containers/ceilometer/ceilometer-central/src/.gitkeep new file mode 100644 index 0000000..e69de29 diff --git a/containers/ceilometer/ceilometer-compute/Containerfile b/containers/ceilometer/ceilometer-compute/Containerfile new file mode 100644 index 0000000..0bb1322 --- /dev/null +++ b/containers/ceilometer/ceilometer-compute/Containerfile @@ -0,0 +1,99 @@ +ARG BASE_IMAGE=localhost/openstack/openstack-base:latest + +# --- Build stage: compile wheels and collect upstream config --- +FROM ${BASE_IMAGE} AS build + +ARG SERVICE_SRC=/src/ceilometer + +ARG CONSTRAINTS_FILE=requirements.lock +COPY ${CONSTRAINTS_FILE} /deps-upper-constraints.txt +COPY src/ /src/ +COPY ceilometer-compute/src/ /src/ + +COPY ceilometer-compute/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 ceilometer-compute/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-build-isolation --no-deps \ + --wheel-dir=/wheels "${pkg}"; \ + fi; \ + done + +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/${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 pip3 install --no-cache-dir --prefix=/usr \ + -c /tmp/build-constraints.txt \ + /wheels/*.whl + +RUN mkdir -p /configfiles/etc/ceilometer && \ + oslo-config-generator \ + --config-file ${SERVICE_SRC}/etc/ceilometer/ceilometer-config-generator.conf \ + --output-file /configfiles/etc/ceilometer/ceilometer.conf && \ + sed -i "/#pybasedir.*/d" /configfiles/etc/ceilometer/ceilometer.conf && \ + sed -i 's/#meter_definitions_dirs.*/#meter_definitions_dirs =/g' /configfiles/etc/ceilometer/ceilometer.conf && \ + cp -a ${SERVICE_SRC}/ceilometer/pipeline/data/pipeline.yaml /configfiles/etc/ceilometer/ && \ + cp -a ${SERVICE_SRC}/etc/ceilometer/polling.yaml /configfiles/etc/ceilometer/ && \ + cp -a ${SERVICE_SRC}/ceilometer/publisher/data/gnocchi_resources.yaml /configfiles/etc/ceilometer/ + +# --- Runtime stage --- +FROM ${BASE_IMAGE} + +LABEL summary="OpenStack Ceilometer Compute Agent" \ + io.k8s.description="Ceilometer compute polling agent container built from source with kolla interface" + +RUN uid_gid_manage ceilometer + +COPY ceilometer-compute/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 ceilometer-compute/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 \ + /wheels/*.whl ${extrapkgs} && \ + rm -rf /wheels /tmp/pythondeps.txt + +RUN mkdir -p /etc/ceilometer /var/log/ceilometer /var/lib/ceilometer /var/lib/ceilometer/tmp && \ + chmod 750 /var/log/ceilometer && \ + chown -R ceilometer:ceilometer /etc/ceilometer /var/log/ceilometer /var/lib/ceilometer + +COPY --from=build /configfiles/etc/ceilometer/ceilometer.conf /etc/ceilometer/ceilometer.conf +COPY --from=build /configfiles/etc/ceilometer/pipeline.yaml /etc/ceilometer/pipeline.yaml +COPY --from=build /configfiles/etc/ceilometer/polling.yaml /etc/ceilometer/polling.yaml +COPY --from=build /configfiles/etc/ceilometer/gnocchi_resources.yaml /etc/ceilometer/gnocchi_resources.yaml +COPY common/config/usr/share/ceilometer/ceilometer-dist.conf /usr/share/ceilometer/ceilometer-dist.conf + +RUN chmod 640 /etc/ceilometer/ceilometer.conf \ + /etc/ceilometer/pipeline.yaml \ + /etc/ceilometer/polling.yaml \ + /etc/ceilometer/gnocchi_resources.yaml && \ + chmod 640 /usr/share/ceilometer/ceilometer-dist.conf && \ + chown -R root:ceilometer /etc/ceilometer /usr/share/ceilometer + +USER ceilometer diff --git a/containers/ceilometer/ceilometer-compute/bindeps.txt b/containers/ceilometer/ceilometer-compute/bindeps.txt new file mode 100644 index 0000000..4711718 --- /dev/null +++ b/containers/ceilometer/ceilometer-compute/bindeps.txt @@ -0,0 +1,2 @@ +# Libvirt Python bindings for hypervisor introspection +python3-libvirt diff --git a/containers/ceilometer/ceilometer-compute/builddeps.txt b/containers/ceilometer/ceilometer-compute/builddeps.txt new file mode 100644 index 0000000..1135c4b --- /dev/null +++ b/containers/ceilometer/ceilometer-compute/builddeps.txt @@ -0,0 +1,10 @@ +git-core +gcc +gcc-c++ +python3-devel +python3-setuptools +python3-wheel +libffi-devel +openssl-devel +libxml2-devel +libxslt-devel diff --git a/containers/ceilometer/ceilometer-compute/pythonbuilddeps.txt b/containers/ceilometer/ceilometer-compute/pythonbuilddeps.txt new file mode 100644 index 0000000..1d45dc6 --- /dev/null +++ b/containers/ceilometer/ceilometer-compute/pythonbuilddeps.txt @@ -0,0 +1 @@ +pbr diff --git a/containers/ceilometer/ceilometer-compute/pythondeps.txt b/containers/ceilometer/ceilometer-compute/pythondeps.txt new file mode 100644 index 0000000..3bc7f3c --- /dev/null +++ b/containers/ceilometer/ceilometer-compute/pythondeps.txt @@ -0,0 +1,2 @@ +# Caching backend +oslo.cache[dogpile] diff --git a/containers/ceilometer/ceilometer-compute/src/.gitkeep b/containers/ceilometer/ceilometer-compute/src/.gitkeep new file mode 100644 index 0000000..e69de29 diff --git a/containers/ceilometer/ceilometer-ipmi/Containerfile b/containers/ceilometer/ceilometer-ipmi/Containerfile new file mode 100644 index 0000000..0b4e778 --- /dev/null +++ b/containers/ceilometer/ceilometer-ipmi/Containerfile @@ -0,0 +1,107 @@ +ARG BASE_IMAGE=localhost/openstack/openstack-base:latest + +# --- Build stage: compile wheels and collect upstream config --- +FROM ${BASE_IMAGE} AS build + +ARG SERVICE_SRC=/src/ceilometer + +ARG CONSTRAINTS_FILE=requirements.lock +COPY ${CONSTRAINTS_FILE} /deps-upper-constraints.txt +COPY src/ /src/ +COPY ceilometer-ipmi/src/ /src/ + +COPY ceilometer-ipmi/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 ceilometer-ipmi/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-build-isolation --no-deps \ + --wheel-dir=/wheels "${pkg}"; \ + fi; \ + done + +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/${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 pip3 install --no-cache-dir --prefix=/usr \ + -c /tmp/build-constraints.txt \ + /wheels/*.whl + +RUN mkdir -p /configfiles/etc/ceilometer/rootwrap.d && \ + oslo-config-generator \ + --config-file ${SERVICE_SRC}/etc/ceilometer/ceilometer-config-generator.conf \ + --output-file /configfiles/etc/ceilometer/ceilometer.conf && \ + sed -i "/#pybasedir.*/d" /configfiles/etc/ceilometer/ceilometer.conf && \ + sed -i 's/#meter_definitions_dirs.*/#meter_definitions_dirs =/g' /configfiles/etc/ceilometer/ceilometer.conf && \ + cp -a ${SERVICE_SRC}/ceilometer/pipeline/data/pipeline.yaml /configfiles/etc/ceilometer/ && \ + cp -a ${SERVICE_SRC}/etc/ceilometer/polling.yaml /configfiles/etc/ceilometer/ && \ + cp -a ${SERVICE_SRC}/ceilometer/publisher/data/gnocchi_resources.yaml /configfiles/etc/ceilometer/ && \ + cp -a ${SERVICE_SRC}/etc/ceilometer/rootwrap.conf /configfiles/etc/ceilometer/ && \ + cp -a ${SERVICE_SRC}/etc/ceilometer/rootwrap.d/ipmi.filters /configfiles/etc/ceilometer/rootwrap.d/ + +# --- Runtime stage --- +FROM ${BASE_IMAGE} + +LABEL summary="OpenStack Ceilometer IPMI Agent" \ + io.k8s.description="Ceilometer IPMI polling agent container built from source with kolla interface" + +RUN uid_gid_manage ceilometer + +COPY ceilometer-ipmi/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 ceilometer-ipmi/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 \ + /wheels/*.whl ${extrapkgs} && \ + rm -rf /wheels /tmp/pythondeps.txt + +RUN mkdir -p /etc/ceilometer/rootwrap.d /var/log/ceilometer /var/lib/ceilometer /var/lib/ceilometer/tmp && \ + chmod 750 /var/log/ceilometer && \ + chown -R ceilometer:ceilometer /etc/ceilometer /var/log/ceilometer /var/lib/ceilometer + +COPY --from=build /configfiles/etc/ceilometer/ceilometer.conf /etc/ceilometer/ceilometer.conf +COPY --from=build /configfiles/etc/ceilometer/pipeline.yaml /etc/ceilometer/pipeline.yaml +COPY --from=build /configfiles/etc/ceilometer/polling.yaml /etc/ceilometer/polling.yaml +COPY --from=build /configfiles/etc/ceilometer/gnocchi_resources.yaml /etc/ceilometer/gnocchi_resources.yaml +COPY --from=build /configfiles/etc/ceilometer/rootwrap.conf /etc/ceilometer/rootwrap.conf +COPY --from=build /configfiles/etc/ceilometer/rootwrap.d/ipmi.filters /etc/ceilometer/rootwrap.d/ipmi.filters +COPY common/config/usr/share/ceilometer/ceilometer-dist.conf /usr/share/ceilometer/ceilometer-dist.conf +COPY ceilometer-ipmi/config/etc/sudoers.d/ceilometer /etc/sudoers.d/ceilometer + +RUN chmod 640 /etc/ceilometer/ceilometer.conf \ + /etc/ceilometer/pipeline.yaml \ + /etc/ceilometer/polling.yaml \ + /etc/ceilometer/gnocchi_resources.yaml \ + /etc/ceilometer/rootwrap.conf \ + /etc/ceilometer/rootwrap.d/ipmi.filters && \ + chmod 640 /usr/share/ceilometer/ceilometer-dist.conf && \ + chmod 440 /etc/sudoers.d/ceilometer && \ + chown -R root:ceilometer /etc/ceilometer /usr/share/ceilometer + +USER ceilometer diff --git a/containers/ceilometer/ceilometer-ipmi/bindeps.txt b/containers/ceilometer/ceilometer-ipmi/bindeps.txt new file mode 100644 index 0000000..3d106fc --- /dev/null +++ b/containers/ceilometer/ceilometer-ipmi/bindeps.txt @@ -0,0 +1,2 @@ +# IPMI hardware monitoring tool +ipmitool diff --git a/containers/ceilometer/ceilometer-ipmi/builddeps.txt b/containers/ceilometer/ceilometer-ipmi/builddeps.txt new file mode 100644 index 0000000..1135c4b --- /dev/null +++ b/containers/ceilometer/ceilometer-ipmi/builddeps.txt @@ -0,0 +1,10 @@ +git-core +gcc +gcc-c++ +python3-devel +python3-setuptools +python3-wheel +libffi-devel +openssl-devel +libxml2-devel +libxslt-devel diff --git a/containers/ceilometer/ceilometer-ipmi/config/etc/sudoers.d/ceilometer b/containers/ceilometer/ceilometer-ipmi/config/etc/sudoers.d/ceilometer new file mode 100644 index 0000000..ba97166 --- /dev/null +++ b/containers/ceilometer/ceilometer-ipmi/config/etc/sudoers.d/ceilometer @@ -0,0 +1,2 @@ +Defaults:ceilometer !requiretty +ceilometer ALL = (root) NOPASSWD: /usr/bin/ceilometer-rootwrap /etc/ceilometer/rootwrap.conf * diff --git a/containers/ceilometer/ceilometer-ipmi/pythonbuilddeps.txt b/containers/ceilometer/ceilometer-ipmi/pythonbuilddeps.txt new file mode 100644 index 0000000..1d45dc6 --- /dev/null +++ b/containers/ceilometer/ceilometer-ipmi/pythonbuilddeps.txt @@ -0,0 +1 @@ +pbr diff --git a/containers/ceilometer/ceilometer-ipmi/pythondeps.txt b/containers/ceilometer/ceilometer-ipmi/pythondeps.txt new file mode 100644 index 0000000..3bc7f3c --- /dev/null +++ b/containers/ceilometer/ceilometer-ipmi/pythondeps.txt @@ -0,0 +1,2 @@ +# Caching backend +oslo.cache[dogpile] diff --git a/containers/ceilometer/ceilometer-ipmi/src/.gitkeep b/containers/ceilometer/ceilometer-ipmi/src/.gitkeep new file mode 100644 index 0000000..e69de29 diff --git a/containers/ceilometer/ceilometer-notification/Containerfile b/containers/ceilometer/ceilometer-notification/Containerfile new file mode 100644 index 0000000..3fe604b --- /dev/null +++ b/containers/ceilometer/ceilometer-notification/Containerfile @@ -0,0 +1,108 @@ +ARG BASE_IMAGE=localhost/openstack/openstack-base:latest + +# --- Build stage: compile wheels and collect upstream config --- +FROM ${BASE_IMAGE} AS build + +ARG SERVICE_SRC=/src/ceilometer + +ARG CONSTRAINTS_FILE=requirements.lock +COPY ${CONSTRAINTS_FILE} /deps-upper-constraints.txt +COPY src/ /src/ +COPY ceilometer-notification/src/ /src/ + +COPY ceilometer-notification/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 ceilometer-notification/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-build-isolation --no-deps \ + --wheel-dir=/wheels "${pkg}"; \ + fi; \ + done + +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/${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 pip3 install --no-cache-dir --prefix=/usr \ + -c /tmp/build-constraints.txt \ + /wheels/*.whl + +RUN mkdir -p /configfiles/etc/ceilometer/meters.d && \ + oslo-config-generator \ + --config-file ${SERVICE_SRC}/etc/ceilometer/ceilometer-config-generator.conf \ + --output-file /configfiles/etc/ceilometer/ceilometer.conf && \ + sed -i "/#pybasedir.*/d" /configfiles/etc/ceilometer/ceilometer.conf && \ + sed -i 's/#meter_definitions_dirs.*/#meter_definitions_dirs =/g' /configfiles/etc/ceilometer/ceilometer.conf && \ + cp -a ${SERVICE_SRC}/ceilometer/pipeline/data/pipeline.yaml /configfiles/etc/ceilometer/ && \ + cp -a ${SERVICE_SRC}/etc/ceilometer/polling.yaml /configfiles/etc/ceilometer/ && \ + cp -a ${SERVICE_SRC}/ceilometer/publisher/data/gnocchi_resources.yaml /configfiles/etc/ceilometer/ && \ + cp -a ${SERVICE_SRC}/ceilometer/pipeline/data/event_pipeline.yaml /configfiles/etc/ceilometer/ && \ + cp -a ${SERVICE_SRC}/ceilometer/pipeline/data/event_definitions.yaml /configfiles/etc/ceilometer/ && \ + cp -a ${SERVICE_SRC}/ceilometer/data/meters.d/meters.yaml /configfiles/etc/ceilometer/meters.d/ + +# --- Runtime stage --- +FROM ${BASE_IMAGE} + +LABEL summary="OpenStack Ceilometer Notification Agent" \ + io.k8s.description="Ceilometer notification agent container built from source with kolla interface" + +RUN uid_gid_manage ceilometer + +COPY ceilometer-notification/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 ceilometer-notification/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 \ + /wheels/*.whl ${extrapkgs} && \ + rm -rf /wheels /tmp/pythondeps.txt + +RUN mkdir -p /etc/ceilometer/meters.d /var/log/ceilometer /var/lib/ceilometer /var/lib/ceilometer/tmp && \ + chmod 750 /var/log/ceilometer && \ + chown -R ceilometer:ceilometer /etc/ceilometer /var/log/ceilometer /var/lib/ceilometer + +COPY --from=build /configfiles/etc/ceilometer/ceilometer.conf /etc/ceilometer/ceilometer.conf +COPY --from=build /configfiles/etc/ceilometer/pipeline.yaml /etc/ceilometer/pipeline.yaml +COPY --from=build /configfiles/etc/ceilometer/polling.yaml /etc/ceilometer/polling.yaml +COPY --from=build /configfiles/etc/ceilometer/gnocchi_resources.yaml /etc/ceilometer/gnocchi_resources.yaml +COPY --from=build /configfiles/etc/ceilometer/event_pipeline.yaml /etc/ceilometer/event_pipeline.yaml +COPY --from=build /configfiles/etc/ceilometer/event_definitions.yaml /etc/ceilometer/event_definitions.yaml +COPY --from=build /configfiles/etc/ceilometer/meters.d/meters.yaml /etc/ceilometer/meters.d/meters.yaml +COPY common/config/usr/share/ceilometer/ceilometer-dist.conf /usr/share/ceilometer/ceilometer-dist.conf + +RUN chmod 640 /etc/ceilometer/ceilometer.conf \ + /etc/ceilometer/pipeline.yaml \ + /etc/ceilometer/polling.yaml \ + /etc/ceilometer/gnocchi_resources.yaml \ + /etc/ceilometer/event_pipeline.yaml \ + /etc/ceilometer/event_definitions.yaml \ + /etc/ceilometer/meters.d/meters.yaml && \ + chmod 640 /usr/share/ceilometer/ceilometer-dist.conf && \ + chown -R root:ceilometer /etc/ceilometer /usr/share/ceilometer + +USER ceilometer diff --git a/containers/ceilometer/ceilometer-notification/bindeps.txt b/containers/ceilometer/ceilometer-notification/bindeps.txt new file mode 100644 index 0000000..9460a5e --- /dev/null +++ b/containers/ceilometer/ceilometer-notification/bindeps.txt @@ -0,0 +1 @@ +# No extra system dependencies for notification agent diff --git a/containers/ceilometer/ceilometer-notification/builddeps.txt b/containers/ceilometer/ceilometer-notification/builddeps.txt new file mode 100644 index 0000000..1135c4b --- /dev/null +++ b/containers/ceilometer/ceilometer-notification/builddeps.txt @@ -0,0 +1,10 @@ +git-core +gcc +gcc-c++ +python3-devel +python3-setuptools +python3-wheel +libffi-devel +openssl-devel +libxml2-devel +libxslt-devel diff --git a/containers/ceilometer/ceilometer-notification/pythonbuilddeps.txt b/containers/ceilometer/ceilometer-notification/pythonbuilddeps.txt new file mode 100644 index 0000000..1d45dc6 --- /dev/null +++ b/containers/ceilometer/ceilometer-notification/pythonbuilddeps.txt @@ -0,0 +1 @@ +pbr diff --git a/containers/ceilometer/ceilometer-notification/pythondeps.txt b/containers/ceilometer/ceilometer-notification/pythondeps.txt new file mode 100644 index 0000000..3bc7f3c --- /dev/null +++ b/containers/ceilometer/ceilometer-notification/pythondeps.txt @@ -0,0 +1,2 @@ +# Caching backend +oslo.cache[dogpile] diff --git a/containers/ceilometer/ceilometer-notification/src/.gitkeep b/containers/ceilometer/ceilometer-notification/src/.gitkeep new file mode 100644 index 0000000..e69de29 diff --git a/containers/ceilometer/common/config/usr/share/ceilometer/ceilometer-dist.conf b/containers/ceilometer/common/config/usr/share/ceilometer/ceilometer-dist.conf new file mode 100644 index 0000000..090e3fe --- /dev/null +++ b/containers/ceilometer/common/config/usr/share/ceilometer/ceilometer-dist.conf @@ -0,0 +1,3 @@ +[DEFAULT] +log_dir = /var/log/ceilometer +use_stderr = False diff --git a/containers/ceilometer/sources.txt b/containers/ceilometer/sources.txt new file mode 100644 index 0000000..653fbea --- /dev/null +++ b/containers/ceilometer/sources.txt @@ -0,0 +1,3 @@ +# stream name repo branch pinned-hash +master upper-constraints https://opendev.org/openstack/requirements.git master 22c7e800bda7e90d83ab215df50a610477e623d0 +master ceilometer https://opendev.org/openstack/ceilometer.git master 1f1fea4d276003fda1da7ddf882474cb73b8db63 diff --git a/containers/ceilometer/src/.gitkeep b/containers/ceilometer/src/.gitkeep new file mode 100644 index 0000000..e69de29 diff --git a/containers/cloudkitty/cloudkitty-api/Containerfile b/containers/cloudkitty/cloudkitty-api/Containerfile new file mode 100644 index 0000000..6bb0b3d --- /dev/null +++ b/containers/cloudkitty/cloudkitty-api/Containerfile @@ -0,0 +1,103 @@ +ARG BASE_IMAGE=localhost/openstack/openstack-base:latest + +# --- Build stage: compile wheels and collect upstream config --- +FROM ${BASE_IMAGE} AS build + +ARG SERVICE_SRC=/src/cloudkitty + +ARG CONSTRAINTS_FILE=requirements.lock +COPY ${CONSTRAINTS_FILE} /deps-upper-constraints.txt +COPY src/ /src/ +COPY cloudkitty-api/src/ /src/ + +COPY cloudkitty-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 cloudkitty-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-build-isolation --no-deps \ + --wheel-dir=/wheels "${pkg}"; \ + fi; \ + done + +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/${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 pip3 install --no-cache-dir --prefix=/usr \ + -c /tmp/build-constraints.txt \ + /wheels/*.whl + +RUN mkdir -p /configfiles/etc/cloudkitty && \ + oslo-config-generator \ + --config-file ${SERVICE_SRC}/etc/oslo-config-generator/cloudkitty.conf \ + --output-file /configfiles/etc/cloudkitty/cloudkitty.conf && \ + sed -i "/#pybasedir.*/d" /configfiles/etc/cloudkitty/cloudkitty.conf && \ + cp -a ${SERVICE_SRC}/etc/cloudkitty/api_paste.ini /configfiles/etc/cloudkitty/ && \ + cp -a ${SERVICE_SRC}/etc/cloudkitty/metrics.yml /configfiles/etc/cloudkitty/ + +# --- Runtime stage --- +FROM ${BASE_IMAGE} + +LABEL summary="OpenStack CloudKitty API" \ + io.k8s.description="CloudKitty rating API container built from source with kolla interface" + +RUN uid_gid_manage cloudkitty + +COPY cloudkitty-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 cloudkitty-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 \ + /wheels/*.whl ${extrapkgs} && \ + rm -rf /wheels /tmp/pythondeps.txt + +RUN mkdir -p /etc/cloudkitty /var/log/cloudkitty /var/run/cloudkitty /var/lib/cloudkitty && \ + chmod 750 /var/log/cloudkitty && \ + chown -R cloudkitty:cloudkitty /etc/cloudkitty /var/log/cloudkitty /var/run/cloudkitty /var/lib/cloudkitty + +COPY --from=build /configfiles/etc/cloudkitty/cloudkitty.conf /etc/cloudkitty/cloudkitty.conf +COPY --from=build /configfiles/etc/cloudkitty/api_paste.ini /etc/cloudkitty/api_paste.ini +COPY --from=build /configfiles/etc/cloudkitty/metrics.yml /etc/cloudkitty/metrics.yml +COPY common/config/usr/bin/cloudkitty-api /usr/bin/cloudkitty-api + +RUN chmod 640 /etc/cloudkitty/cloudkitty.conf \ + /etc/cloudkitty/api_paste.ini \ + /etc/cloudkitty/metrics.yml && \ + chmod 755 /usr/bin/cloudkitty-api && \ + chown -R root:cloudkitty /etc/cloudkitty + +# WSGI setup: copy cloudkitty-api to cgi-bin and configure httpd +RUN mkdir -p /var/www/cgi-bin/cloudkitty && \ + chmod 755 /var/www/cgi-bin/cloudkitty && \ + cp -a /usr/bin/cloudkitty-api /var/www/cgi-bin/cloudkitty/ && \ + 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 cloudkitty + +USER cloudkitty diff --git a/containers/cloudkitty/cloudkitty-api/bindeps.txt b/containers/cloudkitty/cloudkitty-api/bindeps.txt new file mode 100644 index 0000000..762af80 --- /dev/null +++ b/containers/cloudkitty/cloudkitty-api/bindeps.txt @@ -0,0 +1,4 @@ +# Apache httpd for WSGI +httpd +mod_ssl +python3-mod_wsgi diff --git a/containers/cloudkitty/cloudkitty-api/builddeps.txt b/containers/cloudkitty/cloudkitty-api/builddeps.txt new file mode 100644 index 0000000..4d4d539 --- /dev/null +++ b/containers/cloudkitty/cloudkitty-api/builddeps.txt @@ -0,0 +1,8 @@ +git-core +gcc +gcc-c++ +python3-devel +python3-setuptools +python3-wheel +libffi-devel +openssl-devel diff --git a/containers/cloudkitty/cloudkitty-api/pythonbuilddeps.txt b/containers/cloudkitty/cloudkitty-api/pythonbuilddeps.txt new file mode 100644 index 0000000..1d45dc6 --- /dev/null +++ b/containers/cloudkitty/cloudkitty-api/pythonbuilddeps.txt @@ -0,0 +1 @@ +pbr diff --git a/containers/cloudkitty/cloudkitty-api/pythondeps.txt b/containers/cloudkitty/cloudkitty-api/pythondeps.txt new file mode 100644 index 0000000..1cd9557 --- /dev/null +++ b/containers/cloudkitty/cloudkitty-api/pythondeps.txt @@ -0,0 +1,4 @@ +# Database driver (mysql extra for oslo.db) +oslo.db[mysql] +# Process utilities (tcib dependency) +psutil diff --git a/containers/cloudkitty/cloudkitty-api/src/.gitkeep b/containers/cloudkitty/cloudkitty-api/src/.gitkeep new file mode 100644 index 0000000..e69de29 diff --git a/containers/cloudkitty/cloudkitty-processor/Containerfile b/containers/cloudkitty/cloudkitty-processor/Containerfile new file mode 100644 index 0000000..eaaa05e --- /dev/null +++ b/containers/cloudkitty/cloudkitty-processor/Containerfile @@ -0,0 +1,93 @@ +ARG BASE_IMAGE=localhost/openstack/openstack-base:latest + +# --- Build stage: compile wheels and collect upstream config --- +FROM ${BASE_IMAGE} AS build + +ARG SERVICE_SRC=/src/cloudkitty + +ARG CONSTRAINTS_FILE=requirements.lock +COPY ${CONSTRAINTS_FILE} /deps-upper-constraints.txt +COPY src/ /src/ +COPY cloudkitty-processor/src/ /src/ + +COPY cloudkitty-processor/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 cloudkitty-processor/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-build-isolation --no-deps \ + --wheel-dir=/wheels "${pkg}"; \ + fi; \ + done + +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/${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 pip3 install --no-cache-dir --prefix=/usr \ + -c /tmp/build-constraints.txt \ + /wheels/*.whl + +RUN mkdir -p /configfiles/etc/cloudkitty && \ + oslo-config-generator \ + --config-file ${SERVICE_SRC}/etc/oslo-config-generator/cloudkitty.conf \ + --output-file /configfiles/etc/cloudkitty/cloudkitty.conf && \ + sed -i "/#pybasedir.*/d" /configfiles/etc/cloudkitty/cloudkitty.conf && \ + cp -a ${SERVICE_SRC}/etc/cloudkitty/api_paste.ini /configfiles/etc/cloudkitty/ && \ + cp -a ${SERVICE_SRC}/etc/cloudkitty/metrics.yml /configfiles/etc/cloudkitty/ + +# --- Runtime stage --- +FROM ${BASE_IMAGE} + +LABEL summary="OpenStack CloudKitty Processor" \ + io.k8s.description="CloudKitty rating processor container built from source with kolla interface" + +RUN uid_gid_manage cloudkitty + +COPY cloudkitty-processor/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 cloudkitty-processor/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 \ + /wheels/*.whl ${extrapkgs} && \ + rm -rf /wheels /tmp/pythondeps.txt + +RUN mkdir -p /etc/cloudkitty /var/log/cloudkitty /var/run/cloudkitty /var/lib/cloudkitty && \ + chmod 750 /var/log/cloudkitty && \ + chown -R cloudkitty:cloudkitty /etc/cloudkitty /var/log/cloudkitty /var/run/cloudkitty /var/lib/cloudkitty + +COPY --from=build /configfiles/etc/cloudkitty/cloudkitty.conf /etc/cloudkitty/cloudkitty.conf +COPY --from=build /configfiles/etc/cloudkitty/api_paste.ini /etc/cloudkitty/api_paste.ini +COPY --from=build /configfiles/etc/cloudkitty/metrics.yml /etc/cloudkitty/metrics.yml + +RUN chmod 640 /etc/cloudkitty/cloudkitty.conf \ + /etc/cloudkitty/api_paste.ini \ + /etc/cloudkitty/metrics.yml && \ + chown -R root:cloudkitty /etc/cloudkitty + +USER cloudkitty diff --git a/containers/cloudkitty/cloudkitty-processor/bindeps.txt b/containers/cloudkitty/cloudkitty-processor/bindeps.txt new file mode 100644 index 0000000..5161463 --- /dev/null +++ b/containers/cloudkitty/cloudkitty-processor/bindeps.txt @@ -0,0 +1 @@ +# No extra system dependencies for processor diff --git a/containers/cloudkitty/cloudkitty-processor/builddeps.txt b/containers/cloudkitty/cloudkitty-processor/builddeps.txt new file mode 100644 index 0000000..4d4d539 --- /dev/null +++ b/containers/cloudkitty/cloudkitty-processor/builddeps.txt @@ -0,0 +1,8 @@ +git-core +gcc +gcc-c++ +python3-devel +python3-setuptools +python3-wheel +libffi-devel +openssl-devel diff --git a/containers/cloudkitty/cloudkitty-processor/pythonbuilddeps.txt b/containers/cloudkitty/cloudkitty-processor/pythonbuilddeps.txt new file mode 100644 index 0000000..1d45dc6 --- /dev/null +++ b/containers/cloudkitty/cloudkitty-processor/pythonbuilddeps.txt @@ -0,0 +1 @@ +pbr diff --git a/containers/cloudkitty/cloudkitty-processor/pythondeps.txt b/containers/cloudkitty/cloudkitty-processor/pythondeps.txt new file mode 100644 index 0000000..1cd9557 --- /dev/null +++ b/containers/cloudkitty/cloudkitty-processor/pythondeps.txt @@ -0,0 +1,4 @@ +# Database driver (mysql extra for oslo.db) +oslo.db[mysql] +# Process utilities (tcib dependency) +psutil diff --git a/containers/cloudkitty/cloudkitty-processor/src/.gitkeep b/containers/cloudkitty/cloudkitty-processor/src/.gitkeep new file mode 100644 index 0000000..e69de29 diff --git a/containers/cloudkitty/common/config/usr/bin/cloudkitty-api b/containers/cloudkitty/common/config/usr/bin/cloudkitty-api new file mode 100644 index 0000000..303f930 --- /dev/null +++ b/containers/cloudkitty/common/config/usr/bin/cloudkitty-api @@ -0,0 +1,5 @@ +#!/usr/bin/python3 -sP + +# PBR Generated from 'wsgi_scripts' + +from cloudkitty.wsgi.api import application diff --git a/containers/cloudkitty/sources.txt b/containers/cloudkitty/sources.txt new file mode 100644 index 0000000..08229d8 --- /dev/null +++ b/containers/cloudkitty/sources.txt @@ -0,0 +1,3 @@ +# stream name repo branch pinned-hash +master upper-constraints https://opendev.org/openstack/requirements.git master 22c7e800bda7e90d83ab215df50a610477e623d0 +master cloudkitty https://opendev.org/openstack/cloudkitty.git master 40323f7428af213ae2775c5d1850014f0c0106c6 diff --git a/containers/cloudkitty/src/.gitkeep b/containers/cloudkitty/src/.gitkeep new file mode 100644 index 0000000..e69de29 From 3892b12e05623f5d7f66b097772b05d06c7875b8 Mon Sep 17 00:00:00 2001 From: Emma Foley Date: Wed, 5 Aug 2026 16:48:47 -0400 Subject: [PATCH 2/5] [aodh] Updated aodh container to make it build --- containers/aodh/aodh-api/Containerfile | 2 +- containers/aodh/aodh-evaluator/Containerfile | 2 +- containers/aodh/aodh-listener/Containerfile | 2 +- containers/aodh/aodh-notifier/Containerfile | 2 +- 4 files changed, 4 insertions(+), 4 deletions(-) diff --git a/containers/aodh/aodh-api/Containerfile b/containers/aodh/aodh-api/Containerfile index 50f7f82..ee45224 100644 --- a/containers/aodh/aodh-api/Containerfile +++ b/containers/aodh/aodh-api/Containerfile @@ -49,7 +49,7 @@ RUN pip3 install --no-cache-dir --prefix=/usr \ RUN mkdir -p /configfiles/etc/aodh && \ oslo-config-generator \ - --config-file ${SERVICE_SRC}/aodh/cmd/aodh-config-generator.conf \ + --config-file ${SERVICE_SRC}/etc/aodh/aodh-config-generator.conf \ --output-file /configfiles/etc/aodh/aodh.conf && \ sed -i "/#pybasedir.*/d" /configfiles/etc/aodh/aodh.conf && \ cp -a ${SERVICE_SRC}/aodh/api/api-paste.ini /configfiles/etc/aodh/ diff --git a/containers/aodh/aodh-evaluator/Containerfile b/containers/aodh/aodh-evaluator/Containerfile index 55adb57..b3c952e 100644 --- a/containers/aodh/aodh-evaluator/Containerfile +++ b/containers/aodh/aodh-evaluator/Containerfile @@ -49,7 +49,7 @@ RUN pip3 install --no-cache-dir --prefix=/usr \ RUN mkdir -p /configfiles/etc/aodh && \ oslo-config-generator \ - --config-file ${SERVICE_SRC}/aodh/cmd/aodh-config-generator.conf \ + --config-file ${SERVICE_SRC}/etc/aodh/aodh-config-generator.conf \ --output-file /configfiles/etc/aodh/aodh.conf && \ sed -i "/#pybasedir.*/d" /configfiles/etc/aodh/aodh.conf && \ cp -a ${SERVICE_SRC}/aodh/api/api-paste.ini /configfiles/etc/aodh/ diff --git a/containers/aodh/aodh-listener/Containerfile b/containers/aodh/aodh-listener/Containerfile index 37dc066..7955412 100644 --- a/containers/aodh/aodh-listener/Containerfile +++ b/containers/aodh/aodh-listener/Containerfile @@ -49,7 +49,7 @@ RUN pip3 install --no-cache-dir --prefix=/usr \ RUN mkdir -p /configfiles/etc/aodh && \ oslo-config-generator \ - --config-file ${SERVICE_SRC}/aodh/cmd/aodh-config-generator.conf \ + --config-file ${SERVICE_SRC}/etc/aodh/aodh-config-generator.conf \ --output-file /configfiles/etc/aodh/aodh.conf && \ sed -i "/#pybasedir.*/d" /configfiles/etc/aodh/aodh.conf && \ cp -a ${SERVICE_SRC}/aodh/api/api-paste.ini /configfiles/etc/aodh/ diff --git a/containers/aodh/aodh-notifier/Containerfile b/containers/aodh/aodh-notifier/Containerfile index 3e1e88b..5c4eb36 100644 --- a/containers/aodh/aodh-notifier/Containerfile +++ b/containers/aodh/aodh-notifier/Containerfile @@ -49,7 +49,7 @@ RUN pip3 install --no-cache-dir --prefix=/usr \ RUN mkdir -p /configfiles/etc/aodh && \ oslo-config-generator \ - --config-file ${SERVICE_SRC}/aodh/cmd/aodh-config-generator.conf \ + --config-file ${SERVICE_SRC}/etc/aodh/aodh-config-generator.conf \ --output-file /configfiles/etc/aodh/aodh.conf && \ sed -i "/#pybasedir.*/d" /configfiles/etc/aodh/aodh.conf && \ cp -a ${SERVICE_SRC}/aodh/api/api-paste.ini /configfiles/etc/aodh/ From e090c5d8b5d9906105827e16a8ba385d70f34475 Mon Sep 17 00:00:00 2001 From: Emma Foley Date: Thu, 6 Aug 2026 13:08:27 -0400 Subject: [PATCH 3/5] [aodh] Add python-memcached to pyton-deps It is an optional dep that is not included by default. --- containers/aodh/aodh-api/pythondeps.txt | 3 +++ 1 file changed, 3 insertions(+) diff --git a/containers/aodh/aodh-api/pythondeps.txt b/containers/aodh/aodh-api/pythondeps.txt index 3603265..b708e01 100644 --- a/containers/aodh/aodh-api/pythondeps.txt +++ b/containers/aodh/aodh-api/pythondeps.txt @@ -1,2 +1,5 @@ # Database driver (mysql extra for oslo.db) oslo.db[mysql] + +# Required by keystonemiddleware for memcache-based token caching +python-memcached From 568c3f08b1e7ddd17418a303a0bb2d7bbc835346 Mon Sep 17 00:00:00 2001 From: Emma Foley Date: Fri, 7 Aug 2026 14:43:20 +0100 Subject: [PATCH 4/5] [aodh][ceilometer] Fix SSL verification for internal TLS certificates MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit pip's certifi package bundles its own Mozilla CA store and ignores the the combined-ca-bundle Secret is mounted at this system path but Python processes using pip's certifi never see it. Set SSL_CERT_FILE in each service Containerfile to redirect Python's ssl.create_default_context() to the system trust store, which includes both the standard Mozilla CAs and any operator-mounted internal CAs. This was observed as keystonemiddleware token validation failures in aodh containers — all API requests returned HTTP 503 because the [keystone_authtoken] config section lacked an explicit cafile option, and certifi's default bundle didn't contain the internal CA. Note: This env var could alternatively be set once in the base image (containers/base/Containerfile) to cover all services, including future ones. The per-service approach was chosen to limit the blast radius of the change and avoid altering the shared base layer, which affects cloudkitty, cyborg, and watcher as well. If validated, migrating the ENV to the base Containerfile is recommended as a follow-up. Assisted-By: Claude Opus 4.6 --- containers/aodh/aodh-api/Containerfile | 2 ++ containers/aodh/aodh-evaluator/Containerfile | 2 ++ containers/aodh/aodh-listener/Containerfile | 2 ++ containers/aodh/aodh-notifier/Containerfile | 2 ++ containers/ceilometer/ceilometer-central/Containerfile | 2 ++ containers/ceilometer/ceilometer-compute/Containerfile | 2 ++ containers/ceilometer/ceilometer-ipmi/Containerfile | 2 ++ containers/ceilometer/ceilometer-notification/Containerfile | 2 ++ 8 files changed, 16 insertions(+) diff --git a/containers/aodh/aodh-api/Containerfile b/containers/aodh/aodh-api/Containerfile index ee45224..e4a30ba 100644 --- a/containers/aodh/aodh-api/Containerfile +++ b/containers/aodh/aodh-api/Containerfile @@ -60,6 +60,8 @@ FROM ${BASE_IMAGE} LABEL summary="OpenStack Aodh API" \ io.k8s.description="Aodh alarming API container built from source with kolla interface" +ENV SSL_CERT_FILE=/etc/pki/ca-trust/extracted/pem/tls-ca-bundle.pem + RUN uid_gid_manage aodh COPY aodh-api/bindeps.txt /tmp/bindeps.txt diff --git a/containers/aodh/aodh-evaluator/Containerfile b/containers/aodh/aodh-evaluator/Containerfile index b3c952e..55febd7 100644 --- a/containers/aodh/aodh-evaluator/Containerfile +++ b/containers/aodh/aodh-evaluator/Containerfile @@ -60,6 +60,8 @@ FROM ${BASE_IMAGE} LABEL summary="OpenStack Aodh Evaluator" \ io.k8s.description="Aodh alarm evaluator container built from source with kolla interface" +ENV SSL_CERT_FILE=/etc/pki/ca-trust/extracted/pem/tls-ca-bundle.pem + RUN uid_gid_manage aodh COPY aodh-evaluator/bindeps.txt /tmp/bindeps.txt diff --git a/containers/aodh/aodh-listener/Containerfile b/containers/aodh/aodh-listener/Containerfile index 7955412..5fd8d8d 100644 --- a/containers/aodh/aodh-listener/Containerfile +++ b/containers/aodh/aodh-listener/Containerfile @@ -60,6 +60,8 @@ FROM ${BASE_IMAGE} LABEL summary="OpenStack Aodh Listener" \ io.k8s.description="Aodh alarm event listener container built from source with kolla interface" +ENV SSL_CERT_FILE=/etc/pki/ca-trust/extracted/pem/tls-ca-bundle.pem + RUN uid_gid_manage aodh COPY aodh-listener/bindeps.txt /tmp/bindeps.txt diff --git a/containers/aodh/aodh-notifier/Containerfile b/containers/aodh/aodh-notifier/Containerfile index 5c4eb36..a609d6d 100644 --- a/containers/aodh/aodh-notifier/Containerfile +++ b/containers/aodh/aodh-notifier/Containerfile @@ -60,6 +60,8 @@ FROM ${BASE_IMAGE} LABEL summary="OpenStack Aodh Notifier" \ io.k8s.description="Aodh alarm notifier container built from source with kolla interface" +ENV SSL_CERT_FILE=/etc/pki/ca-trust/extracted/pem/tls-ca-bundle.pem + RUN uid_gid_manage aodh COPY aodh-notifier/bindeps.txt /tmp/bindeps.txt diff --git a/containers/ceilometer/ceilometer-central/Containerfile b/containers/ceilometer/ceilometer-central/Containerfile index f823030..fc532b0 100644 --- a/containers/ceilometer/ceilometer-central/Containerfile +++ b/containers/ceilometer/ceilometer-central/Containerfile @@ -63,6 +63,8 @@ FROM ${BASE_IMAGE} LABEL summary="OpenStack Ceilometer Central Agent" \ io.k8s.description="Ceilometer central polling agent container built from source with kolla interface" +ENV SSL_CERT_FILE=/etc/pki/ca-trust/extracted/pem/tls-ca-bundle.pem + RUN uid_gid_manage ceilometer COPY ceilometer-central/bindeps.txt /tmp/bindeps.txt diff --git a/containers/ceilometer/ceilometer-compute/Containerfile b/containers/ceilometer/ceilometer-compute/Containerfile index 0bb1322..1dbc4ea 100644 --- a/containers/ceilometer/ceilometer-compute/Containerfile +++ b/containers/ceilometer/ceilometer-compute/Containerfile @@ -63,6 +63,8 @@ FROM ${BASE_IMAGE} LABEL summary="OpenStack Ceilometer Compute Agent" \ io.k8s.description="Ceilometer compute polling agent container built from source with kolla interface" +ENV SSL_CERT_FILE=/etc/pki/ca-trust/extracted/pem/tls-ca-bundle.pem + RUN uid_gid_manage ceilometer COPY ceilometer-compute/bindeps.txt /tmp/bindeps.txt diff --git a/containers/ceilometer/ceilometer-ipmi/Containerfile b/containers/ceilometer/ceilometer-ipmi/Containerfile index 0b4e778..14a8d48 100644 --- a/containers/ceilometer/ceilometer-ipmi/Containerfile +++ b/containers/ceilometer/ceilometer-ipmi/Containerfile @@ -65,6 +65,8 @@ FROM ${BASE_IMAGE} LABEL summary="OpenStack Ceilometer IPMI Agent" \ io.k8s.description="Ceilometer IPMI polling agent container built from source with kolla interface" +ENV SSL_CERT_FILE=/etc/pki/ca-trust/extracted/pem/tls-ca-bundle.pem + RUN uid_gid_manage ceilometer COPY ceilometer-ipmi/bindeps.txt /tmp/bindeps.txt diff --git a/containers/ceilometer/ceilometer-notification/Containerfile b/containers/ceilometer/ceilometer-notification/Containerfile index 3fe604b..e037e72 100644 --- a/containers/ceilometer/ceilometer-notification/Containerfile +++ b/containers/ceilometer/ceilometer-notification/Containerfile @@ -66,6 +66,8 @@ FROM ${BASE_IMAGE} LABEL summary="OpenStack Ceilometer Notification Agent" \ io.k8s.description="Ceilometer notification agent container built from source with kolla interface" +ENV SSL_CERT_FILE=/etc/pki/ca-trust/extracted/pem/tls-ca-bundle.pem + RUN uid_gid_manage ceilometer COPY ceilometer-notification/bindeps.txt /tmp/bindeps.txt From 22b8a8f2725fb8dab69762d00be2551e64a5f0af Mon Sep 17 00:00:00 2001 From: Emma Foley Date: Fri, 7 Aug 2026 14:38:22 -0400 Subject: [PATCH 5/5] Update telemetry images --- containers/aodh/aodh-api/Containerfile | 41 +- containers/aodh/aodh-api/bindeps.txt | 3 +- containers/aodh/aodh-api/builddeps.txt | 1 - containers/aodh/aodh-api/pythonbuilddeps.txt | 1 + containers/aodh/aodh-evaluator/Containerfile | 37 +- containers/aodh/aodh-evaluator/bindeps.txt | 3 +- containers/aodh/aodh-evaluator/builddeps.txt | 1 - .../aodh/aodh-evaluator/pythonbuilddeps.txt | 1 + containers/aodh/aodh-expirer/Containerfile | 107 +++ containers/aodh/aodh-expirer/bindeps.txt | 2 + containers/aodh/aodh-expirer/builddeps.txt | 12 + .../aodh/aodh-expirer/pythonbuilddeps.txt | 2 + containers/aodh/aodh-expirer/pythondeps.txt | 2 + containers/aodh/aodh-listener/Containerfile | 37 +- containers/aodh/aodh-listener/bindeps.txt | 3 +- containers/aodh/aodh-listener/builddeps.txt | 1 - .../aodh/aodh-listener/pythonbuilddeps.txt | 1 + containers/aodh/aodh-notifier/Containerfile | 37 +- containers/aodh/aodh-notifier/bindeps.txt | 3 +- containers/aodh/aodh-notifier/builddeps.txt | 1 - .../aodh/aodh-notifier/pythonbuilddeps.txt | 1 + containers/aodh/buildrequirements.lock | 1 + containers/aodh/buildrequirements.lock.master | 243 ++++++ containers/aodh/requirements.lock | 1 + containers/aodh/requirements.lock.master | 706 ++++++++++++++++++ containers/aodh/rpms.in.yaml | 31 + containers/aodh/upper-constraints.txt | 1 + containers/ceilometer/buildrequirements.lock | 1 + .../ceilometer/buildrequirements.lock.master | 214 ++++++ .../ceilometer-central/Containerfile | 2 + .../ceilometer-compute/Containerfile | 2 + .../ceilometer/ceilometer-ipmi/Containerfile | 2 + .../ceilometer-notification/Containerfile | 2 + containers/ceilometer/requirements.lock | 1 + .../ceilometer/requirements.lock.master | 661 ++++++++++++++++ containers/ceilometer/rpms.in.yaml | 28 + containers/ceilometer/sources.txt | 4 +- containers/ceilometer/upper-constraints.txt | 1 + .../ceilometer/upper-constraints.txt.master | 582 +++++++++++++++ containers/cloudkitty/buildrequirements.lock | 1 + .../cloudkitty/buildrequirements.lock.master | 218 ++++++ containers/cloudkitty/requirements.lock | 1 + .../cloudkitty/requirements.lock.master | 665 +++++++++++++++++ containers/cloudkitty/rpms.in.yaml | 27 + containers/cloudkitty/sources.txt | 4 +- containers/cloudkitty/upper-constraints.txt | 1 + .../cloudkitty/upper-constraints.txt.master | 582 +++++++++++++++ 47 files changed, 4217 insertions(+), 62 deletions(-) create mode 100644 containers/aodh/aodh-expirer/Containerfile create mode 100644 containers/aodh/aodh-expirer/bindeps.txt create mode 100644 containers/aodh/aodh-expirer/builddeps.txt create mode 100644 containers/aodh/aodh-expirer/pythonbuilddeps.txt create mode 100644 containers/aodh/aodh-expirer/pythondeps.txt create mode 120000 containers/aodh/buildrequirements.lock create mode 100644 containers/aodh/buildrequirements.lock.master create mode 120000 containers/aodh/requirements.lock create mode 100644 containers/aodh/requirements.lock.master create mode 100644 containers/aodh/rpms.in.yaml create mode 120000 containers/aodh/upper-constraints.txt create mode 120000 containers/ceilometer/buildrequirements.lock create mode 100644 containers/ceilometer/buildrequirements.lock.master create mode 120000 containers/ceilometer/requirements.lock create mode 100644 containers/ceilometer/requirements.lock.master create mode 100644 containers/ceilometer/rpms.in.yaml create mode 120000 containers/ceilometer/upper-constraints.txt create mode 100644 containers/ceilometer/upper-constraints.txt.master create mode 120000 containers/cloudkitty/buildrequirements.lock create mode 100644 containers/cloudkitty/buildrequirements.lock.master create mode 120000 containers/cloudkitty/requirements.lock create mode 100644 containers/cloudkitty/requirements.lock.master create mode 100644 containers/cloudkitty/rpms.in.yaml create mode 120000 containers/cloudkitty/upper-constraints.txt create mode 100644 containers/cloudkitty/upper-constraints.txt.master diff --git a/containers/aodh/aodh-api/Containerfile b/containers/aodh/aodh-api/Containerfile index e4a30ba..f841cae 100644 --- a/containers/aodh/aodh-api/Containerfile +++ b/containers/aodh/aodh-api/Containerfile @@ -10,6 +10,9 @@ COPY ${CONSTRAINTS_FILE} /deps-upper-constraints.txt COPY src/ /src/ COPY aodh-api/src/ /src/ +ARG PIP_NO_BINARY="" +ENV PIP_NO_BINARY=${PIP_NO_BINARY} + COPY aodh-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 @@ -29,38 +32,46 @@ RUN cp /deps-upper-constraints.txt /tmp/build-constraints.txt && \ 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-build-isolation --no-deps \ - --wheel-dir=/wheels "${pkg}"; \ + 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/${pkg_name//-/_}-*.whl 2>/dev/null | head -1 | sed 's/.*-\([0-9][^-]*\)-.*/\1/' || 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 pip3 install --no-cache-dir --prefix=/usr \ -c /tmp/build-constraints.txt \ - /wheels/*.whl + --find-links=/wheels/deps \ + --find-links=/wheels/pkgs \ + /wheels/pkgs/*.whl RUN mkdir -p /configfiles/etc/aodh && \ oslo-config-generator \ --config-file ${SERVICE_SRC}/etc/aodh/aodh-config-generator.conf \ --output-file /configfiles/etc/aodh/aodh.conf && \ sed -i "/#pybasedir.*/d" /configfiles/etc/aodh/aodh.conf && \ - cp -a ${SERVICE_SRC}/aodh/api/api-paste.ini /configfiles/etc/aodh/ + cp -a ${SERVICE_SRC}/aodh/api/api-paste.ini /configfiles/etc/aodh/api-paste.ini -# --- Runtime stage --- +# --- Runtime stage: install from wheels --- FROM ${BASE_IMAGE} LABEL summary="OpenStack Aodh API" \ - io.k8s.description="Aodh alarming API container built from source with kolla interface" + io.k8s.description="Aodh API container built from source with kolla interface" +# Use system CA bundle: SSL_CERT_FILE for OpenSSL/stdlib, REQUESTS_CA_BUNDLE for requests/certifi ENV SSL_CERT_FILE=/etc/pki/ca-trust/extracted/pem/tls-ca-bundle.pem +ENV REQUESTS_CA_BUNDLE=/etc/pki/ca-trust/extracted/pem/tls-ca-bundle.pem RUN uid_gid_manage aodh @@ -75,28 +86,30 @@ COPY aodh-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 \ - /wheels/*.whl ${extrapkgs} && \ + --find-links=/wheels/deps \ + --find-links=/wheels/pkgs \ + /wheels/pkgs/*.whl ${extrapkgs} && \ rm -rf /wheels /tmp/pythondeps.txt -RUN mkdir -p /etc/aodh /var/log/aodh /var/lib/aodh /var/lib/aodh/tmp && \ +RUN mkdir -p /etc/aodh /var/log/aodh /var/lib/aodh /var/lib/aodh/tmp /usr/share/aodh && \ chmod 750 /var/log/aodh && \ - chown -R aodh:aodh /etc/aodh /var/log/aodh /var/lib/aodh + chown -R aodh:aodh /var/lib/aodh && \ + chown -R aodh:root /var/log/aodh COPY --from=build /configfiles/etc/aodh/aodh.conf /etc/aodh/aodh.conf COPY --from=build /configfiles/etc/aodh/api-paste.ini /etc/aodh/api-paste.ini COPY common/config/usr/share/aodh/aodh-dist.conf /usr/share/aodh/aodh-dist.conf -RUN chmod 640 /etc/aodh/aodh.conf \ - /etc/aodh/api-paste.ini && \ +RUN chmod 640 /etc/aodh/aodh.conf /etc/aodh/api-paste.ini && \ chmod 640 /usr/share/aodh/aodh-dist.conf && \ chown -R root:aodh /etc/aodh /usr/share/aodh -# WSGI setup: copy aodh-api to cgi-bin and configure httpd +# Apache httpd setup for WSGI RUN mkdir -p /var/www/cgi-bin/aodh && \ chmod 755 /var/www/cgi-bin/aodh && \ cp -a /usr/bin/aodh-api /var/www/cgi-bin/aodh/ && \ 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 && \ + sed -i -r 's,^(Listen 443),#\1,' /etc/httpd/conf.d/ssl.conf && \ usermod --append --groups apache aodh USER aodh diff --git a/containers/aodh/aodh-api/bindeps.txt b/containers/aodh/aodh-api/bindeps.txt index 762af80..2ff61e3 100644 --- a/containers/aodh/aodh-api/bindeps.txt +++ b/containers/aodh/aodh-api/bindeps.txt @@ -1,4 +1,5 @@ -# Apache httpd for WSGI +python3 +python3-pip httpd mod_ssl python3-mod_wsgi diff --git a/containers/aodh/aodh-api/builddeps.txt b/containers/aodh/aodh-api/builddeps.txt index 1135c4b..b14246e 100644 --- a/containers/aodh/aodh-api/builddeps.txt +++ b/containers/aodh/aodh-api/builddeps.txt @@ -3,7 +3,6 @@ gcc gcc-c++ python3-devel python3-setuptools -python3-wheel libffi-devel openssl-devel libxml2-devel diff --git a/containers/aodh/aodh-api/pythonbuilddeps.txt b/containers/aodh/aodh-api/pythonbuilddeps.txt index 1d45dc6..f003e98 100644 --- a/containers/aodh/aodh-api/pythonbuilddeps.txt +++ b/containers/aodh/aodh-api/pythonbuilddeps.txt @@ -1 +1,2 @@ pbr +wheel diff --git a/containers/aodh/aodh-evaluator/Containerfile b/containers/aodh/aodh-evaluator/Containerfile index 55febd7..18d2f14 100644 --- a/containers/aodh/aodh-evaluator/Containerfile +++ b/containers/aodh/aodh-evaluator/Containerfile @@ -10,6 +10,9 @@ COPY ${CONSTRAINTS_FILE} /deps-upper-constraints.txt COPY src/ /src/ COPY aodh-evaluator/src/ /src/ +ARG PIP_NO_BINARY="" +ENV PIP_NO_BINARY=${PIP_NO_BINARY} + COPY aodh-evaluator/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 @@ -29,38 +32,46 @@ RUN cp /deps-upper-constraints.txt /tmp/build-constraints.txt && \ 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-build-isolation --no-deps \ - --wheel-dir=/wheels "${pkg}"; \ + 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/${pkg_name//-/_}-*.whl 2>/dev/null | head -1 | sed 's/.*-\([0-9][^-]*\)-.*/\1/' || 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 pip3 install --no-cache-dir --prefix=/usr \ -c /tmp/build-constraints.txt \ - /wheels/*.whl + --find-links=/wheels/deps \ + --find-links=/wheels/pkgs \ + /wheels/pkgs/*.whl RUN mkdir -p /configfiles/etc/aodh && \ oslo-config-generator \ --config-file ${SERVICE_SRC}/etc/aodh/aodh-config-generator.conf \ --output-file /configfiles/etc/aodh/aodh.conf && \ sed -i "/#pybasedir.*/d" /configfiles/etc/aodh/aodh.conf && \ - cp -a ${SERVICE_SRC}/aodh/api/api-paste.ini /configfiles/etc/aodh/ + cp -a ${SERVICE_SRC}/aodh/api/api-paste.ini /configfiles/etc/aodh/api-paste.ini -# --- Runtime stage --- +# --- Runtime stage: install from wheels --- FROM ${BASE_IMAGE} LABEL summary="OpenStack Aodh Evaluator" \ - io.k8s.description="Aodh alarm evaluator container built from source with kolla interface" + io.k8s.description="Aodh evaluator container built from source with kolla interface" +# Use system CA bundle: SSL_CERT_FILE for OpenSSL/stdlib, REQUESTS_CA_BUNDLE for requests/certifi ENV SSL_CERT_FILE=/etc/pki/ca-trust/extracted/pem/tls-ca-bundle.pem +ENV REQUESTS_CA_BUNDLE=/etc/pki/ca-trust/extracted/pem/tls-ca-bundle.pem RUN uid_gid_manage aodh @@ -75,19 +86,21 @@ COPY aodh-evaluator/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 \ - /wheels/*.whl ${extrapkgs} && \ + --find-links=/wheels/deps \ + --find-links=/wheels/pkgs \ + /wheels/pkgs/*.whl ${extrapkgs} && \ rm -rf /wheels /tmp/pythondeps.txt -RUN mkdir -p /etc/aodh /var/log/aodh /var/lib/aodh /var/lib/aodh/tmp && \ +RUN mkdir -p /etc/aodh /var/log/aodh /var/lib/aodh /var/lib/aodh/tmp /usr/share/aodh && \ chmod 750 /var/log/aodh && \ - chown -R aodh:aodh /etc/aodh /var/log/aodh /var/lib/aodh + chown -R aodh:aodh /var/lib/aodh && \ + chown -R aodh:root /var/log/aodh COPY --from=build /configfiles/etc/aodh/aodh.conf /etc/aodh/aodh.conf COPY --from=build /configfiles/etc/aodh/api-paste.ini /etc/aodh/api-paste.ini COPY common/config/usr/share/aodh/aodh-dist.conf /usr/share/aodh/aodh-dist.conf -RUN chmod 640 /etc/aodh/aodh.conf \ - /etc/aodh/api-paste.ini && \ +RUN chmod 640 /etc/aodh/aodh.conf /etc/aodh/api-paste.ini && \ chmod 640 /usr/share/aodh/aodh-dist.conf && \ chown -R root:aodh /etc/aodh /usr/share/aodh diff --git a/containers/aodh/aodh-evaluator/bindeps.txt b/containers/aodh/aodh-evaluator/bindeps.txt index 44e1e94..214a9f1 100644 --- a/containers/aodh/aodh-evaluator/bindeps.txt +++ b/containers/aodh/aodh-evaluator/bindeps.txt @@ -1 +1,2 @@ -# No extra system dependencies for evaluator +python3 +python3-pip diff --git a/containers/aodh/aodh-evaluator/builddeps.txt b/containers/aodh/aodh-evaluator/builddeps.txt index 1135c4b..b14246e 100644 --- a/containers/aodh/aodh-evaluator/builddeps.txt +++ b/containers/aodh/aodh-evaluator/builddeps.txt @@ -3,7 +3,6 @@ gcc gcc-c++ python3-devel python3-setuptools -python3-wheel libffi-devel openssl-devel libxml2-devel diff --git a/containers/aodh/aodh-evaluator/pythonbuilddeps.txt b/containers/aodh/aodh-evaluator/pythonbuilddeps.txt index 1d45dc6..f003e98 100644 --- a/containers/aodh/aodh-evaluator/pythonbuilddeps.txt +++ b/containers/aodh/aodh-evaluator/pythonbuilddeps.txt @@ -1 +1,2 @@ pbr +wheel diff --git a/containers/aodh/aodh-expirer/Containerfile b/containers/aodh/aodh-expirer/Containerfile new file mode 100644 index 0000000..86c4a88 --- /dev/null +++ b/containers/aodh/aodh-expirer/Containerfile @@ -0,0 +1,107 @@ +ARG BASE_IMAGE=localhost/openstack/openstack-base:latest + +# --- Build stage: compile wheels and collect upstream config --- +FROM ${BASE_IMAGE} AS build + +ARG SERVICE_SRC=/src/aodh + +ARG CONSTRAINTS_FILE=requirements.lock +COPY ${CONSTRAINTS_FILE} /deps-upper-constraints.txt +COPY src/ /src/ +COPY aodh-expirer/src/ /src/ + +ARG PIP_NO_BINARY="" +ENV PIP_NO_BINARY=${PIP_NO_BINARY} + +COPY aodh-expirer/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 aodh-expirer/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 pip3 install --no-cache-dir --prefix=/usr \ + -c /tmp/build-constraints.txt \ + --find-links=/wheels/deps \ + --find-links=/wheels/pkgs \ + /wheels/pkgs/*.whl + +RUN mkdir -p /configfiles/etc/aodh && \ + oslo-config-generator \ + --config-file ${SERVICE_SRC}/etc/aodh/aodh-config-generator.conf \ + --output-file /configfiles/etc/aodh/aodh.conf && \ + sed -i "/#pybasedir.*/d" /configfiles/etc/aodh/aodh.conf && \ + cp -a ${SERVICE_SRC}/aodh/api/api-paste.ini /configfiles/etc/aodh/api-paste.ini + +# --- Runtime stage: install from wheels --- +FROM ${BASE_IMAGE} + +LABEL summary="OpenStack Aodh Expirer" \ + io.k8s.description="Aodh expirer container built from source with kolla interface" + +# Use system CA bundle: SSL_CERT_FILE for OpenSSL/stdlib, REQUESTS_CA_BUNDLE for requests/certifi +ENV SSL_CERT_FILE=/etc/pki/ca-trust/extracted/pem/tls-ca-bundle.pem +ENV REQUESTS_CA_BUNDLE=/etc/pki/ca-trust/extracted/pem/tls-ca-bundle.pem + +RUN uid_gid_manage aodh + +COPY aodh-expirer/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 aodh-expirer/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/aodh /var/log/aodh /var/lib/aodh /var/lib/aodh/tmp /usr/share/aodh && \ + chmod 750 /var/log/aodh && \ + chown -R aodh:aodh /var/lib/aodh && \ + chown -R aodh:root /var/log/aodh + +COPY --from=build /configfiles/etc/aodh/aodh.conf /etc/aodh/aodh.conf +COPY --from=build /configfiles/etc/aodh/api-paste.ini /etc/aodh/api-paste.ini +COPY common/config/usr/share/aodh/aodh-dist.conf /usr/share/aodh/aodh-dist.conf + +RUN chmod 640 /etc/aodh/aodh.conf /etc/aodh/api-paste.ini && \ + chmod 640 /usr/share/aodh/aodh-dist.conf && \ + chown -R root:aodh /etc/aodh /usr/share/aodh + +USER aodh diff --git a/containers/aodh/aodh-expirer/bindeps.txt b/containers/aodh/aodh-expirer/bindeps.txt new file mode 100644 index 0000000..214a9f1 --- /dev/null +++ b/containers/aodh/aodh-expirer/bindeps.txt @@ -0,0 +1,2 @@ +python3 +python3-pip diff --git a/containers/aodh/aodh-expirer/builddeps.txt b/containers/aodh/aodh-expirer/builddeps.txt new file mode 100644 index 0000000..2529822 --- /dev/null +++ b/containers/aodh/aodh-expirer/builddeps.txt @@ -0,0 +1,12 @@ +git-core +gcc +gcc-c++ +python3-devel +python3-setuptools +libffi-devel +openssl-devel +# psycopg2 C extension +libpq-devel +# lxml C extension +libxml2-devel +libxslt-devel diff --git a/containers/aodh/aodh-expirer/pythonbuilddeps.txt b/containers/aodh/aodh-expirer/pythonbuilddeps.txt new file mode 100644 index 0000000..f003e98 --- /dev/null +++ b/containers/aodh/aodh-expirer/pythonbuilddeps.txt @@ -0,0 +1,2 @@ +pbr +wheel diff --git a/containers/aodh/aodh-expirer/pythondeps.txt b/containers/aodh/aodh-expirer/pythondeps.txt new file mode 100644 index 0000000..f096165 --- /dev/null +++ b/containers/aodh/aodh-expirer/pythondeps.txt @@ -0,0 +1,2 @@ +# MySQL driver for oslo.db +oslo.db[mysql] diff --git a/containers/aodh/aodh-listener/Containerfile b/containers/aodh/aodh-listener/Containerfile index 5fd8d8d..e539939 100644 --- a/containers/aodh/aodh-listener/Containerfile +++ b/containers/aodh/aodh-listener/Containerfile @@ -10,6 +10,9 @@ COPY ${CONSTRAINTS_FILE} /deps-upper-constraints.txt COPY src/ /src/ COPY aodh-listener/src/ /src/ +ARG PIP_NO_BINARY="" +ENV PIP_NO_BINARY=${PIP_NO_BINARY} + COPY aodh-listener/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 @@ -29,38 +32,46 @@ RUN cp /deps-upper-constraints.txt /tmp/build-constraints.txt && \ 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-build-isolation --no-deps \ - --wheel-dir=/wheels "${pkg}"; \ + 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/${pkg_name//-/_}-*.whl 2>/dev/null | head -1 | sed 's/.*-\([0-9][^-]*\)-.*/\1/' || 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 pip3 install --no-cache-dir --prefix=/usr \ -c /tmp/build-constraints.txt \ - /wheels/*.whl + --find-links=/wheels/deps \ + --find-links=/wheels/pkgs \ + /wheels/pkgs/*.whl RUN mkdir -p /configfiles/etc/aodh && \ oslo-config-generator \ --config-file ${SERVICE_SRC}/etc/aodh/aodh-config-generator.conf \ --output-file /configfiles/etc/aodh/aodh.conf && \ sed -i "/#pybasedir.*/d" /configfiles/etc/aodh/aodh.conf && \ - cp -a ${SERVICE_SRC}/aodh/api/api-paste.ini /configfiles/etc/aodh/ + cp -a ${SERVICE_SRC}/aodh/api/api-paste.ini /configfiles/etc/aodh/api-paste.ini -# --- Runtime stage --- +# --- Runtime stage: install from wheels --- FROM ${BASE_IMAGE} LABEL summary="OpenStack Aodh Listener" \ - io.k8s.description="Aodh alarm event listener container built from source with kolla interface" + io.k8s.description="Aodh listener container built from source with kolla interface" +# Use system CA bundle: SSL_CERT_FILE for OpenSSL/stdlib, REQUESTS_CA_BUNDLE for requests/certifi ENV SSL_CERT_FILE=/etc/pki/ca-trust/extracted/pem/tls-ca-bundle.pem +ENV REQUESTS_CA_BUNDLE=/etc/pki/ca-trust/extracted/pem/tls-ca-bundle.pem RUN uid_gid_manage aodh @@ -75,19 +86,21 @@ COPY aodh-listener/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 \ - /wheels/*.whl ${extrapkgs} && \ + --find-links=/wheels/deps \ + --find-links=/wheels/pkgs \ + /wheels/pkgs/*.whl ${extrapkgs} && \ rm -rf /wheels /tmp/pythondeps.txt -RUN mkdir -p /etc/aodh /var/log/aodh /var/lib/aodh /var/lib/aodh/tmp && \ +RUN mkdir -p /etc/aodh /var/log/aodh /var/lib/aodh /var/lib/aodh/tmp /usr/share/aodh && \ chmod 750 /var/log/aodh && \ - chown -R aodh:aodh /etc/aodh /var/log/aodh /var/lib/aodh + chown -R aodh:aodh /var/lib/aodh && \ + chown -R aodh:root /var/log/aodh COPY --from=build /configfiles/etc/aodh/aodh.conf /etc/aodh/aodh.conf COPY --from=build /configfiles/etc/aodh/api-paste.ini /etc/aodh/api-paste.ini COPY common/config/usr/share/aodh/aodh-dist.conf /usr/share/aodh/aodh-dist.conf -RUN chmod 640 /etc/aodh/aodh.conf \ - /etc/aodh/api-paste.ini && \ +RUN chmod 640 /etc/aodh/aodh.conf /etc/aodh/api-paste.ini && \ chmod 640 /usr/share/aodh/aodh-dist.conf && \ chown -R root:aodh /etc/aodh /usr/share/aodh diff --git a/containers/aodh/aodh-listener/bindeps.txt b/containers/aodh/aodh-listener/bindeps.txt index 754281a..214a9f1 100644 --- a/containers/aodh/aodh-listener/bindeps.txt +++ b/containers/aodh/aodh-listener/bindeps.txt @@ -1 +1,2 @@ -# No extra system dependencies for listener +python3 +python3-pip diff --git a/containers/aodh/aodh-listener/builddeps.txt b/containers/aodh/aodh-listener/builddeps.txt index 1135c4b..b14246e 100644 --- a/containers/aodh/aodh-listener/builddeps.txt +++ b/containers/aodh/aodh-listener/builddeps.txt @@ -3,7 +3,6 @@ gcc gcc-c++ python3-devel python3-setuptools -python3-wheel libffi-devel openssl-devel libxml2-devel diff --git a/containers/aodh/aodh-listener/pythonbuilddeps.txt b/containers/aodh/aodh-listener/pythonbuilddeps.txt index 1d45dc6..f003e98 100644 --- a/containers/aodh/aodh-listener/pythonbuilddeps.txt +++ b/containers/aodh/aodh-listener/pythonbuilddeps.txt @@ -1 +1,2 @@ pbr +wheel diff --git a/containers/aodh/aodh-notifier/Containerfile b/containers/aodh/aodh-notifier/Containerfile index a609d6d..a035d2a 100644 --- a/containers/aodh/aodh-notifier/Containerfile +++ b/containers/aodh/aodh-notifier/Containerfile @@ -10,6 +10,9 @@ COPY ${CONSTRAINTS_FILE} /deps-upper-constraints.txt COPY src/ /src/ COPY aodh-notifier/src/ /src/ +ARG PIP_NO_BINARY="" +ENV PIP_NO_BINARY=${PIP_NO_BINARY} + COPY aodh-notifier/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 @@ -29,38 +32,46 @@ RUN cp /deps-upper-constraints.txt /tmp/build-constraints.txt && \ 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-build-isolation --no-deps \ - --wheel-dir=/wheels "${pkg}"; \ + 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/${pkg_name//-/_}-*.whl 2>/dev/null | head -1 | sed 's/.*-\([0-9][^-]*\)-.*/\1/' || 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 pip3 install --no-cache-dir --prefix=/usr \ -c /tmp/build-constraints.txt \ - /wheels/*.whl + --find-links=/wheels/deps \ + --find-links=/wheels/pkgs \ + /wheels/pkgs/*.whl RUN mkdir -p /configfiles/etc/aodh && \ oslo-config-generator \ --config-file ${SERVICE_SRC}/etc/aodh/aodh-config-generator.conf \ --output-file /configfiles/etc/aodh/aodh.conf && \ sed -i "/#pybasedir.*/d" /configfiles/etc/aodh/aodh.conf && \ - cp -a ${SERVICE_SRC}/aodh/api/api-paste.ini /configfiles/etc/aodh/ + cp -a ${SERVICE_SRC}/aodh/api/api-paste.ini /configfiles/etc/aodh/api-paste.ini -# --- Runtime stage --- +# --- Runtime stage: install from wheels --- FROM ${BASE_IMAGE} LABEL summary="OpenStack Aodh Notifier" \ - io.k8s.description="Aodh alarm notifier container built from source with kolla interface" + io.k8s.description="Aodh notifier container built from source with kolla interface" +# Use system CA bundle: SSL_CERT_FILE for OpenSSL/stdlib, REQUESTS_CA_BUNDLE for requests/certifi ENV SSL_CERT_FILE=/etc/pki/ca-trust/extracted/pem/tls-ca-bundle.pem +ENV REQUESTS_CA_BUNDLE=/etc/pki/ca-trust/extracted/pem/tls-ca-bundle.pem RUN uid_gid_manage aodh @@ -75,19 +86,21 @@ COPY aodh-notifier/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 \ - /wheels/*.whl ${extrapkgs} && \ + --find-links=/wheels/deps \ + --find-links=/wheels/pkgs \ + /wheels/pkgs/*.whl ${extrapkgs} && \ rm -rf /wheels /tmp/pythondeps.txt -RUN mkdir -p /etc/aodh /var/log/aodh /var/lib/aodh /var/lib/aodh/tmp && \ +RUN mkdir -p /etc/aodh /var/log/aodh /var/lib/aodh /var/lib/aodh/tmp /usr/share/aodh && \ chmod 750 /var/log/aodh && \ - chown -R aodh:aodh /etc/aodh /var/log/aodh /var/lib/aodh + chown -R aodh:aodh /var/lib/aodh && \ + chown -R aodh:root /var/log/aodh COPY --from=build /configfiles/etc/aodh/aodh.conf /etc/aodh/aodh.conf COPY --from=build /configfiles/etc/aodh/api-paste.ini /etc/aodh/api-paste.ini COPY common/config/usr/share/aodh/aodh-dist.conf /usr/share/aodh/aodh-dist.conf -RUN chmod 640 /etc/aodh/aodh.conf \ - /etc/aodh/api-paste.ini && \ +RUN chmod 640 /etc/aodh/aodh.conf /etc/aodh/api-paste.ini && \ chmod 640 /usr/share/aodh/aodh-dist.conf && \ chown -R root:aodh /etc/aodh /usr/share/aodh diff --git a/containers/aodh/aodh-notifier/bindeps.txt b/containers/aodh/aodh-notifier/bindeps.txt index 3511c5b..214a9f1 100644 --- a/containers/aodh/aodh-notifier/bindeps.txt +++ b/containers/aodh/aodh-notifier/bindeps.txt @@ -1 +1,2 @@ -# No extra system dependencies for notifier +python3 +python3-pip diff --git a/containers/aodh/aodh-notifier/builddeps.txt b/containers/aodh/aodh-notifier/builddeps.txt index 1135c4b..b14246e 100644 --- a/containers/aodh/aodh-notifier/builddeps.txt +++ b/containers/aodh/aodh-notifier/builddeps.txt @@ -3,7 +3,6 @@ gcc gcc-c++ python3-devel python3-setuptools -python3-wheel libffi-devel openssl-devel libxml2-devel diff --git a/containers/aodh/aodh-notifier/pythonbuilddeps.txt b/containers/aodh/aodh-notifier/pythonbuilddeps.txt index 1d45dc6..f003e98 100644 --- a/containers/aodh/aodh-notifier/pythonbuilddeps.txt +++ b/containers/aodh/aodh-notifier/pythonbuilddeps.txt @@ -1 +1,2 @@ pbr +wheel diff --git a/containers/aodh/buildrequirements.lock b/containers/aodh/buildrequirements.lock new file mode 120000 index 0000000..823367e --- /dev/null +++ b/containers/aodh/buildrequirements.lock @@ -0,0 +1 @@ +buildrequirements.lock.master \ No newline at end of file diff --git a/containers/aodh/buildrequirements.lock.master b/containers/aodh/buildrequirements.lock.master new file mode 100644 index 0000000..2bbbbd6 --- /dev/null +++ b/containers/aodh/buildrequirements.lock.master @@ -0,0 +1,243 @@ +# +# This file is autogenerated by pip-compile with Python 3.12 +# 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 cryptography +coherent-licensed==0.5.2 + # via + # importlib-metadata + # zipp +cython==3.2.9 + # via + # lxml + # pyyaml + # sqlalchemy +flit-core==3.12.0 + # via + # coherent-licensed + # 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.29.0 + # via croniter +hatchling==1.31.0 + # via + # attrs + # dnspython + # eventlet + # hatch-fancy-pypi-readme + # hatch-vcs + # jsonschema + # jsonschema-specifications + # platformdirs + # prettytable + # pygments + # referencing + # rich-argparse + # testresources + # testscenarios + # urllib3 + # wcwidth +maturin==1.14.1 + # via + # cryptography + # rpds-py +packaging==26.0 + # via + # croniter + # hatchling +packaging==26.2 + # via + # hatchling + # setuptools-scm + # vcs-versioning + # wheel +pathspec==1.0.4 + # via + # croniter + # hatchling +pathspec==1.1.1 + # via hatchling +pbr==7.0.3 + # via + # 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-reports + # oslo-serialization + # oslo-service + # oslo-upgradecheck + # oslo-utils + # pycadf + # python-heatclient + # python-keystoneclient + # python-manilaclient + # python-observabilityclient + # python-octaviaclient + # python-openstackclient + # python-swiftclient + # stevedore + # tooz + # wsme +pluggy==1.6.0 + # via + # croniter + # 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 + # gnocchiclient + # hatch-vcs + # importlib-metadata + # pluggy + # setuptools-rust + # tenacity + # ujson + # urllib3 + # zipp +setuptools-scm==7.1.0 + # via python-dateutil +trove-classifiers==2026.1.14.14 + # via + # croniter + # hatchling +trove-classifiers==2026.6.1.19 + # via hatchling +typing-extensions==4.15.0 + # via setuptools-scm +vcs-versioning==2.2.4 + # via setuptools-scm +wheel==0.47.0 + # via + # autopage + # bcrypt + # fasteners + # gnocchiclient + # mako + # pycparser + # python-dateutil + # 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 + # cryptography + # decorator + # dogpile-cache + # fasteners + # gnocchiclient + # greenlet + # importlib-metadata + # lxml + # mako + # markupsafe + # maturin + # msgpack + # netaddr + # pastedeploy + # pathspec + # pbr + # pluggy + # prometheus-client + # prompt-toolkit + # psutil + # pycparser + # pyjwt + # pymysql + # pyperclip + # python-dateutil + # python-observabilityclient + # python-swiftclient + # pyyaml + # repoze-lru + # requests + # setuptools-rust + # setuptools-scm + # sqlalchemy + # statsd + # tenacity + # trove-classifiers + # tzdata + # ujson + # vcs-versioning + # wrapt + # yappi + # zipp diff --git a/containers/aodh/requirements.lock b/containers/aodh/requirements.lock new file mode 120000 index 0000000..c466dc0 --- /dev/null +++ b/containers/aodh/requirements.lock @@ -0,0 +1 @@ +requirements.lock.master \ No newline at end of file diff --git a/containers/aodh/requirements.lock.master b/containers/aodh/requirements.lock.master new file mode 100644 index 0000000..4b1338d --- /dev/null +++ b/containers/aodh/requirements.lock.master @@ -0,0 +1,706 @@ +# +# This file is autogenerated by pip-compile with Python 3.12 +# by the following command: +# +# pip-compile --allow-unsafe --constraint=upper-constraints.txt.master --output-file=requirements.lock.master --strip-extras aodh-api/pythonbuilddeps.txt aodh-api/pythondeps.txt aodh-evaluator/pythonbuilddeps.txt aodh-evaluator/pythondeps.txt aodh-expirer/pythonbuilddeps.txt aodh-expirer/pythondeps.txt aodh-listener/pythonbuilddeps.txt aodh-listener/pythondeps.txt aodh-notifier/pythonbuilddeps.txt aodh-notifier/pythondeps.txt src/aodh/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 +autopage==0.6.0 + # via + # -c upper-constraints.txt.master + # cliff +bcrypt==5.0.0 + # via + # -c upper-constraints.txt.master + # oslo-middleware +cachetools==7.1.4 + # via + # -c upper-constraints.txt.master + # -r src/aodh/requirements.txt + # oslo-messaging +certifi==2026.7.22 + # via requests +cffi==2.0.0 + # via + # -c upper-constraints.txt.master + # cryptography +charset-normalizer==3.4.7 + # via + # -c upper-constraints.txt.master + # requests +cliff==4.15.0 + # via + # -c upper-constraints.txt.master + # gnocchiclient + # osc-lib + # python-heatclient + # python-observabilityclient + # python-octaviaclient + # python-openstackclient +cmd2==4.0.0 + # via + # -c upper-constraints.txt.master + # cliff +cotyledon==2.2.0 + # via + # -c upper-constraints.txt.master + # -r src/aodh/requirements.txt +croniter==6.2.2 + # via + # -c upper-constraints.txt.master + # -r src/aodh/requirements.txt +cryptography==43.0.3 + # via + # -c upper-constraints.txt.master + # openstacksdk + # python-openstackclient +debtcollector==3.1.0 + # via + # -c upper-constraints.txt.master + # futurist + # gnocchiclient + # oslo-concurrency + # oslo-db + # oslo-log + # oslo-messaging + # oslo-service + # python-keystoneclient + # python-manilaclient +decorator==5.3.1 + # via + # -c upper-constraints.txt.master + # dogpile-cache + # openstacksdk +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 + # oslo-service +fasteners==0.20 + # via + # -c upper-constraints.txt.master + # oslo-concurrency + # tooz +futurist==3.4.0 + # via + # -c upper-constraints.txt.master + # -r src/aodh/requirements.txt + # gnocchiclient + # oslo-messaging + # tooz +gnocchiclient==7.2.0 + # via + # -c upper-constraints.txt.master + # -r src/aodh/requirements.txt +greenlet==3.5.3 + # via + # -c upper-constraints.txt.master + # eventlet + # oslo-service + # sqlalchemy +idna==3.18 + # via + # -c upper-constraints.txt.master + # requests +importlib-metadata==9.0.0 + # via + # -c upper-constraints.txt.master + # wsme +iso8601==2.1.0 + # via + # -c upper-constraints.txt.master + # gnocchiclient + # keystoneauth1 + # openstacksdk + # oslo-utils + # python-heatclient + # python-openstackclient +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/aodh/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/aodh/requirements.txt + # gnocchiclient + # keystonemiddleware + # openstacksdk + # osc-lib + # python-heatclient + # python-keystoneclient + # python-manilaclient + # python-observabilityclient + # python-octaviaclient +keystonemiddleware==13.0.0 + # via + # -c upper-constraints.txt.master + # -r src/aodh/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/aodh/requirements.txt +mako==1.3.12 + # via + # -c upper-constraints.txt.master + # alembic + # pecan +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-serialization + # tooz +netaddr==1.3.0 + # via + # -c upper-constraints.txt.master + # oslo-config + # oslo-utils + # wsme +openstacksdk==4.18.0 + # via + # -c upper-constraints.txt.master + # osc-lib + # python-openstackclient +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-heatclient + # python-manilaclient + # python-observabilityclient + # python-octaviaclient + # python-openstackclient +oslo-cache==4.3.0 + # via + # -c upper-constraints.txt.master + # keystonemiddleware +oslo-concurrency==7.6.1 + # via + # -c upper-constraints.txt.master + # oslo-service +oslo-config==10.6.0 + # via + # -c upper-constraints.txt.master + # -r src/aodh/requirements.txt + # keystonemiddleware + # oslo-cache + # oslo-concurrency + # oslo-db + # oslo-log + # oslo-messaging + # oslo-metrics + # oslo-middleware + # oslo-policy + # oslo-reports + # oslo-service + # oslo-upgradecheck + # pycadf + # python-keystoneclient + # python-manilaclient +oslo-context==6.5.0 + # via + # -c upper-constraints.txt.master + # keystonemiddleware + # oslo-log + # oslo-messaging + # oslo-middleware + # oslo-policy +oslo-db==18.1.0 + # via + # -c upper-constraints.txt.master + # -r aodh-api/pythondeps.txt + # -r aodh-evaluator/pythondeps.txt + # -r aodh-expirer/pythondeps.txt + # -r aodh-listener/pythondeps.txt + # -r aodh-notifier/pythondeps.txt + # -r src/aodh/requirements.txt +oslo-i18n==6.9.0 + # via + # -c upper-constraints.txt.master + # -r src/aodh/requirements.txt + # keystonemiddleware + # osc-lib + # oslo-cache + # oslo-concurrency + # oslo-config + # oslo-db + # oslo-log + # oslo-middleware + # oslo-policy + # oslo-reports + # oslo-service + # oslo-upgradecheck + # oslo-utils + # python-heatclient + # python-keystoneclient + # python-openstackclient +oslo-log==8.3.0 + # via + # -c upper-constraints.txt.master + # -r src/aodh/requirements.txt + # keystonemiddleware + # oslo-cache + # oslo-messaging + # oslo-metrics + # oslo-service + # python-manilaclient +oslo-messaging==18.2.0 + # via + # -c upper-constraints.txt.master + # -r src/aodh/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/aodh/requirements.txt + # oslo-messaging +oslo-policy==6.0.0 + # via + # -c upper-constraints.txt.master + # -r src/aodh/requirements.txt + # oslo-upgradecheck +oslo-reports==3.9.0 + # via + # -c upper-constraints.txt.master + # -r src/aodh/requirements.txt +oslo-serialization==5.11.0 + # via + # -c upper-constraints.txt.master + # keystonemiddleware + # oslo-log + # oslo-messaging + # oslo-policy + # oslo-reports + # pycadf + # python-heatclient + # python-keystoneclient + # python-manilaclient + # python-octaviaclient + # tooz +oslo-service==4.8.0 + # via + # -c upper-constraints.txt.master + # oslo-messaging +oslo-upgradecheck==2.8.0 + # via + # -c upper-constraints.txt.master + # -r src/aodh/requirements.txt +oslo-utils==10.1.1 + # via + # -c upper-constraints.txt.master + # -r src/aodh/requirements.txt + # keystonemiddleware + # osc-lib + # oslo-cache + # oslo-concurrency + # oslo-db + # oslo-log + # oslo-messaging + # oslo-metrics + # oslo-middleware + # oslo-policy + # oslo-reports + # oslo-serialization + # oslo-service + # oslo-upgradecheck + # python-heatclient + # python-keystoneclient + # python-manilaclient + # python-octaviaclient + # tooz +packaging==26.2 + # via + # -c upper-constraints.txt.master + # kombu + # oslo-utils + # python-keystoneclient + # wheel +paste==3.10.1 + # via + # -c upper-constraints.txt.master + # oslo-service +pastedeploy==3.1.0 + # via + # -c upper-constraints.txt.master + # -r src/aodh/requirements.txt + # oslo-service +pbr==7.0.3 + # via + # -c upper-constraints.txt.master + # -r aodh-api/pythonbuilddeps.txt + # -r aodh-evaluator/pythonbuilddeps.txt + # -r aodh-expirer/pythonbuilddeps.txt + # -r aodh-listener/pythonbuilddeps.txt + # -r aodh-notifier/pythonbuilddeps.txt + # -r src/aodh/requirements.txt + # keystonemiddleware + # openstacksdk + # os-service-types + # osc-lib + # oslo-concurrency + # oslo-context + # oslo-i18n + # oslo-log + # oslo-messaging + # oslo-metrics + # oslo-middleware + # oslo-reports + # oslo-utils + # python-heatclient + # python-keystoneclient + # python-manilaclient + # python-octaviaclient +pecan==1.8.0 + # via + # -c upper-constraints.txt.master + # -r src/aodh/requirements.txt +platformdirs==4.10.0 + # via + # -c upper-constraints.txt.master + # openstacksdk +prettytable==3.18.0 + # via + # -c upper-constraints.txt.master + # cliff + # oslo-upgradecheck + # python-heatclient + # python-manilaclient +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 +pymysql==1.2.0 + # via + # -c upper-constraints.txt.master + # oslo-db +pyparsing==3.3.2 + # via + # -c upper-constraints.txt.master + # oslo-utils +pyperclip==1.11.0 + # via + # -c upper-constraints.txt.master + # cmd2 +python-dateutil==2.9.0.post0 + # via + # -c upper-constraints.txt.master + # -r src/aodh/requirements.txt + # croniter + # gnocchiclient + # oslo-log +python-heatclient==5.2.0 + # via + # -c upper-constraints.txt.master + # -r src/aodh/requirements.txt +python-keystoneclient==5.8.0 + # via + # -c upper-constraints.txt.master + # -r src/aodh/requirements.txt + # keystonemiddleware + # python-openstackclient +python-manilaclient==6.2.0 + # via + # -c upper-constraints.txt.master + # python-openstackclient +python-memcached==1.62 + # via + # -c upper-constraints.txt.master + # -r aodh-api/pythondeps.txt +python-observabilityclient==1.3.0 + # via + # -c upper-constraints.txt.master + # -r src/aodh/requirements.txt +python-octaviaclient==3.14.0 + # via + # -c upper-constraints.txt.master + # -r src/aodh/requirements.txt +python-openstackclient==10.2.1 + # via + # -c upper-constraints.txt.master + # python-octaviaclient +python-swiftclient==4.10.0 + # via + # -c upper-constraints.txt.master + # python-heatclient +pytz==2026.2 + # via + # -c upper-constraints.txt.master + # wsme +pyyaml==6.0.3 + # via + # -c upper-constraints.txt.master + # cliff + # openstacksdk + # oslo-config + # oslo-messaging + # oslo-policy + # oslo-utils + # python-heatclient + # python-observabilityclient +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/aodh/requirements.txt + # keystoneauth1 + # keystonemiddleware + # osc-lib + # oslo-config + # oslo-policy + # python-heatclient + # python-keystoneclient + # python-manilaclient + # python-octaviaclient + # python-openstackclient + # 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 + # 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 +simplegeneric==0.8.1 + # via + # -c upper-constraints.txt.master + # wsme +six==1.17.0 + # via + # -c upper-constraints.txt.master + # python-dateutil + # routes +sqlalchemy==2.0.51 + # via + # -c upper-constraints.txt.master + # -r src/aodh/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/aodh/requirements.txt + # cliff + # dogpile-cache + # keystoneauth1 + # osc-lib + # oslo-config + # oslo-db + # oslo-messaging + # oslo-middleware + # oslo-policy + # python-keystoneclient + # python-openstackclient + # tooz +tenacity==9.1.4 + # via + # -c upper-constraints.txt.master + # -r src/aodh/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/aodh/requirements.txt +typing-extensions==4.15.0 + # via + # -c upper-constraints.txt.master + # alembic + # cotyledon + # keystoneauth1 + # os-service-types + # oslo-context + # oslo-middleware + # referencing + # sqlalchemy +tzdata==2026.2 + # via + # -c upper-constraints.txt.master + # kombu +ujson==5.13.0 + # via + # -c upper-constraints.txt.master + # gnocchiclient +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 + # -r src/aodh/requirements.txt + # 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/aodh/requirements.txt + # keystonemiddleware + # oslo-messaging + # oslo-middleware + # oslo-service + # pecan + # wsme +wheel==0.47.0 + # via + # -r aodh-api/pythonbuilddeps.txt + # -r aodh-evaluator/pythonbuilddeps.txt + # -r aodh-expirer/pythonbuilddeps.txt + # -r aodh-listener/pythonbuilddeps.txt + # -r aodh-notifier/pythonbuilddeps.txt +wrapt==2.2.2 + # via + # -c upper-constraints.txt.master + # debtcollector +wsme==0.12.1 + # via + # -c upper-constraints.txt.master + # -r src/aodh/requirements.txt +yappi==1.7.6 + # via + # -c upper-constraints.txt.master + # oslo-service +zipp==4.1.0 + # via + # -c upper-constraints.txt.master + # importlib-metadata + +# The following packages are considered to be unsafe in a requirements file: diff --git a/containers/aodh/rpms.in.yaml b/containers/aodh/rpms.in.yaml new file mode 100644 index 0000000..c6cd5d7 --- /dev/null +++ b/containers/aodh/rpms.in.yaml @@ -0,0 +1,31 @@ +contentOrigin: + repofiles: + - ./rpms.repo +context: + bare: true + +# +# To update rpms.lock.yaml: +# rpm-lockfile-prototype rpms.in.yaml +# + +arches: + - x86_64 + - aarch64 + +packages: + - gcc + - gcc-c++ + - git-core + - httpd + - libffi-devel + - libpq-devel + - libxml2-devel + - libxslt-devel + - mod_ssl + - openssl-devel + - python3 + - python3-devel + - python3-mod_wsgi + - python3-pip + - python3-setuptools diff --git a/containers/aodh/upper-constraints.txt b/containers/aodh/upper-constraints.txt new file mode 120000 index 0000000..b2ebb3b --- /dev/null +++ b/containers/aodh/upper-constraints.txt @@ -0,0 +1 @@ +upper-constraints.txt.master \ No newline at end of file diff --git a/containers/ceilometer/buildrequirements.lock b/containers/ceilometer/buildrequirements.lock new file mode 120000 index 0000000..823367e --- /dev/null +++ b/containers/ceilometer/buildrequirements.lock @@ -0,0 +1 @@ +buildrequirements.lock.master \ No newline at end of file diff --git a/containers/ceilometer/buildrequirements.lock.master b/containers/ceilometer/buildrequirements.lock.master new file mode 100644 index 0000000..de3f3a3 --- /dev/null +++ b/containers/ceilometer/buildrequirements.lock.master @@ -0,0 +1,214 @@ +# +# This file is autogenerated by pip-compile with Python 3.12 +# 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 cryptography +cython==3.2.9 + # via + # lxml + # pyyaml +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 + # urllib3 +hatchling==1.31.0 + # via + # attrs + # dnspython + # eventlet + # hatch-fancy-pypi-readme + # hatch-vcs + # jsonschema + # jsonschema-specifications + # platformdirs + # prettytable + # pygments + # redis + # referencing + # rich-argparse + # uhashring + # urllib3 + # wcwidth +maturin==1.14.1 + # via + # cryptography + # rpds-py +packaging==26.2 + # via + # build + # hatchling + # setuptools-scm + # vcs-versioning + # wheel +pathspec==1.1.1 + # via hatchling +pbr==7.0.3 + # via + # aodhclient + # cliff + # debtcollector + # futurist + # jsonpath-rw-ext + # keystoneauth1 + # openstacksdk + # os-service-types + # osc-lib + # oslo-cache + # oslo-concurrency + # oslo-config + # oslo-context + # 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 + # python-novaclient + # python-swiftclient + # python-zaqarclient + # 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 + # configargparse + # configparser + # cotyledon + # gnocchiclient + # hatch-vcs + # pluggy + # setuptools-rust + # tenacity + # ujson + # 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.4 + # via setuptools-scm +wheel==0.47.0 + # via + # autopage + # bcrypt + # fasteners + # gnocchiclient + # pycparser + # 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 + # aodhclient + # autopage + # awscrt + # bcrypt + # cachetools + # calver + # certifi + # cffi + # cmd2 + # configparser + # cotyledon + # cryptography + # decorator + # dogpile-cache + # fasteners + # gnocchiclient + # greenlet + # lxml + # markupsafe + # maturin + # msgpack + # netaddr + # pastedeploy + # pathspec + # pbr + # pluggy + # prometheus-client + # prompt-toolkit + # psutil + # pycparser + # pyperclip + # python-dateutil + # python-novaclient + # python-swiftclient + # pyyaml + # repoze-lru + # requests + # setuptools-rust + # setuptools-scm + # statsd + # tenacity + # trove-classifiers + # tzdata + # ujson + # vcs-versioning + # wrapt + # xmltodict + # yappi diff --git a/containers/ceilometer/ceilometer-central/Containerfile b/containers/ceilometer/ceilometer-central/Containerfile index fc532b0..8ed5991 100644 --- a/containers/ceilometer/ceilometer-central/Containerfile +++ b/containers/ceilometer/ceilometer-central/Containerfile @@ -63,7 +63,9 @@ FROM ${BASE_IMAGE} LABEL summary="OpenStack Ceilometer Central Agent" \ io.k8s.description="Ceilometer central polling agent container built from source with kolla interface" +# Use system CA bundle: SSL_CERT_FILE for OpenSSL/stdlib, REQUESTS_CA_BUNDLE for requests/certifi ENV SSL_CERT_FILE=/etc/pki/ca-trust/extracted/pem/tls-ca-bundle.pem +ENV REQUESTS_CA_BUNDLE=/etc/pki/ca-trust/extracted/pem/tls-ca-bundle.pem RUN uid_gid_manage ceilometer diff --git a/containers/ceilometer/ceilometer-compute/Containerfile b/containers/ceilometer/ceilometer-compute/Containerfile index 1dbc4ea..c76b987 100644 --- a/containers/ceilometer/ceilometer-compute/Containerfile +++ b/containers/ceilometer/ceilometer-compute/Containerfile @@ -63,7 +63,9 @@ FROM ${BASE_IMAGE} LABEL summary="OpenStack Ceilometer Compute Agent" \ io.k8s.description="Ceilometer compute polling agent container built from source with kolla interface" +# Use system CA bundle: SSL_CERT_FILE for OpenSSL/stdlib, REQUESTS_CA_BUNDLE for requests/certifi ENV SSL_CERT_FILE=/etc/pki/ca-trust/extracted/pem/tls-ca-bundle.pem +ENV REQUESTS_CA_BUNDLE=/etc/pki/ca-trust/extracted/pem/tls-ca-bundle.pem RUN uid_gid_manage ceilometer diff --git a/containers/ceilometer/ceilometer-ipmi/Containerfile b/containers/ceilometer/ceilometer-ipmi/Containerfile index 14a8d48..b3d03fe 100644 --- a/containers/ceilometer/ceilometer-ipmi/Containerfile +++ b/containers/ceilometer/ceilometer-ipmi/Containerfile @@ -65,7 +65,9 @@ FROM ${BASE_IMAGE} LABEL summary="OpenStack Ceilometer IPMI Agent" \ io.k8s.description="Ceilometer IPMI polling agent container built from source with kolla interface" +# Use system CA bundle: SSL_CERT_FILE for OpenSSL/stdlib, REQUESTS_CA_BUNDLE for requests/certifi ENV SSL_CERT_FILE=/etc/pki/ca-trust/extracted/pem/tls-ca-bundle.pem +ENV REQUESTS_CA_BUNDLE=/etc/pki/ca-trust/extracted/pem/tls-ca-bundle.pem RUN uid_gid_manage ceilometer diff --git a/containers/ceilometer/ceilometer-notification/Containerfile b/containers/ceilometer/ceilometer-notification/Containerfile index e037e72..4248556 100644 --- a/containers/ceilometer/ceilometer-notification/Containerfile +++ b/containers/ceilometer/ceilometer-notification/Containerfile @@ -66,7 +66,9 @@ FROM ${BASE_IMAGE} LABEL summary="OpenStack Ceilometer Notification Agent" \ io.k8s.description="Ceilometer notification agent container built from source with kolla interface" +# Use system CA bundle: SSL_CERT_FILE for OpenSSL/stdlib, REQUESTS_CA_BUNDLE for requests/certifi ENV SSL_CERT_FILE=/etc/pki/ca-trust/extracted/pem/tls-ca-bundle.pem +ENV REQUESTS_CA_BUNDLE=/etc/pki/ca-trust/extracted/pem/tls-ca-bundle.pem RUN uid_gid_manage ceilometer diff --git a/containers/ceilometer/requirements.lock b/containers/ceilometer/requirements.lock new file mode 120000 index 0000000..c466dc0 --- /dev/null +++ b/containers/ceilometer/requirements.lock @@ -0,0 +1 @@ +requirements.lock.master \ No newline at end of file diff --git a/containers/ceilometer/requirements.lock.master b/containers/ceilometer/requirements.lock.master new file mode 100644 index 0000000..ab36765 --- /dev/null +++ b/containers/ceilometer/requirements.lock.master @@ -0,0 +1,661 @@ +# +# This file is autogenerated by pip-compile with Python 3.12 +# by the following command: +# +# pip-compile --allow-unsafe --constraint=upper-constraints.txt.master --output-file=requirements.lock.master --strip-extras ceilometer-central/pythonbuilddeps.txt ceilometer-central/pythondeps.txt ceilometer-compute/pythonbuilddeps.txt ceilometer-compute/pythondeps.txt ceilometer-ipmi/pythonbuilddeps.txt ceilometer-ipmi/pythondeps.txt ceilometer-notification/pythonbuilddeps.txt ceilometer-notification/pythondeps.txt src/ceilometer/requirements.txt +# +amqp==5.3.1 + # via + # -c upper-constraints.txt.master + # kombu + # oslo-messaging +aodhclient==3.11.0 + # via + # -c upper-constraints.txt.master + # -r src/ceilometer/requirements.txt +attrs==26.1.0 + # via + # -c upper-constraints.txt.master + # jsonschema + # referencing +autopage==0.6.0 + # via + # -c upper-constraints.txt.master + # cliff +awscrt==0.35.0 + # via + # -c upper-constraints.txt.master + # awscurl +awscurl==0.44 + # via + # -c upper-constraints.txt.master + # -r src/ceilometer/requirements.txt +bcrypt==5.0.0 + # via + # -c upper-constraints.txt.master + # oslo-middleware +boto3==1.35.99 + # via + # -c upper-constraints.txt.master + # awscurl +botocore==1.35.99 + # via + # -c upper-constraints.txt.master + # -r src/ceilometer/requirements.txt + # awscurl + # boto3 + # s3transfer +cachetools==7.1.4 + # via + # -c upper-constraints.txt.master + # -r src/ceilometer/requirements.txt + # oslo-messaging +certifi==2026.7.22 + # via requests +cffi==2.0.0 + # via + # -c upper-constraints.txt.master + # cryptography + # oslo-privsep +charset-normalizer==3.4.7 + # via + # -c upper-constraints.txt.master + # requests +cliff==4.15.0 + # via + # -c upper-constraints.txt.master + # aodhclient + # gnocchiclient + # osc-lib +cmd2==4.0.0 + # via + # -c upper-constraints.txt.master + # cliff +configargparse==1.7.5 + # via + # -c upper-constraints.txt.master + # awscurl +configparser==7.2.0 + # via + # -c upper-constraints.txt.master + # awscurl +cotyledon==2.2.0 + # via + # -c upper-constraints.txt.master + # -r src/ceilometer/requirements.txt +cryptography==43.0.3 + # via + # -c upper-constraints.txt.master + # openstacksdk +debtcollector==3.1.0 + # via + # -c upper-constraints.txt.master + # futurist + # gnocchiclient + # oslo-concurrency + # oslo-log + # oslo-messaging + # oslo-privsep + # oslo-rootwrap + # oslo-service +decorator==5.3.1 + # via + # -c upper-constraints.txt.master + # dogpile-cache + # jsonpath-rw + # openstacksdk +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 + # oslo-service +fasteners==0.20 + # via + # -c upper-constraints.txt.master + # oslo-concurrency + # tooz +futurist==3.4.0 + # via + # -c upper-constraints.txt.master + # -r src/ceilometer/requirements.txt + # gnocchiclient + # oslo-messaging + # tooz +gnocchiclient==7.2.0 + # via + # -c upper-constraints.txt.master + # -r src/ceilometer/requirements.txt +greenlet==3.5.3 + # via + # -c upper-constraints.txt.master + # eventlet + # oslo-service +idna==3.18 + # via + # -c upper-constraints.txt.master + # requests +iso8601==2.1.0 + # via + # -c upper-constraints.txt.master + # gnocchiclient + # 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 + # boto3 + # botocore + # openstacksdk +jsonpatch==1.33 + # via + # -c upper-constraints.txt.master + # openstacksdk +jsonpath-rw==1.4.0 + # via + # -c upper-constraints.txt.master + # jsonpath-rw-ext +jsonpath-rw-ext==1.2.2 + # via + # -c upper-constraints.txt.master + # -r src/ceilometer/requirements.txt +jsonpointer==3.1.1 + # via + # -c upper-constraints.txt.master + # jsonpatch +jsonschema==4.26.0 + # via + # -c upper-constraints.txt.master + # python-zaqarclient +jsonschema-specifications==2025.9.1 + # via + # -c upper-constraints.txt.master + # jsonschema +keystoneauth1==5.15.0 + # via + # -c upper-constraints.txt.master + # -r src/ceilometer/requirements.txt + # aodhclient + # gnocchiclient + # openstacksdk + # osc-lib + # python-novaclient + # python-zaqarclient +kombu==5.6.2 + # via + # -c upper-constraints.txt.master + # oslo-messaging +lxml==6.1.1 + # via + # -c upper-constraints.txt.master + # -r src/ceilometer/requirements.txt +markdown-it-py==4.2.0 + # via + # -c upper-constraints.txt.master + # rich +markupsafe==3.0.3 + # via + # -c upper-constraints.txt.master + # jinja2 +mdurl==0.1.2 + # via + # -c upper-constraints.txt.master + # markdown-it-py +msgpack==1.2.1 + # via + # -c upper-constraints.txt.master + # -r src/ceilometer/requirements.txt + # oslo-privsep + # oslo-serialization + # tooz +netaddr==1.3.0 + # via + # -c upper-constraints.txt.master + # oslo-config + # oslo-utils + # osprofiler +openstacksdk==4.18.0 + # via + # -c upper-constraints.txt.master + # -r src/ceilometer/requirements.txt + # osc-lib +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 + # aodhclient + # python-zaqarclient +oslo-cache==4.3.0 + # via + # -c upper-constraints.txt.master + # -r ceilometer-central/pythondeps.txt + # -r ceilometer-compute/pythondeps.txt + # -r ceilometer-ipmi/pythondeps.txt + # -r ceilometer-notification/pythondeps.txt + # -r src/ceilometer/requirements.txt +oslo-concurrency==7.6.1 + # via + # -c upper-constraints.txt.master + # -r src/ceilometer/requirements.txt + # oslo-service + # osprofiler +oslo-config==10.6.0 + # via + # -c upper-constraints.txt.master + # -r src/ceilometer/requirements.txt + # oslo-cache + # oslo-concurrency + # oslo-log + # oslo-messaging + # oslo-metrics + # oslo-middleware + # oslo-policy + # oslo-privsep + # oslo-reports + # oslo-service + # oslo-upgradecheck + # osprofiler +oslo-context==6.5.0 + # via + # -c upper-constraints.txt.master + # oslo-log + # oslo-messaging + # oslo-middleware + # oslo-policy +oslo-i18n==6.9.0 + # via + # -c upper-constraints.txt.master + # -r src/ceilometer/requirements.txt + # aodhclient + # osc-lib + # oslo-cache + # oslo-concurrency + # oslo-config + # oslo-log + # oslo-middleware + # oslo-policy + # oslo-privsep + # oslo-reports + # oslo-service + # oslo-upgradecheck + # oslo-utils + # python-novaclient + # python-zaqarclient +oslo-log==8.3.0 + # via + # -c upper-constraints.txt.master + # -r src/ceilometer/requirements.txt + # oslo-cache + # oslo-messaging + # oslo-metrics + # oslo-privsep + # oslo-service + # python-zaqarclient +oslo-messaging==18.2.0 + # via + # -c upper-constraints.txt.master + # -r src/ceilometer/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 + # oslo-messaging +oslo-policy==6.0.0 + # via + # -c upper-constraints.txt.master + # oslo-upgradecheck +oslo-privsep==3.12.0 + # via + # -c upper-constraints.txt.master + # -r src/ceilometer/requirements.txt +oslo-reports==3.9.0 + # via + # -c upper-constraints.txt.master + # -r src/ceilometer/requirements.txt +oslo-rootwrap==7.10.0 + # via + # -c upper-constraints.txt.master + # -r src/ceilometer/requirements.txt +oslo-serialization==5.11.0 + # via + # -c upper-constraints.txt.master + # aodhclient + # oslo-log + # oslo-messaging + # oslo-policy + # oslo-reports + # osprofiler + # python-novaclient + # tooz +oslo-service==4.8.0 + # via + # -c upper-constraints.txt.master + # oslo-messaging +oslo-upgradecheck==2.8.0 + # via + # -c upper-constraints.txt.master + # -r src/ceilometer/requirements.txt +oslo-utils==10.1.1 + # via + # -c upper-constraints.txt.master + # -r src/ceilometer/requirements.txt + # aodhclient + # osc-lib + # oslo-cache + # oslo-concurrency + # oslo-log + # oslo-messaging + # oslo-metrics + # oslo-middleware + # oslo-policy + # oslo-privsep + # oslo-reports + # oslo-serialization + # oslo-service + # oslo-upgradecheck + # osprofiler + # python-novaclient + # python-zaqarclient + # tooz +osprofiler==4.4.0 + # via + # -c upper-constraints.txt.master + # aodhclient +packaging==26.2 + # via + # -c upper-constraints.txt.master + # kombu + # oslo-utils +paste==3.10.1 + # via + # -c upper-constraints.txt.master + # oslo-service +pastedeploy==3.1.0 + # via + # -c upper-constraints.txt.master + # oslo-service +pbr==7.0.3 + # via + # -c upper-constraints.txt.master + # -r ceilometer-central/pythonbuilddeps.txt + # -r ceilometer-compute/pythonbuilddeps.txt + # -r ceilometer-ipmi/pythonbuilddeps.txt + # -r ceilometer-notification/pythonbuilddeps.txt + # -r src/ceilometer/requirements.txt + # aodhclient + # jsonpath-rw-ext + # 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-novaclient + # python-zaqarclient +platformdirs==4.10.0 + # via + # -c upper-constraints.txt.master + # openstacksdk +ply==3.11 + # via + # -c upper-constraints.txt.master + # jsonpath-rw +prettytable==3.18.0 + # via + # -c upper-constraints.txt.master + # cliff + # oslo-upgradecheck + # osprofiler + # python-novaclient +prometheus-client==0.25.0 + # via + # -c upper-constraints.txt.master + # -r src/ceilometer/requirements.txt + # 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 +pycparser==3.0 + # via + # -c upper-constraints.txt.master + # cffi +pygments==2.20.0 + # via + # -c upper-constraints.txt.master + # rich +pymemcache==4.0.0 + # via + # -c upper-constraints.txt.master + # oslo-cache +pyparsing==3.3.2 + # via + # -c upper-constraints.txt.master + # aodhclient + # oslo-utils +pyperclip==1.11.0 + # via + # -c upper-constraints.txt.master + # cmd2 +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 + # gnocchiclient + # oslo-log +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/ceilometer/requirements.txt +python-swiftclient==4.10.0 + # via + # -c upper-constraints.txt.master + # -r src/ceilometer/requirements.txt +python-zaqarclient==4.6.0 + # via + # -c upper-constraints.txt.master + # -r src/ceilometer/requirements.txt +pyyaml==6.0.3 + # via + # -c upper-constraints.txt.master + # -r src/ceilometer/requirements.txt + # 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/ceilometer/requirements.txt + # awscurl + # keystoneauth1 + # osc-lib + # oslo-config + # oslo-policy + # osprofiler + # python-swiftclient + # python-zaqarclient +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 + # oslo-service +rpds-py==2026.5.1 + # via + # -c upper-constraints.txt.master + # jsonschema + # referencing +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 + # jsonpath-rw + # python-binary-memcached + # python-dateutil + # routes +statsd==4.0.1 + # via + # -c upper-constraints.txt.master + # oslo-middleware +stevedore==5.9.0 + # via + # -c upper-constraints.txt.master + # -r src/ceilometer/requirements.txt + # cliff + # dogpile-cache + # keystoneauth1 + # osc-lib + # oslo-config + # oslo-messaging + # oslo-middleware + # oslo-policy + # python-novaclient + # python-zaqarclient + # tooz +tenacity==9.1.4 + # via + # -c upper-constraints.txt.master + # -r src/ceilometer/requirements.txt + # tooz +tooz==9.0.1 + # via + # -c upper-constraints.txt.master + # -r src/ceilometer/requirements.txt +typing-extensions==4.15.0 + # via + # -c upper-constraints.txt.master + # cotyledon + # keystoneauth1 + # os-service-types + # oslo-context + # oslo-middleware + # referencing +tzdata==2026.2 + # via + # -c upper-constraints.txt.master + # kombu +uhashring==2.4 + # via + # -c upper-constraints.txt.master + # python-binary-memcached +ujson==5.13.0 + # via + # -c upper-constraints.txt.master + # gnocchiclient +urllib3==2.7.0 + # via + # -c upper-constraints.txt.master + # awscurl + # botocore + # 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 + # oslo-messaging + # oslo-middleware + # oslo-service + # osprofiler +wrapt==2.2.2 + # via + # -c upper-constraints.txt.master + # debtcollector +xmltodict==1.0.4 + # via + # -c upper-constraints.txt.master + # -r src/ceilometer/requirements.txt +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/ceilometer/rpms.in.yaml b/containers/ceilometer/rpms.in.yaml new file mode 100644 index 0000000..35034a9 --- /dev/null +++ b/containers/ceilometer/rpms.in.yaml @@ -0,0 +1,28 @@ +contentOrigin: + repofiles: + - ./rpms.repo +context: + bare: true + +# +# To update rpms.lock.yaml: +# rpm-lockfile-prototype rpms.in.yaml +# + +arches: + - x86_64 + - aarch64 + +packages: + - gcc + - gcc-c++ + - git-core + - ipmitool + - libffi-devel + - libxml2-devel + - libxslt-devel + - openssl-devel + - python3-devel + - python3-libvirt + - python3-setuptools + - python3-wheel diff --git a/containers/ceilometer/sources.txt b/containers/ceilometer/sources.txt index 653fbea..19dd9f7 100644 --- a/containers/ceilometer/sources.txt +++ b/containers/ceilometer/sources.txt @@ -1,3 +1,3 @@ # stream name repo branch pinned-hash -master upper-constraints https://opendev.org/openstack/requirements.git master 22c7e800bda7e90d83ab215df50a610477e623d0 -master ceilometer https://opendev.org/openstack/ceilometer.git master 1f1fea4d276003fda1da7ddf882474cb73b8db63 +master upper-constraints https://opendev.org/openstack/requirements.git master ddab97be8a4c5fe248db071fde9013ba530d7f72 +master ceilometer https://opendev.org/openstack/ceilometer.git master f5467d53ff4173bd2b7b63293ed4ce1ebd9f8db2 diff --git a/containers/ceilometer/upper-constraints.txt b/containers/ceilometer/upper-constraints.txt new file mode 120000 index 0000000..b2ebb3b --- /dev/null +++ b/containers/ceilometer/upper-constraints.txt @@ -0,0 +1 @@ +upper-constraints.txt.master \ No newline at end of file diff --git a/containers/ceilometer/upper-constraints.txt.master b/containers/ceilometer/upper-constraints.txt.master new file mode 100644 index 0000000..4a22daa --- /dev/null +++ b/containers/ceilometer/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 diff --git a/containers/cloudkitty/buildrequirements.lock b/containers/cloudkitty/buildrequirements.lock new file mode 120000 index 0000000..823367e --- /dev/null +++ b/containers/cloudkitty/buildrequirements.lock @@ -0,0 +1 @@ +buildrequirements.lock.master \ No newline at end of file diff --git a/containers/cloudkitty/buildrequirements.lock.master b/containers/cloudkitty/buildrequirements.lock.master new file mode 100644 index 0000000..e011d50 --- /dev/null +++ b/containers/cloudkitty/buildrequirements.lock.master @@ -0,0 +1,218 @@ +# +# This file is autogenerated by pip-compile with Python 3.12 +# 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 cryptography +coherent-licensed==0.5.2 + # via + # importlib-metadata + # zipp +cython==3.2.9 + # via + # pyyaml + # sqlalchemy +flit-core==3.12.0 + # via + # blinker + # click + # coherent-licensed + # flask + # itsdangerous + # jinja2 + # markdown-it-py + # mdurl + # pyparsing + # pyproject-hooks + # typing-extensions + # werkzeug + # wheel +flit-core==4.0.2 + # via + # build + # idna + # packaging + # pathspec +hatch-vcs==0.5.0 + # via + # chardet + # eventlet + # platformdirs + # prettytable + # testresources + # testscenarios + # urllib3 +hatchling==1.31.0 + # via + # chardet + # dnspython + # eventlet + # hatch-vcs + # platformdirs + # prettytable + # pygments + # rich-argparse + # testresources + # testscenarios + # urllib3 + # wcwidth +maturin==1.14.1 + # via cryptography +packaging==26.2 + # via + # hatchling + # setuptools-scm + # vcs-versioning + # wheel +pathspec==1.1.1 + # via hatchling +pbr==7.0.3 + # via + # 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-serialization + # oslo-service + # oslo-upgradecheck + # oslo-utils + # pycadf + # python-keystoneclient + # python-observabilityclient + # stevedore + # tooz + # wsme +pluggy==1.6.0 + # via hatchling +poetry-core==2.4.1 + # via + # iso8601 + # reactivex + # 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 + # datetimerange + # gnocchiclient + # hatch-vcs + # importlib-metadata + # mbstrdecoder + # pluggy + # setuptools-rust + # tenacity + # typepy + # ujson + # urllib3 + # zipp +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.4 + # via setuptools-scm +wheel==0.47.0 + # via + # autopage + # bcrypt + # fasteners + # gnocchiclient + # mako + # pycparser + # python-dateutil + # 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 + # cryptography + # datetimerange + # decorator + # dogpile-cache + # fasteners + # gnocchiclient + # greenlet + # importlib-metadata + # influxdb-client + # mako + # markupsafe + # maturin + # mbstrdecoder + # msgpack + # netaddr + # pastedeploy + # pathspec + # pbr + # pluggy + # prometheus-client + # prompt-toolkit + # psutil + # pycparser + # pyjwt + # pymysql + # pyperclip + # python-dateutil + # python-observabilityclient + # pyyaml + # repoze-lru + # requests + # setuptools-rust + # setuptools-scm + # sqlalchemy + # statsd + # tenacity + # trove-classifiers + # typepy + # tzdata + # ujson + # vcs-versioning + # wrapt + # yappi + # zipp diff --git a/containers/cloudkitty/requirements.lock b/containers/cloudkitty/requirements.lock new file mode 120000 index 0000000..c466dc0 --- /dev/null +++ b/containers/cloudkitty/requirements.lock @@ -0,0 +1 @@ +requirements.lock.master \ No newline at end of file diff --git a/containers/cloudkitty/requirements.lock.master b/containers/cloudkitty/requirements.lock.master new file mode 100644 index 0000000..8061b6d --- /dev/null +++ b/containers/cloudkitty/requirements.lock.master @@ -0,0 +1,665 @@ +# +# This file is autogenerated by pip-compile with Python 3.12 +# by the following command: +# +# pip-compile --allow-unsafe --constraint=upper-constraints.txt.master --output-file=requirements.lock.master --strip-extras cloudkitty-api/pythonbuilddeps.txt cloudkitty-api/pythondeps.txt cloudkitty-processor/pythonbuilddeps.txt cloudkitty-processor/pythondeps.txt src/cloudkitty/requirements.txt +# +alembic==1.18.5 + # via + # -c upper-constraints.txt.master + # -r src/cloudkitty/requirements.txt + # oslo-db +amqp==5.3.1 + # via + # -c upper-constraints.txt.master + # kombu + # oslo-messaging +aniso8601==10.0.1 + # via + # -c upper-constraints.txt.master + # flask-restful +autopage==0.6.0 + # via + # -c upper-constraints.txt.master + # cliff +bcrypt==5.0.0 + # via + # -c upper-constraints.txt.master + # oslo-middleware +blinker==1.9.0 + # via + # -c upper-constraints.txt.master + # flask +cachetools==7.1.4 + # via + # -c upper-constraints.txt.master + # oslo-messaging +certifi==2026.7.22 + # via + # influxdb-client + # requests +cffi==2.0.0 + # via + # -c upper-constraints.txt.master + # cryptography +chardet==6.0.0.post1 + # via + # -c upper-constraints.txt.master + # mbstrdecoder +charset-normalizer==3.4.7 + # via + # -c upper-constraints.txt.master + # requests +click==8.4.2 + # via + # -c upper-constraints.txt.master + # flask +cliff==4.15.0 + # via + # -c upper-constraints.txt.master + # gnocchiclient + # osc-lib + # python-observabilityclient +cmd2==4.0.0 + # via + # -c upper-constraints.txt.master + # cliff +cotyledon==2.2.0 + # via + # -c upper-constraints.txt.master + # -r src/cloudkitty/requirements.txt +cryptography==43.0.3 + # via + # -c upper-constraints.txt.master + # openstacksdk +datetimerange==2.3.2 + # via + # -c upper-constraints.txt.master + # -r src/cloudkitty/requirements.txt +debtcollector==3.1.0 + # via + # -c upper-constraints.txt.master + # futurist + # gnocchiclient + # oslo-concurrency + # oslo-db + # oslo-log + # oslo-messaging + # oslo-service + # python-keystoneclient +decorator==5.3.1 + # via + # -c upper-constraints.txt.master + # dogpile-cache + # openstacksdk +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 + # oslo-service +fasteners==0.20 + # via + # -c upper-constraints.txt.master + # oslo-concurrency + # tooz +flask==3.1.3 + # via + # -c upper-constraints.txt.master + # -r src/cloudkitty/requirements.txt + # flask-restful +flask-restful==0.3.10 + # via + # -c upper-constraints.txt.master + # -r src/cloudkitty/requirements.txt +futurist==3.4.0 + # via + # -c upper-constraints.txt.master + # gnocchiclient + # oslo-messaging + # tooz +gnocchiclient==7.2.0 + # via + # -c upper-constraints.txt.master + # -r src/cloudkitty/requirements.txt +greenlet==3.5.3 + # via + # -c upper-constraints.txt.master + # eventlet + # oslo-service + # sqlalchemy +idna==3.18 + # via + # -c upper-constraints.txt.master + # requests +importlib-metadata==9.0.0 + # via + # -c upper-constraints.txt.master + # wsme +influxdb==5.3.2 + # via + # -c upper-constraints.txt.master + # -r src/cloudkitty/requirements.txt +influxdb-client==1.50.0 + # via + # -c upper-constraints.txt.master + # -r src/cloudkitty/requirements.txt +iso8601==2.1.0 + # via + # -c upper-constraints.txt.master + # -r src/cloudkitty/requirements.txt + # gnocchiclient + # keystoneauth1 + # openstacksdk + # oslo-utils +itsdangerous==2.2.0 + # via + # -c upper-constraints.txt.master + # flask +jinja2==3.1.6 + # via + # -c upper-constraints.txt.master + # flask + # oslo-middleware +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 +keystoneauth1==5.15.0 + # via + # -c upper-constraints.txt.master + # -r src/cloudkitty/requirements.txt + # gnocchiclient + # keystonemiddleware + # openstacksdk + # osc-lib + # python-keystoneclient + # python-observabilityclient +keystonemiddleware==13.0.0 + # via + # -c upper-constraints.txt.master + # -r src/cloudkitty/requirements.txt +kombu==5.6.2 + # via + # -c upper-constraints.txt.master + # oslo-messaging +mako==1.3.12 + # via + # -c upper-constraints.txt.master + # alembic + # pecan +markdown-it-py==4.2.0 + # via + # -c upper-constraints.txt.master + # rich +markupsafe==3.0.3 + # via + # -c upper-constraints.txt.master + # flask + # jinja2 + # mako + # werkzeug +mbstrdecoder==1.1.5 + # via + # -c upper-constraints.txt.master + # typepy +mdurl==0.1.2 + # via + # -c upper-constraints.txt.master + # markdown-it-py +msgpack==1.2.1 + # via + # -c upper-constraints.txt.master + # influxdb + # oslo-serialization + # tooz +netaddr==1.3.0 + # via + # -c upper-constraints.txt.master + # oslo-config + # oslo-utils + # wsme +openstacksdk==4.18.0 + # via + # -c upper-constraints.txt.master + # osc-lib +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-observabilityclient +oslo-cache==4.3.0 + # via + # -c upper-constraints.txt.master + # keystonemiddleware +oslo-concurrency==7.6.1 + # via + # -c upper-constraints.txt.master + # -r src/cloudkitty/requirements.txt + # oslo-service +oslo-config==10.6.0 + # via + # -c upper-constraints.txt.master + # -r src/cloudkitty/requirements.txt + # keystonemiddleware + # oslo-cache + # oslo-concurrency + # oslo-db + # oslo-log + # oslo-messaging + # oslo-metrics + # oslo-middleware + # oslo-policy + # oslo-service + # oslo-upgradecheck + # pycadf + # python-keystoneclient +oslo-context==6.5.0 + # via + # -c upper-constraints.txt.master + # -r src/cloudkitty/requirements.txt + # keystonemiddleware + # oslo-log + # oslo-messaging + # oslo-middleware + # oslo-policy +oslo-db==18.1.0 + # via + # -c upper-constraints.txt.master + # -r cloudkitty-api/pythondeps.txt + # -r cloudkitty-processor/pythondeps.txt + # -r src/cloudkitty/requirements.txt +oslo-i18n==6.9.0 + # via + # -c upper-constraints.txt.master + # -r src/cloudkitty/requirements.txt + # keystonemiddleware + # osc-lib + # oslo-cache + # oslo-concurrency + # oslo-config + # oslo-db + # oslo-log + # oslo-middleware + # oslo-policy + # oslo-service + # oslo-upgradecheck + # oslo-utils + # python-keystoneclient +oslo-log==8.3.0 + # via + # -c upper-constraints.txt.master + # -r src/cloudkitty/requirements.txt + # keystonemiddleware + # oslo-cache + # oslo-messaging + # oslo-metrics + # oslo-service +oslo-messaging==18.2.0 + # via + # -c upper-constraints.txt.master + # -r src/cloudkitty/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/cloudkitty/requirements.txt + # oslo-messaging +oslo-policy==6.0.0 + # via + # -c upper-constraints.txt.master + # -r src/cloudkitty/requirements.txt + # oslo-upgradecheck +oslo-serialization==5.11.0 + # via + # -c upper-constraints.txt.master + # keystonemiddleware + # oslo-log + # oslo-messaging + # oslo-policy + # pycadf + # python-keystoneclient + # tooz +oslo-service==4.8.0 + # via + # -c upper-constraints.txt.master + # oslo-messaging +oslo-upgradecheck==2.8.0 + # via + # -c upper-constraints.txt.master + # -r src/cloudkitty/requirements.txt +oslo-utils==10.1.1 + # via + # -c upper-constraints.txt.master + # -r src/cloudkitty/requirements.txt + # keystonemiddleware + # osc-lib + # oslo-cache + # oslo-concurrency + # oslo-db + # oslo-log + # oslo-messaging + # oslo-metrics + # oslo-middleware + # oslo-policy + # oslo-serialization + # oslo-service + # oslo-upgradecheck + # python-keystoneclient + # tooz +packaging==26.2 + # via + # -c upper-constraints.txt.master + # kombu + # oslo-utils + # python-keystoneclient + # typepy +paste==3.10.1 + # via + # -c upper-constraints.txt.master + # oslo-service +pastedeploy==3.1.0 + # via + # -c upper-constraints.txt.master + # -r src/cloudkitty/requirements.txt + # oslo-service +pbr==7.0.3 + # via + # -c upper-constraints.txt.master + # -r cloudkitty-api/pythonbuilddeps.txt + # -r cloudkitty-processor/pythonbuilddeps.txt + # -r src/cloudkitty/requirements.txt + # keystonemiddleware + # openstacksdk + # os-service-types + # osc-lib + # oslo-concurrency + # oslo-context + # oslo-i18n + # oslo-log + # oslo-messaging + # oslo-metrics + # oslo-middleware + # oslo-utils + # python-keystoneclient +pecan==1.8.0 + # via + # -c upper-constraints.txt.master + # -r src/cloudkitty/requirements.txt +platformdirs==4.10.0 + # via + # -c upper-constraints.txt.master + # openstacksdk +prettytable==3.18.0 + # via + # -c upper-constraints.txt.master + # cliff + # oslo-upgradecheck +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 + # -r cloudkitty-api/pythondeps.txt + # -r cloudkitty-processor/pythondeps.txt + # openstacksdk + # 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 +pymysql==1.2.0 + # via + # -c upper-constraints.txt.master + # oslo-db +pyparsing==3.3.2 + # via + # -c upper-constraints.txt.master + # oslo-utils +pyperclip==1.11.0 + # via + # -c upper-constraints.txt.master + # cmd2 +python-dateutil==2.9.0.post0 + # via + # -c upper-constraints.txt.master + # -r src/cloudkitty/requirements.txt + # datetimerange + # gnocchiclient + # influxdb + # influxdb-client + # oslo-log + # typepy +python-keystoneclient==5.8.0 + # via + # -c upper-constraints.txt.master + # -r src/cloudkitty/requirements.txt + # keystonemiddleware +python-observabilityclient==1.3.0 + # via + # -c upper-constraints.txt.master + # -r src/cloudkitty/requirements.txt +pytz==2026.2 + # via + # -c upper-constraints.txt.master + # flask-restful + # influxdb + # typepy + # wsme +pyyaml==6.0.3 + # via + # -c upper-constraints.txt.master + # cliff + # openstacksdk + # oslo-config + # oslo-messaging + # oslo-policy + # oslo-utils + # python-observabilityclient +reactivex==4.1.0 + # via + # -c upper-constraints.txt.master + # influxdb-client +repoze-lru==0.8 + # via + # -c upper-constraints.txt.master + # routes +requests==2.34.2 + # via + # -c upper-constraints.txt.master + # -r src/cloudkitty/requirements.txt + # influxdb + # keystoneauth1 + # keystonemiddleware + # osc-lib + # oslo-config + # oslo-policy + # python-keystoneclient +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 + # oslo-service +setproctitle==1.3.7 + # via + # -c upper-constraints.txt.master + # cotyledon +simplegeneric==0.8.1 + # via + # -c upper-constraints.txt.master + # wsme +six==1.17.0 + # via + # -c upper-constraints.txt.master + # flask-restful + # influxdb + # python-dateutil + # routes +sqlalchemy==2.0.51 + # via + # -c upper-constraints.txt.master + # -r src/cloudkitty/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/cloudkitty/requirements.txt + # cliff + # dogpile-cache + # keystoneauth1 + # osc-lib + # oslo-config + # oslo-db + # oslo-messaging + # oslo-middleware + # oslo-policy + # python-keystoneclient + # tooz +tenacity==9.1.4 + # via + # -c upper-constraints.txt.master + # 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/cloudkitty/requirements.txt +typepy==1.3.5 + # via + # -c upper-constraints.txt.master + # datetimerange +typing-extensions==4.15.0 + # via + # -c upper-constraints.txt.master + # alembic + # cotyledon + # keystoneauth1 + # os-service-types + # oslo-context + # oslo-middleware + # reactivex + # sqlalchemy +tzdata==2026.2 + # via + # -c upper-constraints.txt.master + # kombu +ujson==5.13.0 + # via + # -c upper-constraints.txt.master + # gnocchiclient +urllib3==2.7.0 + # via + # -c upper-constraints.txt.master + # influxdb-client + # requests +vine==5.1.0 + # via + # -c upper-constraints.txt.master + # amqp + # kombu +voluptuous==0.16.0 + # via + # -c upper-constraints.txt.master + # -r src/cloudkitty/requirements.txt + # tooz +wcwidth==0.8.1 + # via + # -c upper-constraints.txt.master + # prettytable + # prompt-toolkit +webob==1.8.10 + # via + # -c upper-constraints.txt.master + # keystonemiddleware + # oslo-messaging + # oslo-middleware + # oslo-service + # pecan + # wsme +werkzeug==3.1.8 + # via + # -c upper-constraints.txt.master + # -r src/cloudkitty/requirements.txt + # flask +wrapt==2.2.2 + # via + # -c upper-constraints.txt.master + # debtcollector +wsme==0.12.1 + # via + # -c upper-constraints.txt.master + # -r src/cloudkitty/requirements.txt +yappi==1.7.6 + # via + # -c upper-constraints.txt.master + # oslo-service +zipp==4.1.0 + # via + # -c upper-constraints.txt.master + # importlib-metadata + +# The following packages are considered to be unsafe in a requirements file: diff --git a/containers/cloudkitty/rpms.in.yaml b/containers/cloudkitty/rpms.in.yaml new file mode 100644 index 0000000..a04b7c8 --- /dev/null +++ b/containers/cloudkitty/rpms.in.yaml @@ -0,0 +1,27 @@ +contentOrigin: + repofiles: + - ./rpms.repo +context: + bare: true + +# +# To update rpms.lock.yaml: +# rpm-lockfile-prototype rpms.in.yaml +# + +arches: + - x86_64 + - aarch64 + +packages: + - gcc + - gcc-c++ + - git-core + - httpd + - libffi-devel + - mod_ssl + - openssl-devel + - python3-devel + - python3-mod_wsgi + - python3-setuptools + - python3-wheel diff --git a/containers/cloudkitty/sources.txt b/containers/cloudkitty/sources.txt index 08229d8..d3964b9 100644 --- a/containers/cloudkitty/sources.txt +++ b/containers/cloudkitty/sources.txt @@ -1,3 +1,3 @@ # stream name repo branch pinned-hash -master upper-constraints https://opendev.org/openstack/requirements.git master 22c7e800bda7e90d83ab215df50a610477e623d0 -master cloudkitty https://opendev.org/openstack/cloudkitty.git master 40323f7428af213ae2775c5d1850014f0c0106c6 +master upper-constraints https://opendev.org/openstack/requirements.git master ddab97be8a4c5fe248db071fde9013ba530d7f72 +master cloudkitty https://opendev.org/openstack/cloudkitty.git master 40323f7428af213ae2775c5d1850014f0c0106c6 diff --git a/containers/cloudkitty/upper-constraints.txt b/containers/cloudkitty/upper-constraints.txt new file mode 120000 index 0000000..b2ebb3b --- /dev/null +++ b/containers/cloudkitty/upper-constraints.txt @@ -0,0 +1 @@ +upper-constraints.txt.master \ No newline at end of file diff --git a/containers/cloudkitty/upper-constraints.txt.master b/containers/cloudkitty/upper-constraints.txt.master new file mode 100644 index 0000000..4a22daa --- /dev/null +++ b/containers/cloudkitty/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