Skip to content

Commit 2f6a53f

Browse files
committed
Merge remote-tracking branch 'upstream/main'
2 parents 4b51e2c + ebd87a2 commit 2f6a53f

27 files changed

Lines changed: 6855 additions & 10 deletions

.github/workflows/rhai-on-xks-chart-test.yaml

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,7 @@ jobs:
2323
strategy:
2424
fail-fast: false
2525
matrix:
26-
cloud_provider: [azure, coreweave]
26+
cloud_provider: [azure, coreweave, aws]
2727
steps:
2828
- name: Checkout
2929
uses: actions/checkout@08c6903cd8c0fde910a37f88322edcfb5dd907a8 # v5.0.0
@@ -62,4 +62,7 @@ jobs:
6262
elif [ "${{ matrix.cloud_provider }}" = "coreweave" ]; then
6363
echo "=== CoreWeaveKubernetesEngine CR ==="
6464
kubectl get coreweavekubernetesengines.infrastructure.opendatahub.io -A -o yaml 2>/dev/null || echo "No CoreWeaveKubernetesEngine CRs found"
65+
elif [ "${{ matrix.cloud_provider }}" = "aws" ]; then
66+
echo "=== AWSKubernetesEngine CR ==="
67+
kubectl get awskubernetesengines.infrastructure.opendatahub.io -A -o yaml 2>/dev/null || echo "No AWSKubernetesEngine CRs found"
6568
fi

Makefile

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -332,9 +332,11 @@ update-image: yq ## Update xks chart images from Build-Config repo into values-$
332332
$(YQ) -i '.hooks.cliImage = load("'"$${patch}"'").hooks.cliImage' "$${override}" && \
333333
$(YQ) -i '.azure.cloudManager.image = load("'"$${patch}"'").azure.cloudManager.image' "$${override}" && \
334334
$(YQ) -i '.coreweave.cloudManager.image = load("'"$${patch}"'").coreweave.cloudManager.image' "$${override}" && \
335+
$(YQ) -i '.aws.cloudManager.image = load("'"$${patch}"'").aws.cloudManager.image' "$${override}" && \
335336
echo "Created $${override}:" && \
336337
echo " rhaiOperator.image: $$($(YQ) '.rhaiOperator.image' "$${override}")" && \
337338
echo " relatedImages: $$($(YQ) '.rhaiOperator.relatedImages | length' "$${override}") entries" && \
338339
echo " hooks.cliImage: $$($(YQ) '.hooks.cliImage' "$${override}")" && \
339340
echo " azure.cloudManager.image: $$($(YQ) '.azure.cloudManager.image' "$${override}")" && \
340-
echo " coreweave.cloudManager.image: $$($(YQ) '.coreweave.cloudManager.image' "$${override}")"
341+
echo " coreweave.cloudManager.image: $$($(YQ) '.coreweave.cloudManager.image' "$${override}")" && \
342+
echo " aws.cloudManager.image: $$($(YQ) '.aws.cloudManager.image' "$${override}")"

charts/rhai-on-xks-chart/api-docs.md

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,19 @@ RHAI on XKS Helm chart for non-OLM installation on non-OpenShift Kubernetes serv
88

99
| Key | Type | Default | Description |
1010
|-----|------|---------|-------------|
11+
| aws.cloudManager.image | string | `"quay.io/opendatahub/opendatahub-operator:latest"` | |
12+
| aws.cloudManager.imagePullPolicy | string | `"Always"` | |
13+
| aws.cloudManager.namespace | string | `"rhai-cloudmanager-system"` | |
14+
| aws.enabled | bool | `false` | |
15+
| aws.kubernetesEngine.enabled | bool | `true` | |
16+
| aws.kubernetesEngine.spec.dependencies.certManager.configuration | object | `{}` | |
17+
| aws.kubernetesEngine.spec.dependencies.certManager.managementPolicy | string | `"Managed"` | |
18+
| aws.kubernetesEngine.spec.dependencies.gatewayAPI.configuration | object | `{}` | |
19+
| aws.kubernetesEngine.spec.dependencies.gatewayAPI.managementPolicy | string | `"Managed"` | |
20+
| aws.kubernetesEngine.spec.dependencies.lws.configuration.namespace | string | `"openshift-lws-operator"` | |
21+
| aws.kubernetesEngine.spec.dependencies.lws.managementPolicy | string | `"Managed"` | |
22+
| aws.kubernetesEngine.spec.dependencies.sailOperator.configuration.namespace | string | `"istio-system"` | |
23+
| aws.kubernetesEngine.spec.dependencies.sailOperator.managementPolicy | string | `"Managed"` | |
1124
| azure.cloudManager.image | string | `"quay.io/opendatahub/opendatahub-operator:latest"` | |
1225
| azure.cloudManager.imagePullPolicy | string | `"Always"` | |
1326
| azure.cloudManager.namespace | string | `"rhai-cloudmanager-system"` | |

