Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
62 commits
Select commit Hold shift + click to select a range
e070c1d
fix: resolve /v1/models empty results and null data bugs (#513)
jrhyness Mar 13, 2026
268164f
chore(deps): bump golang.org/x/crypto from 0.39.0 to 0.45.0 in /maas-…
dependabot[bot] Mar 13, 2026
a037731
chore(deps): bump go.opentelemetry.io/otel/sdk from 1.37.0 to 1.40.0 …
dependabot[bot] Mar 13, 2026
a4cc8fc
feat: migration path from tier-based to subscription CRDs (#519)
somya-bhatnagar Mar 14, 2026
31a3b35
chore: add env var force conflicts to deploy.sh (#524)
ryancham715 Mar 14, 2026
533b2ab
fix: unrestricted cors policy in debug mode (#482)
somya-bhatnagar Mar 14, 2026
1adfcf4
fix: enforce fail-close logic in AuthPolicy for inference endpoints (…
ryancham715 Mar 16, 2026
a7739f6
fix: resolve intermittent 429 failures in namespace scoping e2e tests…
somya-bhatnagar Mar 16, 2026
06285b3
test: add E2E tests for /v1/models endpoint (#509)
jrhyness Mar 16, 2026
2a62684
fix: updating the maas-api-auth policy to read from the params.env fi…
jland-redhat Mar 16, 2026
eeb252b
fix: patch maas-api URL placeholder in kustomize deployment mode (#545)
somya-bhatnagar Mar 17, 2026
81d097b
refactor: move subscription selection endpoint to internal API (#531)
jrhyness Mar 17, 2026
9480ab5
docs: add git clone instruction to quickstart (#542)
mynhardtburger Mar 17, 2026
544ccf0
chore: remove dead testing code, unused scripts, and redundant gitign…
somya-bhatnagar Mar 17, 2026
0c14516
chore: pulling tls setup and database setup into their own scripts (#…
jland-redhat Mar 17, 2026
3a9ca31
docs: replace stale deploy-rhoai-stable.sh reference (#538)
mynhardtburger Mar 17, 2026
f66407d
docs: remove envsubst from required tools in maas-setup.md (#537)
mynhardtburger Mar 17, 2026
fb9b0cd
docs: add missing documentation links to landing page (#541)
mynhardtburger Mar 17, 2026
984c4b5
build(maas-controller): add tools.mk to maas-controller (#491)
chaitanya1731 Mar 17, 2026
1cbba6f
chore: default maxExpiration of an API Key to 90 days if `expiresIn` …
ishitasequeira Mar 18, 2026
f77f2b3
fix: migrate verify script from removed /v1/tokens to /v1/api-keys (#…
tgitelman Mar 18, 2026
608759a
docs: fix database reference from SQLite to PostgreSQL (#535)
mynhardtburger Mar 18, 2026
cf3873c
docs: updating docs with subscription and tokens (#480)
jland-redhat Mar 18, 2026
7f6648e
feat(maas-controller): enable FIPS compliance in Dockerfile.konflux (…
chaitanya1731 Mar 19, 2026
a69e6d1
chore: removed unused and dead code from hack, scripts, and installer…
somya-bhatnagar Mar 19, 2026
c119db2
feat: return all available models with subscription info (#518)
jrhyness Mar 19, 2026
45b26f5
feat: enable FIPS compliance in maas-controller (#567)
chaitanya1731 Mar 19, 2026
a5eb4b6
chore: remove dead code for List endpoint (#568)
ishitasequeira Mar 19, 2026
a94d0b8
feat: scope MaaS API to get subscriptions from a configurable namespa…
ryancham715 Mar 19, 2026
8051229
feat: add support for ephemeral api keys (#552)
ishitasequeira Mar 20, 2026
713ed1f
docs: fix CRD kind and remove non-existent namespace field (#556)
mynhardtburger Mar 20, 2026
76ac121
docs: fix dCERT_NAME typo in Gateway setup command (#554)
mynhardtburger Mar 20, 2026
9e34e08
docs: remove non-existent CLI flags and env var from README (#533)
mynhardtburger Mar 20, 2026
63cabb6
docs: add missing flags and env var to scripts README (#539)
mynhardtburger Mar 20, 2026
9cdcd63
fix: use MaaS API key for validate-deployment.sh (#577)
angaduom Mar 21, 2026
17deedb
feat: add subscriptions endpoint (#572)
yu-teo Mar 21, 2026
f23b0b9
style: update makefile help msg according to k8s best practices (#583)
nirrozenbaum Mar 23, 2026
4807f87
fix: include username in api key search query results (#580)
chaitanya1731 Mar 23, 2026
e85a928
refactor: simplify TokenRateLimitPolicy by trusting AuthPolicy valida…
jrhyness Mar 23, 2026
1cd39ca
chore: sync security config files (#470)
security-config-sync[bot] Mar 23, 2026
2547fa1
feat(ci): add multi-arch image builds for maas (#570)
chaitanya1731 Mar 23, 2026
535a818
feat: move payload processing from a separate repo into a dir (#589)
nirrozenbaum Mar 23, 2026
a26787b
[Feat]: Add Azure OpenAI API translation plugin (#592)
abdallahsamabd Mar 23, 2026
d87cb69
feat: add Vertex AI (Gemini) api-translation translator (#593)
asaadbalum Mar 23, 2026
bda9e68
feat(payload-processing): add apikey-injection plugin (#594)
yehuditkerido Mar 23, 2026
a4ff436
feat(payload-processing): add model-provider-resolver and api-transla…
noyitz Mar 23, 2026
362563d
fix: move azureai api translator to the right place (#596)
nirrozenbaum Mar 24, 2026
6df5036
chore(deps): bump google.golang.org/grpc from 1.71.1 to 1.79.3 in /ma…
dependabot[bot] Mar 24, 2026
1245a8d
feat: complete the payload processing move (#602)
nirrozenbaum Mar 24, 2026
6090cea
feat: add ExternalModel support with provider, endpoint, and credenti…
noyitz Mar 24, 2026
ded9da5
fix: lock odh to ea1 (#604)
jland-redhat Mar 24, 2026
eef694a
feat: replace admin check with SAR checks (#588)
ishitasequeira Mar 25, 2026
a0419a0
feat: remove reliance on subscription header in inference and models …
ryancham715 Mar 25, 2026
2de4b7e
feat: refactor MaasModelRef into ExternalModel CRs (#586)
ishitasequeira Mar 25, 2026
66781e6
test: add go coverage tests (#510)
yu-teo Mar 25, 2026
95b149d
fix: address review feedback from ExternalModel CRD https://github.co…
ishitasequeira Mar 25, 2026
5d9bd72
docs: remove reliance on subscription header in inference and models …
ryancham715 Mar 25, 2026
3e9d355
fix: resolve MaaSModelRef stuck state by handling HTTPRoute race cond…
somya-bhatnagar Mar 26, 2026
461f66d
feat: auto-create models-as-a-service namespace on controller startup…
somya-bhatnagar Mar 26, 2026
17a81e2
docs: fix namespace inconsistency (#618)
ryancham715 Mar 26, 2026
fb42db2
fix: standardize CRDs (#520)
yu-teo Mar 26, 2026
169213a
feat: add salt encryption for API Key hashing (#619)
ishitasequeira Mar 26, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
12 changes: 6 additions & 6 deletions .github/hack/cleanup-odh.sh
Original file line number Diff line number Diff line change
Expand Up @@ -77,6 +77,10 @@ kubectl delete operatorgroup odh-operator-group -n odh-operator --ignore-not-fou
echo "7. Deleting odh-operator namespace..."
kubectl delete ns odh-operator --ignore-not-found --timeout=120s 2>/dev/null || true

# 8. Delete opendatahub namespace (contains deployed components)
echo "8. Deleting opendatahub namespace..."
kubectl delete ns opendatahub --ignore-not-found --timeout=120s 2>/dev/null || true

force_delete_namespace() {
local ns=$1
shift
Expand Down Expand Up @@ -107,10 +111,6 @@ force_delete_namespace() {
kubectl wait --for=delete namespace/"$ns" --timeout=30s 2>/dev/null || true
}

# 8. Delete opendatahub namespace (contains deployed components)
echo "8. Deleting opendatahub namespace..."
force_delete_namespace "opendatahub" "maasmodelrefs.maas.opendatahub.io"

# 9. Delete models-as-a-service namespace (contains MaaS CRs)
echo "9. Deleting models-as-a-service namespace..."
force_delete_namespace "models-as-a-service" \
Expand All @@ -120,12 +120,12 @@ force_delete_namespace "models-as-a-service" \
for policy_ns in kuadrant-system rh-connectivity-link; do
echo "10. Deleting $policy_ns namespace (if installed)..."
force_delete_namespace "$policy_ns" \
"authorinos.operator.authorino.kuadrat.io" "kuadrants.kuadrant.io" "limitadors.limitador.kuadrant.io"
"authorinos.operator.authorino.kuadrant.io" "kuadrants.kuadrant.io" "limitadors.limitador.kuadrant.io"
done

# 11. Delete llm namespace and model resources
echo "11. Deleting LLM models and namespace..."
force_delete_namespace "llm" "llminferenceservice" "inferenceservice"
force_delete_namespace "llm" "llminferenceservice" "inferenceservice" "maasmodelrefs.maas.opendatahub.io"

# 12. Delete gateway resources in openshift-ingress
echo "12. Deleting gateway resources..."
Expand Down
29 changes: 22 additions & 7 deletions .github/hack/install-odh.sh
Original file line number Diff line number Diff line change
Expand Up @@ -5,9 +5,12 @@
# Prerequisites: cert-manager and LWS operators (run install-cert-manager-and-lws.sh first).
#
# Environment variables:
# OPERATOR_CATALOG - Custom catalog image (optional). When unset, uses community-operators (ODH 3.3).
# OPERATOR_CATALOG - Custom catalog image (optional). When unset, uses community-operators.
# Set to e.g. quay.io/opendatahub/opendatahub-operator-catalog:latest for custom builds.
# OPERATOR_CHANNEL - Subscription channel (default: fast-3 for community, fast for custom catalog)
# OPERATOR_CHANNEL - Subscription channel (default: fast-3)
# OPERATOR_STARTING_CSV - Pin Subscription startingCSV (default: opendatahub-operator.v3.4.0-ea.1). Set to "-" to omit.
# OPERATOR_INSTALL_PLAN_APPROVAL - Manual (default) or Automatic; use "-" to omit.
# Manual: blocks auto-upgrades; this script auto-approves only the first InstallPlan so install does not stall.
# OPERATOR_IMAGE - Custom operator image to patch into CSV (optional)
#
# Usage: ./install-odh.sh
Expand All @@ -21,6 +24,8 @@ DATA_DIR="${REPO_ROOT}/scripts/data"
NAMESPACE="${OPERATOR_NAMESPACE:-opendatahub}"
OPERATOR_CATALOG="${OPERATOR_CATALOG:-}"
OPERATOR_CHANNEL="${OPERATOR_CHANNEL:-}"
OPERATOR_STARTING_CSV="${OPERATOR_STARTING_CSV:-}"
OPERATOR_INSTALL_PLAN_APPROVAL="${OPERATOR_INSTALL_PLAN_APPROVAL:-}"
OPERATOR_IMAGE="${OPERATOR_IMAGE:-}"

# Source deployment helpers
Expand Down Expand Up @@ -59,28 +64,38 @@ patch_operator_csv_if_needed() {
echo "=== Installing OpenDataHub operator ==="
echo ""

# 1. Catalog setup: use community-operators (ODH 3.3) by default, or custom catalog when OPERATOR_CATALOG is set
# 1. Catalog setup: community-operators by default, or custom catalog when OPERATOR_CATALOG is set
echo "1. Setting up ODH catalog..."
if [[ -n "$OPERATOR_CATALOG" ]]; then
echo " Using custom catalog: $OPERATOR_CATALOG"
create_custom_catalogsource "odh-custom-catalog" "openshift-marketplace" "$OPERATOR_CATALOG"
catalog_source="odh-custom-catalog"
channel="${OPERATOR_CHANNEL:-fast}"
channel="${OPERATOR_CHANNEL:-fast-3}"
else
echo " Using community-operators (ODH 3.3)"
echo " Using community-operators"
catalog_source="community-operators"
channel="${OPERATOR_CHANNEL:-fast-3}"
fi

# Pin to ODH 3.4 EA1 unless overridden (omit with OPERATOR_STARTING_CSV=- to follow channel head)
starting_csv="${OPERATOR_STARTING_CSV:-opendatahub-operator.v3.4.0-ea.1}"
[[ "$starting_csv" == "-" ]] && starting_csv=""

# Manual = no auto-upgrades; install_olm_operator still approves the first InstallPlan programmatically
plan_approval="${OPERATOR_INSTALL_PLAN_APPROVAL:-Manual}"
[[ "$plan_approval" == "-" ]] && plan_approval=""

# 2. Install ODH operator via OLM
echo "2. Installing ODH operator..."
install_olm_operator \
"opendatahub-operator" \
"$NAMESPACE" \
"$catalog_source" \
"$channel" \
"" \
"AllNamespaces"
"$starting_csv" \
"AllNamespaces" \
"openshift-marketplace" \
"$plan_approval"

# 3. Patch CSV with custom image if specified
if [[ -n "$OPERATOR_IMAGE" ]]; then
Expand Down
60 changes: 0 additions & 60 deletions .github/hack/uninstall-leader-worker-set.sh

This file was deleted.

12 changes: 12 additions & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -29,6 +29,7 @@ __pycache__/
*$py.class
*.so
.Python
.venv/
env/
venv/
ENV/
Expand All @@ -37,8 +38,19 @@ venv.bak/
pip-log.txt
pip-delete-this-directory.txt
.coverage
coverage.xml
.pytest_cache/
.mypy_cache/
.ruff_cache/
.tox/
htmlcov/

# Test / build reports
reports/

# OS / editor cruft
.DS_Store
.vscode/
apps/frontend/.env.local
apps/backend/.env
CLAUDE.md
Expand Down
67 changes: 67 additions & 0 deletions .gitleaks.toml
Original file line number Diff line number Diff line change
@@ -0,0 +1,67 @@
# Gitleaks configuration for opendatahub-io repos
# Synced from security-config. Do not edit in target repos.
#
# Path allowlists use Go regex syntax.
# Real credentials should NEVER be committed to any repository.

[extend]
useDefault = true

[allowlist]
description = "Exclude test fixtures, mock data, sample configs, and CI resources"
paths = [
# Go test files (commonly contain mock credentials)
'''.*_test\.go$''',

# JS/TS test files (.spec.ts, .test.tsx, etc.)
'''.*\.spec\.(ts|tsx|js|jsx)$''',
'''.*\.test\.(ts|tsx|js|jsx)$''',

# JS/TS test directories
'''__tests__/''',

# Go testdata directories
'''testdata/''',

# Python test data directories
'''test_data/''',

# Test fixtures
'''fixtures/''',

# JavaScript/TypeScript mocks
'''__mocks__/''',

# Go/Java/TS mock directories
'''mocks/''',
'''k8mocks/''',

# Sample and example configs with placeholder credentials
'''docs/samples/''',
'''config/samples/''',
'''config/overlays/test/''',

# CI/GitHub Actions test resources
'''\.github/resources/''',

# E2E test credentials
'''test/e2e/credentials/''',
'''tests/e2e/credentials/''',

# OpenShift CI sample resources
'''openshift-ci/resources/samples/''',

# Cypress test data
'''cypress/fixtures/''',
'''cypress/tests/mocked/''',

# Test certificate and key files
'''tests/data/.*\.(pem|crt|key)$''',
]

# Known test/placeholder credentials used in documentation and tests
regexes = [
'''database-password\s*:\s*"?(The)?BlurstOfTimes"?''',
'''database-user\s*:\s*"?mlmduser"?''',
'''database-user\s*:\s*"?modelregistryuser"?''',
]
5 changes: 5 additions & 0 deletions .gitleaksignore
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
# Gitleaks ignore file
# Add false positive fingerprints below (one per line)
# Format: commit:file:rule-id:line or file:rule-id:line
#
# For path-based exclusions, use .gitleaks.toml allowlist instead.
6 changes: 6 additions & 0 deletions .tekton/odh-maas-api-pull-request.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -29,6 +29,12 @@ spec:
value: maas-api/Dockerfile
- name: path-context
value: maas-api
- name: build-platforms
value:
- linux/x86_64
- linux/arm64
- linux/ppc64le
- linux/s390x
- name: additional-tags
value:
- 'odh-pr-{{revision}}'
Expand Down
6 changes: 6 additions & 0 deletions .tekton/odh-maas-api-push.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -28,6 +28,12 @@ spec:
value: maas-api/Dockerfile
- name: path-context
value: maas-api
- name: build-platforms
value:
- linux/x86_64
- linux/arm64
- linux/ppc64le
- linux/s390x
pipelineRef:
resolver: git
params:
Expand Down
6 changes: 6 additions & 0 deletions .tekton/odh-maas-controller-pull-request.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -34,6 +34,12 @@ spec:
- 'odh-pr-{{revision}}'
- name: pipeline-type
value: pull-request
- name: build-platforms
value:
- linux/x86_64
- linux/arm64
- linux/ppc64le
- linux/s390x
pipelineRef:
resolver: git
params:
Expand Down
6 changes: 6 additions & 0 deletions .tekton/odh-maas-controller-push.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -28,6 +28,12 @@ spec:
value: Dockerfile
- name: path-context
value: maas-controller
- name: build-platforms
value:
- linux/x86_64
- linux/arm64
- linux/ppc64le
- linux/s390x
pipelineRef:
resolver: git
params:
Expand Down
2 changes: 2 additions & 0 deletions OWNERS
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,7 @@ approvers:
- chaitanya1731
- nerdalert
- jland-redhat
- nirrozenbaum
- dmytro-zaharnytskyi
- SB159
- noyitz
Expand All @@ -21,6 +22,7 @@ reviewers:
- chaitanya1731
- nerdalert
- jland-redhat
- nirrozenbaum
- dmytro-zaharnytskyi
- SB159
- noyitz
Expand Down
12 changes: 4 additions & 8 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -59,12 +59,9 @@ For detailed instructions, see the [Deployment Guide](docs/content/quickstart.md
|------|--------|---------|-------------|
| `--deployment-mode` | `operator`, `kustomize` | `operator` | Deployment method |
| `--operator-type` | `rhoai`, `odh` | `rhoai` | Which operator to install |
| `--policy-engine` | `rhcl`, `kuadrant` | auto | Gateway policy engine (rhcl for operators, kuadrant for kustomize) |
| `--enable-tls-backend` | flag | enabled | TLS for Authorino ↔ MaaS API |
| `--skip-certmanager` | flag | auto-detect | Skip cert-manager installation |
| `--skip-lws` | flag | auto-detect | Skip LeaderWorkerSet installation |
| `--disable-tls-backend` | flag | `false` | Disable TLS backend |
| `--namespace` | string | auto | Target namespace |
| `--timeout` | seconds | `300` | Operation timeout |
| `--verbose` | flag | false | Enable debug logging |
| `--dry-run` | flag | false | Show plan without executing |
| `--help` | flag | - | Display full help |
Expand All @@ -82,14 +79,16 @@ For detailed instructions, see the [Deployment Guide](docs/content/quickstart.md
| Variable | Description | Example |
|----------|-------------|---------|
| `MAAS_API_IMAGE` | Custom MaaS API container image (works in both operator and kustomize modes) | `quay.io/user/maas-api:pr-123` |
| `MAAS_CONTROLLER_IMAGE` | Custom MaaS controller container image | `quay.io/user/maas-controller:pr-123` |
| `OPERATOR_CATALOG` | Custom operator catalog | `quay.io/opendatahub/catalog:pr-456` |
| `OPERATOR_IMAGE` | Custom operator image | `quay.io/opendatahub/operator:pr-456` |
| `OPERATOR_TYPE` | Operator type (rhoai/odh) | `odh` |
| `POLICY_ENGINE` | Policy engine (rhcl/kuadrant) | `kuadrant` |
| `LOG_LEVEL` | Logging verbosity | `DEBUG`, `INFO`, `WARN`, `ERROR` |

**Note:** TLS backend is enabled by default. Use `--disable-tls-backend` to disable.

**Note:** The policy engine is auto-determined based on operator type (`rhcl` for RHOAI, `kuadrant` for ODH/kustomize) and does not need to be set manually.

### Deployment Examples

#### Standard Deployments
Expand Down Expand Up @@ -119,9 +118,6 @@ MAAS_API_IMAGE=quay.io/myuser/maas-api:pr-123 \
#### Minimal Deployments

```bash
# Skip optional operators (if already installed)
./scripts/deploy.sh --skip-certmanager --skip-lws

# Deploy without TLS backend (HTTP tier lookup)
./scripts/deploy.sh --disable-tls-backend
```
Expand Down
2 changes: 2 additions & 0 deletions deployment/base/maas-api/core/deployment.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -24,6 +24,8 @@ spec:
fieldPath: metadata.namespace
- name: SECURE
value: "false"
- name: MAAS_SUBSCRIPTION_NAMESPACE
value: "models-as-a-service"
resources:
requests:
memory: "64Mi"
Expand Down
Loading
Loading