diff --git a/.config/dotnet-tools.json b/.config/dotnet-tools.json index 4218884..cd0b93b 100644 --- a/.config/dotnet-tools.json +++ b/.config/dotnet-tools.json @@ -3,11 +3,11 @@ "isRoot": true, "tools": { "kubeops.cli": { - "version": "9.1.6-alethic.5", + "version": "9.11.8", "commands": [ "kubeops" ], "rollForward": false } } -} \ No newline at end of file +} diff --git a/charts/seq-operator/templates/clusterrole.yaml b/charts/seq-operator/templates/clusterrole.yaml index 8836e93..0ee8346 100644 --- a/charts/seq-operator/templates/clusterrole.yaml +++ b/charts/seq-operator/templates/clusterrole.yaml @@ -20,7 +20,7 @@ rules: verbs: - '*' - apiGroups: - - "" + - '' resources: - secrets - services @@ -33,6 +33,14 @@ rules: - events verbs: - '*' +- apiGroups: + - '' + resources: + - namespaces + verbs: + - get + - list + - watch - apiGroups: - apps resources: @@ -40,7 +48,7 @@ rules: verbs: - '*' - apiGroups: - - "" + - '' resources: - events verbs: @@ -53,7 +61,13 @@ rules: resources: - leases verbs: - - '*' + - get + - list + - watch + - create + - update + - patch + - delete - apiGroups: - seq.k8s.datalust.co resources: @@ -79,7 +93,15 @@ rules: - update - patch - apiGroups: - - "" + - '' + resources: + - namespaces/status + verbs: + - get + - update + - patch +- apiGroups: + - '' resources: - services/status verbs: @@ -110,15 +132,4 @@ rules: - get - update - patch - - -# Additional not generated -- apiGroups: - - "" - resources: - - namespaces - verbs: - - get - - list - - watch --- diff --git a/src/Alethic.Seq.Operator/Instance/InstanceDeploymentSpec.cs b/src/Alethic.Seq.Operator/Instance/InstanceDeploymentSpec.cs index de7a077..290ef72 100644 --- a/src/Alethic.Seq.Operator/Instance/InstanceDeploymentSpec.cs +++ b/src/Alethic.Seq.Operator/Instance/InstanceDeploymentSpec.cs @@ -93,6 +93,39 @@ public class InstanceDeploymentSpec [JsonIgnore(Condition = JsonIgnoreCondition.WhenWritingNull)] public string? ImagePullPolicy { get; set; } + /// + /// Liveness probe for the Seq container. Replaces the operator's own probe entirely when set; leave it unset + /// to keep the default. + /// + /// + /// Seq answers /health from the same thread pool that serves ingestion, so on a busy or CPU-starved + /// instance the response can take seconds. The default probe is deliberately conservative rather than + /// generous, and a deployment that knows its own load may need to say so. + /// + [JsonPropertyName("livenessProbe")] + [JsonIgnore(Condition = JsonIgnoreCondition.WhenWritingNull)] + public V1Probe? LivenessProbe { get; set; } + + /// + /// Readiness probe for the Seq container. Replaces the operator's own probe entirely when set; leave it unset + /// to keep the default. + /// + [JsonPropertyName("readinessProbe")] + [JsonIgnore(Condition = JsonIgnoreCondition.WhenWritingNull)] + public V1Probe? ReadinessProbe { get; set; } + + /// + /// Startup probe for the Seq container. Replaces the operator's own probe entirely when set; leave it unset + /// to keep the default. + /// + /// + /// While a startup probe is running the liveness and readiness probes are held off, so this is the one that + /// governs how long a cold instance is given — a large store replaying on first boot is the case to size for. + /// + [JsonPropertyName("startupProbe")] + [JsonIgnore(Condition = JsonIgnoreCondition.WhenWritingNull)] + public V1Probe? StartupProbe { get; set; } + [JsonPropertyName("service")] [JsonIgnore(Condition = JsonIgnoreCondition.WhenWritingNull)] public InstanceDeploymentServiceSpec? Service { get; set; } diff --git a/src/Alethic.Seq.Operator/Instance/V1alpha1InstanceController.cs b/src/Alethic.Seq.Operator/Instance/V1alpha1InstanceController.cs index c385992..5bc608b 100644 --- a/src/Alethic.Seq.Operator/Instance/V1alpha1InstanceController.cs +++ b/src/Alethic.Seq.Operator/Instance/V1alpha1InstanceController.cs @@ -28,6 +28,11 @@ namespace Alethic.Seq.Operator.Instance { + // Namespaces are read, never written: an Instance's permissions can admit entities from every namespace or from + // those matching a selector, and both are evaluated against the namespace object itself. Nothing infers this from + // the controller's entity types, so without it the generated role omits namespaces and has to be patched by hand + // wherever it is copied. + [EntityRbac(typeof(V1Namespace), Verbs = RbacVerb.Get | RbacVerb.List | RbacVerb.Watch)] [EntityRbac(typeof(V1alpha1Instance), Verbs = RbacVerb.All)] [EntityRbac(typeof(V1Secret), Verbs = RbacVerb.All)] [EntityRbac(typeof(V1Service), Verbs = RbacVerb.All)] @@ -593,7 +598,11 @@ V1StatefulSet ApplyDeploymentStatefulSet(V1alpha1Instance instance, InstanceDepl container.VolumeMounts.Clear(); container.VolumeMounts.Add(new V1VolumeMount("/data", "seq-data")); - container.LivenessProbe = new V1Probe( + // A probe given on the deployment replaces ours outright rather than merging into it. Merging would let a + // caller set one field and silently inherit the rest of ours, so the probe they read back would be neither + // what they wrote nor what we chose; and it offers no way to clear a field we set. This follows the same + // shape as Resources below, which is a straight pass-through of what the caller supplied. + container.LivenessProbe = deployment.LivenessProbe ?? new V1Probe( httpGet: new V1HTTPGetAction("ui", path: "/health"), failureThreshold: 3, initialDelaySeconds: 0, @@ -601,7 +610,7 @@ V1StatefulSet ApplyDeploymentStatefulSet(V1alpha1Instance instance, InstanceDepl successThreshold: 1, timeoutSeconds: 1); - container.ReadinessProbe = new V1Probe( + container.ReadinessProbe = deployment.ReadinessProbe ?? new V1Probe( httpGet: new V1HTTPGetAction("ui", path: "/health"), failureThreshold: 3, initialDelaySeconds: 0, @@ -609,7 +618,7 @@ V1StatefulSet ApplyDeploymentStatefulSet(V1alpha1Instance instance, InstanceDepl successThreshold: 1, timeoutSeconds: 1); - container.StartupProbe = new V1Probe( + container.StartupProbe = deployment.StartupProbe ?? new V1Probe( httpGet: new V1HTTPGetAction("ui", path: "/health"), failureThreshold: 30, periodSeconds: 10); diff --git a/src/Alethic.Seq.Operator/config/Dockerfile b/src/Alethic.Seq.Operator/config/Dockerfile index d256e7a..657bdc4 100644 --- a/src/Alethic.Seq.Operator/config/Dockerfile +++ b/src/Alethic.Seq.Operator/config/Dockerfile @@ -10,8 +10,7 @@ FROM mcr.microsoft.com/dotnet/runtime:latest as final RUN addgroup k8s-operator && useradd -G k8s-operator operator-user WORKDIR /operator -COPY --from=build /operator/out/ ./ -RUN chown operator-user:k8s-operator -R . +COPY --chown=operator-user:k8s-operator --from=build /operator/out/ ./ USER operator-user diff --git a/src/Alethic.Seq.Operator/config/alerts_seq_k8s_datalust_co.yaml b/src/Alethic.Seq.Operator/config/alerts_seq_k8s_datalust_co.yaml index c423952..5f61c1a 100644 --- a/src/Alethic.Seq.Operator/config/alerts_seq_k8s_datalust_co.yaml +++ b/src/Alethic.Seq.Operator/config/alerts_seq_k8s_datalust_co.yaml @@ -18,7 +18,6 @@ spec: openAPIV3Schema: properties: status: - nullable: false properties: id: nullable: true @@ -89,7 +88,6 @@ spec: type: string notificationProperties: additionalProperties: - nullable: false type: string nullable: true type: object @@ -113,11 +111,9 @@ spec: nullable: true type: string type: object - nullable: false type: array type: object spec: - nullable: false properties: instanceRef: nullable: true diff --git a/src/Alethic.Seq.Operator/config/apikeys_seq_k8s_datalust_co.yaml b/src/Alethic.Seq.Operator/config/apikeys_seq_k8s_datalust_co.yaml index 8dbaab5..4fbd61d 100644 --- a/src/Alethic.Seq.Operator/config/apikeys_seq_k8s_datalust_co.yaml +++ b/src/Alethic.Seq.Operator/config/apikeys_seq_k8s_datalust_co.yaml @@ -18,7 +18,6 @@ spec: openAPIV3Schema: properties: status: - nullable: false properties: id: nullable: true @@ -27,10 +26,8 @@ spec: nullable: true properties: name: - nullable: false type: string namespace: - nullable: false type: string type: object info: @@ -68,7 +65,6 @@ spec: properties: appliedProperties: additionalProperties: - nullable: false type: string nullable: true type: object @@ -119,11 +115,9 @@ spec: nullable: true type: string type: object - nullable: false type: array type: object spec: - nullable: false properties: instanceRef: nullable: true @@ -141,10 +135,8 @@ spec: nullable: true properties: name: - nullable: false type: string namespace: - nullable: false type: string type: object conf: @@ -173,7 +165,6 @@ spec: properties: appliedProperties: additionalProperties: - nullable: false type: string nullable: true type: object diff --git a/src/Alethic.Seq.Operator/config/instances_seq_k8s_datalust_co.yaml b/src/Alethic.Seq.Operator/config/instances_seq_k8s_datalust_co.yaml index dbf705c..65798dd 100644 --- a/src/Alethic.Seq.Operator/config/instances_seq_k8s_datalust_co.yaml +++ b/src/Alethic.Seq.Operator/config/instances_seq_k8s_datalust_co.yaml @@ -18,7 +18,6 @@ spec: openAPIV3Schema: properties: status: - nullable: false properties: deployment: nullable: true @@ -30,20 +29,16 @@ spec: nullable: true properties: name: - nullable: false type: string namespace: - nullable: false type: string type: object tokenSecretRef: nullable: true properties: name: - nullable: false type: string namespace: - nullable: false type: string type: object type: object @@ -94,7 +89,6 @@ spec: type: string scopes: items: - nullable: false type: string nullable: true type: array @@ -135,31 +129,26 @@ spec: type: integer newUserPreferences: additionalProperties: - nullable: false type: string nullable: true type: object newUserRoleIds: items: - nullable: false type: string nullable: true type: array newUserShowSignalIds: items: - nullable: false type: string nullable: true type: array newUserShowQueryIds: items: - nullable: false type: string nullable: true type: array newUserShowDashboardIds: items: - nullable: false type: string nullable: true type: array @@ -230,11 +219,9 @@ spec: nullable: true type: string type: object - nullable: false type: array type: object spec: - nullable: false properties: remote: nullable: true @@ -252,10 +239,8 @@ spec: nullable: true properties: name: - nullable: false type: string namespace: - nullable: false type: string type: object required: @@ -268,10 +253,8 @@ spec: nullable: true properties: name: - nullable: false type: string namespace: - nullable: false type: string type: object required: @@ -294,31 +277,25 @@ spec: nullable: true properties: name: - nullable: false type: string namespace: - nullable: false type: string type: object tokenSecretRef: nullable: true properties: name: - nullable: false type: string namespace: - nullable: false type: string type: object annotations: additionalProperties: - nullable: false type: string nullable: true type: object labels: additionalProperties: - nullable: false type: string nullable: true type: object @@ -326,60 +303,45 @@ spec: nullable: true properties: nodeAffinity: - nullable: false properties: preferredDuringSchedulingIgnoredDuringExecution: items: properties: preference: - nullable: false properties: matchExpressions: items: properties: key: - nullable: false type: string operator: - nullable: false type: string values: items: - nullable: false type: string - nullable: false type: array type: object - nullable: false type: array matchFields: items: properties: key: - nullable: false type: string operator: - nullable: false type: string values: items: - nullable: false type: string - nullable: false type: array type: object - nullable: false type: array type: object weight: format: int32 - nullable: false type: integer type: object - nullable: false type: array requiredDuringSchedulingIgnoredDuringExecution: - nullable: false properties: nodeSelectorTerms: items: @@ -388,403 +350,289 @@ spec: items: properties: key: - nullable: false type: string operator: - nullable: false type: string values: items: - nullable: false type: string - nullable: false type: array type: object - nullable: false type: array matchFields: items: properties: key: - nullable: false type: string operator: - nullable: false type: string values: items: - nullable: false type: string - nullable: false type: array type: object - nullable: false type: array type: object - nullable: false type: array type: object type: object podAffinity: - nullable: false properties: preferredDuringSchedulingIgnoredDuringExecution: items: properties: podAffinityTerm: - nullable: false properties: labelSelector: - nullable: false properties: matchExpressions: items: properties: key: - nullable: false type: string operator: - nullable: false type: string values: items: - nullable: false type: string - nullable: false type: array type: object - nullable: false type: array matchLabels: additionalProperties: - nullable: false type: string - nullable: false type: object type: object matchLabelKeys: items: - nullable: false type: string - nullable: false type: array mismatchLabelKeys: items: - nullable: false type: string - nullable: false type: array namespaceSelector: - nullable: false properties: matchExpressions: items: properties: key: - nullable: false type: string operator: - nullable: false type: string values: items: - nullable: false type: string - nullable: false type: array type: object - nullable: false type: array matchLabels: additionalProperties: - nullable: false type: string - nullable: false type: object type: object namespaces: items: - nullable: false type: string - nullable: false type: array topologyKey: - nullable: false type: string type: object weight: format: int32 - nullable: false type: integer type: object - nullable: false type: array requiredDuringSchedulingIgnoredDuringExecution: items: properties: labelSelector: - nullable: false properties: matchExpressions: items: properties: key: - nullable: false type: string operator: - nullable: false type: string values: items: - nullable: false type: string - nullable: false type: array type: object - nullable: false type: array matchLabels: additionalProperties: - nullable: false type: string - nullable: false type: object type: object matchLabelKeys: items: - nullable: false type: string - nullable: false type: array mismatchLabelKeys: items: - nullable: false type: string - nullable: false type: array namespaceSelector: - nullable: false properties: matchExpressions: items: properties: key: - nullable: false type: string operator: - nullable: false type: string values: items: - nullable: false type: string - nullable: false type: array type: object - nullable: false type: array matchLabels: additionalProperties: - nullable: false type: string - nullable: false type: object type: object namespaces: items: - nullable: false type: string - nullable: false type: array topologyKey: - nullable: false type: string type: object - nullable: false type: array type: object podAntiAffinity: - nullable: false properties: preferredDuringSchedulingIgnoredDuringExecution: items: properties: podAffinityTerm: - nullable: false properties: labelSelector: - nullable: false properties: matchExpressions: items: properties: key: - nullable: false type: string operator: - nullable: false type: string values: items: - nullable: false type: string - nullable: false type: array type: object - nullable: false type: array matchLabels: additionalProperties: - nullable: false type: string - nullable: false type: object type: object matchLabelKeys: items: - nullable: false type: string - nullable: false type: array mismatchLabelKeys: items: - nullable: false type: string - nullable: false type: array namespaceSelector: - nullable: false properties: matchExpressions: items: properties: key: - nullable: false type: string operator: - nullable: false type: string values: items: - nullable: false type: string - nullable: false type: array type: object - nullable: false type: array matchLabels: additionalProperties: - nullable: false type: string - nullable: false type: object type: object namespaces: items: - nullable: false type: string - nullable: false type: array topologyKey: - nullable: false type: string type: object weight: format: int32 - nullable: false type: integer type: object - nullable: false type: array requiredDuringSchedulingIgnoredDuringExecution: items: properties: labelSelector: - nullable: false properties: matchExpressions: items: properties: key: - nullable: false type: string operator: - nullable: false type: string values: items: - nullable: false type: string - nullable: false type: array type: object - nullable: false type: array matchLabels: additionalProperties: - nullable: false type: string - nullable: false type: object type: object matchLabelKeys: items: - nullable: false type: string - nullable: false type: array mismatchLabelKeys: items: - nullable: false type: string - nullable: false type: array namespaceSelector: - nullable: false properties: matchExpressions: items: properties: key: - nullable: false type: string operator: - nullable: false type: string values: items: - nullable: false type: string - nullable: false type: array type: object - nullable: false type: array matchLabels: additionalProperties: - nullable: false type: string - nullable: false type: object type: object namespaces: items: - nullable: false type: string - nullable: false type: array topologyKey: - nullable: false type: string type: object - nullable: false type: array type: object type: object nodeSelector: additionalProperties: - nullable: false type: string nullable: true type: object @@ -795,45 +643,18 @@ spec: items: properties: name: - nullable: false type: string request: - nullable: false type: string type: object - nullable: false type: array limits: additionalProperties: - properties: - format: - enum: - - DecimalExponent - - BinarySI - - DecimalSI - nullable: false - type: string - value: - nullable: false - type: string - type: object - nullable: false + type: string type: object requests: additionalProperties: - properties: - format: - enum: - - DecimalExponent - - BinarySI - - DecimalSI - nullable: false - type: string - value: - nullable: false - type: string - type: object - nullable: false + type: string type: object type: object restartPolicy: @@ -850,20 +671,16 @@ spec: items: properties: effect: - nullable: false type: string key: - nullable: false type: string operator: - nullable: false type: string tolerationSeconds: format: int64 nullable: true type: integer value: - nullable: false type: string type: object nullable: true @@ -872,58 +689,43 @@ spec: items: properties: labelSelector: - nullable: false properties: matchExpressions: items: properties: key: - nullable: false type: string operator: - nullable: false type: string values: items: - nullable: false type: string - nullable: false type: array type: object - nullable: false type: array matchLabels: additionalProperties: - nullable: false type: string - nullable: false type: object type: object matchLabelKeys: items: - nullable: false type: string - nullable: false type: array maxSkew: format: int32 - nullable: false type: integer minDomains: format: int32 nullable: true type: integer nodeAffinityPolicy: - nullable: false type: string nodeTaintsPolicy: - nullable: false type: string topologyKey: - nullable: false type: string whenUnsatisfiable: - nullable: false type: string type: object nullable: true @@ -932,7 +734,6 @@ spec: items: properties: name: - nullable: false type: string type: object nullable: true @@ -941,69 +742,42 @@ spec: items: properties: name: - nullable: false type: string value: - nullable: false type: string valueFrom: - nullable: false properties: configMapKeyRef: - nullable: false properties: key: - nullable: false type: string name: - nullable: false type: string optional: nullable: true type: boolean type: object fieldRef: - nullable: false properties: apiVersion: - nullable: false type: string fieldPath: - nullable: false type: string type: object resourceFieldRef: - nullable: false properties: containerName: - nullable: false type: string divisor: - nullable: false - properties: - format: - enum: - - DecimalExponent - - BinarySI - - DecimalSI - nullable: false - type: string - value: - nullable: false - type: string - type: object + type: string resource: - nullable: false type: string type: object secretKeyRef: - nullable: false properties: key: - nullable: false type: string name: - nullable: false type: string optional: nullable: true @@ -1017,23 +791,18 @@ spec: items: properties: configMapRef: - nullable: false properties: name: - nullable: false type: string optional: nullable: true type: boolean type: object prefix: - nullable: false type: string secretRef: - nullable: false properties: name: - nullable: false type: string optional: nullable: true @@ -1048,6 +817,216 @@ spec: imagePullPolicy: nullable: true type: string + livenessProbe: + nullable: true + properties: + exec: + properties: + command: + items: + type: string + type: array + type: object + failureThreshold: + format: int32 + nullable: true + type: integer + grpc: + properties: + port: + format: int32 + type: integer + service: + type: string + type: object + httpGet: + properties: + host: + type: string + httpHeaders: + items: + properties: + name: + type: string + value: + type: string + type: object + type: array + path: + type: string + port: + x-kubernetes-int-or-string: true + scheme: + type: string + type: object + initialDelaySeconds: + format: int32 + nullable: true + type: integer + periodSeconds: + format: int32 + nullable: true + type: integer + successThreshold: + format: int32 + nullable: true + type: integer + tcpSocket: + properties: + host: + type: string + port: + x-kubernetes-int-or-string: true + type: object + terminationGracePeriodSeconds: + format: int64 + nullable: true + type: integer + timeoutSeconds: + format: int32 + nullable: true + type: integer + type: object + readinessProbe: + nullable: true + properties: + exec: + properties: + command: + items: + type: string + type: array + type: object + failureThreshold: + format: int32 + nullable: true + type: integer + grpc: + properties: + port: + format: int32 + type: integer + service: + type: string + type: object + httpGet: + properties: + host: + type: string + httpHeaders: + items: + properties: + name: + type: string + value: + type: string + type: object + type: array + path: + type: string + port: + x-kubernetes-int-or-string: true + scheme: + type: string + type: object + initialDelaySeconds: + format: int32 + nullable: true + type: integer + periodSeconds: + format: int32 + nullable: true + type: integer + successThreshold: + format: int32 + nullable: true + type: integer + tcpSocket: + properties: + host: + type: string + port: + x-kubernetes-int-or-string: true + type: object + terminationGracePeriodSeconds: + format: int64 + nullable: true + type: integer + timeoutSeconds: + format: int32 + nullable: true + type: integer + type: object + startupProbe: + nullable: true + properties: + exec: + properties: + command: + items: + type: string + type: array + type: object + failureThreshold: + format: int32 + nullable: true + type: integer + grpc: + properties: + port: + format: int32 + type: integer + service: + type: string + type: object + httpGet: + properties: + host: + type: string + httpHeaders: + items: + properties: + name: + type: string + value: + type: string + type: object + type: array + path: + type: string + port: + x-kubernetes-int-or-string: true + scheme: + type: string + type: object + initialDelaySeconds: + format: int32 + nullable: true + type: integer + periodSeconds: + format: int32 + nullable: true + type: integer + successThreshold: + format: int32 + nullable: true + type: integer + tcpSocket: + properties: + host: + type: string + port: + x-kubernetes-int-or-string: true + type: object + terminationGracePeriodSeconds: + format: int64 + nullable: true + type: integer + timeoutSeconds: + format: int32 + nullable: true + type: integer + type: object service: nullable: true properties: @@ -1056,13 +1035,11 @@ spec: type: string annotations: additionalProperties: - nullable: false type: string nullable: true type: object labels: additionalProperties: - nullable: false type: string nullable: true type: object @@ -1074,13 +1051,11 @@ spec: type: string clusterIPs: items: - nullable: false type: string nullable: true type: array externalIPs: items: - nullable: false type: string nullable: true type: array @@ -1095,7 +1070,6 @@ spec: type: string ipFamilies: items: - nullable: false type: string nullable: true type: array @@ -1110,7 +1084,6 @@ spec: type: string loadBalancerSourceRanges: items: - nullable: false type: string nullable: true type: array @@ -1124,7 +1097,6 @@ spec: nullable: true properties: clientIP: - nullable: false properties: timeoutSeconds: format: int32 @@ -1176,25 +1148,18 @@ spec: items: properties: key: - nullable: false type: string operator: - nullable: false type: string values: items: - nullable: false type: string - nullable: false type: array type: object - nullable: false type: array matchLabels: additionalProperties: - nullable: false type: string - nullable: false type: object type: object type: object @@ -1312,7 +1277,6 @@ spec: type: string scopes: items: - nullable: false type: string nullable: true type: array @@ -1376,10 +1340,8 @@ spec: nullable: true properties: key: - nullable: false type: string name: - nullable: false type: string optional: nullable: true diff --git a/src/Alethic.Seq.Operator/config/kustomization.yaml b/src/Alethic.Seq.Operator/config/kustomization.yaml index b02fe05..5b963dd 100644 --- a/src/Alethic.Seq.Operator/config/kustomization.yaml +++ b/src/Alethic.Seq.Operator/config/kustomization.yaml @@ -1,7 +1,9 @@ namespace: alethic.seq.operator-system namePrefix: alethic.seq.operator- -commonLabels: - operator: alethic.seq.operator +labels: +- includeSelectors: true + pairs: + operator: alethic.seq.operator resources: - operator-role.yaml - operator-role-binding.yaml diff --git a/src/Alethic.Seq.Operator/config/operator-role.yaml b/src/Alethic.Seq.Operator/config/operator-role.yaml index b801d76..c165c9e 100644 --- a/src/Alethic.Seq.Operator/config/operator-role.yaml +++ b/src/Alethic.Seq.Operator/config/operator-role.yaml @@ -32,6 +32,14 @@ rules: - events verbs: - '*' +- apiGroups: + - "" + resources: + - namespaces + verbs: + - get + - list + - watch - apiGroups: - apps resources: @@ -52,7 +60,13 @@ rules: resources: - leases verbs: - - '*' + - get + - list + - watch + - create + - update + - patch + - delete - apiGroups: - seq.k8s.datalust.co resources: @@ -77,6 +91,14 @@ rules: - get - update - patch +- apiGroups: + - "" + resources: + - namespaces/status + verbs: + - get + - update + - patch - apiGroups: - "" resources: diff --git a/src/Alethic.Seq.Operator/config/retentionpolicys_seq_k8s_datalust_co.yaml b/src/Alethic.Seq.Operator/config/retentionpolicys_seq_k8s_datalust_co.yaml index 9a376e1..05ac733 100644 --- a/src/Alethic.Seq.Operator/config/retentionpolicys_seq_k8s_datalust_co.yaml +++ b/src/Alethic.Seq.Operator/config/retentionpolicys_seq_k8s_datalust_co.yaml @@ -18,7 +18,6 @@ spec: openAPIV3Schema: properties: status: - nullable: false properties: id: nullable: true @@ -46,11 +45,9 @@ spec: nullable: true type: string type: object - nullable: false type: array type: object spec: - nullable: false properties: instanceRef: nullable: true diff --git a/src/Alethic.Seq.Operator/config/signals_seq_k8s_datalust_co.yaml b/src/Alethic.Seq.Operator/config/signals_seq_k8s_datalust_co.yaml index 2ee09f0..78504b9 100644 --- a/src/Alethic.Seq.Operator/config/signals_seq_k8s_datalust_co.yaml +++ b/src/Alethic.Seq.Operator/config/signals_seq_k8s_datalust_co.yaml @@ -18,7 +18,6 @@ spec: openAPIV3Schema: properties: status: - nullable: false properties: id: nullable: true @@ -92,11 +91,9 @@ spec: nullable: true type: string type: object - nullable: false type: array type: object spec: - nullable: false properties: instanceRef: nullable: true