charts/rhai-on-xks-chart/scripts/update-bundle.sh

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -35,6 +35,7 @@ HELMTEMPLATE_GENERATOR_PKG="github.com/davidebianchi/helmtemplate-generator@7d76
3535
CLOUD_TARGETS=(
3636
"azure azure cloudmanager/azure"
3737
"coreweave coreweave cloudmanager/coreweave"
38+
"aws aws cloudmanager/aws"
3839
)
3940

4041
# Defaults
@@ -119,7 +120,7 @@ echo "Generating kustomization.yaml from templates..."
119120
# Generate main operator kustomization (creates config/rhoai/manager/kustomization.yaml)
120121
make -C "${ODH_OPERATOR_DIR}" manager-kustomization ODH_PLATFORM_TYPE=rhoai
121122
# Generate cloudmanager kustomizations
122-
for cloud in azure coreweave; do
123+
for cloud in azure coreweave aws; do
123124
cp -f "${ODH_OPERATOR_DIR}/config/cloudmanager/${cloud}/manager/kustomization.yaml.in" \
124125
"${ODH_OPERATOR_DIR}/config/cloudmanager/${cloud}/manager/kustomization.yaml"
125126
done

charts/rhai-on-xks-chart/templates/NOTES.txt

Lines changed: 33 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,8 @@ RHAI on XKS Helm Chart has been installed.
44
Cloud provider: Azure
55
{{- else if .Values.coreweave.enabled }}
66
Cloud provider: CoreWeave
7+
{{- else if .Values.aws.enabled }}
8+
Cloud provider: AWS
79
{{- end }}
810

911
== Custom Resources ==
@@ -86,4 +88,35 @@ CoreWeaveKubernetesEngine CR is NOT automatically created. To create it manually
8688
{{- end }}
8789
{{- end }}
8890

91+
{{- if .Values.aws.enabled }}
92+
{{- if .Values.aws.kubernetesEngine.enabled }}
93+
94+
AWSKubernetesEngine CR was automatically created during the installation.
95+
{{- else }}
96+
97+
AWSKubernetesEngine CR is NOT automatically created. To create it manually:
98+
99+
kubectl apply -f - <<EOF
100+
apiVersion: infrastructure.opendatahub.io/v1alpha1
101+
kind: AWSKubernetesEngine
102+
metadata:
103+
name: default-awskubernetesengine
104+
spec:
105+
dependencies:
106+
certManager:
107+
configuration: {}
108+
managementPolicy: Managed
109+
gatewayAPI:
110+
configuration: {}
111+
managementPolicy: Managed
112+
lws:
113+
configuration: {}
114+
managementPolicy: Managed
115+
sailOperator:
116+
configuration: {}
117+
managementPolicy: Managed
118+
EOF
119+
{{- end }}
120+
{{- end }}
121+
89122
Set managementPolicy to "Unmanaged" for any dependency you manage yourself.

charts/rhai-on-xks-chart/templates/_helpers.tpl

