mirror of
https://github.com/NVIDIA/OpenShell.git
synced 2026-10-15 05:09:44 +08:00
* feat(helm): add generic gateway TOML serializer Signed-off-by: Gaizka Menendez Hernandez <gmenende@redhat.com> * docs(architecture): define Helm gateway configuration boundary Signed-off-by: Gaizka Menendez Hernandez <gmenende@redhat.com> * feat(helm): define default gateway configuration map Signed-off-by: Gaizka Menendez Hernandez <gmenende@redhat.com> * refactor(helm): render gateway config from values map Signed-off-by: Gaizka Menendez Hernandez <gmenende@redhat.com> * test(helm): cover generic gateway TOML rendering Signed-off-by: Gaizka Menendez Hernandez <gmenende@redhat.com> * feat(helm): protect gateway config secret boundary Signed-off-by: Gaizka Menendez Hernandez <gmenende@redhat.com> * docs(helm): classify legacy gateway configuration values Signed-off-by: Gaizka Menendez Hernandez <gmenende@redhat.com> * refactor(helm): derive dual-use resources from gateway config Signed-off-by: Gaizka Menendez Hernandez <gmenende@redhat.com> * test(helm): migrate gateway config scenarios Signed-off-by: Gaizka Menendez Hernandez <gmenende@redhat.com> * refactor(helm): derive credential resources from gateway config Signed-off-by: Gaizka Menendez Hernandez <gmenende@redhat.com> * refactor(helm): migrate gateway config overlays Signed-off-by: Gaizka Menendez Hernandez <gmenende@redhat.com> * refactor(helm): remove gateway configuration shadow values Signed-off-by: Gaizka Menendez Hernandez <gmenende@redhat.com> * refactor(helm): align runtime config with resources Signed-off-by: Gaizka Menendez Hernandez <gmenende@redhat.com> * docs(helm): add gateway config migration guide Signed-off-by: Gaizka Menendez Hernandez <gmenende@redhat.com> * test(helm): validate rendered gateway config Signed-off-by: Gaizka Menendez Hernandez <gmenende@redhat.com> * test(helm): cover config resource coherence Signed-off-by: Gaizka Menendez Hernandez <gmenende@redhat.com> * fix(helm): make Kubernetes E2E deployable Signed-off-by: Gaizka Menendez Hernandez <gmenende@redhat.com> * fix(e2e): pass host aliases through gateway config Signed-off-by: Gaizka Menendez Hernandez <gmenende@redhat.com> * docs(e2e): reference gateway config host alias Signed-off-by: Gaizka Menendez Hernandez <gmenende@redhat.com> * fix(helm): enforce gateway resource ownership Signed-off-by: Gaizka Menendez Hernandez <gmenende@redhat.com> * test(e2e): cover chart host gateway input Signed-off-by: Gaizka Menendez Hernandez <gmenende@redhat.com> * fix(helm): address gateway config review findings Signed-off-by: Gaizka Menendez Hernandez <gmenende@redhat.com> * fix(helm): repair RFC 0012 migration integration Signed-off-by: Gaizka Menendez Hernandez <gmenende@redhat.com> * fix(e2e): align Kubernetes parity with RFC 0012 Signed-off-by: Gaizka Menendez Hernandez <gmenende@redhat.com> * fix(helm): complete gateway config migration Signed-off-by: Gaizka Menendez Hernandez <gmenende@redhat.com> * chore(helm): add SPDX header to TOML template * fix(helm): preserve legacy gateway configuration aliases Signed-off-by: Gaizka Menendez Hernandez <gmenende@redhat.com> * fix(helm): complete legacy gateway config compatibility Signed-off-by: Gaizka Menendez Hernandez <gmenende@redhat.com> * feat(helm): support gateway config arrays of tables * fix(helm): preserve sandbox identity aliases * fix(helm): address gateway config review findings Signed-off-by: Gaizka Menendez Hernandez <gmenende@redhat.com> * fix(helm): preserve gateway config migration settings Signed-off-by: Taylor Mutch <taylormutch@gmail.com> * test(helm): validate extension arrays in CI values Signed-off-by: Taylor Mutch <taylormutch@gmail.com> * fix(helm): restore unconditional SPDX headers Signed-off-by: Taylor Mutch <taylormutch@gmail.com> * fix(helm): restore route SPDX header placement Signed-off-by: Taylor Mutch <taylormutch@gmail.com> * docs(helm): simplify configuration and migration examples Signed-off-by: Taylor Mutch <taylormutch@gmail.com> * docs(helm): remove redundant flag explanations Signed-off-by: Taylor Mutch <taylormutch@gmail.com> * docs(helm): move chart configuration guidance to Kubernetes setup Signed-off-by: Taylor Mutch <taylormutch@gmail.com> --------- Signed-off-by: Gaizka Menendez Hernandez <gmenende@redhat.com> Signed-off-by: Taylor Mutch <taylormutch@gmail.com> Co-authored-by: Taylor Mutch <taylormutch@gmail.com>
136 lines
5.8 KiB
Bash
Executable File
136 lines
5.8 KiB
Bash
Executable File
#!/usr/bin/env bash
|
|
# SPDX-FileCopyrightText: Copyright (c) 2025-2026 NVIDIA CORPORATION & AFFILIATES. All rights reserved.
|
|
# SPDX-License-Identifier: Apache-2.0
|
|
|
|
set -euo pipefail
|
|
|
|
ROOT="$(cd "$(dirname "${BASH_SOURCE[0]}")/../.." && pwd)"
|
|
# shellcheck source=e2e/support/gateway-common.sh
|
|
source "${ROOT}/e2e/support/gateway-common.sh"
|
|
|
|
assert_resolves() {
|
|
local description=$1
|
|
local expected=$2
|
|
shift 2
|
|
local actual
|
|
actual="$(e2e_resolve_image_reference "$@")"
|
|
if [ "${actual}" != "${expected}" ]; then
|
|
echo "FAIL: ${description}: expected '${expected}', got '${actual}'" >&2
|
|
exit 1
|
|
fi
|
|
}
|
|
|
|
assert_resolves "repository inherits tag" \
|
|
"registry.example/gateway:test" \
|
|
"registry.example/gateway" test
|
|
assert_resolves "repository trims trailing slash" \
|
|
"registry.example/gateway:test" \
|
|
"registry.example/gateway/" test
|
|
assert_resolves "tagged reference is unchanged" \
|
|
"registry.example/gateway:branch" \
|
|
"registry.example/gateway:branch" test
|
|
assert_resolves "digest reference is unchanged" \
|
|
"registry.example/gateway@sha256:aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa" \
|
|
"registry.example/gateway@sha256:aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa" test
|
|
assert_resolves "registry port inherits tag" \
|
|
"localhost:5000/openshell/gateway:test" \
|
|
"localhost:5000/openshell/gateway" test
|
|
|
|
if e2e_image_reference_is_complete "registry.example/gateway:branch" \
|
|
&& e2e_image_reference_is_complete "registry.example/gateway@sha256:aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa" \
|
|
&& ! e2e_image_reference_is_complete "registry.example/gateway" \
|
|
&& e2e_image_reference_has_digest "registry.example/gateway@sha256:aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa" \
|
|
&& ! e2e_image_reference_has_digest "registry.example/gateway:branch"; then
|
|
:
|
|
else
|
|
echo "FAIL: image reference detection" >&2
|
|
exit 1
|
|
fi
|
|
|
|
assert_reference_part() {
|
|
local description=$1
|
|
local expected=$2
|
|
local actual=$3
|
|
if [ "${actual}" != "${expected}" ]; then
|
|
echo "FAIL: ${description}: expected '${expected}', got '${actual}'" >&2
|
|
exit 1
|
|
fi
|
|
}
|
|
|
|
assert_reference_part "repository strips tag" \
|
|
"registry.example/gateway" \
|
|
"$(e2e_image_reference_repository "registry.example/gateway:branch")"
|
|
assert_reference_part "repository preserves registry port" \
|
|
"localhost:5000/openshell/gateway" \
|
|
"$(e2e_image_reference_repository "localhost:5000/openshell/gateway:test")"
|
|
assert_reference_part "registry extracts hostname" \
|
|
"registry.example" \
|
|
"$(e2e_image_reference_registry "registry.example/openshell/gateway:branch")"
|
|
assert_reference_part "registry extracts hostname and port" \
|
|
"localhost:5000" \
|
|
"$(e2e_image_reference_registry "localhost:5000/openshell/gateway:test")"
|
|
assert_reference_part "repository path excludes registry" \
|
|
"openshell/gateway" \
|
|
"$(e2e_image_reference_repository_path "registry.example/openshell/gateway:branch")"
|
|
assert_reference_part "tag extracts tag" \
|
|
"branch" \
|
|
"$(e2e_image_reference_tag "registry.example/gateway:branch")"
|
|
assert_reference_part "digest extracts digest" \
|
|
"sha256:aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa" \
|
|
"$(e2e_image_reference_digest "registry.example/gateway@sha256:aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa")"
|
|
assert_reference_part "digest has no tag" \
|
|
"" \
|
|
"$(e2e_image_reference_tag "registry.example/gateway@sha256:aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa")"
|
|
|
|
assert_helm_image_translation() {
|
|
local description=$1
|
|
local image=$2
|
|
local expected_registry=$3
|
|
local expected_repository=$4
|
|
local expected_tag=$5
|
|
local expected_digest=$6
|
|
|
|
assert_reference_part "${description} registry" "${expected_registry}" \
|
|
"$(e2e_image_reference_registry "${image}")"
|
|
assert_reference_part "${description} repository" "${expected_repository}" \
|
|
"$(e2e_image_reference_repository_path "${image}")"
|
|
assert_reference_part "${description} tag" "${expected_tag}" \
|
|
"$(e2e_image_reference_tag "${image}")"
|
|
assert_reference_part "${description} digest" "${expected_digest}" \
|
|
"$(e2e_image_reference_digest "${image}")"
|
|
}
|
|
|
|
# The Kubernetes wrapper passes these three fields directly to Helm. Exercise
|
|
# a mixed tagged/digest-pinned set so each independently configurable image is
|
|
# translated without embedding a complete reference in image.repository.
|
|
assert_helm_image_translation "gateway" \
|
|
"registry.example/gateway:branch" "registry.example" "gateway" "branch" ""
|
|
assert_helm_image_translation "supervisor" \
|
|
"localhost:5000/openshell/supervisor:test" "localhost:5000" "openshell/supervisor" "test" ""
|
|
assert_helm_image_translation "sandbox" \
|
|
"registry.example/sandbox@sha256:bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb" \
|
|
"registry.example" "sandbox" "" "sha256:bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb"
|
|
|
|
# The certgen hook uses the chart's shared registry fallback. The Kubernetes
|
|
# harness must propagate the gateway registry there too, including an empty
|
|
# registry for k3d-imported local images.
|
|
if grep -Fq 'helm_values_args+=(--set-string "global.image.registry=$(e2e_image_reference_registry "${GATEWAY_IMAGE}")")' "${ROOT}/e2e/with-kube-gateway.sh"; then
|
|
:
|
|
else
|
|
echo "FAIL: Kubernetes Helm installs must propagate the gateway registry to certgen" >&2
|
|
exit 1
|
|
fi
|
|
|
|
# The Vault credential-driver overlay must use the fixture alias created in
|
|
# the gateway namespace. The alias is covered by OpenBao's development TLS
|
|
# certificate; the chart's namespace service is not.
|
|
if grep -Fq 'address: https://openbao-0:8200' \
|
|
"${ROOT}/deploy/helm/openshell/ci/values-credential-driver-vault.yaml"; then
|
|
:
|
|
else
|
|
echo "FAIL: Vault credential-driver overlay must use the OpenBao TLS alias" >&2
|
|
exit 1
|
|
fi
|
|
|
|
echo "E2E image override tests passed."
|