Skip to content

Commit b6befde

Browse files
feat: add RHCL (Kuadrant) as dependency chart (opendatahub-io#109)
* feat: add RHCL (Kuadrant) as dependency chart Add charts/dependencies/rhcl-operator/ following the cert-manager/ sail-operator pattern for non-OLM Kubernetes installations. - 14 CRDs (Kuadrant, Authorino, Limitador, AuthPolicy, RateLimitPolicy, etc.) - 4 operator deployments (Kuadrant, Authorino, Limitador, DNS) - RBAC, ServiceAccounts, PodDisruptionBudgets, ServiceMonitors - Kuadrant CR for operator reconciliation - update-bundle.sh script for future version updates - Snapshot tests Tested on AKS: all operators running, runtime pods healthy, AuthPolicy affecting routes, snapshot tests pass. Co-authored-by: Cursor <cursoragent@cursor.com> * fix: add monitoring.coreos.com permissions to kuadrant-operator clusterrole Adds podmonitors and servicemonitors RBAC to the kuadrant-operator ClusterRole, required for the operator to manage monitoring resources. Co-authored-by: Cursor <cursoragent@cursor.com> * fix: add imagePullSecrets to operator deployments and fix version tag - Add imagePullSecrets from values to all 4 operator deployments so pods can pull from registry.redhat.io - Fix update-bundle.sh default version: remove 'v' prefix to match registry tag format (1.3.0 not v1.3.0) Co-authored-by: Cursor <cursoragent@cursor.com> * chore: enhance update-bundle.sh to extract from Kuadrant + Authorino bundles Co-authored-by: Cursor <cursoragent@cursor.com> * fix: align update-bundle.sh naming with cert-manager convention CRDs now generate as customresourcedefinition-<name>.yaml and templates as <kind>-<name>.yaml, matching the pattern used by cert-manager-operator and other dependency charts. Co-authored-by: Cursor <cursoragent@cursor.com> * refactor: regenerate RHCL chart from official 1.3.0 bundles Regenerated chart manifests using update-bundle.sh from all 4 official RHCL operator bundles (kuadrant, authorino, limitador, dns) at registry.redhat.io version 1.3.0. - Script now extracts from 4 bundles instead of 2 - File naming follows cert-manager convention - monitoring.coreos.com RBAC included from bundle (no manual fix needed) - Validated on AKS: all 4 operators Running, 0 restarts Co-authored-by: Cursor <cursoragent@cursor.com> * chore: remove unused image references from values.yaml Co-authored-by: Cursor <cursoragent@cursor.com> * chore: regenerate helm-docs Co-authored-by: Cursor <cursoragent@cursor.com> * chore: regenerate all chart snapshots Co-authored-by: Cursor <cursoragent@cursor.com> * chore: regenerate snapshots with Helm 4.2.2 Co-authored-by: Cursor <cursoragent@cursor.com> --------- Co-authored-by: Cursor <cursoragent@cursor.com>
1 parent 2c381a4 commit b6befde

68 files changed

Lines changed: 23424 additions & 0 deletions

File tree

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.
Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,15 @@
1+
apiVersion: v2
2+
name: rhcl-operator
3+
description: Red Hat Connectivity Link (Kuadrant) operators for vanilla Kubernetes (without OLM)
4+
type: application
5+
version: 1.0.0
6+
appVersion: "1.3.0"
7+
keywords:
8+
- kuadrant
9+
- authorino
10+
- limitador
11+
- rhcl
12+
- api-gateway
13+
- rate-limiting
14+
maintainers:
15+
- name: Red Hat
Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,21 @@
1+
# rhcl-operator
2+
3+
![Version: 1.0.0](https://img.shields.io/badge/Version-1.0.0-informational?style=flat-square) ![Type: application](https://img.shields.io/badge/Type-application-informational?style=flat-square) ![AppVersion: 1.3.0](https://img.shields.io/badge/AppVersion-1.3.0-informational?style=flat-square)
4+
5+
Red Hat Connectivity Link (Kuadrant) operators for vanilla Kubernetes (without OLM)
6+
7+
## Maintainers
8+
9+
| Name | Email | Url |
10+
| ---- | ------ | --- |
11+
| Red Hat | | |
12+
13+
## Values
14+
15+
| Key | Type | Default | Description |
16+
|-----|------|---------|-------------|
17+
| bundle.version | string | `"1.3.0"` | |
18+
| imagePullSecrets[0].name | string | `"rhai-pull-secret"` | |
19+
| operandNamespace | string | `"kuadrant-system"` | |
20+
| operatorNamespace | string | `"kuadrant-operators"` | |
21+
Lines changed: 315 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,315 @@
1+
apiVersion: apiextensions.k8s.io/v1
2+
kind: CustomResourceDefinition
3+
metadata:
4+
annotations:
5+
controller-gen.kubebuilder.io/version: v0.18.0
6+
name: apikeys.devportal.kuadrant.io
7+
spec:
8+
group: devportal.kuadrant.io
9+
names:
10+
kind: APIKey
11+
listKind: APIKeyList
12+
plural: apikeys
13+
shortNames:
14+
- apik
15+
singular: apikey
16+
scope: Namespaced
17+
versions:
18+
- additionalPrinterColumns:
19+
- jsonPath: .status.phase
20+
name: Phase
21+
type: string
22+
- jsonPath: .spec.apiProductRef.name
23+
name: API
24+
type: string
25+
- jsonPath: .spec.planTier
26+
name: Plan
27+
type: string
28+
- jsonPath: .spec.requestedBy.userId
29+
name: User
30+
type: string
31+
- jsonPath: .metadata.creationTimestamp
32+
name: Age
33+
type: date
34+
name: v1alpha1
35+
schema:
36+
openAPIV3Schema:
37+
description: APIKey is the Schema for the apikeys API.
38+
properties:
39+
apiVersion:
40+
description: |-
41+
APIVersion defines the versioned schema of this representation of an object.
42+
Servers should convert recognized schemas to the latest internal value, and
43+
may reject unrecognized values.
44+
More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources
45+
type: string
46+
kind:
47+
description: |-
48+
Kind is a string value representing the REST resource this object represents.
49+
Servers may infer this from the endpoint the client submits requests to.
50+
Cannot be updated.
51+
In CamelCase.
52+
More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds
53+
type: string
54+
metadata:
55+
type: object
56+
spec:
57+
description: APIKeySpec defines the desired state of APIKey.
58+
properties:
59+
apiProductRef:
60+
description: Reference to the APIProduct this APIKey belongs to.
61+
properties:
62+
name:
63+
type: string
64+
required:
65+
- name
66+
type: object
67+
planTier:
68+
description: PlanTier is the tier of the plan (e.g., "premium", "basic", "enterprise")
69+
type: string
70+
requestedBy:
71+
description: RequestedBy contains information about who requested the API key
72+
properties:
73+
email:
74+
description: Email is the email address of the user
75+
pattern: ^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}$
76+
type: string
77+
userId:
78+
description: UserID is the identifier of the user requesting the API key
79+
type: string
80+
required:
81+
- email
82+
- userId
83+
type: object
84+
useCase:
85+
description: UseCase describes how the API key will be used
86+
type: string
87+
required:
88+
- apiProductRef
89+
- planTier
90+
- requestedBy
91+
- useCase
92+
type: object
93+
status:
94+
description: APIKeyStatus defines the observed state of APIKey.
95+
properties:
96+
apiHostname:
97+
description: APIHostname is the hostname from the HTTPRoute
98+
type: string
99+
authScheme:
100+
description: AuthScheme displays the APIKey AuthScheme
101+
properties:
102+
authenticationSpec:
103+
description: Settings to select the API key Kubernetes secrets.
104+
properties:
105+
allNamespaces:
106+
default: false
107+
description: |-
108+
Whether Authorino should look for API key secrets in all namespaces or only in the same namespace as the AuthConfig.
109+
Enabling this option in namespaced Authorino instances has no effect.
110+
type: boolean
111+
selector:
112+
description: Label selector used by Authorino to match secrets from the cluster storing valid credentials to authenticate to this service
113+
properties:
114+
matchExpressions:
115+
description: matchExpressions is a list of label selector requirements. The requirements are ANDed.
116+
items:
117+
description: |-
118+
A label selector requirement is a selector that contains values, a key, and an operator that
119+
relates the key and values.
120+
properties:
121+
key:
122+
description: key is the label key that the selector applies to.
123+
type: string
124+
operator:
125+
description: |-
126+
operator represents a key's relationship to a set of values.
127+
Valid operators are In, NotIn, Exists and DoesNotExist.
128+
type: string
129+
values:
130+
description: |-
131+
values is an array of string values. If the operator is In or NotIn,
132+
the values array must be non-empty. If the operator is Exists or DoesNotExist,
133+
the values array must be empty. This array is replaced during a strategic
134+
merge patch.
135+
items:
136+
type: string
137+
type: array
138+
x-kubernetes-list-type: atomic
139+
required:
140+
- key
141+
- operator
142+
type: object
143+
type: array
144+
x-kubernetes-list-type: atomic
145+
matchLabels:
146+
additionalProperties:
147+
type: string
148+
description: |-
149+
matchLabels is a map of {key,value} pairs. A single {key,value} in the matchLabels
150+
map is equivalent to an element of matchExpressions, whose key field is "key", the
151+
operator is "In", and the values array contains only "value". The requirements are ANDed.
152+
type: object
153+
type: object
154+
x-kubernetes-map-type: atomic
155+
required:
156+
- selector
157+
type: object
158+
credentials:
159+
properties:
160+
authorizationHeader:
161+
properties:
162+
prefix:
163+
type: string
164+
type: object
165+
cookie:
166+
properties:
167+
name:
168+
type: string
169+
required:
170+
- name
171+
type: object
172+
customHeader:
173+
properties:
174+
name:
175+
type: string
176+
required:
177+
- name
178+
type: object
179+
queryString:
180+
properties:
181+
name:
182+
type: string
183+
required:
184+
- name
185+
type: object
186+
type: object
187+
type: object
188+
canReadSecret:
189+
default: true
190+
description: CanReadSecret expresses the permission to read the APIKey's secret
191+
type: boolean
192+
conditions:
193+
description: Conditions represent the latest available observations of the APIKey's state
194+
items:
195+
description: Condition contains details for one aspect of the current state of this API Resource.
196+
properties:
197+
lastTransitionTime:
198+
description: |-
199+
lastTransitionTime is the last time the condition transitioned from one status to another.
200+
This should be when the underlying condition changed. If that is not known, then using the time when the API field changed is acceptable.
201+
format: date-time
202+
type: string
203+
message:
204+
description: |-
205+
message is a human readable message indicating details about the transition.
206+
This may be an empty string.
207+
maxLength: 32768
208+
type: string
209+
observedGeneration:
210+
description: |-
211+
observedGeneration represents the .metadata.generation that the condition was set based upon.
212+
For instance, if .metadata.generation is currently 12, but the .status.conditions[x].observedGeneration is 9, the condition is out of date
213+
with respect to the current state of the instance.
214+
format: int64
215+
minimum: 0
216+
type: integer
217+
reason:
218+
description: |-
219+
reason contains a programmatic identifier indicating the reason for the condition's last transition.
220+
Producers of specific condition types may define expected values and meanings for this field,
221+
and whether the values are considered a guaranteed API.
222+
The value should be a CamelCase string.
223+
This field may not be empty.
224+
maxLength: 1024
225+
minLength: 1
226+
pattern: ^[A-Za-z]([A-Za-z0-9_,:]*[A-Za-z0-9_])?$
227+
type: string
228+
status:
229+
description: status of the condition, one of True, False, Unknown.
230+
enum:
231+
- "True"
232+
- "False"
233+
- Unknown
234+
type: string
235+
type:
236+
description: type of condition in CamelCase or in foo.example.com/CamelCase.
237+
maxLength: 316
238+
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])$
239+
type: string
240+
required:
241+
- lastTransitionTime
242+
- message
243+
- reason
244+
- status
245+
- type
246+
type: object
247+
type: array
248+
limits:
249+
description: Limits contains the rate limits for the plan
250+
properties:
251+
custom:
252+
description: Custom defines any additional limits defined in terms of a RateLimitPolicy Rate.
253+
items:
254+
description: Rate defines the actual rate limit that will be used when there is a match
255+
properties:
256+
limit:
257+
description: Limit defines the max value allowed for a given period of time
258+
type: integer
259+
window:
260+
description: Window defines the time period for which the Limit specified above applies.
261+
pattern: ^([0-9]{1,5}(h|m|s|ms)){1,4}$
262+
type: string
263+
required:
264+
- limit
265+
- window
266+
type: object
267+
type: array
268+
daily:
269+
description: Daily limit of requests for this plan.
270+
type: integer
271+
monthly:
272+
description: Monthly limit of requests for this plan.
273+
type: integer
274+
weekly:
275+
description: Weekly limit of requests for this plan.
276+
type: integer
277+
yearly:
278+
description: Yearly limit of requests for this plan.
279+
type: integer
280+
type: object
281+
phase:
282+
description: |-
283+
Phase represents the current phase of the APIKey
284+
Valid values are "Pending", "Approved", or "Rejected"
285+
enum:
286+
- Pending
287+
- Approved
288+
- Rejected
289+
type: string
290+
reviewedAt:
291+
description: ReviewedAt is the timestamp when the request was reviewed
292+
format: date-time
293+
type: string
294+
reviewedBy:
295+
description: ReviewedBy indicates who approved or rejected the request
296+
type: string
297+
secretRef:
298+
description: SecretRef is a reference to the created Secret
299+
properties:
300+
key:
301+
description: The key of the secret to select from. Must be a valid secret key.
302+
type: string
303+
name:
304+
description: The name of the secret in the Authorino's namespace to select from.
305+
type: string
306+
required:
307+
- key
308+
- name
309+
type: object
310+
type: object
311+
type: object
312+
served: true
313+
storage: true
314+
subresources:
315+
status: {}

0 commit comments

Comments
 (0)