Lines changed: 8 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -52,10 +52,14 @@ imagePullSecrets:
5252
Validate that exactly one cloud provider is enabled.
5353
*/}}
5454
{{- define "rhai-on-xks-chart.validateCloudProvider" -}}
55-
{{- if and .Values.enabled (not (or .Values.azure.enabled .Values.coreweave.enabled)) -}}
56-
{{- fail "Exactly one cloud provider must be enabled: set azure.enabled=true or coreweave.enabled=true" -}}
55+
{{- if and .Values.enabled (not (or .Values.azure.enabled .Values.coreweave.enabled .Values.aws.enabled)) -}}
56+
{{- fail "Exactly one cloud provider must be enabled: set azure.enabled=true, coreweave.enabled=true, or aws.enabled=true" -}}
5757
{{- end -}}
58-
{{- if and .Values.enabled .Values.azure.enabled .Values.coreweave.enabled -}}
59-
{{- fail "Only one cloud provider can be enabled at a time: set either azure.enabled=true or coreweave.enabled=true, not both" -}}
58+
{{- $enabledCount := 0 -}}
59+
{{- if .Values.azure.enabled }}{{- $enabledCount = add $enabledCount 1 -}}{{- end -}}
60+
{{- if .Values.coreweave.enabled }}{{- $enabledCount = add $enabledCount 1 -}}{{- end -}}
61+
{{- if .Values.aws.enabled }}{{- $enabledCount = add $enabledCount 1 -}}{{- end -}}
62+
{{- if and .Values.enabled (gt (int $enabledCount) 1) -}}
63+
{{- fail "Only one cloud provider can be enabled at a time: set either azure.enabled=true, coreweave.enabled=true, or aws.enabled=true, not multiple" -}}
6064
{{- end -}}
6165
{{- end -}}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,226 @@
1+
{{- if .Values.aws.enabled }}
2+
apiVersion: apiextensions.k8s.io/v1
3+
kind: CustomResourceDefinition
4+
metadata:
5+
annotations:
6+
controller-gen.kubebuilder.io/version: v0.17.3
7+
helm.sh/resource-policy: keep
8+
name: awskubernetesengines.infrastructure.opendatahub.io
9+
spec:
10+
group: infrastructure.opendatahub.io
11+
names:
12+
kind: AWSKubernetesEngine
13+
listKind: AWSKubernetesEngineList
14+
plural: awskubernetesengines
15+
singular: awskubernetesengine
16+
scope: Cluster
17+
versions:
18+
- additionalPrinterColumns:
19+
- description: Ready
20+
jsonPath: .status.conditions[?(@.type=="Ready")].status
21+
name: Ready
22+
type: string
23+
- description: Reason
24+
jsonPath: .status.conditions[?(@.type=="Ready")].reason
25+
name: Reason
26+
type: string
27+
- description: DependenciesAvailable
28+
jsonPath: .status.conditions[?(@.type=="DependenciesAvailable")].status
29+
name: Deps Available
30+
type: string
31+
name: v1alpha1
32+
schema:
33+
openAPIV3Schema:
34+
description: |-
35+
AWSKubernetesEngine is the Schema for the awskubernetesengines API.
36+
It represents the configuration for an AWS Kubernetes Service cluster.
37+
properties:
38+
apiVersion:
39+
description: |-
40+
APIVersion defines the versioned schema of this representation of an object.
41+
Servers should convert recognized schemas to the latest internal value, and
42+
may reject unrecognized values.
43+
More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources
44+
type: string
45+
kind:
46+
description: |-
47+
Kind is a string value representing the REST resource this object represents.
48+
Servers may infer this from the endpoint the client submits requests to.
49+
Cannot be updated.
50+
In CamelCase.
51+
More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds
52+
type: string
53+
metadata:
54+
type: object
55+
spec:
56+
description: AWSKubernetesEngineSpec defines the desired state of AWSKubernetesEngine.
57+
properties:
58+
dependencies:
59+
description: Dependencies defines the dependency configurations for the AWS Kubernetes Engine.
60+
properties:
61+
certManager:
62+
description: CertManager defines the cert-manager operator dependency.
63+
properties:
64+
configuration:
65+
description: Configuration for the cert-manager operator.
66+
type: object
67+
managementPolicy:
68+
default: Managed
69+
description: |-
70+
ManagementPolicy determines whether the operator manages this dependency.
71+
Managed: the operator installs and reconciles the dependency.
72+
Unmanaged: the operator does not manage the dependency; the user is responsible.
73+
enum:
74+
- Managed
75+
- Unmanaged
76+
type: string
77+
type: object
78+
gatewayAPI:
79+
description: GatewayAPI defines the Gateway API dependency.
80+
properties:
81+
configuration:
82+
description: Configuration for the Gateway API.
83+
type: object
84+
managementPolicy:
85+
default: Managed
86+
description: |-
87+
ManagementPolicy determines whether the operator manages this dependency.
88+
Managed: the operator installs and reconciles the dependency.
89+
Unmanaged: the operator does not manage the dependency; the user is responsible.
90+
enum:
91+
- Managed
92+
- Unmanaged
93+
type: string
94+
type: object
95+
lws:
96+
description: LWS defines the LeaderWorkerSet operator dependency.
97+
properties:
98+
configuration:
99+
default: {}
100+
description: Configuration for the LWS operator.
101+
properties:
102+
namespace:
103+
default: openshift-lws-operator
104+
description: Namespace is the namespace where the LWS operator is deployed.
105+
maxLength: 63
106+
pattern: ^([a-z0-9]([-a-z0-9]*[a-z0-9])?)?$
107+
type: string
108+
x-kubernetes-validations:
109+
- message: namespace is immutable
110+
rule: self == oldSelf
111+
type: object
112+
managementPolicy:
113+
default: Managed
114+
description: |-
115+
ManagementPolicy determines whether the operator manages this dependency.
116+
Managed: the operator installs and reconciles the dependency.
117+
Unmanaged: the operator does not manage the dependency; the user is responsible.
118+
enum:
119+
- Managed
120+
- Unmanaged
121+
type: string
122+
type: object
123+
sailOperator:
124+
description: SailOperator defines the Sail operator (Istio) dependency.
125+
properties:
126+
configuration:
127+
default: {}
128+
description: Configuration for the Sail operator.
129+
properties:
130+
namespace:
131+
default: istio-system
132+
description: Namespace is the namespace where the Sail operator (Istio) is deployed.
133+
maxLength: 63
134+
pattern: ^([a-z0-9]([-a-z0-9]*[a-z0-9])?)?$
135+
type: string
136+
x-kubernetes-validations:
137+
- message: namespace is immutable
138+
rule: self == oldSelf
139+
type: object
140+
managementPolicy:
141+
default: Managed
142+
description: |-
143+
ManagementPolicy determines whether the operator manages this dependency.
144+
Managed: the operator installs and reconciles the dependency.
145+
Unmanaged: the operator does not manage the dependency; the user is responsible.
146+
enum:
147+
- Managed
148+
- Unmanaged
149+
type: string
150+
type: object
151+
type: object
152+
type: object
153+
status:
154+
description: AWSKubernetesEngineStatus defines the observed state of AWSKubernetesEngine.
155+
properties:
156+
conditions:
157+
items:
158+
properties:
159+
lastHeartbeatTime:
160+
description: |-
161+
The last time we got an update on a given condition, this should not be set and is
162+
present only for backward compatibility reasons
163+
format: date-time
164+
type: string
165+
lastTransitionTime:
166+
description: |-
167+
lastTransitionTime is the last time the condition transitioned from one status to another.
168+
This should be when the underlying condition changed.
169+
If that is not known, then using the time when the API field changed is acceptable.
170+
format: date-time
171+
type: string
172+
message:
173+
description: message is a human-readable message indicating details about the transition.
174+
type: string
175+
observedGeneration:
176+
description: |-
177+
observedGeneration represents the .metadata.generation that the condition was set based upon.
178+
For instance, if .metadata.generation is currently 12, but the .status.conditions[x].observedGeneration
179+
is 9, the condition is out of date with respect to the current state of the instance.
180+
format: int64
181+
minimum: 0
182+
type: integer
183+
reason:
184+
description: |-
185+
reason contains a programmatic identifier indicating the reason for the condition's last transition.
186+
The value should be a CamelCase string.
187+
type: string
188+
severity:
189+
description: |-
190+
Severity with which to treat failures of this type of condition.
191+
When this is not specified, it defaults to Error.
192+
type: string
193+
status:
194+
description: status of the condition, one of True, False, Unknown.
195+
enum:
196+
- "True"
197+
- "False"
198+
- Unknown
199+
type: string
200+
type:
201+
description: type of condition in CamelCase or in foo.example.com/CamelCase.
202+
maxLength: 316
203+
pattern: ^([a-z0-9]([-a-z0-9]*[a-z0-9])?(\.[a-z0-9]([-a-z0-9]*[a-z0-9])?)*/)?(([A-Za-z0-9][-A-Za-z0-9_.]*)?[A-Za-z0-9])$
204+
type: string
205+
required:
206+
- status
207+
- type
208+
type: object
209+
type: array
210+
x-kubernetes-list-type: atomic
211+
observedGeneration:
212+
description: The generation observed by the resource controller.
213+
format: int64
214+
type: integer
215+
phase:
216+
type: string
217+
type: object
218+
type: object
219+
x-kubernetes-validations:
220+
- message: AWSKubernetesEngine name must be default-awskubernetesengine
221+
rule: self.metadata.name == 'default-awskubernetesengine'
222+
served: true
223+
storage: true
224+
subresources:
225+
status: {}
226+
{{- end }}

0 commit comments

Comments
 (0)