update CRD-schema
This commit is contained in:
@@ -0,0 +1,212 @@
|
|||||||
|
{
|
||||||
|
"description": "Alert is the Schema for the alerts API",
|
||||||
|
"properties": {
|
||||||
|
"apiVersion": {
|
||||||
|
"description": "APIVersion defines the versioned schema of this representation of an object.\nServers should convert recognized schemas to the latest internal value, and\nmay reject unrecognized values.\nMore info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources",
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"kind": {
|
||||||
|
"description": "Kind is a string value representing the REST resource this object represents.\nServers may infer this from the endpoint the client submits requests to.\nCannot be updated.\nIn CamelCase.\nMore info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds",
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"metadata": {
|
||||||
|
"type": "object"
|
||||||
|
},
|
||||||
|
"spec": {
|
||||||
|
"description": "AlertSpec defines an alerting rule for events involving a list of objects.",
|
||||||
|
"properties": {
|
||||||
|
"eventMetadata": {
|
||||||
|
"additionalProperties": {
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"description": "EventMetadata is an optional field for adding metadata to events dispatched by the\ncontroller. This can be used for enhancing the context of the event. If a field\nwould override one already present on the original event as generated by the emitter,\nthen the override doesn't happen, i.e. the original value is preserved, and an info\nlog is printed.",
|
||||||
|
"type": "object"
|
||||||
|
},
|
||||||
|
"eventSeverity": {
|
||||||
|
"default": "info",
|
||||||
|
"description": "EventSeverity specifies how to filter events based on severity.\nIf set to 'info' no events will be filtered.",
|
||||||
|
"enum": [
|
||||||
|
"info",
|
||||||
|
"error"
|
||||||
|
],
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"eventSources": {
|
||||||
|
"description": "EventSources specifies how to filter events based\non the involved object kind, name and namespace.",
|
||||||
|
"items": {
|
||||||
|
"description": "CrossNamespaceObjectReference contains enough information to let you locate the\ntyped referenced object at cluster level",
|
||||||
|
"properties": {
|
||||||
|
"apiVersion": {
|
||||||
|
"description": "API version of the referent",
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"kind": {
|
||||||
|
"description": "Kind of the referent",
|
||||||
|
"enum": [
|
||||||
|
"Bucket",
|
||||||
|
"GitRepository",
|
||||||
|
"Kustomization",
|
||||||
|
"HelmRelease",
|
||||||
|
"HelmChart",
|
||||||
|
"HelmRepository",
|
||||||
|
"ImageRepository",
|
||||||
|
"ImagePolicy",
|
||||||
|
"ImageUpdateAutomation",
|
||||||
|
"OCIRepository",
|
||||||
|
"ArtifactGenerator",
|
||||||
|
"ExternalArtifact"
|
||||||
|
],
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"matchLabels": {
|
||||||
|
"additionalProperties": {
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"description": "MatchLabels is a map of {key,value} pairs. A single {key,value} in the matchLabels\nmap is equivalent to an element of matchExpressions, whose key field is \"key\", the\noperator is \"In\", and the values array contains only \"value\". The requirements are ANDed.\nMatchLabels requires the name to be set to `*`.",
|
||||||
|
"type": "object"
|
||||||
|
},
|
||||||
|
"name": {
|
||||||
|
"description": "Name of the referent\nIf multiple resources are targeted `*` may be set.",
|
||||||
|
"maxLength": 253,
|
||||||
|
"minLength": 1,
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"namespace": {
|
||||||
|
"description": "Namespace of the referent",
|
||||||
|
"maxLength": 253,
|
||||||
|
"minLength": 1,
|
||||||
|
"type": "string"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"required": [
|
||||||
|
"kind",
|
||||||
|
"name"
|
||||||
|
],
|
||||||
|
"type": "object",
|
||||||
|
"additionalProperties": false
|
||||||
|
},
|
||||||
|
"type": "array"
|
||||||
|
},
|
||||||
|
"exclusionList": {
|
||||||
|
"description": "ExclusionList specifies a list of Golang regular expressions\nto be used for excluding messages.",
|
||||||
|
"items": {
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"type": "array"
|
||||||
|
},
|
||||||
|
"inclusionList": {
|
||||||
|
"description": "InclusionList specifies a list of Golang regular expressions\nto be used for including messages.",
|
||||||
|
"items": {
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"type": "array"
|
||||||
|
},
|
||||||
|
"providerRef": {
|
||||||
|
"description": "ProviderRef specifies which Provider this Alert should use.",
|
||||||
|
"properties": {
|
||||||
|
"name": {
|
||||||
|
"description": "Name of the referent.",
|
||||||
|
"type": "string"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"required": [
|
||||||
|
"name"
|
||||||
|
],
|
||||||
|
"type": "object",
|
||||||
|
"additionalProperties": false
|
||||||
|
},
|
||||||
|
"summary": {
|
||||||
|
"description": "Summary holds a short description of the impact and affected cluster.",
|
||||||
|
"maxLength": 255,
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"suspend": {
|
||||||
|
"description": "Suspend tells the controller to suspend subsequent\nevents handling for this Alert.",
|
||||||
|
"type": "boolean"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"required": [
|
||||||
|
"eventSources",
|
||||||
|
"providerRef"
|
||||||
|
],
|
||||||
|
"type": "object",
|
||||||
|
"additionalProperties": false
|
||||||
|
},
|
||||||
|
"status": {
|
||||||
|
"default": {
|
||||||
|
"observedGeneration": -1
|
||||||
|
},
|
||||||
|
"description": "AlertStatus defines the observed state of the Alert.",
|
||||||
|
"properties": {
|
||||||
|
"conditions": {
|
||||||
|
"description": "Conditions holds the conditions for the Alert.",
|
||||||
|
"items": {
|
||||||
|
"description": "Condition contains details for one aspect of the current state of this API Resource.",
|
||||||
|
"properties": {
|
||||||
|
"lastTransitionTime": {
|
||||||
|
"description": "lastTransitionTime is the last time the condition transitioned from one status to another.\nThis should be when the underlying condition changed. If that is not known, then using the time when the API field changed is acceptable.",
|
||||||
|
"format": "date-time",
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"message": {
|
||||||
|
"description": "message is a human readable message indicating details about the transition.\nThis may be an empty string.",
|
||||||
|
"maxLength": 32768,
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"observedGeneration": {
|
||||||
|
"description": "observedGeneration represents the .metadata.generation that the condition was set based upon.\nFor instance, if .metadata.generation is currently 12, but the .status.conditions[x].observedGeneration is 9, the condition is out of date\nwith respect to the current state of the instance.",
|
||||||
|
"format": "int64",
|
||||||
|
"minimum": 0,
|
||||||
|
"type": "integer"
|
||||||
|
},
|
||||||
|
"reason": {
|
||||||
|
"description": "reason contains a programmatic identifier indicating the reason for the condition's last transition.\nProducers of specific condition types may define expected values and meanings for this field,\nand whether the values are considered a guaranteed API.\nThe value should be a CamelCase string.\nThis field may not be empty.",
|
||||||
|
"maxLength": 1024,
|
||||||
|
"minLength": 1,
|
||||||
|
"pattern": "^[A-Za-z]([A-Za-z0-9_,:]*[A-Za-z0-9_])?$",
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"status": {
|
||||||
|
"description": "status of the condition, one of True, False, Unknown.",
|
||||||
|
"enum": [
|
||||||
|
"True",
|
||||||
|
"False",
|
||||||
|
"Unknown"
|
||||||
|
],
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"type": {
|
||||||
|
"description": "type of condition in CamelCase or in foo.example.com/CamelCase.",
|
||||||
|
"maxLength": 316,
|
||||||
|
"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])$",
|
||||||
|
"type": "string"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"required": [
|
||||||
|
"lastTransitionTime",
|
||||||
|
"message",
|
||||||
|
"reason",
|
||||||
|
"status",
|
||||||
|
"type"
|
||||||
|
],
|
||||||
|
"type": "object",
|
||||||
|
"additionalProperties": false
|
||||||
|
},
|
||||||
|
"type": "array"
|
||||||
|
},
|
||||||
|
"lastHandledReconcileAt": {
|
||||||
|
"description": "LastHandledReconcileAt holds the value of the most recent\nreconcile request value, so a change of the annotation value\ncan be detected.",
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"observedGeneration": {
|
||||||
|
"description": "ObservedGeneration is the last observed generation.",
|
||||||
|
"format": "int64",
|
||||||
|
"type": "integer"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"type": "object",
|
||||||
|
"additionalProperties": false
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"type": "object"
|
||||||
|
}
|
||||||
@@ -0,0 +1,137 @@
|
|||||||
|
{
|
||||||
|
"description": "Alert is the Schema for the alerts API",
|
||||||
|
"properties": {
|
||||||
|
"apiVersion": {
|
||||||
|
"description": "APIVersion defines the versioned schema of this representation of an object.\nServers should convert recognized schemas to the latest internal value, and\nmay reject unrecognized values.\nMore info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources",
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"kind": {
|
||||||
|
"description": "Kind is a string value representing the REST resource this object represents.\nServers may infer this from the endpoint the client submits requests to.\nCannot be updated.\nIn CamelCase.\nMore info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds",
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"metadata": {
|
||||||
|
"type": "object"
|
||||||
|
},
|
||||||
|
"spec": {
|
||||||
|
"description": "AlertSpec defines an alerting rule for events involving a list of objects.",
|
||||||
|
"properties": {
|
||||||
|
"eventMetadata": {
|
||||||
|
"additionalProperties": {
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"description": "EventMetadata is an optional field for adding metadata to events dispatched by the\ncontroller. This can be used for enhancing the context of the event. If a field\nwould override one already present on the original event as generated by the emitter,\nthen the override doesn't happen, i.e. the original value is preserved, and an info\nlog is printed.",
|
||||||
|
"type": "object"
|
||||||
|
},
|
||||||
|
"eventSeverity": {
|
||||||
|
"default": "info",
|
||||||
|
"description": "EventSeverity specifies how to filter events based on severity.\nIf set to 'info' no events will be filtered.",
|
||||||
|
"enum": [
|
||||||
|
"info",
|
||||||
|
"error"
|
||||||
|
],
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"eventSources": {
|
||||||
|
"description": "EventSources specifies how to filter events based\non the involved object kind, name and namespace.",
|
||||||
|
"items": {
|
||||||
|
"description": "CrossNamespaceObjectReference contains enough information to let you locate the\ntyped referenced object at cluster level",
|
||||||
|
"properties": {
|
||||||
|
"apiVersion": {
|
||||||
|
"description": "API version of the referent",
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"kind": {
|
||||||
|
"description": "Kind of the referent",
|
||||||
|
"enum": [
|
||||||
|
"Bucket",
|
||||||
|
"GitRepository",
|
||||||
|
"Kustomization",
|
||||||
|
"HelmRelease",
|
||||||
|
"HelmChart",
|
||||||
|
"HelmRepository",
|
||||||
|
"ImageRepository",
|
||||||
|
"ImagePolicy",
|
||||||
|
"ImageUpdateAutomation",
|
||||||
|
"OCIRepository",
|
||||||
|
"ArtifactGenerator",
|
||||||
|
"ExternalArtifact"
|
||||||
|
],
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"matchLabels": {
|
||||||
|
"additionalProperties": {
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"description": "MatchLabels is a map of {key,value} pairs. A single {key,value} in the matchLabels\nmap is equivalent to an element of matchExpressions, whose key field is \"key\", the\noperator is \"In\", and the values array contains only \"value\". The requirements are ANDed.\nMatchLabels requires the name to be set to `*`.",
|
||||||
|
"type": "object"
|
||||||
|
},
|
||||||
|
"name": {
|
||||||
|
"description": "Name of the referent\nIf multiple resources are targeted `*` may be set.",
|
||||||
|
"maxLength": 253,
|
||||||
|
"minLength": 1,
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"namespace": {
|
||||||
|
"description": "Namespace of the referent",
|
||||||
|
"maxLength": 253,
|
||||||
|
"minLength": 1,
|
||||||
|
"type": "string"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"required": [
|
||||||
|
"kind",
|
||||||
|
"name"
|
||||||
|
],
|
||||||
|
"type": "object",
|
||||||
|
"additionalProperties": false
|
||||||
|
},
|
||||||
|
"type": "array"
|
||||||
|
},
|
||||||
|
"exclusionList": {
|
||||||
|
"description": "ExclusionList specifies a list of Golang regular expressions\nto be used for excluding messages.",
|
||||||
|
"items": {
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"type": "array"
|
||||||
|
},
|
||||||
|
"inclusionList": {
|
||||||
|
"description": "InclusionList specifies a list of Golang regular expressions\nto be used for including messages.",
|
||||||
|
"items": {
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"type": "array"
|
||||||
|
},
|
||||||
|
"providerRef": {
|
||||||
|
"description": "ProviderRef specifies which Provider this Alert should use.",
|
||||||
|
"properties": {
|
||||||
|
"name": {
|
||||||
|
"description": "Name of the referent.",
|
||||||
|
"type": "string"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"required": [
|
||||||
|
"name"
|
||||||
|
],
|
||||||
|
"type": "object",
|
||||||
|
"additionalProperties": false
|
||||||
|
},
|
||||||
|
"summary": {
|
||||||
|
"description": "Summary holds a short description of the impact and affected cluster.\nDeprecated: Use EventMetadata instead.",
|
||||||
|
"maxLength": 255,
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"suspend": {
|
||||||
|
"description": "Suspend tells the controller to suspend subsequent\nevents handling for this Alert.",
|
||||||
|
"type": "boolean"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"required": [
|
||||||
|
"eventSources",
|
||||||
|
"providerRef"
|
||||||
|
],
|
||||||
|
"type": "object",
|
||||||
|
"additionalProperties": false
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"type": "object"
|
||||||
|
}
|
||||||
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
@@ -0,0 +1,338 @@
|
|||||||
|
{
|
||||||
|
"description": "Bucket is the Schema for the buckets API.",
|
||||||
|
"properties": {
|
||||||
|
"apiVersion": {
|
||||||
|
"description": "APIVersion defines the versioned schema of this representation of an object.\nServers should convert recognized schemas to the latest internal value, and\nmay reject unrecognized values.\nMore info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources",
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"kind": {
|
||||||
|
"description": "Kind is a string value representing the REST resource this object represents.\nServers may infer this from the endpoint the client submits requests to.\nCannot be updated.\nIn CamelCase.\nMore info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds",
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"metadata": {
|
||||||
|
"type": "object"
|
||||||
|
},
|
||||||
|
"spec": {
|
||||||
|
"description": "BucketSpec specifies the required configuration to produce an Artifact for\nan object storage bucket.",
|
||||||
|
"properties": {
|
||||||
|
"bucketName": {
|
||||||
|
"description": "BucketName is the name of the object storage bucket.",
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"certSecretRef": {
|
||||||
|
"description": "CertSecretRef can be given the name of a Secret containing\neither or both of\n\n- a PEM-encoded client certificate (`tls.crt`) and private\nkey (`tls.key`);\n- a PEM-encoded CA certificate (`ca.crt`)\n\nand whichever are supplied, will be used for connecting to the\nbucket. The client cert and key are useful if you are\nauthenticating with a certificate; the CA cert is useful if\nyou are using a self-signed server certificate. The Secret must\nbe of type `Opaque` or `kubernetes.io/tls`.\n\nThis field is only supported for the `generic` provider.",
|
||||||
|
"properties": {
|
||||||
|
"name": {
|
||||||
|
"description": "Name of the referent.",
|
||||||
|
"type": "string"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"required": [
|
||||||
|
"name"
|
||||||
|
],
|
||||||
|
"type": "object",
|
||||||
|
"additionalProperties": false
|
||||||
|
},
|
||||||
|
"endpoint": {
|
||||||
|
"description": "Endpoint is the object storage address the BucketName is located at.",
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"ignore": {
|
||||||
|
"description": "Ignore overrides the set of excluded patterns in the .sourceignore format\n(which is the same as .gitignore). If not provided, a default will be used,\nconsult the documentation for your version to find out what those are.",
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"insecure": {
|
||||||
|
"description": "Insecure allows connecting to a non-TLS HTTP Endpoint.",
|
||||||
|
"type": "boolean"
|
||||||
|
},
|
||||||
|
"interval": {
|
||||||
|
"description": "Interval at which the Bucket Endpoint is checked for updates.\nThis interval is approximate and may be subject to jitter to ensure\nefficient use of resources.",
|
||||||
|
"pattern": "^([0-9]+(\\.[0-9]+)?(ms|s|m|h))+$",
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"prefix": {
|
||||||
|
"description": "Prefix to use for server-side filtering of files in the Bucket.",
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"provider": {
|
||||||
|
"default": "generic",
|
||||||
|
"description": "Provider of the object storage bucket.\nDefaults to 'generic', which expects an S3 (API) compatible object\nstorage.",
|
||||||
|
"enum": [
|
||||||
|
"generic",
|
||||||
|
"aws",
|
||||||
|
"gcp",
|
||||||
|
"azure"
|
||||||
|
],
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"proxySecretRef": {
|
||||||
|
"description": "ProxySecretRef specifies the Secret containing the proxy configuration\nto use while communicating with the Bucket server.",
|
||||||
|
"properties": {
|
||||||
|
"name": {
|
||||||
|
"description": "Name of the referent.",
|
||||||
|
"type": "string"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"required": [
|
||||||
|
"name"
|
||||||
|
],
|
||||||
|
"type": "object",
|
||||||
|
"additionalProperties": false
|
||||||
|
},
|
||||||
|
"region": {
|
||||||
|
"description": "Region of the Endpoint where the BucketName is located in.",
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"secretRef": {
|
||||||
|
"description": "SecretRef specifies the Secret containing authentication credentials\nfor the Bucket.",
|
||||||
|
"properties": {
|
||||||
|
"name": {
|
||||||
|
"description": "Name of the referent.",
|
||||||
|
"type": "string"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"required": [
|
||||||
|
"name"
|
||||||
|
],
|
||||||
|
"type": "object",
|
||||||
|
"additionalProperties": false
|
||||||
|
},
|
||||||
|
"serviceAccountName": {
|
||||||
|
"description": "ServiceAccountName is the name of the Kubernetes ServiceAccount used to authenticate\nthe bucket. This field is only supported for the 'gcp' and 'aws' providers.\nFor more information about workload identity:\nhttps://fluxcd.io/flux/components/source/buckets/#workload-identity",
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"sts": {
|
||||||
|
"description": "STS specifies the required configuration to use a Security Token\nService for fetching temporary credentials to authenticate in a\nBucket provider.\n\nThis field is only supported for the `aws` and `generic` providers.",
|
||||||
|
"properties": {
|
||||||
|
"certSecretRef": {
|
||||||
|
"description": "CertSecretRef can be given the name of a Secret containing\neither or both of\n\n- a PEM-encoded client certificate (`tls.crt`) and private\nkey (`tls.key`);\n- a PEM-encoded CA certificate (`ca.crt`)\n\nand whichever are supplied, will be used for connecting to the\nSTS endpoint. The client cert and key are useful if you are\nauthenticating with a certificate; the CA cert is useful if\nyou are using a self-signed server certificate. The Secret must\nbe of type `Opaque` or `kubernetes.io/tls`.\n\nThis field is only supported for the `ldap` provider.",
|
||||||
|
"properties": {
|
||||||
|
"name": {
|
||||||
|
"description": "Name of the referent.",
|
||||||
|
"type": "string"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"required": [
|
||||||
|
"name"
|
||||||
|
],
|
||||||
|
"type": "object",
|
||||||
|
"additionalProperties": false
|
||||||
|
},
|
||||||
|
"endpoint": {
|
||||||
|
"description": "Endpoint is the HTTP/S endpoint of the Security Token Service from\nwhere temporary credentials will be fetched.",
|
||||||
|
"pattern": "^(http|https)://.*$",
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"provider": {
|
||||||
|
"description": "Provider of the Security Token Service.",
|
||||||
|
"enum": [
|
||||||
|
"aws",
|
||||||
|
"ldap"
|
||||||
|
],
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"secretRef": {
|
||||||
|
"description": "SecretRef specifies the Secret containing authentication credentials\nfor the STS endpoint. This Secret must contain the fields `username`\nand `password` and is supported only for the `ldap` provider.",
|
||||||
|
"properties": {
|
||||||
|
"name": {
|
||||||
|
"description": "Name of the referent.",
|
||||||
|
"type": "string"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"required": [
|
||||||
|
"name"
|
||||||
|
],
|
||||||
|
"type": "object",
|
||||||
|
"additionalProperties": false
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"required": [
|
||||||
|
"endpoint",
|
||||||
|
"provider"
|
||||||
|
],
|
||||||
|
"type": "object",
|
||||||
|
"additionalProperties": false
|
||||||
|
},
|
||||||
|
"suspend": {
|
||||||
|
"description": "Suspend tells the controller to suspend the reconciliation of this\nBucket.",
|
||||||
|
"type": "boolean"
|
||||||
|
},
|
||||||
|
"timeout": {
|
||||||
|
"default": "60s",
|
||||||
|
"description": "Timeout for fetch operations, defaults to 60s.",
|
||||||
|
"pattern": "^([0-9]+(\\.[0-9]+)?(ms|s|m))+$",
|
||||||
|
"type": "string"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"required": [
|
||||||
|
"bucketName",
|
||||||
|
"endpoint",
|
||||||
|
"interval"
|
||||||
|
],
|
||||||
|
"type": "object",
|
||||||
|
"x-kubernetes-validations": [
|
||||||
|
{
|
||||||
|
"message": "STS configuration is only supported for the 'aws' and 'generic' Bucket providers",
|
||||||
|
"rule": "self.provider == 'aws' || self.provider == 'generic' || !has(self.sts)"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"message": "'aws' is the only supported STS provider for the 'aws' Bucket provider",
|
||||||
|
"rule": "self.provider != 'aws' || !has(self.sts) || self.sts.provider == 'aws'"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"message": "'ldap' is the only supported STS provider for the 'generic' Bucket provider",
|
||||||
|
"rule": "self.provider != 'generic' || !has(self.sts) || self.sts.provider == 'ldap'"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"message": "spec.sts.secretRef is not required for the 'aws' STS provider",
|
||||||
|
"rule": "!has(self.sts) || self.sts.provider != 'aws' || !has(self.sts.secretRef)"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"message": "spec.sts.certSecretRef is not required for the 'aws' STS provider",
|
||||||
|
"rule": "!has(self.sts) || self.sts.provider != 'aws' || !has(self.sts.certSecretRef)"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"message": "ServiceAccountName is not supported for the 'generic' Bucket provider",
|
||||||
|
"rule": "self.provider != 'generic' || !has(self.serviceAccountName)"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"message": "cannot set both .spec.secretRef and .spec.serviceAccountName",
|
||||||
|
"rule": "!has(self.secretRef) || !has(self.serviceAccountName)"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"additionalProperties": false
|
||||||
|
},
|
||||||
|
"status": {
|
||||||
|
"default": {
|
||||||
|
"observedGeneration": -1
|
||||||
|
},
|
||||||
|
"description": "BucketStatus records the observed state of a Bucket.",
|
||||||
|
"properties": {
|
||||||
|
"artifact": {
|
||||||
|
"description": "Artifact represents the last successful Bucket reconciliation.",
|
||||||
|
"properties": {
|
||||||
|
"digest": {
|
||||||
|
"description": "Digest is the digest of the file in the form of '<algorithm>:<checksum>'.",
|
||||||
|
"pattern": "^[a-z0-9]+(?:[.+_-][a-z0-9]+)*:[a-zA-Z0-9=_-]+$",
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"lastUpdateTime": {
|
||||||
|
"description": "LastUpdateTime is the timestamp corresponding to the last update of the\nArtifact.",
|
||||||
|
"format": "date-time",
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"metadata": {
|
||||||
|
"additionalProperties": {
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"description": "Metadata holds upstream information such as OCI annotations.",
|
||||||
|
"type": "object"
|
||||||
|
},
|
||||||
|
"path": {
|
||||||
|
"description": "Path is the relative file path of the Artifact. It can be used to locate\nthe file in the root of the Artifact storage on the local file system of\nthe controller managing the Source.",
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"revision": {
|
||||||
|
"description": "Revision is a human-readable identifier traceable in the origin source\nsystem. It can be a Git commit SHA, Git tag, a Helm chart version, etc.",
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"size": {
|
||||||
|
"description": "Size is the number of bytes in the file.",
|
||||||
|
"format": "int64",
|
||||||
|
"type": "integer"
|
||||||
|
},
|
||||||
|
"url": {
|
||||||
|
"description": "URL is the HTTP address of the Artifact as exposed by the controller\nmanaging the Source. It can be used to retrieve the Artifact for\nconsumption, e.g. by another controller applying the Artifact contents.",
|
||||||
|
"type": "string"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"required": [
|
||||||
|
"digest",
|
||||||
|
"lastUpdateTime",
|
||||||
|
"path",
|
||||||
|
"revision",
|
||||||
|
"url"
|
||||||
|
],
|
||||||
|
"type": "object",
|
||||||
|
"additionalProperties": false
|
||||||
|
},
|
||||||
|
"conditions": {
|
||||||
|
"description": "Conditions holds the conditions for the Bucket.",
|
||||||
|
"items": {
|
||||||
|
"description": "Condition contains details for one aspect of the current state of this API Resource.",
|
||||||
|
"properties": {
|
||||||
|
"lastTransitionTime": {
|
||||||
|
"description": "lastTransitionTime is the last time the condition transitioned from one status to another.\nThis should be when the underlying condition changed. If that is not known, then using the time when the API field changed is acceptable.",
|
||||||
|
"format": "date-time",
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"message": {
|
||||||
|
"description": "message is a human readable message indicating details about the transition.\nThis may be an empty string.",
|
||||||
|
"maxLength": 32768,
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"observedGeneration": {
|
||||||
|
"description": "observedGeneration represents the .metadata.generation that the condition was set based upon.\nFor instance, if .metadata.generation is currently 12, but the .status.conditions[x].observedGeneration is 9, the condition is out of date\nwith respect to the current state of the instance.",
|
||||||
|
"format": "int64",
|
||||||
|
"minimum": 0,
|
||||||
|
"type": "integer"
|
||||||
|
},
|
||||||
|
"reason": {
|
||||||
|
"description": "reason contains a programmatic identifier indicating the reason for the condition's last transition.\nProducers of specific condition types may define expected values and meanings for this field,\nand whether the values are considered a guaranteed API.\nThe value should be a CamelCase string.\nThis field may not be empty.",
|
||||||
|
"maxLength": 1024,
|
||||||
|
"minLength": 1,
|
||||||
|
"pattern": "^[A-Za-z]([A-Za-z0-9_,:]*[A-Za-z0-9_])?$",
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"status": {
|
||||||
|
"description": "status of the condition, one of True, False, Unknown.",
|
||||||
|
"enum": [
|
||||||
|
"True",
|
||||||
|
"False",
|
||||||
|
"Unknown"
|
||||||
|
],
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"type": {
|
||||||
|
"description": "type of condition in CamelCase or in foo.example.com/CamelCase.",
|
||||||
|
"maxLength": 316,
|
||||||
|
"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])$",
|
||||||
|
"type": "string"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"required": [
|
||||||
|
"lastTransitionTime",
|
||||||
|
"message",
|
||||||
|
"reason",
|
||||||
|
"status",
|
||||||
|
"type"
|
||||||
|
],
|
||||||
|
"type": "object",
|
||||||
|
"additionalProperties": false
|
||||||
|
},
|
||||||
|
"type": "array"
|
||||||
|
},
|
||||||
|
"lastHandledReconcileAt": {
|
||||||
|
"description": "LastHandledReconcileAt holds the value of the most recent\nreconcile request value, so a change of the annotation value\ncan be detected.",
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"observedGeneration": {
|
||||||
|
"description": "ObservedGeneration is the last observed generation of the Bucket object.",
|
||||||
|
"format": "int64",
|
||||||
|
"type": "integer"
|
||||||
|
},
|
||||||
|
"observedIgnore": {
|
||||||
|
"description": "ObservedIgnore is the observed exclusion patterns used for constructing\nthe source artifact.",
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"url": {
|
||||||
|
"description": "URL is the dynamic fetch link for the latest Artifact.\nIt is provided on a \"best effort\" basis, and using the precise\nBucketStatus.Artifact data is recommended.",
|
||||||
|
"type": "string"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"type": "object",
|
||||||
|
"additionalProperties": false
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"type": "object"
|
||||||
|
}
|
||||||
File diff suppressed because it is too large
Load Diff
@@ -0,0 +1,198 @@
|
|||||||
|
{
|
||||||
|
"description": "ClusterKeycloakInstance makes a Keycloak server known to the operator at the cluster level",
|
||||||
|
"properties": {
|
||||||
|
"apiVersion": {
|
||||||
|
"description": "APIVersion defines the versioned schema of this representation of an object.\nServers should convert recognized schemas to the latest internal value, and\nmay reject unrecognized values.\nMore info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources",
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"kind": {
|
||||||
|
"description": "Kind is a string value representing the REST resource this object represents.\nServers may infer this from the endpoint the client submits requests to.\nCannot be updated.\nIn CamelCase.\nMore info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds",
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"metadata": {
|
||||||
|
"type": "object"
|
||||||
|
},
|
||||||
|
"spec": {
|
||||||
|
"description": "ClusterKeycloakInstanceSpec defines the desired state of ClusterKeycloakInstance\nIt mirrors KeycloakInstanceSpec but is cluster-scoped",
|
||||||
|
"properties": {
|
||||||
|
"baseUrl": {
|
||||||
|
"description": "BaseUrl is the URL of the Keycloak server (e.g., http://keycloak:8080)",
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"client": {
|
||||||
|
"description": "Client contains optional service account client configuration",
|
||||||
|
"properties": {
|
||||||
|
"id": {
|
||||||
|
"description": "ID is the client ID for service account authentication",
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"secret": {
|
||||||
|
"description": "Secret is the client secret (optional for public clients)",
|
||||||
|
"type": "string"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"required": [
|
||||||
|
"id"
|
||||||
|
],
|
||||||
|
"type": "object",
|
||||||
|
"additionalProperties": false
|
||||||
|
},
|
||||||
|
"credentials": {
|
||||||
|
"description": "Credentials contains the reference to the admin credentials secret",
|
||||||
|
"properties": {
|
||||||
|
"secretRef": {
|
||||||
|
"description": "SecretRef contains the reference to the secret with credentials",
|
||||||
|
"properties": {
|
||||||
|
"name": {
|
||||||
|
"description": "Name is the name of the secret",
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"namespace": {
|
||||||
|
"description": "Namespace is the namespace of the secret (required for cluster-scoped resources)",
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"passwordKey": {
|
||||||
|
"default": "password",
|
||||||
|
"description": "PasswordKey is the key in the secret for the password (defaults to \"password\")",
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"usernameKey": {
|
||||||
|
"default": "username",
|
||||||
|
"description": "UsernameKey is the key in the secret for the username (defaults to \"username\")",
|
||||||
|
"type": "string"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"required": [
|
||||||
|
"name",
|
||||||
|
"namespace"
|
||||||
|
],
|
||||||
|
"type": "object",
|
||||||
|
"additionalProperties": false
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"required": [
|
||||||
|
"secretRef"
|
||||||
|
],
|
||||||
|
"type": "object",
|
||||||
|
"additionalProperties": false
|
||||||
|
},
|
||||||
|
"realm": {
|
||||||
|
"description": "Realm is the admin realm (defaults to \"master\")",
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"token": {
|
||||||
|
"description": "Token contains optional token caching configuration",
|
||||||
|
"properties": {
|
||||||
|
"expiresKey": {
|
||||||
|
"description": "ExpiresKey is the key in the secret for the token expiration",
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"secretName": {
|
||||||
|
"description": "SecretName is the name of the secret to cache the token",
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"tokenKey": {
|
||||||
|
"description": "TokenKey is the key in the secret for the token",
|
||||||
|
"type": "string"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"type": "object",
|
||||||
|
"additionalProperties": false
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"required": [
|
||||||
|
"baseUrl",
|
||||||
|
"credentials"
|
||||||
|
],
|
||||||
|
"type": "object",
|
||||||
|
"additionalProperties": false
|
||||||
|
},
|
||||||
|
"status": {
|
||||||
|
"description": "ClusterKeycloakInstanceStatus defines the observed state of ClusterKeycloakInstance",
|
||||||
|
"properties": {
|
||||||
|
"conditions": {
|
||||||
|
"description": "Conditions represent the latest available observations",
|
||||||
|
"items": {
|
||||||
|
"description": "Condition contains details for one aspect of the current state of this API Resource.",
|
||||||
|
"properties": {
|
||||||
|
"lastTransitionTime": {
|
||||||
|
"description": "lastTransitionTime is the last time the condition transitioned from one status to another.\nThis should be when the underlying condition changed. If that is not known, then using the time when the API field changed is acceptable.",
|
||||||
|
"format": "date-time",
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"message": {
|
||||||
|
"description": "message is a human readable message indicating details about the transition.\nThis may be an empty string.",
|
||||||
|
"maxLength": 32768,
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"observedGeneration": {
|
||||||
|
"description": "observedGeneration represents the .metadata.generation that the condition was set based upon.\nFor instance, if .metadata.generation is currently 12, but the .status.conditions[x].observedGeneration is 9, the condition is out of date\nwith respect to the current state of the instance.",
|
||||||
|
"format": "int64",
|
||||||
|
"minimum": 0,
|
||||||
|
"type": "integer"
|
||||||
|
},
|
||||||
|
"reason": {
|
||||||
|
"description": "reason contains a programmatic identifier indicating the reason for the condition's last transition.\nProducers of specific condition types may define expected values and meanings for this field,\nand whether the values are considered a guaranteed API.\nThe value should be a CamelCase string.\nThis field may not be empty.",
|
||||||
|
"maxLength": 1024,
|
||||||
|
"minLength": 1,
|
||||||
|
"pattern": "^[A-Za-z]([A-Za-z0-9_,:]*[A-Za-z0-9_])?$",
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"status": {
|
||||||
|
"description": "status of the condition, one of True, False, Unknown.",
|
||||||
|
"enum": [
|
||||||
|
"True",
|
||||||
|
"False",
|
||||||
|
"Unknown"
|
||||||
|
],
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"type": {
|
||||||
|
"description": "type of condition in CamelCase or in foo.example.com/CamelCase.",
|
||||||
|
"maxLength": 316,
|
||||||
|
"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])$",
|
||||||
|
"type": "string"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"required": [
|
||||||
|
"lastTransitionTime",
|
||||||
|
"message",
|
||||||
|
"reason",
|
||||||
|
"status",
|
||||||
|
"type"
|
||||||
|
],
|
||||||
|
"type": "object",
|
||||||
|
"additionalProperties": false
|
||||||
|
},
|
||||||
|
"type": "array"
|
||||||
|
},
|
||||||
|
"message": {
|
||||||
|
"description": "Message contains additional information about the status",
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"ready": {
|
||||||
|
"description": "Ready indicates if the Keycloak instance is accessible",
|
||||||
|
"type": "boolean"
|
||||||
|
},
|
||||||
|
"resourcePath": {
|
||||||
|
"description": "ResourcePath is the API path for this resource",
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"status": {
|
||||||
|
"description": "Status is a human-readable status message",
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"version": {
|
||||||
|
"description": "Version is the Keycloak server version",
|
||||||
|
"type": "string"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"required": [
|
||||||
|
"ready"
|
||||||
|
],
|
||||||
|
"type": "object",
|
||||||
|
"additionalProperties": false
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"type": "object"
|
||||||
|
}
|
||||||
@@ -0,0 +1,199 @@
|
|||||||
|
{
|
||||||
|
"description": "ClusterKeycloakRealm defines a realm within a KeycloakInstance at the cluster level",
|
||||||
|
"properties": {
|
||||||
|
"apiVersion": {
|
||||||
|
"description": "APIVersion defines the versioned schema of this representation of an object.\nServers should convert recognized schemas to the latest internal value, and\nmay reject unrecognized values.\nMore info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources",
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"kind": {
|
||||||
|
"description": "Kind is a string value representing the REST resource this object represents.\nServers may infer this from the endpoint the client submits requests to.\nCannot be updated.\nIn CamelCase.\nMore info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds",
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"metadata": {
|
||||||
|
"type": "object"
|
||||||
|
},
|
||||||
|
"spec": {
|
||||||
|
"description": "ClusterKeycloakRealmSpec defines the desired state of ClusterKeycloakRealm",
|
||||||
|
"properties": {
|
||||||
|
"clusterInstanceRef": {
|
||||||
|
"description": "ClusterInstanceRef is a reference to a ClusterKeycloakInstance\nOne of instanceRef or clusterInstanceRef must be specified",
|
||||||
|
"properties": {
|
||||||
|
"name": {
|
||||||
|
"description": "Name of the cluster-scoped resource",
|
||||||
|
"type": "string"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"required": [
|
||||||
|
"name"
|
||||||
|
],
|
||||||
|
"type": "object",
|
||||||
|
"additionalProperties": false
|
||||||
|
},
|
||||||
|
"definition": {
|
||||||
|
"description": "Definition contains the Keycloak RealmRepresentation",
|
||||||
|
"type": "object",
|
||||||
|
"x-kubernetes-preserve-unknown-fields": true
|
||||||
|
},
|
||||||
|
"instanceRef": {
|
||||||
|
"description": "InstanceRef is a reference to a namespaced KeycloakInstance\nOne of instanceRef or clusterInstanceRef must be specified",
|
||||||
|
"properties": {
|
||||||
|
"name": {
|
||||||
|
"description": "Name of the resource",
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"namespace": {
|
||||||
|
"description": "Namespace of the resource",
|
||||||
|
"type": "string"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"required": [
|
||||||
|
"name",
|
||||||
|
"namespace"
|
||||||
|
],
|
||||||
|
"type": "object",
|
||||||
|
"additionalProperties": false
|
||||||
|
},
|
||||||
|
"realmName": {
|
||||||
|
"description": "RealmName is the name of the realm in Keycloak (defaults to metadata.name)",
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"smtpSecretRef": {
|
||||||
|
"description": "SmtpSecretRef is a reference to a Kubernetes Secret containing SMTP credentials.\nWhen set, the secret values are injected into definition.smtpServer.user and\ndefinition.smtpServer.password before syncing to Keycloak.",
|
||||||
|
"properties": {
|
||||||
|
"name": {
|
||||||
|
"description": "Name of the Kubernetes Secret",
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"namespace": {
|
||||||
|
"description": "Namespace of the Kubernetes Secret (required for cluster-scoped resources)",
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"passwordKey": {
|
||||||
|
"default": "password",
|
||||||
|
"description": "PasswordKey is the key in the secret for the SMTP password (defaults to \"password\")",
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"userKey": {
|
||||||
|
"default": "user",
|
||||||
|
"description": "UserKey is the key in the secret for the SMTP username (defaults to \"user\")",
|
||||||
|
"type": "string"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"required": [
|
||||||
|
"name",
|
||||||
|
"namespace"
|
||||||
|
],
|
||||||
|
"type": "object",
|
||||||
|
"additionalProperties": false
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"required": [
|
||||||
|
"definition"
|
||||||
|
],
|
||||||
|
"type": "object",
|
||||||
|
"additionalProperties": false
|
||||||
|
},
|
||||||
|
"status": {
|
||||||
|
"description": "ClusterKeycloakRealmStatus defines the observed state of ClusterKeycloakRealm",
|
||||||
|
"properties": {
|
||||||
|
"conditions": {
|
||||||
|
"description": "Conditions represent the latest available observations",
|
||||||
|
"items": {
|
||||||
|
"description": "Condition contains details for one aspect of the current state of this API Resource.",
|
||||||
|
"properties": {
|
||||||
|
"lastTransitionTime": {
|
||||||
|
"description": "lastTransitionTime is the last time the condition transitioned from one status to another.\nThis should be when the underlying condition changed. If that is not known, then using the time when the API field changed is acceptable.",
|
||||||
|
"format": "date-time",
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"message": {
|
||||||
|
"description": "message is a human readable message indicating details about the transition.\nThis may be an empty string.",
|
||||||
|
"maxLength": 32768,
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"observedGeneration": {
|
||||||
|
"description": "observedGeneration represents the .metadata.generation that the condition was set based upon.\nFor instance, if .metadata.generation is currently 12, but the .status.conditions[x].observedGeneration is 9, the condition is out of date\nwith respect to the current state of the instance.",
|
||||||
|
"format": "int64",
|
||||||
|
"minimum": 0,
|
||||||
|
"type": "integer"
|
||||||
|
},
|
||||||
|
"reason": {
|
||||||
|
"description": "reason contains a programmatic identifier indicating the reason for the condition's last transition.\nProducers of specific condition types may define expected values and meanings for this field,\nand whether the values are considered a guaranteed API.\nThe value should be a CamelCase string.\nThis field may not be empty.",
|
||||||
|
"maxLength": 1024,
|
||||||
|
"minLength": 1,
|
||||||
|
"pattern": "^[A-Za-z]([A-Za-z0-9_,:]*[A-Za-z0-9_])?$",
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"status": {
|
||||||
|
"description": "status of the condition, one of True, False, Unknown.",
|
||||||
|
"enum": [
|
||||||
|
"True",
|
||||||
|
"False",
|
||||||
|
"Unknown"
|
||||||
|
],
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"type": {
|
||||||
|
"description": "type of condition in CamelCase or in foo.example.com/CamelCase.",
|
||||||
|
"maxLength": 316,
|
||||||
|
"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])$",
|
||||||
|
"type": "string"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"required": [
|
||||||
|
"lastTransitionTime",
|
||||||
|
"message",
|
||||||
|
"reason",
|
||||||
|
"status",
|
||||||
|
"type"
|
||||||
|
],
|
||||||
|
"type": "object",
|
||||||
|
"additionalProperties": false
|
||||||
|
},
|
||||||
|
"type": "array"
|
||||||
|
},
|
||||||
|
"instance": {
|
||||||
|
"description": "Instance contains the resolved instance reference",
|
||||||
|
"properties": {
|
||||||
|
"clusterInstanceRef": {
|
||||||
|
"description": "ClusterInstanceRef is the name of the cluster instance",
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"instanceRef": {
|
||||||
|
"description": "InstanceRef is the name of the namespaced instance",
|
||||||
|
"type": "string"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"type": "object",
|
||||||
|
"additionalProperties": false
|
||||||
|
},
|
||||||
|
"message": {
|
||||||
|
"description": "Message contains additional information",
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"ready": {
|
||||||
|
"description": "Ready indicates if the realm is ready",
|
||||||
|
"type": "boolean"
|
||||||
|
},
|
||||||
|
"realmName": {
|
||||||
|
"description": "RealmName is the actual realm name in Keycloak",
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"resourcePath": {
|
||||||
|
"description": "ResourcePath is the Keycloak API path for this realm",
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"status": {
|
||||||
|
"description": "Status is a human-readable status message",
|
||||||
|
"type": "string"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"required": [
|
||||||
|
"ready"
|
||||||
|
],
|
||||||
|
"type": "object",
|
||||||
|
"additionalProperties": false
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"type": "object"
|
||||||
|
}
|
||||||
File diff suppressed because it is too large
Load Diff
@@ -0,0 +1,162 @@
|
|||||||
|
{
|
||||||
|
"description": "ExternalArtifact is the Schema for the external artifacts API",
|
||||||
|
"properties": {
|
||||||
|
"apiVersion": {
|
||||||
|
"description": "APIVersion defines the versioned schema of this representation of an object.\nServers should convert recognized schemas to the latest internal value, and\nmay reject unrecognized values.\nMore info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources",
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"kind": {
|
||||||
|
"description": "Kind is a string value representing the REST resource this object represents.\nServers may infer this from the endpoint the client submits requests to.\nCannot be updated.\nIn CamelCase.\nMore info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds",
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"metadata": {
|
||||||
|
"type": "object"
|
||||||
|
},
|
||||||
|
"spec": {
|
||||||
|
"description": "ExternalArtifactSpec defines the desired state of ExternalArtifact",
|
||||||
|
"properties": {
|
||||||
|
"sourceRef": {
|
||||||
|
"description": "SourceRef points to the Kubernetes custom resource for\nwhich the artifact is generated.",
|
||||||
|
"properties": {
|
||||||
|
"apiVersion": {
|
||||||
|
"description": "API version of the referent, if not specified the Kubernetes preferred version will be used.",
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"kind": {
|
||||||
|
"description": "Kind of the referent.",
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"name": {
|
||||||
|
"description": "Name of the referent.",
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"namespace": {
|
||||||
|
"description": "Namespace of the referent, when not specified it acts as LocalObjectReference.",
|
||||||
|
"type": "string"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"required": [
|
||||||
|
"kind",
|
||||||
|
"name"
|
||||||
|
],
|
||||||
|
"type": "object",
|
||||||
|
"additionalProperties": false
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"type": "object",
|
||||||
|
"additionalProperties": false
|
||||||
|
},
|
||||||
|
"status": {
|
||||||
|
"description": "ExternalArtifactStatus defines the observed state of ExternalArtifact",
|
||||||
|
"properties": {
|
||||||
|
"artifact": {
|
||||||
|
"description": "Artifact represents the output of an ExternalArtifact reconciliation.",
|
||||||
|
"properties": {
|
||||||
|
"digest": {
|
||||||
|
"description": "Digest is the digest of the file in the form of '<algorithm>:<checksum>'.",
|
||||||
|
"pattern": "^[a-z0-9]+(?:[.+_-][a-z0-9]+)*:[a-zA-Z0-9=_-]+$",
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"lastUpdateTime": {
|
||||||
|
"description": "LastUpdateTime is the timestamp corresponding to the last update of the\nArtifact.",
|
||||||
|
"format": "date-time",
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"metadata": {
|
||||||
|
"additionalProperties": {
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"description": "Metadata holds upstream information such as OCI annotations.",
|
||||||
|
"type": "object"
|
||||||
|
},
|
||||||
|
"path": {
|
||||||
|
"description": "Path is the relative file path of the Artifact. It can be used to locate\nthe file in the root of the Artifact storage on the local file system of\nthe controller managing the Source.",
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"revision": {
|
||||||
|
"description": "Revision is a human-readable identifier traceable in the origin source\nsystem. It can be a Git commit SHA, Git tag, a Helm chart version, etc.",
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"size": {
|
||||||
|
"description": "Size is the number of bytes in the file.",
|
||||||
|
"format": "int64",
|
||||||
|
"type": "integer"
|
||||||
|
},
|
||||||
|
"url": {
|
||||||
|
"description": "URL is the HTTP address of the Artifact as exposed by the controller\nmanaging the Source. It can be used to retrieve the Artifact for\nconsumption, e.g. by another controller applying the Artifact contents.",
|
||||||
|
"type": "string"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"required": [
|
||||||
|
"digest",
|
||||||
|
"lastUpdateTime",
|
||||||
|
"path",
|
||||||
|
"revision",
|
||||||
|
"url"
|
||||||
|
],
|
||||||
|
"type": "object",
|
||||||
|
"additionalProperties": false
|
||||||
|
},
|
||||||
|
"conditions": {
|
||||||
|
"description": "Conditions holds the conditions for the ExternalArtifact.",
|
||||||
|
"items": {
|
||||||
|
"description": "Condition contains details for one aspect of the current state of this API Resource.",
|
||||||
|
"properties": {
|
||||||
|
"lastTransitionTime": {
|
||||||
|
"description": "lastTransitionTime is the last time the condition transitioned from one status to another.\nThis should be when the underlying condition changed. If that is not known, then using the time when the API field changed is acceptable.",
|
||||||
|
"format": "date-time",
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"message": {
|
||||||
|
"description": "message is a human readable message indicating details about the transition.\nThis may be an empty string.",
|
||||||
|
"maxLength": 32768,
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"observedGeneration": {
|
||||||
|
"description": "observedGeneration represents the .metadata.generation that the condition was set based upon.\nFor instance, if .metadata.generation is currently 12, but the .status.conditions[x].observedGeneration is 9, the condition is out of date\nwith respect to the current state of the instance.",
|
||||||
|
"format": "int64",
|
||||||
|
"minimum": 0,
|
||||||
|
"type": "integer"
|
||||||
|
},
|
||||||
|
"reason": {
|
||||||
|
"description": "reason contains a programmatic identifier indicating the reason for the condition's last transition.\nProducers of specific condition types may define expected values and meanings for this field,\nand whether the values are considered a guaranteed API.\nThe value should be a CamelCase string.\nThis field may not be empty.",
|
||||||
|
"maxLength": 1024,
|
||||||
|
"minLength": 1,
|
||||||
|
"pattern": "^[A-Za-z]([A-Za-z0-9_,:]*[A-Za-z0-9_])?$",
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"status": {
|
||||||
|
"description": "status of the condition, one of True, False, Unknown.",
|
||||||
|
"enum": [
|
||||||
|
"True",
|
||||||
|
"False",
|
||||||
|
"Unknown"
|
||||||
|
],
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"type": {
|
||||||
|
"description": "type of condition in CamelCase or in foo.example.com/CamelCase.",
|
||||||
|
"maxLength": 316,
|
||||||
|
"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])$",
|
||||||
|
"type": "string"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"required": [
|
||||||
|
"lastTransitionTime",
|
||||||
|
"message",
|
||||||
|
"reason",
|
||||||
|
"status",
|
||||||
|
"type"
|
||||||
|
],
|
||||||
|
"type": "object",
|
||||||
|
"additionalProperties": false
|
||||||
|
},
|
||||||
|
"type": "array"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"type": "object",
|
||||||
|
"additionalProperties": false
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"type": "object"
|
||||||
|
}
|
||||||
@@ -0,0 +1,570 @@
|
|||||||
|
{
|
||||||
|
"description": "FluxInstance is the Schema for the fluxinstances API",
|
||||||
|
"properties": {
|
||||||
|
"apiVersion": {
|
||||||
|
"description": "APIVersion defines the versioned schema of this representation of an object.\nServers should convert recognized schemas to the latest internal value, and\nmay reject unrecognized values.\nMore info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources",
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"kind": {
|
||||||
|
"description": "Kind is a string value representing the REST resource this object represents.\nServers may infer this from the endpoint the client submits requests to.\nCannot be updated.\nIn CamelCase.\nMore info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds",
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"metadata": {
|
||||||
|
"type": "object"
|
||||||
|
},
|
||||||
|
"spec": {
|
||||||
|
"description": "FluxInstanceSpec defines the desired state of FluxInstance",
|
||||||
|
"properties": {
|
||||||
|
"cluster": {
|
||||||
|
"description": "Cluster holds the specification of the Kubernetes cluster.",
|
||||||
|
"properties": {
|
||||||
|
"domain": {
|
||||||
|
"default": "cluster.local",
|
||||||
|
"description": "Domain is the cluster domain used for generating the FQDN of services.\nDefaults to 'cluster.local'.",
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"multitenant": {
|
||||||
|
"default": false,
|
||||||
|
"description": "Multitenant enables the multitenancy lockdown. Defaults to false.",
|
||||||
|
"type": "boolean"
|
||||||
|
},
|
||||||
|
"multitenantWorkloadIdentity": {
|
||||||
|
"default": false,
|
||||||
|
"description": "MultitenantWorkloadIdentity enables the multitenancy lockdown for\nworkload identity. Defaults to false.",
|
||||||
|
"type": "boolean"
|
||||||
|
},
|
||||||
|
"networkPolicy": {
|
||||||
|
"default": true,
|
||||||
|
"description": "NetworkPolicy restricts network access to the current namespace.\nDefaults to true.",
|
||||||
|
"type": "boolean"
|
||||||
|
},
|
||||||
|
"objectLevelWorkloadIdentity": {
|
||||||
|
"description": "ObjectLevelWorkloadIdentity enables the feature gate\nrequired for object-level workload identity.\nThis feature is only available in Flux v2.6.0 and later.",
|
||||||
|
"type": "boolean"
|
||||||
|
},
|
||||||
|
"size": {
|
||||||
|
"description": "Size defines the vertical scaling profile of the Flux controllers.\nThe size is used to determine the concurrency and CPU/Memory limits for the Flux controllers.\nAccepted values are: 'small', 'medium' and 'large'.",
|
||||||
|
"enum": [
|
||||||
|
"small",
|
||||||
|
"medium",
|
||||||
|
"large"
|
||||||
|
],
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"tenantDefaultDecryptionServiceAccount": {
|
||||||
|
"description": "TenantDefaultDecryptionServiceAccount is the name of the service account\nto use as default for kustomize-controller SOPS decryption when the\nmultitenant lockdown for workload identity is enabled. Defaults to the\n'default' service account from the tenant namespace.",
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"tenantDefaultKubeConfigServiceAccount": {
|
||||||
|
"description": "TenantDefaultKubeConfigServiceAccount is the name of the service account\nto use as default for kustomize-controller and helm-controller remote\ncluster access via spec.kubeConfig.configMapRef when the multitenant\nlockdown for workload identity is enabled. Defaults to the 'default'\nservice account from the tenant namespace.",
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"tenantDefaultServiceAccount": {
|
||||||
|
"description": "TenantDefaultServiceAccount is the name of the service account\nto use as default when the multitenant lockdown is enabled, for\nkustomize-controller and helm-controller.\nThis field will also be used for multitenant workload identity\nlockdown for source-controller, notification-controller,\nimage-reflector-controller and image-automation-controller.\nDefaults to the 'default' service account from the tenant namespace.",
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"type": {
|
||||||
|
"default": "kubernetes",
|
||||||
|
"description": "Type specifies the distro of the Kubernetes cluster.\nDefaults to 'kubernetes'.",
|
||||||
|
"enum": [
|
||||||
|
"kubernetes",
|
||||||
|
"openshift",
|
||||||
|
"aws",
|
||||||
|
"azure",
|
||||||
|
"gcp"
|
||||||
|
],
|
||||||
|
"type": "string"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"type": "object",
|
||||||
|
"x-kubernetes-validations": [
|
||||||
|
{
|
||||||
|
"message": ".objectLevelWorkloadIdentity must be set to true when .multitenantWorkloadIdentity is set to true",
|
||||||
|
"rule": "(has(self.objectLevelWorkloadIdentity) && self.objectLevelWorkloadIdentity) || !has(self.multitenantWorkloadIdentity) || !self.multitenantWorkloadIdentity"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"additionalProperties": false
|
||||||
|
},
|
||||||
|
"commonMetadata": {
|
||||||
|
"description": "CommonMetadata specifies the common labels and annotations that are\napplied to all resources. Any existing label or annotation will be\noverridden if its key matches a common one.",
|
||||||
|
"properties": {
|
||||||
|
"annotations": {
|
||||||
|
"additionalProperties": {
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"description": "Annotations to be added to the object's metadata.",
|
||||||
|
"type": "object"
|
||||||
|
},
|
||||||
|
"labels": {
|
||||||
|
"additionalProperties": {
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"description": "Labels to be added to the object's metadata.",
|
||||||
|
"type": "object"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"type": "object",
|
||||||
|
"additionalProperties": false
|
||||||
|
},
|
||||||
|
"components": {
|
||||||
|
"description": "Components is the list of controllers to install.\nDefaults to the core Flux controllers:\n - source-controller\n - kustomize-controller\n - helm-controller\n - notification-controller",
|
||||||
|
"items": {
|
||||||
|
"description": "Component is the name of a controller to install.",
|
||||||
|
"enum": [
|
||||||
|
"source-controller",
|
||||||
|
"kustomize-controller",
|
||||||
|
"helm-controller",
|
||||||
|
"notification-controller",
|
||||||
|
"image-reflector-controller",
|
||||||
|
"image-automation-controller",
|
||||||
|
"source-watcher"
|
||||||
|
],
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"type": "array"
|
||||||
|
},
|
||||||
|
"distribution": {
|
||||||
|
"description": "Distribution specifies the version and container registry to pull images from.",
|
||||||
|
"properties": {
|
||||||
|
"artifact": {
|
||||||
|
"description": "Artifact is the URL to the OCI artifact containing\nthe latest Kubernetes manifests for the distribution,\ne.g. 'oci://ghcr.io/controlplaneio-fluxcd/flux-operator-manifests:latest'.",
|
||||||
|
"pattern": "^oci://.*$",
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"artifactPullSecret": {
|
||||||
|
"description": "ArtifactPullSecret is the name of the Kubernetes secret\nto use for pulling the Kubernetes manifests for the distribution specified in the Artifact field.",
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"imagePullSecret": {
|
||||||
|
"description": "ImagePullSecret is the name of the Kubernetes secret\nto use for pulling images.",
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"registry": {
|
||||||
|
"description": "Registry address to pull the distribution images from\ne.g. 'ghcr.io/fluxcd'.",
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"variant": {
|
||||||
|
"description": "Variant specifies the Flux distribution flavor stored\nin the registry.",
|
||||||
|
"enum": [
|
||||||
|
"upstream-alpine",
|
||||||
|
"enterprise-alpine",
|
||||||
|
"enterprise-distroless",
|
||||||
|
"enterprise-distroless-fips"
|
||||||
|
],
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"version": {
|
||||||
|
"description": "Version semver expression e.g. '2.x', '2.3.x'.",
|
||||||
|
"type": "string"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"required": [
|
||||||
|
"registry",
|
||||||
|
"version"
|
||||||
|
],
|
||||||
|
"type": "object",
|
||||||
|
"additionalProperties": false
|
||||||
|
},
|
||||||
|
"kustomize": {
|
||||||
|
"description": "Kustomize holds a set of patches that can be applied to the\nFlux installation, to customize the way Flux operates.",
|
||||||
|
"properties": {
|
||||||
|
"patches": {
|
||||||
|
"description": "Strategic merge and JSON patches, defined as inline YAML objects,\ncapable of targeting objects based on kind, label and annotation selectors.",
|
||||||
|
"items": {
|
||||||
|
"description": "Patch contains an inline StrategicMerge or JSON6902 patch, and the target the patch should\nbe applied to.",
|
||||||
|
"properties": {
|
||||||
|
"patch": {
|
||||||
|
"description": "Patch contains an inline StrategicMerge patch or an inline JSON6902 patch with\nan array of operation objects.",
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"target": {
|
||||||
|
"description": "Target points to the resources that the patch document should be applied to.",
|
||||||
|
"properties": {
|
||||||
|
"annotationSelector": {
|
||||||
|
"description": "AnnotationSelector is a string that follows the label selection expression\nhttps://kubernetes.io/docs/concepts/overview/working-with-objects/labels/#api\nIt matches with the resource annotations.",
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"group": {
|
||||||
|
"description": "Group is the API group to select resources from.\nTogether with Version and Kind it is capable of unambiguously identifying and/or selecting resources.\nhttps://github.com/kubernetes/community/blob/master/contributors/design-proposals/api-machinery/api-group.md",
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"kind": {
|
||||||
|
"description": "Kind of the API Group to select resources from.\nTogether with Group and Version it is capable of unambiguously\nidentifying and/or selecting resources.\nhttps://github.com/kubernetes/community/blob/master/contributors/design-proposals/api-machinery/api-group.md",
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"labelSelector": {
|
||||||
|
"description": "LabelSelector is a string that follows the label selection expression\nhttps://kubernetes.io/docs/concepts/overview/working-with-objects/labels/#api\nIt matches with the resource labels.",
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"name": {
|
||||||
|
"description": "Name to match resources with.",
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"namespace": {
|
||||||
|
"description": "Namespace to select resources from.",
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"version": {
|
||||||
|
"description": "Version of the API Group to select resources from.\nTogether with Group and Kind it is capable of unambiguously identifying and/or selecting resources.\nhttps://github.com/kubernetes/community/blob/master/contributors/design-proposals/api-machinery/api-group.md",
|
||||||
|
"type": "string"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"type": "object",
|
||||||
|
"additionalProperties": false
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"required": [
|
||||||
|
"patch"
|
||||||
|
],
|
||||||
|
"type": "object",
|
||||||
|
"additionalProperties": false
|
||||||
|
},
|
||||||
|
"type": "array"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"type": "object",
|
||||||
|
"additionalProperties": false
|
||||||
|
},
|
||||||
|
"migrateResources": {
|
||||||
|
"default": true,
|
||||||
|
"description": "MigrateResources instructs the controller to migrate the Flux custom resources\nfrom the previous version to the latest API version specified in the CRD.\nDefaults to true.",
|
||||||
|
"type": "boolean"
|
||||||
|
},
|
||||||
|
"sharding": {
|
||||||
|
"description": "Sharding holds the specification of the sharding configuration.",
|
||||||
|
"properties": {
|
||||||
|
"key": {
|
||||||
|
"default": "sharding.fluxcd.io/key",
|
||||||
|
"description": "Key is the label key used to shard the resources.",
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"shards": {
|
||||||
|
"description": "Shards is the list of shard names.",
|
||||||
|
"items": {
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"minItems": 1,
|
||||||
|
"type": "array"
|
||||||
|
},
|
||||||
|
"storage": {
|
||||||
|
"description": "Storage defines if the source-controller shards\nshould use an emptyDir or a persistent volume claim for storage.\nAccepted values are 'ephemeral' or 'persistent', defaults to 'ephemeral'.\nFor 'persistent' to take effect, the '.spec.storage' field must be set.",
|
||||||
|
"enum": [
|
||||||
|
"ephemeral",
|
||||||
|
"persistent"
|
||||||
|
],
|
||||||
|
"type": "string"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"required": [
|
||||||
|
"shards"
|
||||||
|
],
|
||||||
|
"type": "object",
|
||||||
|
"additionalProperties": false
|
||||||
|
},
|
||||||
|
"storage": {
|
||||||
|
"description": "Storage holds the specification of the source-controller\npersistent volume claim.",
|
||||||
|
"properties": {
|
||||||
|
"class": {
|
||||||
|
"description": "Class is the storage class to use for the PVC.",
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"size": {
|
||||||
|
"description": "Size is the size of the PVC.",
|
||||||
|
"type": "string"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"required": [
|
||||||
|
"class",
|
||||||
|
"size"
|
||||||
|
],
|
||||||
|
"type": "object",
|
||||||
|
"additionalProperties": false
|
||||||
|
},
|
||||||
|
"sync": {
|
||||||
|
"description": "Sync specifies the source for the cluster sync operation.\nWhen set, a Flux source (GitRepository, OCIRepository or Bucket)\nand Flux Kustomization are created to sync the cluster state\nwith the source repository.",
|
||||||
|
"properties": {
|
||||||
|
"interval": {
|
||||||
|
"default": "1m",
|
||||||
|
"description": "Interval is the time between syncs.",
|
||||||
|
"pattern": "^([0-9]+(\\.[0-9]+)?(ms|s|m|h))+$",
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"kind": {
|
||||||
|
"description": "Kind is the kind of the source.",
|
||||||
|
"enum": [
|
||||||
|
"OCIRepository",
|
||||||
|
"GitRepository",
|
||||||
|
"Bucket"
|
||||||
|
],
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"name": {
|
||||||
|
"description": "Name is the name of the Flux source and kustomization resources.\nWhen not specified, the name is set to the namespace name of the FluxInstance.",
|
||||||
|
"maxLength": 63,
|
||||||
|
"type": "string",
|
||||||
|
"x-kubernetes-validations": [
|
||||||
|
{
|
||||||
|
"message": "Sync name is immutable",
|
||||||
|
"rule": "self == oldSelf"
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"path": {
|
||||||
|
"description": "Path is the path to the source directory containing\nthe kustomize overlay or plain Kubernetes manifests.",
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"provider": {
|
||||||
|
"description": "Provider specifies OIDC provider for source authentication.\nFor OCIRepository and Bucket the provider can be set to 'aws', 'azure' or 'gcp'.\nfor GitRepository the accepted value can be set to 'azure' or 'github'.\nTo disable OIDC authentication the provider can be set to 'generic' or left empty.",
|
||||||
|
"enum": [
|
||||||
|
"generic",
|
||||||
|
"aws",
|
||||||
|
"azure",
|
||||||
|
"gcp",
|
||||||
|
"github"
|
||||||
|
],
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"pullSecret": {
|
||||||
|
"description": "PullSecret specifies the Kubernetes Secret containing the\nauthentication credentials for the source.\nFor Git over HTTP/S sources, the secret must contain username and password fields.\nFor Git over SSH sources, the secret must contain known_hosts and identity fields.\nFor OCI sources, the secret must be of type kubernetes.io/dockerconfigjson.\nFor Bucket sources, the secret must contain accesskey and secretkey fields.",
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"ref": {
|
||||||
|
"description": "Ref is the source reference, can be a Git ref name e.g. 'refs/heads/main',\nan OCI tag e.g. 'latest' or a bucket name e.g. 'flux'.",
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"url": {
|
||||||
|
"description": "URL is the source URL, can be a Git repository HTTP/S or SSH address,\nan OCI repository address or a Bucket endpoint.",
|
||||||
|
"type": "string"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"required": [
|
||||||
|
"kind",
|
||||||
|
"path",
|
||||||
|
"ref",
|
||||||
|
"url"
|
||||||
|
],
|
||||||
|
"type": "object",
|
||||||
|
"additionalProperties": false
|
||||||
|
},
|
||||||
|
"wait": {
|
||||||
|
"default": true,
|
||||||
|
"description": "Wait instructs the controller to check the health of all the reconciled\nresources. Defaults to true.",
|
||||||
|
"type": "boolean"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"required": [
|
||||||
|
"distribution"
|
||||||
|
],
|
||||||
|
"type": "object",
|
||||||
|
"additionalProperties": false
|
||||||
|
},
|
||||||
|
"status": {
|
||||||
|
"description": "FluxInstanceStatus defines the observed state of FluxInstance",
|
||||||
|
"properties": {
|
||||||
|
"components": {
|
||||||
|
"description": "Components contains the container images used by the components.",
|
||||||
|
"items": {
|
||||||
|
"description": "ComponentImage represents a container image used by a component.",
|
||||||
|
"properties": {
|
||||||
|
"digest": {
|
||||||
|
"description": "Digest of the container image.",
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"name": {
|
||||||
|
"description": "Name of the component.",
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"repository": {
|
||||||
|
"description": "Repository address of the container image.",
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"tag": {
|
||||||
|
"description": "Tag of the container image.",
|
||||||
|
"type": "string"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"required": [
|
||||||
|
"name",
|
||||||
|
"repository",
|
||||||
|
"tag"
|
||||||
|
],
|
||||||
|
"type": "object",
|
||||||
|
"additionalProperties": false
|
||||||
|
},
|
||||||
|
"type": "array"
|
||||||
|
},
|
||||||
|
"conditions": {
|
||||||
|
"description": "Conditions contains the readiness conditions of the object.",
|
||||||
|
"items": {
|
||||||
|
"description": "Condition contains details for one aspect of the current state of this API Resource.",
|
||||||
|
"properties": {
|
||||||
|
"lastTransitionTime": {
|
||||||
|
"description": "lastTransitionTime is the last time the condition transitioned from one status to another.\nThis should be when the underlying condition changed. If that is not known, then using the time when the API field changed is acceptable.",
|
||||||
|
"format": "date-time",
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"message": {
|
||||||
|
"description": "message is a human readable message indicating details about the transition.\nThis may be an empty string.",
|
||||||
|
"maxLength": 32768,
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"observedGeneration": {
|
||||||
|
"description": "observedGeneration represents the .metadata.generation that the condition was set based upon.\nFor instance, if .metadata.generation is currently 12, but the .status.conditions[x].observedGeneration is 9, the condition is out of date\nwith respect to the current state of the instance.",
|
||||||
|
"format": "int64",
|
||||||
|
"minimum": 0,
|
||||||
|
"type": "integer"
|
||||||
|
},
|
||||||
|
"reason": {
|
||||||
|
"description": "reason contains a programmatic identifier indicating the reason for the condition's last transition.\nProducers of specific condition types may define expected values and meanings for this field,\nand whether the values are considered a guaranteed API.\nThe value should be a CamelCase string.\nThis field may not be empty.",
|
||||||
|
"maxLength": 1024,
|
||||||
|
"minLength": 1,
|
||||||
|
"pattern": "^[A-Za-z]([A-Za-z0-9_,:]*[A-Za-z0-9_])?$",
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"status": {
|
||||||
|
"description": "status of the condition, one of True, False, Unknown.",
|
||||||
|
"enum": [
|
||||||
|
"True",
|
||||||
|
"False",
|
||||||
|
"Unknown"
|
||||||
|
],
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"type": {
|
||||||
|
"description": "type of condition in CamelCase or in foo.example.com/CamelCase.",
|
||||||
|
"maxLength": 316,
|
||||||
|
"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])$",
|
||||||
|
"type": "string"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"required": [
|
||||||
|
"lastTransitionTime",
|
||||||
|
"message",
|
||||||
|
"reason",
|
||||||
|
"status",
|
||||||
|
"type"
|
||||||
|
],
|
||||||
|
"type": "object",
|
||||||
|
"additionalProperties": false
|
||||||
|
},
|
||||||
|
"type": "array"
|
||||||
|
},
|
||||||
|
"history": {
|
||||||
|
"description": "History contains the reconciliation history of the FluxInstance\nas a list of snapshots ordered by the last reconciled time.",
|
||||||
|
"items": {
|
||||||
|
"description": "Snapshot represents a point-in-time record of a group of resources reconciliation,\nincluding timing information, status, and a unique digest identifier.",
|
||||||
|
"properties": {
|
||||||
|
"digest": {
|
||||||
|
"description": "Digest is the checksum in the format `<algo>:<hex>` of the resources in this snapshot.",
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"firstReconciled": {
|
||||||
|
"description": "FirstReconciled is the time when this revision was first reconciled to the cluster.",
|
||||||
|
"format": "date-time",
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"lastReconciled": {
|
||||||
|
"description": "LastReconciled is the time when this revision was last reconciled to the cluster.",
|
||||||
|
"format": "date-time",
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"lastReconciledDuration": {
|
||||||
|
"description": "LastReconciledDuration is time it took to reconcile the resources in this revision.",
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"lastReconciledStatus": {
|
||||||
|
"description": "LastReconciledStatus is the status of the last reconciliation.",
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"metadata": {
|
||||||
|
"additionalProperties": {
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"description": "Metadata contains additional information about the snapshot.",
|
||||||
|
"type": "object"
|
||||||
|
},
|
||||||
|
"totalReconciliations": {
|
||||||
|
"description": "TotalReconciliations is the total number of reconciliations that have occurred for this snapshot.",
|
||||||
|
"format": "int64",
|
||||||
|
"type": "integer"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"required": [
|
||||||
|
"digest",
|
||||||
|
"firstReconciled",
|
||||||
|
"lastReconciled",
|
||||||
|
"lastReconciledDuration",
|
||||||
|
"lastReconciledStatus",
|
||||||
|
"totalReconciliations"
|
||||||
|
],
|
||||||
|
"type": "object",
|
||||||
|
"additionalProperties": false
|
||||||
|
},
|
||||||
|
"type": "array"
|
||||||
|
},
|
||||||
|
"inventory": {
|
||||||
|
"description": "Inventory contains a list of Kubernetes resource object references\nlast applied on the cluster.",
|
||||||
|
"properties": {
|
||||||
|
"entries": {
|
||||||
|
"description": "Entries of Kubernetes resource object references.",
|
||||||
|
"items": {
|
||||||
|
"description": "ResourceRef contains the information necessary to locate a resource within a cluster.",
|
||||||
|
"properties": {
|
||||||
|
"id": {
|
||||||
|
"description": "ID is the string representation of the Kubernetes resource object's metadata,\nin the format '<namespace>_<name>_<group>_<kind>'.",
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"v": {
|
||||||
|
"description": "Version is the API version of the Kubernetes resource object's kind.",
|
||||||
|
"type": "string"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"required": [
|
||||||
|
"id",
|
||||||
|
"v"
|
||||||
|
],
|
||||||
|
"type": "object",
|
||||||
|
"additionalProperties": false
|
||||||
|
},
|
||||||
|
"type": "array"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"required": [
|
||||||
|
"entries"
|
||||||
|
],
|
||||||
|
"type": "object",
|
||||||
|
"additionalProperties": false
|
||||||
|
},
|
||||||
|
"lastAppliedRevision": {
|
||||||
|
"description": "LastAppliedRevision is the version and digest of the\ndistribution config that was last reconcile.",
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"lastArtifactRevision": {
|
||||||
|
"description": "LastArtifactRevision is the digest of the last pulled\ndistribution artifact.",
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"lastAttemptedRevision": {
|
||||||
|
"description": "LastAttemptedRevision is the version and digest of the\ndistribution config that was last attempted to reconcile.",
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"lastHandledForceAt": {
|
||||||
|
"description": "LastHandledForceAt holds the value of the most recent\nforce request value, so a change of the annotation value\ncan be detected.",
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"lastHandledReconcileAt": {
|
||||||
|
"description": "LastHandledReconcileAt holds the value of the most recent\nreconcile request value, so a change of the annotation value\ncan be detected.",
|
||||||
|
"type": "string"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"type": "object",
|
||||||
|
"additionalProperties": false
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"type": "object",
|
||||||
|
"x-kubernetes-validations": [
|
||||||
|
{
|
||||||
|
"message": "the only accepted name for a FluxInstance is 'flux'",
|
||||||
|
"rule": "self.metadata.name == 'flux'"
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
@@ -0,0 +1,290 @@
|
|||||||
|
{
|
||||||
|
"description": "FluxReport is the Schema for the fluxreports API.",
|
||||||
|
"properties": {
|
||||||
|
"apiVersion": {
|
||||||
|
"description": "APIVersion defines the versioned schema of this representation of an object.\nServers should convert recognized schemas to the latest internal value, and\nmay reject unrecognized values.\nMore info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources",
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"kind": {
|
||||||
|
"description": "Kind is a string value representing the REST resource this object represents.\nServers may infer this from the endpoint the client submits requests to.\nCannot be updated.\nIn CamelCase.\nMore info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds",
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"metadata": {
|
||||||
|
"type": "object"
|
||||||
|
},
|
||||||
|
"spec": {
|
||||||
|
"description": "FluxReportSpec defines the observed state of a Flux installation.",
|
||||||
|
"properties": {
|
||||||
|
"cluster": {
|
||||||
|
"description": "Cluster is the version information of the Kubernetes cluster.",
|
||||||
|
"properties": {
|
||||||
|
"nodes": {
|
||||||
|
"description": "Nodes is the number of nodes in the Kubernetes cluster.",
|
||||||
|
"type": "integer"
|
||||||
|
},
|
||||||
|
"platform": {
|
||||||
|
"description": "Platform is the os/arch of the Kubernetes control plane.",
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"serverVersion": {
|
||||||
|
"description": "ServerVersion is the version of the Kubernetes API server.",
|
||||||
|
"type": "string"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"required": [
|
||||||
|
"platform",
|
||||||
|
"serverVersion"
|
||||||
|
],
|
||||||
|
"type": "object",
|
||||||
|
"additionalProperties": false
|
||||||
|
},
|
||||||
|
"components": {
|
||||||
|
"description": "ComponentsStatus is the status of the Flux controller deployments.",
|
||||||
|
"items": {
|
||||||
|
"description": "FluxComponentStatus defines the observed state of a Flux component.",
|
||||||
|
"properties": {
|
||||||
|
"image": {
|
||||||
|
"description": "Image is the container image of the Flux component.",
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"name": {
|
||||||
|
"description": "Name is the name of the Flux component.",
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"ready": {
|
||||||
|
"description": "Ready is the readiness status of the Flux component.",
|
||||||
|
"type": "boolean"
|
||||||
|
},
|
||||||
|
"status": {
|
||||||
|
"description": "Status is a human-readable message indicating details\nabout the Flux component observed state.",
|
||||||
|
"type": "string"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"required": [
|
||||||
|
"image",
|
||||||
|
"name",
|
||||||
|
"ready",
|
||||||
|
"status"
|
||||||
|
],
|
||||||
|
"type": "object",
|
||||||
|
"additionalProperties": false
|
||||||
|
},
|
||||||
|
"type": "array"
|
||||||
|
},
|
||||||
|
"distribution": {
|
||||||
|
"description": "Distribution is the version information of the Flux installation.",
|
||||||
|
"properties": {
|
||||||
|
"entitlement": {
|
||||||
|
"description": "Entitlement is the entitlement verification status.",
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"managedBy": {
|
||||||
|
"description": "ManagedBy is the name of the operator managing the Flux instance.",
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"status": {
|
||||||
|
"description": "Status is a human-readable message indicating details\nabout the distribution observed state.",
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"version": {
|
||||||
|
"description": "Version is the version of the Flux instance.",
|
||||||
|
"type": "string"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"required": [
|
||||||
|
"entitlement",
|
||||||
|
"status"
|
||||||
|
],
|
||||||
|
"type": "object",
|
||||||
|
"additionalProperties": false
|
||||||
|
},
|
||||||
|
"operator": {
|
||||||
|
"description": "Operator is the version information of the Flux Operator.",
|
||||||
|
"properties": {
|
||||||
|
"apiVersion": {
|
||||||
|
"description": "APIVersion is the API version of the Flux Operator.",
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"platform": {
|
||||||
|
"description": "Platform is the os/arch of Flux Operator.",
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"version": {
|
||||||
|
"description": "Version is the version number of Flux Operator.",
|
||||||
|
"type": "string"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"required": [
|
||||||
|
"apiVersion",
|
||||||
|
"platform",
|
||||||
|
"version"
|
||||||
|
],
|
||||||
|
"type": "object",
|
||||||
|
"additionalProperties": false
|
||||||
|
},
|
||||||
|
"reconcilers": {
|
||||||
|
"description": "ReconcilersStatus is the list of Flux reconcilers and\ntheir statistics grouped by API kind.",
|
||||||
|
"items": {
|
||||||
|
"description": "FluxReconcilerStatus defines the observed state of a Flux reconciler.",
|
||||||
|
"properties": {
|
||||||
|
"apiVersion": {
|
||||||
|
"description": "APIVersion is the API version of the Flux resource.",
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"kind": {
|
||||||
|
"description": "Kind is the kind of the Flux resource.",
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"stats": {
|
||||||
|
"description": "Stats is the reconcile statics of the Flux resource kind.",
|
||||||
|
"properties": {
|
||||||
|
"failing": {
|
||||||
|
"description": "Failing is the number of reconciled\nresources in the Failing state and not Suspended.",
|
||||||
|
"type": "integer"
|
||||||
|
},
|
||||||
|
"running": {
|
||||||
|
"description": "Running is the number of reconciled\nresources in the Running state.",
|
||||||
|
"type": "integer"
|
||||||
|
},
|
||||||
|
"suspended": {
|
||||||
|
"description": "Suspended is the number of reconciled\nresources in the Suspended state.",
|
||||||
|
"type": "integer"
|
||||||
|
},
|
||||||
|
"totalSize": {
|
||||||
|
"description": "TotalSize is the total size of the artifacts in storage.",
|
||||||
|
"type": "string"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"required": [
|
||||||
|
"failing",
|
||||||
|
"running",
|
||||||
|
"suspended"
|
||||||
|
],
|
||||||
|
"type": "object",
|
||||||
|
"additionalProperties": false
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"required": [
|
||||||
|
"apiVersion",
|
||||||
|
"kind"
|
||||||
|
],
|
||||||
|
"type": "object",
|
||||||
|
"additionalProperties": false
|
||||||
|
},
|
||||||
|
"type": "array"
|
||||||
|
},
|
||||||
|
"sync": {
|
||||||
|
"description": "SyncStatus is the status of the cluster sync\nSource and Kustomization resources.",
|
||||||
|
"properties": {
|
||||||
|
"id": {
|
||||||
|
"description": "ID is the identifier of the sync.",
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"path": {
|
||||||
|
"description": "Path is the kustomize path of the sync.",
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"ready": {
|
||||||
|
"description": "Ready is the readiness status of the sync.",
|
||||||
|
"type": "boolean"
|
||||||
|
},
|
||||||
|
"source": {
|
||||||
|
"description": "Source is the URL of the source repository.",
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"status": {
|
||||||
|
"description": "Status is a human-readable message indicating details\nabout the sync observed state.",
|
||||||
|
"type": "string"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"required": [
|
||||||
|
"id",
|
||||||
|
"ready",
|
||||||
|
"status"
|
||||||
|
],
|
||||||
|
"type": "object",
|
||||||
|
"additionalProperties": false
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"required": [
|
||||||
|
"distribution"
|
||||||
|
],
|
||||||
|
"type": "object",
|
||||||
|
"additionalProperties": false
|
||||||
|
},
|
||||||
|
"status": {
|
||||||
|
"description": "FluxReportStatus defines the readiness of a FluxReport.",
|
||||||
|
"properties": {
|
||||||
|
"conditions": {
|
||||||
|
"description": "Conditions contains the readiness conditions of the object.",
|
||||||
|
"items": {
|
||||||
|
"description": "Condition contains details for one aspect of the current state of this API Resource.",
|
||||||
|
"properties": {
|
||||||
|
"lastTransitionTime": {
|
||||||
|
"description": "lastTransitionTime is the last time the condition transitioned from one status to another.\nThis should be when the underlying condition changed. If that is not known, then using the time when the API field changed is acceptable.",
|
||||||
|
"format": "date-time",
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"message": {
|
||||||
|
"description": "message is a human readable message indicating details about the transition.\nThis may be an empty string.",
|
||||||
|
"maxLength": 32768,
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"observedGeneration": {
|
||||||
|
"description": "observedGeneration represents the .metadata.generation that the condition was set based upon.\nFor instance, if .metadata.generation is currently 12, but the .status.conditions[x].observedGeneration is 9, the condition is out of date\nwith respect to the current state of the instance.",
|
||||||
|
"format": "int64",
|
||||||
|
"minimum": 0,
|
||||||
|
"type": "integer"
|
||||||
|
},
|
||||||
|
"reason": {
|
||||||
|
"description": "reason contains a programmatic identifier indicating the reason for the condition's last transition.\nProducers of specific condition types may define expected values and meanings for this field,\nand whether the values are considered a guaranteed API.\nThe value should be a CamelCase string.\nThis field may not be empty.",
|
||||||
|
"maxLength": 1024,
|
||||||
|
"minLength": 1,
|
||||||
|
"pattern": "^[A-Za-z]([A-Za-z0-9_,:]*[A-Za-z0-9_])?$",
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"status": {
|
||||||
|
"description": "status of the condition, one of True, False, Unknown.",
|
||||||
|
"enum": [
|
||||||
|
"True",
|
||||||
|
"False",
|
||||||
|
"Unknown"
|
||||||
|
],
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"type": {
|
||||||
|
"description": "type of condition in CamelCase or in foo.example.com/CamelCase.",
|
||||||
|
"maxLength": 316,
|
||||||
|
"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])$",
|
||||||
|
"type": "string"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"required": [
|
||||||
|
"lastTransitionTime",
|
||||||
|
"message",
|
||||||
|
"reason",
|
||||||
|
"status",
|
||||||
|
"type"
|
||||||
|
],
|
||||||
|
"type": "object",
|
||||||
|
"additionalProperties": false
|
||||||
|
},
|
||||||
|
"type": "array"
|
||||||
|
},
|
||||||
|
"lastHandledReconcileAt": {
|
||||||
|
"description": "LastHandledReconcileAt holds the value of the most recent\nreconcile request value, so a change of the annotation value\ncan be detected.",
|
||||||
|
"type": "string"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"type": "object",
|
||||||
|
"additionalProperties": false
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"type": "object",
|
||||||
|
"x-kubernetes-validations": [
|
||||||
|
{
|
||||||
|
"message": "the only accepted name for a FluxReport is 'flux'",
|
||||||
|
"rule": "self.metadata.name == 'flux'"
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
@@ -0,0 +1,33 @@
|
|||||||
|
{
|
||||||
|
"description": "Auto-generated derived type for Node via `CustomResource`",
|
||||||
|
"properties": {
|
||||||
|
"spec": {
|
||||||
|
"properties": {
|
||||||
|
"address": {
|
||||||
|
"format": "ip",
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"hostname": {
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"port": {
|
||||||
|
"format": "uint16",
|
||||||
|
"minimum": 0,
|
||||||
|
"type": "integer"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"required": [
|
||||||
|
"address",
|
||||||
|
"hostname",
|
||||||
|
"port"
|
||||||
|
],
|
||||||
|
"type": "object",
|
||||||
|
"additionalProperties": false
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"required": [
|
||||||
|
"spec"
|
||||||
|
],
|
||||||
|
"title": "GarageNode",
|
||||||
|
"type": "object"
|
||||||
|
}
|
||||||
@@ -0,0 +1,438 @@
|
|||||||
|
{
|
||||||
|
"description": "GitRepository is the Schema for the gitrepositories API.",
|
||||||
|
"properties": {
|
||||||
|
"apiVersion": {
|
||||||
|
"description": "APIVersion defines the versioned schema of this representation of an object.\nServers should convert recognized schemas to the latest internal value, and\nmay reject unrecognized values.\nMore info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources",
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"kind": {
|
||||||
|
"description": "Kind is a string value representing the REST resource this object represents.\nServers may infer this from the endpoint the client submits requests to.\nCannot be updated.\nIn CamelCase.\nMore info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds",
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"metadata": {
|
||||||
|
"type": "object"
|
||||||
|
},
|
||||||
|
"spec": {
|
||||||
|
"description": "GitRepositorySpec specifies the required configuration to produce an\nArtifact for a Git repository.",
|
||||||
|
"properties": {
|
||||||
|
"ignore": {
|
||||||
|
"description": "Ignore overrides the set of excluded patterns in the .sourceignore format\n(which is the same as .gitignore). If not provided, a default will be used,\nconsult the documentation for your version to find out what those are.",
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"include": {
|
||||||
|
"description": "Include specifies a list of GitRepository resources which Artifacts\nshould be included in the Artifact produced for this GitRepository.",
|
||||||
|
"items": {
|
||||||
|
"description": "GitRepositoryInclude specifies a local reference to a GitRepository which\nArtifact (sub-)contents must be included, and where they should be placed.",
|
||||||
|
"properties": {
|
||||||
|
"fromPath": {
|
||||||
|
"description": "FromPath specifies the path to copy contents from, defaults to the root\nof the Artifact.",
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"repository": {
|
||||||
|
"description": "GitRepositoryRef specifies the GitRepository which Artifact contents\nmust be included.",
|
||||||
|
"properties": {
|
||||||
|
"name": {
|
||||||
|
"description": "Name of the referent.",
|
||||||
|
"type": "string"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"required": [
|
||||||
|
"name"
|
||||||
|
],
|
||||||
|
"type": "object",
|
||||||
|
"additionalProperties": false
|
||||||
|
},
|
||||||
|
"toPath": {
|
||||||
|
"description": "ToPath specifies the path to copy contents to, defaults to the name of\nthe GitRepositoryRef.",
|
||||||
|
"type": "string"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"required": [
|
||||||
|
"repository"
|
||||||
|
],
|
||||||
|
"type": "object",
|
||||||
|
"additionalProperties": false
|
||||||
|
},
|
||||||
|
"type": "array"
|
||||||
|
},
|
||||||
|
"interval": {
|
||||||
|
"description": "Interval at which the GitRepository URL is checked for updates.\nThis interval is approximate and may be subject to jitter to ensure\nefficient use of resources.",
|
||||||
|
"pattern": "^([0-9]+(\\.[0-9]+)?(ms|s|m|h))+$",
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"provider": {
|
||||||
|
"description": "Provider used for authentication, can be 'azure', 'github', 'generic'.\nWhen not specified, defaults to 'generic'.",
|
||||||
|
"enum": [
|
||||||
|
"generic",
|
||||||
|
"azure",
|
||||||
|
"github"
|
||||||
|
],
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"proxySecretRef": {
|
||||||
|
"description": "ProxySecretRef specifies the Secret containing the proxy configuration\nto use while communicating with the Git server.",
|
||||||
|
"properties": {
|
||||||
|
"name": {
|
||||||
|
"description": "Name of the referent.",
|
||||||
|
"type": "string"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"required": [
|
||||||
|
"name"
|
||||||
|
],
|
||||||
|
"type": "object",
|
||||||
|
"additionalProperties": false
|
||||||
|
},
|
||||||
|
"recurseSubmodules": {
|
||||||
|
"description": "RecurseSubmodules enables the initialization of all submodules within\nthe GitRepository as cloned from the URL, using their default settings.",
|
||||||
|
"type": "boolean"
|
||||||
|
},
|
||||||
|
"ref": {
|
||||||
|
"description": "Reference specifies the Git reference to resolve and monitor for\nchanges, defaults to the 'master' branch.",
|
||||||
|
"properties": {
|
||||||
|
"branch": {
|
||||||
|
"description": "Branch to check out, defaults to 'master' if no other field is defined.",
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"commit": {
|
||||||
|
"description": "Commit SHA to check out, takes precedence over all reference fields.\n\nThis can be combined with Branch to shallow clone the branch, in which\nthe commit is expected to exist.",
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"name": {
|
||||||
|
"description": "Name of the reference to check out; takes precedence over Branch, Tag and SemVer.\n\nIt must be a valid Git reference: https://git-scm.com/docs/git-check-ref-format#_description\nExamples: \"refs/heads/main\", \"refs/tags/v0.1.0\", \"refs/pull/420/head\", \"refs/merge-requests/1/head\"",
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"semver": {
|
||||||
|
"description": "SemVer tag expression to check out, takes precedence over Tag.",
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"tag": {
|
||||||
|
"description": "Tag to check out, takes precedence over Branch.",
|
||||||
|
"type": "string"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"type": "object",
|
||||||
|
"additionalProperties": false
|
||||||
|
},
|
||||||
|
"secretRef": {
|
||||||
|
"description": "SecretRef specifies the Secret containing authentication credentials for\nthe GitRepository.\nFor HTTPS repositories the Secret must contain 'username' and 'password'\nfields for basic auth or 'bearerToken' field for token auth.\nFor SSH repositories the Secret must contain 'identity'\nand 'known_hosts' fields.",
|
||||||
|
"properties": {
|
||||||
|
"name": {
|
||||||
|
"description": "Name of the referent.",
|
||||||
|
"type": "string"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"required": [
|
||||||
|
"name"
|
||||||
|
],
|
||||||
|
"type": "object",
|
||||||
|
"additionalProperties": false
|
||||||
|
},
|
||||||
|
"serviceAccountName": {
|
||||||
|
"description": "ServiceAccountName is the name of the Kubernetes ServiceAccount used to\nauthenticate to the GitRepository. This field is only supported for 'azure' provider.",
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"sparseCheckout": {
|
||||||
|
"description": "SparseCheckout specifies a list of directories to checkout when cloning\nthe repository. If specified, only these directories are included in the\nArtifact produced for this GitRepository.",
|
||||||
|
"items": {
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"type": "array"
|
||||||
|
},
|
||||||
|
"suspend": {
|
||||||
|
"description": "Suspend tells the controller to suspend the reconciliation of this\nGitRepository.",
|
||||||
|
"type": "boolean"
|
||||||
|
},
|
||||||
|
"timeout": {
|
||||||
|
"default": "60s",
|
||||||
|
"description": "Timeout for Git operations like cloning, defaults to 60s.",
|
||||||
|
"pattern": "^([0-9]+(\\.[0-9]+)?(ms|s|m))+$",
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"url": {
|
||||||
|
"description": "URL specifies the Git repository URL, it can be an HTTP/S or SSH address.",
|
||||||
|
"pattern": "^(http|https|ssh)://.*$",
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"verify": {
|
||||||
|
"description": "Verification specifies the configuration to verify the Git commit\nsignature(s).",
|
||||||
|
"properties": {
|
||||||
|
"mode": {
|
||||||
|
"default": "HEAD",
|
||||||
|
"description": "Mode specifies which Git object(s) should be verified.\n\nThe variants \"head\" and \"HEAD\" both imply the same thing, i.e. verify\nthe commit that the HEAD of the Git repository points to. The variant\n\"head\" solely exists to ensure backwards compatibility.",
|
||||||
|
"enum": [
|
||||||
|
"head",
|
||||||
|
"HEAD",
|
||||||
|
"Tag",
|
||||||
|
"TagAndHEAD"
|
||||||
|
],
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"secretRef": {
|
||||||
|
"description": "SecretRef specifies the Secret containing the public keys of trusted Git\nauthors.",
|
||||||
|
"properties": {
|
||||||
|
"name": {
|
||||||
|
"description": "Name of the referent.",
|
||||||
|
"type": "string"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"required": [
|
||||||
|
"name"
|
||||||
|
],
|
||||||
|
"type": "object",
|
||||||
|
"additionalProperties": false
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"required": [
|
||||||
|
"secretRef"
|
||||||
|
],
|
||||||
|
"type": "object",
|
||||||
|
"additionalProperties": false
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"required": [
|
||||||
|
"interval",
|
||||||
|
"url"
|
||||||
|
],
|
||||||
|
"type": "object",
|
||||||
|
"x-kubernetes-validations": [
|
||||||
|
{
|
||||||
|
"message": "serviceAccountName can only be set when provider is 'azure'",
|
||||||
|
"rule": "!has(self.serviceAccountName) || (has(self.provider) && self.provider == 'azure')"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"additionalProperties": false
|
||||||
|
},
|
||||||
|
"status": {
|
||||||
|
"default": {
|
||||||
|
"observedGeneration": -1
|
||||||
|
},
|
||||||
|
"description": "GitRepositoryStatus records the observed state of a Git repository.",
|
||||||
|
"properties": {
|
||||||
|
"artifact": {
|
||||||
|
"description": "Artifact represents the last successful GitRepository reconciliation.",
|
||||||
|
"properties": {
|
||||||
|
"digest": {
|
||||||
|
"description": "Digest is the digest of the file in the form of '<algorithm>:<checksum>'.",
|
||||||
|
"pattern": "^[a-z0-9]+(?:[.+_-][a-z0-9]+)*:[a-zA-Z0-9=_-]+$",
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"lastUpdateTime": {
|
||||||
|
"description": "LastUpdateTime is the timestamp corresponding to the last update of the\nArtifact.",
|
||||||
|
"format": "date-time",
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"metadata": {
|
||||||
|
"additionalProperties": {
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"description": "Metadata holds upstream information such as OCI annotations.",
|
||||||
|
"type": "object"
|
||||||
|
},
|
||||||
|
"path": {
|
||||||
|
"description": "Path is the relative file path of the Artifact. It can be used to locate\nthe file in the root of the Artifact storage on the local file system of\nthe controller managing the Source.",
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"revision": {
|
||||||
|
"description": "Revision is a human-readable identifier traceable in the origin source\nsystem. It can be a Git commit SHA, Git tag, a Helm chart version, etc.",
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"size": {
|
||||||
|
"description": "Size is the number of bytes in the file.",
|
||||||
|
"format": "int64",
|
||||||
|
"type": "integer"
|
||||||
|
},
|
||||||
|
"url": {
|
||||||
|
"description": "URL is the HTTP address of the Artifact as exposed by the controller\nmanaging the Source. It can be used to retrieve the Artifact for\nconsumption, e.g. by another controller applying the Artifact contents.",
|
||||||
|
"type": "string"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"required": [
|
||||||
|
"digest",
|
||||||
|
"lastUpdateTime",
|
||||||
|
"path",
|
||||||
|
"revision",
|
||||||
|
"url"
|
||||||
|
],
|
||||||
|
"type": "object",
|
||||||
|
"additionalProperties": false
|
||||||
|
},
|
||||||
|
"conditions": {
|
||||||
|
"description": "Conditions holds the conditions for the GitRepository.",
|
||||||
|
"items": {
|
||||||
|
"description": "Condition contains details for one aspect of the current state of this API Resource.",
|
||||||
|
"properties": {
|
||||||
|
"lastTransitionTime": {
|
||||||
|
"description": "lastTransitionTime is the last time the condition transitioned from one status to another.\nThis should be when the underlying condition changed. If that is not known, then using the time when the API field changed is acceptable.",
|
||||||
|
"format": "date-time",
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"message": {
|
||||||
|
"description": "message is a human readable message indicating details about the transition.\nThis may be an empty string.",
|
||||||
|
"maxLength": 32768,
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"observedGeneration": {
|
||||||
|
"description": "observedGeneration represents the .metadata.generation that the condition was set based upon.\nFor instance, if .metadata.generation is currently 12, but the .status.conditions[x].observedGeneration is 9, the condition is out of date\nwith respect to the current state of the instance.",
|
||||||
|
"format": "int64",
|
||||||
|
"minimum": 0,
|
||||||
|
"type": "integer"
|
||||||
|
},
|
||||||
|
"reason": {
|
||||||
|
"description": "reason contains a programmatic identifier indicating the reason for the condition's last transition.\nProducers of specific condition types may define expected values and meanings for this field,\nand whether the values are considered a guaranteed API.\nThe value should be a CamelCase string.\nThis field may not be empty.",
|
||||||
|
"maxLength": 1024,
|
||||||
|
"minLength": 1,
|
||||||
|
"pattern": "^[A-Za-z]([A-Za-z0-9_,:]*[A-Za-z0-9_])?$",
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"status": {
|
||||||
|
"description": "status of the condition, one of True, False, Unknown.",
|
||||||
|
"enum": [
|
||||||
|
"True",
|
||||||
|
"False",
|
||||||
|
"Unknown"
|
||||||
|
],
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"type": {
|
||||||
|
"description": "type of condition in CamelCase or in foo.example.com/CamelCase.",
|
||||||
|
"maxLength": 316,
|
||||||
|
"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])$",
|
||||||
|
"type": "string"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"required": [
|
||||||
|
"lastTransitionTime",
|
||||||
|
"message",
|
||||||
|
"reason",
|
||||||
|
"status",
|
||||||
|
"type"
|
||||||
|
],
|
||||||
|
"type": "object",
|
||||||
|
"additionalProperties": false
|
||||||
|
},
|
||||||
|
"type": "array"
|
||||||
|
},
|
||||||
|
"includedArtifacts": {
|
||||||
|
"description": "IncludedArtifacts contains a list of the last successfully included\nArtifacts as instructed by GitRepositorySpec.Include.",
|
||||||
|
"items": {
|
||||||
|
"description": "Artifact represents the output of a Source reconciliation.",
|
||||||
|
"properties": {
|
||||||
|
"digest": {
|
||||||
|
"description": "Digest is the digest of the file in the form of '<algorithm>:<checksum>'.",
|
||||||
|
"pattern": "^[a-z0-9]+(?:[.+_-][a-z0-9]+)*:[a-zA-Z0-9=_-]+$",
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"lastUpdateTime": {
|
||||||
|
"description": "LastUpdateTime is the timestamp corresponding to the last update of the\nArtifact.",
|
||||||
|
"format": "date-time",
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"metadata": {
|
||||||
|
"additionalProperties": {
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"description": "Metadata holds upstream information such as OCI annotations.",
|
||||||
|
"type": "object"
|
||||||
|
},
|
||||||
|
"path": {
|
||||||
|
"description": "Path is the relative file path of the Artifact. It can be used to locate\nthe file in the root of the Artifact storage on the local file system of\nthe controller managing the Source.",
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"revision": {
|
||||||
|
"description": "Revision is a human-readable identifier traceable in the origin source\nsystem. It can be a Git commit SHA, Git tag, a Helm chart version, etc.",
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"size": {
|
||||||
|
"description": "Size is the number of bytes in the file.",
|
||||||
|
"format": "int64",
|
||||||
|
"type": "integer"
|
||||||
|
},
|
||||||
|
"url": {
|
||||||
|
"description": "URL is the HTTP address of the Artifact as exposed by the controller\nmanaging the Source. It can be used to retrieve the Artifact for\nconsumption, e.g. by another controller applying the Artifact contents.",
|
||||||
|
"type": "string"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"required": [
|
||||||
|
"digest",
|
||||||
|
"lastUpdateTime",
|
||||||
|
"path",
|
||||||
|
"revision",
|
||||||
|
"url"
|
||||||
|
],
|
||||||
|
"type": "object",
|
||||||
|
"additionalProperties": false
|
||||||
|
},
|
||||||
|
"type": "array"
|
||||||
|
},
|
||||||
|
"lastHandledReconcileAt": {
|
||||||
|
"description": "LastHandledReconcileAt holds the value of the most recent\nreconcile request value, so a change of the annotation value\ncan be detected.",
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"observedGeneration": {
|
||||||
|
"description": "ObservedGeneration is the last observed generation of the GitRepository\nobject.",
|
||||||
|
"format": "int64",
|
||||||
|
"type": "integer"
|
||||||
|
},
|
||||||
|
"observedIgnore": {
|
||||||
|
"description": "ObservedIgnore is the observed exclusion patterns used for constructing\nthe source artifact.",
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"observedInclude": {
|
||||||
|
"description": "ObservedInclude is the observed list of GitRepository resources used to\nproduce the current Artifact.",
|
||||||
|
"items": {
|
||||||
|
"description": "GitRepositoryInclude specifies a local reference to a GitRepository which\nArtifact (sub-)contents must be included, and where they should be placed.",
|
||||||
|
"properties": {
|
||||||
|
"fromPath": {
|
||||||
|
"description": "FromPath specifies the path to copy contents from, defaults to the root\nof the Artifact.",
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"repository": {
|
||||||
|
"description": "GitRepositoryRef specifies the GitRepository which Artifact contents\nmust be included.",
|
||||||
|
"properties": {
|
||||||
|
"name": {
|
||||||
|
"description": "Name of the referent.",
|
||||||
|
"type": "string"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"required": [
|
||||||
|
"name"
|
||||||
|
],
|
||||||
|
"type": "object",
|
||||||
|
"additionalProperties": false
|
||||||
|
},
|
||||||
|
"toPath": {
|
||||||
|
"description": "ToPath specifies the path to copy contents to, defaults to the name of\nthe GitRepositoryRef.",
|
||||||
|
"type": "string"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"required": [
|
||||||
|
"repository"
|
||||||
|
],
|
||||||
|
"type": "object",
|
||||||
|
"additionalProperties": false
|
||||||
|
},
|
||||||
|
"type": "array"
|
||||||
|
},
|
||||||
|
"observedRecurseSubmodules": {
|
||||||
|
"description": "ObservedRecurseSubmodules is the observed resource submodules\nconfiguration used to produce the current Artifact.",
|
||||||
|
"type": "boolean"
|
||||||
|
},
|
||||||
|
"observedSparseCheckout": {
|
||||||
|
"description": "ObservedSparseCheckout is the observed list of directories used to\nproduce the current Artifact.",
|
||||||
|
"items": {
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"type": "array"
|
||||||
|
},
|
||||||
|
"sourceVerificationMode": {
|
||||||
|
"description": "SourceVerificationMode is the last used verification mode indicating\nwhich Git object(s) have been verified.",
|
||||||
|
"type": "string"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"type": "object",
|
||||||
|
"additionalProperties": false
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"type": "object"
|
||||||
|
}
|
||||||
@@ -0,0 +1,299 @@
|
|||||||
|
{
|
||||||
|
"description": "HelmChart is the Schema for the helmcharts API.",
|
||||||
|
"properties": {
|
||||||
|
"apiVersion": {
|
||||||
|
"description": "APIVersion defines the versioned schema of this representation of an object.\nServers should convert recognized schemas to the latest internal value, and\nmay reject unrecognized values.\nMore info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources",
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"kind": {
|
||||||
|
"description": "Kind is a string value representing the REST resource this object represents.\nServers may infer this from the endpoint the client submits requests to.\nCannot be updated.\nIn CamelCase.\nMore info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds",
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"metadata": {
|
||||||
|
"type": "object"
|
||||||
|
},
|
||||||
|
"spec": {
|
||||||
|
"description": "HelmChartSpec specifies the desired state of a Helm chart.",
|
||||||
|
"properties": {
|
||||||
|
"chart": {
|
||||||
|
"description": "Chart is the name or path the Helm chart is available at in the\nSourceRef.",
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"ignoreMissingValuesFiles": {
|
||||||
|
"description": "IgnoreMissingValuesFiles controls whether to silently ignore missing values\nfiles rather than failing.",
|
||||||
|
"type": "boolean"
|
||||||
|
},
|
||||||
|
"interval": {
|
||||||
|
"description": "Interval at which the HelmChart SourceRef is checked for updates.\nThis interval is approximate and may be subject to jitter to ensure\nefficient use of resources.",
|
||||||
|
"pattern": "^([0-9]+(\\.[0-9]+)?(ms|s|m|h))+$",
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"reconcileStrategy": {
|
||||||
|
"default": "ChartVersion",
|
||||||
|
"description": "ReconcileStrategy determines what enables the creation of a new artifact.\nValid values are ('ChartVersion', 'Revision').\nSee the documentation of the values for an explanation on their behavior.\nDefaults to ChartVersion when omitted.",
|
||||||
|
"enum": [
|
||||||
|
"ChartVersion",
|
||||||
|
"Revision"
|
||||||
|
],
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"sourceRef": {
|
||||||
|
"description": "SourceRef is the reference to the Source the chart is available at.",
|
||||||
|
"properties": {
|
||||||
|
"apiVersion": {
|
||||||
|
"description": "APIVersion of the referent.",
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"kind": {
|
||||||
|
"description": "Kind of the referent, valid values are ('HelmRepository', 'GitRepository',\n'Bucket').",
|
||||||
|
"enum": [
|
||||||
|
"HelmRepository",
|
||||||
|
"GitRepository",
|
||||||
|
"Bucket"
|
||||||
|
],
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"name": {
|
||||||
|
"description": "Name of the referent.",
|
||||||
|
"type": "string"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"required": [
|
||||||
|
"kind",
|
||||||
|
"name"
|
||||||
|
],
|
||||||
|
"type": "object",
|
||||||
|
"additionalProperties": false
|
||||||
|
},
|
||||||
|
"suspend": {
|
||||||
|
"description": "Suspend tells the controller to suspend the reconciliation of this\nsource.",
|
||||||
|
"type": "boolean"
|
||||||
|
},
|
||||||
|
"valuesFiles": {
|
||||||
|
"description": "ValuesFiles is an alternative list of values files to use as the chart\nvalues (values.yaml is not included by default), expected to be a\nrelative path in the SourceRef.\nValues files are merged in the order of this list with the last file\noverriding the first. Ignored when omitted.",
|
||||||
|
"items": {
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"type": "array"
|
||||||
|
},
|
||||||
|
"verify": {
|
||||||
|
"description": "Verify contains the secret name containing the trusted public keys\nused to verify the signature and specifies which provider to use to check\nwhether OCI image is authentic.\nThis field is only supported when using HelmRepository source with spec.type 'oci'.\nChart dependencies, which are not bundled in the umbrella chart artifact, are not verified.",
|
||||||
|
"properties": {
|
||||||
|
"matchOIDCIdentity": {
|
||||||
|
"description": "MatchOIDCIdentity specifies the identity matching criteria to use\nwhile verifying an OCI artifact which was signed using Cosign keyless\nsigning. The artifact's identity is deemed to be verified if any of the\nspecified matchers match against the identity.",
|
||||||
|
"items": {
|
||||||
|
"description": "OIDCIdentityMatch specifies options for verifying the certificate identity,\ni.e. the issuer and the subject of the certificate.",
|
||||||
|
"properties": {
|
||||||
|
"issuer": {
|
||||||
|
"description": "Issuer specifies the regex pattern to match against to verify\nthe OIDC issuer in the Fulcio certificate. The pattern must be a\nvalid Go regular expression.",
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"subject": {
|
||||||
|
"description": "Subject specifies the regex pattern to match against to verify\nthe identity subject in the Fulcio certificate. The pattern must\nbe a valid Go regular expression.",
|
||||||
|
"type": "string"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"required": [
|
||||||
|
"issuer",
|
||||||
|
"subject"
|
||||||
|
],
|
||||||
|
"type": "object",
|
||||||
|
"additionalProperties": false
|
||||||
|
},
|
||||||
|
"type": "array"
|
||||||
|
},
|
||||||
|
"provider": {
|
||||||
|
"default": "cosign",
|
||||||
|
"description": "Provider specifies the technology used to sign the OCI Artifact.",
|
||||||
|
"enum": [
|
||||||
|
"cosign",
|
||||||
|
"notation"
|
||||||
|
],
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"secretRef": {
|
||||||
|
"description": "SecretRef specifies the Kubernetes Secret containing the\ntrusted public keys.",
|
||||||
|
"properties": {
|
||||||
|
"name": {
|
||||||
|
"description": "Name of the referent.",
|
||||||
|
"type": "string"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"required": [
|
||||||
|
"name"
|
||||||
|
],
|
||||||
|
"type": "object",
|
||||||
|
"additionalProperties": false
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"required": [
|
||||||
|
"provider"
|
||||||
|
],
|
||||||
|
"type": "object",
|
||||||
|
"additionalProperties": false
|
||||||
|
},
|
||||||
|
"version": {
|
||||||
|
"default": "*",
|
||||||
|
"description": "Version is the chart version semver expression, ignored for charts from\nGitRepository and Bucket sources. Defaults to latest when omitted.",
|
||||||
|
"type": "string"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"required": [
|
||||||
|
"chart",
|
||||||
|
"interval",
|
||||||
|
"sourceRef"
|
||||||
|
],
|
||||||
|
"type": "object",
|
||||||
|
"x-kubernetes-validations": [
|
||||||
|
{
|
||||||
|
"message": "spec.verify is only supported when spec.sourceRef.kind is 'HelmRepository'",
|
||||||
|
"rule": "!has(self.verify) || self.sourceRef.kind == 'HelmRepository'"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"additionalProperties": false
|
||||||
|
},
|
||||||
|
"status": {
|
||||||
|
"default": {
|
||||||
|
"observedGeneration": -1
|
||||||
|
},
|
||||||
|
"description": "HelmChartStatus records the observed state of the HelmChart.",
|
||||||
|
"properties": {
|
||||||
|
"artifact": {
|
||||||
|
"description": "Artifact represents the output of the last successful reconciliation.",
|
||||||
|
"properties": {
|
||||||
|
"digest": {
|
||||||
|
"description": "Digest is the digest of the file in the form of '<algorithm>:<checksum>'.",
|
||||||
|
"pattern": "^[a-z0-9]+(?:[.+_-][a-z0-9]+)*:[a-zA-Z0-9=_-]+$",
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"lastUpdateTime": {
|
||||||
|
"description": "LastUpdateTime is the timestamp corresponding to the last update of the\nArtifact.",
|
||||||
|
"format": "date-time",
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"metadata": {
|
||||||
|
"additionalProperties": {
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"description": "Metadata holds upstream information such as OCI annotations.",
|
||||||
|
"type": "object"
|
||||||
|
},
|
||||||
|
"path": {
|
||||||
|
"description": "Path is the relative file path of the Artifact. It can be used to locate\nthe file in the root of the Artifact storage on the local file system of\nthe controller managing the Source.",
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"revision": {
|
||||||
|
"description": "Revision is a human-readable identifier traceable in the origin source\nsystem. It can be a Git commit SHA, Git tag, a Helm chart version, etc.",
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"size": {
|
||||||
|
"description": "Size is the number of bytes in the file.",
|
||||||
|
"format": "int64",
|
||||||
|
"type": "integer"
|
||||||
|
},
|
||||||
|
"url": {
|
||||||
|
"description": "URL is the HTTP address of the Artifact as exposed by the controller\nmanaging the Source. It can be used to retrieve the Artifact for\nconsumption, e.g. by another controller applying the Artifact contents.",
|
||||||
|
"type": "string"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"required": [
|
||||||
|
"digest",
|
||||||
|
"lastUpdateTime",
|
||||||
|
"path",
|
||||||
|
"revision",
|
||||||
|
"url"
|
||||||
|
],
|
||||||
|
"type": "object",
|
||||||
|
"additionalProperties": false
|
||||||
|
},
|
||||||
|
"conditions": {
|
||||||
|
"description": "Conditions holds the conditions for the HelmChart.",
|
||||||
|
"items": {
|
||||||
|
"description": "Condition contains details for one aspect of the current state of this API Resource.",
|
||||||
|
"properties": {
|
||||||
|
"lastTransitionTime": {
|
||||||
|
"description": "lastTransitionTime is the last time the condition transitioned from one status to another.\nThis should be when the underlying condition changed. If that is not known, then using the time when the API field changed is acceptable.",
|
||||||
|
"format": "date-time",
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"message": {
|
||||||
|
"description": "message is a human readable message indicating details about the transition.\nThis may be an empty string.",
|
||||||
|
"maxLength": 32768,
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"observedGeneration": {
|
||||||
|
"description": "observedGeneration represents the .metadata.generation that the condition was set based upon.\nFor instance, if .metadata.generation is currently 12, but the .status.conditions[x].observedGeneration is 9, the condition is out of date\nwith respect to the current state of the instance.",
|
||||||
|
"format": "int64",
|
||||||
|
"minimum": 0,
|
||||||
|
"type": "integer"
|
||||||
|
},
|
||||||
|
"reason": {
|
||||||
|
"description": "reason contains a programmatic identifier indicating the reason for the condition's last transition.\nProducers of specific condition types may define expected values and meanings for this field,\nand whether the values are considered a guaranteed API.\nThe value should be a CamelCase string.\nThis field may not be empty.",
|
||||||
|
"maxLength": 1024,
|
||||||
|
"minLength": 1,
|
||||||
|
"pattern": "^[A-Za-z]([A-Za-z0-9_,:]*[A-Za-z0-9_])?$",
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"status": {
|
||||||
|
"description": "status of the condition, one of True, False, Unknown.",
|
||||||
|
"enum": [
|
||||||
|
"True",
|
||||||
|
"False",
|
||||||
|
"Unknown"
|
||||||
|
],
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"type": {
|
||||||
|
"description": "type of condition in CamelCase or in foo.example.com/CamelCase.",
|
||||||
|
"maxLength": 316,
|
||||||
|
"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])$",
|
||||||
|
"type": "string"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"required": [
|
||||||
|
"lastTransitionTime",
|
||||||
|
"message",
|
||||||
|
"reason",
|
||||||
|
"status",
|
||||||
|
"type"
|
||||||
|
],
|
||||||
|
"type": "object",
|
||||||
|
"additionalProperties": false
|
||||||
|
},
|
||||||
|
"type": "array"
|
||||||
|
},
|
||||||
|
"lastHandledReconcileAt": {
|
||||||
|
"description": "LastHandledReconcileAt holds the value of the most recent\nreconcile request value, so a change of the annotation value\ncan be detected.",
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"observedChartName": {
|
||||||
|
"description": "ObservedChartName is the last observed chart name as specified by the\nresolved chart reference.",
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"observedGeneration": {
|
||||||
|
"description": "ObservedGeneration is the last observed generation of the HelmChart\nobject.",
|
||||||
|
"format": "int64",
|
||||||
|
"type": "integer"
|
||||||
|
},
|
||||||
|
"observedSourceArtifactRevision": {
|
||||||
|
"description": "ObservedSourceArtifactRevision is the last observed Artifact.Revision\nof the HelmChartSpec.SourceRef.",
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"observedValuesFiles": {
|
||||||
|
"description": "ObservedValuesFiles are the observed value files of the last successful\nreconciliation.\nIt matches the chart in the last successfully reconciled artifact.",
|
||||||
|
"items": {
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"type": "array"
|
||||||
|
},
|
||||||
|
"url": {
|
||||||
|
"description": "URL is the dynamic fetch link for the latest Artifact.\nIt is provided on a \"best effort\" basis, and using the precise\nBucketStatus.Artifact data is recommended.",
|
||||||
|
"type": "string"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"type": "object",
|
||||||
|
"additionalProperties": false
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"type": "object"
|
||||||
|
}
|
||||||
File diff suppressed because it is too large
Load Diff
@@ -0,0 +1,256 @@
|
|||||||
|
{
|
||||||
|
"description": "HelmRepository is the Schema for the helmrepositories API.",
|
||||||
|
"properties": {
|
||||||
|
"apiVersion": {
|
||||||
|
"description": "APIVersion defines the versioned schema of this representation of an object.\nServers should convert recognized schemas to the latest internal value, and\nmay reject unrecognized values.\nMore info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources",
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"kind": {
|
||||||
|
"description": "Kind is a string value representing the REST resource this object represents.\nServers may infer this from the endpoint the client submits requests to.\nCannot be updated.\nIn CamelCase.\nMore info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds",
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"metadata": {
|
||||||
|
"type": "object"
|
||||||
|
},
|
||||||
|
"spec": {
|
||||||
|
"description": "HelmRepositorySpec specifies the required configuration to produce an\nArtifact for a Helm repository index YAML.",
|
||||||
|
"properties": {
|
||||||
|
"accessFrom": {
|
||||||
|
"description": "AccessFrom specifies an Access Control List for allowing cross-namespace\nreferences to this object.\nNOTE: Not implemented, provisional as of https://github.com/fluxcd/flux2/pull/2092",
|
||||||
|
"properties": {
|
||||||
|
"namespaceSelectors": {
|
||||||
|
"description": "NamespaceSelectors is the list of namespace selectors to which this ACL applies.\nItems in this list are evaluated using a logical OR operation.",
|
||||||
|
"items": {
|
||||||
|
"description": "NamespaceSelector selects the namespaces to which this ACL applies.\nAn empty map of MatchLabels matches all namespaces in a cluster.",
|
||||||
|
"properties": {
|
||||||
|
"matchLabels": {
|
||||||
|
"additionalProperties": {
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"description": "MatchLabels is a map of {key,value} pairs. A single {key,value} in the matchLabels\nmap is equivalent to an element of matchExpressions, whose key field is \"key\", the\noperator is \"In\", and the values array contains only \"value\". The requirements are ANDed.",
|
||||||
|
"type": "object"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"type": "object",
|
||||||
|
"additionalProperties": false
|
||||||
|
},
|
||||||
|
"type": "array"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"required": [
|
||||||
|
"namespaceSelectors"
|
||||||
|
],
|
||||||
|
"type": "object",
|
||||||
|
"additionalProperties": false
|
||||||
|
},
|
||||||
|
"certSecretRef": {
|
||||||
|
"description": "CertSecretRef can be given the name of a Secret containing\neither or both of\n\n- a PEM-encoded client certificate (`tls.crt`) and private\nkey (`tls.key`);\n- a PEM-encoded CA certificate (`ca.crt`)\n\nand whichever are supplied, will be used for connecting to the\nregistry. The client cert and key are useful if you are\nauthenticating with a certificate; the CA cert is useful if\nyou are using a self-signed server certificate. The Secret must\nbe of type `Opaque` or `kubernetes.io/tls`.\n\nIt takes precedence over the values specified in the Secret referred\nto by `.spec.secretRef`.",
|
||||||
|
"properties": {
|
||||||
|
"name": {
|
||||||
|
"description": "Name of the referent.",
|
||||||
|
"type": "string"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"required": [
|
||||||
|
"name"
|
||||||
|
],
|
||||||
|
"type": "object",
|
||||||
|
"additionalProperties": false
|
||||||
|
},
|
||||||
|
"insecure": {
|
||||||
|
"description": "Insecure allows connecting to a non-TLS HTTP container registry.\nThis field is only taken into account if the .spec.type field is set to 'oci'.",
|
||||||
|
"type": "boolean"
|
||||||
|
},
|
||||||
|
"interval": {
|
||||||
|
"description": "Interval at which the HelmRepository URL is checked for updates.\nThis interval is approximate and may be subject to jitter to ensure\nefficient use of resources.",
|
||||||
|
"pattern": "^([0-9]+(\\.[0-9]+)?(ms|s|m|h))+$",
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"passCredentials": {
|
||||||
|
"description": "PassCredentials allows the credentials from the SecretRef to be passed\non to a host that does not match the host as defined in URL.\nThis may be required if the host of the advertised chart URLs in the\nindex differ from the defined URL.\nEnabling this should be done with caution, as it can potentially result\nin credentials getting stolen in a MITM-attack.",
|
||||||
|
"type": "boolean"
|
||||||
|
},
|
||||||
|
"provider": {
|
||||||
|
"default": "generic",
|
||||||
|
"description": "Provider used for authentication, can be 'aws', 'azure', 'gcp' or 'generic'.\nThis field is optional, and only taken into account if the .spec.type field is set to 'oci'.\nWhen not specified, defaults to 'generic'.",
|
||||||
|
"enum": [
|
||||||
|
"generic",
|
||||||
|
"aws",
|
||||||
|
"azure",
|
||||||
|
"gcp"
|
||||||
|
],
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"secretRef": {
|
||||||
|
"description": "SecretRef specifies the Secret containing authentication credentials\nfor the HelmRepository.\nFor HTTP/S basic auth the secret must contain 'username' and 'password'\nfields.\nSupport for TLS auth using the 'certFile' and 'keyFile', and/or 'caFile'\nkeys is deprecated. Please use `.spec.certSecretRef` instead.",
|
||||||
|
"properties": {
|
||||||
|
"name": {
|
||||||
|
"description": "Name of the referent.",
|
||||||
|
"type": "string"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"required": [
|
||||||
|
"name"
|
||||||
|
],
|
||||||
|
"type": "object",
|
||||||
|
"additionalProperties": false
|
||||||
|
},
|
||||||
|
"suspend": {
|
||||||
|
"description": "Suspend tells the controller to suspend the reconciliation of this\nHelmRepository.",
|
||||||
|
"type": "boolean"
|
||||||
|
},
|
||||||
|
"timeout": {
|
||||||
|
"description": "Timeout is used for the index fetch operation for an HTTPS helm repository,\nand for remote OCI Repository operations like pulling for an OCI helm\nchart by the associated HelmChart.\nIts default value is 60s.",
|
||||||
|
"pattern": "^([0-9]+(\\.[0-9]+)?(ms|s|m))+$",
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"type": {
|
||||||
|
"description": "Type of the HelmRepository.\nWhen this field is set to \"oci\", the URL field value must be prefixed with \"oci://\".",
|
||||||
|
"enum": [
|
||||||
|
"default",
|
||||||
|
"oci"
|
||||||
|
],
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"url": {
|
||||||
|
"description": "URL of the Helm repository, a valid URL contains at least a protocol and\nhost.",
|
||||||
|
"pattern": "^(http|https|oci)://.*$",
|
||||||
|
"type": "string"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"required": [
|
||||||
|
"url"
|
||||||
|
],
|
||||||
|
"type": "object",
|
||||||
|
"additionalProperties": false
|
||||||
|
},
|
||||||
|
"status": {
|
||||||
|
"default": {
|
||||||
|
"observedGeneration": -1
|
||||||
|
},
|
||||||
|
"description": "HelmRepositoryStatus records the observed state of the HelmRepository.",
|
||||||
|
"properties": {
|
||||||
|
"artifact": {
|
||||||
|
"description": "Artifact represents the last successful HelmRepository reconciliation.",
|
||||||
|
"properties": {
|
||||||
|
"digest": {
|
||||||
|
"description": "Digest is the digest of the file in the form of '<algorithm>:<checksum>'.",
|
||||||
|
"pattern": "^[a-z0-9]+(?:[.+_-][a-z0-9]+)*:[a-zA-Z0-9=_-]+$",
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"lastUpdateTime": {
|
||||||
|
"description": "LastUpdateTime is the timestamp corresponding to the last update of the\nArtifact.",
|
||||||
|
"format": "date-time",
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"metadata": {
|
||||||
|
"additionalProperties": {
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"description": "Metadata holds upstream information such as OCI annotations.",
|
||||||
|
"type": "object"
|
||||||
|
},
|
||||||
|
"path": {
|
||||||
|
"description": "Path is the relative file path of the Artifact. It can be used to locate\nthe file in the root of the Artifact storage on the local file system of\nthe controller managing the Source.",
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"revision": {
|
||||||
|
"description": "Revision is a human-readable identifier traceable in the origin source\nsystem. It can be a Git commit SHA, Git tag, a Helm chart version, etc.",
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"size": {
|
||||||
|
"description": "Size is the number of bytes in the file.",
|
||||||
|
"format": "int64",
|
||||||
|
"type": "integer"
|
||||||
|
},
|
||||||
|
"url": {
|
||||||
|
"description": "URL is the HTTP address of the Artifact as exposed by the controller\nmanaging the Source. It can be used to retrieve the Artifact for\nconsumption, e.g. by another controller applying the Artifact contents.",
|
||||||
|
"type": "string"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"required": [
|
||||||
|
"digest",
|
||||||
|
"lastUpdateTime",
|
||||||
|
"path",
|
||||||
|
"revision",
|
||||||
|
"url"
|
||||||
|
],
|
||||||
|
"type": "object",
|
||||||
|
"additionalProperties": false
|
||||||
|
},
|
||||||
|
"conditions": {
|
||||||
|
"description": "Conditions holds the conditions for the HelmRepository.",
|
||||||
|
"items": {
|
||||||
|
"description": "Condition contains details for one aspect of the current state of this API Resource.",
|
||||||
|
"properties": {
|
||||||
|
"lastTransitionTime": {
|
||||||
|
"description": "lastTransitionTime is the last time the condition transitioned from one status to another.\nThis should be when the underlying condition changed. If that is not known, then using the time when the API field changed is acceptable.",
|
||||||
|
"format": "date-time",
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"message": {
|
||||||
|
"description": "message is a human readable message indicating details about the transition.\nThis may be an empty string.",
|
||||||
|
"maxLength": 32768,
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"observedGeneration": {
|
||||||
|
"description": "observedGeneration represents the .metadata.generation that the condition was set based upon.\nFor instance, if .metadata.generation is currently 12, but the .status.conditions[x].observedGeneration is 9, the condition is out of date\nwith respect to the current state of the instance.",
|
||||||
|
"format": "int64",
|
||||||
|
"minimum": 0,
|
||||||
|
"type": "integer"
|
||||||
|
},
|
||||||
|
"reason": {
|
||||||
|
"description": "reason contains a programmatic identifier indicating the reason for the condition's last transition.\nProducers of specific condition types may define expected values and meanings for this field,\nand whether the values are considered a guaranteed API.\nThe value should be a CamelCase string.\nThis field may not be empty.",
|
||||||
|
"maxLength": 1024,
|
||||||
|
"minLength": 1,
|
||||||
|
"pattern": "^[A-Za-z]([A-Za-z0-9_,:]*[A-Za-z0-9_])?$",
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"status": {
|
||||||
|
"description": "status of the condition, one of True, False, Unknown.",
|
||||||
|
"enum": [
|
||||||
|
"True",
|
||||||
|
"False",
|
||||||
|
"Unknown"
|
||||||
|
],
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"type": {
|
||||||
|
"description": "type of condition in CamelCase or in foo.example.com/CamelCase.",
|
||||||
|
"maxLength": 316,
|
||||||
|
"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])$",
|
||||||
|
"type": "string"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"required": [
|
||||||
|
"lastTransitionTime",
|
||||||
|
"message",
|
||||||
|
"reason",
|
||||||
|
"status",
|
||||||
|
"type"
|
||||||
|
],
|
||||||
|
"type": "object",
|
||||||
|
"additionalProperties": false
|
||||||
|
},
|
||||||
|
"type": "array"
|
||||||
|
},
|
||||||
|
"lastHandledReconcileAt": {
|
||||||
|
"description": "LastHandledReconcileAt holds the value of the most recent\nreconcile request value, so a change of the annotation value\ncan be detected.",
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"observedGeneration": {
|
||||||
|
"description": "ObservedGeneration is the last observed generation of the HelmRepository\nobject.",
|
||||||
|
"format": "int64",
|
||||||
|
"type": "integer"
|
||||||
|
},
|
||||||
|
"url": {
|
||||||
|
"description": "URL is the dynamic fetch link for the latest Artifact.\nIt is provided on a \"best effort\" basis, and using the precise\nHelmRepositoryStatus.Artifact data is recommended.",
|
||||||
|
"type": "string"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"type": "object",
|
||||||
|
"additionalProperties": false
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"type": "object"
|
||||||
|
}
|
||||||
@@ -0,0 +1,262 @@
|
|||||||
|
{
|
||||||
|
"description": "ImagePolicy is the Schema for the imagepolicies API",
|
||||||
|
"properties": {
|
||||||
|
"apiVersion": {
|
||||||
|
"description": "APIVersion defines the versioned schema of this representation of an object.\nServers should convert recognized schemas to the latest internal value, and\nmay reject unrecognized values.\nMore info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources",
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"kind": {
|
||||||
|
"description": "Kind is a string value representing the REST resource this object represents.\nServers may infer this from the endpoint the client submits requests to.\nCannot be updated.\nIn CamelCase.\nMore info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds",
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"metadata": {
|
||||||
|
"type": "object"
|
||||||
|
},
|
||||||
|
"spec": {
|
||||||
|
"description": "ImagePolicySpec defines the parameters for calculating the\nImagePolicy.",
|
||||||
|
"properties": {
|
||||||
|
"digestReflectionPolicy": {
|
||||||
|
"default": "Never",
|
||||||
|
"description": "DigestReflectionPolicy governs the setting of the `.status.latestRef.digest` field.\n\nNever: The digest field will always be set to the empty string.\n\nIfNotPresent: The digest field will be set to the digest of the elected\nlatest image if the field is empty and the image did not change.\n\nAlways: The digest field will always be set to the digest of the elected\nlatest image.\n\nDefault: Never.",
|
||||||
|
"enum": [
|
||||||
|
"Always",
|
||||||
|
"IfNotPresent",
|
||||||
|
"Never"
|
||||||
|
],
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"filterTags": {
|
||||||
|
"description": "FilterTags enables filtering for only a subset of tags based on a set of\nrules. If no rules are provided, all the tags from the repository will be\nordered and compared.",
|
||||||
|
"properties": {
|
||||||
|
"extract": {
|
||||||
|
"description": "Extract allows a capture group to be extracted from the specified regular\nexpression pattern, useful before tag evaluation.",
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"pattern": {
|
||||||
|
"description": "Pattern specifies a regular expression pattern used to filter for image\ntags.",
|
||||||
|
"type": "string"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"type": "object",
|
||||||
|
"additionalProperties": false
|
||||||
|
},
|
||||||
|
"imageRepositoryRef": {
|
||||||
|
"description": "ImageRepositoryRef points at the object specifying the image\nbeing scanned",
|
||||||
|
"properties": {
|
||||||
|
"name": {
|
||||||
|
"description": "Name of the referent.",
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"namespace": {
|
||||||
|
"description": "Namespace of the referent, when not specified it acts as LocalObjectReference.",
|
||||||
|
"type": "string"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"required": [
|
||||||
|
"name"
|
||||||
|
],
|
||||||
|
"type": "object",
|
||||||
|
"additionalProperties": false
|
||||||
|
},
|
||||||
|
"interval": {
|
||||||
|
"description": "Interval is the length of time to wait between\nrefreshing the digest of the latest tag when the\nreflection policy is set to \"Always\".\n\nDefaults to 10m.",
|
||||||
|
"pattern": "^([0-9]+(\\.[0-9]+)?(ms|s|m|h))+$",
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"policy": {
|
||||||
|
"description": "Policy gives the particulars of the policy to be followed in\nselecting the most recent image",
|
||||||
|
"properties": {
|
||||||
|
"alphabetical": {
|
||||||
|
"description": "Alphabetical set of rules to use for alphabetical ordering of the tags.",
|
||||||
|
"properties": {
|
||||||
|
"order": {
|
||||||
|
"default": "asc",
|
||||||
|
"description": "Order specifies the sorting order of the tags. Given the letters of the\nalphabet as tags, ascending order would select Z, and descending order\nwould select A.",
|
||||||
|
"enum": [
|
||||||
|
"asc",
|
||||||
|
"desc"
|
||||||
|
],
|
||||||
|
"type": "string"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"type": "object",
|
||||||
|
"additionalProperties": false
|
||||||
|
},
|
||||||
|
"numerical": {
|
||||||
|
"description": "Numerical set of rules to use for numerical ordering of the tags.",
|
||||||
|
"properties": {
|
||||||
|
"order": {
|
||||||
|
"default": "asc",
|
||||||
|
"description": "Order specifies the sorting order of the tags. Given the integer values\nfrom 0 to 9 as tags, ascending order would select 9, and descending order\nwould select 0.",
|
||||||
|
"enum": [
|
||||||
|
"asc",
|
||||||
|
"desc"
|
||||||
|
],
|
||||||
|
"type": "string"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"type": "object",
|
||||||
|
"additionalProperties": false
|
||||||
|
},
|
||||||
|
"semver": {
|
||||||
|
"description": "SemVer gives a semantic version range to check against the tags\navailable.",
|
||||||
|
"properties": {
|
||||||
|
"range": {
|
||||||
|
"description": "Range gives a semver range for the image tag; the highest\nversion within the range that's a tag yields the latest image.",
|
||||||
|
"type": "string"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"required": [
|
||||||
|
"range"
|
||||||
|
],
|
||||||
|
"type": "object",
|
||||||
|
"additionalProperties": false
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"type": "object",
|
||||||
|
"additionalProperties": false
|
||||||
|
},
|
||||||
|
"suspend": {
|
||||||
|
"description": "This flag tells the controller to suspend subsequent policy reconciliations.\nIt does not apply to already started reconciliations. Defaults to false.",
|
||||||
|
"type": "boolean"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"required": [
|
||||||
|
"imageRepositoryRef",
|
||||||
|
"policy"
|
||||||
|
],
|
||||||
|
"type": "object",
|
||||||
|
"x-kubernetes-validations": [
|
||||||
|
{
|
||||||
|
"message": "spec.interval is only accepted when spec.digestReflectionPolicy is set to 'Always'",
|
||||||
|
"rule": "!has(self.interval) || (has(self.digestReflectionPolicy) && self.digestReflectionPolicy == 'Always')"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"message": "spec.interval must be set when spec.digestReflectionPolicy is set to 'Always'",
|
||||||
|
"rule": "has(self.interval) || !has(self.digestReflectionPolicy) || self.digestReflectionPolicy != 'Always'"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"additionalProperties": false
|
||||||
|
},
|
||||||
|
"status": {
|
||||||
|
"default": {
|
||||||
|
"observedGeneration": -1
|
||||||
|
},
|
||||||
|
"description": "ImagePolicyStatus defines the observed state of ImagePolicy",
|
||||||
|
"properties": {
|
||||||
|
"conditions": {
|
||||||
|
"items": {
|
||||||
|
"description": "Condition contains details for one aspect of the current state of this API Resource.",
|
||||||
|
"properties": {
|
||||||
|
"lastTransitionTime": {
|
||||||
|
"description": "lastTransitionTime is the last time the condition transitioned from one status to another.\nThis should be when the underlying condition changed. If that is not known, then using the time when the API field changed is acceptable.",
|
||||||
|
"format": "date-time",
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"message": {
|
||||||
|
"description": "message is a human readable message indicating details about the transition.\nThis may be an empty string.",
|
||||||
|
"maxLength": 32768,
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"observedGeneration": {
|
||||||
|
"description": "observedGeneration represents the .metadata.generation that the condition was set based upon.\nFor instance, if .metadata.generation is currently 12, but the .status.conditions[x].observedGeneration is 9, the condition is out of date\nwith respect to the current state of the instance.",
|
||||||
|
"format": "int64",
|
||||||
|
"minimum": 0,
|
||||||
|
"type": "integer"
|
||||||
|
},
|
||||||
|
"reason": {
|
||||||
|
"description": "reason contains a programmatic identifier indicating the reason for the condition's last transition.\nProducers of specific condition types may define expected values and meanings for this field,\nand whether the values are considered a guaranteed API.\nThe value should be a CamelCase string.\nThis field may not be empty.",
|
||||||
|
"maxLength": 1024,
|
||||||
|
"minLength": 1,
|
||||||
|
"pattern": "^[A-Za-z]([A-Za-z0-9_,:]*[A-Za-z0-9_])?$",
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"status": {
|
||||||
|
"description": "status of the condition, one of True, False, Unknown.",
|
||||||
|
"enum": [
|
||||||
|
"True",
|
||||||
|
"False",
|
||||||
|
"Unknown"
|
||||||
|
],
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"type": {
|
||||||
|
"description": "type of condition in CamelCase or in foo.example.com/CamelCase.",
|
||||||
|
"maxLength": 316,
|
||||||
|
"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])$",
|
||||||
|
"type": "string"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"required": [
|
||||||
|
"lastTransitionTime",
|
||||||
|
"message",
|
||||||
|
"reason",
|
||||||
|
"status",
|
||||||
|
"type"
|
||||||
|
],
|
||||||
|
"type": "object",
|
||||||
|
"additionalProperties": false
|
||||||
|
},
|
||||||
|
"type": "array"
|
||||||
|
},
|
||||||
|
"lastHandledReconcileAt": {
|
||||||
|
"description": "LastHandledReconcileAt holds the value of the most recent\nreconcile request value, so a change of the annotation value\ncan be detected.",
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"latestRef": {
|
||||||
|
"description": "LatestRef gives the first in the list of images scanned by\nthe image repository, when filtered and ordered according\nto the policy.",
|
||||||
|
"properties": {
|
||||||
|
"digest": {
|
||||||
|
"description": "Digest is the image's digest.",
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"name": {
|
||||||
|
"description": "Name is the bare image's name.",
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"tag": {
|
||||||
|
"description": "Tag is the image's tag.",
|
||||||
|
"type": "string"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"required": [
|
||||||
|
"name",
|
||||||
|
"tag"
|
||||||
|
],
|
||||||
|
"type": "object",
|
||||||
|
"additionalProperties": false
|
||||||
|
},
|
||||||
|
"observedGeneration": {
|
||||||
|
"format": "int64",
|
||||||
|
"type": "integer"
|
||||||
|
},
|
||||||
|
"observedPreviousRef": {
|
||||||
|
"description": "ObservedPreviousRef is the observed previous LatestRef. It is used\nto keep track of the previous and current images.",
|
||||||
|
"properties": {
|
||||||
|
"digest": {
|
||||||
|
"description": "Digest is the image's digest.",
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"name": {
|
||||||
|
"description": "Name is the bare image's name.",
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"tag": {
|
||||||
|
"description": "Tag is the image's tag.",
|
||||||
|
"type": "string"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"required": [
|
||||||
|
"name",
|
||||||
|
"tag"
|
||||||
|
],
|
||||||
|
"type": "object",
|
||||||
|
"additionalProperties": false
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"type": "object",
|
||||||
|
"additionalProperties": false
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"type": "object"
|
||||||
|
}
|
||||||
@@ -0,0 +1,262 @@
|
|||||||
|
{
|
||||||
|
"description": "ImagePolicy is the Schema for the imagepolicies API",
|
||||||
|
"properties": {
|
||||||
|
"apiVersion": {
|
||||||
|
"description": "APIVersion defines the versioned schema of this representation of an object.\nServers should convert recognized schemas to the latest internal value, and\nmay reject unrecognized values.\nMore info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources",
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"kind": {
|
||||||
|
"description": "Kind is a string value representing the REST resource this object represents.\nServers may infer this from the endpoint the client submits requests to.\nCannot be updated.\nIn CamelCase.\nMore info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds",
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"metadata": {
|
||||||
|
"type": "object"
|
||||||
|
},
|
||||||
|
"spec": {
|
||||||
|
"description": "ImagePolicySpec defines the parameters for calculating the\nImagePolicy.",
|
||||||
|
"properties": {
|
||||||
|
"digestReflectionPolicy": {
|
||||||
|
"default": "Never",
|
||||||
|
"description": "DigestReflectionPolicy governs the setting of the `.status.latestRef.digest` field.\n\nNever: The digest field will always be set to the empty string.\n\nIfNotPresent: The digest field will be set to the digest of the elected\nlatest image if the field is empty and the image did not change.\n\nAlways: The digest field will always be set to the digest of the elected\nlatest image.\n\nDefault: Never.",
|
||||||
|
"enum": [
|
||||||
|
"Always",
|
||||||
|
"IfNotPresent",
|
||||||
|
"Never"
|
||||||
|
],
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"filterTags": {
|
||||||
|
"description": "FilterTags enables filtering for only a subset of tags based on a set of\nrules. If no rules are provided, all the tags from the repository will be\nordered and compared.",
|
||||||
|
"properties": {
|
||||||
|
"extract": {
|
||||||
|
"description": "Extract allows a capture group to be extracted from the specified regular\nexpression pattern, useful before tag evaluation.",
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"pattern": {
|
||||||
|
"description": "Pattern specifies a regular expression pattern used to filter for image\ntags.",
|
||||||
|
"type": "string"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"type": "object",
|
||||||
|
"additionalProperties": false
|
||||||
|
},
|
||||||
|
"imageRepositoryRef": {
|
||||||
|
"description": "ImageRepositoryRef points at the object specifying the image\nbeing scanned",
|
||||||
|
"properties": {
|
||||||
|
"name": {
|
||||||
|
"description": "Name of the referent.",
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"namespace": {
|
||||||
|
"description": "Namespace of the referent, when not specified it acts as LocalObjectReference.",
|
||||||
|
"type": "string"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"required": [
|
||||||
|
"name"
|
||||||
|
],
|
||||||
|
"type": "object",
|
||||||
|
"additionalProperties": false
|
||||||
|
},
|
||||||
|
"interval": {
|
||||||
|
"description": "Interval is the length of time to wait between\nrefreshing the digest of the latest tag when the\nreflection policy is set to \"Always\".\n\nDefaults to 10m.",
|
||||||
|
"pattern": "^([0-9]+(\\.[0-9]+)?(ms|s|m|h))+$",
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"policy": {
|
||||||
|
"description": "Policy gives the particulars of the policy to be followed in\nselecting the most recent image",
|
||||||
|
"properties": {
|
||||||
|
"alphabetical": {
|
||||||
|
"description": "Alphabetical set of rules to use for alphabetical ordering of the tags.",
|
||||||
|
"properties": {
|
||||||
|
"order": {
|
||||||
|
"default": "asc",
|
||||||
|
"description": "Order specifies the sorting order of the tags. Given the letters of the\nalphabet as tags, ascending order would select Z, and descending order\nwould select A.",
|
||||||
|
"enum": [
|
||||||
|
"asc",
|
||||||
|
"desc"
|
||||||
|
],
|
||||||
|
"type": "string"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"type": "object",
|
||||||
|
"additionalProperties": false
|
||||||
|
},
|
||||||
|
"numerical": {
|
||||||
|
"description": "Numerical set of rules to use for numerical ordering of the tags.",
|
||||||
|
"properties": {
|
||||||
|
"order": {
|
||||||
|
"default": "asc",
|
||||||
|
"description": "Order specifies the sorting order of the tags. Given the integer values\nfrom 0 to 9 as tags, ascending order would select 9, and descending order\nwould select 0.",
|
||||||
|
"enum": [
|
||||||
|
"asc",
|
||||||
|
"desc"
|
||||||
|
],
|
||||||
|
"type": "string"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"type": "object",
|
||||||
|
"additionalProperties": false
|
||||||
|
},
|
||||||
|
"semver": {
|
||||||
|
"description": "SemVer gives a semantic version range to check against the tags\navailable.",
|
||||||
|
"properties": {
|
||||||
|
"range": {
|
||||||
|
"description": "Range gives a semver range for the image tag; the highest\nversion within the range that's a tag yields the latest image.",
|
||||||
|
"type": "string"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"required": [
|
||||||
|
"range"
|
||||||
|
],
|
||||||
|
"type": "object",
|
||||||
|
"additionalProperties": false
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"type": "object",
|
||||||
|
"additionalProperties": false
|
||||||
|
},
|
||||||
|
"suspend": {
|
||||||
|
"description": "This flag tells the controller to suspend subsequent policy reconciliations.\nIt does not apply to already started reconciliations. Defaults to false.",
|
||||||
|
"type": "boolean"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"required": [
|
||||||
|
"imageRepositoryRef",
|
||||||
|
"policy"
|
||||||
|
],
|
||||||
|
"type": "object",
|
||||||
|
"x-kubernetes-validations": [
|
||||||
|
{
|
||||||
|
"message": "spec.interval is only accepted when spec.digestReflectionPolicy is set to 'Always'",
|
||||||
|
"rule": "!has(self.interval) || (has(self.digestReflectionPolicy) && self.digestReflectionPolicy == 'Always')"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"message": "spec.interval must be set when spec.digestReflectionPolicy is set to 'Always'",
|
||||||
|
"rule": "has(self.interval) || !has(self.digestReflectionPolicy) || self.digestReflectionPolicy != 'Always'"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"additionalProperties": false
|
||||||
|
},
|
||||||
|
"status": {
|
||||||
|
"default": {
|
||||||
|
"observedGeneration": -1
|
||||||
|
},
|
||||||
|
"description": "ImagePolicyStatus defines the observed state of ImagePolicy",
|
||||||
|
"properties": {
|
||||||
|
"conditions": {
|
||||||
|
"items": {
|
||||||
|
"description": "Condition contains details for one aspect of the current state of this API Resource.",
|
||||||
|
"properties": {
|
||||||
|
"lastTransitionTime": {
|
||||||
|
"description": "lastTransitionTime is the last time the condition transitioned from one status to another.\nThis should be when the underlying condition changed. If that is not known, then using the time when the API field changed is acceptable.",
|
||||||
|
"format": "date-time",
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"message": {
|
||||||
|
"description": "message is a human readable message indicating details about the transition.\nThis may be an empty string.",
|
||||||
|
"maxLength": 32768,
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"observedGeneration": {
|
||||||
|
"description": "observedGeneration represents the .metadata.generation that the condition was set based upon.\nFor instance, if .metadata.generation is currently 12, but the .status.conditions[x].observedGeneration is 9, the condition is out of date\nwith respect to the current state of the instance.",
|
||||||
|
"format": "int64",
|
||||||
|
"minimum": 0,
|
||||||
|
"type": "integer"
|
||||||
|
},
|
||||||
|
"reason": {
|
||||||
|
"description": "reason contains a programmatic identifier indicating the reason for the condition's last transition.\nProducers of specific condition types may define expected values and meanings for this field,\nand whether the values are considered a guaranteed API.\nThe value should be a CamelCase string.\nThis field may not be empty.",
|
||||||
|
"maxLength": 1024,
|
||||||
|
"minLength": 1,
|
||||||
|
"pattern": "^[A-Za-z]([A-Za-z0-9_,:]*[A-Za-z0-9_])?$",
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"status": {
|
||||||
|
"description": "status of the condition, one of True, False, Unknown.",
|
||||||
|
"enum": [
|
||||||
|
"True",
|
||||||
|
"False",
|
||||||
|
"Unknown"
|
||||||
|
],
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"type": {
|
||||||
|
"description": "type of condition in CamelCase or in foo.example.com/CamelCase.",
|
||||||
|
"maxLength": 316,
|
||||||
|
"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])$",
|
||||||
|
"type": "string"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"required": [
|
||||||
|
"lastTransitionTime",
|
||||||
|
"message",
|
||||||
|
"reason",
|
||||||
|
"status",
|
||||||
|
"type"
|
||||||
|
],
|
||||||
|
"type": "object",
|
||||||
|
"additionalProperties": false
|
||||||
|
},
|
||||||
|
"type": "array"
|
||||||
|
},
|
||||||
|
"lastHandledReconcileAt": {
|
||||||
|
"description": "LastHandledReconcileAt holds the value of the most recent\nreconcile request value, so a change of the annotation value\ncan be detected.",
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"latestRef": {
|
||||||
|
"description": "LatestRef gives the first in the list of images scanned by\nthe image repository, when filtered and ordered according\nto the policy.",
|
||||||
|
"properties": {
|
||||||
|
"digest": {
|
||||||
|
"description": "Digest is the image's digest.",
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"name": {
|
||||||
|
"description": "Name is the bare image's name.",
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"tag": {
|
||||||
|
"description": "Tag is the image's tag.",
|
||||||
|
"type": "string"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"required": [
|
||||||
|
"name",
|
||||||
|
"tag"
|
||||||
|
],
|
||||||
|
"type": "object",
|
||||||
|
"additionalProperties": false
|
||||||
|
},
|
||||||
|
"observedGeneration": {
|
||||||
|
"format": "int64",
|
||||||
|
"type": "integer"
|
||||||
|
},
|
||||||
|
"observedPreviousRef": {
|
||||||
|
"description": "ObservedPreviousRef is the observed previous LatestRef. It is used\nto keep track of the previous and current images.",
|
||||||
|
"properties": {
|
||||||
|
"digest": {
|
||||||
|
"description": "Digest is the image's digest.",
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"name": {
|
||||||
|
"description": "Name is the bare image's name.",
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"tag": {
|
||||||
|
"description": "Tag is the image's tag.",
|
||||||
|
"type": "string"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"required": [
|
||||||
|
"name",
|
||||||
|
"tag"
|
||||||
|
],
|
||||||
|
"type": "object",
|
||||||
|
"additionalProperties": false
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"type": "object",
|
||||||
|
"additionalProperties": false
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"type": "object"
|
||||||
|
}
|
||||||
@@ -0,0 +1,262 @@
|
|||||||
|
{
|
||||||
|
"description": "ImageRepository is the Schema for the imagerepositories API",
|
||||||
|
"properties": {
|
||||||
|
"apiVersion": {
|
||||||
|
"description": "APIVersion defines the versioned schema of this representation of an object.\nServers should convert recognized schemas to the latest internal value, and\nmay reject unrecognized values.\nMore info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources",
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"kind": {
|
||||||
|
"description": "Kind is a string value representing the REST resource this object represents.\nServers may infer this from the endpoint the client submits requests to.\nCannot be updated.\nIn CamelCase.\nMore info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds",
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"metadata": {
|
||||||
|
"type": "object"
|
||||||
|
},
|
||||||
|
"spec": {
|
||||||
|
"description": "ImageRepositorySpec defines the parameters for scanning an image\nrepository, e.g., `fluxcd/flux`.",
|
||||||
|
"properties": {
|
||||||
|
"accessFrom": {
|
||||||
|
"description": "AccessFrom defines an ACL for allowing cross-namespace references\nto the ImageRepository object based on the caller's namespace labels.",
|
||||||
|
"properties": {
|
||||||
|
"namespaceSelectors": {
|
||||||
|
"description": "NamespaceSelectors is the list of namespace selectors to which this ACL applies.\nItems in this list are evaluated using a logical OR operation.",
|
||||||
|
"items": {
|
||||||
|
"description": "NamespaceSelector selects the namespaces to which this ACL applies.\nAn empty map of MatchLabels matches all namespaces in a cluster.",
|
||||||
|
"properties": {
|
||||||
|
"matchLabels": {
|
||||||
|
"additionalProperties": {
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"description": "MatchLabels is a map of {key,value} pairs. A single {key,value} in the matchLabels\nmap is equivalent to an element of matchExpressions, whose key field is \"key\", the\noperator is \"In\", and the values array contains only \"value\". The requirements are ANDed.",
|
||||||
|
"type": "object"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"type": "object",
|
||||||
|
"additionalProperties": false
|
||||||
|
},
|
||||||
|
"type": "array"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"required": [
|
||||||
|
"namespaceSelectors"
|
||||||
|
],
|
||||||
|
"type": "object",
|
||||||
|
"additionalProperties": false
|
||||||
|
},
|
||||||
|
"certSecretRef": {
|
||||||
|
"description": "CertSecretRef can be given the name of a Secret containing\neither or both of\n\n- a PEM-encoded client certificate (`tls.crt`) and private\nkey (`tls.key`);\n- a PEM-encoded CA certificate (`ca.crt`)\n\nand whichever are supplied, will be used for connecting to the\nregistry. The client cert and key are useful if you are\nauthenticating with a certificate; the CA cert is useful if\nyou are using a self-signed server certificate. The Secret must\nbe of type `Opaque` or `kubernetes.io/tls`.\n\nNote: Support for the `caFile`, `certFile` and `keyFile` keys has\nbeen deprecated.",
|
||||||
|
"properties": {
|
||||||
|
"name": {
|
||||||
|
"description": "Name of the referent.",
|
||||||
|
"type": "string"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"required": [
|
||||||
|
"name"
|
||||||
|
],
|
||||||
|
"type": "object",
|
||||||
|
"additionalProperties": false
|
||||||
|
},
|
||||||
|
"exclusionList": {
|
||||||
|
"default": [
|
||||||
|
"^.*\\.sig$"
|
||||||
|
],
|
||||||
|
"description": "ExclusionList is a list of regex strings used to exclude certain tags\nfrom being stored in the database.",
|
||||||
|
"items": {
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"maxItems": 25,
|
||||||
|
"type": "array"
|
||||||
|
},
|
||||||
|
"image": {
|
||||||
|
"description": "Image is the name of the image repository",
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"insecure": {
|
||||||
|
"description": "Insecure allows connecting to a non-TLS HTTP container registry.",
|
||||||
|
"type": "boolean"
|
||||||
|
},
|
||||||
|
"interval": {
|
||||||
|
"description": "Interval is the length of time to wait between\nscans of the image repository.",
|
||||||
|
"pattern": "^([0-9]+(\\.[0-9]+)?(ms|s|m|h))+$",
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"provider": {
|
||||||
|
"default": "generic",
|
||||||
|
"description": "The provider used for authentication, can be 'aws', 'azure', 'gcp' or 'generic'.\nWhen not specified, defaults to 'generic'.",
|
||||||
|
"enum": [
|
||||||
|
"generic",
|
||||||
|
"aws",
|
||||||
|
"azure",
|
||||||
|
"gcp"
|
||||||
|
],
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"proxySecretRef": {
|
||||||
|
"description": "ProxySecretRef specifies the Secret containing the proxy configuration\nto use while communicating with the container registry.",
|
||||||
|
"properties": {
|
||||||
|
"name": {
|
||||||
|
"description": "Name of the referent.",
|
||||||
|
"type": "string"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"required": [
|
||||||
|
"name"
|
||||||
|
],
|
||||||
|
"type": "object",
|
||||||
|
"additionalProperties": false
|
||||||
|
},
|
||||||
|
"secretRef": {
|
||||||
|
"description": "SecretRef can be given the name of a secret containing\ncredentials to use for the image registry. The secret should be\ncreated with `kubectl create secret docker-registry`, or the\nequivalent.",
|
||||||
|
"properties": {
|
||||||
|
"name": {
|
||||||
|
"description": "Name of the referent.",
|
||||||
|
"type": "string"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"required": [
|
||||||
|
"name"
|
||||||
|
],
|
||||||
|
"type": "object",
|
||||||
|
"additionalProperties": false
|
||||||
|
},
|
||||||
|
"serviceAccountName": {
|
||||||
|
"description": "ServiceAccountName is the name of the Kubernetes ServiceAccount used to authenticate\nthe image pull if the service account has attached pull secrets.",
|
||||||
|
"maxLength": 253,
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"suspend": {
|
||||||
|
"description": "This flag tells the controller to suspend subsequent image scans.\nIt does not apply to already started scans. Defaults to false.",
|
||||||
|
"type": "boolean"
|
||||||
|
},
|
||||||
|
"timeout": {
|
||||||
|
"description": "Timeout for image scanning.\nDefaults to 'Interval' duration.",
|
||||||
|
"pattern": "^([0-9]+(\\.[0-9]+)?(ms|s|m))+$",
|
||||||
|
"type": "string"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"required": [
|
||||||
|
"image",
|
||||||
|
"interval"
|
||||||
|
],
|
||||||
|
"type": "object",
|
||||||
|
"additionalProperties": false
|
||||||
|
},
|
||||||
|
"status": {
|
||||||
|
"default": {
|
||||||
|
"observedGeneration": -1
|
||||||
|
},
|
||||||
|
"description": "ImageRepositoryStatus defines the observed state of ImageRepository",
|
||||||
|
"properties": {
|
||||||
|
"canonicalImageName": {
|
||||||
|
"description": "CanonicalName is the name of the image repository with all the\nimplied bits made explicit; e.g., `docker.io/library/alpine`\nrather than `alpine`.",
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"conditions": {
|
||||||
|
"items": {
|
||||||
|
"description": "Condition contains details for one aspect of the current state of this API Resource.",
|
||||||
|
"properties": {
|
||||||
|
"lastTransitionTime": {
|
||||||
|
"description": "lastTransitionTime is the last time the condition transitioned from one status to another.\nThis should be when the underlying condition changed. If that is not known, then using the time when the API field changed is acceptable.",
|
||||||
|
"format": "date-time",
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"message": {
|
||||||
|
"description": "message is a human readable message indicating details about the transition.\nThis may be an empty string.",
|
||||||
|
"maxLength": 32768,
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"observedGeneration": {
|
||||||
|
"description": "observedGeneration represents the .metadata.generation that the condition was set based upon.\nFor instance, if .metadata.generation is currently 12, but the .status.conditions[x].observedGeneration is 9, the condition is out of date\nwith respect to the current state of the instance.",
|
||||||
|
"format": "int64",
|
||||||
|
"minimum": 0,
|
||||||
|
"type": "integer"
|
||||||
|
},
|
||||||
|
"reason": {
|
||||||
|
"description": "reason contains a programmatic identifier indicating the reason for the condition's last transition.\nProducers of specific condition types may define expected values and meanings for this field,\nand whether the values are considered a guaranteed API.\nThe value should be a CamelCase string.\nThis field may not be empty.",
|
||||||
|
"maxLength": 1024,
|
||||||
|
"minLength": 1,
|
||||||
|
"pattern": "^[A-Za-z]([A-Za-z0-9_,:]*[A-Za-z0-9_])?$",
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"status": {
|
||||||
|
"description": "status of the condition, one of True, False, Unknown.",
|
||||||
|
"enum": [
|
||||||
|
"True",
|
||||||
|
"False",
|
||||||
|
"Unknown"
|
||||||
|
],
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"type": {
|
||||||
|
"description": "type of condition in CamelCase or in foo.example.com/CamelCase.",
|
||||||
|
"maxLength": 316,
|
||||||
|
"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])$",
|
||||||
|
"type": "string"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"required": [
|
||||||
|
"lastTransitionTime",
|
||||||
|
"message",
|
||||||
|
"reason",
|
||||||
|
"status",
|
||||||
|
"type"
|
||||||
|
],
|
||||||
|
"type": "object",
|
||||||
|
"additionalProperties": false
|
||||||
|
},
|
||||||
|
"type": "array"
|
||||||
|
},
|
||||||
|
"lastHandledReconcileAt": {
|
||||||
|
"description": "LastHandledReconcileAt holds the value of the most recent\nreconcile request value, so a change of the annotation value\ncan be detected.",
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"lastScanResult": {
|
||||||
|
"description": "LastScanResult contains the number of fetched tags.",
|
||||||
|
"properties": {
|
||||||
|
"latestTags": {
|
||||||
|
"description": "LatestTags is a small sample of the tags found in the last scan.\nIt's the first 10 tags when sorting all the tags in descending\nalphabetical order.",
|
||||||
|
"items": {
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"type": "array"
|
||||||
|
},
|
||||||
|
"revision": {
|
||||||
|
"description": "Revision is a stable hash of the scanned tags.",
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"scanTime": {
|
||||||
|
"description": "ScanTime is the time when the last scan was performed.",
|
||||||
|
"format": "date-time",
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"tagCount": {
|
||||||
|
"description": "TagCount is the number of tags found in the last scan.",
|
||||||
|
"type": "integer"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"required": [
|
||||||
|
"tagCount"
|
||||||
|
],
|
||||||
|
"type": "object",
|
||||||
|
"additionalProperties": false
|
||||||
|
},
|
||||||
|
"observedExclusionList": {
|
||||||
|
"description": "ObservedExclusionList is a list of observed exclusion list. It reflects\nthe exclusion rules used for the observed scan result in\nspec.lastScanResult.",
|
||||||
|
"items": {
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"type": "array"
|
||||||
|
},
|
||||||
|
"observedGeneration": {
|
||||||
|
"description": "ObservedGeneration is the last reconciled generation.",
|
||||||
|
"format": "int64",
|
||||||
|
"type": "integer"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"type": "object",
|
||||||
|
"additionalProperties": false
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"type": "object"
|
||||||
|
}
|
||||||
@@ -0,0 +1,262 @@
|
|||||||
|
{
|
||||||
|
"description": "ImageRepository is the Schema for the imagerepositories API",
|
||||||
|
"properties": {
|
||||||
|
"apiVersion": {
|
||||||
|
"description": "APIVersion defines the versioned schema of this representation of an object.\nServers should convert recognized schemas to the latest internal value, and\nmay reject unrecognized values.\nMore info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources",
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"kind": {
|
||||||
|
"description": "Kind is a string value representing the REST resource this object represents.\nServers may infer this from the endpoint the client submits requests to.\nCannot be updated.\nIn CamelCase.\nMore info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds",
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"metadata": {
|
||||||
|
"type": "object"
|
||||||
|
},
|
||||||
|
"spec": {
|
||||||
|
"description": "ImageRepositorySpec defines the parameters for scanning an image\nrepository, e.g., `fluxcd/flux`.",
|
||||||
|
"properties": {
|
||||||
|
"accessFrom": {
|
||||||
|
"description": "AccessFrom defines an ACL for allowing cross-namespace references\nto the ImageRepository object based on the caller's namespace labels.",
|
||||||
|
"properties": {
|
||||||
|
"namespaceSelectors": {
|
||||||
|
"description": "NamespaceSelectors is the list of namespace selectors to which this ACL applies.\nItems in this list are evaluated using a logical OR operation.",
|
||||||
|
"items": {
|
||||||
|
"description": "NamespaceSelector selects the namespaces to which this ACL applies.\nAn empty map of MatchLabels matches all namespaces in a cluster.",
|
||||||
|
"properties": {
|
||||||
|
"matchLabels": {
|
||||||
|
"additionalProperties": {
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"description": "MatchLabels is a map of {key,value} pairs. A single {key,value} in the matchLabels\nmap is equivalent to an element of matchExpressions, whose key field is \"key\", the\noperator is \"In\", and the values array contains only \"value\". The requirements are ANDed.",
|
||||||
|
"type": "object"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"type": "object",
|
||||||
|
"additionalProperties": false
|
||||||
|
},
|
||||||
|
"type": "array"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"required": [
|
||||||
|
"namespaceSelectors"
|
||||||
|
],
|
||||||
|
"type": "object",
|
||||||
|
"additionalProperties": false
|
||||||
|
},
|
||||||
|
"certSecretRef": {
|
||||||
|
"description": "CertSecretRef can be given the name of a Secret containing\neither or both of\n\n- a PEM-encoded client certificate (`tls.crt`) and private\nkey (`tls.key`);\n- a PEM-encoded CA certificate (`ca.crt`)\n\nand whichever are supplied, will be used for connecting to the\nregistry. The client cert and key are useful if you are\nauthenticating with a certificate; the CA cert is useful if\nyou are using a self-signed server certificate. The Secret must\nbe of type `Opaque` or `kubernetes.io/tls`.\n\nNote: Support for the `caFile`, `certFile` and `keyFile` keys has\nbeen deprecated.",
|
||||||
|
"properties": {
|
||||||
|
"name": {
|
||||||
|
"description": "Name of the referent.",
|
||||||
|
"type": "string"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"required": [
|
||||||
|
"name"
|
||||||
|
],
|
||||||
|
"type": "object",
|
||||||
|
"additionalProperties": false
|
||||||
|
},
|
||||||
|
"exclusionList": {
|
||||||
|
"default": [
|
||||||
|
"^.*\\.sig$"
|
||||||
|
],
|
||||||
|
"description": "ExclusionList is a list of regex strings used to exclude certain tags\nfrom being stored in the database.",
|
||||||
|
"items": {
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"maxItems": 25,
|
||||||
|
"type": "array"
|
||||||
|
},
|
||||||
|
"image": {
|
||||||
|
"description": "Image is the name of the image repository",
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"insecure": {
|
||||||
|
"description": "Insecure allows connecting to a non-TLS HTTP container registry.",
|
||||||
|
"type": "boolean"
|
||||||
|
},
|
||||||
|
"interval": {
|
||||||
|
"description": "Interval is the length of time to wait between\nscans of the image repository.",
|
||||||
|
"pattern": "^([0-9]+(\\.[0-9]+)?(ms|s|m|h))+$",
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"provider": {
|
||||||
|
"default": "generic",
|
||||||
|
"description": "The provider used for authentication, can be 'aws', 'azure', 'gcp' or 'generic'.\nWhen not specified, defaults to 'generic'.",
|
||||||
|
"enum": [
|
||||||
|
"generic",
|
||||||
|
"aws",
|
||||||
|
"azure",
|
||||||
|
"gcp"
|
||||||
|
],
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"proxySecretRef": {
|
||||||
|
"description": "ProxySecretRef specifies the Secret containing the proxy configuration\nto use while communicating with the container registry.",
|
||||||
|
"properties": {
|
||||||
|
"name": {
|
||||||
|
"description": "Name of the referent.",
|
||||||
|
"type": "string"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"required": [
|
||||||
|
"name"
|
||||||
|
],
|
||||||
|
"type": "object",
|
||||||
|
"additionalProperties": false
|
||||||
|
},
|
||||||
|
"secretRef": {
|
||||||
|
"description": "SecretRef can be given the name of a secret containing\ncredentials to use for the image registry. The secret should be\ncreated with `kubectl create secret docker-registry`, or the\nequivalent.",
|
||||||
|
"properties": {
|
||||||
|
"name": {
|
||||||
|
"description": "Name of the referent.",
|
||||||
|
"type": "string"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"required": [
|
||||||
|
"name"
|
||||||
|
],
|
||||||
|
"type": "object",
|
||||||
|
"additionalProperties": false
|
||||||
|
},
|
||||||
|
"serviceAccountName": {
|
||||||
|
"description": "ServiceAccountName is the name of the Kubernetes ServiceAccount used to authenticate\nthe image pull if the service account has attached pull secrets.",
|
||||||
|
"maxLength": 253,
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"suspend": {
|
||||||
|
"description": "This flag tells the controller to suspend subsequent image scans.\nIt does not apply to already started scans. Defaults to false.",
|
||||||
|
"type": "boolean"
|
||||||
|
},
|
||||||
|
"timeout": {
|
||||||
|
"description": "Timeout for image scanning.\nDefaults to 'Interval' duration.",
|
||||||
|
"pattern": "^([0-9]+(\\.[0-9]+)?(ms|s|m))+$",
|
||||||
|
"type": "string"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"required": [
|
||||||
|
"image",
|
||||||
|
"interval"
|
||||||
|
],
|
||||||
|
"type": "object",
|
||||||
|
"additionalProperties": false
|
||||||
|
},
|
||||||
|
"status": {
|
||||||
|
"default": {
|
||||||
|
"observedGeneration": -1
|
||||||
|
},
|
||||||
|
"description": "ImageRepositoryStatus defines the observed state of ImageRepository",
|
||||||
|
"properties": {
|
||||||
|
"canonicalImageName": {
|
||||||
|
"description": "CanonicalName is the name of the image repository with all the\nimplied bits made explicit; e.g., `docker.io/library/alpine`\nrather than `alpine`.",
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"conditions": {
|
||||||
|
"items": {
|
||||||
|
"description": "Condition contains details for one aspect of the current state of this API Resource.",
|
||||||
|
"properties": {
|
||||||
|
"lastTransitionTime": {
|
||||||
|
"description": "lastTransitionTime is the last time the condition transitioned from one status to another.\nThis should be when the underlying condition changed. If that is not known, then using the time when the API field changed is acceptable.",
|
||||||
|
"format": "date-time",
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"message": {
|
||||||
|
"description": "message is a human readable message indicating details about the transition.\nThis may be an empty string.",
|
||||||
|
"maxLength": 32768,
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"observedGeneration": {
|
||||||
|
"description": "observedGeneration represents the .metadata.generation that the condition was set based upon.\nFor instance, if .metadata.generation is currently 12, but the .status.conditions[x].observedGeneration is 9, the condition is out of date\nwith respect to the current state of the instance.",
|
||||||
|
"format": "int64",
|
||||||
|
"minimum": 0,
|
||||||
|
"type": "integer"
|
||||||
|
},
|
||||||
|
"reason": {
|
||||||
|
"description": "reason contains a programmatic identifier indicating the reason for the condition's last transition.\nProducers of specific condition types may define expected values and meanings for this field,\nand whether the values are considered a guaranteed API.\nThe value should be a CamelCase string.\nThis field may not be empty.",
|
||||||
|
"maxLength": 1024,
|
||||||
|
"minLength": 1,
|
||||||
|
"pattern": "^[A-Za-z]([A-Za-z0-9_,:]*[A-Za-z0-9_])?$",
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"status": {
|
||||||
|
"description": "status of the condition, one of True, False, Unknown.",
|
||||||
|
"enum": [
|
||||||
|
"True",
|
||||||
|
"False",
|
||||||
|
"Unknown"
|
||||||
|
],
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"type": {
|
||||||
|
"description": "type of condition in CamelCase or in foo.example.com/CamelCase.",
|
||||||
|
"maxLength": 316,
|
||||||
|
"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])$",
|
||||||
|
"type": "string"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"required": [
|
||||||
|
"lastTransitionTime",
|
||||||
|
"message",
|
||||||
|
"reason",
|
||||||
|
"status",
|
||||||
|
"type"
|
||||||
|
],
|
||||||
|
"type": "object",
|
||||||
|
"additionalProperties": false
|
||||||
|
},
|
||||||
|
"type": "array"
|
||||||
|
},
|
||||||
|
"lastHandledReconcileAt": {
|
||||||
|
"description": "LastHandledReconcileAt holds the value of the most recent\nreconcile request value, so a change of the annotation value\ncan be detected.",
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"lastScanResult": {
|
||||||
|
"description": "LastScanResult contains the number of fetched tags.",
|
||||||
|
"properties": {
|
||||||
|
"latestTags": {
|
||||||
|
"description": "LatestTags is a small sample of the tags found in the last scan.\nIt's the first 10 tags when sorting all the tags in descending\nalphabetical order.",
|
||||||
|
"items": {
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"type": "array"
|
||||||
|
},
|
||||||
|
"revision": {
|
||||||
|
"description": "Revision is a stable hash of the scanned tags.",
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"scanTime": {
|
||||||
|
"description": "ScanTime is the time when the last scan was performed.",
|
||||||
|
"format": "date-time",
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"tagCount": {
|
||||||
|
"description": "TagCount is the number of tags found in the last scan.",
|
||||||
|
"type": "integer"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"required": [
|
||||||
|
"tagCount"
|
||||||
|
],
|
||||||
|
"type": "object",
|
||||||
|
"additionalProperties": false
|
||||||
|
},
|
||||||
|
"observedExclusionList": {
|
||||||
|
"description": "ObservedExclusionList is a list of observed exclusion list. It reflects\nthe exclusion rules used for the observed scan result in\nspec.lastScanResult.",
|
||||||
|
"items": {
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"type": "array"
|
||||||
|
},
|
||||||
|
"observedGeneration": {
|
||||||
|
"description": "ObservedGeneration is the last reconciled generation.",
|
||||||
|
"format": "int64",
|
||||||
|
"type": "integer"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"type": "object",
|
||||||
|
"additionalProperties": false
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"type": "object"
|
||||||
|
}
|
||||||
@@ -0,0 +1,387 @@
|
|||||||
|
{
|
||||||
|
"description": "ImageUpdateAutomation is the Schema for the imageupdateautomations API",
|
||||||
|
"properties": {
|
||||||
|
"apiVersion": {
|
||||||
|
"description": "APIVersion defines the versioned schema of this representation of an object.\nServers should convert recognized schemas to the latest internal value, and\nmay reject unrecognized values.\nMore info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources",
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"kind": {
|
||||||
|
"description": "Kind is a string value representing the REST resource this object represents.\nServers may infer this from the endpoint the client submits requests to.\nCannot be updated.\nIn CamelCase.\nMore info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds",
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"metadata": {
|
||||||
|
"type": "object"
|
||||||
|
},
|
||||||
|
"spec": {
|
||||||
|
"description": "ImageUpdateAutomationSpec defines the desired state of ImageUpdateAutomation",
|
||||||
|
"properties": {
|
||||||
|
"git": {
|
||||||
|
"description": "GitSpec contains all the git-specific definitions. This is\ntechnically optional, but in practice mandatory until there are\nother kinds of source allowed.",
|
||||||
|
"properties": {
|
||||||
|
"checkout": {
|
||||||
|
"description": "Checkout gives the parameters for cloning the git repository,\nready to make changes. If not present, the `spec.ref` field from the\nreferenced `GitRepository` or its default will be used.",
|
||||||
|
"properties": {
|
||||||
|
"ref": {
|
||||||
|
"description": "Reference gives a branch, tag or commit to clone from the Git\nrepository.",
|
||||||
|
"properties": {
|
||||||
|
"branch": {
|
||||||
|
"description": "Branch to check out, defaults to 'master' if no other field is defined.",
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"commit": {
|
||||||
|
"description": "Commit SHA to check out, takes precedence over all reference fields.\n\nThis can be combined with Branch to shallow clone the branch, in which\nthe commit is expected to exist.",
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"name": {
|
||||||
|
"description": "Name of the reference to check out; takes precedence over Branch, Tag and SemVer.\n\nIt must be a valid Git reference: https://git-scm.com/docs/git-check-ref-format#_description\nExamples: \"refs/heads/main\", \"refs/tags/v0.1.0\", \"refs/pull/420/head\", \"refs/merge-requests/1/head\"",
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"semver": {
|
||||||
|
"description": "SemVer tag expression to check out, takes precedence over Tag.",
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"tag": {
|
||||||
|
"description": "Tag to check out, takes precedence over Branch.",
|
||||||
|
"type": "string"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"type": "object",
|
||||||
|
"additionalProperties": false
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"required": [
|
||||||
|
"ref"
|
||||||
|
],
|
||||||
|
"type": "object",
|
||||||
|
"additionalProperties": false
|
||||||
|
},
|
||||||
|
"commit": {
|
||||||
|
"description": "Commit specifies how to commit to the git repository.",
|
||||||
|
"properties": {
|
||||||
|
"author": {
|
||||||
|
"description": "Author gives the email and optionally the name to use as the\nauthor of commits.",
|
||||||
|
"properties": {
|
||||||
|
"email": {
|
||||||
|
"description": "Email gives the email to provide when making a commit.",
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"name": {
|
||||||
|
"description": "Name gives the name to provide when making a commit.",
|
||||||
|
"type": "string"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"required": [
|
||||||
|
"email"
|
||||||
|
],
|
||||||
|
"type": "object",
|
||||||
|
"additionalProperties": false
|
||||||
|
},
|
||||||
|
"messageTemplate": {
|
||||||
|
"description": "MessageTemplate provides a template for the commit message,\ninto which will be interpolated the details of the change made.\nNote: The `Updated` template field has been removed. Use `Changed` instead.",
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"messageTemplateValues": {
|
||||||
|
"additionalProperties": {
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"description": "MessageTemplateValues provides additional values to be available to the\ntemplating rendering.",
|
||||||
|
"type": "object"
|
||||||
|
},
|
||||||
|
"signingKey": {
|
||||||
|
"description": "SigningKey provides the option to sign commits with a GPG key",
|
||||||
|
"properties": {
|
||||||
|
"secretRef": {
|
||||||
|
"description": "SecretRef holds the name to a secret that contains a 'git.asc' key\ncorresponding to the ASCII Armored file containing the GPG signing\nkeypair as the value. It must be in the same namespace as the\nImageUpdateAutomation.",
|
||||||
|
"properties": {
|
||||||
|
"name": {
|
||||||
|
"description": "Name of the referent.",
|
||||||
|
"type": "string"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"required": [
|
||||||
|
"name"
|
||||||
|
],
|
||||||
|
"type": "object",
|
||||||
|
"additionalProperties": false
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"required": [
|
||||||
|
"secretRef"
|
||||||
|
],
|
||||||
|
"type": "object",
|
||||||
|
"additionalProperties": false
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"required": [
|
||||||
|
"author"
|
||||||
|
],
|
||||||
|
"type": "object",
|
||||||
|
"additionalProperties": false
|
||||||
|
},
|
||||||
|
"push": {
|
||||||
|
"description": "Push specifies how and where to push commits made by the\nautomation. If missing, commits are pushed (back) to\n`.spec.checkout.branch` or its default.",
|
||||||
|
"properties": {
|
||||||
|
"branch": {
|
||||||
|
"description": "Branch specifies that commits should be pushed to the branch\nnamed. The branch is created using `.spec.checkout.branch` as the\nstarting point, if it doesn't already exist.",
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"options": {
|
||||||
|
"additionalProperties": {
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"description": "Options specifies the push options that are sent to the Git\nserver when performing a push operation. For details, see:\nhttps://git-scm.com/docs/git-push#Documentation/git-push.txt---push-optionltoptiongt",
|
||||||
|
"type": "object"
|
||||||
|
},
|
||||||
|
"refspec": {
|
||||||
|
"description": "Refspec specifies the Git Refspec to use for a push operation.\nIf both Branch and Refspec are provided, then the commit is pushed\nto the branch and also using the specified refspec.\nFor more details about Git Refspecs, see:\nhttps://git-scm.com/book/en/v2/Git-Internals-The-Refspec",
|
||||||
|
"type": "string"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"type": "object",
|
||||||
|
"additionalProperties": false
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"required": [
|
||||||
|
"commit"
|
||||||
|
],
|
||||||
|
"type": "object",
|
||||||
|
"additionalProperties": false
|
||||||
|
},
|
||||||
|
"interval": {
|
||||||
|
"description": "Interval gives an lower bound for how often the automation\nrun should be attempted.",
|
||||||
|
"pattern": "^([0-9]+(\\.[0-9]+)?(ms|s|m|h))+$",
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"policySelector": {
|
||||||
|
"description": "PolicySelector allows to filter applied policies based on labels.\nBy default includes all policies in namespace.",
|
||||||
|
"properties": {
|
||||||
|
"matchExpressions": {
|
||||||
|
"description": "matchExpressions is a list of label selector requirements. The requirements are ANDed.",
|
||||||
|
"items": {
|
||||||
|
"description": "A label selector requirement is a selector that contains values, a key, and an operator that\nrelates the key and values.",
|
||||||
|
"properties": {
|
||||||
|
"key": {
|
||||||
|
"description": "key is the label key that the selector applies to.",
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"operator": {
|
||||||
|
"description": "operator represents a key's relationship to a set of values.\nValid operators are In, NotIn, Exists and DoesNotExist.",
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"values": {
|
||||||
|
"description": "values is an array of string values. If the operator is In or NotIn,\nthe values array must be non-empty. If the operator is Exists or DoesNotExist,\nthe values array must be empty. This array is replaced during a strategic\nmerge patch.",
|
||||||
|
"items": {
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"type": "array",
|
||||||
|
"x-kubernetes-list-type": "atomic"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"required": [
|
||||||
|
"key",
|
||||||
|
"operator"
|
||||||
|
],
|
||||||
|
"type": "object",
|
||||||
|
"additionalProperties": false
|
||||||
|
},
|
||||||
|
"type": "array",
|
||||||
|
"x-kubernetes-list-type": "atomic"
|
||||||
|
},
|
||||||
|
"matchLabels": {
|
||||||
|
"additionalProperties": {
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"description": "matchLabels is a map of {key,value} pairs. A single {key,value} in the matchLabels\nmap is equivalent to an element of matchExpressions, whose key field is \"key\", the\noperator is \"In\", and the values array contains only \"value\". The requirements are ANDed.",
|
||||||
|
"type": "object"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"type": "object",
|
||||||
|
"x-kubernetes-map-type": "atomic",
|
||||||
|
"additionalProperties": false
|
||||||
|
},
|
||||||
|
"sourceRef": {
|
||||||
|
"description": "SourceRef refers to the resource giving access details\nto a git repository.",
|
||||||
|
"properties": {
|
||||||
|
"apiVersion": {
|
||||||
|
"description": "API version of the referent.",
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"kind": {
|
||||||
|
"default": "GitRepository",
|
||||||
|
"description": "Kind of the referent.",
|
||||||
|
"enum": [
|
||||||
|
"GitRepository"
|
||||||
|
],
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"name": {
|
||||||
|
"description": "Name of the referent.",
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"namespace": {
|
||||||
|
"description": "Namespace of the referent, defaults to the namespace of the Kubernetes resource object that contains the reference.",
|
||||||
|
"type": "string"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"required": [
|
||||||
|
"kind",
|
||||||
|
"name"
|
||||||
|
],
|
||||||
|
"type": "object",
|
||||||
|
"additionalProperties": false
|
||||||
|
},
|
||||||
|
"suspend": {
|
||||||
|
"description": "Suspend tells the controller to not run this automation, until\nit is unset (or set to false). Defaults to false.",
|
||||||
|
"type": "boolean"
|
||||||
|
},
|
||||||
|
"update": {
|
||||||
|
"default": {
|
||||||
|
"strategy": "Setters"
|
||||||
|
},
|
||||||
|
"description": "Update gives the specification for how to update the files in\nthe repository. This can be left empty, to use the default\nvalue.",
|
||||||
|
"properties": {
|
||||||
|
"path": {
|
||||||
|
"description": "Path to the directory containing the manifests to be updated.\nDefaults to 'None', which translates to the root path\nof the GitRepositoryRef.",
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"strategy": {
|
||||||
|
"default": "Setters",
|
||||||
|
"description": "Strategy names the strategy to be used.",
|
||||||
|
"enum": [
|
||||||
|
"Setters"
|
||||||
|
],
|
||||||
|
"type": "string"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"type": "object",
|
||||||
|
"additionalProperties": false
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"required": [
|
||||||
|
"interval",
|
||||||
|
"sourceRef"
|
||||||
|
],
|
||||||
|
"type": "object",
|
||||||
|
"additionalProperties": false
|
||||||
|
},
|
||||||
|
"status": {
|
||||||
|
"default": {
|
||||||
|
"observedGeneration": -1
|
||||||
|
},
|
||||||
|
"description": "ImageUpdateAutomationStatus defines the observed state of ImageUpdateAutomation",
|
||||||
|
"properties": {
|
||||||
|
"conditions": {
|
||||||
|
"items": {
|
||||||
|
"description": "Condition contains details for one aspect of the current state of this API Resource.",
|
||||||
|
"properties": {
|
||||||
|
"lastTransitionTime": {
|
||||||
|
"description": "lastTransitionTime is the last time the condition transitioned from one status to another.\nThis should be when the underlying condition changed. If that is not known, then using the time when the API field changed is acceptable.",
|
||||||
|
"format": "date-time",
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"message": {
|
||||||
|
"description": "message is a human readable message indicating details about the transition.\nThis may be an empty string.",
|
||||||
|
"maxLength": 32768,
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"observedGeneration": {
|
||||||
|
"description": "observedGeneration represents the .metadata.generation that the condition was set based upon.\nFor instance, if .metadata.generation is currently 12, but the .status.conditions[x].observedGeneration is 9, the condition is out of date\nwith respect to the current state of the instance.",
|
||||||
|
"format": "int64",
|
||||||
|
"minimum": 0,
|
||||||
|
"type": "integer"
|
||||||
|
},
|
||||||
|
"reason": {
|
||||||
|
"description": "reason contains a programmatic identifier indicating the reason for the condition's last transition.\nProducers of specific condition types may define expected values and meanings for this field,\nand whether the values are considered a guaranteed API.\nThe value should be a CamelCase string.\nThis field may not be empty.",
|
||||||
|
"maxLength": 1024,
|
||||||
|
"minLength": 1,
|
||||||
|
"pattern": "^[A-Za-z]([A-Za-z0-9_,:]*[A-Za-z0-9_])?$",
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"status": {
|
||||||
|
"description": "status of the condition, one of True, False, Unknown.",
|
||||||
|
"enum": [
|
||||||
|
"True",
|
||||||
|
"False",
|
||||||
|
"Unknown"
|
||||||
|
],
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"type": {
|
||||||
|
"description": "type of condition in CamelCase or in foo.example.com/CamelCase.",
|
||||||
|
"maxLength": 316,
|
||||||
|
"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])$",
|
||||||
|
"type": "string"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"required": [
|
||||||
|
"lastTransitionTime",
|
||||||
|
"message",
|
||||||
|
"reason",
|
||||||
|
"status",
|
||||||
|
"type"
|
||||||
|
],
|
||||||
|
"type": "object",
|
||||||
|
"additionalProperties": false
|
||||||
|
},
|
||||||
|
"type": "array"
|
||||||
|
},
|
||||||
|
"lastAutomationRunTime": {
|
||||||
|
"description": "LastAutomationRunTime records the last time the controller ran\nthis automation through to completion (even if no updates were\nmade).",
|
||||||
|
"format": "date-time",
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"lastHandledReconcileAt": {
|
||||||
|
"description": "LastHandledReconcileAt holds the value of the most recent\nreconcile request value, so a change of the annotation value\ncan be detected.",
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"lastPushCommit": {
|
||||||
|
"description": "LastPushCommit records the SHA1 of the last commit made by the\ncontroller, for this automation object",
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"lastPushTime": {
|
||||||
|
"description": "LastPushTime records the time of the last pushed change.",
|
||||||
|
"format": "date-time",
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"observedGeneration": {
|
||||||
|
"format": "int64",
|
||||||
|
"type": "integer"
|
||||||
|
},
|
||||||
|
"observedPolicies": {
|
||||||
|
"additionalProperties": {
|
||||||
|
"description": "ImageRef represents an image reference.",
|
||||||
|
"properties": {
|
||||||
|
"digest": {
|
||||||
|
"description": "Digest is the image's digest.",
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"name": {
|
||||||
|
"description": "Name is the bare image's name.",
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"tag": {
|
||||||
|
"description": "Tag is the image's tag.",
|
||||||
|
"type": "string"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"required": [
|
||||||
|
"name",
|
||||||
|
"tag"
|
||||||
|
],
|
||||||
|
"type": "object",
|
||||||
|
"additionalProperties": false
|
||||||
|
},
|
||||||
|
"description": "ObservedPolicies is the list of observed ImagePolicies that were\nconsidered by the ImageUpdateAutomation update process.",
|
||||||
|
"type": "object"
|
||||||
|
},
|
||||||
|
"observedSourceRevision": {
|
||||||
|
"description": "ObservedPolicies []ObservedPolicy `json:\"observedPolicies,omitempty\"`\nObservedSourceRevision is the last observed source revision. This can be\nused to determine if the source has been updated since last observation.",
|
||||||
|
"type": "string"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"type": "object",
|
||||||
|
"additionalProperties": false
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"type": "object"
|
||||||
|
}
|
||||||
@@ -0,0 +1,387 @@
|
|||||||
|
{
|
||||||
|
"description": "ImageUpdateAutomation is the Schema for the imageupdateautomations API",
|
||||||
|
"properties": {
|
||||||
|
"apiVersion": {
|
||||||
|
"description": "APIVersion defines the versioned schema of this representation of an object.\nServers should convert recognized schemas to the latest internal value, and\nmay reject unrecognized values.\nMore info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources",
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"kind": {
|
||||||
|
"description": "Kind is a string value representing the REST resource this object represents.\nServers may infer this from the endpoint the client submits requests to.\nCannot be updated.\nIn CamelCase.\nMore info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds",
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"metadata": {
|
||||||
|
"type": "object"
|
||||||
|
},
|
||||||
|
"spec": {
|
||||||
|
"description": "ImageUpdateAutomationSpec defines the desired state of ImageUpdateAutomation",
|
||||||
|
"properties": {
|
||||||
|
"git": {
|
||||||
|
"description": "GitSpec contains all the git-specific definitions. This is\ntechnically optional, but in practice mandatory until there are\nother kinds of source allowed.",
|
||||||
|
"properties": {
|
||||||
|
"checkout": {
|
||||||
|
"description": "Checkout gives the parameters for cloning the git repository,\nready to make changes. If not present, the `spec.ref` field from the\nreferenced `GitRepository` or its default will be used.",
|
||||||
|
"properties": {
|
||||||
|
"ref": {
|
||||||
|
"description": "Reference gives a branch, tag or commit to clone from the Git\nrepository.",
|
||||||
|
"properties": {
|
||||||
|
"branch": {
|
||||||
|
"description": "Branch to check out, defaults to 'master' if no other field is defined.",
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"commit": {
|
||||||
|
"description": "Commit SHA to check out, takes precedence over all reference fields.\n\nThis can be combined with Branch to shallow clone the branch, in which\nthe commit is expected to exist.",
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"name": {
|
||||||
|
"description": "Name of the reference to check out; takes precedence over Branch, Tag and SemVer.\n\nIt must be a valid Git reference: https://git-scm.com/docs/git-check-ref-format#_description\nExamples: \"refs/heads/main\", \"refs/tags/v0.1.0\", \"refs/pull/420/head\", \"refs/merge-requests/1/head\"",
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"semver": {
|
||||||
|
"description": "SemVer tag expression to check out, takes precedence over Tag.",
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"tag": {
|
||||||
|
"description": "Tag to check out, takes precedence over Branch.",
|
||||||
|
"type": "string"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"type": "object",
|
||||||
|
"additionalProperties": false
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"required": [
|
||||||
|
"ref"
|
||||||
|
],
|
||||||
|
"type": "object",
|
||||||
|
"additionalProperties": false
|
||||||
|
},
|
||||||
|
"commit": {
|
||||||
|
"description": "Commit specifies how to commit to the git repository.",
|
||||||
|
"properties": {
|
||||||
|
"author": {
|
||||||
|
"description": "Author gives the email and optionally the name to use as the\nauthor of commits.",
|
||||||
|
"properties": {
|
||||||
|
"email": {
|
||||||
|
"description": "Email gives the email to provide when making a commit.",
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"name": {
|
||||||
|
"description": "Name gives the name to provide when making a commit.",
|
||||||
|
"type": "string"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"required": [
|
||||||
|
"email"
|
||||||
|
],
|
||||||
|
"type": "object",
|
||||||
|
"additionalProperties": false
|
||||||
|
},
|
||||||
|
"messageTemplate": {
|
||||||
|
"description": "MessageTemplate provides a template for the commit message,\ninto which will be interpolated the details of the change made.\nNote: The `Updated` template field has been removed. Use `Changed` instead.",
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"messageTemplateValues": {
|
||||||
|
"additionalProperties": {
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"description": "MessageTemplateValues provides additional values to be available to the\ntemplating rendering.",
|
||||||
|
"type": "object"
|
||||||
|
},
|
||||||
|
"signingKey": {
|
||||||
|
"description": "SigningKey provides the option to sign commits with a GPG key",
|
||||||
|
"properties": {
|
||||||
|
"secretRef": {
|
||||||
|
"description": "SecretRef holds the name to a secret that contains a 'git.asc' key\ncorresponding to the ASCII Armored file containing the GPG signing\nkeypair as the value. It must be in the same namespace as the\nImageUpdateAutomation.",
|
||||||
|
"properties": {
|
||||||
|
"name": {
|
||||||
|
"description": "Name of the referent.",
|
||||||
|
"type": "string"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"required": [
|
||||||
|
"name"
|
||||||
|
],
|
||||||
|
"type": "object",
|
||||||
|
"additionalProperties": false
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"required": [
|
||||||
|
"secretRef"
|
||||||
|
],
|
||||||
|
"type": "object",
|
||||||
|
"additionalProperties": false
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"required": [
|
||||||
|
"author"
|
||||||
|
],
|
||||||
|
"type": "object",
|
||||||
|
"additionalProperties": false
|
||||||
|
},
|
||||||
|
"push": {
|
||||||
|
"description": "Push specifies how and where to push commits made by the\nautomation. If missing, commits are pushed (back) to\n`.spec.checkout.branch` or its default.",
|
||||||
|
"properties": {
|
||||||
|
"branch": {
|
||||||
|
"description": "Branch specifies that commits should be pushed to the branch\nnamed. The branch is created using `.spec.checkout.branch` as the\nstarting point, if it doesn't already exist.",
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"options": {
|
||||||
|
"additionalProperties": {
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"description": "Options specifies the push options that are sent to the Git\nserver when performing a push operation. For details, see:\nhttps://git-scm.com/docs/git-push#Documentation/git-push.txt---push-optionltoptiongt",
|
||||||
|
"type": "object"
|
||||||
|
},
|
||||||
|
"refspec": {
|
||||||
|
"description": "Refspec specifies the Git Refspec to use for a push operation.\nIf both Branch and Refspec are provided, then the commit is pushed\nto the branch and also using the specified refspec.\nFor more details about Git Refspecs, see:\nhttps://git-scm.com/book/en/v2/Git-Internals-The-Refspec",
|
||||||
|
"type": "string"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"type": "object",
|
||||||
|
"additionalProperties": false
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"required": [
|
||||||
|
"commit"
|
||||||
|
],
|
||||||
|
"type": "object",
|
||||||
|
"additionalProperties": false
|
||||||
|
},
|
||||||
|
"interval": {
|
||||||
|
"description": "Interval gives an lower bound for how often the automation\nrun should be attempted.",
|
||||||
|
"pattern": "^([0-9]+(\\.[0-9]+)?(ms|s|m|h))+$",
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"policySelector": {
|
||||||
|
"description": "PolicySelector allows to filter applied policies based on labels.\nBy default includes all policies in namespace.",
|
||||||
|
"properties": {
|
||||||
|
"matchExpressions": {
|
||||||
|
"description": "matchExpressions is a list of label selector requirements. The requirements are ANDed.",
|
||||||
|
"items": {
|
||||||
|
"description": "A label selector requirement is a selector that contains values, a key, and an operator that\nrelates the key and values.",
|
||||||
|
"properties": {
|
||||||
|
"key": {
|
||||||
|
"description": "key is the label key that the selector applies to.",
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"operator": {
|
||||||
|
"description": "operator represents a key's relationship to a set of values.\nValid operators are In, NotIn, Exists and DoesNotExist.",
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"values": {
|
||||||
|
"description": "values is an array of string values. If the operator is In or NotIn,\nthe values array must be non-empty. If the operator is Exists or DoesNotExist,\nthe values array must be empty. This array is replaced during a strategic\nmerge patch.",
|
||||||
|
"items": {
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"type": "array",
|
||||||
|
"x-kubernetes-list-type": "atomic"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"required": [
|
||||||
|
"key",
|
||||||
|
"operator"
|
||||||
|
],
|
||||||
|
"type": "object",
|
||||||
|
"additionalProperties": false
|
||||||
|
},
|
||||||
|
"type": "array",
|
||||||
|
"x-kubernetes-list-type": "atomic"
|
||||||
|
},
|
||||||
|
"matchLabels": {
|
||||||
|
"additionalProperties": {
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"description": "matchLabels is a map of {key,value} pairs. A single {key,value} in the matchLabels\nmap is equivalent to an element of matchExpressions, whose key field is \"key\", the\noperator is \"In\", and the values array contains only \"value\". The requirements are ANDed.",
|
||||||
|
"type": "object"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"type": "object",
|
||||||
|
"x-kubernetes-map-type": "atomic",
|
||||||
|
"additionalProperties": false
|
||||||
|
},
|
||||||
|
"sourceRef": {
|
||||||
|
"description": "SourceRef refers to the resource giving access details\nto a git repository.",
|
||||||
|
"properties": {
|
||||||
|
"apiVersion": {
|
||||||
|
"description": "API version of the referent.",
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"kind": {
|
||||||
|
"default": "GitRepository",
|
||||||
|
"description": "Kind of the referent.",
|
||||||
|
"enum": [
|
||||||
|
"GitRepository"
|
||||||
|
],
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"name": {
|
||||||
|
"description": "Name of the referent.",
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"namespace": {
|
||||||
|
"description": "Namespace of the referent, defaults to the namespace of the Kubernetes resource object that contains the reference.",
|
||||||
|
"type": "string"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"required": [
|
||||||
|
"kind",
|
||||||
|
"name"
|
||||||
|
],
|
||||||
|
"type": "object",
|
||||||
|
"additionalProperties": false
|
||||||
|
},
|
||||||
|
"suspend": {
|
||||||
|
"description": "Suspend tells the controller to not run this automation, until\nit is unset (or set to false). Defaults to false.",
|
||||||
|
"type": "boolean"
|
||||||
|
},
|
||||||
|
"update": {
|
||||||
|
"default": {
|
||||||
|
"strategy": "Setters"
|
||||||
|
},
|
||||||
|
"description": "Update gives the specification for how to update the files in\nthe repository. This can be left empty, to use the default\nvalue.",
|
||||||
|
"properties": {
|
||||||
|
"path": {
|
||||||
|
"description": "Path to the directory containing the manifests to be updated.\nDefaults to 'None', which translates to the root path\nof the GitRepositoryRef.",
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"strategy": {
|
||||||
|
"default": "Setters",
|
||||||
|
"description": "Strategy names the strategy to be used.",
|
||||||
|
"enum": [
|
||||||
|
"Setters"
|
||||||
|
],
|
||||||
|
"type": "string"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"type": "object",
|
||||||
|
"additionalProperties": false
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"required": [
|
||||||
|
"interval",
|
||||||
|
"sourceRef"
|
||||||
|
],
|
||||||
|
"type": "object",
|
||||||
|
"additionalProperties": false
|
||||||
|
},
|
||||||
|
"status": {
|
||||||
|
"default": {
|
||||||
|
"observedGeneration": -1
|
||||||
|
},
|
||||||
|
"description": "ImageUpdateAutomationStatus defines the observed state of ImageUpdateAutomation",
|
||||||
|
"properties": {
|
||||||
|
"conditions": {
|
||||||
|
"items": {
|
||||||
|
"description": "Condition contains details for one aspect of the current state of this API Resource.",
|
||||||
|
"properties": {
|
||||||
|
"lastTransitionTime": {
|
||||||
|
"description": "lastTransitionTime is the last time the condition transitioned from one status to another.\nThis should be when the underlying condition changed. If that is not known, then using the time when the API field changed is acceptable.",
|
||||||
|
"format": "date-time",
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"message": {
|
||||||
|
"description": "message is a human readable message indicating details about the transition.\nThis may be an empty string.",
|
||||||
|
"maxLength": 32768,
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"observedGeneration": {
|
||||||
|
"description": "observedGeneration represents the .metadata.generation that the condition was set based upon.\nFor instance, if .metadata.generation is currently 12, but the .status.conditions[x].observedGeneration is 9, the condition is out of date\nwith respect to the current state of the instance.",
|
||||||
|
"format": "int64",
|
||||||
|
"minimum": 0,
|
||||||
|
"type": "integer"
|
||||||
|
},
|
||||||
|
"reason": {
|
||||||
|
"description": "reason contains a programmatic identifier indicating the reason for the condition's last transition.\nProducers of specific condition types may define expected values and meanings for this field,\nand whether the values are considered a guaranteed API.\nThe value should be a CamelCase string.\nThis field may not be empty.",
|
||||||
|
"maxLength": 1024,
|
||||||
|
"minLength": 1,
|
||||||
|
"pattern": "^[A-Za-z]([A-Za-z0-9_,:]*[A-Za-z0-9_])?$",
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"status": {
|
||||||
|
"description": "status of the condition, one of True, False, Unknown.",
|
||||||
|
"enum": [
|
||||||
|
"True",
|
||||||
|
"False",
|
||||||
|
"Unknown"
|
||||||
|
],
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"type": {
|
||||||
|
"description": "type of condition in CamelCase or in foo.example.com/CamelCase.",
|
||||||
|
"maxLength": 316,
|
||||||
|
"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])$",
|
||||||
|
"type": "string"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"required": [
|
||||||
|
"lastTransitionTime",
|
||||||
|
"message",
|
||||||
|
"reason",
|
||||||
|
"status",
|
||||||
|
"type"
|
||||||
|
],
|
||||||
|
"type": "object",
|
||||||
|
"additionalProperties": false
|
||||||
|
},
|
||||||
|
"type": "array"
|
||||||
|
},
|
||||||
|
"lastAutomationRunTime": {
|
||||||
|
"description": "LastAutomationRunTime records the last time the controller ran\nthis automation through to completion (even if no updates were\nmade).",
|
||||||
|
"format": "date-time",
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"lastHandledReconcileAt": {
|
||||||
|
"description": "LastHandledReconcileAt holds the value of the most recent\nreconcile request value, so a change of the annotation value\ncan be detected.",
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"lastPushCommit": {
|
||||||
|
"description": "LastPushCommit records the SHA1 of the last commit made by the\ncontroller, for this automation object",
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"lastPushTime": {
|
||||||
|
"description": "LastPushTime records the time of the last pushed change.",
|
||||||
|
"format": "date-time",
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"observedGeneration": {
|
||||||
|
"format": "int64",
|
||||||
|
"type": "integer"
|
||||||
|
},
|
||||||
|
"observedPolicies": {
|
||||||
|
"additionalProperties": {
|
||||||
|
"description": "ImageRef represents an image reference.",
|
||||||
|
"properties": {
|
||||||
|
"digest": {
|
||||||
|
"description": "Digest is the image's digest.",
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"name": {
|
||||||
|
"description": "Name is the bare image's name.",
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"tag": {
|
||||||
|
"description": "Tag is the image's tag.",
|
||||||
|
"type": "string"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"required": [
|
||||||
|
"name",
|
||||||
|
"tag"
|
||||||
|
],
|
||||||
|
"type": "object",
|
||||||
|
"additionalProperties": false
|
||||||
|
},
|
||||||
|
"description": "ObservedPolicies is the list of observed ImagePolicies that were\nconsidered by the ImageUpdateAutomation update process.",
|
||||||
|
"type": "object"
|
||||||
|
},
|
||||||
|
"observedSourceRevision": {
|
||||||
|
"description": "ObservedPolicies []ObservedPolicy `json:\"observedPolicies,omitempty\"`\nObservedSourceRevision is the last observed source revision. This can be\nused to determine if the source has been updated since last observation.",
|
||||||
|
"type": "string"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"type": "object",
|
||||||
|
"additionalProperties": false
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"type": "object"
|
||||||
|
}
|
||||||
@@ -0,0 +1,558 @@
|
|||||||
|
{
|
||||||
|
"description": "ImageUpdater is the Schema for the imageupdaters API",
|
||||||
|
"properties": {
|
||||||
|
"apiVersion": {
|
||||||
|
"description": "APIVersion defines the versioned schema of this representation of an object.\nServers should convert recognized schemas to the latest internal value, and\nmay reject unrecognized values.\nMore info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources",
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"kind": {
|
||||||
|
"description": "Kind is a string value representing the REST resource this object represents.\nServers may infer this from the endpoint the client submits requests to.\nCannot be updated.\nIn CamelCase.\nMore info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds",
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"metadata": {
|
||||||
|
"type": "object"
|
||||||
|
},
|
||||||
|
"spec": {
|
||||||
|
"description": "ImageUpdaterSpec defines the desired state of ImageUpdater\nIt specifies which applications to target, default update strategies,\nand a list of images to manage.",
|
||||||
|
"properties": {
|
||||||
|
"applicationRefs": {
|
||||||
|
"description": "ApplicationRefs indicates the set of applications to be managed.\nApplicationRefs is a list of rules to select Argo CD Applications within the ImageUpdater CR's namespace.\nEach reference can also provide specific overrides for the global settings defined above.",
|
||||||
|
"items": {
|
||||||
|
"description": "ApplicationRef contains various criteria by which to include applications for managing by image updater",
|
||||||
|
"properties": {
|
||||||
|
"commonUpdateSettings": {
|
||||||
|
"description": "CommonUpdateSettings overrides the global CommonUpdateSettings for applications\nmatched by this selector.\nThis field is ignored when UseAnnotations is true.",
|
||||||
|
"properties": {
|
||||||
|
"allowTags": {
|
||||||
|
"description": "AllowTags is a regex pattern for tags to allow.\nThis acts as the default if not overridden.",
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"forceUpdate": {
|
||||||
|
"default": false,
|
||||||
|
"description": "ForceUpdate specifies whether updates should be forced.\nThis acts as the default if not overridden.",
|
||||||
|
"type": "boolean"
|
||||||
|
},
|
||||||
|
"ignoreTags": {
|
||||||
|
"description": "IgnoreTags is a list of glob-like patterns of tags to ignore.\nThis acts as the default and can be overridden at more specific levels.",
|
||||||
|
"items": {
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"type": "array",
|
||||||
|
"x-kubernetes-list-type": "atomic"
|
||||||
|
},
|
||||||
|
"platforms": {
|
||||||
|
"description": "Platforms specifies a list of target platforms (e.g., \"linux/amd64\", \"linux/arm64\").\nIf specified, the image updater will consider these platforms when checking for new versions or digests.",
|
||||||
|
"items": {
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"type": "array",
|
||||||
|
"x-kubernetes-list-type": "atomic"
|
||||||
|
},
|
||||||
|
"pullSecret": {
|
||||||
|
"description": "PullSecret is the pull secret to use for images.\nThis acts as the default if not overridden.",
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"updateStrategy": {
|
||||||
|
"default": "semver",
|
||||||
|
"description": "UpdateStrategy defines the update strategy to apply.\nExamples: \"semver\", \"latest\", \"digest\", \"name\".\nThis acts as the default if not overridden at a more specific level.",
|
||||||
|
"type": "string"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"type": "object",
|
||||||
|
"additionalProperties": false
|
||||||
|
},
|
||||||
|
"images": {
|
||||||
|
"description": "Images contains a list of configurations that how images should be updated.\nThese rules apply to applications selected by namePattern in ApplicationRefs, and each\nimage can override global/ApplicationRef settings.\nThis field is ignored when UseAnnotations is true.",
|
||||||
|
"items": {
|
||||||
|
"description": "ImageConfig defines how a specific container image should be discovered, updated,\nand how those updates should be reflected in application manifests.",
|
||||||
|
"properties": {
|
||||||
|
"alias": {
|
||||||
|
"description": "Alias is a short, user-defined name for this image configuration.\nIt MUST be unique within a single ApplicationRef's list of images.\nThis field is mandatory.",
|
||||||
|
"pattern": "^[a-zA-Z0-9][a-zA-Z0-9-._]*$",
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"commonUpdateSettings": {
|
||||||
|
"description": "CommonUpdateSettings overrides the effective default CommonUpdateSettings for this specific image.",
|
||||||
|
"properties": {
|
||||||
|
"allowTags": {
|
||||||
|
"description": "AllowTags is a regex pattern for tags to allow.\nThis acts as the default if not overridden.",
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"forceUpdate": {
|
||||||
|
"default": false,
|
||||||
|
"description": "ForceUpdate specifies whether updates should be forced.\nThis acts as the default if not overridden.",
|
||||||
|
"type": "boolean"
|
||||||
|
},
|
||||||
|
"ignoreTags": {
|
||||||
|
"description": "IgnoreTags is a list of glob-like patterns of tags to ignore.\nThis acts as the default and can be overridden at more specific levels.",
|
||||||
|
"items": {
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"type": "array",
|
||||||
|
"x-kubernetes-list-type": "atomic"
|
||||||
|
},
|
||||||
|
"platforms": {
|
||||||
|
"description": "Platforms specifies a list of target platforms (e.g., \"linux/amd64\", \"linux/arm64\").\nIf specified, the image updater will consider these platforms when checking for new versions or digests.",
|
||||||
|
"items": {
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"type": "array",
|
||||||
|
"x-kubernetes-list-type": "atomic"
|
||||||
|
},
|
||||||
|
"pullSecret": {
|
||||||
|
"description": "PullSecret is the pull secret to use for images.\nThis acts as the default if not overridden.",
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"updateStrategy": {
|
||||||
|
"default": "semver",
|
||||||
|
"description": "UpdateStrategy defines the update strategy to apply.\nExamples: \"semver\", \"latest\", \"digest\", \"name\".\nThis acts as the default if not overridden at a more specific level.",
|
||||||
|
"type": "string"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"type": "object",
|
||||||
|
"additionalProperties": false
|
||||||
|
},
|
||||||
|
"imageName": {
|
||||||
|
"description": "ImageName is the full identifier of the image to be tracked,\nincluding the registry (if not Docker Hub), the image name, and an initial/current tag or version.\nThis is the string used to query the container registry and also as a base for finding updates.\nExample: \"docker.io/library/nginx:1.17.10\", \"quay.io/prometheus/node-exporter:v1.5.0\".\nThis field is mandatory.",
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"manifestTargets": {
|
||||||
|
"description": "ManifestTarget defines how and where to update this image in Kubernetes manifests.\nOnly one of Helm or Kustomize should be specified within this block.\nThis whole block is optional if the image update isn't written to a manifest in a structured way.",
|
||||||
|
"properties": {
|
||||||
|
"helm": {
|
||||||
|
"description": "Helm specifies update parameters if the target manifest is managed by Helm\nand updates are to be made to Helm values files.",
|
||||||
|
"properties": {
|
||||||
|
"name": {
|
||||||
|
"description": "Name is the dot-separated path to the Helm key for the image repository/name part.\nExample: \"image.repository\", \"frontend.deployment.image.name\".\nIf neither spec nor name/tag are set, defaults to \"image.name\".\nIf spec is set, this field is ignored.",
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"spec": {
|
||||||
|
"description": "Spec is the dot-separated path to a Helm key where the full image string\n(e.g., \"image/name:1.0\") should be written.\nUse this if your Helm chart expects the entire image reference in a single field,\nrather than separate name/tag fields. If this is set, name and tag will be ignored.",
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"tag": {
|
||||||
|
"description": "Tag is the dot-separated path to the Helm key for the image tag part.\nExample: \"image.tag\", \"frontend.deployment.image.version\".\nIf neither spec nor name/tag are set, defaults to \"image.tag\".\nIf spec is set, this field is ignored.",
|
||||||
|
"type": "string"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"type": "object",
|
||||||
|
"additionalProperties": false
|
||||||
|
},
|
||||||
|
"kustomize": {
|
||||||
|
"description": "Kustomize specifies update parameters if the target manifest is managed by Kustomize\nand updates involve changing image tags in Kustomize configurations.",
|
||||||
|
"properties": {
|
||||||
|
"name": {
|
||||||
|
"description": "Name is the image name (which can include the registry and an initial tag)\nas it appears in the `images` list of a kustomization.yaml file that needs to be updated.\nThe updater will typically change the tag or add a digest to this entry.\nExample: \"docker.io/library/nginx\".\nThis field is required if the Kustomize target is used.",
|
||||||
|
"type": "string"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"required": [
|
||||||
|
"name"
|
||||||
|
],
|
||||||
|
"type": "object",
|
||||||
|
"additionalProperties": false
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"type": "object",
|
||||||
|
"x-kubernetes-validations": [
|
||||||
|
{
|
||||||
|
"message": "Exactly one of helm or kustomize must be specified within manifestTargets if the block is present.",
|
||||||
|
"rule": "has(self.helm) ? !has(self.kustomize) : has(self.kustomize)"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"additionalProperties": false
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"required": [
|
||||||
|
"alias",
|
||||||
|
"imageName"
|
||||||
|
],
|
||||||
|
"type": "object",
|
||||||
|
"additionalProperties": false
|
||||||
|
},
|
||||||
|
"type": "array",
|
||||||
|
"x-kubernetes-list-map-keys": [
|
||||||
|
"alias"
|
||||||
|
],
|
||||||
|
"x-kubernetes-list-type": "map"
|
||||||
|
},
|
||||||
|
"labelSelectors": {
|
||||||
|
"description": "LabelSelectors indicates the label selectors to apply for application selection",
|
||||||
|
"properties": {
|
||||||
|
"matchExpressions": {
|
||||||
|
"description": "matchExpressions is a list of label selector requirements. The requirements are ANDed.",
|
||||||
|
"items": {
|
||||||
|
"description": "A label selector requirement is a selector that contains values, a key, and an operator that\nrelates the key and values.",
|
||||||
|
"properties": {
|
||||||
|
"key": {
|
||||||
|
"description": "key is the label key that the selector applies to.",
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"operator": {
|
||||||
|
"description": "operator represents a key's relationship to a set of values.\nValid operators are In, NotIn, Exists and DoesNotExist.",
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"values": {
|
||||||
|
"description": "values is an array of string values. If the operator is In or NotIn,\nthe values array must be non-empty. If the operator is Exists or DoesNotExist,\nthe values array must be empty. This array is replaced during a strategic\nmerge patch.",
|
||||||
|
"items": {
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"type": "array",
|
||||||
|
"x-kubernetes-list-type": "atomic"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"required": [
|
||||||
|
"key",
|
||||||
|
"operator"
|
||||||
|
],
|
||||||
|
"type": "object",
|
||||||
|
"additionalProperties": false
|
||||||
|
},
|
||||||
|
"type": "array",
|
||||||
|
"x-kubernetes-list-type": "atomic"
|
||||||
|
},
|
||||||
|
"matchLabels": {
|
||||||
|
"additionalProperties": {
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"description": "matchLabels is a map of {key,value} pairs. A single {key,value} in the matchLabels\nmap is equivalent to an element of matchExpressions, whose key field is \"key\", the\noperator is \"In\", and the values array contains only \"value\". The requirements are ANDed.",
|
||||||
|
"type": "object"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"type": "object",
|
||||||
|
"x-kubernetes-map-type": "atomic",
|
||||||
|
"additionalProperties": false
|
||||||
|
},
|
||||||
|
"namePattern": {
|
||||||
|
"description": "NamePattern indicates the glob pattern for application name",
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"useAnnotations": {
|
||||||
|
"default": false,
|
||||||
|
"description": "UseAnnotations When true, read image configuration from Application's\nargocd-image-updater.argoproj.io/* annotations instead of\nrequiring explicit Images[] configuration in this CR.\nWhen this field is set to true, only namePattern and labelSelectors are used for\napplication selection. All other fields (CommonUpdateSettings, WriteBackConfig, Images)\nare ignored.",
|
||||||
|
"type": "boolean"
|
||||||
|
},
|
||||||
|
"writeBackConfig": {
|
||||||
|
"description": "WriteBackConfig overrides the global WriteBackConfig settings for applications\nmatched by this selector.\nThis field is ignored when UseAnnotations is true.",
|
||||||
|
"properties": {
|
||||||
|
"gitConfig": {
|
||||||
|
"description": "GitConfig provides Git configuration settings if the write-back method involves Git.\nThis can only be used when method is \"git\" or starts with \"git:\".",
|
||||||
|
"properties": {
|
||||||
|
"branch": {
|
||||||
|
"description": "Branch to commit updates to.\nRequired if write-back method is Git and this is not specified at the spec level.",
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"pullRequest": {
|
||||||
|
"description": "PullRequest configures creation of pull requests when writing back image updates to Git.\nWhen set, the controller opens a PR instead of pushing to the branch.\nIf not specified write back config method is `git`.",
|
||||||
|
"properties": {
|
||||||
|
"github": {
|
||||||
|
"description": "GitHub configures PR creation via the GitHub API.",
|
||||||
|
"type": "object"
|
||||||
|
},
|
||||||
|
"gitlab": {
|
||||||
|
"description": "GitLab configures MR creation via the GitLab API.",
|
||||||
|
"type": "object"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"type": "object",
|
||||||
|
"x-kubernetes-validations": [
|
||||||
|
{
|
||||||
|
"message": "Exactly one of github or gitlab must be set",
|
||||||
|
"rule": "(has(self.github) ? 1 : 0) + (has(self.gitlab) ? 1 : 0) == 1"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"additionalProperties": false
|
||||||
|
},
|
||||||
|
"repository": {
|
||||||
|
"description": "Repository URL to commit changes to.\nIf not specified here or at the spec level, the controller MUST infer it from the\nArgo CD Application's `spec.source.repoURL`. This field allows overriding that.",
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"writeBackTarget": {
|
||||||
|
"description": "WriteBackTarget defines the path and type of file to update in the Git repository.\nExamples: \"helmvalues:./helm/values.yaml\", \"kustomization:./kustomize/overlays/production\".\nFor ApplicationSet usage, `{{ .app.path.path }}` should be resolved by ApplicationSet\nbefore this CR is generated, resulting in a concrete path here.\nRequired if write-back method is Git and this is not specified at the spec level.",
|
||||||
|
"type": "string"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"type": "object",
|
||||||
|
"additionalProperties": false
|
||||||
|
},
|
||||||
|
"method": {
|
||||||
|
"default": "argocd",
|
||||||
|
"description": "Method defines the method for writing back updated image versions.\nThis acts as the default if not overridden. If not specified, defaults to \"argocd\".",
|
||||||
|
"pattern": "^(argocd|git|git:[a-zA-Z0-9][a-zA-Z0-9-._/:]*)$",
|
||||||
|
"type": "string"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"required": [
|
||||||
|
"method"
|
||||||
|
],
|
||||||
|
"type": "object",
|
||||||
|
"additionalProperties": false
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"required": [
|
||||||
|
"namePattern"
|
||||||
|
],
|
||||||
|
"type": "object",
|
||||||
|
"x-kubernetes-validations": [
|
||||||
|
{
|
||||||
|
"message": "Either useAnnotations must be true, or images must be provided with at least one item",
|
||||||
|
"rule": "!(has(self.useAnnotations) && self.useAnnotations == true) ? (has(self.images) && size(self.images) > 0) : true"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"additionalProperties": false
|
||||||
|
},
|
||||||
|
"minItems": 1,
|
||||||
|
"type": "array",
|
||||||
|
"x-kubernetes-list-map-keys": [
|
||||||
|
"namePattern"
|
||||||
|
],
|
||||||
|
"x-kubernetes-list-type": "map"
|
||||||
|
},
|
||||||
|
"commonUpdateSettings": {
|
||||||
|
"description": "CommonUpdateSettings provides global default settings for update strategies,\ntag filtering, pull secrets, etc., for all applications matched by this CR.\nThese can be overridden at the ApplicationRef or ImageConfig level.",
|
||||||
|
"properties": {
|
||||||
|
"allowTags": {
|
||||||
|
"description": "AllowTags is a regex pattern for tags to allow.\nThis acts as the default if not overridden.",
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"forceUpdate": {
|
||||||
|
"default": false,
|
||||||
|
"description": "ForceUpdate specifies whether updates should be forced.\nThis acts as the default if not overridden.",
|
||||||
|
"type": "boolean"
|
||||||
|
},
|
||||||
|
"ignoreTags": {
|
||||||
|
"description": "IgnoreTags is a list of glob-like patterns of tags to ignore.\nThis acts as the default and can be overridden at more specific levels.",
|
||||||
|
"items": {
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"type": "array",
|
||||||
|
"x-kubernetes-list-type": "atomic"
|
||||||
|
},
|
||||||
|
"platforms": {
|
||||||
|
"description": "Platforms specifies a list of target platforms (e.g., \"linux/amd64\", \"linux/arm64\").\nIf specified, the image updater will consider these platforms when checking for new versions or digests.",
|
||||||
|
"items": {
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"type": "array",
|
||||||
|
"x-kubernetes-list-type": "atomic"
|
||||||
|
},
|
||||||
|
"pullSecret": {
|
||||||
|
"description": "PullSecret is the pull secret to use for images.\nThis acts as the default if not overridden.",
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"updateStrategy": {
|
||||||
|
"default": "semver",
|
||||||
|
"description": "UpdateStrategy defines the update strategy to apply.\nExamples: \"semver\", \"latest\", \"digest\", \"name\".\nThis acts as the default if not overridden at a more specific level.",
|
||||||
|
"type": "string"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"type": "object",
|
||||||
|
"additionalProperties": false
|
||||||
|
},
|
||||||
|
"writeBackConfig": {
|
||||||
|
"description": "WriteBackConfig provides global default settings for how and where to write back image updates.\nThis can be overridden at the ApplicationRef level.",
|
||||||
|
"properties": {
|
||||||
|
"gitConfig": {
|
||||||
|
"description": "GitConfig provides Git configuration settings if the write-back method involves Git.\nThis can only be used when method is \"git\" or starts with \"git:\".",
|
||||||
|
"properties": {
|
||||||
|
"branch": {
|
||||||
|
"description": "Branch to commit updates to.\nRequired if write-back method is Git and this is not specified at the spec level.",
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"pullRequest": {
|
||||||
|
"description": "PullRequest configures creation of pull requests when writing back image updates to Git.\nWhen set, the controller opens a PR instead of pushing to the branch.\nIf not specified write back config method is `git`.",
|
||||||
|
"properties": {
|
||||||
|
"github": {
|
||||||
|
"description": "GitHub configures PR creation via the GitHub API.",
|
||||||
|
"type": "object"
|
||||||
|
},
|
||||||
|
"gitlab": {
|
||||||
|
"description": "GitLab configures MR creation via the GitLab API.",
|
||||||
|
"type": "object"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"type": "object",
|
||||||
|
"x-kubernetes-validations": [
|
||||||
|
{
|
||||||
|
"message": "Exactly one of github or gitlab must be set",
|
||||||
|
"rule": "(has(self.github) ? 1 : 0) + (has(self.gitlab) ? 1 : 0) == 1"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"additionalProperties": false
|
||||||
|
},
|
||||||
|
"repository": {
|
||||||
|
"description": "Repository URL to commit changes to.\nIf not specified here or at the spec level, the controller MUST infer it from the\nArgo CD Application's `spec.source.repoURL`. This field allows overriding that.",
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"writeBackTarget": {
|
||||||
|
"description": "WriteBackTarget defines the path and type of file to update in the Git repository.\nExamples: \"helmvalues:./helm/values.yaml\", \"kustomization:./kustomize/overlays/production\".\nFor ApplicationSet usage, `{{ .app.path.path }}` should be resolved by ApplicationSet\nbefore this CR is generated, resulting in a concrete path here.\nRequired if write-back method is Git and this is not specified at the spec level.",
|
||||||
|
"type": "string"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"type": "object",
|
||||||
|
"additionalProperties": false
|
||||||
|
},
|
||||||
|
"method": {
|
||||||
|
"default": "argocd",
|
||||||
|
"description": "Method defines the method for writing back updated image versions.\nThis acts as the default if not overridden. If not specified, defaults to \"argocd\".",
|
||||||
|
"pattern": "^(argocd|git|git:[a-zA-Z0-9][a-zA-Z0-9-._/:]*)$",
|
||||||
|
"type": "string"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"required": [
|
||||||
|
"method"
|
||||||
|
],
|
||||||
|
"type": "object",
|
||||||
|
"additionalProperties": false
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"required": [
|
||||||
|
"applicationRefs"
|
||||||
|
],
|
||||||
|
"type": "object",
|
||||||
|
"additionalProperties": false
|
||||||
|
},
|
||||||
|
"status": {
|
||||||
|
"description": "ImageUpdaterStatus defines the observed state of ImageUpdater",
|
||||||
|
"properties": {
|
||||||
|
"applicationsMatched": {
|
||||||
|
"description": "ApplicationsMatched is the number of Argo CD applications matched by this CR's selectors.",
|
||||||
|
"format": "int32",
|
||||||
|
"minimum": 0,
|
||||||
|
"type": "integer"
|
||||||
|
},
|
||||||
|
"conditions": {
|
||||||
|
"description": "Conditions represent the latest available observations of the resource's state.",
|
||||||
|
"items": {
|
||||||
|
"description": "Condition contains details for one aspect of the current state of this API Resource.",
|
||||||
|
"properties": {
|
||||||
|
"lastTransitionTime": {
|
||||||
|
"description": "lastTransitionTime is the last time the condition transitioned from one status to another.\nThis should be when the underlying condition changed. If that is not known, then using the time when the API field changed is acceptable.",
|
||||||
|
"format": "date-time",
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"message": {
|
||||||
|
"description": "message is a human readable message indicating details about the transition.\nThis may be an empty string.",
|
||||||
|
"maxLength": 32768,
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"observedGeneration": {
|
||||||
|
"description": "observedGeneration represents the .metadata.generation that the condition was set based upon.\nFor instance, if .metadata.generation is currently 12, but the .status.conditions[x].observedGeneration is 9, the condition is out of date\nwith respect to the current state of the instance.",
|
||||||
|
"format": "int64",
|
||||||
|
"minimum": 0,
|
||||||
|
"type": "integer"
|
||||||
|
},
|
||||||
|
"reason": {
|
||||||
|
"description": "reason contains a programmatic identifier indicating the reason for the condition's last transition.\nProducers of specific condition types may define expected values and meanings for this field,\nand whether the values are considered a guaranteed API.\nThe value should be a CamelCase string.\nThis field may not be empty.",
|
||||||
|
"maxLength": 1024,
|
||||||
|
"minLength": 1,
|
||||||
|
"pattern": "^[A-Za-z]([A-Za-z0-9_,:]*[A-Za-z0-9_])?$",
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"status": {
|
||||||
|
"description": "status of the condition, one of True, False, Unknown.",
|
||||||
|
"enum": [
|
||||||
|
"True",
|
||||||
|
"False",
|
||||||
|
"Unknown"
|
||||||
|
],
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"type": {
|
||||||
|
"description": "type of condition in CamelCase or in foo.example.com/CamelCase.",
|
||||||
|
"maxLength": 316,
|
||||||
|
"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])$",
|
||||||
|
"type": "string"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"required": [
|
||||||
|
"lastTransitionTime",
|
||||||
|
"message",
|
||||||
|
"reason",
|
||||||
|
"status",
|
||||||
|
"type"
|
||||||
|
],
|
||||||
|
"type": "object",
|
||||||
|
"additionalProperties": false
|
||||||
|
},
|
||||||
|
"type": "array",
|
||||||
|
"x-kubernetes-list-map-keys": [
|
||||||
|
"type"
|
||||||
|
],
|
||||||
|
"x-kubernetes-list-type": "map"
|
||||||
|
},
|
||||||
|
"imagesManaged": {
|
||||||
|
"description": "ImagesManaged is the number of images that were eligible for update checking.",
|
||||||
|
"format": "int32",
|
||||||
|
"minimum": 0,
|
||||||
|
"type": "integer"
|
||||||
|
},
|
||||||
|
"lastCheckedAt": {
|
||||||
|
"description": "LastCheckedAt indicates when the controller last checked for image updates.",
|
||||||
|
"format": "date-time",
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"lastUpdatedAt": {
|
||||||
|
"description": "LastUpdatedAt indicates when the controller last performed an image update.",
|
||||||
|
"format": "date-time",
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"observedGeneration": {
|
||||||
|
"description": "ObservedGeneration is the most recent generation observed by the controller.",
|
||||||
|
"format": "int64",
|
||||||
|
"minimum": 0,
|
||||||
|
"type": "integer"
|
||||||
|
},
|
||||||
|
"recentUpdates": {
|
||||||
|
"description": "RecentUpdates contains the list of image updates performed during the last update cycle.",
|
||||||
|
"items": {
|
||||||
|
"description": "RecentUpdate records a single image update performed during the last update.",
|
||||||
|
"properties": {
|
||||||
|
"alias": {
|
||||||
|
"description": "Alias is the alias of the image configuration that was updated.",
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"applicationsUpdated": {
|
||||||
|
"description": "ApplicationsUpdated is the number of applications in which this image was updated.",
|
||||||
|
"format": "int32",
|
||||||
|
"minimum": 0,
|
||||||
|
"type": "integer"
|
||||||
|
},
|
||||||
|
"image": {
|
||||||
|
"description": "Image is the full image reference.",
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"message": {
|
||||||
|
"description": "Message provides a human-readable description of the update action.",
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"newVersion": {
|
||||||
|
"description": "NewVersion is the new tag or digest the image was updated to.",
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"updatedAt": {
|
||||||
|
"description": "UpdatedAt is the timestamp when the update was applied.",
|
||||||
|
"format": "date-time",
|
||||||
|
"type": "string"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"required": [
|
||||||
|
"alias",
|
||||||
|
"applicationsUpdated",
|
||||||
|
"image",
|
||||||
|
"newVersion",
|
||||||
|
"updatedAt"
|
||||||
|
],
|
||||||
|
"type": "object",
|
||||||
|
"additionalProperties": false
|
||||||
|
},
|
||||||
|
"type": "array",
|
||||||
|
"x-kubernetes-list-type": "atomic"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"type": "object",
|
||||||
|
"additionalProperties": false
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"type": "object"
|
||||||
|
}
|
||||||
@@ -0,0 +1,199 @@
|
|||||||
|
{
|
||||||
|
"description": "KeycloakAuthenticationFlow manages a Keycloak authentication flow.",
|
||||||
|
"properties": {
|
||||||
|
"apiVersion": {
|
||||||
|
"description": "APIVersion defines the versioned schema of this representation of an object.\nServers should convert recognized schemas to the latest internal value, and\nmay reject unrecognized values.\nMore info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources",
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"kind": {
|
||||||
|
"description": "Kind is a string value representing the REST resource this object represents.\nServers may infer this from the endpoint the client submits requests to.\nCannot be updated.\nIn CamelCase.\nMore info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds",
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"metadata": {
|
||||||
|
"type": "object"
|
||||||
|
},
|
||||||
|
"spec": {
|
||||||
|
"description": "KeycloakAuthenticationFlowSpec defines the desired state of KeycloakAuthenticationFlow",
|
||||||
|
"properties": {
|
||||||
|
"alias": {
|
||||||
|
"description": "Alias is the unique identifier for this flow within the realm.",
|
||||||
|
"minLength": 1,
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"clusterRealmRef": {
|
||||||
|
"description": "ClusterRealmRef is a reference to a ClusterKeycloakRealm.\nOne of realmRef or clusterRealmRef must be specified.",
|
||||||
|
"properties": {
|
||||||
|
"name": {
|
||||||
|
"description": "Name of the cluster-scoped resource",
|
||||||
|
"type": "string"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"required": [
|
||||||
|
"name"
|
||||||
|
],
|
||||||
|
"type": "object",
|
||||||
|
"additionalProperties": false
|
||||||
|
},
|
||||||
|
"description": {
|
||||||
|
"description": "Description is a human-readable description of the flow.",
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"executions": {
|
||||||
|
"description": "Executions is the ordered list of executions for this flow as a JSON\narray. Each entry is either a leaf authenticator or a nested sub-flow.\n\nLeaf authenticator (object fields):\n\n authenticator: Keycloak provider ID, e.g. \"auth-cookie\".\n requirement: REQUIRED | ALTERNATIVE | DISABLED | CONDITIONAL.\n authenticatorConfig: optional map[string]string applied to the\n execution after creation.\n\nSub-flow (object fields):\n\n subFlow: { alias, providerId, description? } \u2014 the\n child flow definition. providerId is typically\n \"basic-flow\" or \"form-flow\"; \"form-flow\" is\n required when the children are FormAction\n providers (e.g. registration-user-creation).\n requirement: REQUIRED | ALTERNATIVE | DISABLED | CONDITIONAL.\n executions: ordered list of child executions, recursively\n using the same shape. As a convenience, child\n executions may also be placed inside\n subFlow.executions; if both are present, the\n inline list precedes the sibling list.\n\nNesting depth is unconstrained.",
|
||||||
|
"x-kubernetes-preserve-unknown-fields": true
|
||||||
|
},
|
||||||
|
"providerId": {
|
||||||
|
"description": "ProviderId is the top-level flow type. Keycloak ships with \"basic-flow\"\nand \"client-flow\"; sub-flows may additionally use \"form-flow\".",
|
||||||
|
"minLength": 1,
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"realmRef": {
|
||||||
|
"description": "RealmRef is a reference to a KeycloakRealm.\nOne of realmRef or clusterRealmRef must be specified.",
|
||||||
|
"properties": {
|
||||||
|
"name": {
|
||||||
|
"description": "Name of the resource",
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"namespace": {
|
||||||
|
"description": "Namespace of the resource (optional, defaults to the same namespace)",
|
||||||
|
"type": "string"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"required": [
|
||||||
|
"name"
|
||||||
|
],
|
||||||
|
"type": "object",
|
||||||
|
"additionalProperties": false
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"required": [
|
||||||
|
"alias",
|
||||||
|
"providerId"
|
||||||
|
],
|
||||||
|
"type": "object",
|
||||||
|
"additionalProperties": false
|
||||||
|
},
|
||||||
|
"status": {
|
||||||
|
"description": "KeycloakAuthenticationFlowStatus defines the observed state of KeycloakAuthenticationFlow",
|
||||||
|
"properties": {
|
||||||
|
"conditions": {
|
||||||
|
"description": "Conditions represent the latest available observations.",
|
||||||
|
"items": {
|
||||||
|
"description": "Condition contains details for one aspect of the current state of this API Resource.",
|
||||||
|
"properties": {
|
||||||
|
"lastTransitionTime": {
|
||||||
|
"description": "lastTransitionTime is the last time the condition transitioned from one status to another.\nThis should be when the underlying condition changed. If that is not known, then using the time when the API field changed is acceptable.",
|
||||||
|
"format": "date-time",
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"message": {
|
||||||
|
"description": "message is a human readable message indicating details about the transition.\nThis may be an empty string.",
|
||||||
|
"maxLength": 32768,
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"observedGeneration": {
|
||||||
|
"description": "observedGeneration represents the .metadata.generation that the condition was set based upon.\nFor instance, if .metadata.generation is currently 12, but the .status.conditions[x].observedGeneration is 9, the condition is out of date\nwith respect to the current state of the instance.",
|
||||||
|
"format": "int64",
|
||||||
|
"minimum": 0,
|
||||||
|
"type": "integer"
|
||||||
|
},
|
||||||
|
"reason": {
|
||||||
|
"description": "reason contains a programmatic identifier indicating the reason for the condition's last transition.\nProducers of specific condition types may define expected values and meanings for this field,\nand whether the values are considered a guaranteed API.\nThe value should be a CamelCase string.\nThis field may not be empty.",
|
||||||
|
"maxLength": 1024,
|
||||||
|
"minLength": 1,
|
||||||
|
"pattern": "^[A-Za-z]([A-Za-z0-9_,:]*[A-Za-z0-9_])?$",
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"status": {
|
||||||
|
"description": "status of the condition, one of True, False, Unknown.",
|
||||||
|
"enum": [
|
||||||
|
"True",
|
||||||
|
"False",
|
||||||
|
"Unknown"
|
||||||
|
],
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"type": {
|
||||||
|
"description": "type of condition in CamelCase or in foo.example.com/CamelCase.",
|
||||||
|
"maxLength": 316,
|
||||||
|
"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])$",
|
||||||
|
"type": "string"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"required": [
|
||||||
|
"lastTransitionTime",
|
||||||
|
"message",
|
||||||
|
"reason",
|
||||||
|
"status",
|
||||||
|
"type"
|
||||||
|
],
|
||||||
|
"type": "object",
|
||||||
|
"additionalProperties": false
|
||||||
|
},
|
||||||
|
"type": "array"
|
||||||
|
},
|
||||||
|
"flowID": {
|
||||||
|
"description": "FlowID is the Keycloak internal ID of the top-level flow.",
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"instance": {
|
||||||
|
"description": "Instance contains the resolved instance reference.",
|
||||||
|
"properties": {
|
||||||
|
"clusterInstanceRef": {
|
||||||
|
"description": "ClusterInstanceRef is the name of the cluster instance",
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"instanceRef": {
|
||||||
|
"description": "InstanceRef is the name of the namespaced instance",
|
||||||
|
"type": "string"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"type": "object",
|
||||||
|
"additionalProperties": false
|
||||||
|
},
|
||||||
|
"message": {
|
||||||
|
"description": "Message contains additional information.",
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"observedGeneration": {
|
||||||
|
"description": "ObservedGeneration is the generation of the spec that was last processed.",
|
||||||
|
"format": "int64",
|
||||||
|
"type": "integer"
|
||||||
|
},
|
||||||
|
"ready": {
|
||||||
|
"description": "Ready indicates if the flow is synchronized with Keycloak.",
|
||||||
|
"type": "boolean"
|
||||||
|
},
|
||||||
|
"realm": {
|
||||||
|
"description": "Realm contains the resolved realm reference.",
|
||||||
|
"properties": {
|
||||||
|
"clusterRealmRef": {
|
||||||
|
"description": "ClusterRealmRef is the name of the cluster realm",
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"realmRef": {
|
||||||
|
"description": "RealmRef is the name of the namespaced realm",
|
||||||
|
"type": "string"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"type": "object",
|
||||||
|
"additionalProperties": false
|
||||||
|
},
|
||||||
|
"resourcePath": {
|
||||||
|
"description": "ResourcePath is the Keycloak API path for this flow.",
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"status": {
|
||||||
|
"description": "Status is a human-readable status message.",
|
||||||
|
"type": "string"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"required": [
|
||||||
|
"ready"
|
||||||
|
],
|
||||||
|
"type": "object",
|
||||||
|
"additionalProperties": false
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"type": "object"
|
||||||
|
}
|
||||||
@@ -0,0 +1,213 @@
|
|||||||
|
{
|
||||||
|
"description": "KeycloakClient defines a client within a KeycloakRealm",
|
||||||
|
"properties": {
|
||||||
|
"apiVersion": {
|
||||||
|
"description": "APIVersion defines the versioned schema of this representation of an object.\nServers should convert recognized schemas to the latest internal value, and\nmay reject unrecognized values.\nMore info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources",
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"kind": {
|
||||||
|
"description": "Kind is a string value representing the REST resource this object represents.\nServers may infer this from the endpoint the client submits requests to.\nCannot be updated.\nIn CamelCase.\nMore info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds",
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"metadata": {
|
||||||
|
"type": "object"
|
||||||
|
},
|
||||||
|
"spec": {
|
||||||
|
"description": "KeycloakClientSpec defines the desired state of KeycloakClient",
|
||||||
|
"properties": {
|
||||||
|
"clientId": {
|
||||||
|
"description": "ClientId is the client ID in Keycloak (defaults to metadata.name)",
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"clientSecretRef": {
|
||||||
|
"description": "ClientSecretRef configures the Kubernetes Secret for client credentials.\nIf the secret exists, its value is used. If it doesn't exist and Create is true,\nthe operator auto-generates a secret and creates it.",
|
||||||
|
"properties": {
|
||||||
|
"clientIdKey": {
|
||||||
|
"description": "ClientIdKey is the key for the client ID in the secret.\nDefaults to \"client-id\".",
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"clientSecretKey": {
|
||||||
|
"description": "ClientSecretKey is the key for the client secret value in the secret.\nDefaults to \"client-secret\".",
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"create": {
|
||||||
|
"default": true,
|
||||||
|
"description": "Create determines behavior when the secret doesn't exist.\nIf true (default): auto-generate a secret and create the Secret.\nIf false: error if the secret doesn't exist (strict mode for GitOps).",
|
||||||
|
"type": "boolean"
|
||||||
|
},
|
||||||
|
"name": {
|
||||||
|
"description": "Name of the Kubernetes Secret",
|
||||||
|
"type": "string"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"required": [
|
||||||
|
"name"
|
||||||
|
],
|
||||||
|
"type": "object",
|
||||||
|
"additionalProperties": false
|
||||||
|
},
|
||||||
|
"clusterRealmRef": {
|
||||||
|
"description": "ClusterRealmRef is a reference to a ClusterKeycloakRealm\nOne of realmRef or clusterRealmRef must be specified",
|
||||||
|
"properties": {
|
||||||
|
"name": {
|
||||||
|
"description": "Name of the cluster-scoped resource",
|
||||||
|
"type": "string"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"required": [
|
||||||
|
"name"
|
||||||
|
],
|
||||||
|
"type": "object",
|
||||||
|
"additionalProperties": false
|
||||||
|
},
|
||||||
|
"definition": {
|
||||||
|
"description": "Definition contains the Keycloak ClientRepresentation",
|
||||||
|
"type": "object",
|
||||||
|
"x-kubernetes-preserve-unknown-fields": true
|
||||||
|
},
|
||||||
|
"realmRef": {
|
||||||
|
"description": "RealmRef is a reference to a KeycloakRealm\nOne of realmRef or clusterRealmRef must be specified",
|
||||||
|
"properties": {
|
||||||
|
"name": {
|
||||||
|
"description": "Name of the resource",
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"namespace": {
|
||||||
|
"description": "Namespace of the resource (optional, defaults to the same namespace)",
|
||||||
|
"type": "string"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"required": [
|
||||||
|
"name"
|
||||||
|
],
|
||||||
|
"type": "object",
|
||||||
|
"additionalProperties": false
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"type": "object",
|
||||||
|
"additionalProperties": false
|
||||||
|
},
|
||||||
|
"status": {
|
||||||
|
"description": "KeycloakClientStatus defines the observed state of KeycloakClient",
|
||||||
|
"properties": {
|
||||||
|
"clientUUID": {
|
||||||
|
"description": "ClientUUID is the Keycloak internal ID",
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"conditions": {
|
||||||
|
"description": "Conditions represent the latest available observations",
|
||||||
|
"items": {
|
||||||
|
"description": "Condition contains details for one aspect of the current state of this API Resource.",
|
||||||
|
"properties": {
|
||||||
|
"lastTransitionTime": {
|
||||||
|
"description": "lastTransitionTime is the last time the condition transitioned from one status to another.\nThis should be when the underlying condition changed. If that is not known, then using the time when the API field changed is acceptable.",
|
||||||
|
"format": "date-time",
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"message": {
|
||||||
|
"description": "message is a human readable message indicating details about the transition.\nThis may be an empty string.",
|
||||||
|
"maxLength": 32768,
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"observedGeneration": {
|
||||||
|
"description": "observedGeneration represents the .metadata.generation that the condition was set based upon.\nFor instance, if .metadata.generation is currently 12, but the .status.conditions[x].observedGeneration is 9, the condition is out of date\nwith respect to the current state of the instance.",
|
||||||
|
"format": "int64",
|
||||||
|
"minimum": 0,
|
||||||
|
"type": "integer"
|
||||||
|
},
|
||||||
|
"reason": {
|
||||||
|
"description": "reason contains a programmatic identifier indicating the reason for the condition's last transition.\nProducers of specific condition types may define expected values and meanings for this field,\nand whether the values are considered a guaranteed API.\nThe value should be a CamelCase string.\nThis field may not be empty.",
|
||||||
|
"maxLength": 1024,
|
||||||
|
"minLength": 1,
|
||||||
|
"pattern": "^[A-Za-z]([A-Za-z0-9_,:]*[A-Za-z0-9_])?$",
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"status": {
|
||||||
|
"description": "status of the condition, one of True, False, Unknown.",
|
||||||
|
"enum": [
|
||||||
|
"True",
|
||||||
|
"False",
|
||||||
|
"Unknown"
|
||||||
|
],
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"type": {
|
||||||
|
"description": "type of condition in CamelCase or in foo.example.com/CamelCase.",
|
||||||
|
"maxLength": 316,
|
||||||
|
"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])$",
|
||||||
|
"type": "string"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"required": [
|
||||||
|
"lastTransitionTime",
|
||||||
|
"message",
|
||||||
|
"reason",
|
||||||
|
"status",
|
||||||
|
"type"
|
||||||
|
],
|
||||||
|
"type": "object",
|
||||||
|
"additionalProperties": false
|
||||||
|
},
|
||||||
|
"type": "array"
|
||||||
|
},
|
||||||
|
"instance": {
|
||||||
|
"description": "Instance contains the resolved instance reference",
|
||||||
|
"properties": {
|
||||||
|
"clusterInstanceRef": {
|
||||||
|
"description": "ClusterInstanceRef is the name of the cluster instance",
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"instanceRef": {
|
||||||
|
"description": "InstanceRef is the name of the namespaced instance",
|
||||||
|
"type": "string"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"type": "object",
|
||||||
|
"additionalProperties": false
|
||||||
|
},
|
||||||
|
"message": {
|
||||||
|
"description": "Message contains additional information",
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"observedGeneration": {
|
||||||
|
"description": "ObservedGeneration is the generation of the spec that was last processed",
|
||||||
|
"format": "int64",
|
||||||
|
"type": "integer"
|
||||||
|
},
|
||||||
|
"ready": {
|
||||||
|
"description": "Ready indicates if the client is ready",
|
||||||
|
"type": "boolean"
|
||||||
|
},
|
||||||
|
"realm": {
|
||||||
|
"description": "Realm contains the resolved realm reference",
|
||||||
|
"properties": {
|
||||||
|
"clusterRealmRef": {
|
||||||
|
"description": "ClusterRealmRef is the name of the cluster realm",
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"realmRef": {
|
||||||
|
"description": "RealmRef is the name of the namespaced realm",
|
||||||
|
"type": "string"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"type": "object",
|
||||||
|
"additionalProperties": false
|
||||||
|
},
|
||||||
|
"resourcePath": {
|
||||||
|
"description": "ResourcePath is the Keycloak API path for this client",
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"status": {
|
||||||
|
"description": "Status is a human-readable status message",
|
||||||
|
"type": "string"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"required": [
|
||||||
|
"ready"
|
||||||
|
],
|
||||||
|
"type": "object",
|
||||||
|
"additionalProperties": false
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"type": "object"
|
||||||
|
}
|
||||||
@@ -0,0 +1,176 @@
|
|||||||
|
{
|
||||||
|
"description": "KeycloakClientScope defines a client scope within a KeycloakRealm",
|
||||||
|
"properties": {
|
||||||
|
"apiVersion": {
|
||||||
|
"description": "APIVersion defines the versioned schema of this representation of an object.\nServers should convert recognized schemas to the latest internal value, and\nmay reject unrecognized values.\nMore info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources",
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"kind": {
|
||||||
|
"description": "Kind is a string value representing the REST resource this object represents.\nServers may infer this from the endpoint the client submits requests to.\nCannot be updated.\nIn CamelCase.\nMore info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds",
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"metadata": {
|
||||||
|
"type": "object"
|
||||||
|
},
|
||||||
|
"spec": {
|
||||||
|
"description": "KeycloakClientScopeSpec defines the desired state of KeycloakClientScope",
|
||||||
|
"properties": {
|
||||||
|
"clusterRealmRef": {
|
||||||
|
"description": "ClusterRealmRef is a reference to a ClusterKeycloakRealm\nOne of realmRef or clusterRealmRef must be specified",
|
||||||
|
"properties": {
|
||||||
|
"name": {
|
||||||
|
"description": "Name of the cluster-scoped resource",
|
||||||
|
"type": "string"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"required": [
|
||||||
|
"name"
|
||||||
|
],
|
||||||
|
"type": "object",
|
||||||
|
"additionalProperties": false
|
||||||
|
},
|
||||||
|
"definition": {
|
||||||
|
"description": "Definition contains the Keycloak ClientScopeRepresentation",
|
||||||
|
"type": "object",
|
||||||
|
"x-kubernetes-preserve-unknown-fields": true
|
||||||
|
},
|
||||||
|
"realmRef": {
|
||||||
|
"description": "RealmRef is a reference to a KeycloakRealm\nOne of realmRef or clusterRealmRef must be specified",
|
||||||
|
"properties": {
|
||||||
|
"name": {
|
||||||
|
"description": "Name of the resource",
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"namespace": {
|
||||||
|
"description": "Namespace of the resource (optional, defaults to the same namespace)",
|
||||||
|
"type": "string"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"required": [
|
||||||
|
"name"
|
||||||
|
],
|
||||||
|
"type": "object",
|
||||||
|
"additionalProperties": false
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"required": [
|
||||||
|
"definition"
|
||||||
|
],
|
||||||
|
"type": "object",
|
||||||
|
"additionalProperties": false
|
||||||
|
},
|
||||||
|
"status": {
|
||||||
|
"description": "KeycloakClientScopeStatus defines the observed state of KeycloakClientScope",
|
||||||
|
"properties": {
|
||||||
|
"conditions": {
|
||||||
|
"description": "Conditions represent the latest available observations",
|
||||||
|
"items": {
|
||||||
|
"description": "Condition contains details for one aspect of the current state of this API Resource.",
|
||||||
|
"properties": {
|
||||||
|
"lastTransitionTime": {
|
||||||
|
"description": "lastTransitionTime is the last time the condition transitioned from one status to another.\nThis should be when the underlying condition changed. If that is not known, then using the time when the API field changed is acceptable.",
|
||||||
|
"format": "date-time",
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"message": {
|
||||||
|
"description": "message is a human readable message indicating details about the transition.\nThis may be an empty string.",
|
||||||
|
"maxLength": 32768,
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"observedGeneration": {
|
||||||
|
"description": "observedGeneration represents the .metadata.generation that the condition was set based upon.\nFor instance, if .metadata.generation is currently 12, but the .status.conditions[x].observedGeneration is 9, the condition is out of date\nwith respect to the current state of the instance.",
|
||||||
|
"format": "int64",
|
||||||
|
"minimum": 0,
|
||||||
|
"type": "integer"
|
||||||
|
},
|
||||||
|
"reason": {
|
||||||
|
"description": "reason contains a programmatic identifier indicating the reason for the condition's last transition.\nProducers of specific condition types may define expected values and meanings for this field,\nand whether the values are considered a guaranteed API.\nThe value should be a CamelCase string.\nThis field may not be empty.",
|
||||||
|
"maxLength": 1024,
|
||||||
|
"minLength": 1,
|
||||||
|
"pattern": "^[A-Za-z]([A-Za-z0-9_,:]*[A-Za-z0-9_])?$",
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"status": {
|
||||||
|
"description": "status of the condition, one of True, False, Unknown.",
|
||||||
|
"enum": [
|
||||||
|
"True",
|
||||||
|
"False",
|
||||||
|
"Unknown"
|
||||||
|
],
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"type": {
|
||||||
|
"description": "type of condition in CamelCase or in foo.example.com/CamelCase.",
|
||||||
|
"maxLength": 316,
|
||||||
|
"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])$",
|
||||||
|
"type": "string"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"required": [
|
||||||
|
"lastTransitionTime",
|
||||||
|
"message",
|
||||||
|
"reason",
|
||||||
|
"status",
|
||||||
|
"type"
|
||||||
|
],
|
||||||
|
"type": "object",
|
||||||
|
"additionalProperties": false
|
||||||
|
},
|
||||||
|
"type": "array"
|
||||||
|
},
|
||||||
|
"instance": {
|
||||||
|
"description": "Instance contains the resolved instance reference",
|
||||||
|
"properties": {
|
||||||
|
"clusterInstanceRef": {
|
||||||
|
"description": "ClusterInstanceRef is the name of the cluster instance",
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"instanceRef": {
|
||||||
|
"description": "InstanceRef is the name of the namespaced instance",
|
||||||
|
"type": "string"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"type": "object",
|
||||||
|
"additionalProperties": false
|
||||||
|
},
|
||||||
|
"message": {
|
||||||
|
"description": "Message contains additional information",
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"ready": {
|
||||||
|
"description": "Ready indicates if the client scope is ready",
|
||||||
|
"type": "boolean"
|
||||||
|
},
|
||||||
|
"realm": {
|
||||||
|
"description": "Realm contains the resolved realm reference",
|
||||||
|
"properties": {
|
||||||
|
"clusterRealmRef": {
|
||||||
|
"description": "ClusterRealmRef is the name of the cluster realm",
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"realmRef": {
|
||||||
|
"description": "RealmRef is the name of the namespaced realm",
|
||||||
|
"type": "string"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"type": "object",
|
||||||
|
"additionalProperties": false
|
||||||
|
},
|
||||||
|
"resourcePath": {
|
||||||
|
"description": "ResourcePath is the Keycloak API path for this client scope",
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"status": {
|
||||||
|
"description": "Status is a human-readable status message",
|
||||||
|
"type": "string"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"required": [
|
||||||
|
"ready"
|
||||||
|
],
|
||||||
|
"type": "object",
|
||||||
|
"additionalProperties": false
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"type": "object"
|
||||||
|
}
|
||||||
@@ -0,0 +1,193 @@
|
|||||||
|
{
|
||||||
|
"description": "KeycloakComponent defines a component within a KeycloakRealm",
|
||||||
|
"properties": {
|
||||||
|
"apiVersion": {
|
||||||
|
"description": "APIVersion defines the versioned schema of this representation of an object.\nServers should convert recognized schemas to the latest internal value, and\nmay reject unrecognized values.\nMore info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources",
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"kind": {
|
||||||
|
"description": "Kind is a string value representing the REST resource this object represents.\nServers may infer this from the endpoint the client submits requests to.\nCannot be updated.\nIn CamelCase.\nMore info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds",
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"metadata": {
|
||||||
|
"type": "object"
|
||||||
|
},
|
||||||
|
"spec": {
|
||||||
|
"description": "KeycloakComponentSpec defines the desired state of KeycloakComponent",
|
||||||
|
"properties": {
|
||||||
|
"clusterRealmRef": {
|
||||||
|
"description": "ClusterRealmRef is a reference to a ClusterKeycloakRealm\nOne of realmRef or clusterRealmRef must be specified",
|
||||||
|
"properties": {
|
||||||
|
"name": {
|
||||||
|
"description": "Name of the cluster-scoped resource",
|
||||||
|
"type": "string"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"required": [
|
||||||
|
"name"
|
||||||
|
],
|
||||||
|
"type": "object",
|
||||||
|
"additionalProperties": false
|
||||||
|
},
|
||||||
|
"definition": {
|
||||||
|
"description": "Definition contains the Keycloak ComponentRepresentation",
|
||||||
|
"type": "object",
|
||||||
|
"x-kubernetes-preserve-unknown-fields": true
|
||||||
|
},
|
||||||
|
"realmRef": {
|
||||||
|
"description": "RealmRef is a reference to a KeycloakRealm\nOne of realmRef or clusterRealmRef must be specified",
|
||||||
|
"properties": {
|
||||||
|
"name": {
|
||||||
|
"description": "Name of the resource",
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"namespace": {
|
||||||
|
"description": "Namespace of the resource (optional, defaults to the same namespace)",
|
||||||
|
"type": "string"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"required": [
|
||||||
|
"name"
|
||||||
|
],
|
||||||
|
"type": "object",
|
||||||
|
"additionalProperties": false
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"required": [
|
||||||
|
"definition"
|
||||||
|
],
|
||||||
|
"type": "object",
|
||||||
|
"additionalProperties": false
|
||||||
|
},
|
||||||
|
"status": {
|
||||||
|
"description": "KeycloakComponentStatus defines the observed state of KeycloakComponent",
|
||||||
|
"properties": {
|
||||||
|
"componentID": {
|
||||||
|
"description": "ComponentID is the Keycloak internal component ID",
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"componentName": {
|
||||||
|
"description": "ComponentName is the component name in Keycloak",
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"conditions": {
|
||||||
|
"description": "Conditions represent the latest available observations",
|
||||||
|
"items": {
|
||||||
|
"description": "Condition contains details for one aspect of the current state of this API Resource.",
|
||||||
|
"properties": {
|
||||||
|
"lastTransitionTime": {
|
||||||
|
"description": "lastTransitionTime is the last time the condition transitioned from one status to another.\nThis should be when the underlying condition changed. If that is not known, then using the time when the API field changed is acceptable.",
|
||||||
|
"format": "date-time",
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"message": {
|
||||||
|
"description": "message is a human readable message indicating details about the transition.\nThis may be an empty string.",
|
||||||
|
"maxLength": 32768,
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"observedGeneration": {
|
||||||
|
"description": "observedGeneration represents the .metadata.generation that the condition was set based upon.\nFor instance, if .metadata.generation is currently 12, but the .status.conditions[x].observedGeneration is 9, the condition is out of date\nwith respect to the current state of the instance.",
|
||||||
|
"format": "int64",
|
||||||
|
"minimum": 0,
|
||||||
|
"type": "integer"
|
||||||
|
},
|
||||||
|
"reason": {
|
||||||
|
"description": "reason contains a programmatic identifier indicating the reason for the condition's last transition.\nProducers of specific condition types may define expected values and meanings for this field,\nand whether the values are considered a guaranteed API.\nThe value should be a CamelCase string.\nThis field may not be empty.",
|
||||||
|
"maxLength": 1024,
|
||||||
|
"minLength": 1,
|
||||||
|
"pattern": "^[A-Za-z]([A-Za-z0-9_,:]*[A-Za-z0-9_])?$",
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"status": {
|
||||||
|
"description": "status of the condition, one of True, False, Unknown.",
|
||||||
|
"enum": [
|
||||||
|
"True",
|
||||||
|
"False",
|
||||||
|
"Unknown"
|
||||||
|
],
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"type": {
|
||||||
|
"description": "type of condition in CamelCase or in foo.example.com/CamelCase.",
|
||||||
|
"maxLength": 316,
|
||||||
|
"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])$",
|
||||||
|
"type": "string"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"required": [
|
||||||
|
"lastTransitionTime",
|
||||||
|
"message",
|
||||||
|
"reason",
|
||||||
|
"status",
|
||||||
|
"type"
|
||||||
|
],
|
||||||
|
"type": "object",
|
||||||
|
"additionalProperties": false
|
||||||
|
},
|
||||||
|
"type": "array"
|
||||||
|
},
|
||||||
|
"instance": {
|
||||||
|
"description": "Instance contains the resolved instance reference",
|
||||||
|
"properties": {
|
||||||
|
"clusterInstanceRef": {
|
||||||
|
"description": "ClusterInstanceRef is the name of the cluster instance",
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"instanceRef": {
|
||||||
|
"description": "InstanceRef is the name of the namespaced instance",
|
||||||
|
"type": "string"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"type": "object",
|
||||||
|
"additionalProperties": false
|
||||||
|
},
|
||||||
|
"message": {
|
||||||
|
"description": "Message contains additional information",
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"observedGeneration": {
|
||||||
|
"description": "ObservedGeneration is the generation of the spec that was last processed",
|
||||||
|
"format": "int64",
|
||||||
|
"type": "integer"
|
||||||
|
},
|
||||||
|
"providerType": {
|
||||||
|
"description": "ProviderType is the component provider type",
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"ready": {
|
||||||
|
"description": "Ready indicates if the component is ready",
|
||||||
|
"type": "boolean"
|
||||||
|
},
|
||||||
|
"realm": {
|
||||||
|
"description": "Realm contains the resolved realm reference",
|
||||||
|
"properties": {
|
||||||
|
"clusterRealmRef": {
|
||||||
|
"description": "ClusterRealmRef is the name of the cluster realm",
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"realmRef": {
|
||||||
|
"description": "RealmRef is the name of the namespaced realm",
|
||||||
|
"type": "string"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"type": "object",
|
||||||
|
"additionalProperties": false
|
||||||
|
},
|
||||||
|
"resourcePath": {
|
||||||
|
"description": "ResourcePath is the Keycloak API path for this component",
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"status": {
|
||||||
|
"description": "Status is a human-readable status message",
|
||||||
|
"type": "string"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"required": [
|
||||||
|
"ready"
|
||||||
|
],
|
||||||
|
"type": "object",
|
||||||
|
"additionalProperties": false
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"type": "object"
|
||||||
|
}
|
||||||
@@ -0,0 +1,198 @@
|
|||||||
|
{
|
||||||
|
"description": "KeycloakGroup defines a group within a KeycloakRealm",
|
||||||
|
"properties": {
|
||||||
|
"apiVersion": {
|
||||||
|
"description": "APIVersion defines the versioned schema of this representation of an object.\nServers should convert recognized schemas to the latest internal value, and\nmay reject unrecognized values.\nMore info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources",
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"kind": {
|
||||||
|
"description": "Kind is a string value representing the REST resource this object represents.\nServers may infer this from the endpoint the client submits requests to.\nCannot be updated.\nIn CamelCase.\nMore info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds",
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"metadata": {
|
||||||
|
"type": "object"
|
||||||
|
},
|
||||||
|
"spec": {
|
||||||
|
"description": "KeycloakGroupSpec defines the desired state of KeycloakGroup",
|
||||||
|
"properties": {
|
||||||
|
"clusterRealmRef": {
|
||||||
|
"description": "ClusterRealmRef is a reference to a ClusterKeycloakRealm\nOne of realmRef or clusterRealmRef must be specified",
|
||||||
|
"properties": {
|
||||||
|
"name": {
|
||||||
|
"description": "Name of the cluster-scoped resource",
|
||||||
|
"type": "string"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"required": [
|
||||||
|
"name"
|
||||||
|
],
|
||||||
|
"type": "object",
|
||||||
|
"additionalProperties": false
|
||||||
|
},
|
||||||
|
"definition": {
|
||||||
|
"description": "Definition contains the Keycloak GroupRepresentation",
|
||||||
|
"type": "object",
|
||||||
|
"x-kubernetes-preserve-unknown-fields": true
|
||||||
|
},
|
||||||
|
"parentGroupRef": {
|
||||||
|
"description": "ParentGroupRef is a reference to a parent KeycloakGroup (for nested groups)",
|
||||||
|
"properties": {
|
||||||
|
"name": {
|
||||||
|
"description": "Name of the resource",
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"namespace": {
|
||||||
|
"description": "Namespace of the resource (optional, defaults to the same namespace)",
|
||||||
|
"type": "string"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"required": [
|
||||||
|
"name"
|
||||||
|
],
|
||||||
|
"type": "object",
|
||||||
|
"additionalProperties": false
|
||||||
|
},
|
||||||
|
"realmRef": {
|
||||||
|
"description": "RealmRef is a reference to a KeycloakRealm\nOne of realmRef or clusterRealmRef must be specified",
|
||||||
|
"properties": {
|
||||||
|
"name": {
|
||||||
|
"description": "Name of the resource",
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"namespace": {
|
||||||
|
"description": "Namespace of the resource (optional, defaults to the same namespace)",
|
||||||
|
"type": "string"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"required": [
|
||||||
|
"name"
|
||||||
|
],
|
||||||
|
"type": "object",
|
||||||
|
"additionalProperties": false
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"required": [
|
||||||
|
"definition"
|
||||||
|
],
|
||||||
|
"type": "object",
|
||||||
|
"additionalProperties": false
|
||||||
|
},
|
||||||
|
"status": {
|
||||||
|
"description": "KeycloakGroupStatus defines the observed state of KeycloakGroup",
|
||||||
|
"properties": {
|
||||||
|
"conditions": {
|
||||||
|
"description": "Conditions represent the latest available observations",
|
||||||
|
"items": {
|
||||||
|
"description": "Condition contains details for one aspect of the current state of this API Resource.",
|
||||||
|
"properties": {
|
||||||
|
"lastTransitionTime": {
|
||||||
|
"description": "lastTransitionTime is the last time the condition transitioned from one status to another.\nThis should be when the underlying condition changed. If that is not known, then using the time when the API field changed is acceptable.",
|
||||||
|
"format": "date-time",
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"message": {
|
||||||
|
"description": "message is a human readable message indicating details about the transition.\nThis may be an empty string.",
|
||||||
|
"maxLength": 32768,
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"observedGeneration": {
|
||||||
|
"description": "observedGeneration represents the .metadata.generation that the condition was set based upon.\nFor instance, if .metadata.generation is currently 12, but the .status.conditions[x].observedGeneration is 9, the condition is out of date\nwith respect to the current state of the instance.",
|
||||||
|
"format": "int64",
|
||||||
|
"minimum": 0,
|
||||||
|
"type": "integer"
|
||||||
|
},
|
||||||
|
"reason": {
|
||||||
|
"description": "reason contains a programmatic identifier indicating the reason for the condition's last transition.\nProducers of specific condition types may define expected values and meanings for this field,\nand whether the values are considered a guaranteed API.\nThe value should be a CamelCase string.\nThis field may not be empty.",
|
||||||
|
"maxLength": 1024,
|
||||||
|
"minLength": 1,
|
||||||
|
"pattern": "^[A-Za-z]([A-Za-z0-9_,:]*[A-Za-z0-9_])?$",
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"status": {
|
||||||
|
"description": "status of the condition, one of True, False, Unknown.",
|
||||||
|
"enum": [
|
||||||
|
"True",
|
||||||
|
"False",
|
||||||
|
"Unknown"
|
||||||
|
],
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"type": {
|
||||||
|
"description": "type of condition in CamelCase or in foo.example.com/CamelCase.",
|
||||||
|
"maxLength": 316,
|
||||||
|
"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])$",
|
||||||
|
"type": "string"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"required": [
|
||||||
|
"lastTransitionTime",
|
||||||
|
"message",
|
||||||
|
"reason",
|
||||||
|
"status",
|
||||||
|
"type"
|
||||||
|
],
|
||||||
|
"type": "object",
|
||||||
|
"additionalProperties": false
|
||||||
|
},
|
||||||
|
"type": "array"
|
||||||
|
},
|
||||||
|
"groupID": {
|
||||||
|
"description": "GroupID is the Keycloak internal group ID",
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"instance": {
|
||||||
|
"description": "Instance contains the resolved instance reference",
|
||||||
|
"properties": {
|
||||||
|
"clusterInstanceRef": {
|
||||||
|
"description": "ClusterInstanceRef is the name of the cluster instance",
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"instanceRef": {
|
||||||
|
"description": "InstanceRef is the name of the namespaced instance",
|
||||||
|
"type": "string"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"type": "object",
|
||||||
|
"additionalProperties": false
|
||||||
|
},
|
||||||
|
"message": {
|
||||||
|
"description": "Message contains additional information",
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"ready": {
|
||||||
|
"description": "Ready indicates if the group is ready",
|
||||||
|
"type": "boolean"
|
||||||
|
},
|
||||||
|
"realm": {
|
||||||
|
"description": "Realm contains the resolved realm reference",
|
||||||
|
"properties": {
|
||||||
|
"clusterRealmRef": {
|
||||||
|
"description": "ClusterRealmRef is the name of the cluster realm",
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"realmRef": {
|
||||||
|
"description": "RealmRef is the name of the namespaced realm",
|
||||||
|
"type": "string"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"type": "object",
|
||||||
|
"additionalProperties": false
|
||||||
|
},
|
||||||
|
"resourcePath": {
|
||||||
|
"description": "ResourcePath is the Keycloak API path for this group",
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"status": {
|
||||||
|
"description": "Status is a human-readable status message",
|
||||||
|
"type": "string"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"required": [
|
||||||
|
"ready"
|
||||||
|
],
|
||||||
|
"type": "object",
|
||||||
|
"additionalProperties": false
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"type": "object"
|
||||||
|
}
|
||||||
@@ -0,0 +1,190 @@
|
|||||||
|
{
|
||||||
|
"description": "KeycloakIdentityProvider defines an identity provider within a KeycloakRealm",
|
||||||
|
"properties": {
|
||||||
|
"apiVersion": {
|
||||||
|
"description": "APIVersion defines the versioned schema of this representation of an object.\nServers should convert recognized schemas to the latest internal value, and\nmay reject unrecognized values.\nMore info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources",
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"kind": {
|
||||||
|
"description": "Kind is a string value representing the REST resource this object represents.\nServers may infer this from the endpoint the client submits requests to.\nCannot be updated.\nIn CamelCase.\nMore info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds",
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"metadata": {
|
||||||
|
"type": "object"
|
||||||
|
},
|
||||||
|
"spec": {
|
||||||
|
"description": "KeycloakIdentityProviderSpec defines the desired state of KeycloakIdentityProvider",
|
||||||
|
"properties": {
|
||||||
|
"clusterRealmRef": {
|
||||||
|
"description": "ClusterRealmRef is a reference to a ClusterKeycloakRealm\nOne of realmRef or clusterRealmRef must be specified",
|
||||||
|
"properties": {
|
||||||
|
"name": {
|
||||||
|
"description": "Name of the cluster-scoped resource",
|
||||||
|
"type": "string"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"required": [
|
||||||
|
"name"
|
||||||
|
],
|
||||||
|
"type": "object",
|
||||||
|
"additionalProperties": false
|
||||||
|
},
|
||||||
|
"configSecretRef": {
|
||||||
|
"description": "ConfigSecretRef is a reference to a Kubernetes Secret whose data entries\nare merged into definition.config before syncing to Keycloak. This allows\nsensitive configuration values (e.g. clientId, clientSecret) to be stored\nin a Secret rather than in plaintext in the CR. Secret values take\nprecedence over values specified inline in definition.config.",
|
||||||
|
"properties": {
|
||||||
|
"name": {
|
||||||
|
"description": "Name of the Kubernetes Secret",
|
||||||
|
"type": "string"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"required": [
|
||||||
|
"name"
|
||||||
|
],
|
||||||
|
"type": "object",
|
||||||
|
"additionalProperties": false
|
||||||
|
},
|
||||||
|
"definition": {
|
||||||
|
"description": "Definition contains the Keycloak IdentityProviderRepresentation",
|
||||||
|
"type": "object",
|
||||||
|
"x-kubernetes-preserve-unknown-fields": true
|
||||||
|
},
|
||||||
|
"realmRef": {
|
||||||
|
"description": "RealmRef is a reference to a KeycloakRealm\nOne of realmRef or clusterRealmRef must be specified",
|
||||||
|
"properties": {
|
||||||
|
"name": {
|
||||||
|
"description": "Name of the resource",
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"namespace": {
|
||||||
|
"description": "Namespace of the resource (optional, defaults to the same namespace)",
|
||||||
|
"type": "string"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"required": [
|
||||||
|
"name"
|
||||||
|
],
|
||||||
|
"type": "object",
|
||||||
|
"additionalProperties": false
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"required": [
|
||||||
|
"definition"
|
||||||
|
],
|
||||||
|
"type": "object",
|
||||||
|
"additionalProperties": false
|
||||||
|
},
|
||||||
|
"status": {
|
||||||
|
"description": "KeycloakIdentityProviderStatus defines the observed state of KeycloakIdentityProvider",
|
||||||
|
"properties": {
|
||||||
|
"conditions": {
|
||||||
|
"description": "Conditions represent the latest available observations",
|
||||||
|
"items": {
|
||||||
|
"description": "Condition contains details for one aspect of the current state of this API Resource.",
|
||||||
|
"properties": {
|
||||||
|
"lastTransitionTime": {
|
||||||
|
"description": "lastTransitionTime is the last time the condition transitioned from one status to another.\nThis should be when the underlying condition changed. If that is not known, then using the time when the API field changed is acceptable.",
|
||||||
|
"format": "date-time",
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"message": {
|
||||||
|
"description": "message is a human readable message indicating details about the transition.\nThis may be an empty string.",
|
||||||
|
"maxLength": 32768,
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"observedGeneration": {
|
||||||
|
"description": "observedGeneration represents the .metadata.generation that the condition was set based upon.\nFor instance, if .metadata.generation is currently 12, but the .status.conditions[x].observedGeneration is 9, the condition is out of date\nwith respect to the current state of the instance.",
|
||||||
|
"format": "int64",
|
||||||
|
"minimum": 0,
|
||||||
|
"type": "integer"
|
||||||
|
},
|
||||||
|
"reason": {
|
||||||
|
"description": "reason contains a programmatic identifier indicating the reason for the condition's last transition.\nProducers of specific condition types may define expected values and meanings for this field,\nand whether the values are considered a guaranteed API.\nThe value should be a CamelCase string.\nThis field may not be empty.",
|
||||||
|
"maxLength": 1024,
|
||||||
|
"minLength": 1,
|
||||||
|
"pattern": "^[A-Za-z]([A-Za-z0-9_,:]*[A-Za-z0-9_])?$",
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"status": {
|
||||||
|
"description": "status of the condition, one of True, False, Unknown.",
|
||||||
|
"enum": [
|
||||||
|
"True",
|
||||||
|
"False",
|
||||||
|
"Unknown"
|
||||||
|
],
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"type": {
|
||||||
|
"description": "type of condition in CamelCase or in foo.example.com/CamelCase.",
|
||||||
|
"maxLength": 316,
|
||||||
|
"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])$",
|
||||||
|
"type": "string"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"required": [
|
||||||
|
"lastTransitionTime",
|
||||||
|
"message",
|
||||||
|
"reason",
|
||||||
|
"status",
|
||||||
|
"type"
|
||||||
|
],
|
||||||
|
"type": "object",
|
||||||
|
"additionalProperties": false
|
||||||
|
},
|
||||||
|
"type": "array"
|
||||||
|
},
|
||||||
|
"instance": {
|
||||||
|
"description": "Instance contains the resolved instance reference",
|
||||||
|
"properties": {
|
||||||
|
"clusterInstanceRef": {
|
||||||
|
"description": "ClusterInstanceRef is the name of the cluster instance",
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"instanceRef": {
|
||||||
|
"description": "InstanceRef is the name of the namespaced instance",
|
||||||
|
"type": "string"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"type": "object",
|
||||||
|
"additionalProperties": false
|
||||||
|
},
|
||||||
|
"message": {
|
||||||
|
"description": "Message contains additional information",
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"ready": {
|
||||||
|
"description": "Ready indicates if the identity provider is ready",
|
||||||
|
"type": "boolean"
|
||||||
|
},
|
||||||
|
"realm": {
|
||||||
|
"description": "Realm contains the resolved realm reference",
|
||||||
|
"properties": {
|
||||||
|
"clusterRealmRef": {
|
||||||
|
"description": "ClusterRealmRef is the name of the cluster realm",
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"realmRef": {
|
||||||
|
"description": "RealmRef is the name of the namespaced realm",
|
||||||
|
"type": "string"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"type": "object",
|
||||||
|
"additionalProperties": false
|
||||||
|
},
|
||||||
|
"resourcePath": {
|
||||||
|
"description": "ResourcePath is the Keycloak API path for this identity provider",
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"status": {
|
||||||
|
"description": "Status is a human-readable status message",
|
||||||
|
"type": "string"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"required": [
|
||||||
|
"ready"
|
||||||
|
],
|
||||||
|
"type": "object",
|
||||||
|
"additionalProperties": false
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"type": "object"
|
||||||
|
}
|
||||||
@@ -0,0 +1,197 @@
|
|||||||
|
{
|
||||||
|
"description": "KeycloakInstance makes a Keycloak server known to the operator",
|
||||||
|
"properties": {
|
||||||
|
"apiVersion": {
|
||||||
|
"description": "APIVersion defines the versioned schema of this representation of an object.\nServers should convert recognized schemas to the latest internal value, and\nmay reject unrecognized values.\nMore info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources",
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"kind": {
|
||||||
|
"description": "Kind is a string value representing the REST resource this object represents.\nServers may infer this from the endpoint the client submits requests to.\nCannot be updated.\nIn CamelCase.\nMore info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds",
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"metadata": {
|
||||||
|
"type": "object"
|
||||||
|
},
|
||||||
|
"spec": {
|
||||||
|
"description": "KeycloakInstanceSpec defines the desired state of KeycloakInstance",
|
||||||
|
"properties": {
|
||||||
|
"baseUrl": {
|
||||||
|
"description": "BaseUrl is the URL of the Keycloak server (e.g., http://keycloak:8080)",
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"client": {
|
||||||
|
"description": "Client contains optional service account client configuration",
|
||||||
|
"properties": {
|
||||||
|
"id": {
|
||||||
|
"description": "ID is the client ID for service account authentication",
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"secret": {
|
||||||
|
"description": "Secret is the client secret (optional for public clients)",
|
||||||
|
"type": "string"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"required": [
|
||||||
|
"id"
|
||||||
|
],
|
||||||
|
"type": "object",
|
||||||
|
"additionalProperties": false
|
||||||
|
},
|
||||||
|
"credentials": {
|
||||||
|
"description": "Credentials contains the reference to the admin credentials secret",
|
||||||
|
"properties": {
|
||||||
|
"secretRef": {
|
||||||
|
"description": "SecretRef contains the reference to the secret with credentials",
|
||||||
|
"properties": {
|
||||||
|
"name": {
|
||||||
|
"description": "Name is the name of the secret",
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"namespace": {
|
||||||
|
"description": "Namespace is the namespace of the secret (defaults to resource namespace)",
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"passwordKey": {
|
||||||
|
"default": "password",
|
||||||
|
"description": "PasswordKey is the key in the secret for the password (defaults to \"password\")",
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"usernameKey": {
|
||||||
|
"default": "username",
|
||||||
|
"description": "UsernameKey is the key in the secret for the username (defaults to \"username\")",
|
||||||
|
"type": "string"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"required": [
|
||||||
|
"name"
|
||||||
|
],
|
||||||
|
"type": "object",
|
||||||
|
"additionalProperties": false
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"required": [
|
||||||
|
"secretRef"
|
||||||
|
],
|
||||||
|
"type": "object",
|
||||||
|
"additionalProperties": false
|
||||||
|
},
|
||||||
|
"realm": {
|
||||||
|
"description": "Realm is the admin realm (defaults to \"master\")",
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"token": {
|
||||||
|
"description": "Token contains optional token caching configuration",
|
||||||
|
"properties": {
|
||||||
|
"expiresKey": {
|
||||||
|
"description": "ExpiresKey is the key in the secret for the token expiration",
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"secretName": {
|
||||||
|
"description": "SecretName is the name of the secret to cache the token",
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"tokenKey": {
|
||||||
|
"description": "TokenKey is the key in the secret for the token",
|
||||||
|
"type": "string"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"type": "object",
|
||||||
|
"additionalProperties": false
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"required": [
|
||||||
|
"baseUrl",
|
||||||
|
"credentials"
|
||||||
|
],
|
||||||
|
"type": "object",
|
||||||
|
"additionalProperties": false
|
||||||
|
},
|
||||||
|
"status": {
|
||||||
|
"description": "KeycloakInstanceStatus defines the observed state of KeycloakInstance",
|
||||||
|
"properties": {
|
||||||
|
"conditions": {
|
||||||
|
"description": "Conditions represent the latest available observations",
|
||||||
|
"items": {
|
||||||
|
"description": "Condition contains details for one aspect of the current state of this API Resource.",
|
||||||
|
"properties": {
|
||||||
|
"lastTransitionTime": {
|
||||||
|
"description": "lastTransitionTime is the last time the condition transitioned from one status to another.\nThis should be when the underlying condition changed. If that is not known, then using the time when the API field changed is acceptable.",
|
||||||
|
"format": "date-time",
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"message": {
|
||||||
|
"description": "message is a human readable message indicating details about the transition.\nThis may be an empty string.",
|
||||||
|
"maxLength": 32768,
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"observedGeneration": {
|
||||||
|
"description": "observedGeneration represents the .metadata.generation that the condition was set based upon.\nFor instance, if .metadata.generation is currently 12, but the .status.conditions[x].observedGeneration is 9, the condition is out of date\nwith respect to the current state of the instance.",
|
||||||
|
"format": "int64",
|
||||||
|
"minimum": 0,
|
||||||
|
"type": "integer"
|
||||||
|
},
|
||||||
|
"reason": {
|
||||||
|
"description": "reason contains a programmatic identifier indicating the reason for the condition's last transition.\nProducers of specific condition types may define expected values and meanings for this field,\nand whether the values are considered a guaranteed API.\nThe value should be a CamelCase string.\nThis field may not be empty.",
|
||||||
|
"maxLength": 1024,
|
||||||
|
"minLength": 1,
|
||||||
|
"pattern": "^[A-Za-z]([A-Za-z0-9_,:]*[A-Za-z0-9_])?$",
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"status": {
|
||||||
|
"description": "status of the condition, one of True, False, Unknown.",
|
||||||
|
"enum": [
|
||||||
|
"True",
|
||||||
|
"False",
|
||||||
|
"Unknown"
|
||||||
|
],
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"type": {
|
||||||
|
"description": "type of condition in CamelCase or in foo.example.com/CamelCase.",
|
||||||
|
"maxLength": 316,
|
||||||
|
"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])$",
|
||||||
|
"type": "string"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"required": [
|
||||||
|
"lastTransitionTime",
|
||||||
|
"message",
|
||||||
|
"reason",
|
||||||
|
"status",
|
||||||
|
"type"
|
||||||
|
],
|
||||||
|
"type": "object",
|
||||||
|
"additionalProperties": false
|
||||||
|
},
|
||||||
|
"type": "array"
|
||||||
|
},
|
||||||
|
"message": {
|
||||||
|
"description": "Message contains additional information about the status",
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"ready": {
|
||||||
|
"description": "Ready indicates if the Keycloak instance is accessible",
|
||||||
|
"type": "boolean"
|
||||||
|
},
|
||||||
|
"resourcePath": {
|
||||||
|
"description": "ResourcePath is the API path for this resource",
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"status": {
|
||||||
|
"description": "Status is a human-readable status message",
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"version": {
|
||||||
|
"description": "Version is the Keycloak server version",
|
||||||
|
"type": "string"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"required": [
|
||||||
|
"ready"
|
||||||
|
],
|
||||||
|
"type": "object",
|
||||||
|
"additionalProperties": false
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"type": "object"
|
||||||
|
}
|
||||||
@@ -0,0 +1,185 @@
|
|||||||
|
{
|
||||||
|
"description": "KeycloakOrganization defines an organization within a KeycloakRealm\nNOTE: Organizations require Keycloak 26.0.0 or later",
|
||||||
|
"properties": {
|
||||||
|
"apiVersion": {
|
||||||
|
"description": "APIVersion defines the versioned schema of this representation of an object.\nServers should convert recognized schemas to the latest internal value, and\nmay reject unrecognized values.\nMore info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources",
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"kind": {
|
||||||
|
"description": "Kind is a string value representing the REST resource this object represents.\nServers may infer this from the endpoint the client submits requests to.\nCannot be updated.\nIn CamelCase.\nMore info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds",
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"metadata": {
|
||||||
|
"type": "object"
|
||||||
|
},
|
||||||
|
"spec": {
|
||||||
|
"description": "KeycloakOrganizationSpec defines the desired state of KeycloakOrganization",
|
||||||
|
"properties": {
|
||||||
|
"clusterRealmRef": {
|
||||||
|
"description": "ClusterRealmRef is a reference to a ClusterKeycloakRealm\nOne of realmRef or clusterRealmRef must be specified",
|
||||||
|
"properties": {
|
||||||
|
"name": {
|
||||||
|
"description": "Name of the cluster-scoped resource",
|
||||||
|
"type": "string"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"required": [
|
||||||
|
"name"
|
||||||
|
],
|
||||||
|
"type": "object",
|
||||||
|
"additionalProperties": false
|
||||||
|
},
|
||||||
|
"definition": {
|
||||||
|
"description": "Definition contains the Keycloak OrganizationRepresentation",
|
||||||
|
"type": "object",
|
||||||
|
"x-kubernetes-preserve-unknown-fields": true
|
||||||
|
},
|
||||||
|
"realmRef": {
|
||||||
|
"description": "RealmRef is a reference to a KeycloakRealm\nOne of realmRef or clusterRealmRef must be specified",
|
||||||
|
"properties": {
|
||||||
|
"name": {
|
||||||
|
"description": "Name of the resource",
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"namespace": {
|
||||||
|
"description": "Namespace of the resource (optional, defaults to the same namespace)",
|
||||||
|
"type": "string"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"required": [
|
||||||
|
"name"
|
||||||
|
],
|
||||||
|
"type": "object",
|
||||||
|
"additionalProperties": false
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"required": [
|
||||||
|
"definition"
|
||||||
|
],
|
||||||
|
"type": "object",
|
||||||
|
"additionalProperties": false
|
||||||
|
},
|
||||||
|
"status": {
|
||||||
|
"description": "KeycloakOrganizationStatus defines the observed state of KeycloakOrganization",
|
||||||
|
"properties": {
|
||||||
|
"conditions": {
|
||||||
|
"description": "Conditions represent the latest available observations",
|
||||||
|
"items": {
|
||||||
|
"description": "Condition contains details for one aspect of the current state of this API Resource.",
|
||||||
|
"properties": {
|
||||||
|
"lastTransitionTime": {
|
||||||
|
"description": "lastTransitionTime is the last time the condition transitioned from one status to another.\nThis should be when the underlying condition changed. If that is not known, then using the time when the API field changed is acceptable.",
|
||||||
|
"format": "date-time",
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"message": {
|
||||||
|
"description": "message is a human readable message indicating details about the transition.\nThis may be an empty string.",
|
||||||
|
"maxLength": 32768,
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"observedGeneration": {
|
||||||
|
"description": "observedGeneration represents the .metadata.generation that the condition was set based upon.\nFor instance, if .metadata.generation is currently 12, but the .status.conditions[x].observedGeneration is 9, the condition is out of date\nwith respect to the current state of the instance.",
|
||||||
|
"format": "int64",
|
||||||
|
"minimum": 0,
|
||||||
|
"type": "integer"
|
||||||
|
},
|
||||||
|
"reason": {
|
||||||
|
"description": "reason contains a programmatic identifier indicating the reason for the condition's last transition.\nProducers of specific condition types may define expected values and meanings for this field,\nand whether the values are considered a guaranteed API.\nThe value should be a CamelCase string.\nThis field may not be empty.",
|
||||||
|
"maxLength": 1024,
|
||||||
|
"minLength": 1,
|
||||||
|
"pattern": "^[A-Za-z]([A-Za-z0-9_,:]*[A-Za-z0-9_])?$",
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"status": {
|
||||||
|
"description": "status of the condition, one of True, False, Unknown.",
|
||||||
|
"enum": [
|
||||||
|
"True",
|
||||||
|
"False",
|
||||||
|
"Unknown"
|
||||||
|
],
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"type": {
|
||||||
|
"description": "type of condition in CamelCase or in foo.example.com/CamelCase.",
|
||||||
|
"maxLength": 316,
|
||||||
|
"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])$",
|
||||||
|
"type": "string"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"required": [
|
||||||
|
"lastTransitionTime",
|
||||||
|
"message",
|
||||||
|
"reason",
|
||||||
|
"status",
|
||||||
|
"type"
|
||||||
|
],
|
||||||
|
"type": "object",
|
||||||
|
"additionalProperties": false
|
||||||
|
},
|
||||||
|
"type": "array"
|
||||||
|
},
|
||||||
|
"instance": {
|
||||||
|
"description": "Instance contains the resolved instance reference",
|
||||||
|
"properties": {
|
||||||
|
"clusterInstanceRef": {
|
||||||
|
"description": "ClusterInstanceRef is the name of the cluster instance",
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"instanceRef": {
|
||||||
|
"description": "InstanceRef is the name of the namespaced instance",
|
||||||
|
"type": "string"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"type": "object",
|
||||||
|
"additionalProperties": false
|
||||||
|
},
|
||||||
|
"message": {
|
||||||
|
"description": "Message contains additional information",
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"observedGeneration": {
|
||||||
|
"description": "ObservedGeneration is the generation of the spec that was last processed",
|
||||||
|
"format": "int64",
|
||||||
|
"type": "integer"
|
||||||
|
},
|
||||||
|
"organizationID": {
|
||||||
|
"description": "OrganizationID is the Keycloak internal organization ID",
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"ready": {
|
||||||
|
"description": "Ready indicates if the organization is ready",
|
||||||
|
"type": "boolean"
|
||||||
|
},
|
||||||
|
"realm": {
|
||||||
|
"description": "Realm contains the resolved realm reference",
|
||||||
|
"properties": {
|
||||||
|
"clusterRealmRef": {
|
||||||
|
"description": "ClusterRealmRef is the name of the cluster realm",
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"realmRef": {
|
||||||
|
"description": "RealmRef is the name of the namespaced realm",
|
||||||
|
"type": "string"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"type": "object",
|
||||||
|
"additionalProperties": false
|
||||||
|
},
|
||||||
|
"resourcePath": {
|
||||||
|
"description": "ResourcePath is the Keycloak API path for this organization",
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"status": {
|
||||||
|
"description": "Status is a human-readable status message",
|
||||||
|
"type": "string"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"required": [
|
||||||
|
"ready"
|
||||||
|
],
|
||||||
|
"type": "object",
|
||||||
|
"additionalProperties": false
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"type": "object"
|
||||||
|
}
|
||||||
@@ -0,0 +1,201 @@
|
|||||||
|
{
|
||||||
|
"description": "KeycloakProtocolMapper defines a protocol mapper within a KeycloakClient or KeycloakClientScope",
|
||||||
|
"properties": {
|
||||||
|
"apiVersion": {
|
||||||
|
"description": "APIVersion defines the versioned schema of this representation of an object.\nServers should convert recognized schemas to the latest internal value, and\nmay reject unrecognized values.\nMore info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources",
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"kind": {
|
||||||
|
"description": "Kind is a string value representing the REST resource this object represents.\nServers may infer this from the endpoint the client submits requests to.\nCannot be updated.\nIn CamelCase.\nMore info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds",
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"metadata": {
|
||||||
|
"type": "object"
|
||||||
|
},
|
||||||
|
"spec": {
|
||||||
|
"description": "KeycloakProtocolMapperSpec defines the desired state of KeycloakProtocolMapper",
|
||||||
|
"properties": {
|
||||||
|
"clientRef": {
|
||||||
|
"description": "ClientRef is a reference to a KeycloakClient\nOne of clientRef or clientScopeRef must be specified",
|
||||||
|
"properties": {
|
||||||
|
"name": {
|
||||||
|
"description": "Name of the resource",
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"namespace": {
|
||||||
|
"description": "Namespace of the resource (optional, defaults to the same namespace)",
|
||||||
|
"type": "string"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"required": [
|
||||||
|
"name"
|
||||||
|
],
|
||||||
|
"type": "object",
|
||||||
|
"additionalProperties": false
|
||||||
|
},
|
||||||
|
"clientScopeRef": {
|
||||||
|
"description": "ClientScopeRef is a reference to a KeycloakClientScope\nOne of clientRef or clientScopeRef must be specified",
|
||||||
|
"properties": {
|
||||||
|
"name": {
|
||||||
|
"description": "Name of the resource",
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"namespace": {
|
||||||
|
"description": "Namespace of the resource (optional, defaults to the same namespace)",
|
||||||
|
"type": "string"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"required": [
|
||||||
|
"name"
|
||||||
|
],
|
||||||
|
"type": "object",
|
||||||
|
"additionalProperties": false
|
||||||
|
},
|
||||||
|
"definition": {
|
||||||
|
"description": "Definition contains the Keycloak ProtocolMapperRepresentation",
|
||||||
|
"type": "object",
|
||||||
|
"x-kubernetes-preserve-unknown-fields": true
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"required": [
|
||||||
|
"definition"
|
||||||
|
],
|
||||||
|
"type": "object",
|
||||||
|
"additionalProperties": false
|
||||||
|
},
|
||||||
|
"status": {
|
||||||
|
"description": "KeycloakProtocolMapperStatus defines the observed state of KeycloakProtocolMapper",
|
||||||
|
"properties": {
|
||||||
|
"conditions": {
|
||||||
|
"description": "Conditions represent the latest available observations",
|
||||||
|
"items": {
|
||||||
|
"description": "Condition contains details for one aspect of the current state of this API Resource.",
|
||||||
|
"properties": {
|
||||||
|
"lastTransitionTime": {
|
||||||
|
"description": "lastTransitionTime is the last time the condition transitioned from one status to another.\nThis should be when the underlying condition changed. If that is not known, then using the time when the API field changed is acceptable.",
|
||||||
|
"format": "date-time",
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"message": {
|
||||||
|
"description": "message is a human readable message indicating details about the transition.\nThis may be an empty string.",
|
||||||
|
"maxLength": 32768,
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"observedGeneration": {
|
||||||
|
"description": "observedGeneration represents the .metadata.generation that the condition was set based upon.\nFor instance, if .metadata.generation is currently 12, but the .status.conditions[x].observedGeneration is 9, the condition is out of date\nwith respect to the current state of the instance.",
|
||||||
|
"format": "int64",
|
||||||
|
"minimum": 0,
|
||||||
|
"type": "integer"
|
||||||
|
},
|
||||||
|
"reason": {
|
||||||
|
"description": "reason contains a programmatic identifier indicating the reason for the condition's last transition.\nProducers of specific condition types may define expected values and meanings for this field,\nand whether the values are considered a guaranteed API.\nThe value should be a CamelCase string.\nThis field may not be empty.",
|
||||||
|
"maxLength": 1024,
|
||||||
|
"minLength": 1,
|
||||||
|
"pattern": "^[A-Za-z]([A-Za-z0-9_,:]*[A-Za-z0-9_])?$",
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"status": {
|
||||||
|
"description": "status of the condition, one of True, False, Unknown.",
|
||||||
|
"enum": [
|
||||||
|
"True",
|
||||||
|
"False",
|
||||||
|
"Unknown"
|
||||||
|
],
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"type": {
|
||||||
|
"description": "type of condition in CamelCase or in foo.example.com/CamelCase.",
|
||||||
|
"maxLength": 316,
|
||||||
|
"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])$",
|
||||||
|
"type": "string"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"required": [
|
||||||
|
"lastTransitionTime",
|
||||||
|
"message",
|
||||||
|
"reason",
|
||||||
|
"status",
|
||||||
|
"type"
|
||||||
|
],
|
||||||
|
"type": "object",
|
||||||
|
"additionalProperties": false
|
||||||
|
},
|
||||||
|
"type": "array"
|
||||||
|
},
|
||||||
|
"instance": {
|
||||||
|
"description": "Instance contains the resolved instance reference",
|
||||||
|
"properties": {
|
||||||
|
"clusterInstanceRef": {
|
||||||
|
"description": "ClusterInstanceRef is the name of the cluster instance",
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"instanceRef": {
|
||||||
|
"description": "InstanceRef is the name of the namespaced instance",
|
||||||
|
"type": "string"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"type": "object",
|
||||||
|
"additionalProperties": false
|
||||||
|
},
|
||||||
|
"mapperID": {
|
||||||
|
"description": "MapperID is the Keycloak internal mapper ID",
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"mapperName": {
|
||||||
|
"description": "MapperName is the mapper name in Keycloak",
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"message": {
|
||||||
|
"description": "Message contains additional information",
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"observedGeneration": {
|
||||||
|
"description": "ObservedGeneration is the generation of the spec that was last processed",
|
||||||
|
"format": "int64",
|
||||||
|
"type": "integer"
|
||||||
|
},
|
||||||
|
"parentID": {
|
||||||
|
"description": "ParentID is the parent client or clientScope ID",
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"parentType": {
|
||||||
|
"description": "ParentType indicates if parent is \"client\" or \"clientScope\"",
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"ready": {
|
||||||
|
"description": "Ready indicates if the protocol mapper is ready",
|
||||||
|
"type": "boolean"
|
||||||
|
},
|
||||||
|
"realm": {
|
||||||
|
"description": "Realm contains the resolved realm reference",
|
||||||
|
"properties": {
|
||||||
|
"clusterRealmRef": {
|
||||||
|
"description": "ClusterRealmRef is the name of the cluster realm",
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"realmRef": {
|
||||||
|
"description": "RealmRef is the name of the namespaced realm",
|
||||||
|
"type": "string"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"type": "object",
|
||||||
|
"additionalProperties": false
|
||||||
|
},
|
||||||
|
"resourcePath": {
|
||||||
|
"description": "ResourcePath is the Keycloak API path for this protocol mapper",
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"status": {
|
||||||
|
"description": "Status is a human-readable status message",
|
||||||
|
"type": "string"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"required": [
|
||||||
|
"ready"
|
||||||
|
],
|
||||||
|
"type": "object",
|
||||||
|
"additionalProperties": false
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"type": "object"
|
||||||
|
}
|
||||||
@@ -0,0 +1,189 @@
|
|||||||
|
{
|
||||||
|
"description": "KeycloakRealm defines a realm within a KeycloakInstance",
|
||||||
|
"properties": {
|
||||||
|
"apiVersion": {
|
||||||
|
"description": "APIVersion defines the versioned schema of this representation of an object.\nServers should convert recognized schemas to the latest internal value, and\nmay reject unrecognized values.\nMore info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources",
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"kind": {
|
||||||
|
"description": "Kind is a string value representing the REST resource this object represents.\nServers may infer this from the endpoint the client submits requests to.\nCannot be updated.\nIn CamelCase.\nMore info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds",
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"metadata": {
|
||||||
|
"type": "object"
|
||||||
|
},
|
||||||
|
"spec": {
|
||||||
|
"description": "KeycloakRealmSpec defines the desired state of KeycloakRealm",
|
||||||
|
"properties": {
|
||||||
|
"clusterInstanceRef": {
|
||||||
|
"description": "ClusterInstanceRef is a reference to a ClusterKeycloakInstance\nOne of instanceRef or clusterInstanceRef must be specified",
|
||||||
|
"properties": {
|
||||||
|
"name": {
|
||||||
|
"description": "Name of the cluster-scoped resource",
|
||||||
|
"type": "string"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"required": [
|
||||||
|
"name"
|
||||||
|
],
|
||||||
|
"type": "object",
|
||||||
|
"additionalProperties": false
|
||||||
|
},
|
||||||
|
"definition": {
|
||||||
|
"description": "Definition contains the Keycloak RealmRepresentation",
|
||||||
|
"type": "object",
|
||||||
|
"x-kubernetes-preserve-unknown-fields": true
|
||||||
|
},
|
||||||
|
"instanceRef": {
|
||||||
|
"description": "InstanceRef is a reference to a KeycloakInstance\nOne of instanceRef or clusterInstanceRef must be specified",
|
||||||
|
"properties": {
|
||||||
|
"name": {
|
||||||
|
"description": "Name of the resource",
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"namespace": {
|
||||||
|
"description": "Namespace of the resource (optional, defaults to the same namespace)",
|
||||||
|
"type": "string"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"required": [
|
||||||
|
"name"
|
||||||
|
],
|
||||||
|
"type": "object",
|
||||||
|
"additionalProperties": false
|
||||||
|
},
|
||||||
|
"realmName": {
|
||||||
|
"description": "RealmName is the name of the realm in Keycloak (defaults to metadata.name)",
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"smtpSecretRef": {
|
||||||
|
"description": "SmtpSecretRef is a reference to a Kubernetes Secret containing SMTP credentials.\nWhen set, the secret values are injected into definition.smtpServer.user and\ndefinition.smtpServer.password before syncing to Keycloak, so credentials\ndo not need to appear in plaintext in the CR.",
|
||||||
|
"properties": {
|
||||||
|
"name": {
|
||||||
|
"description": "Name of the Kubernetes Secret",
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"passwordKey": {
|
||||||
|
"default": "password",
|
||||||
|
"description": "PasswordKey is the key in the secret for the SMTP password (defaults to \"password\")",
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"userKey": {
|
||||||
|
"default": "user",
|
||||||
|
"description": "UserKey is the key in the secret for the SMTP username (defaults to \"user\")",
|
||||||
|
"type": "string"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"required": [
|
||||||
|
"name"
|
||||||
|
],
|
||||||
|
"type": "object",
|
||||||
|
"additionalProperties": false
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"required": [
|
||||||
|
"definition"
|
||||||
|
],
|
||||||
|
"type": "object",
|
||||||
|
"additionalProperties": false
|
||||||
|
},
|
||||||
|
"status": {
|
||||||
|
"description": "KeycloakRealmStatus defines the observed state of KeycloakRealm",
|
||||||
|
"properties": {
|
||||||
|
"conditions": {
|
||||||
|
"description": "Conditions represent the latest available observations",
|
||||||
|
"items": {
|
||||||
|
"description": "Condition contains details for one aspect of the current state of this API Resource.",
|
||||||
|
"properties": {
|
||||||
|
"lastTransitionTime": {
|
||||||
|
"description": "lastTransitionTime is the last time the condition transitioned from one status to another.\nThis should be when the underlying condition changed. If that is not known, then using the time when the API field changed is acceptable.",
|
||||||
|
"format": "date-time",
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"message": {
|
||||||
|
"description": "message is a human readable message indicating details about the transition.\nThis may be an empty string.",
|
||||||
|
"maxLength": 32768,
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"observedGeneration": {
|
||||||
|
"description": "observedGeneration represents the .metadata.generation that the condition was set based upon.\nFor instance, if .metadata.generation is currently 12, but the .status.conditions[x].observedGeneration is 9, the condition is out of date\nwith respect to the current state of the instance.",
|
||||||
|
"format": "int64",
|
||||||
|
"minimum": 0,
|
||||||
|
"type": "integer"
|
||||||
|
},
|
||||||
|
"reason": {
|
||||||
|
"description": "reason contains a programmatic identifier indicating the reason for the condition's last transition.\nProducers of specific condition types may define expected values and meanings for this field,\nand whether the values are considered a guaranteed API.\nThe value should be a CamelCase string.\nThis field may not be empty.",
|
||||||
|
"maxLength": 1024,
|
||||||
|
"minLength": 1,
|
||||||
|
"pattern": "^[A-Za-z]([A-Za-z0-9_,:]*[A-Za-z0-9_])?$",
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"status": {
|
||||||
|
"description": "status of the condition, one of True, False, Unknown.",
|
||||||
|
"enum": [
|
||||||
|
"True",
|
||||||
|
"False",
|
||||||
|
"Unknown"
|
||||||
|
],
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"type": {
|
||||||
|
"description": "type of condition in CamelCase or in foo.example.com/CamelCase.",
|
||||||
|
"maxLength": 316,
|
||||||
|
"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])$",
|
||||||
|
"type": "string"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"required": [
|
||||||
|
"lastTransitionTime",
|
||||||
|
"message",
|
||||||
|
"reason",
|
||||||
|
"status",
|
||||||
|
"type"
|
||||||
|
],
|
||||||
|
"type": "object",
|
||||||
|
"additionalProperties": false
|
||||||
|
},
|
||||||
|
"type": "array"
|
||||||
|
},
|
||||||
|
"instance": {
|
||||||
|
"description": "Instance contains the resolved instance reference",
|
||||||
|
"properties": {
|
||||||
|
"clusterInstanceRef": {
|
||||||
|
"description": "ClusterInstanceRef is the name of the cluster instance",
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"instanceRef": {
|
||||||
|
"description": "InstanceRef is the name of the namespaced instance",
|
||||||
|
"type": "string"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"type": "object",
|
||||||
|
"additionalProperties": false
|
||||||
|
},
|
||||||
|
"message": {
|
||||||
|
"description": "Message contains additional information",
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"ready": {
|
||||||
|
"description": "Ready indicates if the realm is ready",
|
||||||
|
"type": "boolean"
|
||||||
|
},
|
||||||
|
"resourcePath": {
|
||||||
|
"description": "ResourcePath is the Keycloak API path for this realm",
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"status": {
|
||||||
|
"description": "Status is a human-readable status message",
|
||||||
|
"type": "string"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"required": [
|
||||||
|
"ready"
|
||||||
|
],
|
||||||
|
"type": "object",
|
||||||
|
"additionalProperties": false
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"type": "object"
|
||||||
|
}
|
||||||
@@ -0,0 +1,185 @@
|
|||||||
|
{
|
||||||
|
"description": "KeycloakRequiredAction manages a required action provider within a Keycloak realm",
|
||||||
|
"properties": {
|
||||||
|
"apiVersion": {
|
||||||
|
"description": "APIVersion defines the versioned schema of this representation of an object.\nServers should convert recognized schemas to the latest internal value, and\nmay reject unrecognized values.\nMore info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources",
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"kind": {
|
||||||
|
"description": "Kind is a string value representing the REST resource this object represents.\nServers may infer this from the endpoint the client submits requests to.\nCannot be updated.\nIn CamelCase.\nMore info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds",
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"metadata": {
|
||||||
|
"type": "object"
|
||||||
|
},
|
||||||
|
"spec": {
|
||||||
|
"description": "KeycloakRequiredActionSpec defines the desired state of KeycloakRequiredAction",
|
||||||
|
"properties": {
|
||||||
|
"clusterRealmRef": {
|
||||||
|
"description": "ClusterRealmRef is a reference to a ClusterKeycloakRealm\nOne of realmRef or clusterRealmRef must be specified",
|
||||||
|
"properties": {
|
||||||
|
"name": {
|
||||||
|
"description": "Name of the cluster-scoped resource",
|
||||||
|
"type": "string"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"required": [
|
||||||
|
"name"
|
||||||
|
],
|
||||||
|
"type": "object",
|
||||||
|
"additionalProperties": false
|
||||||
|
},
|
||||||
|
"definition": {
|
||||||
|
"description": "Definition contains the Keycloak RequiredActionProviderRepresentation",
|
||||||
|
"type": "object",
|
||||||
|
"x-kubernetes-preserve-unknown-fields": true
|
||||||
|
},
|
||||||
|
"realmRef": {
|
||||||
|
"description": "RealmRef is a reference to a KeycloakRealm\nOne of realmRef or clusterRealmRef must be specified",
|
||||||
|
"properties": {
|
||||||
|
"name": {
|
||||||
|
"description": "Name of the resource",
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"namespace": {
|
||||||
|
"description": "Namespace of the resource (optional, defaults to the same namespace)",
|
||||||
|
"type": "string"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"required": [
|
||||||
|
"name"
|
||||||
|
],
|
||||||
|
"type": "object",
|
||||||
|
"additionalProperties": false
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"required": [
|
||||||
|
"definition"
|
||||||
|
],
|
||||||
|
"type": "object",
|
||||||
|
"additionalProperties": false
|
||||||
|
},
|
||||||
|
"status": {
|
||||||
|
"description": "KeycloakRequiredActionStatus defines the observed state of KeycloakRequiredAction",
|
||||||
|
"properties": {
|
||||||
|
"alias": {
|
||||||
|
"description": "Alias is the required action alias in Keycloak",
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"conditions": {
|
||||||
|
"description": "Conditions represent the latest available observations",
|
||||||
|
"items": {
|
||||||
|
"description": "Condition contains details for one aspect of the current state of this API Resource.",
|
||||||
|
"properties": {
|
||||||
|
"lastTransitionTime": {
|
||||||
|
"description": "lastTransitionTime is the last time the condition transitioned from one status to another.\nThis should be when the underlying condition changed. If that is not known, then using the time when the API field changed is acceptable.",
|
||||||
|
"format": "date-time",
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"message": {
|
||||||
|
"description": "message is a human readable message indicating details about the transition.\nThis may be an empty string.",
|
||||||
|
"maxLength": 32768,
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"observedGeneration": {
|
||||||
|
"description": "observedGeneration represents the .metadata.generation that the condition was set based upon.\nFor instance, if .metadata.generation is currently 12, but the .status.conditions[x].observedGeneration is 9, the condition is out of date\nwith respect to the current state of the instance.",
|
||||||
|
"format": "int64",
|
||||||
|
"minimum": 0,
|
||||||
|
"type": "integer"
|
||||||
|
},
|
||||||
|
"reason": {
|
||||||
|
"description": "reason contains a programmatic identifier indicating the reason for the condition's last transition.\nProducers of specific condition types may define expected values and meanings for this field,\nand whether the values are considered a guaranteed API.\nThe value should be a CamelCase string.\nThis field may not be empty.",
|
||||||
|
"maxLength": 1024,
|
||||||
|
"minLength": 1,
|
||||||
|
"pattern": "^[A-Za-z]([A-Za-z0-9_,:]*[A-Za-z0-9_])?$",
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"status": {
|
||||||
|
"description": "status of the condition, one of True, False, Unknown.",
|
||||||
|
"enum": [
|
||||||
|
"True",
|
||||||
|
"False",
|
||||||
|
"Unknown"
|
||||||
|
],
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"type": {
|
||||||
|
"description": "type of condition in CamelCase or in foo.example.com/CamelCase.",
|
||||||
|
"maxLength": 316,
|
||||||
|
"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])$",
|
||||||
|
"type": "string"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"required": [
|
||||||
|
"lastTransitionTime",
|
||||||
|
"message",
|
||||||
|
"reason",
|
||||||
|
"status",
|
||||||
|
"type"
|
||||||
|
],
|
||||||
|
"type": "object",
|
||||||
|
"additionalProperties": false
|
||||||
|
},
|
||||||
|
"type": "array"
|
||||||
|
},
|
||||||
|
"instance": {
|
||||||
|
"description": "Instance contains the resolved instance reference",
|
||||||
|
"properties": {
|
||||||
|
"clusterInstanceRef": {
|
||||||
|
"description": "ClusterInstanceRef is the name of the cluster instance",
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"instanceRef": {
|
||||||
|
"description": "InstanceRef is the name of the namespaced instance",
|
||||||
|
"type": "string"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"type": "object",
|
||||||
|
"additionalProperties": false
|
||||||
|
},
|
||||||
|
"message": {
|
||||||
|
"description": "Message contains additional information",
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"observedGeneration": {
|
||||||
|
"description": "ObservedGeneration is the generation of the spec that was last processed",
|
||||||
|
"format": "int64",
|
||||||
|
"type": "integer"
|
||||||
|
},
|
||||||
|
"ready": {
|
||||||
|
"description": "Ready indicates if the required action is synchronized",
|
||||||
|
"type": "boolean"
|
||||||
|
},
|
||||||
|
"realm": {
|
||||||
|
"description": "Realm contains the resolved realm reference",
|
||||||
|
"properties": {
|
||||||
|
"clusterRealmRef": {
|
||||||
|
"description": "ClusterRealmRef is the name of the cluster realm",
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"realmRef": {
|
||||||
|
"description": "RealmRef is the name of the namespaced realm",
|
||||||
|
"type": "string"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"type": "object",
|
||||||
|
"additionalProperties": false
|
||||||
|
},
|
||||||
|
"resourcePath": {
|
||||||
|
"description": "ResourcePath is the Keycloak API path for this required action",
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"status": {
|
||||||
|
"description": "Status is a human-readable status message",
|
||||||
|
"type": "string"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"required": [
|
||||||
|
"ready"
|
||||||
|
],
|
||||||
|
"type": "object",
|
||||||
|
"additionalProperties": false
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"type": "object"
|
||||||
|
}
|
||||||
@@ -0,0 +1,215 @@
|
|||||||
|
{
|
||||||
|
"description": "KeycloakRole defines a role within a KeycloakRealm or KeycloakClient",
|
||||||
|
"properties": {
|
||||||
|
"apiVersion": {
|
||||||
|
"description": "APIVersion defines the versioned schema of this representation of an object.\nServers should convert recognized schemas to the latest internal value, and\nmay reject unrecognized values.\nMore info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources",
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"kind": {
|
||||||
|
"description": "Kind is a string value representing the REST resource this object represents.\nServers may infer this from the endpoint the client submits requests to.\nCannot be updated.\nIn CamelCase.\nMore info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds",
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"metadata": {
|
||||||
|
"type": "object"
|
||||||
|
},
|
||||||
|
"spec": {
|
||||||
|
"description": "KeycloakRoleSpec defines the desired state of KeycloakRole",
|
||||||
|
"properties": {
|
||||||
|
"clientRef": {
|
||||||
|
"description": "ClientRef is a reference to a KeycloakClient for client-level roles\nIf not specified, the role is a realm-level role",
|
||||||
|
"properties": {
|
||||||
|
"name": {
|
||||||
|
"description": "Name of the resource",
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"namespace": {
|
||||||
|
"description": "Namespace of the resource (optional, defaults to the same namespace)",
|
||||||
|
"type": "string"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"required": [
|
||||||
|
"name"
|
||||||
|
],
|
||||||
|
"type": "object",
|
||||||
|
"additionalProperties": false
|
||||||
|
},
|
||||||
|
"clusterRealmRef": {
|
||||||
|
"description": "ClusterRealmRef is a reference to a ClusterKeycloakRealm\nOne of realmRef or clusterRealmRef must be specified",
|
||||||
|
"properties": {
|
||||||
|
"name": {
|
||||||
|
"description": "Name of the cluster-scoped resource",
|
||||||
|
"type": "string"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"required": [
|
||||||
|
"name"
|
||||||
|
],
|
||||||
|
"type": "object",
|
||||||
|
"additionalProperties": false
|
||||||
|
},
|
||||||
|
"definition": {
|
||||||
|
"description": "Definition contains the Keycloak RoleRepresentation",
|
||||||
|
"type": "object",
|
||||||
|
"x-kubernetes-preserve-unknown-fields": true
|
||||||
|
},
|
||||||
|
"realmRef": {
|
||||||
|
"description": "RealmRef is a reference to a KeycloakRealm\nOne of realmRef or clusterRealmRef must be specified",
|
||||||
|
"properties": {
|
||||||
|
"name": {
|
||||||
|
"description": "Name of the resource",
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"namespace": {
|
||||||
|
"description": "Namespace of the resource (optional, defaults to the same namespace)",
|
||||||
|
"type": "string"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"required": [
|
||||||
|
"name"
|
||||||
|
],
|
||||||
|
"type": "object",
|
||||||
|
"additionalProperties": false
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"required": [
|
||||||
|
"definition"
|
||||||
|
],
|
||||||
|
"type": "object",
|
||||||
|
"additionalProperties": false
|
||||||
|
},
|
||||||
|
"status": {
|
||||||
|
"description": "KeycloakRoleStatus defines the observed state of KeycloakRole",
|
||||||
|
"properties": {
|
||||||
|
"clientID": {
|
||||||
|
"description": "ClientID is the client ID if this is a client role",
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"conditions": {
|
||||||
|
"description": "Conditions represent the latest available observations",
|
||||||
|
"items": {
|
||||||
|
"description": "Condition contains details for one aspect of the current state of this API Resource.",
|
||||||
|
"properties": {
|
||||||
|
"lastTransitionTime": {
|
||||||
|
"description": "lastTransitionTime is the last time the condition transitioned from one status to another.\nThis should be when the underlying condition changed. If that is not known, then using the time when the API field changed is acceptable.",
|
||||||
|
"format": "date-time",
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"message": {
|
||||||
|
"description": "message is a human readable message indicating details about the transition.\nThis may be an empty string.",
|
||||||
|
"maxLength": 32768,
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"observedGeneration": {
|
||||||
|
"description": "observedGeneration represents the .metadata.generation that the condition was set based upon.\nFor instance, if .metadata.generation is currently 12, but the .status.conditions[x].observedGeneration is 9, the condition is out of date\nwith respect to the current state of the instance.",
|
||||||
|
"format": "int64",
|
||||||
|
"minimum": 0,
|
||||||
|
"type": "integer"
|
||||||
|
},
|
||||||
|
"reason": {
|
||||||
|
"description": "reason contains a programmatic identifier indicating the reason for the condition's last transition.\nProducers of specific condition types may define expected values and meanings for this field,\nand whether the values are considered a guaranteed API.\nThe value should be a CamelCase string.\nThis field may not be empty.",
|
||||||
|
"maxLength": 1024,
|
||||||
|
"minLength": 1,
|
||||||
|
"pattern": "^[A-Za-z]([A-Za-z0-9_,:]*[A-Za-z0-9_])?$",
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"status": {
|
||||||
|
"description": "status of the condition, one of True, False, Unknown.",
|
||||||
|
"enum": [
|
||||||
|
"True",
|
||||||
|
"False",
|
||||||
|
"Unknown"
|
||||||
|
],
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"type": {
|
||||||
|
"description": "type of condition in CamelCase or in foo.example.com/CamelCase.",
|
||||||
|
"maxLength": 316,
|
||||||
|
"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])$",
|
||||||
|
"type": "string"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"required": [
|
||||||
|
"lastTransitionTime",
|
||||||
|
"message",
|
||||||
|
"reason",
|
||||||
|
"status",
|
||||||
|
"type"
|
||||||
|
],
|
||||||
|
"type": "object",
|
||||||
|
"additionalProperties": false
|
||||||
|
},
|
||||||
|
"type": "array"
|
||||||
|
},
|
||||||
|
"instance": {
|
||||||
|
"description": "Instance contains the resolved instance reference",
|
||||||
|
"properties": {
|
||||||
|
"clusterInstanceRef": {
|
||||||
|
"description": "ClusterInstanceRef is the name of the cluster instance",
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"instanceRef": {
|
||||||
|
"description": "InstanceRef is the name of the namespaced instance",
|
||||||
|
"type": "string"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"type": "object",
|
||||||
|
"additionalProperties": false
|
||||||
|
},
|
||||||
|
"isClientRole": {
|
||||||
|
"description": "IsClientRole indicates if this is a client role",
|
||||||
|
"type": "boolean"
|
||||||
|
},
|
||||||
|
"message": {
|
||||||
|
"description": "Message contains additional information",
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"observedGeneration": {
|
||||||
|
"description": "ObservedGeneration is the generation of the spec that was last processed",
|
||||||
|
"format": "int64",
|
||||||
|
"type": "integer"
|
||||||
|
},
|
||||||
|
"ready": {
|
||||||
|
"description": "Ready indicates if the role is ready",
|
||||||
|
"type": "boolean"
|
||||||
|
},
|
||||||
|
"realm": {
|
||||||
|
"description": "Realm contains the resolved realm reference",
|
||||||
|
"properties": {
|
||||||
|
"clusterRealmRef": {
|
||||||
|
"description": "ClusterRealmRef is the name of the cluster realm",
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"realmRef": {
|
||||||
|
"description": "RealmRef is the name of the namespaced realm",
|
||||||
|
"type": "string"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"type": "object",
|
||||||
|
"additionalProperties": false
|
||||||
|
},
|
||||||
|
"resourcePath": {
|
||||||
|
"description": "ResourcePath is the Keycloak API path for this role",
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"roleID": {
|
||||||
|
"description": "RoleID is the Keycloak internal role ID",
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"roleName": {
|
||||||
|
"description": "RoleName is the role name in Keycloak",
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"status": {
|
||||||
|
"description": "Status is a human-readable status message",
|
||||||
|
"type": "string"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"required": [
|
||||||
|
"ready"
|
||||||
|
],
|
||||||
|
"type": "object",
|
||||||
|
"additionalProperties": false
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"type": "object"
|
||||||
|
}
|
||||||
@@ -0,0 +1,257 @@
|
|||||||
|
{
|
||||||
|
"description": "KeycloakRoleMapping maps a role to a user or group",
|
||||||
|
"properties": {
|
||||||
|
"apiVersion": {
|
||||||
|
"description": "APIVersion defines the versioned schema of this representation of an object.\nServers should convert recognized schemas to the latest internal value, and\nmay reject unrecognized values.\nMore info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources",
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"kind": {
|
||||||
|
"description": "Kind is a string value representing the REST resource this object represents.\nServers may infer this from the endpoint the client submits requests to.\nCannot be updated.\nIn CamelCase.\nMore info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds",
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"metadata": {
|
||||||
|
"type": "object"
|
||||||
|
},
|
||||||
|
"spec": {
|
||||||
|
"description": "KeycloakRoleMappingSpec defines the desired state of KeycloakRoleMapping",
|
||||||
|
"properties": {
|
||||||
|
"role": {
|
||||||
|
"description": "Role defines the role to assign (inline definition)\nEither Role or RoleRef must be specified",
|
||||||
|
"properties": {
|
||||||
|
"clientId": {
|
||||||
|
"description": "ClientID is the client ID for client-level roles (alternative to ClientRef)",
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"clientRef": {
|
||||||
|
"description": "ClientRef references a KeycloakClient for client-level roles\nIf not specified, the role is a realm-level role",
|
||||||
|
"properties": {
|
||||||
|
"name": {
|
||||||
|
"description": "Name of the resource",
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"namespace": {
|
||||||
|
"description": "Namespace of the resource (optional, defaults to the same namespace)",
|
||||||
|
"type": "string"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"required": [
|
||||||
|
"name"
|
||||||
|
],
|
||||||
|
"type": "object",
|
||||||
|
"additionalProperties": false
|
||||||
|
},
|
||||||
|
"name": {
|
||||||
|
"description": "Name is the role name",
|
||||||
|
"type": "string"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"required": [
|
||||||
|
"name"
|
||||||
|
],
|
||||||
|
"type": "object",
|
||||||
|
"additionalProperties": false
|
||||||
|
},
|
||||||
|
"roleRef": {
|
||||||
|
"description": "RoleRef references an existing KeycloakRole resource\nEither Role or RoleRef must be specified",
|
||||||
|
"properties": {
|
||||||
|
"name": {
|
||||||
|
"description": "Name of the resource",
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"namespace": {
|
||||||
|
"description": "Namespace of the resource (optional, defaults to the same namespace)",
|
||||||
|
"type": "string"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"required": [
|
||||||
|
"name"
|
||||||
|
],
|
||||||
|
"type": "object",
|
||||||
|
"additionalProperties": false
|
||||||
|
},
|
||||||
|
"subject": {
|
||||||
|
"description": "Subject defines who the role is assigned to (user or group)",
|
||||||
|
"properties": {
|
||||||
|
"groupRef": {
|
||||||
|
"description": "GroupRef references a KeycloakGroup",
|
||||||
|
"properties": {
|
||||||
|
"name": {
|
||||||
|
"description": "Name of the resource",
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"namespace": {
|
||||||
|
"description": "Namespace of the resource (optional, defaults to the same namespace)",
|
||||||
|
"type": "string"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"required": [
|
||||||
|
"name"
|
||||||
|
],
|
||||||
|
"type": "object",
|
||||||
|
"additionalProperties": false
|
||||||
|
},
|
||||||
|
"userRef": {
|
||||||
|
"description": "UserRef references a KeycloakUser",
|
||||||
|
"properties": {
|
||||||
|
"name": {
|
||||||
|
"description": "Name of the resource",
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"namespace": {
|
||||||
|
"description": "Namespace of the resource (optional, defaults to the same namespace)",
|
||||||
|
"type": "string"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"required": [
|
||||||
|
"name"
|
||||||
|
],
|
||||||
|
"type": "object",
|
||||||
|
"additionalProperties": false
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"type": "object",
|
||||||
|
"additionalProperties": false
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"required": [
|
||||||
|
"subject"
|
||||||
|
],
|
||||||
|
"type": "object",
|
||||||
|
"additionalProperties": false
|
||||||
|
},
|
||||||
|
"status": {
|
||||||
|
"description": "KeycloakRoleMappingStatus defines the observed state of KeycloakRoleMapping",
|
||||||
|
"properties": {
|
||||||
|
"conditions": {
|
||||||
|
"description": "Conditions represent the latest available observations",
|
||||||
|
"items": {
|
||||||
|
"description": "Condition contains details for one aspect of the current state of this API Resource.",
|
||||||
|
"properties": {
|
||||||
|
"lastTransitionTime": {
|
||||||
|
"description": "lastTransitionTime is the last time the condition transitioned from one status to another.\nThis should be when the underlying condition changed. If that is not known, then using the time when the API field changed is acceptable.",
|
||||||
|
"format": "date-time",
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"message": {
|
||||||
|
"description": "message is a human readable message indicating details about the transition.\nThis may be an empty string.",
|
||||||
|
"maxLength": 32768,
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"observedGeneration": {
|
||||||
|
"description": "observedGeneration represents the .metadata.generation that the condition was set based upon.\nFor instance, if .metadata.generation is currently 12, but the .status.conditions[x].observedGeneration is 9, the condition is out of date\nwith respect to the current state of the instance.",
|
||||||
|
"format": "int64",
|
||||||
|
"minimum": 0,
|
||||||
|
"type": "integer"
|
||||||
|
},
|
||||||
|
"reason": {
|
||||||
|
"description": "reason contains a programmatic identifier indicating the reason for the condition's last transition.\nProducers of specific condition types may define expected values and meanings for this field,\nand whether the values are considered a guaranteed API.\nThe value should be a CamelCase string.\nThis field may not be empty.",
|
||||||
|
"maxLength": 1024,
|
||||||
|
"minLength": 1,
|
||||||
|
"pattern": "^[A-Za-z]([A-Za-z0-9_,:]*[A-Za-z0-9_])?$",
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"status": {
|
||||||
|
"description": "status of the condition, one of True, False, Unknown.",
|
||||||
|
"enum": [
|
||||||
|
"True",
|
||||||
|
"False",
|
||||||
|
"Unknown"
|
||||||
|
],
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"type": {
|
||||||
|
"description": "type of condition in CamelCase or in foo.example.com/CamelCase.",
|
||||||
|
"maxLength": 316,
|
||||||
|
"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])$",
|
||||||
|
"type": "string"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"required": [
|
||||||
|
"lastTransitionTime",
|
||||||
|
"message",
|
||||||
|
"reason",
|
||||||
|
"status",
|
||||||
|
"type"
|
||||||
|
],
|
||||||
|
"type": "object",
|
||||||
|
"additionalProperties": false
|
||||||
|
},
|
||||||
|
"type": "array"
|
||||||
|
},
|
||||||
|
"instance": {
|
||||||
|
"description": "Instance contains the resolved instance reference",
|
||||||
|
"properties": {
|
||||||
|
"clusterInstanceRef": {
|
||||||
|
"description": "ClusterInstanceRef is the name of the cluster instance",
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"instanceRef": {
|
||||||
|
"description": "InstanceRef is the name of the namespaced instance",
|
||||||
|
"type": "string"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"type": "object",
|
||||||
|
"additionalProperties": false
|
||||||
|
},
|
||||||
|
"message": {
|
||||||
|
"description": "Message contains additional information",
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"observedGeneration": {
|
||||||
|
"description": "ObservedGeneration is the generation of the spec that was last processed",
|
||||||
|
"format": "int64",
|
||||||
|
"type": "integer"
|
||||||
|
},
|
||||||
|
"ready": {
|
||||||
|
"description": "Ready indicates if the role mapping is applied",
|
||||||
|
"type": "boolean"
|
||||||
|
},
|
||||||
|
"realm": {
|
||||||
|
"description": "Realm contains the resolved realm reference",
|
||||||
|
"properties": {
|
||||||
|
"clusterRealmRef": {
|
||||||
|
"description": "ClusterRealmRef is the name of the cluster realm",
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"realmRef": {
|
||||||
|
"description": "RealmRef is the name of the namespaced realm",
|
||||||
|
"type": "string"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"type": "object",
|
||||||
|
"additionalProperties": false
|
||||||
|
},
|
||||||
|
"resourcePath": {
|
||||||
|
"description": "ResourcePath is the Keycloak API path for this role mapping",
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"roleName": {
|
||||||
|
"description": "RoleName is the resolved role name",
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"roleType": {
|
||||||
|
"description": "RoleType is either \"realm\" or \"client\"",
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"status": {
|
||||||
|
"description": "Status is a human-readable status message",
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"subjectID": {
|
||||||
|
"description": "SubjectID is the Keycloak ID of the subject",
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"subjectType": {
|
||||||
|
"description": "SubjectType is either \"user\" or \"group\"",
|
||||||
|
"type": "string"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"required": [
|
||||||
|
"ready"
|
||||||
|
],
|
||||||
|
"type": "object",
|
||||||
|
"additionalProperties": false
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"type": "object"
|
||||||
|
}
|
||||||
@@ -0,0 +1,252 @@
|
|||||||
|
{
|
||||||
|
"description": "KeycloakUser defines a user within a KeycloakRealm",
|
||||||
|
"properties": {
|
||||||
|
"apiVersion": {
|
||||||
|
"description": "APIVersion defines the versioned schema of this representation of an object.\nServers should convert recognized schemas to the latest internal value, and\nmay reject unrecognized values.\nMore info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources",
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"kind": {
|
||||||
|
"description": "Kind is a string value representing the REST resource this object represents.\nServers may infer this from the endpoint the client submits requests to.\nCannot be updated.\nIn CamelCase.\nMore info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds",
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"metadata": {
|
||||||
|
"type": "object"
|
||||||
|
},
|
||||||
|
"spec": {
|
||||||
|
"description": "KeycloakUserSpec defines the desired state of KeycloakUser",
|
||||||
|
"properties": {
|
||||||
|
"clientRef": {
|
||||||
|
"description": "ClientRef is a reference to a KeycloakClient for service account users\nOne of realmRef, clusterRealmRef, or clientRef must be specified\nUse this to manage the service account user associated with a client",
|
||||||
|
"properties": {
|
||||||
|
"name": {
|
||||||
|
"description": "Name of the resource",
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"namespace": {
|
||||||
|
"description": "Namespace of the resource (optional, defaults to the same namespace)",
|
||||||
|
"type": "string"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"required": [
|
||||||
|
"name"
|
||||||
|
],
|
||||||
|
"type": "object",
|
||||||
|
"additionalProperties": false
|
||||||
|
},
|
||||||
|
"clusterRealmRef": {
|
||||||
|
"description": "ClusterRealmRef is a reference to a ClusterKeycloakRealm\nOne of realmRef, clusterRealmRef, or clientRef must be specified\nUse this for regular realm users with cluster-scoped realms",
|
||||||
|
"properties": {
|
||||||
|
"name": {
|
||||||
|
"description": "Name of the cluster-scoped resource",
|
||||||
|
"type": "string"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"required": [
|
||||||
|
"name"
|
||||||
|
],
|
||||||
|
"type": "object",
|
||||||
|
"additionalProperties": false
|
||||||
|
},
|
||||||
|
"definition": {
|
||||||
|
"description": "Definition contains the Keycloak UserRepresentation",
|
||||||
|
"type": "object",
|
||||||
|
"x-kubernetes-preserve-unknown-fields": true
|
||||||
|
},
|
||||||
|
"initialPassword": {
|
||||||
|
"description": "InitialPassword sets the initial password for the user (only on creation)",
|
||||||
|
"properties": {
|
||||||
|
"temporary": {
|
||||||
|
"description": "Temporary indicates if the user must change password on first login",
|
||||||
|
"type": "boolean"
|
||||||
|
},
|
||||||
|
"value": {
|
||||||
|
"description": "Value is the password value",
|
||||||
|
"type": "string"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"required": [
|
||||||
|
"value"
|
||||||
|
],
|
||||||
|
"type": "object",
|
||||||
|
"additionalProperties": false
|
||||||
|
},
|
||||||
|
"realmRef": {
|
||||||
|
"description": "RealmRef is a reference to a KeycloakRealm\nOne of realmRef, clusterRealmRef, or clientRef must be specified\nUse this for regular realm users",
|
||||||
|
"properties": {
|
||||||
|
"name": {
|
||||||
|
"description": "Name of the resource",
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"namespace": {
|
||||||
|
"description": "Namespace of the resource (optional, defaults to the same namespace)",
|
||||||
|
"type": "string"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"required": [
|
||||||
|
"name"
|
||||||
|
],
|
||||||
|
"type": "object",
|
||||||
|
"additionalProperties": false
|
||||||
|
},
|
||||||
|
"userSecret": {
|
||||||
|
"description": "UserSecret configures where to store user credentials",
|
||||||
|
"properties": {
|
||||||
|
"generatePassword": {
|
||||||
|
"description": "GeneratePassword indicates whether to generate a password",
|
||||||
|
"type": "boolean"
|
||||||
|
},
|
||||||
|
"passwordKey": {
|
||||||
|
"description": "PasswordKey is the key for the password (defaults to \"password\")",
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"secretName": {
|
||||||
|
"description": "SecretName is the name of the Kubernetes secret to create",
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"usernameKey": {
|
||||||
|
"description": "UsernameKey is the key for the username in the secret (defaults to \"username\")",
|
||||||
|
"type": "string"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"required": [
|
||||||
|
"secretName"
|
||||||
|
],
|
||||||
|
"type": "object",
|
||||||
|
"additionalProperties": false
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"type": "object",
|
||||||
|
"additionalProperties": false
|
||||||
|
},
|
||||||
|
"status": {
|
||||||
|
"description": "KeycloakUserStatus defines the observed state of KeycloakUser",
|
||||||
|
"properties": {
|
||||||
|
"clientID": {
|
||||||
|
"description": "ClientID is the client UUID if this is a service account user",
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"conditions": {
|
||||||
|
"description": "Conditions represent the latest available observations",
|
||||||
|
"items": {
|
||||||
|
"description": "Condition contains details for one aspect of the current state of this API Resource.",
|
||||||
|
"properties": {
|
||||||
|
"lastTransitionTime": {
|
||||||
|
"description": "lastTransitionTime is the last time the condition transitioned from one status to another.\nThis should be when the underlying condition changed. If that is not known, then using the time when the API field changed is acceptable.",
|
||||||
|
"format": "date-time",
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"message": {
|
||||||
|
"description": "message is a human readable message indicating details about the transition.\nThis may be an empty string.",
|
||||||
|
"maxLength": 32768,
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"observedGeneration": {
|
||||||
|
"description": "observedGeneration represents the .metadata.generation that the condition was set based upon.\nFor instance, if .metadata.generation is currently 12, but the .status.conditions[x].observedGeneration is 9, the condition is out of date\nwith respect to the current state of the instance.",
|
||||||
|
"format": "int64",
|
||||||
|
"minimum": 0,
|
||||||
|
"type": "integer"
|
||||||
|
},
|
||||||
|
"reason": {
|
||||||
|
"description": "reason contains a programmatic identifier indicating the reason for the condition's last transition.\nProducers of specific condition types may define expected values and meanings for this field,\nand whether the values are considered a guaranteed API.\nThe value should be a CamelCase string.\nThis field may not be empty.",
|
||||||
|
"maxLength": 1024,
|
||||||
|
"minLength": 1,
|
||||||
|
"pattern": "^[A-Za-z]([A-Za-z0-9_,:]*[A-Za-z0-9_])?$",
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"status": {
|
||||||
|
"description": "status of the condition, one of True, False, Unknown.",
|
||||||
|
"enum": [
|
||||||
|
"True",
|
||||||
|
"False",
|
||||||
|
"Unknown"
|
||||||
|
],
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"type": {
|
||||||
|
"description": "type of condition in CamelCase or in foo.example.com/CamelCase.",
|
||||||
|
"maxLength": 316,
|
||||||
|
"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])$",
|
||||||
|
"type": "string"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"required": [
|
||||||
|
"lastTransitionTime",
|
||||||
|
"message",
|
||||||
|
"reason",
|
||||||
|
"status",
|
||||||
|
"type"
|
||||||
|
],
|
||||||
|
"type": "object",
|
||||||
|
"additionalProperties": false
|
||||||
|
},
|
||||||
|
"type": "array"
|
||||||
|
},
|
||||||
|
"instance": {
|
||||||
|
"description": "Instance contains the resolved instance reference",
|
||||||
|
"properties": {
|
||||||
|
"clusterInstanceRef": {
|
||||||
|
"description": "ClusterInstanceRef is the name of the cluster instance",
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"instanceRef": {
|
||||||
|
"description": "InstanceRef is the name of the namespaced instance",
|
||||||
|
"type": "string"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"type": "object",
|
||||||
|
"additionalProperties": false
|
||||||
|
},
|
||||||
|
"isServiceAccount": {
|
||||||
|
"description": "IsServiceAccount indicates if this user is a service account for a client",
|
||||||
|
"type": "boolean"
|
||||||
|
},
|
||||||
|
"message": {
|
||||||
|
"description": "Message contains additional information",
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"observedGeneration": {
|
||||||
|
"description": "ObservedGeneration is the generation of the spec that was last processed",
|
||||||
|
"format": "int64",
|
||||||
|
"type": "integer"
|
||||||
|
},
|
||||||
|
"ready": {
|
||||||
|
"description": "Ready indicates if the user is ready",
|
||||||
|
"type": "boolean"
|
||||||
|
},
|
||||||
|
"realm": {
|
||||||
|
"description": "Realm contains the resolved realm reference",
|
||||||
|
"properties": {
|
||||||
|
"clusterRealmRef": {
|
||||||
|
"description": "ClusterRealmRef is the name of the cluster realm",
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"realmRef": {
|
||||||
|
"description": "RealmRef is the name of the namespaced realm",
|
||||||
|
"type": "string"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"type": "object",
|
||||||
|
"additionalProperties": false
|
||||||
|
},
|
||||||
|
"resourcePath": {
|
||||||
|
"description": "ResourcePath is the Keycloak API path for this user",
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"status": {
|
||||||
|
"description": "Status is a human-readable status message",
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"userID": {
|
||||||
|
"description": "UserID is the Keycloak internal user ID",
|
||||||
|
"type": "string"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"required": [
|
||||||
|
"ready"
|
||||||
|
],
|
||||||
|
"type": "object",
|
||||||
|
"additionalProperties": false
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"type": "object"
|
||||||
|
}
|
||||||
@@ -0,0 +1,229 @@
|
|||||||
|
{
|
||||||
|
"description": "KeycloakUserCredential manages credentials for a KeycloakUser",
|
||||||
|
"properties": {
|
||||||
|
"apiVersion": {
|
||||||
|
"description": "APIVersion defines the versioned schema of this representation of an object.\nServers should convert recognized schemas to the latest internal value, and\nmay reject unrecognized values.\nMore info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources",
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"kind": {
|
||||||
|
"description": "Kind is a string value representing the REST resource this object represents.\nServers may infer this from the endpoint the client submits requests to.\nCannot be updated.\nIn CamelCase.\nMore info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds",
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"metadata": {
|
||||||
|
"type": "object"
|
||||||
|
},
|
||||||
|
"spec": {
|
||||||
|
"description": "KeycloakUserCredentialSpec defines the desired state of KeycloakUserCredential",
|
||||||
|
"properties": {
|
||||||
|
"userRef": {
|
||||||
|
"description": "UserRef is a reference to a KeycloakUser",
|
||||||
|
"properties": {
|
||||||
|
"name": {
|
||||||
|
"description": "Name of the resource",
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"namespace": {
|
||||||
|
"description": "Namespace of the resource (optional, defaults to the same namespace)",
|
||||||
|
"type": "string"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"required": [
|
||||||
|
"name"
|
||||||
|
],
|
||||||
|
"type": "object",
|
||||||
|
"additionalProperties": false
|
||||||
|
},
|
||||||
|
"userSecret": {
|
||||||
|
"description": "UserSecret defines the secret containing the credentials",
|
||||||
|
"properties": {
|
||||||
|
"create": {
|
||||||
|
"description": "Create indicates whether to create the secret if it doesn't exist",
|
||||||
|
"type": "boolean"
|
||||||
|
},
|
||||||
|
"emailKey": {
|
||||||
|
"description": "EmailKey is the key for the email in the secret",
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"passwordKey": {
|
||||||
|
"default": "password",
|
||||||
|
"description": "PasswordKey is the key for the password in the secret",
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"passwordPolicy": {
|
||||||
|
"description": "PasswordPolicy configures password generation",
|
||||||
|
"properties": {
|
||||||
|
"includeNumbers": {
|
||||||
|
"default": true,
|
||||||
|
"description": "IncludeNumbers includes numbers in the password",
|
||||||
|
"type": "boolean"
|
||||||
|
},
|
||||||
|
"includeSymbols": {
|
||||||
|
"default": true,
|
||||||
|
"description": "IncludeSymbols includes symbols in the password",
|
||||||
|
"type": "boolean"
|
||||||
|
},
|
||||||
|
"length": {
|
||||||
|
"default": 24,
|
||||||
|
"description": "Length is the password length (default 24)",
|
||||||
|
"type": "integer"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"type": "object",
|
||||||
|
"additionalProperties": false
|
||||||
|
},
|
||||||
|
"secretName": {
|
||||||
|
"description": "SecretName is the name of the Kubernetes secret",
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"usernameKey": {
|
||||||
|
"default": "username",
|
||||||
|
"description": "UsernameKey is the key for the username in the secret",
|
||||||
|
"type": "string"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"required": [
|
||||||
|
"secretName"
|
||||||
|
],
|
||||||
|
"type": "object",
|
||||||
|
"additionalProperties": false
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"required": [
|
||||||
|
"userRef",
|
||||||
|
"userSecret"
|
||||||
|
],
|
||||||
|
"type": "object",
|
||||||
|
"additionalProperties": false
|
||||||
|
},
|
||||||
|
"status": {
|
||||||
|
"description": "KeycloakUserCredentialStatus defines the observed state of KeycloakUserCredential",
|
||||||
|
"properties": {
|
||||||
|
"conditions": {
|
||||||
|
"description": "Conditions represent the latest available observations",
|
||||||
|
"items": {
|
||||||
|
"description": "Condition contains details for one aspect of the current state of this API Resource.",
|
||||||
|
"properties": {
|
||||||
|
"lastTransitionTime": {
|
||||||
|
"description": "lastTransitionTime is the last time the condition transitioned from one status to another.\nThis should be when the underlying condition changed. If that is not known, then using the time when the API field changed is acceptable.",
|
||||||
|
"format": "date-time",
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"message": {
|
||||||
|
"description": "message is a human readable message indicating details about the transition.\nThis may be an empty string.",
|
||||||
|
"maxLength": 32768,
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"observedGeneration": {
|
||||||
|
"description": "observedGeneration represents the .metadata.generation that the condition was set based upon.\nFor instance, if .metadata.generation is currently 12, but the .status.conditions[x].observedGeneration is 9, the condition is out of date\nwith respect to the current state of the instance.",
|
||||||
|
"format": "int64",
|
||||||
|
"minimum": 0,
|
||||||
|
"type": "integer"
|
||||||
|
},
|
||||||
|
"reason": {
|
||||||
|
"description": "reason contains a programmatic identifier indicating the reason for the condition's last transition.\nProducers of specific condition types may define expected values and meanings for this field,\nand whether the values are considered a guaranteed API.\nThe value should be a CamelCase string.\nThis field may not be empty.",
|
||||||
|
"maxLength": 1024,
|
||||||
|
"minLength": 1,
|
||||||
|
"pattern": "^[A-Za-z]([A-Za-z0-9_,:]*[A-Za-z0-9_])?$",
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"status": {
|
||||||
|
"description": "status of the condition, one of True, False, Unknown.",
|
||||||
|
"enum": [
|
||||||
|
"True",
|
||||||
|
"False",
|
||||||
|
"Unknown"
|
||||||
|
],
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"type": {
|
||||||
|
"description": "type of condition in CamelCase or in foo.example.com/CamelCase.",
|
||||||
|
"maxLength": 316,
|
||||||
|
"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])$",
|
||||||
|
"type": "string"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"required": [
|
||||||
|
"lastTransitionTime",
|
||||||
|
"message",
|
||||||
|
"reason",
|
||||||
|
"status",
|
||||||
|
"type"
|
||||||
|
],
|
||||||
|
"type": "object",
|
||||||
|
"additionalProperties": false
|
||||||
|
},
|
||||||
|
"type": "array"
|
||||||
|
},
|
||||||
|
"instance": {
|
||||||
|
"description": "Instance contains the resolved instance reference",
|
||||||
|
"properties": {
|
||||||
|
"clusterInstanceRef": {
|
||||||
|
"description": "ClusterInstanceRef is the name of the cluster instance",
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"instanceRef": {
|
||||||
|
"description": "InstanceRef is the name of the namespaced instance",
|
||||||
|
"type": "string"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"type": "object",
|
||||||
|
"additionalProperties": false
|
||||||
|
},
|
||||||
|
"message": {
|
||||||
|
"description": "Message contains additional information",
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"observedGeneration": {
|
||||||
|
"description": "ObservedGeneration is the generation of the spec that was last processed",
|
||||||
|
"format": "int64",
|
||||||
|
"type": "integer"
|
||||||
|
},
|
||||||
|
"passwordHash": {
|
||||||
|
"description": "PasswordHash is a hash of the last synchronized password (for change detection)",
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"ready": {
|
||||||
|
"description": "Ready indicates if the credentials are synchronized",
|
||||||
|
"type": "boolean"
|
||||||
|
},
|
||||||
|
"realm": {
|
||||||
|
"description": "Realm contains the resolved realm reference",
|
||||||
|
"properties": {
|
||||||
|
"clusterRealmRef": {
|
||||||
|
"description": "ClusterRealmRef is the name of the cluster realm",
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"realmRef": {
|
||||||
|
"description": "RealmRef is the name of the namespaced realm",
|
||||||
|
"type": "string"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"type": "object",
|
||||||
|
"additionalProperties": false
|
||||||
|
},
|
||||||
|
"resourcePath": {
|
||||||
|
"description": "ResourcePath is the Keycloak API path for the user",
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"secretCreated": {
|
||||||
|
"description": "SecretCreated indicates if the secret was created by the operator",
|
||||||
|
"type": "boolean"
|
||||||
|
},
|
||||||
|
"secretResourceVersion": {
|
||||||
|
"description": "SecretResourceVersion is the resource version of the secret when last synced",
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"status": {
|
||||||
|
"description": "Status is a human-readable status message",
|
||||||
|
"type": "string"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"required": [
|
||||||
|
"ready"
|
||||||
|
],
|
||||||
|
"type": "object",
|
||||||
|
"additionalProperties": false
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"type": "object"
|
||||||
|
}
|
||||||
@@ -0,0 +1,642 @@
|
|||||||
|
{
|
||||||
|
"description": "Kustomization is the Schema for the kustomizations API.",
|
||||||
|
"properties": {
|
||||||
|
"apiVersion": {
|
||||||
|
"description": "APIVersion defines the versioned schema of this representation of an object.\nServers should convert recognized schemas to the latest internal value, and\nmay reject unrecognized values.\nMore info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources",
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"kind": {
|
||||||
|
"description": "Kind is a string value representing the REST resource this object represents.\nServers may infer this from the endpoint the client submits requests to.\nCannot be updated.\nIn CamelCase.\nMore info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds",
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"metadata": {
|
||||||
|
"type": "object"
|
||||||
|
},
|
||||||
|
"spec": {
|
||||||
|
"description": "KustomizationSpec defines the configuration to calculate the desired state\nfrom a Source using Kustomize.",
|
||||||
|
"properties": {
|
||||||
|
"commonMetadata": {
|
||||||
|
"description": "CommonMetadata specifies the common labels and annotations that are\napplied to all resources. Any existing label or annotation will be\noverridden if its key matches a common one.",
|
||||||
|
"properties": {
|
||||||
|
"annotations": {
|
||||||
|
"additionalProperties": {
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"description": "Annotations to be added to the object's metadata.",
|
||||||
|
"type": "object"
|
||||||
|
},
|
||||||
|
"labels": {
|
||||||
|
"additionalProperties": {
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"description": "Labels to be added to the object's metadata.",
|
||||||
|
"type": "object"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"type": "object",
|
||||||
|
"additionalProperties": false
|
||||||
|
},
|
||||||
|
"components": {
|
||||||
|
"description": "Components specifies relative paths to kustomize Components.",
|
||||||
|
"items": {
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"type": "array"
|
||||||
|
},
|
||||||
|
"decryption": {
|
||||||
|
"description": "Decrypt Kubernetes secrets before applying them on the cluster.",
|
||||||
|
"properties": {
|
||||||
|
"provider": {
|
||||||
|
"description": "Provider is the name of the decryption engine.",
|
||||||
|
"enum": [
|
||||||
|
"sops"
|
||||||
|
],
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"secretRef": {
|
||||||
|
"description": "The secret name containing the private OpenPGP keys used for decryption.\nA static credential for a cloud provider defined inside the Secret\ntakes priority to secret-less authentication with the ServiceAccountName\nfield.",
|
||||||
|
"properties": {
|
||||||
|
"name": {
|
||||||
|
"description": "Name of the referent.",
|
||||||
|
"type": "string"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"required": [
|
||||||
|
"name"
|
||||||
|
],
|
||||||
|
"type": "object",
|
||||||
|
"additionalProperties": false
|
||||||
|
},
|
||||||
|
"serviceAccountName": {
|
||||||
|
"description": "ServiceAccountName is the name of the service account used to\nauthenticate with KMS services from cloud providers. If a\nstatic credential for a given cloud provider is defined\ninside the Secret referenced by SecretRef, that static\ncredential takes priority.",
|
||||||
|
"type": "string"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"required": [
|
||||||
|
"provider"
|
||||||
|
],
|
||||||
|
"type": "object",
|
||||||
|
"additionalProperties": false
|
||||||
|
},
|
||||||
|
"deletionPolicy": {
|
||||||
|
"description": "DeletionPolicy can be used to control garbage collection when this\nKustomization is deleted. Valid values are ('MirrorPrune', 'Delete',\n'WaitForTermination', 'Orphan'). 'MirrorPrune' mirrors the Prune field\n(orphan if false, delete if true). Defaults to 'MirrorPrune'.",
|
||||||
|
"enum": [
|
||||||
|
"MirrorPrune",
|
||||||
|
"Delete",
|
||||||
|
"WaitForTermination",
|
||||||
|
"Orphan"
|
||||||
|
],
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"dependsOn": {
|
||||||
|
"description": "DependsOn may contain a DependencyReference slice\nwith references to Kustomization resources that must be ready before this\nKustomization can be reconciled.",
|
||||||
|
"items": {
|
||||||
|
"description": "DependencyReference defines a Kustomization dependency on another Kustomization resource.",
|
||||||
|
"properties": {
|
||||||
|
"name": {
|
||||||
|
"description": "Name of the referent.",
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"namespace": {
|
||||||
|
"description": "Namespace of the referent, defaults to the namespace of the Kustomization\nresource object that contains the reference.",
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"readyExpr": {
|
||||||
|
"description": "ReadyExpr is a CEL expression that can be used to assess the readiness\nof a dependency. When specified, the built-in readiness check\nis replaced by the logic defined in the CEL expression.\nTo make the CEL expression additive to the built-in readiness check,\nthe feature gate `AdditiveCELDependencyCheck` must be set to `true`.",
|
||||||
|
"type": "string"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"required": [
|
||||||
|
"name"
|
||||||
|
],
|
||||||
|
"type": "object",
|
||||||
|
"additionalProperties": false
|
||||||
|
},
|
||||||
|
"type": "array"
|
||||||
|
},
|
||||||
|
"force": {
|
||||||
|
"default": false,
|
||||||
|
"description": "Force instructs the controller to recreate resources\nwhen patching fails due to an immutable field change.",
|
||||||
|
"type": "boolean"
|
||||||
|
},
|
||||||
|
"healthCheckExprs": {
|
||||||
|
"description": "HealthCheckExprs is a list of healthcheck expressions for evaluating the\nhealth of custom resources using Common Expression Language (CEL).\nThe expressions are evaluated only when Wait or HealthChecks are specified.",
|
||||||
|
"items": {
|
||||||
|
"description": "CustomHealthCheck defines the health check for custom resources.",
|
||||||
|
"properties": {
|
||||||
|
"apiVersion": {
|
||||||
|
"description": "APIVersion of the custom resource under evaluation.",
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"current": {
|
||||||
|
"description": "Current is the CEL expression that determines if the status\nof the custom resource has reached the desired state.",
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"failed": {
|
||||||
|
"description": "Failed is the CEL expression that determines if the status\nof the custom resource has failed to reach the desired state.",
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"inProgress": {
|
||||||
|
"description": "InProgress is the CEL expression that determines if the status\nof the custom resource has not yet reached the desired state.",
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"kind": {
|
||||||
|
"description": "Kind of the custom resource under evaluation.",
|
||||||
|
"type": "string"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"required": [
|
||||||
|
"apiVersion",
|
||||||
|
"current",
|
||||||
|
"kind"
|
||||||
|
],
|
||||||
|
"type": "object",
|
||||||
|
"additionalProperties": false
|
||||||
|
},
|
||||||
|
"type": "array"
|
||||||
|
},
|
||||||
|
"healthChecks": {
|
||||||
|
"description": "A list of resources to be included in the health assessment.",
|
||||||
|
"items": {
|
||||||
|
"description": "NamespacedObjectKindReference contains enough information to locate the typed referenced Kubernetes resource object\nin any namespace.",
|
||||||
|
"properties": {
|
||||||
|
"apiVersion": {
|
||||||
|
"description": "API version of the referent, if not specified the Kubernetes preferred version will be used.",
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"kind": {
|
||||||
|
"description": "Kind of the referent.",
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"name": {
|
||||||
|
"description": "Name of the referent.",
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"namespace": {
|
||||||
|
"description": "Namespace of the referent, when not specified it acts as LocalObjectReference.",
|
||||||
|
"type": "string"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"required": [
|
||||||
|
"kind",
|
||||||
|
"name"
|
||||||
|
],
|
||||||
|
"type": "object",
|
||||||
|
"additionalProperties": false
|
||||||
|
},
|
||||||
|
"type": "array"
|
||||||
|
},
|
||||||
|
"ignoreMissingComponents": {
|
||||||
|
"description": "IgnoreMissingComponents instructs the controller to ignore Components paths\nnot found in source by removing them from the generated kustomization.yaml\nbefore running kustomize build.",
|
||||||
|
"type": "boolean"
|
||||||
|
},
|
||||||
|
"images": {
|
||||||
|
"description": "Images is a list of (image name, new name, new tag or digest)\nfor changing image names, tags or digests. This can also be achieved with a\npatch, but this operator is simpler to specify.",
|
||||||
|
"items": {
|
||||||
|
"description": "Image contains an image name, a new name, a new tag or digest, which will replace the original name and tag.",
|
||||||
|
"properties": {
|
||||||
|
"digest": {
|
||||||
|
"description": "Digest is the value used to replace the original image tag.\nIf digest is present NewTag value is ignored.",
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"name": {
|
||||||
|
"description": "Name is a tag-less image name.",
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"newName": {
|
||||||
|
"description": "NewName is the value used to replace the original name.",
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"newTag": {
|
||||||
|
"description": "NewTag is the value used to replace the original tag.",
|
||||||
|
"type": "string"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"required": [
|
||||||
|
"name"
|
||||||
|
],
|
||||||
|
"type": "object",
|
||||||
|
"additionalProperties": false
|
||||||
|
},
|
||||||
|
"type": "array"
|
||||||
|
},
|
||||||
|
"interval": {
|
||||||
|
"description": "The interval at which to reconcile the Kustomization.\nThis interval is approximate and may be subject to jitter to ensure\nefficient use of resources.",
|
||||||
|
"pattern": "^([0-9]+(\\.[0-9]+)?(ms|s|m|h))+$",
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"kubeConfig": {
|
||||||
|
"description": "The KubeConfig for reconciling the Kustomization on a remote cluster.\nWhen used in combination with KustomizationSpec.ServiceAccountName,\nforces the controller to act on behalf of that Service Account at the\ntarget cluster.\nIf the --default-service-account flag is set, its value will be used as\na controller level fallback for when KustomizationSpec.ServiceAccountName\nis empty.",
|
||||||
|
"properties": {
|
||||||
|
"configMapRef": {
|
||||||
|
"description": "ConfigMapRef holds an optional name of a ConfigMap that contains\nthe following keys:\n\n- `provider`: the provider to use. One of `aws`, `azure`, `gcp`, or\n `generic`. Required.\n- `cluster`: the fully qualified resource name of the Kubernetes\n cluster in the cloud provider API. Not used by the `generic`\n provider. Required when one of `address` or `ca.crt` is not set.\n- `address`: the address of the Kubernetes API server. Required\n for `generic`. For the other providers, if not specified, the\n first address in the cluster resource will be used, and if\n specified, it must match one of the addresses in the cluster\n resource.\n If audiences is not set, will be used as the audience for the\n `generic` provider.\n- `ca.crt`: the optional PEM-encoded CA certificate for the\n Kubernetes API server. If not set, the controller will use the\n CA certificate from the cluster resource.\n- `audiences`: the optional audiences as a list of\n line-break-separated strings for the Kubernetes ServiceAccount\n token. Defaults to the `address` for the `generic` provider, or\n to specific values for the other providers depending on the\n provider.\n- `serviceAccountName`: the optional name of the Kubernetes\n ServiceAccount in the same namespace that should be used\n for authentication. If not specified, the controller\n ServiceAccount will be used.\n\nMutually exclusive with SecretRef.",
|
||||||
|
"properties": {
|
||||||
|
"name": {
|
||||||
|
"description": "Name of the referent.",
|
||||||
|
"type": "string"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"required": [
|
||||||
|
"name"
|
||||||
|
],
|
||||||
|
"type": "object",
|
||||||
|
"additionalProperties": false
|
||||||
|
},
|
||||||
|
"secretRef": {
|
||||||
|
"description": "SecretRef holds an optional name of a secret that contains a key with\nthe kubeconfig file as the value. If no key is set, the key will default\nto 'value'. Mutually exclusive with ConfigMapRef.\nIt is recommended that the kubeconfig is self-contained, and the secret\nis regularly updated if credentials such as a cloud-access-token expire.\nCloud specific `cmd-path` auth helpers will not function without adding\nbinaries and credentials to the Pod that is responsible for reconciling\nKubernetes resources. Supported only for the generic provider.",
|
||||||
|
"properties": {
|
||||||
|
"key": {
|
||||||
|
"description": "Key in the Secret, when not specified an implementation-specific default key is used.",
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"name": {
|
||||||
|
"description": "Name of the Secret.",
|
||||||
|
"type": "string"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"required": [
|
||||||
|
"name"
|
||||||
|
],
|
||||||
|
"type": "object",
|
||||||
|
"additionalProperties": false
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"type": "object",
|
||||||
|
"x-kubernetes-validations": [
|
||||||
|
{
|
||||||
|
"message": "exactly one of spec.kubeConfig.configMapRef or spec.kubeConfig.secretRef must be specified",
|
||||||
|
"rule": "has(self.configMapRef) || has(self.secretRef)"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"message": "exactly one of spec.kubeConfig.configMapRef or spec.kubeConfig.secretRef must be specified",
|
||||||
|
"rule": "!has(self.configMapRef) || !has(self.secretRef)"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"additionalProperties": false
|
||||||
|
},
|
||||||
|
"namePrefix": {
|
||||||
|
"description": "NamePrefix will prefix the names of all managed resources.",
|
||||||
|
"maxLength": 200,
|
||||||
|
"minLength": 1,
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"nameSuffix": {
|
||||||
|
"description": "NameSuffix will suffix the names of all managed resources.",
|
||||||
|
"maxLength": 200,
|
||||||
|
"minLength": 1,
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"patches": {
|
||||||
|
"description": "Strategic merge and JSON patches, defined as inline YAML objects,\ncapable of targeting objects based on kind, label and annotation selectors.",
|
||||||
|
"items": {
|
||||||
|
"description": "Patch contains an inline StrategicMerge or JSON6902 patch, and the target the patch should\nbe applied to.",
|
||||||
|
"properties": {
|
||||||
|
"patch": {
|
||||||
|
"description": "Patch contains an inline StrategicMerge patch or an inline JSON6902 patch with\nan array of operation objects.",
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"target": {
|
||||||
|
"description": "Target points to the resources that the patch document should be applied to.",
|
||||||
|
"properties": {
|
||||||
|
"annotationSelector": {
|
||||||
|
"description": "AnnotationSelector is a string that follows the label selection expression\nhttps://kubernetes.io/docs/concepts/overview/working-with-objects/labels/#api\nIt matches with the resource annotations.",
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"group": {
|
||||||
|
"description": "Group is the API group to select resources from.\nTogether with Version and Kind it is capable of unambiguously identifying and/or selecting resources.\nhttps://github.com/kubernetes/community/blob/master/contributors/design-proposals/api-machinery/api-group.md",
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"kind": {
|
||||||
|
"description": "Kind of the API Group to select resources from.\nTogether with Group and Version it is capable of unambiguously\nidentifying and/or selecting resources.\nhttps://github.com/kubernetes/community/blob/master/contributors/design-proposals/api-machinery/api-group.md",
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"labelSelector": {
|
||||||
|
"description": "LabelSelector is a string that follows the label selection expression\nhttps://kubernetes.io/docs/concepts/overview/working-with-objects/labels/#api\nIt matches with the resource labels.",
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"name": {
|
||||||
|
"description": "Name to match resources with.",
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"namespace": {
|
||||||
|
"description": "Namespace to select resources from.",
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"version": {
|
||||||
|
"description": "Version of the API Group to select resources from.\nTogether with Group and Kind it is capable of unambiguously identifying and/or selecting resources.\nhttps://github.com/kubernetes/community/blob/master/contributors/design-proposals/api-machinery/api-group.md",
|
||||||
|
"type": "string"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"type": "object",
|
||||||
|
"additionalProperties": false
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"required": [
|
||||||
|
"patch"
|
||||||
|
],
|
||||||
|
"type": "object",
|
||||||
|
"additionalProperties": false
|
||||||
|
},
|
||||||
|
"type": "array"
|
||||||
|
},
|
||||||
|
"path": {
|
||||||
|
"description": "Path to the directory containing the kustomization.yaml file, or the\nset of plain YAMLs a kustomization.yaml should be generated for.\nDefaults to 'None', which translates to the root path of the SourceRef.",
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"postBuild": {
|
||||||
|
"description": "PostBuild describes which actions to perform on the YAML manifest\ngenerated by building the kustomize overlay.",
|
||||||
|
"properties": {
|
||||||
|
"substitute": {
|
||||||
|
"additionalProperties": {
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"description": "Substitute holds a map of key/value pairs.\nThe variables defined in your YAML manifests that match any of the keys\ndefined in the map will be substituted with the set value.\nIncludes support for bash string replacement functions\ne.g. ${var:=default}, ${var:position} and ${var/substring/replacement}.",
|
||||||
|
"type": "object"
|
||||||
|
},
|
||||||
|
"substituteFrom": {
|
||||||
|
"description": "SubstituteFrom holds references to ConfigMaps and Secrets containing\nthe variables and their values to be substituted in the YAML manifests.\nThe ConfigMap and the Secret data keys represent the var names, and they\nmust match the vars declared in the manifests for the substitution to\nhappen.",
|
||||||
|
"items": {
|
||||||
|
"description": "SubstituteReference contains a reference to a resource containing\nthe variables name and value.",
|
||||||
|
"properties": {
|
||||||
|
"kind": {
|
||||||
|
"description": "Kind of the values referent, valid values are ('Secret', 'ConfigMap').",
|
||||||
|
"enum": [
|
||||||
|
"Secret",
|
||||||
|
"ConfigMap"
|
||||||
|
],
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"name": {
|
||||||
|
"description": "Name of the values referent. Should reside in the same namespace as the\nreferring resource.",
|
||||||
|
"maxLength": 253,
|
||||||
|
"minLength": 1,
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"optional": {
|
||||||
|
"default": false,
|
||||||
|
"description": "Optional indicates whether the referenced resource must exist, or whether to\ntolerate its absence. If true and the referenced resource is absent, proceed\nas if the resource was present but empty, without any variables defined.",
|
||||||
|
"type": "boolean"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"required": [
|
||||||
|
"kind",
|
||||||
|
"name"
|
||||||
|
],
|
||||||
|
"type": "object",
|
||||||
|
"additionalProperties": false
|
||||||
|
},
|
||||||
|
"type": "array"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"type": "object",
|
||||||
|
"additionalProperties": false
|
||||||
|
},
|
||||||
|
"prune": {
|
||||||
|
"description": "Prune enables garbage collection.",
|
||||||
|
"type": "boolean"
|
||||||
|
},
|
||||||
|
"retryInterval": {
|
||||||
|
"description": "The interval at which to retry a previously failed reconciliation.\nWhen not specified, the controller uses the KustomizationSpec.Interval\nvalue to retry failures.",
|
||||||
|
"pattern": "^([0-9]+(\\.[0-9]+)?(ms|s|m|h))+$",
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"serviceAccountName": {
|
||||||
|
"description": "The name of the Kubernetes service account to impersonate\nwhen reconciling this Kustomization.",
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"sourceRef": {
|
||||||
|
"description": "Reference of the source where the kustomization file is.",
|
||||||
|
"properties": {
|
||||||
|
"apiVersion": {
|
||||||
|
"description": "API version of the referent.",
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"kind": {
|
||||||
|
"description": "Kind of the referent.",
|
||||||
|
"enum": [
|
||||||
|
"OCIRepository",
|
||||||
|
"GitRepository",
|
||||||
|
"Bucket",
|
||||||
|
"ExternalArtifact"
|
||||||
|
],
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"name": {
|
||||||
|
"description": "Name of the referent.",
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"namespace": {
|
||||||
|
"description": "Namespace of the referent, defaults to the namespace of the Kubernetes\nresource object that contains the reference.",
|
||||||
|
"type": "string"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"required": [
|
||||||
|
"kind",
|
||||||
|
"name"
|
||||||
|
],
|
||||||
|
"type": "object",
|
||||||
|
"additionalProperties": false
|
||||||
|
},
|
||||||
|
"suspend": {
|
||||||
|
"description": "This flag tells the controller to suspend subsequent kustomize executions,\nit does not apply to already started executions. Defaults to false.",
|
||||||
|
"type": "boolean"
|
||||||
|
},
|
||||||
|
"targetNamespace": {
|
||||||
|
"description": "TargetNamespace sets or overrides the namespace in the\nkustomization.yaml file.",
|
||||||
|
"maxLength": 63,
|
||||||
|
"minLength": 1,
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"timeout": {
|
||||||
|
"description": "Timeout for validation, apply and health checking operations.\nDefaults to 'Interval' duration.",
|
||||||
|
"pattern": "^([0-9]+(\\.[0-9]+)?(ms|s|m|h))+$",
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"wait": {
|
||||||
|
"description": "Wait instructs the controller to check the health of all the reconciled\nresources. When enabled, the HealthChecks are ignored. Defaults to false.",
|
||||||
|
"type": "boolean"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"required": [
|
||||||
|
"interval",
|
||||||
|
"prune",
|
||||||
|
"sourceRef"
|
||||||
|
],
|
||||||
|
"type": "object",
|
||||||
|
"additionalProperties": false
|
||||||
|
},
|
||||||
|
"status": {
|
||||||
|
"default": {
|
||||||
|
"observedGeneration": -1
|
||||||
|
},
|
||||||
|
"description": "KustomizationStatus defines the observed state of a kustomization.",
|
||||||
|
"properties": {
|
||||||
|
"conditions": {
|
||||||
|
"items": {
|
||||||
|
"description": "Condition contains details for one aspect of the current state of this API Resource.",
|
||||||
|
"properties": {
|
||||||
|
"lastTransitionTime": {
|
||||||
|
"description": "lastTransitionTime is the last time the condition transitioned from one status to another.\nThis should be when the underlying condition changed. If that is not known, then using the time when the API field changed is acceptable.",
|
||||||
|
"format": "date-time",
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"message": {
|
||||||
|
"description": "message is a human readable message indicating details about the transition.\nThis may be an empty string.",
|
||||||
|
"maxLength": 32768,
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"observedGeneration": {
|
||||||
|
"description": "observedGeneration represents the .metadata.generation that the condition was set based upon.\nFor instance, if .metadata.generation is currently 12, but the .status.conditions[x].observedGeneration is 9, the condition is out of date\nwith respect to the current state of the instance.",
|
||||||
|
"format": "int64",
|
||||||
|
"minimum": 0,
|
||||||
|
"type": "integer"
|
||||||
|
},
|
||||||
|
"reason": {
|
||||||
|
"description": "reason contains a programmatic identifier indicating the reason for the condition's last transition.\nProducers of specific condition types may define expected values and meanings for this field,\nand whether the values are considered a guaranteed API.\nThe value should be a CamelCase string.\nThis field may not be empty.",
|
||||||
|
"maxLength": 1024,
|
||||||
|
"minLength": 1,
|
||||||
|
"pattern": "^[A-Za-z]([A-Za-z0-9_,:]*[A-Za-z0-9_])?$",
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"status": {
|
||||||
|
"description": "status of the condition, one of True, False, Unknown.",
|
||||||
|
"enum": [
|
||||||
|
"True",
|
||||||
|
"False",
|
||||||
|
"Unknown"
|
||||||
|
],
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"type": {
|
||||||
|
"description": "type of condition in CamelCase or in foo.example.com/CamelCase.",
|
||||||
|
"maxLength": 316,
|
||||||
|
"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])$",
|
||||||
|
"type": "string"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"required": [
|
||||||
|
"lastTransitionTime",
|
||||||
|
"message",
|
||||||
|
"reason",
|
||||||
|
"status",
|
||||||
|
"type"
|
||||||
|
],
|
||||||
|
"type": "object",
|
||||||
|
"additionalProperties": false
|
||||||
|
},
|
||||||
|
"type": "array"
|
||||||
|
},
|
||||||
|
"history": {
|
||||||
|
"description": "History contains a set of snapshots of the last reconciliation attempts\ntracking the revision, the state and the duration of each attempt.",
|
||||||
|
"items": {
|
||||||
|
"description": "Snapshot represents a point-in-time record of a group of resources reconciliation,\nincluding timing information, status, and a unique digest identifier.",
|
||||||
|
"properties": {
|
||||||
|
"digest": {
|
||||||
|
"description": "Digest is the checksum in the format `<algo>:<hex>` of the resources in this snapshot.",
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"firstReconciled": {
|
||||||
|
"description": "FirstReconciled is the time when this revision was first reconciled to the cluster.",
|
||||||
|
"format": "date-time",
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"lastReconciled": {
|
||||||
|
"description": "LastReconciled is the time when this revision was last reconciled to the cluster.",
|
||||||
|
"format": "date-time",
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"lastReconciledDuration": {
|
||||||
|
"description": "LastReconciledDuration is time it took to reconcile the resources in this revision.",
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"lastReconciledStatus": {
|
||||||
|
"description": "LastReconciledStatus is the status of the last reconciliation.",
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"metadata": {
|
||||||
|
"additionalProperties": {
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"description": "Metadata contains additional information about the snapshot.",
|
||||||
|
"type": "object"
|
||||||
|
},
|
||||||
|
"totalReconciliations": {
|
||||||
|
"description": "TotalReconciliations is the total number of reconciliations that have occurred for this snapshot.",
|
||||||
|
"format": "int64",
|
||||||
|
"type": "integer"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"required": [
|
||||||
|
"digest",
|
||||||
|
"firstReconciled",
|
||||||
|
"lastReconciled",
|
||||||
|
"lastReconciledDuration",
|
||||||
|
"lastReconciledStatus",
|
||||||
|
"totalReconciliations"
|
||||||
|
],
|
||||||
|
"type": "object",
|
||||||
|
"additionalProperties": false
|
||||||
|
},
|
||||||
|
"type": "array"
|
||||||
|
},
|
||||||
|
"inventory": {
|
||||||
|
"description": "Inventory contains the list of Kubernetes resource object references that\nhave been successfully applied.",
|
||||||
|
"properties": {
|
||||||
|
"entries": {
|
||||||
|
"description": "Entries of Kubernetes resource object references.",
|
||||||
|
"items": {
|
||||||
|
"description": "ResourceRef contains the information necessary to locate a resource within a cluster.",
|
||||||
|
"properties": {
|
||||||
|
"id": {
|
||||||
|
"description": "ID is the string representation of the Kubernetes resource object's metadata,\nin the format '<namespace>_<name>_<group>_<kind>'.",
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"v": {
|
||||||
|
"description": "Version is the API version of the Kubernetes resource object's kind.",
|
||||||
|
"type": "string"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"required": [
|
||||||
|
"id",
|
||||||
|
"v"
|
||||||
|
],
|
||||||
|
"type": "object",
|
||||||
|
"additionalProperties": false
|
||||||
|
},
|
||||||
|
"type": "array"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"required": [
|
||||||
|
"entries"
|
||||||
|
],
|
||||||
|
"type": "object",
|
||||||
|
"additionalProperties": false
|
||||||
|
},
|
||||||
|
"lastAppliedOriginRevision": {
|
||||||
|
"description": "The last successfully applied origin revision.\nEquals the origin revision of the applied Artifact from the referenced Source.\nUsually present on the Metadata of the applied Artifact and depends on the\nSource type, e.g. for OCI it's the value associated with the key\n\"org.opencontainers.image.revision\".",
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"lastAppliedRevision": {
|
||||||
|
"description": "The last successfully applied revision.\nEquals the Revision of the applied Artifact from the referenced Source.",
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"lastAttemptedRevision": {
|
||||||
|
"description": "LastAttemptedRevision is the revision of the last reconciliation attempt.",
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"lastHandledReconcileAt": {
|
||||||
|
"description": "LastHandledReconcileAt holds the value of the most recent\nreconcile request value, so a change of the annotation value\ncan be detected.",
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"observedGeneration": {
|
||||||
|
"description": "ObservedGeneration is the last reconciled generation.",
|
||||||
|
"format": "int64",
|
||||||
|
"type": "integer"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"type": "object",
|
||||||
|
"additionalProperties": false
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"type": "object"
|
||||||
|
}
|
||||||
@@ -0,0 +1,212 @@
|
|||||||
|
{
|
||||||
|
"description": "Alert is the Schema for the alerts API",
|
||||||
|
"properties": {
|
||||||
|
"apiVersion": {
|
||||||
|
"description": "APIVersion defines the versioned schema of this representation of an object.\nServers should convert recognized schemas to the latest internal value, and\nmay reject unrecognized values.\nMore info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources",
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"kind": {
|
||||||
|
"description": "Kind is a string value representing the REST resource this object represents.\nServers may infer this from the endpoint the client submits requests to.\nCannot be updated.\nIn CamelCase.\nMore info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds",
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"metadata": {
|
||||||
|
"type": "object"
|
||||||
|
},
|
||||||
|
"spec": {
|
||||||
|
"description": "AlertSpec defines an alerting rule for events involving a list of objects.",
|
||||||
|
"properties": {
|
||||||
|
"eventMetadata": {
|
||||||
|
"additionalProperties": {
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"description": "EventMetadata is an optional field for adding metadata to events dispatched by the\ncontroller. This can be used for enhancing the context of the event. If a field\nwould override one already present on the original event as generated by the emitter,\nthen the override doesn't happen, i.e. the original value is preserved, and an info\nlog is printed.",
|
||||||
|
"type": "object"
|
||||||
|
},
|
||||||
|
"eventSeverity": {
|
||||||
|
"default": "info",
|
||||||
|
"description": "EventSeverity specifies how to filter events based on severity.\nIf set to 'info' no events will be filtered.",
|
||||||
|
"enum": [
|
||||||
|
"info",
|
||||||
|
"error"
|
||||||
|
],
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"eventSources": {
|
||||||
|
"description": "EventSources specifies how to filter events based\non the involved object kind, name and namespace.",
|
||||||
|
"items": {
|
||||||
|
"description": "CrossNamespaceObjectReference contains enough information to let you locate the\ntyped referenced object at cluster level",
|
||||||
|
"properties": {
|
||||||
|
"apiVersion": {
|
||||||
|
"description": "API version of the referent",
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"kind": {
|
||||||
|
"description": "Kind of the referent",
|
||||||
|
"enum": [
|
||||||
|
"Bucket",
|
||||||
|
"GitRepository",
|
||||||
|
"Kustomization",
|
||||||
|
"HelmRelease",
|
||||||
|
"HelmChart",
|
||||||
|
"HelmRepository",
|
||||||
|
"ImageRepository",
|
||||||
|
"ImagePolicy",
|
||||||
|
"ImageUpdateAutomation",
|
||||||
|
"OCIRepository",
|
||||||
|
"ArtifactGenerator",
|
||||||
|
"ExternalArtifact"
|
||||||
|
],
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"matchLabels": {
|
||||||
|
"additionalProperties": {
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"description": "MatchLabels is a map of {key,value} pairs. A single {key,value} in the matchLabels\nmap is equivalent to an element of matchExpressions, whose key field is \"key\", the\noperator is \"In\", and the values array contains only \"value\". The requirements are ANDed.\nMatchLabels requires the name to be set to `*`.",
|
||||||
|
"type": "object"
|
||||||
|
},
|
||||||
|
"name": {
|
||||||
|
"description": "Name of the referent\nIf multiple resources are targeted `*` may be set.",
|
||||||
|
"maxLength": 253,
|
||||||
|
"minLength": 1,
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"namespace": {
|
||||||
|
"description": "Namespace of the referent",
|
||||||
|
"maxLength": 253,
|
||||||
|
"minLength": 1,
|
||||||
|
"type": "string"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"required": [
|
||||||
|
"kind",
|
||||||
|
"name"
|
||||||
|
],
|
||||||
|
"type": "object",
|
||||||
|
"additionalProperties": false
|
||||||
|
},
|
||||||
|
"type": "array"
|
||||||
|
},
|
||||||
|
"exclusionList": {
|
||||||
|
"description": "ExclusionList specifies a list of Golang regular expressions\nto be used for excluding messages.",
|
||||||
|
"items": {
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"type": "array"
|
||||||
|
},
|
||||||
|
"inclusionList": {
|
||||||
|
"description": "InclusionList specifies a list of Golang regular expressions\nto be used for including messages.",
|
||||||
|
"items": {
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"type": "array"
|
||||||
|
},
|
||||||
|
"providerRef": {
|
||||||
|
"description": "ProviderRef specifies which Provider this Alert should use.",
|
||||||
|
"properties": {
|
||||||
|
"name": {
|
||||||
|
"description": "Name of the referent.",
|
||||||
|
"type": "string"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"required": [
|
||||||
|
"name"
|
||||||
|
],
|
||||||
|
"type": "object",
|
||||||
|
"additionalProperties": false
|
||||||
|
},
|
||||||
|
"summary": {
|
||||||
|
"description": "Summary holds a short description of the impact and affected cluster.",
|
||||||
|
"maxLength": 255,
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"suspend": {
|
||||||
|
"description": "Suspend tells the controller to suspend subsequent\nevents handling for this Alert.",
|
||||||
|
"type": "boolean"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"required": [
|
||||||
|
"eventSources",
|
||||||
|
"providerRef"
|
||||||
|
],
|
||||||
|
"type": "object",
|
||||||
|
"additionalProperties": false
|
||||||
|
},
|
||||||
|
"status": {
|
||||||
|
"default": {
|
||||||
|
"observedGeneration": -1
|
||||||
|
},
|
||||||
|
"description": "AlertStatus defines the observed state of the Alert.",
|
||||||
|
"properties": {
|
||||||
|
"conditions": {
|
||||||
|
"description": "Conditions holds the conditions for the Alert.",
|
||||||
|
"items": {
|
||||||
|
"description": "Condition contains details for one aspect of the current state of this API Resource.",
|
||||||
|
"properties": {
|
||||||
|
"lastTransitionTime": {
|
||||||
|
"description": "lastTransitionTime is the last time the condition transitioned from one status to another.\nThis should be when the underlying condition changed. If that is not known, then using the time when the API field changed is acceptable.",
|
||||||
|
"format": "date-time",
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"message": {
|
||||||
|
"description": "message is a human readable message indicating details about the transition.\nThis may be an empty string.",
|
||||||
|
"maxLength": 32768,
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"observedGeneration": {
|
||||||
|
"description": "observedGeneration represents the .metadata.generation that the condition was set based upon.\nFor instance, if .metadata.generation is currently 12, but the .status.conditions[x].observedGeneration is 9, the condition is out of date\nwith respect to the current state of the instance.",
|
||||||
|
"format": "int64",
|
||||||
|
"minimum": 0,
|
||||||
|
"type": "integer"
|
||||||
|
},
|
||||||
|
"reason": {
|
||||||
|
"description": "reason contains a programmatic identifier indicating the reason for the condition's last transition.\nProducers of specific condition types may define expected values and meanings for this field,\nand whether the values are considered a guaranteed API.\nThe value should be a CamelCase string.\nThis field may not be empty.",
|
||||||
|
"maxLength": 1024,
|
||||||
|
"minLength": 1,
|
||||||
|
"pattern": "^[A-Za-z]([A-Za-z0-9_,:]*[A-Za-z0-9_])?$",
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"status": {
|
||||||
|
"description": "status of the condition, one of True, False, Unknown.",
|
||||||
|
"enum": [
|
||||||
|
"True",
|
||||||
|
"False",
|
||||||
|
"Unknown"
|
||||||
|
],
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"type": {
|
||||||
|
"description": "type of condition in CamelCase or in foo.example.com/CamelCase.",
|
||||||
|
"maxLength": 316,
|
||||||
|
"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])$",
|
||||||
|
"type": "string"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"required": [
|
||||||
|
"lastTransitionTime",
|
||||||
|
"message",
|
||||||
|
"reason",
|
||||||
|
"status",
|
||||||
|
"type"
|
||||||
|
],
|
||||||
|
"type": "object",
|
||||||
|
"additionalProperties": false
|
||||||
|
},
|
||||||
|
"type": "array"
|
||||||
|
},
|
||||||
|
"lastHandledReconcileAt": {
|
||||||
|
"description": "LastHandledReconcileAt holds the value of the most recent\nreconcile request value, so a change of the annotation value\ncan be detected.",
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"observedGeneration": {
|
||||||
|
"description": "ObservedGeneration is the last observed generation.",
|
||||||
|
"format": "int64",
|
||||||
|
"type": "integer"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"type": "object",
|
||||||
|
"additionalProperties": false
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"type": "object"
|
||||||
|
}
|
||||||
@@ -0,0 +1,137 @@
|
|||||||
|
{
|
||||||
|
"description": "Alert is the Schema for the alerts API",
|
||||||
|
"properties": {
|
||||||
|
"apiVersion": {
|
||||||
|
"description": "APIVersion defines the versioned schema of this representation of an object.\nServers should convert recognized schemas to the latest internal value, and\nmay reject unrecognized values.\nMore info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources",
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"kind": {
|
||||||
|
"description": "Kind is a string value representing the REST resource this object represents.\nServers may infer this from the endpoint the client submits requests to.\nCannot be updated.\nIn CamelCase.\nMore info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds",
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"metadata": {
|
||||||
|
"type": "object"
|
||||||
|
},
|
||||||
|
"spec": {
|
||||||
|
"description": "AlertSpec defines an alerting rule for events involving a list of objects.",
|
||||||
|
"properties": {
|
||||||
|
"eventMetadata": {
|
||||||
|
"additionalProperties": {
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"description": "EventMetadata is an optional field for adding metadata to events dispatched by the\ncontroller. This can be used for enhancing the context of the event. If a field\nwould override one already present on the original event as generated by the emitter,\nthen the override doesn't happen, i.e. the original value is preserved, and an info\nlog is printed.",
|
||||||
|
"type": "object"
|
||||||
|
},
|
||||||
|
"eventSeverity": {
|
||||||
|
"default": "info",
|
||||||
|
"description": "EventSeverity specifies how to filter events based on severity.\nIf set to 'info' no events will be filtered.",
|
||||||
|
"enum": [
|
||||||
|
"info",
|
||||||
|
"error"
|
||||||
|
],
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"eventSources": {
|
||||||
|
"description": "EventSources specifies how to filter events based\non the involved object kind, name and namespace.",
|
||||||
|
"items": {
|
||||||
|
"description": "CrossNamespaceObjectReference contains enough information to let you locate the\ntyped referenced object at cluster level",
|
||||||
|
"properties": {
|
||||||
|
"apiVersion": {
|
||||||
|
"description": "API version of the referent",
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"kind": {
|
||||||
|
"description": "Kind of the referent",
|
||||||
|
"enum": [
|
||||||
|
"Bucket",
|
||||||
|
"GitRepository",
|
||||||
|
"Kustomization",
|
||||||
|
"HelmRelease",
|
||||||
|
"HelmChart",
|
||||||
|
"HelmRepository",
|
||||||
|
"ImageRepository",
|
||||||
|
"ImagePolicy",
|
||||||
|
"ImageUpdateAutomation",
|
||||||
|
"OCIRepository",
|
||||||
|
"ArtifactGenerator",
|
||||||
|
"ExternalArtifact"
|
||||||
|
],
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"matchLabels": {
|
||||||
|
"additionalProperties": {
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"description": "MatchLabels is a map of {key,value} pairs. A single {key,value} in the matchLabels\nmap is equivalent to an element of matchExpressions, whose key field is \"key\", the\noperator is \"In\", and the values array contains only \"value\". The requirements are ANDed.\nMatchLabels requires the name to be set to `*`.",
|
||||||
|
"type": "object"
|
||||||
|
},
|
||||||
|
"name": {
|
||||||
|
"description": "Name of the referent\nIf multiple resources are targeted `*` may be set.",
|
||||||
|
"maxLength": 253,
|
||||||
|
"minLength": 1,
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"namespace": {
|
||||||
|
"description": "Namespace of the referent",
|
||||||
|
"maxLength": 253,
|
||||||
|
"minLength": 1,
|
||||||
|
"type": "string"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"required": [
|
||||||
|
"kind",
|
||||||
|
"name"
|
||||||
|
],
|
||||||
|
"type": "object",
|
||||||
|
"additionalProperties": false
|
||||||
|
},
|
||||||
|
"type": "array"
|
||||||
|
},
|
||||||
|
"exclusionList": {
|
||||||
|
"description": "ExclusionList specifies a list of Golang regular expressions\nto be used for excluding messages.",
|
||||||
|
"items": {
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"type": "array"
|
||||||
|
},
|
||||||
|
"inclusionList": {
|
||||||
|
"description": "InclusionList specifies a list of Golang regular expressions\nto be used for including messages.",
|
||||||
|
"items": {
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"type": "array"
|
||||||
|
},
|
||||||
|
"providerRef": {
|
||||||
|
"description": "ProviderRef specifies which Provider this Alert should use.",
|
||||||
|
"properties": {
|
||||||
|
"name": {
|
||||||
|
"description": "Name of the referent.",
|
||||||
|
"type": "string"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"required": [
|
||||||
|
"name"
|
||||||
|
],
|
||||||
|
"type": "object",
|
||||||
|
"additionalProperties": false
|
||||||
|
},
|
||||||
|
"summary": {
|
||||||
|
"description": "Summary holds a short description of the impact and affected cluster.\nDeprecated: Use EventMetadata instead.",
|
||||||
|
"maxLength": 255,
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"suspend": {
|
||||||
|
"description": "Suspend tells the controller to suspend subsequent\nevents handling for this Alert.",
|
||||||
|
"type": "boolean"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"required": [
|
||||||
|
"eventSources",
|
||||||
|
"providerRef"
|
||||||
|
],
|
||||||
|
"type": "object",
|
||||||
|
"additionalProperties": false
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"type": "object"
|
||||||
|
}
|
||||||
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
@@ -0,0 +1,338 @@
|
|||||||
|
{
|
||||||
|
"description": "Bucket is the Schema for the buckets API.",
|
||||||
|
"properties": {
|
||||||
|
"apiVersion": {
|
||||||
|
"description": "APIVersion defines the versioned schema of this representation of an object.\nServers should convert recognized schemas to the latest internal value, and\nmay reject unrecognized values.\nMore info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources",
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"kind": {
|
||||||
|
"description": "Kind is a string value representing the REST resource this object represents.\nServers may infer this from the endpoint the client submits requests to.\nCannot be updated.\nIn CamelCase.\nMore info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds",
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"metadata": {
|
||||||
|
"type": "object"
|
||||||
|
},
|
||||||
|
"spec": {
|
||||||
|
"description": "BucketSpec specifies the required configuration to produce an Artifact for\nan object storage bucket.",
|
||||||
|
"properties": {
|
||||||
|
"bucketName": {
|
||||||
|
"description": "BucketName is the name of the object storage bucket.",
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"certSecretRef": {
|
||||||
|
"description": "CertSecretRef can be given the name of a Secret containing\neither or both of\n\n- a PEM-encoded client certificate (`tls.crt`) and private\nkey (`tls.key`);\n- a PEM-encoded CA certificate (`ca.crt`)\n\nand whichever are supplied, will be used for connecting to the\nbucket. The client cert and key are useful if you are\nauthenticating with a certificate; the CA cert is useful if\nyou are using a self-signed server certificate. The Secret must\nbe of type `Opaque` or `kubernetes.io/tls`.\n\nThis field is only supported for the `generic` provider.",
|
||||||
|
"properties": {
|
||||||
|
"name": {
|
||||||
|
"description": "Name of the referent.",
|
||||||
|
"type": "string"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"required": [
|
||||||
|
"name"
|
||||||
|
],
|
||||||
|
"type": "object",
|
||||||
|
"additionalProperties": false
|
||||||
|
},
|
||||||
|
"endpoint": {
|
||||||
|
"description": "Endpoint is the object storage address the BucketName is located at.",
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"ignore": {
|
||||||
|
"description": "Ignore overrides the set of excluded patterns in the .sourceignore format\n(which is the same as .gitignore). If not provided, a default will be used,\nconsult the documentation for your version to find out what those are.",
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"insecure": {
|
||||||
|
"description": "Insecure allows connecting to a non-TLS HTTP Endpoint.",
|
||||||
|
"type": "boolean"
|
||||||
|
},
|
||||||
|
"interval": {
|
||||||
|
"description": "Interval at which the Bucket Endpoint is checked for updates.\nThis interval is approximate and may be subject to jitter to ensure\nefficient use of resources.",
|
||||||
|
"pattern": "^([0-9]+(\\.[0-9]+)?(ms|s|m|h))+$",
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"prefix": {
|
||||||
|
"description": "Prefix to use for server-side filtering of files in the Bucket.",
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"provider": {
|
||||||
|
"default": "generic",
|
||||||
|
"description": "Provider of the object storage bucket.\nDefaults to 'generic', which expects an S3 (API) compatible object\nstorage.",
|
||||||
|
"enum": [
|
||||||
|
"generic",
|
||||||
|
"aws",
|
||||||
|
"gcp",
|
||||||
|
"azure"
|
||||||
|
],
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"proxySecretRef": {
|
||||||
|
"description": "ProxySecretRef specifies the Secret containing the proxy configuration\nto use while communicating with the Bucket server.",
|
||||||
|
"properties": {
|
||||||
|
"name": {
|
||||||
|
"description": "Name of the referent.",
|
||||||
|
"type": "string"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"required": [
|
||||||
|
"name"
|
||||||
|
],
|
||||||
|
"type": "object",
|
||||||
|
"additionalProperties": false
|
||||||
|
},
|
||||||
|
"region": {
|
||||||
|
"description": "Region of the Endpoint where the BucketName is located in.",
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"secretRef": {
|
||||||
|
"description": "SecretRef specifies the Secret containing authentication credentials\nfor the Bucket.",
|
||||||
|
"properties": {
|
||||||
|
"name": {
|
||||||
|
"description": "Name of the referent.",
|
||||||
|
"type": "string"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"required": [
|
||||||
|
"name"
|
||||||
|
],
|
||||||
|
"type": "object",
|
||||||
|
"additionalProperties": false
|
||||||
|
},
|
||||||
|
"serviceAccountName": {
|
||||||
|
"description": "ServiceAccountName is the name of the Kubernetes ServiceAccount used to authenticate\nthe bucket. This field is only supported for the 'gcp' and 'aws' providers.\nFor more information about workload identity:\nhttps://fluxcd.io/flux/components/source/buckets/#workload-identity",
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"sts": {
|
||||||
|
"description": "STS specifies the required configuration to use a Security Token\nService for fetching temporary credentials to authenticate in a\nBucket provider.\n\nThis field is only supported for the `aws` and `generic` providers.",
|
||||||
|
"properties": {
|
||||||
|
"certSecretRef": {
|
||||||
|
"description": "CertSecretRef can be given the name of a Secret containing\neither or both of\n\n- a PEM-encoded client certificate (`tls.crt`) and private\nkey (`tls.key`);\n- a PEM-encoded CA certificate (`ca.crt`)\n\nand whichever are supplied, will be used for connecting to the\nSTS endpoint. The client cert and key are useful if you are\nauthenticating with a certificate; the CA cert is useful if\nyou are using a self-signed server certificate. The Secret must\nbe of type `Opaque` or `kubernetes.io/tls`.\n\nThis field is only supported for the `ldap` provider.",
|
||||||
|
"properties": {
|
||||||
|
"name": {
|
||||||
|
"description": "Name of the referent.",
|
||||||
|
"type": "string"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"required": [
|
||||||
|
"name"
|
||||||
|
],
|
||||||
|
"type": "object",
|
||||||
|
"additionalProperties": false
|
||||||
|
},
|
||||||
|
"endpoint": {
|
||||||
|
"description": "Endpoint is the HTTP/S endpoint of the Security Token Service from\nwhere temporary credentials will be fetched.",
|
||||||
|
"pattern": "^(http|https)://.*$",
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"provider": {
|
||||||
|
"description": "Provider of the Security Token Service.",
|
||||||
|
"enum": [
|
||||||
|
"aws",
|
||||||
|
"ldap"
|
||||||
|
],
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"secretRef": {
|
||||||
|
"description": "SecretRef specifies the Secret containing authentication credentials\nfor the STS endpoint. This Secret must contain the fields `username`\nand `password` and is supported only for the `ldap` provider.",
|
||||||
|
"properties": {
|
||||||
|
"name": {
|
||||||
|
"description": "Name of the referent.",
|
||||||
|
"type": "string"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"required": [
|
||||||
|
"name"
|
||||||
|
],
|
||||||
|
"type": "object",
|
||||||
|
"additionalProperties": false
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"required": [
|
||||||
|
"endpoint",
|
||||||
|
"provider"
|
||||||
|
],
|
||||||
|
"type": "object",
|
||||||
|
"additionalProperties": false
|
||||||
|
},
|
||||||
|
"suspend": {
|
||||||
|
"description": "Suspend tells the controller to suspend the reconciliation of this\nBucket.",
|
||||||
|
"type": "boolean"
|
||||||
|
},
|
||||||
|
"timeout": {
|
||||||
|
"default": "60s",
|
||||||
|
"description": "Timeout for fetch operations, defaults to 60s.",
|
||||||
|
"pattern": "^([0-9]+(\\.[0-9]+)?(ms|s|m))+$",
|
||||||
|
"type": "string"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"required": [
|
||||||
|
"bucketName",
|
||||||
|
"endpoint",
|
||||||
|
"interval"
|
||||||
|
],
|
||||||
|
"type": "object",
|
||||||
|
"x-kubernetes-validations": [
|
||||||
|
{
|
||||||
|
"message": "STS configuration is only supported for the 'aws' and 'generic' Bucket providers",
|
||||||
|
"rule": "self.provider == 'aws' || self.provider == 'generic' || !has(self.sts)"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"message": "'aws' is the only supported STS provider for the 'aws' Bucket provider",
|
||||||
|
"rule": "self.provider != 'aws' || !has(self.sts) || self.sts.provider == 'aws'"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"message": "'ldap' is the only supported STS provider for the 'generic' Bucket provider",
|
||||||
|
"rule": "self.provider != 'generic' || !has(self.sts) || self.sts.provider == 'ldap'"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"message": "spec.sts.secretRef is not required for the 'aws' STS provider",
|
||||||
|
"rule": "!has(self.sts) || self.sts.provider != 'aws' || !has(self.sts.secretRef)"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"message": "spec.sts.certSecretRef is not required for the 'aws' STS provider",
|
||||||
|
"rule": "!has(self.sts) || self.sts.provider != 'aws' || !has(self.sts.certSecretRef)"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"message": "ServiceAccountName is not supported for the 'generic' Bucket provider",
|
||||||
|
"rule": "self.provider != 'generic' || !has(self.serviceAccountName)"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"message": "cannot set both .spec.secretRef and .spec.serviceAccountName",
|
||||||
|
"rule": "!has(self.secretRef) || !has(self.serviceAccountName)"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"additionalProperties": false
|
||||||
|
},
|
||||||
|
"status": {
|
||||||
|
"default": {
|
||||||
|
"observedGeneration": -1
|
||||||
|
},
|
||||||
|
"description": "BucketStatus records the observed state of a Bucket.",
|
||||||
|
"properties": {
|
||||||
|
"artifact": {
|
||||||
|
"description": "Artifact represents the last successful Bucket reconciliation.",
|
||||||
|
"properties": {
|
||||||
|
"digest": {
|
||||||
|
"description": "Digest is the digest of the file in the form of '<algorithm>:<checksum>'.",
|
||||||
|
"pattern": "^[a-z0-9]+(?:[.+_-][a-z0-9]+)*:[a-zA-Z0-9=_-]+$",
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"lastUpdateTime": {
|
||||||
|
"description": "LastUpdateTime is the timestamp corresponding to the last update of the\nArtifact.",
|
||||||
|
"format": "date-time",
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"metadata": {
|
||||||
|
"additionalProperties": {
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"description": "Metadata holds upstream information such as OCI annotations.",
|
||||||
|
"type": "object"
|
||||||
|
},
|
||||||
|
"path": {
|
||||||
|
"description": "Path is the relative file path of the Artifact. It can be used to locate\nthe file in the root of the Artifact storage on the local file system of\nthe controller managing the Source.",
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"revision": {
|
||||||
|
"description": "Revision is a human-readable identifier traceable in the origin source\nsystem. It can be a Git commit SHA, Git tag, a Helm chart version, etc.",
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"size": {
|
||||||
|
"description": "Size is the number of bytes in the file.",
|
||||||
|
"format": "int64",
|
||||||
|
"type": "integer"
|
||||||
|
},
|
||||||
|
"url": {
|
||||||
|
"description": "URL is the HTTP address of the Artifact as exposed by the controller\nmanaging the Source. It can be used to retrieve the Artifact for\nconsumption, e.g. by another controller applying the Artifact contents.",
|
||||||
|
"type": "string"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"required": [
|
||||||
|
"digest",
|
||||||
|
"lastUpdateTime",
|
||||||
|
"path",
|
||||||
|
"revision",
|
||||||
|
"url"
|
||||||
|
],
|
||||||
|
"type": "object",
|
||||||
|
"additionalProperties": false
|
||||||
|
},
|
||||||
|
"conditions": {
|
||||||
|
"description": "Conditions holds the conditions for the Bucket.",
|
||||||
|
"items": {
|
||||||
|
"description": "Condition contains details for one aspect of the current state of this API Resource.",
|
||||||
|
"properties": {
|
||||||
|
"lastTransitionTime": {
|
||||||
|
"description": "lastTransitionTime is the last time the condition transitioned from one status to another.\nThis should be when the underlying condition changed. If that is not known, then using the time when the API field changed is acceptable.",
|
||||||
|
"format": "date-time",
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"message": {
|
||||||
|
"description": "message is a human readable message indicating details about the transition.\nThis may be an empty string.",
|
||||||
|
"maxLength": 32768,
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"observedGeneration": {
|
||||||
|
"description": "observedGeneration represents the .metadata.generation that the condition was set based upon.\nFor instance, if .metadata.generation is currently 12, but the .status.conditions[x].observedGeneration is 9, the condition is out of date\nwith respect to the current state of the instance.",
|
||||||
|
"format": "int64",
|
||||||
|
"minimum": 0,
|
||||||
|
"type": "integer"
|
||||||
|
},
|
||||||
|
"reason": {
|
||||||
|
"description": "reason contains a programmatic identifier indicating the reason for the condition's last transition.\nProducers of specific condition types may define expected values and meanings for this field,\nand whether the values are considered a guaranteed API.\nThe value should be a CamelCase string.\nThis field may not be empty.",
|
||||||
|
"maxLength": 1024,
|
||||||
|
"minLength": 1,
|
||||||
|
"pattern": "^[A-Za-z]([A-Za-z0-9_,:]*[A-Za-z0-9_])?$",
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"status": {
|
||||||
|
"description": "status of the condition, one of True, False, Unknown.",
|
||||||
|
"enum": [
|
||||||
|
"True",
|
||||||
|
"False",
|
||||||
|
"Unknown"
|
||||||
|
],
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"type": {
|
||||||
|
"description": "type of condition in CamelCase or in foo.example.com/CamelCase.",
|
||||||
|
"maxLength": 316,
|
||||||
|
"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])$",
|
||||||
|
"type": "string"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"required": [
|
||||||
|
"lastTransitionTime",
|
||||||
|
"message",
|
||||||
|
"reason",
|
||||||
|
"status",
|
||||||
|
"type"
|
||||||
|
],
|
||||||
|
"type": "object",
|
||||||
|
"additionalProperties": false
|
||||||
|
},
|
||||||
|
"type": "array"
|
||||||
|
},
|
||||||
|
"lastHandledReconcileAt": {
|
||||||
|
"description": "LastHandledReconcileAt holds the value of the most recent\nreconcile request value, so a change of the annotation value\ncan be detected.",
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"observedGeneration": {
|
||||||
|
"description": "ObservedGeneration is the last observed generation of the Bucket object.",
|
||||||
|
"format": "int64",
|
||||||
|
"type": "integer"
|
||||||
|
},
|
||||||
|
"observedIgnore": {
|
||||||
|
"description": "ObservedIgnore is the observed exclusion patterns used for constructing\nthe source artifact.",
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"url": {
|
||||||
|
"description": "URL is the dynamic fetch link for the latest Artifact.\nIt is provided on a \"best effort\" basis, and using the precise\nBucketStatus.Artifact data is recommended.",
|
||||||
|
"type": "string"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"type": "object",
|
||||||
|
"additionalProperties": false
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"type": "object"
|
||||||
|
}
|
||||||
File diff suppressed because it is too large
Load Diff
@@ -0,0 +1,198 @@
|
|||||||
|
{
|
||||||
|
"description": "ClusterKeycloakInstance makes a Keycloak server known to the operator at the cluster level",
|
||||||
|
"properties": {
|
||||||
|
"apiVersion": {
|
||||||
|
"description": "APIVersion defines the versioned schema of this representation of an object.\nServers should convert recognized schemas to the latest internal value, and\nmay reject unrecognized values.\nMore info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources",
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"kind": {
|
||||||
|
"description": "Kind is a string value representing the REST resource this object represents.\nServers may infer this from the endpoint the client submits requests to.\nCannot be updated.\nIn CamelCase.\nMore info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds",
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"metadata": {
|
||||||
|
"type": "object"
|
||||||
|
},
|
||||||
|
"spec": {
|
||||||
|
"description": "ClusterKeycloakInstanceSpec defines the desired state of ClusterKeycloakInstance\nIt mirrors KeycloakInstanceSpec but is cluster-scoped",
|
||||||
|
"properties": {
|
||||||
|
"baseUrl": {
|
||||||
|
"description": "BaseUrl is the URL of the Keycloak server (e.g., http://keycloak:8080)",
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"client": {
|
||||||
|
"description": "Client contains optional service account client configuration",
|
||||||
|
"properties": {
|
||||||
|
"id": {
|
||||||
|
"description": "ID is the client ID for service account authentication",
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"secret": {
|
||||||
|
"description": "Secret is the client secret (optional for public clients)",
|
||||||
|
"type": "string"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"required": [
|
||||||
|
"id"
|
||||||
|
],
|
||||||
|
"type": "object",
|
||||||
|
"additionalProperties": false
|
||||||
|
},
|
||||||
|
"credentials": {
|
||||||
|
"description": "Credentials contains the reference to the admin credentials secret",
|
||||||
|
"properties": {
|
||||||
|
"secretRef": {
|
||||||
|
"description": "SecretRef contains the reference to the secret with credentials",
|
||||||
|
"properties": {
|
||||||
|
"name": {
|
||||||
|
"description": "Name is the name of the secret",
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"namespace": {
|
||||||
|
"description": "Namespace is the namespace of the secret (required for cluster-scoped resources)",
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"passwordKey": {
|
||||||
|
"default": "password",
|
||||||
|
"description": "PasswordKey is the key in the secret for the password (defaults to \"password\")",
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"usernameKey": {
|
||||||
|
"default": "username",
|
||||||
|
"description": "UsernameKey is the key in the secret for the username (defaults to \"username\")",
|
||||||
|
"type": "string"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"required": [
|
||||||
|
"name",
|
||||||
|
"namespace"
|
||||||
|
],
|
||||||
|
"type": "object",
|
||||||
|
"additionalProperties": false
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"required": [
|
||||||
|
"secretRef"
|
||||||
|
],
|
||||||
|
"type": "object",
|
||||||
|
"additionalProperties": false
|
||||||
|
},
|
||||||
|
"realm": {
|
||||||
|
"description": "Realm is the admin realm (defaults to \"master\")",
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"token": {
|
||||||
|
"description": "Token contains optional token caching configuration",
|
||||||
|
"properties": {
|
||||||
|
"expiresKey": {
|
||||||
|
"description": "ExpiresKey is the key in the secret for the token expiration",
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"secretName": {
|
||||||
|
"description": "SecretName is the name of the secret to cache the token",
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"tokenKey": {
|
||||||
|
"description": "TokenKey is the key in the secret for the token",
|
||||||
|
"type": "string"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"type": "object",
|
||||||
|
"additionalProperties": false
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"required": [
|
||||||
|
"baseUrl",
|
||||||
|
"credentials"
|
||||||
|
],
|
||||||
|
"type": "object",
|
||||||
|
"additionalProperties": false
|
||||||
|
},
|
||||||
|
"status": {
|
||||||
|
"description": "ClusterKeycloakInstanceStatus defines the observed state of ClusterKeycloakInstance",
|
||||||
|
"properties": {
|
||||||
|
"conditions": {
|
||||||
|
"description": "Conditions represent the latest available observations",
|
||||||
|
"items": {
|
||||||
|
"description": "Condition contains details for one aspect of the current state of this API Resource.",
|
||||||
|
"properties": {
|
||||||
|
"lastTransitionTime": {
|
||||||
|
"description": "lastTransitionTime is the last time the condition transitioned from one status to another.\nThis should be when the underlying condition changed. If that is not known, then using the time when the API field changed is acceptable.",
|
||||||
|
"format": "date-time",
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"message": {
|
||||||
|
"description": "message is a human readable message indicating details about the transition.\nThis may be an empty string.",
|
||||||
|
"maxLength": 32768,
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"observedGeneration": {
|
||||||
|
"description": "observedGeneration represents the .metadata.generation that the condition was set based upon.\nFor instance, if .metadata.generation is currently 12, but the .status.conditions[x].observedGeneration is 9, the condition is out of date\nwith respect to the current state of the instance.",
|
||||||
|
"format": "int64",
|
||||||
|
"minimum": 0,
|
||||||
|
"type": "integer"
|
||||||
|
},
|
||||||
|
"reason": {
|
||||||
|
"description": "reason contains a programmatic identifier indicating the reason for the condition's last transition.\nProducers of specific condition types may define expected values and meanings for this field,\nand whether the values are considered a guaranteed API.\nThe value should be a CamelCase string.\nThis field may not be empty.",
|
||||||
|
"maxLength": 1024,
|
||||||
|
"minLength": 1,
|
||||||
|
"pattern": "^[A-Za-z]([A-Za-z0-9_,:]*[A-Za-z0-9_])?$",
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"status": {
|
||||||
|
"description": "status of the condition, one of True, False, Unknown.",
|
||||||
|
"enum": [
|
||||||
|
"True",
|
||||||
|
"False",
|
||||||
|
"Unknown"
|
||||||
|
],
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"type": {
|
||||||
|
"description": "type of condition in CamelCase or in foo.example.com/CamelCase.",
|
||||||
|
"maxLength": 316,
|
||||||
|
"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])$",
|
||||||
|
"type": "string"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"required": [
|
||||||
|
"lastTransitionTime",
|
||||||
|
"message",
|
||||||
|
"reason",
|
||||||
|
"status",
|
||||||
|
"type"
|
||||||
|
],
|
||||||
|
"type": "object",
|
||||||
|
"additionalProperties": false
|
||||||
|
},
|
||||||
|
"type": "array"
|
||||||
|
},
|
||||||
|
"message": {
|
||||||
|
"description": "Message contains additional information about the status",
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"ready": {
|
||||||
|
"description": "Ready indicates if the Keycloak instance is accessible",
|
||||||
|
"type": "boolean"
|
||||||
|
},
|
||||||
|
"resourcePath": {
|
||||||
|
"description": "ResourcePath is the API path for this resource",
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"status": {
|
||||||
|
"description": "Status is a human-readable status message",
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"version": {
|
||||||
|
"description": "Version is the Keycloak server version",
|
||||||
|
"type": "string"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"required": [
|
||||||
|
"ready"
|
||||||
|
],
|
||||||
|
"type": "object",
|
||||||
|
"additionalProperties": false
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"type": "object"
|
||||||
|
}
|
||||||
@@ -0,0 +1,199 @@
|
|||||||
|
{
|
||||||
|
"description": "ClusterKeycloakRealm defines a realm within a KeycloakInstance at the cluster level",
|
||||||
|
"properties": {
|
||||||
|
"apiVersion": {
|
||||||
|
"description": "APIVersion defines the versioned schema of this representation of an object.\nServers should convert recognized schemas to the latest internal value, and\nmay reject unrecognized values.\nMore info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources",
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"kind": {
|
||||||
|
"description": "Kind is a string value representing the REST resource this object represents.\nServers may infer this from the endpoint the client submits requests to.\nCannot be updated.\nIn CamelCase.\nMore info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds",
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"metadata": {
|
||||||
|
"type": "object"
|
||||||
|
},
|
||||||
|
"spec": {
|
||||||
|
"description": "ClusterKeycloakRealmSpec defines the desired state of ClusterKeycloakRealm",
|
||||||
|
"properties": {
|
||||||
|
"clusterInstanceRef": {
|
||||||
|
"description": "ClusterInstanceRef is a reference to a ClusterKeycloakInstance\nOne of instanceRef or clusterInstanceRef must be specified",
|
||||||
|
"properties": {
|
||||||
|
"name": {
|
||||||
|
"description": "Name of the cluster-scoped resource",
|
||||||
|
"type": "string"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"required": [
|
||||||
|
"name"
|
||||||
|
],
|
||||||
|
"type": "object",
|
||||||
|
"additionalProperties": false
|
||||||
|
},
|
||||||
|
"definition": {
|
||||||
|
"description": "Definition contains the Keycloak RealmRepresentation",
|
||||||
|
"type": "object",
|
||||||
|
"x-kubernetes-preserve-unknown-fields": true
|
||||||
|
},
|
||||||
|
"instanceRef": {
|
||||||
|
"description": "InstanceRef is a reference to a namespaced KeycloakInstance\nOne of instanceRef or clusterInstanceRef must be specified",
|
||||||
|
"properties": {
|
||||||
|
"name": {
|
||||||
|
"description": "Name of the resource",
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"namespace": {
|
||||||
|
"description": "Namespace of the resource",
|
||||||
|
"type": "string"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"required": [
|
||||||
|
"name",
|
||||||
|
"namespace"
|
||||||
|
],
|
||||||
|
"type": "object",
|
||||||
|
"additionalProperties": false
|
||||||
|
},
|
||||||
|
"realmName": {
|
||||||
|
"description": "RealmName is the name of the realm in Keycloak (defaults to metadata.name)",
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"smtpSecretRef": {
|
||||||
|
"description": "SmtpSecretRef is a reference to a Kubernetes Secret containing SMTP credentials.\nWhen set, the secret values are injected into definition.smtpServer.user and\ndefinition.smtpServer.password before syncing to Keycloak.",
|
||||||
|
"properties": {
|
||||||
|
"name": {
|
||||||
|
"description": "Name of the Kubernetes Secret",
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"namespace": {
|
||||||
|
"description": "Namespace of the Kubernetes Secret (required for cluster-scoped resources)",
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"passwordKey": {
|
||||||
|
"default": "password",
|
||||||
|
"description": "PasswordKey is the key in the secret for the SMTP password (defaults to \"password\")",
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"userKey": {
|
||||||
|
"default": "user",
|
||||||
|
"description": "UserKey is the key in the secret for the SMTP username (defaults to \"user\")",
|
||||||
|
"type": "string"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"required": [
|
||||||
|
"name",
|
||||||
|
"namespace"
|
||||||
|
],
|
||||||
|
"type": "object",
|
||||||
|
"additionalProperties": false
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"required": [
|
||||||
|
"definition"
|
||||||
|
],
|
||||||
|
"type": "object",
|
||||||
|
"additionalProperties": false
|
||||||
|
},
|
||||||
|
"status": {
|
||||||
|
"description": "ClusterKeycloakRealmStatus defines the observed state of ClusterKeycloakRealm",
|
||||||
|
"properties": {
|
||||||
|
"conditions": {
|
||||||
|
"description": "Conditions represent the latest available observations",
|
||||||
|
"items": {
|
||||||
|
"description": "Condition contains details for one aspect of the current state of this API Resource.",
|
||||||
|
"properties": {
|
||||||
|
"lastTransitionTime": {
|
||||||
|
"description": "lastTransitionTime is the last time the condition transitioned from one status to another.\nThis should be when the underlying condition changed. If that is not known, then using the time when the API field changed is acceptable.",
|
||||||
|
"format": "date-time",
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"message": {
|
||||||
|
"description": "message is a human readable message indicating details about the transition.\nThis may be an empty string.",
|
||||||
|
"maxLength": 32768,
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"observedGeneration": {
|
||||||
|
"description": "observedGeneration represents the .metadata.generation that the condition was set based upon.\nFor instance, if .metadata.generation is currently 12, but the .status.conditions[x].observedGeneration is 9, the condition is out of date\nwith respect to the current state of the instance.",
|
||||||
|
"format": "int64",
|
||||||
|
"minimum": 0,
|
||||||
|
"type": "integer"
|
||||||
|
},
|
||||||
|
"reason": {
|
||||||
|
"description": "reason contains a programmatic identifier indicating the reason for the condition's last transition.\nProducers of specific condition types may define expected values and meanings for this field,\nand whether the values are considered a guaranteed API.\nThe value should be a CamelCase string.\nThis field may not be empty.",
|
||||||
|
"maxLength": 1024,
|
||||||
|
"minLength": 1,
|
||||||
|
"pattern": "^[A-Za-z]([A-Za-z0-9_,:]*[A-Za-z0-9_])?$",
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"status": {
|
||||||
|
"description": "status of the condition, one of True, False, Unknown.",
|
||||||
|
"enum": [
|
||||||
|
"True",
|
||||||
|
"False",
|
||||||
|
"Unknown"
|
||||||
|
],
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"type": {
|
||||||
|
"description": "type of condition in CamelCase or in foo.example.com/CamelCase.",
|
||||||
|
"maxLength": 316,
|
||||||
|
"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])$",
|
||||||
|
"type": "string"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"required": [
|
||||||
|
"lastTransitionTime",
|
||||||
|
"message",
|
||||||
|
"reason",
|
||||||
|
"status",
|
||||||
|
"type"
|
||||||
|
],
|
||||||
|
"type": "object",
|
||||||
|
"additionalProperties": false
|
||||||
|
},
|
||||||
|
"type": "array"
|
||||||
|
},
|
||||||
|
"instance": {
|
||||||
|
"description": "Instance contains the resolved instance reference",
|
||||||
|
"properties": {
|
||||||
|
"clusterInstanceRef": {
|
||||||
|
"description": "ClusterInstanceRef is the name of the cluster instance",
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"instanceRef": {
|
||||||
|
"description": "InstanceRef is the name of the namespaced instance",
|
||||||
|
"type": "string"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"type": "object",
|
||||||
|
"additionalProperties": false
|
||||||
|
},
|
||||||
|
"message": {
|
||||||
|
"description": "Message contains additional information",
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"ready": {
|
||||||
|
"description": "Ready indicates if the realm is ready",
|
||||||
|
"type": "boolean"
|
||||||
|
},
|
||||||
|
"realmName": {
|
||||||
|
"description": "RealmName is the actual realm name in Keycloak",
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"resourcePath": {
|
||||||
|
"description": "ResourcePath is the Keycloak API path for this realm",
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"status": {
|
||||||
|
"description": "Status is a human-readable status message",
|
||||||
|
"type": "string"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"required": [
|
||||||
|
"ready"
|
||||||
|
],
|
||||||
|
"type": "object",
|
||||||
|
"additionalProperties": false
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"type": "object"
|
||||||
|
}
|
||||||
File diff suppressed because it is too large
Load Diff
@@ -0,0 +1,162 @@
|
|||||||
|
{
|
||||||
|
"description": "ExternalArtifact is the Schema for the external artifacts API",
|
||||||
|
"properties": {
|
||||||
|
"apiVersion": {
|
||||||
|
"description": "APIVersion defines the versioned schema of this representation of an object.\nServers should convert recognized schemas to the latest internal value, and\nmay reject unrecognized values.\nMore info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources",
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"kind": {
|
||||||
|
"description": "Kind is a string value representing the REST resource this object represents.\nServers may infer this from the endpoint the client submits requests to.\nCannot be updated.\nIn CamelCase.\nMore info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds",
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"metadata": {
|
||||||
|
"type": "object"
|
||||||
|
},
|
||||||
|
"spec": {
|
||||||
|
"description": "ExternalArtifactSpec defines the desired state of ExternalArtifact",
|
||||||
|
"properties": {
|
||||||
|
"sourceRef": {
|
||||||
|
"description": "SourceRef points to the Kubernetes custom resource for\nwhich the artifact is generated.",
|
||||||
|
"properties": {
|
||||||
|
"apiVersion": {
|
||||||
|
"description": "API version of the referent, if not specified the Kubernetes preferred version will be used.",
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"kind": {
|
||||||
|
"description": "Kind of the referent.",
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"name": {
|
||||||
|
"description": "Name of the referent.",
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"namespace": {
|
||||||
|
"description": "Namespace of the referent, when not specified it acts as LocalObjectReference.",
|
||||||
|
"type": "string"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"required": [
|
||||||
|
"kind",
|
||||||
|
"name"
|
||||||
|
],
|
||||||
|
"type": "object",
|
||||||
|
"additionalProperties": false
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"type": "object",
|
||||||
|
"additionalProperties": false
|
||||||
|
},
|
||||||
|
"status": {
|
||||||
|
"description": "ExternalArtifactStatus defines the observed state of ExternalArtifact",
|
||||||
|
"properties": {
|
||||||
|
"artifact": {
|
||||||
|
"description": "Artifact represents the output of an ExternalArtifact reconciliation.",
|
||||||
|
"properties": {
|
||||||
|
"digest": {
|
||||||
|
"description": "Digest is the digest of the file in the form of '<algorithm>:<checksum>'.",
|
||||||
|
"pattern": "^[a-z0-9]+(?:[.+_-][a-z0-9]+)*:[a-zA-Z0-9=_-]+$",
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"lastUpdateTime": {
|
||||||
|
"description": "LastUpdateTime is the timestamp corresponding to the last update of the\nArtifact.",
|
||||||
|
"format": "date-time",
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"metadata": {
|
||||||
|
"additionalProperties": {
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"description": "Metadata holds upstream information such as OCI annotations.",
|
||||||
|
"type": "object"
|
||||||
|
},
|
||||||
|
"path": {
|
||||||
|
"description": "Path is the relative file path of the Artifact. It can be used to locate\nthe file in the root of the Artifact storage on the local file system of\nthe controller managing the Source.",
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"revision": {
|
||||||
|
"description": "Revision is a human-readable identifier traceable in the origin source\nsystem. It can be a Git commit SHA, Git tag, a Helm chart version, etc.",
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"size": {
|
||||||
|
"description": "Size is the number of bytes in the file.",
|
||||||
|
"format": "int64",
|
||||||
|
"type": "integer"
|
||||||
|
},
|
||||||
|
"url": {
|
||||||
|
"description": "URL is the HTTP address of the Artifact as exposed by the controller\nmanaging the Source. It can be used to retrieve the Artifact for\nconsumption, e.g. by another controller applying the Artifact contents.",
|
||||||
|
"type": "string"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"required": [
|
||||||
|
"digest",
|
||||||
|
"lastUpdateTime",
|
||||||
|
"path",
|
||||||
|
"revision",
|
||||||
|
"url"
|
||||||
|
],
|
||||||
|
"type": "object",
|
||||||
|
"additionalProperties": false
|
||||||
|
},
|
||||||
|
"conditions": {
|
||||||
|
"description": "Conditions holds the conditions for the ExternalArtifact.",
|
||||||
|
"items": {
|
||||||
|
"description": "Condition contains details for one aspect of the current state of this API Resource.",
|
||||||
|
"properties": {
|
||||||
|
"lastTransitionTime": {
|
||||||
|
"description": "lastTransitionTime is the last time the condition transitioned from one status to another.\nThis should be when the underlying condition changed. If that is not known, then using the time when the API field changed is acceptable.",
|
||||||
|
"format": "date-time",
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"message": {
|
||||||
|
"description": "message is a human readable message indicating details about the transition.\nThis may be an empty string.",
|
||||||
|
"maxLength": 32768,
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"observedGeneration": {
|
||||||
|
"description": "observedGeneration represents the .metadata.generation that the condition was set based upon.\nFor instance, if .metadata.generation is currently 12, but the .status.conditions[x].observedGeneration is 9, the condition is out of date\nwith respect to the current state of the instance.",
|
||||||
|
"format": "int64",
|
||||||
|
"minimum": 0,
|
||||||
|
"type": "integer"
|
||||||
|
},
|
||||||
|
"reason": {
|
||||||
|
"description": "reason contains a programmatic identifier indicating the reason for the condition's last transition.\nProducers of specific condition types may define expected values and meanings for this field,\nand whether the values are considered a guaranteed API.\nThe value should be a CamelCase string.\nThis field may not be empty.",
|
||||||
|
"maxLength": 1024,
|
||||||
|
"minLength": 1,
|
||||||
|
"pattern": "^[A-Za-z]([A-Za-z0-9_,:]*[A-Za-z0-9_])?$",
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"status": {
|
||||||
|
"description": "status of the condition, one of True, False, Unknown.",
|
||||||
|
"enum": [
|
||||||
|
"True",
|
||||||
|
"False",
|
||||||
|
"Unknown"
|
||||||
|
],
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"type": {
|
||||||
|
"description": "type of condition in CamelCase or in foo.example.com/CamelCase.",
|
||||||
|
"maxLength": 316,
|
||||||
|
"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])$",
|
||||||
|
"type": "string"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"required": [
|
||||||
|
"lastTransitionTime",
|
||||||
|
"message",
|
||||||
|
"reason",
|
||||||
|
"status",
|
||||||
|
"type"
|
||||||
|
],
|
||||||
|
"type": "object",
|
||||||
|
"additionalProperties": false
|
||||||
|
},
|
||||||
|
"type": "array"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"type": "object",
|
||||||
|
"additionalProperties": false
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"type": "object"
|
||||||
|
}
|
||||||
@@ -0,0 +1,570 @@
|
|||||||
|
{
|
||||||
|
"description": "FluxInstance is the Schema for the fluxinstances API",
|
||||||
|
"properties": {
|
||||||
|
"apiVersion": {
|
||||||
|
"description": "APIVersion defines the versioned schema of this representation of an object.\nServers should convert recognized schemas to the latest internal value, and\nmay reject unrecognized values.\nMore info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources",
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"kind": {
|
||||||
|
"description": "Kind is a string value representing the REST resource this object represents.\nServers may infer this from the endpoint the client submits requests to.\nCannot be updated.\nIn CamelCase.\nMore info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds",
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"metadata": {
|
||||||
|
"type": "object"
|
||||||
|
},
|
||||||
|
"spec": {
|
||||||
|
"description": "FluxInstanceSpec defines the desired state of FluxInstance",
|
||||||
|
"properties": {
|
||||||
|
"cluster": {
|
||||||
|
"description": "Cluster holds the specification of the Kubernetes cluster.",
|
||||||
|
"properties": {
|
||||||
|
"domain": {
|
||||||
|
"default": "cluster.local",
|
||||||
|
"description": "Domain is the cluster domain used for generating the FQDN of services.\nDefaults to 'cluster.local'.",
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"multitenant": {
|
||||||
|
"default": false,
|
||||||
|
"description": "Multitenant enables the multitenancy lockdown. Defaults to false.",
|
||||||
|
"type": "boolean"
|
||||||
|
},
|
||||||
|
"multitenantWorkloadIdentity": {
|
||||||
|
"default": false,
|
||||||
|
"description": "MultitenantWorkloadIdentity enables the multitenancy lockdown for\nworkload identity. Defaults to false.",
|
||||||
|
"type": "boolean"
|
||||||
|
},
|
||||||
|
"networkPolicy": {
|
||||||
|
"default": true,
|
||||||
|
"description": "NetworkPolicy restricts network access to the current namespace.\nDefaults to true.",
|
||||||
|
"type": "boolean"
|
||||||
|
},
|
||||||
|
"objectLevelWorkloadIdentity": {
|
||||||
|
"description": "ObjectLevelWorkloadIdentity enables the feature gate\nrequired for object-level workload identity.\nThis feature is only available in Flux v2.6.0 and later.",
|
||||||
|
"type": "boolean"
|
||||||
|
},
|
||||||
|
"size": {
|
||||||
|
"description": "Size defines the vertical scaling profile of the Flux controllers.\nThe size is used to determine the concurrency and CPU/Memory limits for the Flux controllers.\nAccepted values are: 'small', 'medium' and 'large'.",
|
||||||
|
"enum": [
|
||||||
|
"small",
|
||||||
|
"medium",
|
||||||
|
"large"
|
||||||
|
],
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"tenantDefaultDecryptionServiceAccount": {
|
||||||
|
"description": "TenantDefaultDecryptionServiceAccount is the name of the service account\nto use as default for kustomize-controller SOPS decryption when the\nmultitenant lockdown for workload identity is enabled. Defaults to the\n'default' service account from the tenant namespace.",
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"tenantDefaultKubeConfigServiceAccount": {
|
||||||
|
"description": "TenantDefaultKubeConfigServiceAccount is the name of the service account\nto use as default for kustomize-controller and helm-controller remote\ncluster access via spec.kubeConfig.configMapRef when the multitenant\nlockdown for workload identity is enabled. Defaults to the 'default'\nservice account from the tenant namespace.",
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"tenantDefaultServiceAccount": {
|
||||||
|
"description": "TenantDefaultServiceAccount is the name of the service account\nto use as default when the multitenant lockdown is enabled, for\nkustomize-controller and helm-controller.\nThis field will also be used for multitenant workload identity\nlockdown for source-controller, notification-controller,\nimage-reflector-controller and image-automation-controller.\nDefaults to the 'default' service account from the tenant namespace.",
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"type": {
|
||||||
|
"default": "kubernetes",
|
||||||
|
"description": "Type specifies the distro of the Kubernetes cluster.\nDefaults to 'kubernetes'.",
|
||||||
|
"enum": [
|
||||||
|
"kubernetes",
|
||||||
|
"openshift",
|
||||||
|
"aws",
|
||||||
|
"azure",
|
||||||
|
"gcp"
|
||||||
|
],
|
||||||
|
"type": "string"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"type": "object",
|
||||||
|
"x-kubernetes-validations": [
|
||||||
|
{
|
||||||
|
"message": ".objectLevelWorkloadIdentity must be set to true when .multitenantWorkloadIdentity is set to true",
|
||||||
|
"rule": "(has(self.objectLevelWorkloadIdentity) && self.objectLevelWorkloadIdentity) || !has(self.multitenantWorkloadIdentity) || !self.multitenantWorkloadIdentity"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"additionalProperties": false
|
||||||
|
},
|
||||||
|
"commonMetadata": {
|
||||||
|
"description": "CommonMetadata specifies the common labels and annotations that are\napplied to all resources. Any existing label or annotation will be\noverridden if its key matches a common one.",
|
||||||
|
"properties": {
|
||||||
|
"annotations": {
|
||||||
|
"additionalProperties": {
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"description": "Annotations to be added to the object's metadata.",
|
||||||
|
"type": "object"
|
||||||
|
},
|
||||||
|
"labels": {
|
||||||
|
"additionalProperties": {
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"description": "Labels to be added to the object's metadata.",
|
||||||
|
"type": "object"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"type": "object",
|
||||||
|
"additionalProperties": false
|
||||||
|
},
|
||||||
|
"components": {
|
||||||
|
"description": "Components is the list of controllers to install.\nDefaults to the core Flux controllers:\n - source-controller\n - kustomize-controller\n - helm-controller\n - notification-controller",
|
||||||
|
"items": {
|
||||||
|
"description": "Component is the name of a controller to install.",
|
||||||
|
"enum": [
|
||||||
|
"source-controller",
|
||||||
|
"kustomize-controller",
|
||||||
|
"helm-controller",
|
||||||
|
"notification-controller",
|
||||||
|
"image-reflector-controller",
|
||||||
|
"image-automation-controller",
|
||||||
|
"source-watcher"
|
||||||
|
],
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"type": "array"
|
||||||
|
},
|
||||||
|
"distribution": {
|
||||||
|
"description": "Distribution specifies the version and container registry to pull images from.",
|
||||||
|
"properties": {
|
||||||
|
"artifact": {
|
||||||
|
"description": "Artifact is the URL to the OCI artifact containing\nthe latest Kubernetes manifests for the distribution,\ne.g. 'oci://ghcr.io/controlplaneio-fluxcd/flux-operator-manifests:latest'.",
|
||||||
|
"pattern": "^oci://.*$",
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"artifactPullSecret": {
|
||||||
|
"description": "ArtifactPullSecret is the name of the Kubernetes secret\nto use for pulling the Kubernetes manifests for the distribution specified in the Artifact field.",
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"imagePullSecret": {
|
||||||
|
"description": "ImagePullSecret is the name of the Kubernetes secret\nto use for pulling images.",
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"registry": {
|
||||||
|
"description": "Registry address to pull the distribution images from\ne.g. 'ghcr.io/fluxcd'.",
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"variant": {
|
||||||
|
"description": "Variant specifies the Flux distribution flavor stored\nin the registry.",
|
||||||
|
"enum": [
|
||||||
|
"upstream-alpine",
|
||||||
|
"enterprise-alpine",
|
||||||
|
"enterprise-distroless",
|
||||||
|
"enterprise-distroless-fips"
|
||||||
|
],
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"version": {
|
||||||
|
"description": "Version semver expression e.g. '2.x', '2.3.x'.",
|
||||||
|
"type": "string"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"required": [
|
||||||
|
"registry",
|
||||||
|
"version"
|
||||||
|
],
|
||||||
|
"type": "object",
|
||||||
|
"additionalProperties": false
|
||||||
|
},
|
||||||
|
"kustomize": {
|
||||||
|
"description": "Kustomize holds a set of patches that can be applied to the\nFlux installation, to customize the way Flux operates.",
|
||||||
|
"properties": {
|
||||||
|
"patches": {
|
||||||
|
"description": "Strategic merge and JSON patches, defined as inline YAML objects,\ncapable of targeting objects based on kind, label and annotation selectors.",
|
||||||
|
"items": {
|
||||||
|
"description": "Patch contains an inline StrategicMerge or JSON6902 patch, and the target the patch should\nbe applied to.",
|
||||||
|
"properties": {
|
||||||
|
"patch": {
|
||||||
|
"description": "Patch contains an inline StrategicMerge patch or an inline JSON6902 patch with\nan array of operation objects.",
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"target": {
|
||||||
|
"description": "Target points to the resources that the patch document should be applied to.",
|
||||||
|
"properties": {
|
||||||
|
"annotationSelector": {
|
||||||
|
"description": "AnnotationSelector is a string that follows the label selection expression\nhttps://kubernetes.io/docs/concepts/overview/working-with-objects/labels/#api\nIt matches with the resource annotations.",
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"group": {
|
||||||
|
"description": "Group is the API group to select resources from.\nTogether with Version and Kind it is capable of unambiguously identifying and/or selecting resources.\nhttps://github.com/kubernetes/community/blob/master/contributors/design-proposals/api-machinery/api-group.md",
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"kind": {
|
||||||
|
"description": "Kind of the API Group to select resources from.\nTogether with Group and Version it is capable of unambiguously\nidentifying and/or selecting resources.\nhttps://github.com/kubernetes/community/blob/master/contributors/design-proposals/api-machinery/api-group.md",
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"labelSelector": {
|
||||||
|
"description": "LabelSelector is a string that follows the label selection expression\nhttps://kubernetes.io/docs/concepts/overview/working-with-objects/labels/#api\nIt matches with the resource labels.",
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"name": {
|
||||||
|
"description": "Name to match resources with.",
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"namespace": {
|
||||||
|
"description": "Namespace to select resources from.",
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"version": {
|
||||||
|
"description": "Version of the API Group to select resources from.\nTogether with Group and Kind it is capable of unambiguously identifying and/or selecting resources.\nhttps://github.com/kubernetes/community/blob/master/contributors/design-proposals/api-machinery/api-group.md",
|
||||||
|
"type": "string"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"type": "object",
|
||||||
|
"additionalProperties": false
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"required": [
|
||||||
|
"patch"
|
||||||
|
],
|
||||||
|
"type": "object",
|
||||||
|
"additionalProperties": false
|
||||||
|
},
|
||||||
|
"type": "array"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"type": "object",
|
||||||
|
"additionalProperties": false
|
||||||
|
},
|
||||||
|
"migrateResources": {
|
||||||
|
"default": true,
|
||||||
|
"description": "MigrateResources instructs the controller to migrate the Flux custom resources\nfrom the previous version to the latest API version specified in the CRD.\nDefaults to true.",
|
||||||
|
"type": "boolean"
|
||||||
|
},
|
||||||
|
"sharding": {
|
||||||
|
"description": "Sharding holds the specification of the sharding configuration.",
|
||||||
|
"properties": {
|
||||||
|
"key": {
|
||||||
|
"default": "sharding.fluxcd.io/key",
|
||||||
|
"description": "Key is the label key used to shard the resources.",
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"shards": {
|
||||||
|
"description": "Shards is the list of shard names.",
|
||||||
|
"items": {
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"minItems": 1,
|
||||||
|
"type": "array"
|
||||||
|
},
|
||||||
|
"storage": {
|
||||||
|
"description": "Storage defines if the source-controller shards\nshould use an emptyDir or a persistent volume claim for storage.\nAccepted values are 'ephemeral' or 'persistent', defaults to 'ephemeral'.\nFor 'persistent' to take effect, the '.spec.storage' field must be set.",
|
||||||
|
"enum": [
|
||||||
|
"ephemeral",
|
||||||
|
"persistent"
|
||||||
|
],
|
||||||
|
"type": "string"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"required": [
|
||||||
|
"shards"
|
||||||
|
],
|
||||||
|
"type": "object",
|
||||||
|
"additionalProperties": false
|
||||||
|
},
|
||||||
|
"storage": {
|
||||||
|
"description": "Storage holds the specification of the source-controller\npersistent volume claim.",
|
||||||
|
"properties": {
|
||||||
|
"class": {
|
||||||
|
"description": "Class is the storage class to use for the PVC.",
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"size": {
|
||||||
|
"description": "Size is the size of the PVC.",
|
||||||
|
"type": "string"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"required": [
|
||||||
|
"class",
|
||||||
|
"size"
|
||||||
|
],
|
||||||
|
"type": "object",
|
||||||
|
"additionalProperties": false
|
||||||
|
},
|
||||||
|
"sync": {
|
||||||
|
"description": "Sync specifies the source for the cluster sync operation.\nWhen set, a Flux source (GitRepository, OCIRepository or Bucket)\nand Flux Kustomization are created to sync the cluster state\nwith the source repository.",
|
||||||
|
"properties": {
|
||||||
|
"interval": {
|
||||||
|
"default": "1m",
|
||||||
|
"description": "Interval is the time between syncs.",
|
||||||
|
"pattern": "^([0-9]+(\\.[0-9]+)?(ms|s|m|h))+$",
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"kind": {
|
||||||
|
"description": "Kind is the kind of the source.",
|
||||||
|
"enum": [
|
||||||
|
"OCIRepository",
|
||||||
|
"GitRepository",
|
||||||
|
"Bucket"
|
||||||
|
],
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"name": {
|
||||||
|
"description": "Name is the name of the Flux source and kustomization resources.\nWhen not specified, the name is set to the namespace name of the FluxInstance.",
|
||||||
|
"maxLength": 63,
|
||||||
|
"type": "string",
|
||||||
|
"x-kubernetes-validations": [
|
||||||
|
{
|
||||||
|
"message": "Sync name is immutable",
|
||||||
|
"rule": "self == oldSelf"
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"path": {
|
||||||
|
"description": "Path is the path to the source directory containing\nthe kustomize overlay or plain Kubernetes manifests.",
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"provider": {
|
||||||
|
"description": "Provider specifies OIDC provider for source authentication.\nFor OCIRepository and Bucket the provider can be set to 'aws', 'azure' or 'gcp'.\nfor GitRepository the accepted value can be set to 'azure' or 'github'.\nTo disable OIDC authentication the provider can be set to 'generic' or left empty.",
|
||||||
|
"enum": [
|
||||||
|
"generic",
|
||||||
|
"aws",
|
||||||
|
"azure",
|
||||||
|
"gcp",
|
||||||
|
"github"
|
||||||
|
],
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"pullSecret": {
|
||||||
|
"description": "PullSecret specifies the Kubernetes Secret containing the\nauthentication credentials for the source.\nFor Git over HTTP/S sources, the secret must contain username and password fields.\nFor Git over SSH sources, the secret must contain known_hosts and identity fields.\nFor OCI sources, the secret must be of type kubernetes.io/dockerconfigjson.\nFor Bucket sources, the secret must contain accesskey and secretkey fields.",
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"ref": {
|
||||||
|
"description": "Ref is the source reference, can be a Git ref name e.g. 'refs/heads/main',\nan OCI tag e.g. 'latest' or a bucket name e.g. 'flux'.",
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"url": {
|
||||||
|
"description": "URL is the source URL, can be a Git repository HTTP/S or SSH address,\nan OCI repository address or a Bucket endpoint.",
|
||||||
|
"type": "string"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"required": [
|
||||||
|
"kind",
|
||||||
|
"path",
|
||||||
|
"ref",
|
||||||
|
"url"
|
||||||
|
],
|
||||||
|
"type": "object",
|
||||||
|
"additionalProperties": false
|
||||||
|
},
|
||||||
|
"wait": {
|
||||||
|
"default": true,
|
||||||
|
"description": "Wait instructs the controller to check the health of all the reconciled\nresources. Defaults to true.",
|
||||||
|
"type": "boolean"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"required": [
|
||||||
|
"distribution"
|
||||||
|
],
|
||||||
|
"type": "object",
|
||||||
|
"additionalProperties": false
|
||||||
|
},
|
||||||
|
"status": {
|
||||||
|
"description": "FluxInstanceStatus defines the observed state of FluxInstance",
|
||||||
|
"properties": {
|
||||||
|
"components": {
|
||||||
|
"description": "Components contains the container images used by the components.",
|
||||||
|
"items": {
|
||||||
|
"description": "ComponentImage represents a container image used by a component.",
|
||||||
|
"properties": {
|
||||||
|
"digest": {
|
||||||
|
"description": "Digest of the container image.",
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"name": {
|
||||||
|
"description": "Name of the component.",
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"repository": {
|
||||||
|
"description": "Repository address of the container image.",
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"tag": {
|
||||||
|
"description": "Tag of the container image.",
|
||||||
|
"type": "string"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"required": [
|
||||||
|
"name",
|
||||||
|
"repository",
|
||||||
|
"tag"
|
||||||
|
],
|
||||||
|
"type": "object",
|
||||||
|
"additionalProperties": false
|
||||||
|
},
|
||||||
|
"type": "array"
|
||||||
|
},
|
||||||
|
"conditions": {
|
||||||
|
"description": "Conditions contains the readiness conditions of the object.",
|
||||||
|
"items": {
|
||||||
|
"description": "Condition contains details for one aspect of the current state of this API Resource.",
|
||||||
|
"properties": {
|
||||||
|
"lastTransitionTime": {
|
||||||
|
"description": "lastTransitionTime is the last time the condition transitioned from one status to another.\nThis should be when the underlying condition changed. If that is not known, then using the time when the API field changed is acceptable.",
|
||||||
|
"format": "date-time",
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"message": {
|
||||||
|
"description": "message is a human readable message indicating details about the transition.\nThis may be an empty string.",
|
||||||
|
"maxLength": 32768,
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"observedGeneration": {
|
||||||
|
"description": "observedGeneration represents the .metadata.generation that the condition was set based upon.\nFor instance, if .metadata.generation is currently 12, but the .status.conditions[x].observedGeneration is 9, the condition is out of date\nwith respect to the current state of the instance.",
|
||||||
|
"format": "int64",
|
||||||
|
"minimum": 0,
|
||||||
|
"type": "integer"
|
||||||
|
},
|
||||||
|
"reason": {
|
||||||
|
"description": "reason contains a programmatic identifier indicating the reason for the condition's last transition.\nProducers of specific condition types may define expected values and meanings for this field,\nand whether the values are considered a guaranteed API.\nThe value should be a CamelCase string.\nThis field may not be empty.",
|
||||||
|
"maxLength": 1024,
|
||||||
|
"minLength": 1,
|
||||||
|
"pattern": "^[A-Za-z]([A-Za-z0-9_,:]*[A-Za-z0-9_])?$",
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"status": {
|
||||||
|
"description": "status of the condition, one of True, False, Unknown.",
|
||||||
|
"enum": [
|
||||||
|
"True",
|
||||||
|
"False",
|
||||||
|
"Unknown"
|
||||||
|
],
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"type": {
|
||||||
|
"description": "type of condition in CamelCase or in foo.example.com/CamelCase.",
|
||||||
|
"maxLength": 316,
|
||||||
|
"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])$",
|
||||||
|
"type": "string"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"required": [
|
||||||
|
"lastTransitionTime",
|
||||||
|
"message",
|
||||||
|
"reason",
|
||||||
|
"status",
|
||||||
|
"type"
|
||||||
|
],
|
||||||
|
"type": "object",
|
||||||
|
"additionalProperties": false
|
||||||
|
},
|
||||||
|
"type": "array"
|
||||||
|
},
|
||||||
|
"history": {
|
||||||
|
"description": "History contains the reconciliation history of the FluxInstance\nas a list of snapshots ordered by the last reconciled time.",
|
||||||
|
"items": {
|
||||||
|
"description": "Snapshot represents a point-in-time record of a group of resources reconciliation,\nincluding timing information, status, and a unique digest identifier.",
|
||||||
|
"properties": {
|
||||||
|
"digest": {
|
||||||
|
"description": "Digest is the checksum in the format `<algo>:<hex>` of the resources in this snapshot.",
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"firstReconciled": {
|
||||||
|
"description": "FirstReconciled is the time when this revision was first reconciled to the cluster.",
|
||||||
|
"format": "date-time",
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"lastReconciled": {
|
||||||
|
"description": "LastReconciled is the time when this revision was last reconciled to the cluster.",
|
||||||
|
"format": "date-time",
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"lastReconciledDuration": {
|
||||||
|
"description": "LastReconciledDuration is time it took to reconcile the resources in this revision.",
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"lastReconciledStatus": {
|
||||||
|
"description": "LastReconciledStatus is the status of the last reconciliation.",
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"metadata": {
|
||||||
|
"additionalProperties": {
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"description": "Metadata contains additional information about the snapshot.",
|
||||||
|
"type": "object"
|
||||||
|
},
|
||||||
|
"totalReconciliations": {
|
||||||
|
"description": "TotalReconciliations is the total number of reconciliations that have occurred for this snapshot.",
|
||||||
|
"format": "int64",
|
||||||
|
"type": "integer"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"required": [
|
||||||
|
"digest",
|
||||||
|
"firstReconciled",
|
||||||
|
"lastReconciled",
|
||||||
|
"lastReconciledDuration",
|
||||||
|
"lastReconciledStatus",
|
||||||
|
"totalReconciliations"
|
||||||
|
],
|
||||||
|
"type": "object",
|
||||||
|
"additionalProperties": false
|
||||||
|
},
|
||||||
|
"type": "array"
|
||||||
|
},
|
||||||
|
"inventory": {
|
||||||
|
"description": "Inventory contains a list of Kubernetes resource object references\nlast applied on the cluster.",
|
||||||
|
"properties": {
|
||||||
|
"entries": {
|
||||||
|
"description": "Entries of Kubernetes resource object references.",
|
||||||
|
"items": {
|
||||||
|
"description": "ResourceRef contains the information necessary to locate a resource within a cluster.",
|
||||||
|
"properties": {
|
||||||
|
"id": {
|
||||||
|
"description": "ID is the string representation of the Kubernetes resource object's metadata,\nin the format '<namespace>_<name>_<group>_<kind>'.",
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"v": {
|
||||||
|
"description": "Version is the API version of the Kubernetes resource object's kind.",
|
||||||
|
"type": "string"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"required": [
|
||||||
|
"id",
|
||||||
|
"v"
|
||||||
|
],
|
||||||
|
"type": "object",
|
||||||
|
"additionalProperties": false
|
||||||
|
},
|
||||||
|
"type": "array"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"required": [
|
||||||
|
"entries"
|
||||||
|
],
|
||||||
|
"type": "object",
|
||||||
|
"additionalProperties": false
|
||||||
|
},
|
||||||
|
"lastAppliedRevision": {
|
||||||
|
"description": "LastAppliedRevision is the version and digest of the\ndistribution config that was last reconcile.",
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"lastArtifactRevision": {
|
||||||
|
"description": "LastArtifactRevision is the digest of the last pulled\ndistribution artifact.",
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"lastAttemptedRevision": {
|
||||||
|
"description": "LastAttemptedRevision is the version and digest of the\ndistribution config that was last attempted to reconcile.",
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"lastHandledForceAt": {
|
||||||
|
"description": "LastHandledForceAt holds the value of the most recent\nforce request value, so a change of the annotation value\ncan be detected.",
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"lastHandledReconcileAt": {
|
||||||
|
"description": "LastHandledReconcileAt holds the value of the most recent\nreconcile request value, so a change of the annotation value\ncan be detected.",
|
||||||
|
"type": "string"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"type": "object",
|
||||||
|
"additionalProperties": false
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"type": "object",
|
||||||
|
"x-kubernetes-validations": [
|
||||||
|
{
|
||||||
|
"message": "the only accepted name for a FluxInstance is 'flux'",
|
||||||
|
"rule": "self.metadata.name == 'flux'"
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
@@ -0,0 +1,290 @@
|
|||||||
|
{
|
||||||
|
"description": "FluxReport is the Schema for the fluxreports API.",
|
||||||
|
"properties": {
|
||||||
|
"apiVersion": {
|
||||||
|
"description": "APIVersion defines the versioned schema of this representation of an object.\nServers should convert recognized schemas to the latest internal value, and\nmay reject unrecognized values.\nMore info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources",
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"kind": {
|
||||||
|
"description": "Kind is a string value representing the REST resource this object represents.\nServers may infer this from the endpoint the client submits requests to.\nCannot be updated.\nIn CamelCase.\nMore info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds",
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"metadata": {
|
||||||
|
"type": "object"
|
||||||
|
},
|
||||||
|
"spec": {
|
||||||
|
"description": "FluxReportSpec defines the observed state of a Flux installation.",
|
||||||
|
"properties": {
|
||||||
|
"cluster": {
|
||||||
|
"description": "Cluster is the version information of the Kubernetes cluster.",
|
||||||
|
"properties": {
|
||||||
|
"nodes": {
|
||||||
|
"description": "Nodes is the number of nodes in the Kubernetes cluster.",
|
||||||
|
"type": "integer"
|
||||||
|
},
|
||||||
|
"platform": {
|
||||||
|
"description": "Platform is the os/arch of the Kubernetes control plane.",
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"serverVersion": {
|
||||||
|
"description": "ServerVersion is the version of the Kubernetes API server.",
|
||||||
|
"type": "string"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"required": [
|
||||||
|
"platform",
|
||||||
|
"serverVersion"
|
||||||
|
],
|
||||||
|
"type": "object",
|
||||||
|
"additionalProperties": false
|
||||||
|
},
|
||||||
|
"components": {
|
||||||
|
"description": "ComponentsStatus is the status of the Flux controller deployments.",
|
||||||
|
"items": {
|
||||||
|
"description": "FluxComponentStatus defines the observed state of a Flux component.",
|
||||||
|
"properties": {
|
||||||
|
"image": {
|
||||||
|
"description": "Image is the container image of the Flux component.",
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"name": {
|
||||||
|
"description": "Name is the name of the Flux component.",
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"ready": {
|
||||||
|
"description": "Ready is the readiness status of the Flux component.",
|
||||||
|
"type": "boolean"
|
||||||
|
},
|
||||||
|
"status": {
|
||||||
|
"description": "Status is a human-readable message indicating details\nabout the Flux component observed state.",
|
||||||
|
"type": "string"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"required": [
|
||||||
|
"image",
|
||||||
|
"name",
|
||||||
|
"ready",
|
||||||
|
"status"
|
||||||
|
],
|
||||||
|
"type": "object",
|
||||||
|
"additionalProperties": false
|
||||||
|
},
|
||||||
|
"type": "array"
|
||||||
|
},
|
||||||
|
"distribution": {
|
||||||
|
"description": "Distribution is the version information of the Flux installation.",
|
||||||
|
"properties": {
|
||||||
|
"entitlement": {
|
||||||
|
"description": "Entitlement is the entitlement verification status.",
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"managedBy": {
|
||||||
|
"description": "ManagedBy is the name of the operator managing the Flux instance.",
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"status": {
|
||||||
|
"description": "Status is a human-readable message indicating details\nabout the distribution observed state.",
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"version": {
|
||||||
|
"description": "Version is the version of the Flux instance.",
|
||||||
|
"type": "string"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"required": [
|
||||||
|
"entitlement",
|
||||||
|
"status"
|
||||||
|
],
|
||||||
|
"type": "object",
|
||||||
|
"additionalProperties": false
|
||||||
|
},
|
||||||
|
"operator": {
|
||||||
|
"description": "Operator is the version information of the Flux Operator.",
|
||||||
|
"properties": {
|
||||||
|
"apiVersion": {
|
||||||
|
"description": "APIVersion is the API version of the Flux Operator.",
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"platform": {
|
||||||
|
"description": "Platform is the os/arch of Flux Operator.",
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"version": {
|
||||||
|
"description": "Version is the version number of Flux Operator.",
|
||||||
|
"type": "string"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"required": [
|
||||||
|
"apiVersion",
|
||||||
|
"platform",
|
||||||
|
"version"
|
||||||
|
],
|
||||||
|
"type": "object",
|
||||||
|
"additionalProperties": false
|
||||||
|
},
|
||||||
|
"reconcilers": {
|
||||||
|
"description": "ReconcilersStatus is the list of Flux reconcilers and\ntheir statistics grouped by API kind.",
|
||||||
|
"items": {
|
||||||
|
"description": "FluxReconcilerStatus defines the observed state of a Flux reconciler.",
|
||||||
|
"properties": {
|
||||||
|
"apiVersion": {
|
||||||
|
"description": "APIVersion is the API version of the Flux resource.",
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"kind": {
|
||||||
|
"description": "Kind is the kind of the Flux resource.",
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"stats": {
|
||||||
|
"description": "Stats is the reconcile statics of the Flux resource kind.",
|
||||||
|
"properties": {
|
||||||
|
"failing": {
|
||||||
|
"description": "Failing is the number of reconciled\nresources in the Failing state and not Suspended.",
|
||||||
|
"type": "integer"
|
||||||
|
},
|
||||||
|
"running": {
|
||||||
|
"description": "Running is the number of reconciled\nresources in the Running state.",
|
||||||
|
"type": "integer"
|
||||||
|
},
|
||||||
|
"suspended": {
|
||||||
|
"description": "Suspended is the number of reconciled\nresources in the Suspended state.",
|
||||||
|
"type": "integer"
|
||||||
|
},
|
||||||
|
"totalSize": {
|
||||||
|
"description": "TotalSize is the total size of the artifacts in storage.",
|
||||||
|
"type": "string"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"required": [
|
||||||
|
"failing",
|
||||||
|
"running",
|
||||||
|
"suspended"
|
||||||
|
],
|
||||||
|
"type": "object",
|
||||||
|
"additionalProperties": false
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"required": [
|
||||||
|
"apiVersion",
|
||||||
|
"kind"
|
||||||
|
],
|
||||||
|
"type": "object",
|
||||||
|
"additionalProperties": false
|
||||||
|
},
|
||||||
|
"type": "array"
|
||||||
|
},
|
||||||
|
"sync": {
|
||||||
|
"description": "SyncStatus is the status of the cluster sync\nSource and Kustomization resources.",
|
||||||
|
"properties": {
|
||||||
|
"id": {
|
||||||
|
"description": "ID is the identifier of the sync.",
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"path": {
|
||||||
|
"description": "Path is the kustomize path of the sync.",
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"ready": {
|
||||||
|
"description": "Ready is the readiness status of the sync.",
|
||||||
|
"type": "boolean"
|
||||||
|
},
|
||||||
|
"source": {
|
||||||
|
"description": "Source is the URL of the source repository.",
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"status": {
|
||||||
|
"description": "Status is a human-readable message indicating details\nabout the sync observed state.",
|
||||||
|
"type": "string"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"required": [
|
||||||
|
"id",
|
||||||
|
"ready",
|
||||||
|
"status"
|
||||||
|
],
|
||||||
|
"type": "object",
|
||||||
|
"additionalProperties": false
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"required": [
|
||||||
|
"distribution"
|
||||||
|
],
|
||||||
|
"type": "object",
|
||||||
|
"additionalProperties": false
|
||||||
|
},
|
||||||
|
"status": {
|
||||||
|
"description": "FluxReportStatus defines the readiness of a FluxReport.",
|
||||||
|
"properties": {
|
||||||
|
"conditions": {
|
||||||
|
"description": "Conditions contains the readiness conditions of the object.",
|
||||||
|
"items": {
|
||||||
|
"description": "Condition contains details for one aspect of the current state of this API Resource.",
|
||||||
|
"properties": {
|
||||||
|
"lastTransitionTime": {
|
||||||
|
"description": "lastTransitionTime is the last time the condition transitioned from one status to another.\nThis should be when the underlying condition changed. If that is not known, then using the time when the API field changed is acceptable.",
|
||||||
|
"format": "date-time",
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"message": {
|
||||||
|
"description": "message is a human readable message indicating details about the transition.\nThis may be an empty string.",
|
||||||
|
"maxLength": 32768,
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"observedGeneration": {
|
||||||
|
"description": "observedGeneration represents the .metadata.generation that the condition was set based upon.\nFor instance, if .metadata.generation is currently 12, but the .status.conditions[x].observedGeneration is 9, the condition is out of date\nwith respect to the current state of the instance.",
|
||||||
|
"format": "int64",
|
||||||
|
"minimum": 0,
|
||||||
|
"type": "integer"
|
||||||
|
},
|
||||||
|
"reason": {
|
||||||
|
"description": "reason contains a programmatic identifier indicating the reason for the condition's last transition.\nProducers of specific condition types may define expected values and meanings for this field,\nand whether the values are considered a guaranteed API.\nThe value should be a CamelCase string.\nThis field may not be empty.",
|
||||||
|
"maxLength": 1024,
|
||||||
|
"minLength": 1,
|
||||||
|
"pattern": "^[A-Za-z]([A-Za-z0-9_,:]*[A-Za-z0-9_])?$",
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"status": {
|
||||||
|
"description": "status of the condition, one of True, False, Unknown.",
|
||||||
|
"enum": [
|
||||||
|
"True",
|
||||||
|
"False",
|
||||||
|
"Unknown"
|
||||||
|
],
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"type": {
|
||||||
|
"description": "type of condition in CamelCase or in foo.example.com/CamelCase.",
|
||||||
|
"maxLength": 316,
|
||||||
|
"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])$",
|
||||||
|
"type": "string"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"required": [
|
||||||
|
"lastTransitionTime",
|
||||||
|
"message",
|
||||||
|
"reason",
|
||||||
|
"status",
|
||||||
|
"type"
|
||||||
|
],
|
||||||
|
"type": "object",
|
||||||
|
"additionalProperties": false
|
||||||
|
},
|
||||||
|
"type": "array"
|
||||||
|
},
|
||||||
|
"lastHandledReconcileAt": {
|
||||||
|
"description": "LastHandledReconcileAt holds the value of the most recent\nreconcile request value, so a change of the annotation value\ncan be detected.",
|
||||||
|
"type": "string"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"type": "object",
|
||||||
|
"additionalProperties": false
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"type": "object",
|
||||||
|
"x-kubernetes-validations": [
|
||||||
|
{
|
||||||
|
"message": "the only accepted name for a FluxReport is 'flux'",
|
||||||
|
"rule": "self.metadata.name == 'flux'"
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
@@ -0,0 +1,33 @@
|
|||||||
|
{
|
||||||
|
"description": "Auto-generated derived type for Node via `CustomResource`",
|
||||||
|
"properties": {
|
||||||
|
"spec": {
|
||||||
|
"properties": {
|
||||||
|
"address": {
|
||||||
|
"format": "ip",
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"hostname": {
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"port": {
|
||||||
|
"format": "uint16",
|
||||||
|
"minimum": 0,
|
||||||
|
"type": "integer"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"required": [
|
||||||
|
"address",
|
||||||
|
"hostname",
|
||||||
|
"port"
|
||||||
|
],
|
||||||
|
"type": "object",
|
||||||
|
"additionalProperties": false
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"required": [
|
||||||
|
"spec"
|
||||||
|
],
|
||||||
|
"title": "GarageNode",
|
||||||
|
"type": "object"
|
||||||
|
}
|
||||||
@@ -0,0 +1,438 @@
|
|||||||
|
{
|
||||||
|
"description": "GitRepository is the Schema for the gitrepositories API.",
|
||||||
|
"properties": {
|
||||||
|
"apiVersion": {
|
||||||
|
"description": "APIVersion defines the versioned schema of this representation of an object.\nServers should convert recognized schemas to the latest internal value, and\nmay reject unrecognized values.\nMore info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources",
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"kind": {
|
||||||
|
"description": "Kind is a string value representing the REST resource this object represents.\nServers may infer this from the endpoint the client submits requests to.\nCannot be updated.\nIn CamelCase.\nMore info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds",
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"metadata": {
|
||||||
|
"type": "object"
|
||||||
|
},
|
||||||
|
"spec": {
|
||||||
|
"description": "GitRepositorySpec specifies the required configuration to produce an\nArtifact for a Git repository.",
|
||||||
|
"properties": {
|
||||||
|
"ignore": {
|
||||||
|
"description": "Ignore overrides the set of excluded patterns in the .sourceignore format\n(which is the same as .gitignore). If not provided, a default will be used,\nconsult the documentation for your version to find out what those are.",
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"include": {
|
||||||
|
"description": "Include specifies a list of GitRepository resources which Artifacts\nshould be included in the Artifact produced for this GitRepository.",
|
||||||
|
"items": {
|
||||||
|
"description": "GitRepositoryInclude specifies a local reference to a GitRepository which\nArtifact (sub-)contents must be included, and where they should be placed.",
|
||||||
|
"properties": {
|
||||||
|
"fromPath": {
|
||||||
|
"description": "FromPath specifies the path to copy contents from, defaults to the root\nof the Artifact.",
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"repository": {
|
||||||
|
"description": "GitRepositoryRef specifies the GitRepository which Artifact contents\nmust be included.",
|
||||||
|
"properties": {
|
||||||
|
"name": {
|
||||||
|
"description": "Name of the referent.",
|
||||||
|
"type": "string"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"required": [
|
||||||
|
"name"
|
||||||
|
],
|
||||||
|
"type": "object",
|
||||||
|
"additionalProperties": false
|
||||||
|
},
|
||||||
|
"toPath": {
|
||||||
|
"description": "ToPath specifies the path to copy contents to, defaults to the name of\nthe GitRepositoryRef.",
|
||||||
|
"type": "string"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"required": [
|
||||||
|
"repository"
|
||||||
|
],
|
||||||
|
"type": "object",
|
||||||
|
"additionalProperties": false
|
||||||
|
},
|
||||||
|
"type": "array"
|
||||||
|
},
|
||||||
|
"interval": {
|
||||||
|
"description": "Interval at which the GitRepository URL is checked for updates.\nThis interval is approximate and may be subject to jitter to ensure\nefficient use of resources.",
|
||||||
|
"pattern": "^([0-9]+(\\.[0-9]+)?(ms|s|m|h))+$",
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"provider": {
|
||||||
|
"description": "Provider used for authentication, can be 'azure', 'github', 'generic'.\nWhen not specified, defaults to 'generic'.",
|
||||||
|
"enum": [
|
||||||
|
"generic",
|
||||||
|
"azure",
|
||||||
|
"github"
|
||||||
|
],
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"proxySecretRef": {
|
||||||
|
"description": "ProxySecretRef specifies the Secret containing the proxy configuration\nto use while communicating with the Git server.",
|
||||||
|
"properties": {
|
||||||
|
"name": {
|
||||||
|
"description": "Name of the referent.",
|
||||||
|
"type": "string"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"required": [
|
||||||
|
"name"
|
||||||
|
],
|
||||||
|
"type": "object",
|
||||||
|
"additionalProperties": false
|
||||||
|
},
|
||||||
|
"recurseSubmodules": {
|
||||||
|
"description": "RecurseSubmodules enables the initialization of all submodules within\nthe GitRepository as cloned from the URL, using their default settings.",
|
||||||
|
"type": "boolean"
|
||||||
|
},
|
||||||
|
"ref": {
|
||||||
|
"description": "Reference specifies the Git reference to resolve and monitor for\nchanges, defaults to the 'master' branch.",
|
||||||
|
"properties": {
|
||||||
|
"branch": {
|
||||||
|
"description": "Branch to check out, defaults to 'master' if no other field is defined.",
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"commit": {
|
||||||
|
"description": "Commit SHA to check out, takes precedence over all reference fields.\n\nThis can be combined with Branch to shallow clone the branch, in which\nthe commit is expected to exist.",
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"name": {
|
||||||
|
"description": "Name of the reference to check out; takes precedence over Branch, Tag and SemVer.\n\nIt must be a valid Git reference: https://git-scm.com/docs/git-check-ref-format#_description\nExamples: \"refs/heads/main\", \"refs/tags/v0.1.0\", \"refs/pull/420/head\", \"refs/merge-requests/1/head\"",
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"semver": {
|
||||||
|
"description": "SemVer tag expression to check out, takes precedence over Tag.",
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"tag": {
|
||||||
|
"description": "Tag to check out, takes precedence over Branch.",
|
||||||
|
"type": "string"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"type": "object",
|
||||||
|
"additionalProperties": false
|
||||||
|
},
|
||||||
|
"secretRef": {
|
||||||
|
"description": "SecretRef specifies the Secret containing authentication credentials for\nthe GitRepository.\nFor HTTPS repositories the Secret must contain 'username' and 'password'\nfields for basic auth or 'bearerToken' field for token auth.\nFor SSH repositories the Secret must contain 'identity'\nand 'known_hosts' fields.",
|
||||||
|
"properties": {
|
||||||
|
"name": {
|
||||||
|
"description": "Name of the referent.",
|
||||||
|
"type": "string"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"required": [
|
||||||
|
"name"
|
||||||
|
],
|
||||||
|
"type": "object",
|
||||||
|
"additionalProperties": false
|
||||||
|
},
|
||||||
|
"serviceAccountName": {
|
||||||
|
"description": "ServiceAccountName is the name of the Kubernetes ServiceAccount used to\nauthenticate to the GitRepository. This field is only supported for 'azure' provider.",
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"sparseCheckout": {
|
||||||
|
"description": "SparseCheckout specifies a list of directories to checkout when cloning\nthe repository. If specified, only these directories are included in the\nArtifact produced for this GitRepository.",
|
||||||
|
"items": {
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"type": "array"
|
||||||
|
},
|
||||||
|
"suspend": {
|
||||||
|
"description": "Suspend tells the controller to suspend the reconciliation of this\nGitRepository.",
|
||||||
|
"type": "boolean"
|
||||||
|
},
|
||||||
|
"timeout": {
|
||||||
|
"default": "60s",
|
||||||
|
"description": "Timeout for Git operations like cloning, defaults to 60s.",
|
||||||
|
"pattern": "^([0-9]+(\\.[0-9]+)?(ms|s|m))+$",
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"url": {
|
||||||
|
"description": "URL specifies the Git repository URL, it can be an HTTP/S or SSH address.",
|
||||||
|
"pattern": "^(http|https|ssh)://.*$",
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"verify": {
|
||||||
|
"description": "Verification specifies the configuration to verify the Git commit\nsignature(s).",
|
||||||
|
"properties": {
|
||||||
|
"mode": {
|
||||||
|
"default": "HEAD",
|
||||||
|
"description": "Mode specifies which Git object(s) should be verified.\n\nThe variants \"head\" and \"HEAD\" both imply the same thing, i.e. verify\nthe commit that the HEAD of the Git repository points to. The variant\n\"head\" solely exists to ensure backwards compatibility.",
|
||||||
|
"enum": [
|
||||||
|
"head",
|
||||||
|
"HEAD",
|
||||||
|
"Tag",
|
||||||
|
"TagAndHEAD"
|
||||||
|
],
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"secretRef": {
|
||||||
|
"description": "SecretRef specifies the Secret containing the public keys of trusted Git\nauthors.",
|
||||||
|
"properties": {
|
||||||
|
"name": {
|
||||||
|
"description": "Name of the referent.",
|
||||||
|
"type": "string"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"required": [
|
||||||
|
"name"
|
||||||
|
],
|
||||||
|
"type": "object",
|
||||||
|
"additionalProperties": false
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"required": [
|
||||||
|
"secretRef"
|
||||||
|
],
|
||||||
|
"type": "object",
|
||||||
|
"additionalProperties": false
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"required": [
|
||||||
|
"interval",
|
||||||
|
"url"
|
||||||
|
],
|
||||||
|
"type": "object",
|
||||||
|
"x-kubernetes-validations": [
|
||||||
|
{
|
||||||
|
"message": "serviceAccountName can only be set when provider is 'azure'",
|
||||||
|
"rule": "!has(self.serviceAccountName) || (has(self.provider) && self.provider == 'azure')"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"additionalProperties": false
|
||||||
|
},
|
||||||
|
"status": {
|
||||||
|
"default": {
|
||||||
|
"observedGeneration": -1
|
||||||
|
},
|
||||||
|
"description": "GitRepositoryStatus records the observed state of a Git repository.",
|
||||||
|
"properties": {
|
||||||
|
"artifact": {
|
||||||
|
"description": "Artifact represents the last successful GitRepository reconciliation.",
|
||||||
|
"properties": {
|
||||||
|
"digest": {
|
||||||
|
"description": "Digest is the digest of the file in the form of '<algorithm>:<checksum>'.",
|
||||||
|
"pattern": "^[a-z0-9]+(?:[.+_-][a-z0-9]+)*:[a-zA-Z0-9=_-]+$",
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"lastUpdateTime": {
|
||||||
|
"description": "LastUpdateTime is the timestamp corresponding to the last update of the\nArtifact.",
|
||||||
|
"format": "date-time",
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"metadata": {
|
||||||
|
"additionalProperties": {
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"description": "Metadata holds upstream information such as OCI annotations.",
|
||||||
|
"type": "object"
|
||||||
|
},
|
||||||
|
"path": {
|
||||||
|
"description": "Path is the relative file path of the Artifact. It can be used to locate\nthe file in the root of the Artifact storage on the local file system of\nthe controller managing the Source.",
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"revision": {
|
||||||
|
"description": "Revision is a human-readable identifier traceable in the origin source\nsystem. It can be a Git commit SHA, Git tag, a Helm chart version, etc.",
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"size": {
|
||||||
|
"description": "Size is the number of bytes in the file.",
|
||||||
|
"format": "int64",
|
||||||
|
"type": "integer"
|
||||||
|
},
|
||||||
|
"url": {
|
||||||
|
"description": "URL is the HTTP address of the Artifact as exposed by the controller\nmanaging the Source. It can be used to retrieve the Artifact for\nconsumption, e.g. by another controller applying the Artifact contents.",
|
||||||
|
"type": "string"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"required": [
|
||||||
|
"digest",
|
||||||
|
"lastUpdateTime",
|
||||||
|
"path",
|
||||||
|
"revision",
|
||||||
|
"url"
|
||||||
|
],
|
||||||
|
"type": "object",
|
||||||
|
"additionalProperties": false
|
||||||
|
},
|
||||||
|
"conditions": {
|
||||||
|
"description": "Conditions holds the conditions for the GitRepository.",
|
||||||
|
"items": {
|
||||||
|
"description": "Condition contains details for one aspect of the current state of this API Resource.",
|
||||||
|
"properties": {
|
||||||
|
"lastTransitionTime": {
|
||||||
|
"description": "lastTransitionTime is the last time the condition transitioned from one status to another.\nThis should be when the underlying condition changed. If that is not known, then using the time when the API field changed is acceptable.",
|
||||||
|
"format": "date-time",
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"message": {
|
||||||
|
"description": "message is a human readable message indicating details about the transition.\nThis may be an empty string.",
|
||||||
|
"maxLength": 32768,
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"observedGeneration": {
|
||||||
|
"description": "observedGeneration represents the .metadata.generation that the condition was set based upon.\nFor instance, if .metadata.generation is currently 12, but the .status.conditions[x].observedGeneration is 9, the condition is out of date\nwith respect to the current state of the instance.",
|
||||||
|
"format": "int64",
|
||||||
|
"minimum": 0,
|
||||||
|
"type": "integer"
|
||||||
|
},
|
||||||
|
"reason": {
|
||||||
|
"description": "reason contains a programmatic identifier indicating the reason for the condition's last transition.\nProducers of specific condition types may define expected values and meanings for this field,\nand whether the values are considered a guaranteed API.\nThe value should be a CamelCase string.\nThis field may not be empty.",
|
||||||
|
"maxLength": 1024,
|
||||||
|
"minLength": 1,
|
||||||
|
"pattern": "^[A-Za-z]([A-Za-z0-9_,:]*[A-Za-z0-9_])?$",
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"status": {
|
||||||
|
"description": "status of the condition, one of True, False, Unknown.",
|
||||||
|
"enum": [
|
||||||
|
"True",
|
||||||
|
"False",
|
||||||
|
"Unknown"
|
||||||
|
],
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"type": {
|
||||||
|
"description": "type of condition in CamelCase or in foo.example.com/CamelCase.",
|
||||||
|
"maxLength": 316,
|
||||||
|
"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])$",
|
||||||
|
"type": "string"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"required": [
|
||||||
|
"lastTransitionTime",
|
||||||
|
"message",
|
||||||
|
"reason",
|
||||||
|
"status",
|
||||||
|
"type"
|
||||||
|
],
|
||||||
|
"type": "object",
|
||||||
|
"additionalProperties": false
|
||||||
|
},
|
||||||
|
"type": "array"
|
||||||
|
},
|
||||||
|
"includedArtifacts": {
|
||||||
|
"description": "IncludedArtifacts contains a list of the last successfully included\nArtifacts as instructed by GitRepositorySpec.Include.",
|
||||||
|
"items": {
|
||||||
|
"description": "Artifact represents the output of a Source reconciliation.",
|
||||||
|
"properties": {
|
||||||
|
"digest": {
|
||||||
|
"description": "Digest is the digest of the file in the form of '<algorithm>:<checksum>'.",
|
||||||
|
"pattern": "^[a-z0-9]+(?:[.+_-][a-z0-9]+)*:[a-zA-Z0-9=_-]+$",
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"lastUpdateTime": {
|
||||||
|
"description": "LastUpdateTime is the timestamp corresponding to the last update of the\nArtifact.",
|
||||||
|
"format": "date-time",
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"metadata": {
|
||||||
|
"additionalProperties": {
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"description": "Metadata holds upstream information such as OCI annotations.",
|
||||||
|
"type": "object"
|
||||||
|
},
|
||||||
|
"path": {
|
||||||
|
"description": "Path is the relative file path of the Artifact. It can be used to locate\nthe file in the root of the Artifact storage on the local file system of\nthe controller managing the Source.",
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"revision": {
|
||||||
|
"description": "Revision is a human-readable identifier traceable in the origin source\nsystem. It can be a Git commit SHA, Git tag, a Helm chart version, etc.",
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"size": {
|
||||||
|
"description": "Size is the number of bytes in the file.",
|
||||||
|
"format": "int64",
|
||||||
|
"type": "integer"
|
||||||
|
},
|
||||||
|
"url": {
|
||||||
|
"description": "URL is the HTTP address of the Artifact as exposed by the controller\nmanaging the Source. It can be used to retrieve the Artifact for\nconsumption, e.g. by another controller applying the Artifact contents.",
|
||||||
|
"type": "string"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"required": [
|
||||||
|
"digest",
|
||||||
|
"lastUpdateTime",
|
||||||
|
"path",
|
||||||
|
"revision",
|
||||||
|
"url"
|
||||||
|
],
|
||||||
|
"type": "object",
|
||||||
|
"additionalProperties": false
|
||||||
|
},
|
||||||
|
"type": "array"
|
||||||
|
},
|
||||||
|
"lastHandledReconcileAt": {
|
||||||
|
"description": "LastHandledReconcileAt holds the value of the most recent\nreconcile request value, so a change of the annotation value\ncan be detected.",
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"observedGeneration": {
|
||||||
|
"description": "ObservedGeneration is the last observed generation of the GitRepository\nobject.",
|
||||||
|
"format": "int64",
|
||||||
|
"type": "integer"
|
||||||
|
},
|
||||||
|
"observedIgnore": {
|
||||||
|
"description": "ObservedIgnore is the observed exclusion patterns used for constructing\nthe source artifact.",
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"observedInclude": {
|
||||||
|
"description": "ObservedInclude is the observed list of GitRepository resources used to\nproduce the current Artifact.",
|
||||||
|
"items": {
|
||||||
|
"description": "GitRepositoryInclude specifies a local reference to a GitRepository which\nArtifact (sub-)contents must be included, and where they should be placed.",
|
||||||
|
"properties": {
|
||||||
|
"fromPath": {
|
||||||
|
"description": "FromPath specifies the path to copy contents from, defaults to the root\nof the Artifact.",
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"repository": {
|
||||||
|
"description": "GitRepositoryRef specifies the GitRepository which Artifact contents\nmust be included.",
|
||||||
|
"properties": {
|
||||||
|
"name": {
|
||||||
|
"description": "Name of the referent.",
|
||||||
|
"type": "string"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"required": [
|
||||||
|
"name"
|
||||||
|
],
|
||||||
|
"type": "object",
|
||||||
|
"additionalProperties": false
|
||||||
|
},
|
||||||
|
"toPath": {
|
||||||
|
"description": "ToPath specifies the path to copy contents to, defaults to the name of\nthe GitRepositoryRef.",
|
||||||
|
"type": "string"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"required": [
|
||||||
|
"repository"
|
||||||
|
],
|
||||||
|
"type": "object",
|
||||||
|
"additionalProperties": false
|
||||||
|
},
|
||||||
|
"type": "array"
|
||||||
|
},
|
||||||
|
"observedRecurseSubmodules": {
|
||||||
|
"description": "ObservedRecurseSubmodules is the observed resource submodules\nconfiguration used to produce the current Artifact.",
|
||||||
|
"type": "boolean"
|
||||||
|
},
|
||||||
|
"observedSparseCheckout": {
|
||||||
|
"description": "ObservedSparseCheckout is the observed list of directories used to\nproduce the current Artifact.",
|
||||||
|
"items": {
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"type": "array"
|
||||||
|
},
|
||||||
|
"sourceVerificationMode": {
|
||||||
|
"description": "SourceVerificationMode is the last used verification mode indicating\nwhich Git object(s) have been verified.",
|
||||||
|
"type": "string"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"type": "object",
|
||||||
|
"additionalProperties": false
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"type": "object"
|
||||||
|
}
|
||||||
@@ -0,0 +1,299 @@
|
|||||||
|
{
|
||||||
|
"description": "HelmChart is the Schema for the helmcharts API.",
|
||||||
|
"properties": {
|
||||||
|
"apiVersion": {
|
||||||
|
"description": "APIVersion defines the versioned schema of this representation of an object.\nServers should convert recognized schemas to the latest internal value, and\nmay reject unrecognized values.\nMore info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources",
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"kind": {
|
||||||
|
"description": "Kind is a string value representing the REST resource this object represents.\nServers may infer this from the endpoint the client submits requests to.\nCannot be updated.\nIn CamelCase.\nMore info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds",
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"metadata": {
|
||||||
|
"type": "object"
|
||||||
|
},
|
||||||
|
"spec": {
|
||||||
|
"description": "HelmChartSpec specifies the desired state of a Helm chart.",
|
||||||
|
"properties": {
|
||||||
|
"chart": {
|
||||||
|
"description": "Chart is the name or path the Helm chart is available at in the\nSourceRef.",
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"ignoreMissingValuesFiles": {
|
||||||
|
"description": "IgnoreMissingValuesFiles controls whether to silently ignore missing values\nfiles rather than failing.",
|
||||||
|
"type": "boolean"
|
||||||
|
},
|
||||||
|
"interval": {
|
||||||
|
"description": "Interval at which the HelmChart SourceRef is checked for updates.\nThis interval is approximate and may be subject to jitter to ensure\nefficient use of resources.",
|
||||||
|
"pattern": "^([0-9]+(\\.[0-9]+)?(ms|s|m|h))+$",
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"reconcileStrategy": {
|
||||||
|
"default": "ChartVersion",
|
||||||
|
"description": "ReconcileStrategy determines what enables the creation of a new artifact.\nValid values are ('ChartVersion', 'Revision').\nSee the documentation of the values for an explanation on their behavior.\nDefaults to ChartVersion when omitted.",
|
||||||
|
"enum": [
|
||||||
|
"ChartVersion",
|
||||||
|
"Revision"
|
||||||
|
],
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"sourceRef": {
|
||||||
|
"description": "SourceRef is the reference to the Source the chart is available at.",
|
||||||
|
"properties": {
|
||||||
|
"apiVersion": {
|
||||||
|
"description": "APIVersion of the referent.",
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"kind": {
|
||||||
|
"description": "Kind of the referent, valid values are ('HelmRepository', 'GitRepository',\n'Bucket').",
|
||||||
|
"enum": [
|
||||||
|
"HelmRepository",
|
||||||
|
"GitRepository",
|
||||||
|
"Bucket"
|
||||||
|
],
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"name": {
|
||||||
|
"description": "Name of the referent.",
|
||||||
|
"type": "string"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"required": [
|
||||||
|
"kind",
|
||||||
|
"name"
|
||||||
|
],
|
||||||
|
"type": "object",
|
||||||
|
"additionalProperties": false
|
||||||
|
},
|
||||||
|
"suspend": {
|
||||||
|
"description": "Suspend tells the controller to suspend the reconciliation of this\nsource.",
|
||||||
|
"type": "boolean"
|
||||||
|
},
|
||||||
|
"valuesFiles": {
|
||||||
|
"description": "ValuesFiles is an alternative list of values files to use as the chart\nvalues (values.yaml is not included by default), expected to be a\nrelative path in the SourceRef.\nValues files are merged in the order of this list with the last file\noverriding the first. Ignored when omitted.",
|
||||||
|
"items": {
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"type": "array"
|
||||||
|
},
|
||||||
|
"verify": {
|
||||||
|
"description": "Verify contains the secret name containing the trusted public keys\nused to verify the signature and specifies which provider to use to check\nwhether OCI image is authentic.\nThis field is only supported when using HelmRepository source with spec.type 'oci'.\nChart dependencies, which are not bundled in the umbrella chart artifact, are not verified.",
|
||||||
|
"properties": {
|
||||||
|
"matchOIDCIdentity": {
|
||||||
|
"description": "MatchOIDCIdentity specifies the identity matching criteria to use\nwhile verifying an OCI artifact which was signed using Cosign keyless\nsigning. The artifact's identity is deemed to be verified if any of the\nspecified matchers match against the identity.",
|
||||||
|
"items": {
|
||||||
|
"description": "OIDCIdentityMatch specifies options for verifying the certificate identity,\ni.e. the issuer and the subject of the certificate.",
|
||||||
|
"properties": {
|
||||||
|
"issuer": {
|
||||||
|
"description": "Issuer specifies the regex pattern to match against to verify\nthe OIDC issuer in the Fulcio certificate. The pattern must be a\nvalid Go regular expression.",
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"subject": {
|
||||||
|
"description": "Subject specifies the regex pattern to match against to verify\nthe identity subject in the Fulcio certificate. The pattern must\nbe a valid Go regular expression.",
|
||||||
|
"type": "string"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"required": [
|
||||||
|
"issuer",
|
||||||
|
"subject"
|
||||||
|
],
|
||||||
|
"type": "object",
|
||||||
|
"additionalProperties": false
|
||||||
|
},
|
||||||
|
"type": "array"
|
||||||
|
},
|
||||||
|
"provider": {
|
||||||
|
"default": "cosign",
|
||||||
|
"description": "Provider specifies the technology used to sign the OCI Artifact.",
|
||||||
|
"enum": [
|
||||||
|
"cosign",
|
||||||
|
"notation"
|
||||||
|
],
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"secretRef": {
|
||||||
|
"description": "SecretRef specifies the Kubernetes Secret containing the\ntrusted public keys.",
|
||||||
|
"properties": {
|
||||||
|
"name": {
|
||||||
|
"description": "Name of the referent.",
|
||||||
|
"type": "string"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"required": [
|
||||||
|
"name"
|
||||||
|
],
|
||||||
|
"type": "object",
|
||||||
|
"additionalProperties": false
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"required": [
|
||||||
|
"provider"
|
||||||
|
],
|
||||||
|
"type": "object",
|
||||||
|
"additionalProperties": false
|
||||||
|
},
|
||||||
|
"version": {
|
||||||
|
"default": "*",
|
||||||
|
"description": "Version is the chart version semver expression, ignored for charts from\nGitRepository and Bucket sources. Defaults to latest when omitted.",
|
||||||
|
"type": "string"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"required": [
|
||||||
|
"chart",
|
||||||
|
"interval",
|
||||||
|
"sourceRef"
|
||||||
|
],
|
||||||
|
"type": "object",
|
||||||
|
"x-kubernetes-validations": [
|
||||||
|
{
|
||||||
|
"message": "spec.verify is only supported when spec.sourceRef.kind is 'HelmRepository'",
|
||||||
|
"rule": "!has(self.verify) || self.sourceRef.kind == 'HelmRepository'"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"additionalProperties": false
|
||||||
|
},
|
||||||
|
"status": {
|
||||||
|
"default": {
|
||||||
|
"observedGeneration": -1
|
||||||
|
},
|
||||||
|
"description": "HelmChartStatus records the observed state of the HelmChart.",
|
||||||
|
"properties": {
|
||||||
|
"artifact": {
|
||||||
|
"description": "Artifact represents the output of the last successful reconciliation.",
|
||||||
|
"properties": {
|
||||||
|
"digest": {
|
||||||
|
"description": "Digest is the digest of the file in the form of '<algorithm>:<checksum>'.",
|
||||||
|
"pattern": "^[a-z0-9]+(?:[.+_-][a-z0-9]+)*:[a-zA-Z0-9=_-]+$",
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"lastUpdateTime": {
|
||||||
|
"description": "LastUpdateTime is the timestamp corresponding to the last update of the\nArtifact.",
|
||||||
|
"format": "date-time",
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"metadata": {
|
||||||
|
"additionalProperties": {
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"description": "Metadata holds upstream information such as OCI annotations.",
|
||||||
|
"type": "object"
|
||||||
|
},
|
||||||
|
"path": {
|
||||||
|
"description": "Path is the relative file path of the Artifact. It can be used to locate\nthe file in the root of the Artifact storage on the local file system of\nthe controller managing the Source.",
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"revision": {
|
||||||
|
"description": "Revision is a human-readable identifier traceable in the origin source\nsystem. It can be a Git commit SHA, Git tag, a Helm chart version, etc.",
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"size": {
|
||||||
|
"description": "Size is the number of bytes in the file.",
|
||||||
|
"format": "int64",
|
||||||
|
"type": "integer"
|
||||||
|
},
|
||||||
|
"url": {
|
||||||
|
"description": "URL is the HTTP address of the Artifact as exposed by the controller\nmanaging the Source. It can be used to retrieve the Artifact for\nconsumption, e.g. by another controller applying the Artifact contents.",
|
||||||
|
"type": "string"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"required": [
|
||||||
|
"digest",
|
||||||
|
"lastUpdateTime",
|
||||||
|
"path",
|
||||||
|
"revision",
|
||||||
|
"url"
|
||||||
|
],
|
||||||
|
"type": "object",
|
||||||
|
"additionalProperties": false
|
||||||
|
},
|
||||||
|
"conditions": {
|
||||||
|
"description": "Conditions holds the conditions for the HelmChart.",
|
||||||
|
"items": {
|
||||||
|
"description": "Condition contains details for one aspect of the current state of this API Resource.",
|
||||||
|
"properties": {
|
||||||
|
"lastTransitionTime": {
|
||||||
|
"description": "lastTransitionTime is the last time the condition transitioned from one status to another.\nThis should be when the underlying condition changed. If that is not known, then using the time when the API field changed is acceptable.",
|
||||||
|
"format": "date-time",
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"message": {
|
||||||
|
"description": "message is a human readable message indicating details about the transition.\nThis may be an empty string.",
|
||||||
|
"maxLength": 32768,
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"observedGeneration": {
|
||||||
|
"description": "observedGeneration represents the .metadata.generation that the condition was set based upon.\nFor instance, if .metadata.generation is currently 12, but the .status.conditions[x].observedGeneration is 9, the condition is out of date\nwith respect to the current state of the instance.",
|
||||||
|
"format": "int64",
|
||||||
|
"minimum": 0,
|
||||||
|
"type": "integer"
|
||||||
|
},
|
||||||
|
"reason": {
|
||||||
|
"description": "reason contains a programmatic identifier indicating the reason for the condition's last transition.\nProducers of specific condition types may define expected values and meanings for this field,\nand whether the values are considered a guaranteed API.\nThe value should be a CamelCase string.\nThis field may not be empty.",
|
||||||
|
"maxLength": 1024,
|
||||||
|
"minLength": 1,
|
||||||
|
"pattern": "^[A-Za-z]([A-Za-z0-9_,:]*[A-Za-z0-9_])?$",
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"status": {
|
||||||
|
"description": "status of the condition, one of True, False, Unknown.",
|
||||||
|
"enum": [
|
||||||
|
"True",
|
||||||
|
"False",
|
||||||
|
"Unknown"
|
||||||
|
],
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"type": {
|
||||||
|
"description": "type of condition in CamelCase or in foo.example.com/CamelCase.",
|
||||||
|
"maxLength": 316,
|
||||||
|
"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])$",
|
||||||
|
"type": "string"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"required": [
|
||||||
|
"lastTransitionTime",
|
||||||
|
"message",
|
||||||
|
"reason",
|
||||||
|
"status",
|
||||||
|
"type"
|
||||||
|
],
|
||||||
|
"type": "object",
|
||||||
|
"additionalProperties": false
|
||||||
|
},
|
||||||
|
"type": "array"
|
||||||
|
},
|
||||||
|
"lastHandledReconcileAt": {
|
||||||
|
"description": "LastHandledReconcileAt holds the value of the most recent\nreconcile request value, so a change of the annotation value\ncan be detected.",
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"observedChartName": {
|
||||||
|
"description": "ObservedChartName is the last observed chart name as specified by the\nresolved chart reference.",
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"observedGeneration": {
|
||||||
|
"description": "ObservedGeneration is the last observed generation of the HelmChart\nobject.",
|
||||||
|
"format": "int64",
|
||||||
|
"type": "integer"
|
||||||
|
},
|
||||||
|
"observedSourceArtifactRevision": {
|
||||||
|
"description": "ObservedSourceArtifactRevision is the last observed Artifact.Revision\nof the HelmChartSpec.SourceRef.",
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"observedValuesFiles": {
|
||||||
|
"description": "ObservedValuesFiles are the observed value files of the last successful\nreconciliation.\nIt matches the chart in the last successfully reconciled artifact.",
|
||||||
|
"items": {
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"type": "array"
|
||||||
|
},
|
||||||
|
"url": {
|
||||||
|
"description": "URL is the dynamic fetch link for the latest Artifact.\nIt is provided on a \"best effort\" basis, and using the precise\nBucketStatus.Artifact data is recommended.",
|
||||||
|
"type": "string"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"type": "object",
|
||||||
|
"additionalProperties": false
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"type": "object"
|
||||||
|
}
|
||||||
File diff suppressed because it is too large
Load Diff
@@ -0,0 +1,256 @@
|
|||||||
|
{
|
||||||
|
"description": "HelmRepository is the Schema for the helmrepositories API.",
|
||||||
|
"properties": {
|
||||||
|
"apiVersion": {
|
||||||
|
"description": "APIVersion defines the versioned schema of this representation of an object.\nServers should convert recognized schemas to the latest internal value, and\nmay reject unrecognized values.\nMore info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources",
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"kind": {
|
||||||
|
"description": "Kind is a string value representing the REST resource this object represents.\nServers may infer this from the endpoint the client submits requests to.\nCannot be updated.\nIn CamelCase.\nMore info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds",
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"metadata": {
|
||||||
|
"type": "object"
|
||||||
|
},
|
||||||
|
"spec": {
|
||||||
|
"description": "HelmRepositorySpec specifies the required configuration to produce an\nArtifact for a Helm repository index YAML.",
|
||||||
|
"properties": {
|
||||||
|
"accessFrom": {
|
||||||
|
"description": "AccessFrom specifies an Access Control List for allowing cross-namespace\nreferences to this object.\nNOTE: Not implemented, provisional as of https://github.com/fluxcd/flux2/pull/2092",
|
||||||
|
"properties": {
|
||||||
|
"namespaceSelectors": {
|
||||||
|
"description": "NamespaceSelectors is the list of namespace selectors to which this ACL applies.\nItems in this list are evaluated using a logical OR operation.",
|
||||||
|
"items": {
|
||||||
|
"description": "NamespaceSelector selects the namespaces to which this ACL applies.\nAn empty map of MatchLabels matches all namespaces in a cluster.",
|
||||||
|
"properties": {
|
||||||
|
"matchLabels": {
|
||||||
|
"additionalProperties": {
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"description": "MatchLabels is a map of {key,value} pairs. A single {key,value} in the matchLabels\nmap is equivalent to an element of matchExpressions, whose key field is \"key\", the\noperator is \"In\", and the values array contains only \"value\". The requirements are ANDed.",
|
||||||
|
"type": "object"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"type": "object",
|
||||||
|
"additionalProperties": false
|
||||||
|
},
|
||||||
|
"type": "array"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"required": [
|
||||||
|
"namespaceSelectors"
|
||||||
|
],
|
||||||
|
"type": "object",
|
||||||
|
"additionalProperties": false
|
||||||
|
},
|
||||||
|
"certSecretRef": {
|
||||||
|
"description": "CertSecretRef can be given the name of a Secret containing\neither or both of\n\n- a PEM-encoded client certificate (`tls.crt`) and private\nkey (`tls.key`);\n- a PEM-encoded CA certificate (`ca.crt`)\n\nand whichever are supplied, will be used for connecting to the\nregistry. The client cert and key are useful if you are\nauthenticating with a certificate; the CA cert is useful if\nyou are using a self-signed server certificate. The Secret must\nbe of type `Opaque` or `kubernetes.io/tls`.\n\nIt takes precedence over the values specified in the Secret referred\nto by `.spec.secretRef`.",
|
||||||
|
"properties": {
|
||||||
|
"name": {
|
||||||
|
"description": "Name of the referent.",
|
||||||
|
"type": "string"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"required": [
|
||||||
|
"name"
|
||||||
|
],
|
||||||
|
"type": "object",
|
||||||
|
"additionalProperties": false
|
||||||
|
},
|
||||||
|
"insecure": {
|
||||||
|
"description": "Insecure allows connecting to a non-TLS HTTP container registry.\nThis field is only taken into account if the .spec.type field is set to 'oci'.",
|
||||||
|
"type": "boolean"
|
||||||
|
},
|
||||||
|
"interval": {
|
||||||
|
"description": "Interval at which the HelmRepository URL is checked for updates.\nThis interval is approximate and may be subject to jitter to ensure\nefficient use of resources.",
|
||||||
|
"pattern": "^([0-9]+(\\.[0-9]+)?(ms|s|m|h))+$",
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"passCredentials": {
|
||||||
|
"description": "PassCredentials allows the credentials from the SecretRef to be passed\non to a host that does not match the host as defined in URL.\nThis may be required if the host of the advertised chart URLs in the\nindex differ from the defined URL.\nEnabling this should be done with caution, as it can potentially result\nin credentials getting stolen in a MITM-attack.",
|
||||||
|
"type": "boolean"
|
||||||
|
},
|
||||||
|
"provider": {
|
||||||
|
"default": "generic",
|
||||||
|
"description": "Provider used for authentication, can be 'aws', 'azure', 'gcp' or 'generic'.\nThis field is optional, and only taken into account if the .spec.type field is set to 'oci'.\nWhen not specified, defaults to 'generic'.",
|
||||||
|
"enum": [
|
||||||
|
"generic",
|
||||||
|
"aws",
|
||||||
|
"azure",
|
||||||
|
"gcp"
|
||||||
|
],
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"secretRef": {
|
||||||
|
"description": "SecretRef specifies the Secret containing authentication credentials\nfor the HelmRepository.\nFor HTTP/S basic auth the secret must contain 'username' and 'password'\nfields.\nSupport for TLS auth using the 'certFile' and 'keyFile', and/or 'caFile'\nkeys is deprecated. Please use `.spec.certSecretRef` instead.",
|
||||||
|
"properties": {
|
||||||
|
"name": {
|
||||||
|
"description": "Name of the referent.",
|
||||||
|
"type": "string"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"required": [
|
||||||
|
"name"
|
||||||
|
],
|
||||||
|
"type": "object",
|
||||||
|
"additionalProperties": false
|
||||||
|
},
|
||||||
|
"suspend": {
|
||||||
|
"description": "Suspend tells the controller to suspend the reconciliation of this\nHelmRepository.",
|
||||||
|
"type": "boolean"
|
||||||
|
},
|
||||||
|
"timeout": {
|
||||||
|
"description": "Timeout is used for the index fetch operation for an HTTPS helm repository,\nand for remote OCI Repository operations like pulling for an OCI helm\nchart by the associated HelmChart.\nIts default value is 60s.",
|
||||||
|
"pattern": "^([0-9]+(\\.[0-9]+)?(ms|s|m))+$",
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"type": {
|
||||||
|
"description": "Type of the HelmRepository.\nWhen this field is set to \"oci\", the URL field value must be prefixed with \"oci://\".",
|
||||||
|
"enum": [
|
||||||
|
"default",
|
||||||
|
"oci"
|
||||||
|
],
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"url": {
|
||||||
|
"description": "URL of the Helm repository, a valid URL contains at least a protocol and\nhost.",
|
||||||
|
"pattern": "^(http|https|oci)://.*$",
|
||||||
|
"type": "string"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"required": [
|
||||||
|
"url"
|
||||||
|
],
|
||||||
|
"type": "object",
|
||||||
|
"additionalProperties": false
|
||||||
|
},
|
||||||
|
"status": {
|
||||||
|
"default": {
|
||||||
|
"observedGeneration": -1
|
||||||
|
},
|
||||||
|
"description": "HelmRepositoryStatus records the observed state of the HelmRepository.",
|
||||||
|
"properties": {
|
||||||
|
"artifact": {
|
||||||
|
"description": "Artifact represents the last successful HelmRepository reconciliation.",
|
||||||
|
"properties": {
|
||||||
|
"digest": {
|
||||||
|
"description": "Digest is the digest of the file in the form of '<algorithm>:<checksum>'.",
|
||||||
|
"pattern": "^[a-z0-9]+(?:[.+_-][a-z0-9]+)*:[a-zA-Z0-9=_-]+$",
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"lastUpdateTime": {
|
||||||
|
"description": "LastUpdateTime is the timestamp corresponding to the last update of the\nArtifact.",
|
||||||
|
"format": "date-time",
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"metadata": {
|
||||||
|
"additionalProperties": {
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"description": "Metadata holds upstream information such as OCI annotations.",
|
||||||
|
"type": "object"
|
||||||
|
},
|
||||||
|
"path": {
|
||||||
|
"description": "Path is the relative file path of the Artifact. It can be used to locate\nthe file in the root of the Artifact storage on the local file system of\nthe controller managing the Source.",
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"revision": {
|
||||||
|
"description": "Revision is a human-readable identifier traceable in the origin source\nsystem. It can be a Git commit SHA, Git tag, a Helm chart version, etc.",
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"size": {
|
||||||
|
"description": "Size is the number of bytes in the file.",
|
||||||
|
"format": "int64",
|
||||||
|
"type": "integer"
|
||||||
|
},
|
||||||
|
"url": {
|
||||||
|
"description": "URL is the HTTP address of the Artifact as exposed by the controller\nmanaging the Source. It can be used to retrieve the Artifact for\nconsumption, e.g. by another controller applying the Artifact contents.",
|
||||||
|
"type": "string"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"required": [
|
||||||
|
"digest",
|
||||||
|
"lastUpdateTime",
|
||||||
|
"path",
|
||||||
|
"revision",
|
||||||
|
"url"
|
||||||
|
],
|
||||||
|
"type": "object",
|
||||||
|
"additionalProperties": false
|
||||||
|
},
|
||||||
|
"conditions": {
|
||||||
|
"description": "Conditions holds the conditions for the HelmRepository.",
|
||||||
|
"items": {
|
||||||
|
"description": "Condition contains details for one aspect of the current state of this API Resource.",
|
||||||
|
"properties": {
|
||||||
|
"lastTransitionTime": {
|
||||||
|
"description": "lastTransitionTime is the last time the condition transitioned from one status to another.\nThis should be when the underlying condition changed. If that is not known, then using the time when the API field changed is acceptable.",
|
||||||
|
"format": "date-time",
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"message": {
|
||||||
|
"description": "message is a human readable message indicating details about the transition.\nThis may be an empty string.",
|
||||||
|
"maxLength": 32768,
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"observedGeneration": {
|
||||||
|
"description": "observedGeneration represents the .metadata.generation that the condition was set based upon.\nFor instance, if .metadata.generation is currently 12, but the .status.conditions[x].observedGeneration is 9, the condition is out of date\nwith respect to the current state of the instance.",
|
||||||
|
"format": "int64",
|
||||||
|
"minimum": 0,
|
||||||
|
"type": "integer"
|
||||||
|
},
|
||||||
|
"reason": {
|
||||||
|
"description": "reason contains a programmatic identifier indicating the reason for the condition's last transition.\nProducers of specific condition types may define expected values and meanings for this field,\nand whether the values are considered a guaranteed API.\nThe value should be a CamelCase string.\nThis field may not be empty.",
|
||||||
|
"maxLength": 1024,
|
||||||
|
"minLength": 1,
|
||||||
|
"pattern": "^[A-Za-z]([A-Za-z0-9_,:]*[A-Za-z0-9_])?$",
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"status": {
|
||||||
|
"description": "status of the condition, one of True, False, Unknown.",
|
||||||
|
"enum": [
|
||||||
|
"True",
|
||||||
|
"False",
|
||||||
|
"Unknown"
|
||||||
|
],
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"type": {
|
||||||
|
"description": "type of condition in CamelCase or in foo.example.com/CamelCase.",
|
||||||
|
"maxLength": 316,
|
||||||
|
"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])$",
|
||||||
|
"type": "string"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"required": [
|
||||||
|
"lastTransitionTime",
|
||||||
|
"message",
|
||||||
|
"reason",
|
||||||
|
"status",
|
||||||
|
"type"
|
||||||
|
],
|
||||||
|
"type": "object",
|
||||||
|
"additionalProperties": false
|
||||||
|
},
|
||||||
|
"type": "array"
|
||||||
|
},
|
||||||
|
"lastHandledReconcileAt": {
|
||||||
|
"description": "LastHandledReconcileAt holds the value of the most recent\nreconcile request value, so a change of the annotation value\ncan be detected.",
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"observedGeneration": {
|
||||||
|
"description": "ObservedGeneration is the last observed generation of the HelmRepository\nobject.",
|
||||||
|
"format": "int64",
|
||||||
|
"type": "integer"
|
||||||
|
},
|
||||||
|
"url": {
|
||||||
|
"description": "URL is the dynamic fetch link for the latest Artifact.\nIt is provided on a \"best effort\" basis, and using the precise\nHelmRepositoryStatus.Artifact data is recommended.",
|
||||||
|
"type": "string"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"type": "object",
|
||||||
|
"additionalProperties": false
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"type": "object"
|
||||||
|
}
|
||||||
@@ -0,0 +1,262 @@
|
|||||||
|
{
|
||||||
|
"description": "ImagePolicy is the Schema for the imagepolicies API",
|
||||||
|
"properties": {
|
||||||
|
"apiVersion": {
|
||||||
|
"description": "APIVersion defines the versioned schema of this representation of an object.\nServers should convert recognized schemas to the latest internal value, and\nmay reject unrecognized values.\nMore info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources",
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"kind": {
|
||||||
|
"description": "Kind is a string value representing the REST resource this object represents.\nServers may infer this from the endpoint the client submits requests to.\nCannot be updated.\nIn CamelCase.\nMore info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds",
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"metadata": {
|
||||||
|
"type": "object"
|
||||||
|
},
|
||||||
|
"spec": {
|
||||||
|
"description": "ImagePolicySpec defines the parameters for calculating the\nImagePolicy.",
|
||||||
|
"properties": {
|
||||||
|
"digestReflectionPolicy": {
|
||||||
|
"default": "Never",
|
||||||
|
"description": "DigestReflectionPolicy governs the setting of the `.status.latestRef.digest` field.\n\nNever: The digest field will always be set to the empty string.\n\nIfNotPresent: The digest field will be set to the digest of the elected\nlatest image if the field is empty and the image did not change.\n\nAlways: The digest field will always be set to the digest of the elected\nlatest image.\n\nDefault: Never.",
|
||||||
|
"enum": [
|
||||||
|
"Always",
|
||||||
|
"IfNotPresent",
|
||||||
|
"Never"
|
||||||
|
],
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"filterTags": {
|
||||||
|
"description": "FilterTags enables filtering for only a subset of tags based on a set of\nrules. If no rules are provided, all the tags from the repository will be\nordered and compared.",
|
||||||
|
"properties": {
|
||||||
|
"extract": {
|
||||||
|
"description": "Extract allows a capture group to be extracted from the specified regular\nexpression pattern, useful before tag evaluation.",
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"pattern": {
|
||||||
|
"description": "Pattern specifies a regular expression pattern used to filter for image\ntags.",
|
||||||
|
"type": "string"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"type": "object",
|
||||||
|
"additionalProperties": false
|
||||||
|
},
|
||||||
|
"imageRepositoryRef": {
|
||||||
|
"description": "ImageRepositoryRef points at the object specifying the image\nbeing scanned",
|
||||||
|
"properties": {
|
||||||
|
"name": {
|
||||||
|
"description": "Name of the referent.",
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"namespace": {
|
||||||
|
"description": "Namespace of the referent, when not specified it acts as LocalObjectReference.",
|
||||||
|
"type": "string"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"required": [
|
||||||
|
"name"
|
||||||
|
],
|
||||||
|
"type": "object",
|
||||||
|
"additionalProperties": false
|
||||||
|
},
|
||||||
|
"interval": {
|
||||||
|
"description": "Interval is the length of time to wait between\nrefreshing the digest of the latest tag when the\nreflection policy is set to \"Always\".\n\nDefaults to 10m.",
|
||||||
|
"pattern": "^([0-9]+(\\.[0-9]+)?(ms|s|m|h))+$",
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"policy": {
|
||||||
|
"description": "Policy gives the particulars of the policy to be followed in\nselecting the most recent image",
|
||||||
|
"properties": {
|
||||||
|
"alphabetical": {
|
||||||
|
"description": "Alphabetical set of rules to use for alphabetical ordering of the tags.",
|
||||||
|
"properties": {
|
||||||
|
"order": {
|
||||||
|
"default": "asc",
|
||||||
|
"description": "Order specifies the sorting order of the tags. Given the letters of the\nalphabet as tags, ascending order would select Z, and descending order\nwould select A.",
|
||||||
|
"enum": [
|
||||||
|
"asc",
|
||||||
|
"desc"
|
||||||
|
],
|
||||||
|
"type": "string"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"type": "object",
|
||||||
|
"additionalProperties": false
|
||||||
|
},
|
||||||
|
"numerical": {
|
||||||
|
"description": "Numerical set of rules to use for numerical ordering of the tags.",
|
||||||
|
"properties": {
|
||||||
|
"order": {
|
||||||
|
"default": "asc",
|
||||||
|
"description": "Order specifies the sorting order of the tags. Given the integer values\nfrom 0 to 9 as tags, ascending order would select 9, and descending order\nwould select 0.",
|
||||||
|
"enum": [
|
||||||
|
"asc",
|
||||||
|
"desc"
|
||||||
|
],
|
||||||
|
"type": "string"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"type": "object",
|
||||||
|
"additionalProperties": false
|
||||||
|
},
|
||||||
|
"semver": {
|
||||||
|
"description": "SemVer gives a semantic version range to check against the tags\navailable.",
|
||||||
|
"properties": {
|
||||||
|
"range": {
|
||||||
|
"description": "Range gives a semver range for the image tag; the highest\nversion within the range that's a tag yields the latest image.",
|
||||||
|
"type": "string"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"required": [
|
||||||
|
"range"
|
||||||
|
],
|
||||||
|
"type": "object",
|
||||||
|
"additionalProperties": false
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"type": "object",
|
||||||
|
"additionalProperties": false
|
||||||
|
},
|
||||||
|
"suspend": {
|
||||||
|
"description": "This flag tells the controller to suspend subsequent policy reconciliations.\nIt does not apply to already started reconciliations. Defaults to false.",
|
||||||
|
"type": "boolean"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"required": [
|
||||||
|
"imageRepositoryRef",
|
||||||
|
"policy"
|
||||||
|
],
|
||||||
|
"type": "object",
|
||||||
|
"x-kubernetes-validations": [
|
||||||
|
{
|
||||||
|
"message": "spec.interval is only accepted when spec.digestReflectionPolicy is set to 'Always'",
|
||||||
|
"rule": "!has(self.interval) || (has(self.digestReflectionPolicy) && self.digestReflectionPolicy == 'Always')"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"message": "spec.interval must be set when spec.digestReflectionPolicy is set to 'Always'",
|
||||||
|
"rule": "has(self.interval) || !has(self.digestReflectionPolicy) || self.digestReflectionPolicy != 'Always'"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"additionalProperties": false
|
||||||
|
},
|
||||||
|
"status": {
|
||||||
|
"default": {
|
||||||
|
"observedGeneration": -1
|
||||||
|
},
|
||||||
|
"description": "ImagePolicyStatus defines the observed state of ImagePolicy",
|
||||||
|
"properties": {
|
||||||
|
"conditions": {
|
||||||
|
"items": {
|
||||||
|
"description": "Condition contains details for one aspect of the current state of this API Resource.",
|
||||||
|
"properties": {
|
||||||
|
"lastTransitionTime": {
|
||||||
|
"description": "lastTransitionTime is the last time the condition transitioned from one status to another.\nThis should be when the underlying condition changed. If that is not known, then using the time when the API field changed is acceptable.",
|
||||||
|
"format": "date-time",
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"message": {
|
||||||
|
"description": "message is a human readable message indicating details about the transition.\nThis may be an empty string.",
|
||||||
|
"maxLength": 32768,
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"observedGeneration": {
|
||||||
|
"description": "observedGeneration represents the .metadata.generation that the condition was set based upon.\nFor instance, if .metadata.generation is currently 12, but the .status.conditions[x].observedGeneration is 9, the condition is out of date\nwith respect to the current state of the instance.",
|
||||||
|
"format": "int64",
|
||||||
|
"minimum": 0,
|
||||||
|
"type": "integer"
|
||||||
|
},
|
||||||
|
"reason": {
|
||||||
|
"description": "reason contains a programmatic identifier indicating the reason for the condition's last transition.\nProducers of specific condition types may define expected values and meanings for this field,\nand whether the values are considered a guaranteed API.\nThe value should be a CamelCase string.\nThis field may not be empty.",
|
||||||
|
"maxLength": 1024,
|
||||||
|
"minLength": 1,
|
||||||
|
"pattern": "^[A-Za-z]([A-Za-z0-9_,:]*[A-Za-z0-9_])?$",
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"status": {
|
||||||
|
"description": "status of the condition, one of True, False, Unknown.",
|
||||||
|
"enum": [
|
||||||
|
"True",
|
||||||
|
"False",
|
||||||
|
"Unknown"
|
||||||
|
],
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"type": {
|
||||||
|
"description": "type of condition in CamelCase or in foo.example.com/CamelCase.",
|
||||||
|
"maxLength": 316,
|
||||||
|
"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])$",
|
||||||
|
"type": "string"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"required": [
|
||||||
|
"lastTransitionTime",
|
||||||
|
"message",
|
||||||
|
"reason",
|
||||||
|
"status",
|
||||||
|
"type"
|
||||||
|
],
|
||||||
|
"type": "object",
|
||||||
|
"additionalProperties": false
|
||||||
|
},
|
||||||
|
"type": "array"
|
||||||
|
},
|
||||||
|
"lastHandledReconcileAt": {
|
||||||
|
"description": "LastHandledReconcileAt holds the value of the most recent\nreconcile request value, so a change of the annotation value\ncan be detected.",
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"latestRef": {
|
||||||
|
"description": "LatestRef gives the first in the list of images scanned by\nthe image repository, when filtered and ordered according\nto the policy.",
|
||||||
|
"properties": {
|
||||||
|
"digest": {
|
||||||
|
"description": "Digest is the image's digest.",
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"name": {
|
||||||
|
"description": "Name is the bare image's name.",
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"tag": {
|
||||||
|
"description": "Tag is the image's tag.",
|
||||||
|
"type": "string"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"required": [
|
||||||
|
"name",
|
||||||
|
"tag"
|
||||||
|
],
|
||||||
|
"type": "object",
|
||||||
|
"additionalProperties": false
|
||||||
|
},
|
||||||
|
"observedGeneration": {
|
||||||
|
"format": "int64",
|
||||||
|
"type": "integer"
|
||||||
|
},
|
||||||
|
"observedPreviousRef": {
|
||||||
|
"description": "ObservedPreviousRef is the observed previous LatestRef. It is used\nto keep track of the previous and current images.",
|
||||||
|
"properties": {
|
||||||
|
"digest": {
|
||||||
|
"description": "Digest is the image's digest.",
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"name": {
|
||||||
|
"description": "Name is the bare image's name.",
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"tag": {
|
||||||
|
"description": "Tag is the image's tag.",
|
||||||
|
"type": "string"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"required": [
|
||||||
|
"name",
|
||||||
|
"tag"
|
||||||
|
],
|
||||||
|
"type": "object",
|
||||||
|
"additionalProperties": false
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"type": "object",
|
||||||
|
"additionalProperties": false
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"type": "object"
|
||||||
|
}
|
||||||
@@ -0,0 +1,262 @@
|
|||||||
|
{
|
||||||
|
"description": "ImagePolicy is the Schema for the imagepolicies API",
|
||||||
|
"properties": {
|
||||||
|
"apiVersion": {
|
||||||
|
"description": "APIVersion defines the versioned schema of this representation of an object.\nServers should convert recognized schemas to the latest internal value, and\nmay reject unrecognized values.\nMore info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources",
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"kind": {
|
||||||
|
"description": "Kind is a string value representing the REST resource this object represents.\nServers may infer this from the endpoint the client submits requests to.\nCannot be updated.\nIn CamelCase.\nMore info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds",
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"metadata": {
|
||||||
|
"type": "object"
|
||||||
|
},
|
||||||
|
"spec": {
|
||||||
|
"description": "ImagePolicySpec defines the parameters for calculating the\nImagePolicy.",
|
||||||
|
"properties": {
|
||||||
|
"digestReflectionPolicy": {
|
||||||
|
"default": "Never",
|
||||||
|
"description": "DigestReflectionPolicy governs the setting of the `.status.latestRef.digest` field.\n\nNever: The digest field will always be set to the empty string.\n\nIfNotPresent: The digest field will be set to the digest of the elected\nlatest image if the field is empty and the image did not change.\n\nAlways: The digest field will always be set to the digest of the elected\nlatest image.\n\nDefault: Never.",
|
||||||
|
"enum": [
|
||||||
|
"Always",
|
||||||
|
"IfNotPresent",
|
||||||
|
"Never"
|
||||||
|
],
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"filterTags": {
|
||||||
|
"description": "FilterTags enables filtering for only a subset of tags based on a set of\nrules. If no rules are provided, all the tags from the repository will be\nordered and compared.",
|
||||||
|
"properties": {
|
||||||
|
"extract": {
|
||||||
|
"description": "Extract allows a capture group to be extracted from the specified regular\nexpression pattern, useful before tag evaluation.",
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"pattern": {
|
||||||
|
"description": "Pattern specifies a regular expression pattern used to filter for image\ntags.",
|
||||||
|
"type": "string"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"type": "object",
|
||||||
|
"additionalProperties": false
|
||||||
|
},
|
||||||
|
"imageRepositoryRef": {
|
||||||
|
"description": "ImageRepositoryRef points at the object specifying the image\nbeing scanned",
|
||||||
|
"properties": {
|
||||||
|
"name": {
|
||||||
|
"description": "Name of the referent.",
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"namespace": {
|
||||||
|
"description": "Namespace of the referent, when not specified it acts as LocalObjectReference.",
|
||||||
|
"type": "string"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"required": [
|
||||||
|
"name"
|
||||||
|
],
|
||||||
|
"type": "object",
|
||||||
|
"additionalProperties": false
|
||||||
|
},
|
||||||
|
"interval": {
|
||||||
|
"description": "Interval is the length of time to wait between\nrefreshing the digest of the latest tag when the\nreflection policy is set to \"Always\".\n\nDefaults to 10m.",
|
||||||
|
"pattern": "^([0-9]+(\\.[0-9]+)?(ms|s|m|h))+$",
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"policy": {
|
||||||
|
"description": "Policy gives the particulars of the policy to be followed in\nselecting the most recent image",
|
||||||
|
"properties": {
|
||||||
|
"alphabetical": {
|
||||||
|
"description": "Alphabetical set of rules to use for alphabetical ordering of the tags.",
|
||||||
|
"properties": {
|
||||||
|
"order": {
|
||||||
|
"default": "asc",
|
||||||
|
"description": "Order specifies the sorting order of the tags. Given the letters of the\nalphabet as tags, ascending order would select Z, and descending order\nwould select A.",
|
||||||
|
"enum": [
|
||||||
|
"asc",
|
||||||
|
"desc"
|
||||||
|
],
|
||||||
|
"type": "string"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"type": "object",
|
||||||
|
"additionalProperties": false
|
||||||
|
},
|
||||||
|
"numerical": {
|
||||||
|
"description": "Numerical set of rules to use for numerical ordering of the tags.",
|
||||||
|
"properties": {
|
||||||
|
"order": {
|
||||||
|
"default": "asc",
|
||||||
|
"description": "Order specifies the sorting order of the tags. Given the integer values\nfrom 0 to 9 as tags, ascending order would select 9, and descending order\nwould select 0.",
|
||||||
|
"enum": [
|
||||||
|
"asc",
|
||||||
|
"desc"
|
||||||
|
],
|
||||||
|
"type": "string"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"type": "object",
|
||||||
|
"additionalProperties": false
|
||||||
|
},
|
||||||
|
"semver": {
|
||||||
|
"description": "SemVer gives a semantic version range to check against the tags\navailable.",
|
||||||
|
"properties": {
|
||||||
|
"range": {
|
||||||
|
"description": "Range gives a semver range for the image tag; the highest\nversion within the range that's a tag yields the latest image.",
|
||||||
|
"type": "string"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"required": [
|
||||||
|
"range"
|
||||||
|
],
|
||||||
|
"type": "object",
|
||||||
|
"additionalProperties": false
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"type": "object",
|
||||||
|
"additionalProperties": false
|
||||||
|
},
|
||||||
|
"suspend": {
|
||||||
|
"description": "This flag tells the controller to suspend subsequent policy reconciliations.\nIt does not apply to already started reconciliations. Defaults to false.",
|
||||||
|
"type": "boolean"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"required": [
|
||||||
|
"imageRepositoryRef",
|
||||||
|
"policy"
|
||||||
|
],
|
||||||
|
"type": "object",
|
||||||
|
"x-kubernetes-validations": [
|
||||||
|
{
|
||||||
|
"message": "spec.interval is only accepted when spec.digestReflectionPolicy is set to 'Always'",
|
||||||
|
"rule": "!has(self.interval) || (has(self.digestReflectionPolicy) && self.digestReflectionPolicy == 'Always')"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"message": "spec.interval must be set when spec.digestReflectionPolicy is set to 'Always'",
|
||||||
|
"rule": "has(self.interval) || !has(self.digestReflectionPolicy) || self.digestReflectionPolicy != 'Always'"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"additionalProperties": false
|
||||||
|
},
|
||||||
|
"status": {
|
||||||
|
"default": {
|
||||||
|
"observedGeneration": -1
|
||||||
|
},
|
||||||
|
"description": "ImagePolicyStatus defines the observed state of ImagePolicy",
|
||||||
|
"properties": {
|
||||||
|
"conditions": {
|
||||||
|
"items": {
|
||||||
|
"description": "Condition contains details for one aspect of the current state of this API Resource.",
|
||||||
|
"properties": {
|
||||||
|
"lastTransitionTime": {
|
||||||
|
"description": "lastTransitionTime is the last time the condition transitioned from one status to another.\nThis should be when the underlying condition changed. If that is not known, then using the time when the API field changed is acceptable.",
|
||||||
|
"format": "date-time",
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"message": {
|
||||||
|
"description": "message is a human readable message indicating details about the transition.\nThis may be an empty string.",
|
||||||
|
"maxLength": 32768,
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"observedGeneration": {
|
||||||
|
"description": "observedGeneration represents the .metadata.generation that the condition was set based upon.\nFor instance, if .metadata.generation is currently 12, but the .status.conditions[x].observedGeneration is 9, the condition is out of date\nwith respect to the current state of the instance.",
|
||||||
|
"format": "int64",
|
||||||
|
"minimum": 0,
|
||||||
|
"type": "integer"
|
||||||
|
},
|
||||||
|
"reason": {
|
||||||
|
"description": "reason contains a programmatic identifier indicating the reason for the condition's last transition.\nProducers of specific condition types may define expected values and meanings for this field,\nand whether the values are considered a guaranteed API.\nThe value should be a CamelCase string.\nThis field may not be empty.",
|
||||||
|
"maxLength": 1024,
|
||||||
|
"minLength": 1,
|
||||||
|
"pattern": "^[A-Za-z]([A-Za-z0-9_,:]*[A-Za-z0-9_])?$",
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"status": {
|
||||||
|
"description": "status of the condition, one of True, False, Unknown.",
|
||||||
|
"enum": [
|
||||||
|
"True",
|
||||||
|
"False",
|
||||||
|
"Unknown"
|
||||||
|
],
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"type": {
|
||||||
|
"description": "type of condition in CamelCase or in foo.example.com/CamelCase.",
|
||||||
|
"maxLength": 316,
|
||||||
|
"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])$",
|
||||||
|
"type": "string"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"required": [
|
||||||
|
"lastTransitionTime",
|
||||||
|
"message",
|
||||||
|
"reason",
|
||||||
|
"status",
|
||||||
|
"type"
|
||||||
|
],
|
||||||
|
"type": "object",
|
||||||
|
"additionalProperties": false
|
||||||
|
},
|
||||||
|
"type": "array"
|
||||||
|
},
|
||||||
|
"lastHandledReconcileAt": {
|
||||||
|
"description": "LastHandledReconcileAt holds the value of the most recent\nreconcile request value, so a change of the annotation value\ncan be detected.",
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"latestRef": {
|
||||||
|
"description": "LatestRef gives the first in the list of images scanned by\nthe image repository, when filtered and ordered according\nto the policy.",
|
||||||
|
"properties": {
|
||||||
|
"digest": {
|
||||||
|
"description": "Digest is the image's digest.",
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"name": {
|
||||||
|
"description": "Name is the bare image's name.",
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"tag": {
|
||||||
|
"description": "Tag is the image's tag.",
|
||||||
|
"type": "string"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"required": [
|
||||||
|
"name",
|
||||||
|
"tag"
|
||||||
|
],
|
||||||
|
"type": "object",
|
||||||
|
"additionalProperties": false
|
||||||
|
},
|
||||||
|
"observedGeneration": {
|
||||||
|
"format": "int64",
|
||||||
|
"type": "integer"
|
||||||
|
},
|
||||||
|
"observedPreviousRef": {
|
||||||
|
"description": "ObservedPreviousRef is the observed previous LatestRef. It is used\nto keep track of the previous and current images.",
|
||||||
|
"properties": {
|
||||||
|
"digest": {
|
||||||
|
"description": "Digest is the image's digest.",
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"name": {
|
||||||
|
"description": "Name is the bare image's name.",
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"tag": {
|
||||||
|
"description": "Tag is the image's tag.",
|
||||||
|
"type": "string"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"required": [
|
||||||
|
"name",
|
||||||
|
"tag"
|
||||||
|
],
|
||||||
|
"type": "object",
|
||||||
|
"additionalProperties": false
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"type": "object",
|
||||||
|
"additionalProperties": false
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"type": "object"
|
||||||
|
}
|
||||||
@@ -0,0 +1,262 @@
|
|||||||
|
{
|
||||||
|
"description": "ImageRepository is the Schema for the imagerepositories API",
|
||||||
|
"properties": {
|
||||||
|
"apiVersion": {
|
||||||
|
"description": "APIVersion defines the versioned schema of this representation of an object.\nServers should convert recognized schemas to the latest internal value, and\nmay reject unrecognized values.\nMore info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources",
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"kind": {
|
||||||
|
"description": "Kind is a string value representing the REST resource this object represents.\nServers may infer this from the endpoint the client submits requests to.\nCannot be updated.\nIn CamelCase.\nMore info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds",
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"metadata": {
|
||||||
|
"type": "object"
|
||||||
|
},
|
||||||
|
"spec": {
|
||||||
|
"description": "ImageRepositorySpec defines the parameters for scanning an image\nrepository, e.g., `fluxcd/flux`.",
|
||||||
|
"properties": {
|
||||||
|
"accessFrom": {
|
||||||
|
"description": "AccessFrom defines an ACL for allowing cross-namespace references\nto the ImageRepository object based on the caller's namespace labels.",
|
||||||
|
"properties": {
|
||||||
|
"namespaceSelectors": {
|
||||||
|
"description": "NamespaceSelectors is the list of namespace selectors to which this ACL applies.\nItems in this list are evaluated using a logical OR operation.",
|
||||||
|
"items": {
|
||||||
|
"description": "NamespaceSelector selects the namespaces to which this ACL applies.\nAn empty map of MatchLabels matches all namespaces in a cluster.",
|
||||||
|
"properties": {
|
||||||
|
"matchLabels": {
|
||||||
|
"additionalProperties": {
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"description": "MatchLabels is a map of {key,value} pairs. A single {key,value} in the matchLabels\nmap is equivalent to an element of matchExpressions, whose key field is \"key\", the\noperator is \"In\", and the values array contains only \"value\". The requirements are ANDed.",
|
||||||
|
"type": "object"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"type": "object",
|
||||||
|
"additionalProperties": false
|
||||||
|
},
|
||||||
|
"type": "array"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"required": [
|
||||||
|
"namespaceSelectors"
|
||||||
|
],
|
||||||
|
"type": "object",
|
||||||
|
"additionalProperties": false
|
||||||
|
},
|
||||||
|
"certSecretRef": {
|
||||||
|
"description": "CertSecretRef can be given the name of a Secret containing\neither or both of\n\n- a PEM-encoded client certificate (`tls.crt`) and private\nkey (`tls.key`);\n- a PEM-encoded CA certificate (`ca.crt`)\n\nand whichever are supplied, will be used for connecting to the\nregistry. The client cert and key are useful if you are\nauthenticating with a certificate; the CA cert is useful if\nyou are using a self-signed server certificate. The Secret must\nbe of type `Opaque` or `kubernetes.io/tls`.\n\nNote: Support for the `caFile`, `certFile` and `keyFile` keys has\nbeen deprecated.",
|
||||||
|
"properties": {
|
||||||
|
"name": {
|
||||||
|
"description": "Name of the referent.",
|
||||||
|
"type": "string"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"required": [
|
||||||
|
"name"
|
||||||
|
],
|
||||||
|
"type": "object",
|
||||||
|
"additionalProperties": false
|
||||||
|
},
|
||||||
|
"exclusionList": {
|
||||||
|
"default": [
|
||||||
|
"^.*\\.sig$"
|
||||||
|
],
|
||||||
|
"description": "ExclusionList is a list of regex strings used to exclude certain tags\nfrom being stored in the database.",
|
||||||
|
"items": {
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"maxItems": 25,
|
||||||
|
"type": "array"
|
||||||
|
},
|
||||||
|
"image": {
|
||||||
|
"description": "Image is the name of the image repository",
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"insecure": {
|
||||||
|
"description": "Insecure allows connecting to a non-TLS HTTP container registry.",
|
||||||
|
"type": "boolean"
|
||||||
|
},
|
||||||
|
"interval": {
|
||||||
|
"description": "Interval is the length of time to wait between\nscans of the image repository.",
|
||||||
|
"pattern": "^([0-9]+(\\.[0-9]+)?(ms|s|m|h))+$",
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"provider": {
|
||||||
|
"default": "generic",
|
||||||
|
"description": "The provider used for authentication, can be 'aws', 'azure', 'gcp' or 'generic'.\nWhen not specified, defaults to 'generic'.",
|
||||||
|
"enum": [
|
||||||
|
"generic",
|
||||||
|
"aws",
|
||||||
|
"azure",
|
||||||
|
"gcp"
|
||||||
|
],
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"proxySecretRef": {
|
||||||
|
"description": "ProxySecretRef specifies the Secret containing the proxy configuration\nto use while communicating with the container registry.",
|
||||||
|
"properties": {
|
||||||
|
"name": {
|
||||||
|
"description": "Name of the referent.",
|
||||||
|
"type": "string"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"required": [
|
||||||
|
"name"
|
||||||
|
],
|
||||||
|
"type": "object",
|
||||||
|
"additionalProperties": false
|
||||||
|
},
|
||||||
|
"secretRef": {
|
||||||
|
"description": "SecretRef can be given the name of a secret containing\ncredentials to use for the image registry. The secret should be\ncreated with `kubectl create secret docker-registry`, or the\nequivalent.",
|
||||||
|
"properties": {
|
||||||
|
"name": {
|
||||||
|
"description": "Name of the referent.",
|
||||||
|
"type": "string"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"required": [
|
||||||
|
"name"
|
||||||
|
],
|
||||||
|
"type": "object",
|
||||||
|
"additionalProperties": false
|
||||||
|
},
|
||||||
|
"serviceAccountName": {
|
||||||
|
"description": "ServiceAccountName is the name of the Kubernetes ServiceAccount used to authenticate\nthe image pull if the service account has attached pull secrets.",
|
||||||
|
"maxLength": 253,
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"suspend": {
|
||||||
|
"description": "This flag tells the controller to suspend subsequent image scans.\nIt does not apply to already started scans. Defaults to false.",
|
||||||
|
"type": "boolean"
|
||||||
|
},
|
||||||
|
"timeout": {
|
||||||
|
"description": "Timeout for image scanning.\nDefaults to 'Interval' duration.",
|
||||||
|
"pattern": "^([0-9]+(\\.[0-9]+)?(ms|s|m))+$",
|
||||||
|
"type": "string"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"required": [
|
||||||
|
"image",
|
||||||
|
"interval"
|
||||||
|
],
|
||||||
|
"type": "object",
|
||||||
|
"additionalProperties": false
|
||||||
|
},
|
||||||
|
"status": {
|
||||||
|
"default": {
|
||||||
|
"observedGeneration": -1
|
||||||
|
},
|
||||||
|
"description": "ImageRepositoryStatus defines the observed state of ImageRepository",
|
||||||
|
"properties": {
|
||||||
|
"canonicalImageName": {
|
||||||
|
"description": "CanonicalName is the name of the image repository with all the\nimplied bits made explicit; e.g., `docker.io/library/alpine`\nrather than `alpine`.",
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"conditions": {
|
||||||
|
"items": {
|
||||||
|
"description": "Condition contains details for one aspect of the current state of this API Resource.",
|
||||||
|
"properties": {
|
||||||
|
"lastTransitionTime": {
|
||||||
|
"description": "lastTransitionTime is the last time the condition transitioned from one status to another.\nThis should be when the underlying condition changed. If that is not known, then using the time when the API field changed is acceptable.",
|
||||||
|
"format": "date-time",
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"message": {
|
||||||
|
"description": "message is a human readable message indicating details about the transition.\nThis may be an empty string.",
|
||||||
|
"maxLength": 32768,
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"observedGeneration": {
|
||||||
|
"description": "observedGeneration represents the .metadata.generation that the condition was set based upon.\nFor instance, if .metadata.generation is currently 12, but the .status.conditions[x].observedGeneration is 9, the condition is out of date\nwith respect to the current state of the instance.",
|
||||||
|
"format": "int64",
|
||||||
|
"minimum": 0,
|
||||||
|
"type": "integer"
|
||||||
|
},
|
||||||
|
"reason": {
|
||||||
|
"description": "reason contains a programmatic identifier indicating the reason for the condition's last transition.\nProducers of specific condition types may define expected values and meanings for this field,\nand whether the values are considered a guaranteed API.\nThe value should be a CamelCase string.\nThis field may not be empty.",
|
||||||
|
"maxLength": 1024,
|
||||||
|
"minLength": 1,
|
||||||
|
"pattern": "^[A-Za-z]([A-Za-z0-9_,:]*[A-Za-z0-9_])?$",
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"status": {
|
||||||
|
"description": "status of the condition, one of True, False, Unknown.",
|
||||||
|
"enum": [
|
||||||
|
"True",
|
||||||
|
"False",
|
||||||
|
"Unknown"
|
||||||
|
],
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"type": {
|
||||||
|
"description": "type of condition in CamelCase or in foo.example.com/CamelCase.",
|
||||||
|
"maxLength": 316,
|
||||||
|
"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])$",
|
||||||
|
"type": "string"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"required": [
|
||||||
|
"lastTransitionTime",
|
||||||
|
"message",
|
||||||
|
"reason",
|
||||||
|
"status",
|
||||||
|
"type"
|
||||||
|
],
|
||||||
|
"type": "object",
|
||||||
|
"additionalProperties": false
|
||||||
|
},
|
||||||
|
"type": "array"
|
||||||
|
},
|
||||||
|
"lastHandledReconcileAt": {
|
||||||
|
"description": "LastHandledReconcileAt holds the value of the most recent\nreconcile request value, so a change of the annotation value\ncan be detected.",
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"lastScanResult": {
|
||||||
|
"description": "LastScanResult contains the number of fetched tags.",
|
||||||
|
"properties": {
|
||||||
|
"latestTags": {
|
||||||
|
"description": "LatestTags is a small sample of the tags found in the last scan.\nIt's the first 10 tags when sorting all the tags in descending\nalphabetical order.",
|
||||||
|
"items": {
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"type": "array"
|
||||||
|
},
|
||||||
|
"revision": {
|
||||||
|
"description": "Revision is a stable hash of the scanned tags.",
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"scanTime": {
|
||||||
|
"description": "ScanTime is the time when the last scan was performed.",
|
||||||
|
"format": "date-time",
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"tagCount": {
|
||||||
|
"description": "TagCount is the number of tags found in the last scan.",
|
||||||
|
"type": "integer"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"required": [
|
||||||
|
"tagCount"
|
||||||
|
],
|
||||||
|
"type": "object",
|
||||||
|
"additionalProperties": false
|
||||||
|
},
|
||||||
|
"observedExclusionList": {
|
||||||
|
"description": "ObservedExclusionList is a list of observed exclusion list. It reflects\nthe exclusion rules used for the observed scan result in\nspec.lastScanResult.",
|
||||||
|
"items": {
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"type": "array"
|
||||||
|
},
|
||||||
|
"observedGeneration": {
|
||||||
|
"description": "ObservedGeneration is the last reconciled generation.",
|
||||||
|
"format": "int64",
|
||||||
|
"type": "integer"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"type": "object",
|
||||||
|
"additionalProperties": false
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"type": "object"
|
||||||
|
}
|
||||||
@@ -0,0 +1,262 @@
|
|||||||
|
{
|
||||||
|
"description": "ImageRepository is the Schema for the imagerepositories API",
|
||||||
|
"properties": {
|
||||||
|
"apiVersion": {
|
||||||
|
"description": "APIVersion defines the versioned schema of this representation of an object.\nServers should convert recognized schemas to the latest internal value, and\nmay reject unrecognized values.\nMore info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources",
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"kind": {
|
||||||
|
"description": "Kind is a string value representing the REST resource this object represents.\nServers may infer this from the endpoint the client submits requests to.\nCannot be updated.\nIn CamelCase.\nMore info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds",
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"metadata": {
|
||||||
|
"type": "object"
|
||||||
|
},
|
||||||
|
"spec": {
|
||||||
|
"description": "ImageRepositorySpec defines the parameters for scanning an image\nrepository, e.g., `fluxcd/flux`.",
|
||||||
|
"properties": {
|
||||||
|
"accessFrom": {
|
||||||
|
"description": "AccessFrom defines an ACL for allowing cross-namespace references\nto the ImageRepository object based on the caller's namespace labels.",
|
||||||
|
"properties": {
|
||||||
|
"namespaceSelectors": {
|
||||||
|
"description": "NamespaceSelectors is the list of namespace selectors to which this ACL applies.\nItems in this list are evaluated using a logical OR operation.",
|
||||||
|
"items": {
|
||||||
|
"description": "NamespaceSelector selects the namespaces to which this ACL applies.\nAn empty map of MatchLabels matches all namespaces in a cluster.",
|
||||||
|
"properties": {
|
||||||
|
"matchLabels": {
|
||||||
|
"additionalProperties": {
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"description": "MatchLabels is a map of {key,value} pairs. A single {key,value} in the matchLabels\nmap is equivalent to an element of matchExpressions, whose key field is \"key\", the\noperator is \"In\", and the values array contains only \"value\". The requirements are ANDed.",
|
||||||
|
"type": "object"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"type": "object",
|
||||||
|
"additionalProperties": false
|
||||||
|
},
|
||||||
|
"type": "array"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"required": [
|
||||||
|
"namespaceSelectors"
|
||||||
|
],
|
||||||
|
"type": "object",
|
||||||
|
"additionalProperties": false
|
||||||
|
},
|
||||||
|
"certSecretRef": {
|
||||||
|
"description": "CertSecretRef can be given the name of a Secret containing\neither or both of\n\n- a PEM-encoded client certificate (`tls.crt`) and private\nkey (`tls.key`);\n- a PEM-encoded CA certificate (`ca.crt`)\n\nand whichever are supplied, will be used for connecting to the\nregistry. The client cert and key are useful if you are\nauthenticating with a certificate; the CA cert is useful if\nyou are using a self-signed server certificate. The Secret must\nbe of type `Opaque` or `kubernetes.io/tls`.\n\nNote: Support for the `caFile`, `certFile` and `keyFile` keys has\nbeen deprecated.",
|
||||||
|
"properties": {
|
||||||
|
"name": {
|
||||||
|
"description": "Name of the referent.",
|
||||||
|
"type": "string"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"required": [
|
||||||
|
"name"
|
||||||
|
],
|
||||||
|
"type": "object",
|
||||||
|
"additionalProperties": false
|
||||||
|
},
|
||||||
|
"exclusionList": {
|
||||||
|
"default": [
|
||||||
|
"^.*\\.sig$"
|
||||||
|
],
|
||||||
|
"description": "ExclusionList is a list of regex strings used to exclude certain tags\nfrom being stored in the database.",
|
||||||
|
"items": {
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"maxItems": 25,
|
||||||
|
"type": "array"
|
||||||
|
},
|
||||||
|
"image": {
|
||||||
|
"description": "Image is the name of the image repository",
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"insecure": {
|
||||||
|
"description": "Insecure allows connecting to a non-TLS HTTP container registry.",
|
||||||
|
"type": "boolean"
|
||||||
|
},
|
||||||
|
"interval": {
|
||||||
|
"description": "Interval is the length of time to wait between\nscans of the image repository.",
|
||||||
|
"pattern": "^([0-9]+(\\.[0-9]+)?(ms|s|m|h))+$",
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"provider": {
|
||||||
|
"default": "generic",
|
||||||
|
"description": "The provider used for authentication, can be 'aws', 'azure', 'gcp' or 'generic'.\nWhen not specified, defaults to 'generic'.",
|
||||||
|
"enum": [
|
||||||
|
"generic",
|
||||||
|
"aws",
|
||||||
|
"azure",
|
||||||
|
"gcp"
|
||||||
|
],
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"proxySecretRef": {
|
||||||
|
"description": "ProxySecretRef specifies the Secret containing the proxy configuration\nto use while communicating with the container registry.",
|
||||||
|
"properties": {
|
||||||
|
"name": {
|
||||||
|
"description": "Name of the referent.",
|
||||||
|
"type": "string"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"required": [
|
||||||
|
"name"
|
||||||
|
],
|
||||||
|
"type": "object",
|
||||||
|
"additionalProperties": false
|
||||||
|
},
|
||||||
|
"secretRef": {
|
||||||
|
"description": "SecretRef can be given the name of a secret containing\ncredentials to use for the image registry. The secret should be\ncreated with `kubectl create secret docker-registry`, or the\nequivalent.",
|
||||||
|
"properties": {
|
||||||
|
"name": {
|
||||||
|
"description": "Name of the referent.",
|
||||||
|
"type": "string"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"required": [
|
||||||
|
"name"
|
||||||
|
],
|
||||||
|
"type": "object",
|
||||||
|
"additionalProperties": false
|
||||||
|
},
|
||||||
|
"serviceAccountName": {
|
||||||
|
"description": "ServiceAccountName is the name of the Kubernetes ServiceAccount used to authenticate\nthe image pull if the service account has attached pull secrets.",
|
||||||
|
"maxLength": 253,
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"suspend": {
|
||||||
|
"description": "This flag tells the controller to suspend subsequent image scans.\nIt does not apply to already started scans. Defaults to false.",
|
||||||
|
"type": "boolean"
|
||||||
|
},
|
||||||
|
"timeout": {
|
||||||
|
"description": "Timeout for image scanning.\nDefaults to 'Interval' duration.",
|
||||||
|
"pattern": "^([0-9]+(\\.[0-9]+)?(ms|s|m))+$",
|
||||||
|
"type": "string"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"required": [
|
||||||
|
"image",
|
||||||
|
"interval"
|
||||||
|
],
|
||||||
|
"type": "object",
|
||||||
|
"additionalProperties": false
|
||||||
|
},
|
||||||
|
"status": {
|
||||||
|
"default": {
|
||||||
|
"observedGeneration": -1
|
||||||
|
},
|
||||||
|
"description": "ImageRepositoryStatus defines the observed state of ImageRepository",
|
||||||
|
"properties": {
|
||||||
|
"canonicalImageName": {
|
||||||
|
"description": "CanonicalName is the name of the image repository with all the\nimplied bits made explicit; e.g., `docker.io/library/alpine`\nrather than `alpine`.",
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"conditions": {
|
||||||
|
"items": {
|
||||||
|
"description": "Condition contains details for one aspect of the current state of this API Resource.",
|
||||||
|
"properties": {
|
||||||
|
"lastTransitionTime": {
|
||||||
|
"description": "lastTransitionTime is the last time the condition transitioned from one status to another.\nThis should be when the underlying condition changed. If that is not known, then using the time when the API field changed is acceptable.",
|
||||||
|
"format": "date-time",
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"message": {
|
||||||
|
"description": "message is a human readable message indicating details about the transition.\nThis may be an empty string.",
|
||||||
|
"maxLength": 32768,
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"observedGeneration": {
|
||||||
|
"description": "observedGeneration represents the .metadata.generation that the condition was set based upon.\nFor instance, if .metadata.generation is currently 12, but the .status.conditions[x].observedGeneration is 9, the condition is out of date\nwith respect to the current state of the instance.",
|
||||||
|
"format": "int64",
|
||||||
|
"minimum": 0,
|
||||||
|
"type": "integer"
|
||||||
|
},
|
||||||
|
"reason": {
|
||||||
|
"description": "reason contains a programmatic identifier indicating the reason for the condition's last transition.\nProducers of specific condition types may define expected values and meanings for this field,\nand whether the values are considered a guaranteed API.\nThe value should be a CamelCase string.\nThis field may not be empty.",
|
||||||
|
"maxLength": 1024,
|
||||||
|
"minLength": 1,
|
||||||
|
"pattern": "^[A-Za-z]([A-Za-z0-9_,:]*[A-Za-z0-9_])?$",
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"status": {
|
||||||
|
"description": "status of the condition, one of True, False, Unknown.",
|
||||||
|
"enum": [
|
||||||
|
"True",
|
||||||
|
"False",
|
||||||
|
"Unknown"
|
||||||
|
],
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"type": {
|
||||||
|
"description": "type of condition in CamelCase or in foo.example.com/CamelCase.",
|
||||||
|
"maxLength": 316,
|
||||||
|
"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])$",
|
||||||
|
"type": "string"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"required": [
|
||||||
|
"lastTransitionTime",
|
||||||
|
"message",
|
||||||
|
"reason",
|
||||||
|
"status",
|
||||||
|
"type"
|
||||||
|
],
|
||||||
|
"type": "object",
|
||||||
|
"additionalProperties": false
|
||||||
|
},
|
||||||
|
"type": "array"
|
||||||
|
},
|
||||||
|
"lastHandledReconcileAt": {
|
||||||
|
"description": "LastHandledReconcileAt holds the value of the most recent\nreconcile request value, so a change of the annotation value\ncan be detected.",
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"lastScanResult": {
|
||||||
|
"description": "LastScanResult contains the number of fetched tags.",
|
||||||
|
"properties": {
|
||||||
|
"latestTags": {
|
||||||
|
"description": "LatestTags is a small sample of the tags found in the last scan.\nIt's the first 10 tags when sorting all the tags in descending\nalphabetical order.",
|
||||||
|
"items": {
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"type": "array"
|
||||||
|
},
|
||||||
|
"revision": {
|
||||||
|
"description": "Revision is a stable hash of the scanned tags.",
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"scanTime": {
|
||||||
|
"description": "ScanTime is the time when the last scan was performed.",
|
||||||
|
"format": "date-time",
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"tagCount": {
|
||||||
|
"description": "TagCount is the number of tags found in the last scan.",
|
||||||
|
"type": "integer"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"required": [
|
||||||
|
"tagCount"
|
||||||
|
],
|
||||||
|
"type": "object",
|
||||||
|
"additionalProperties": false
|
||||||
|
},
|
||||||
|
"observedExclusionList": {
|
||||||
|
"description": "ObservedExclusionList is a list of observed exclusion list. It reflects\nthe exclusion rules used for the observed scan result in\nspec.lastScanResult.",
|
||||||
|
"items": {
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"type": "array"
|
||||||
|
},
|
||||||
|
"observedGeneration": {
|
||||||
|
"description": "ObservedGeneration is the last reconciled generation.",
|
||||||
|
"format": "int64",
|
||||||
|
"type": "integer"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"type": "object",
|
||||||
|
"additionalProperties": false
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"type": "object"
|
||||||
|
}
|
||||||
@@ -0,0 +1,387 @@
|
|||||||
|
{
|
||||||
|
"description": "ImageUpdateAutomation is the Schema for the imageupdateautomations API",
|
||||||
|
"properties": {
|
||||||
|
"apiVersion": {
|
||||||
|
"description": "APIVersion defines the versioned schema of this representation of an object.\nServers should convert recognized schemas to the latest internal value, and\nmay reject unrecognized values.\nMore info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources",
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"kind": {
|
||||||
|
"description": "Kind is a string value representing the REST resource this object represents.\nServers may infer this from the endpoint the client submits requests to.\nCannot be updated.\nIn CamelCase.\nMore info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds",
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"metadata": {
|
||||||
|
"type": "object"
|
||||||
|
},
|
||||||
|
"spec": {
|
||||||
|
"description": "ImageUpdateAutomationSpec defines the desired state of ImageUpdateAutomation",
|
||||||
|
"properties": {
|
||||||
|
"git": {
|
||||||
|
"description": "GitSpec contains all the git-specific definitions. This is\ntechnically optional, but in practice mandatory until there are\nother kinds of source allowed.",
|
||||||
|
"properties": {
|
||||||
|
"checkout": {
|
||||||
|
"description": "Checkout gives the parameters for cloning the git repository,\nready to make changes. If not present, the `spec.ref` field from the\nreferenced `GitRepository` or its default will be used.",
|
||||||
|
"properties": {
|
||||||
|
"ref": {
|
||||||
|
"description": "Reference gives a branch, tag or commit to clone from the Git\nrepository.",
|
||||||
|
"properties": {
|
||||||
|
"branch": {
|
||||||
|
"description": "Branch to check out, defaults to 'master' if no other field is defined.",
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"commit": {
|
||||||
|
"description": "Commit SHA to check out, takes precedence over all reference fields.\n\nThis can be combined with Branch to shallow clone the branch, in which\nthe commit is expected to exist.",
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"name": {
|
||||||
|
"description": "Name of the reference to check out; takes precedence over Branch, Tag and SemVer.\n\nIt must be a valid Git reference: https://git-scm.com/docs/git-check-ref-format#_description\nExamples: \"refs/heads/main\", \"refs/tags/v0.1.0\", \"refs/pull/420/head\", \"refs/merge-requests/1/head\"",
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"semver": {
|
||||||
|
"description": "SemVer tag expression to check out, takes precedence over Tag.",
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"tag": {
|
||||||
|
"description": "Tag to check out, takes precedence over Branch.",
|
||||||
|
"type": "string"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"type": "object",
|
||||||
|
"additionalProperties": false
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"required": [
|
||||||
|
"ref"
|
||||||
|
],
|
||||||
|
"type": "object",
|
||||||
|
"additionalProperties": false
|
||||||
|
},
|
||||||
|
"commit": {
|
||||||
|
"description": "Commit specifies how to commit to the git repository.",
|
||||||
|
"properties": {
|
||||||
|
"author": {
|
||||||
|
"description": "Author gives the email and optionally the name to use as the\nauthor of commits.",
|
||||||
|
"properties": {
|
||||||
|
"email": {
|
||||||
|
"description": "Email gives the email to provide when making a commit.",
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"name": {
|
||||||
|
"description": "Name gives the name to provide when making a commit.",
|
||||||
|
"type": "string"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"required": [
|
||||||
|
"email"
|
||||||
|
],
|
||||||
|
"type": "object",
|
||||||
|
"additionalProperties": false
|
||||||
|
},
|
||||||
|
"messageTemplate": {
|
||||||
|
"description": "MessageTemplate provides a template for the commit message,\ninto which will be interpolated the details of the change made.\nNote: The `Updated` template field has been removed. Use `Changed` instead.",
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"messageTemplateValues": {
|
||||||
|
"additionalProperties": {
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"description": "MessageTemplateValues provides additional values to be available to the\ntemplating rendering.",
|
||||||
|
"type": "object"
|
||||||
|
},
|
||||||
|
"signingKey": {
|
||||||
|
"description": "SigningKey provides the option to sign commits with a GPG key",
|
||||||
|
"properties": {
|
||||||
|
"secretRef": {
|
||||||
|
"description": "SecretRef holds the name to a secret that contains a 'git.asc' key\ncorresponding to the ASCII Armored file containing the GPG signing\nkeypair as the value. It must be in the same namespace as the\nImageUpdateAutomation.",
|
||||||
|
"properties": {
|
||||||
|
"name": {
|
||||||
|
"description": "Name of the referent.",
|
||||||
|
"type": "string"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"required": [
|
||||||
|
"name"
|
||||||
|
],
|
||||||
|
"type": "object",
|
||||||
|
"additionalProperties": false
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"required": [
|
||||||
|
"secretRef"
|
||||||
|
],
|
||||||
|
"type": "object",
|
||||||
|
"additionalProperties": false
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"required": [
|
||||||
|
"author"
|
||||||
|
],
|
||||||
|
"type": "object",
|
||||||
|
"additionalProperties": false
|
||||||
|
},
|
||||||
|
"push": {
|
||||||
|
"description": "Push specifies how and where to push commits made by the\nautomation. If missing, commits are pushed (back) to\n`.spec.checkout.branch` or its default.",
|
||||||
|
"properties": {
|
||||||
|
"branch": {
|
||||||
|
"description": "Branch specifies that commits should be pushed to the branch\nnamed. The branch is created using `.spec.checkout.branch` as the\nstarting point, if it doesn't already exist.",
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"options": {
|
||||||
|
"additionalProperties": {
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"description": "Options specifies the push options that are sent to the Git\nserver when performing a push operation. For details, see:\nhttps://git-scm.com/docs/git-push#Documentation/git-push.txt---push-optionltoptiongt",
|
||||||
|
"type": "object"
|
||||||
|
},
|
||||||
|
"refspec": {
|
||||||
|
"description": "Refspec specifies the Git Refspec to use for a push operation.\nIf both Branch and Refspec are provided, then the commit is pushed\nto the branch and also using the specified refspec.\nFor more details about Git Refspecs, see:\nhttps://git-scm.com/book/en/v2/Git-Internals-The-Refspec",
|
||||||
|
"type": "string"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"type": "object",
|
||||||
|
"additionalProperties": false
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"required": [
|
||||||
|
"commit"
|
||||||
|
],
|
||||||
|
"type": "object",
|
||||||
|
"additionalProperties": false
|
||||||
|
},
|
||||||
|
"interval": {
|
||||||
|
"description": "Interval gives an lower bound for how often the automation\nrun should be attempted.",
|
||||||
|
"pattern": "^([0-9]+(\\.[0-9]+)?(ms|s|m|h))+$",
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"policySelector": {
|
||||||
|
"description": "PolicySelector allows to filter applied policies based on labels.\nBy default includes all policies in namespace.",
|
||||||
|
"properties": {
|
||||||
|
"matchExpressions": {
|
||||||
|
"description": "matchExpressions is a list of label selector requirements. The requirements are ANDed.",
|
||||||
|
"items": {
|
||||||
|
"description": "A label selector requirement is a selector that contains values, a key, and an operator that\nrelates the key and values.",
|
||||||
|
"properties": {
|
||||||
|
"key": {
|
||||||
|
"description": "key is the label key that the selector applies to.",
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"operator": {
|
||||||
|
"description": "operator represents a key's relationship to a set of values.\nValid operators are In, NotIn, Exists and DoesNotExist.",
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"values": {
|
||||||
|
"description": "values is an array of string values. If the operator is In or NotIn,\nthe values array must be non-empty. If the operator is Exists or DoesNotExist,\nthe values array must be empty. This array is replaced during a strategic\nmerge patch.",
|
||||||
|
"items": {
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"type": "array",
|
||||||
|
"x-kubernetes-list-type": "atomic"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"required": [
|
||||||
|
"key",
|
||||||
|
"operator"
|
||||||
|
],
|
||||||
|
"type": "object",
|
||||||
|
"additionalProperties": false
|
||||||
|
},
|
||||||
|
"type": "array",
|
||||||
|
"x-kubernetes-list-type": "atomic"
|
||||||
|
},
|
||||||
|
"matchLabels": {
|
||||||
|
"additionalProperties": {
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"description": "matchLabels is a map of {key,value} pairs. A single {key,value} in the matchLabels\nmap is equivalent to an element of matchExpressions, whose key field is \"key\", the\noperator is \"In\", and the values array contains only \"value\". The requirements are ANDed.",
|
||||||
|
"type": "object"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"type": "object",
|
||||||
|
"x-kubernetes-map-type": "atomic",
|
||||||
|
"additionalProperties": false
|
||||||
|
},
|
||||||
|
"sourceRef": {
|
||||||
|
"description": "SourceRef refers to the resource giving access details\nto a git repository.",
|
||||||
|
"properties": {
|
||||||
|
"apiVersion": {
|
||||||
|
"description": "API version of the referent.",
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"kind": {
|
||||||
|
"default": "GitRepository",
|
||||||
|
"description": "Kind of the referent.",
|
||||||
|
"enum": [
|
||||||
|
"GitRepository"
|
||||||
|
],
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"name": {
|
||||||
|
"description": "Name of the referent.",
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"namespace": {
|
||||||
|
"description": "Namespace of the referent, defaults to the namespace of the Kubernetes resource object that contains the reference.",
|
||||||
|
"type": "string"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"required": [
|
||||||
|
"kind",
|
||||||
|
"name"
|
||||||
|
],
|
||||||
|
"type": "object",
|
||||||
|
"additionalProperties": false
|
||||||
|
},
|
||||||
|
"suspend": {
|
||||||
|
"description": "Suspend tells the controller to not run this automation, until\nit is unset (or set to false). Defaults to false.",
|
||||||
|
"type": "boolean"
|
||||||
|
},
|
||||||
|
"update": {
|
||||||
|
"default": {
|
||||||
|
"strategy": "Setters"
|
||||||
|
},
|
||||||
|
"description": "Update gives the specification for how to update the files in\nthe repository. This can be left empty, to use the default\nvalue.",
|
||||||
|
"properties": {
|
||||||
|
"path": {
|
||||||
|
"description": "Path to the directory containing the manifests to be updated.\nDefaults to 'None', which translates to the root path\nof the GitRepositoryRef.",
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"strategy": {
|
||||||
|
"default": "Setters",
|
||||||
|
"description": "Strategy names the strategy to be used.",
|
||||||
|
"enum": [
|
||||||
|
"Setters"
|
||||||
|
],
|
||||||
|
"type": "string"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"type": "object",
|
||||||
|
"additionalProperties": false
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"required": [
|
||||||
|
"interval",
|
||||||
|
"sourceRef"
|
||||||
|
],
|
||||||
|
"type": "object",
|
||||||
|
"additionalProperties": false
|
||||||
|
},
|
||||||
|
"status": {
|
||||||
|
"default": {
|
||||||
|
"observedGeneration": -1
|
||||||
|
},
|
||||||
|
"description": "ImageUpdateAutomationStatus defines the observed state of ImageUpdateAutomation",
|
||||||
|
"properties": {
|
||||||
|
"conditions": {
|
||||||
|
"items": {
|
||||||
|
"description": "Condition contains details for one aspect of the current state of this API Resource.",
|
||||||
|
"properties": {
|
||||||
|
"lastTransitionTime": {
|
||||||
|
"description": "lastTransitionTime is the last time the condition transitioned from one status to another.\nThis should be when the underlying condition changed. If that is not known, then using the time when the API field changed is acceptable.",
|
||||||
|
"format": "date-time",
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"message": {
|
||||||
|
"description": "message is a human readable message indicating details about the transition.\nThis may be an empty string.",
|
||||||
|
"maxLength": 32768,
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"observedGeneration": {
|
||||||
|
"description": "observedGeneration represents the .metadata.generation that the condition was set based upon.\nFor instance, if .metadata.generation is currently 12, but the .status.conditions[x].observedGeneration is 9, the condition is out of date\nwith respect to the current state of the instance.",
|
||||||
|
"format": "int64",
|
||||||
|
"minimum": 0,
|
||||||
|
"type": "integer"
|
||||||
|
},
|
||||||
|
"reason": {
|
||||||
|
"description": "reason contains a programmatic identifier indicating the reason for the condition's last transition.\nProducers of specific condition types may define expected values and meanings for this field,\nand whether the values are considered a guaranteed API.\nThe value should be a CamelCase string.\nThis field may not be empty.",
|
||||||
|
"maxLength": 1024,
|
||||||
|
"minLength": 1,
|
||||||
|
"pattern": "^[A-Za-z]([A-Za-z0-9_,:]*[A-Za-z0-9_])?$",
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"status": {
|
||||||
|
"description": "status of the condition, one of True, False, Unknown.",
|
||||||
|
"enum": [
|
||||||
|
"True",
|
||||||
|
"False",
|
||||||
|
"Unknown"
|
||||||
|
],
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"type": {
|
||||||
|
"description": "type of condition in CamelCase or in foo.example.com/CamelCase.",
|
||||||
|
"maxLength": 316,
|
||||||
|
"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])$",
|
||||||
|
"type": "string"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"required": [
|
||||||
|
"lastTransitionTime",
|
||||||
|
"message",
|
||||||
|
"reason",
|
||||||
|
"status",
|
||||||
|
"type"
|
||||||
|
],
|
||||||
|
"type": "object",
|
||||||
|
"additionalProperties": false
|
||||||
|
},
|
||||||
|
"type": "array"
|
||||||
|
},
|
||||||
|
"lastAutomationRunTime": {
|
||||||
|
"description": "LastAutomationRunTime records the last time the controller ran\nthis automation through to completion (even if no updates were\nmade).",
|
||||||
|
"format": "date-time",
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"lastHandledReconcileAt": {
|
||||||
|
"description": "LastHandledReconcileAt holds the value of the most recent\nreconcile request value, so a change of the annotation value\ncan be detected.",
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"lastPushCommit": {
|
||||||
|
"description": "LastPushCommit records the SHA1 of the last commit made by the\ncontroller, for this automation object",
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"lastPushTime": {
|
||||||
|
"description": "LastPushTime records the time of the last pushed change.",
|
||||||
|
"format": "date-time",
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"observedGeneration": {
|
||||||
|
"format": "int64",
|
||||||
|
"type": "integer"
|
||||||
|
},
|
||||||
|
"observedPolicies": {
|
||||||
|
"additionalProperties": {
|
||||||
|
"description": "ImageRef represents an image reference.",
|
||||||
|
"properties": {
|
||||||
|
"digest": {
|
||||||
|
"description": "Digest is the image's digest.",
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"name": {
|
||||||
|
"description": "Name is the bare image's name.",
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"tag": {
|
||||||
|
"description": "Tag is the image's tag.",
|
||||||
|
"type": "string"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"required": [
|
||||||
|
"name",
|
||||||
|
"tag"
|
||||||
|
],
|
||||||
|
"type": "object",
|
||||||
|
"additionalProperties": false
|
||||||
|
},
|
||||||
|
"description": "ObservedPolicies is the list of observed ImagePolicies that were\nconsidered by the ImageUpdateAutomation update process.",
|
||||||
|
"type": "object"
|
||||||
|
},
|
||||||
|
"observedSourceRevision": {
|
||||||
|
"description": "ObservedPolicies []ObservedPolicy `json:\"observedPolicies,omitempty\"`\nObservedSourceRevision is the last observed source revision. This can be\nused to determine if the source has been updated since last observation.",
|
||||||
|
"type": "string"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"type": "object",
|
||||||
|
"additionalProperties": false
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"type": "object"
|
||||||
|
}
|
||||||
@@ -0,0 +1,387 @@
|
|||||||
|
{
|
||||||
|
"description": "ImageUpdateAutomation is the Schema for the imageupdateautomations API",
|
||||||
|
"properties": {
|
||||||
|
"apiVersion": {
|
||||||
|
"description": "APIVersion defines the versioned schema of this representation of an object.\nServers should convert recognized schemas to the latest internal value, and\nmay reject unrecognized values.\nMore info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources",
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"kind": {
|
||||||
|
"description": "Kind is a string value representing the REST resource this object represents.\nServers may infer this from the endpoint the client submits requests to.\nCannot be updated.\nIn CamelCase.\nMore info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds",
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"metadata": {
|
||||||
|
"type": "object"
|
||||||
|
},
|
||||||
|
"spec": {
|
||||||
|
"description": "ImageUpdateAutomationSpec defines the desired state of ImageUpdateAutomation",
|
||||||
|
"properties": {
|
||||||
|
"git": {
|
||||||
|
"description": "GitSpec contains all the git-specific definitions. This is\ntechnically optional, but in practice mandatory until there are\nother kinds of source allowed.",
|
||||||
|
"properties": {
|
||||||
|
"checkout": {
|
||||||
|
"description": "Checkout gives the parameters for cloning the git repository,\nready to make changes. If not present, the `spec.ref` field from the\nreferenced `GitRepository` or its default will be used.",
|
||||||
|
"properties": {
|
||||||
|
"ref": {
|
||||||
|
"description": "Reference gives a branch, tag or commit to clone from the Git\nrepository.",
|
||||||
|
"properties": {
|
||||||
|
"branch": {
|
||||||
|
"description": "Branch to check out, defaults to 'master' if no other field is defined.",
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"commit": {
|
||||||
|
"description": "Commit SHA to check out, takes precedence over all reference fields.\n\nThis can be combined with Branch to shallow clone the branch, in which\nthe commit is expected to exist.",
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"name": {
|
||||||
|
"description": "Name of the reference to check out; takes precedence over Branch, Tag and SemVer.\n\nIt must be a valid Git reference: https://git-scm.com/docs/git-check-ref-format#_description\nExamples: \"refs/heads/main\", \"refs/tags/v0.1.0\", \"refs/pull/420/head\", \"refs/merge-requests/1/head\"",
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"semver": {
|
||||||
|
"description": "SemVer tag expression to check out, takes precedence over Tag.",
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"tag": {
|
||||||
|
"description": "Tag to check out, takes precedence over Branch.",
|
||||||
|
"type": "string"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"type": "object",
|
||||||
|
"additionalProperties": false
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"required": [
|
||||||
|
"ref"
|
||||||
|
],
|
||||||
|
"type": "object",
|
||||||
|
"additionalProperties": false
|
||||||
|
},
|
||||||
|
"commit": {
|
||||||
|
"description": "Commit specifies how to commit to the git repository.",
|
||||||
|
"properties": {
|
||||||
|
"author": {
|
||||||
|
"description": "Author gives the email and optionally the name to use as the\nauthor of commits.",
|
||||||
|
"properties": {
|
||||||
|
"email": {
|
||||||
|
"description": "Email gives the email to provide when making a commit.",
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"name": {
|
||||||
|
"description": "Name gives the name to provide when making a commit.",
|
||||||
|
"type": "string"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"required": [
|
||||||
|
"email"
|
||||||
|
],
|
||||||
|
"type": "object",
|
||||||
|
"additionalProperties": false
|
||||||
|
},
|
||||||
|
"messageTemplate": {
|
||||||
|
"description": "MessageTemplate provides a template for the commit message,\ninto which will be interpolated the details of the change made.\nNote: The `Updated` template field has been removed. Use `Changed` instead.",
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"messageTemplateValues": {
|
||||||
|
"additionalProperties": {
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"description": "MessageTemplateValues provides additional values to be available to the\ntemplating rendering.",
|
||||||
|
"type": "object"
|
||||||
|
},
|
||||||
|
"signingKey": {
|
||||||
|
"description": "SigningKey provides the option to sign commits with a GPG key",
|
||||||
|
"properties": {
|
||||||
|
"secretRef": {
|
||||||
|
"description": "SecretRef holds the name to a secret that contains a 'git.asc' key\ncorresponding to the ASCII Armored file containing the GPG signing\nkeypair as the value. It must be in the same namespace as the\nImageUpdateAutomation.",
|
||||||
|
"properties": {
|
||||||
|
"name": {
|
||||||
|
"description": "Name of the referent.",
|
||||||
|
"type": "string"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"required": [
|
||||||
|
"name"
|
||||||
|
],
|
||||||
|
"type": "object",
|
||||||
|
"additionalProperties": false
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"required": [
|
||||||
|
"secretRef"
|
||||||
|
],
|
||||||
|
"type": "object",
|
||||||
|
"additionalProperties": false
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"required": [
|
||||||
|
"author"
|
||||||
|
],
|
||||||
|
"type": "object",
|
||||||
|
"additionalProperties": false
|
||||||
|
},
|
||||||
|
"push": {
|
||||||
|
"description": "Push specifies how and where to push commits made by the\nautomation. If missing, commits are pushed (back) to\n`.spec.checkout.branch` or its default.",
|
||||||
|
"properties": {
|
||||||
|
"branch": {
|
||||||
|
"description": "Branch specifies that commits should be pushed to the branch\nnamed. The branch is created using `.spec.checkout.branch` as the\nstarting point, if it doesn't already exist.",
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"options": {
|
||||||
|
"additionalProperties": {
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"description": "Options specifies the push options that are sent to the Git\nserver when performing a push operation. For details, see:\nhttps://git-scm.com/docs/git-push#Documentation/git-push.txt---push-optionltoptiongt",
|
||||||
|
"type": "object"
|
||||||
|
},
|
||||||
|
"refspec": {
|
||||||
|
"description": "Refspec specifies the Git Refspec to use for a push operation.\nIf both Branch and Refspec are provided, then the commit is pushed\nto the branch and also using the specified refspec.\nFor more details about Git Refspecs, see:\nhttps://git-scm.com/book/en/v2/Git-Internals-The-Refspec",
|
||||||
|
"type": "string"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"type": "object",
|
||||||
|
"additionalProperties": false
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"required": [
|
||||||
|
"commit"
|
||||||
|
],
|
||||||
|
"type": "object",
|
||||||
|
"additionalProperties": false
|
||||||
|
},
|
||||||
|
"interval": {
|
||||||
|
"description": "Interval gives an lower bound for how often the automation\nrun should be attempted.",
|
||||||
|
"pattern": "^([0-9]+(\\.[0-9]+)?(ms|s|m|h))+$",
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"policySelector": {
|
||||||
|
"description": "PolicySelector allows to filter applied policies based on labels.\nBy default includes all policies in namespace.",
|
||||||
|
"properties": {
|
||||||
|
"matchExpressions": {
|
||||||
|
"description": "matchExpressions is a list of label selector requirements. The requirements are ANDed.",
|
||||||
|
"items": {
|
||||||
|
"description": "A label selector requirement is a selector that contains values, a key, and an operator that\nrelates the key and values.",
|
||||||
|
"properties": {
|
||||||
|
"key": {
|
||||||
|
"description": "key is the label key that the selector applies to.",
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"operator": {
|
||||||
|
"description": "operator represents a key's relationship to a set of values.\nValid operators are In, NotIn, Exists and DoesNotExist.",
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"values": {
|
||||||
|
"description": "values is an array of string values. If the operator is In or NotIn,\nthe values array must be non-empty. If the operator is Exists or DoesNotExist,\nthe values array must be empty. This array is replaced during a strategic\nmerge patch.",
|
||||||
|
"items": {
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"type": "array",
|
||||||
|
"x-kubernetes-list-type": "atomic"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"required": [
|
||||||
|
"key",
|
||||||
|
"operator"
|
||||||
|
],
|
||||||
|
"type": "object",
|
||||||
|
"additionalProperties": false
|
||||||
|
},
|
||||||
|
"type": "array",
|
||||||
|
"x-kubernetes-list-type": "atomic"
|
||||||
|
},
|
||||||
|
"matchLabels": {
|
||||||
|
"additionalProperties": {
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"description": "matchLabels is a map of {key,value} pairs. A single {key,value} in the matchLabels\nmap is equivalent to an element of matchExpressions, whose key field is \"key\", the\noperator is \"In\", and the values array contains only \"value\". The requirements are ANDed.",
|
||||||
|
"type": "object"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"type": "object",
|
||||||
|
"x-kubernetes-map-type": "atomic",
|
||||||
|
"additionalProperties": false
|
||||||
|
},
|
||||||
|
"sourceRef": {
|
||||||
|
"description": "SourceRef refers to the resource giving access details\nto a git repository.",
|
||||||
|
"properties": {
|
||||||
|
"apiVersion": {
|
||||||
|
"description": "API version of the referent.",
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"kind": {
|
||||||
|
"default": "GitRepository",
|
||||||
|
"description": "Kind of the referent.",
|
||||||
|
"enum": [
|
||||||
|
"GitRepository"
|
||||||
|
],
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"name": {
|
||||||
|
"description": "Name of the referent.",
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"namespace": {
|
||||||
|
"description": "Namespace of the referent, defaults to the namespace of the Kubernetes resource object that contains the reference.",
|
||||||
|
"type": "string"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"required": [
|
||||||
|
"kind",
|
||||||
|
"name"
|
||||||
|
],
|
||||||
|
"type": "object",
|
||||||
|
"additionalProperties": false
|
||||||
|
},
|
||||||
|
"suspend": {
|
||||||
|
"description": "Suspend tells the controller to not run this automation, until\nit is unset (or set to false). Defaults to false.",
|
||||||
|
"type": "boolean"
|
||||||
|
},
|
||||||
|
"update": {
|
||||||
|
"default": {
|
||||||
|
"strategy": "Setters"
|
||||||
|
},
|
||||||
|
"description": "Update gives the specification for how to update the files in\nthe repository. This can be left empty, to use the default\nvalue.",
|
||||||
|
"properties": {
|
||||||
|
"path": {
|
||||||
|
"description": "Path to the directory containing the manifests to be updated.\nDefaults to 'None', which translates to the root path\nof the GitRepositoryRef.",
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"strategy": {
|
||||||
|
"default": "Setters",
|
||||||
|
"description": "Strategy names the strategy to be used.",
|
||||||
|
"enum": [
|
||||||
|
"Setters"
|
||||||
|
],
|
||||||
|
"type": "string"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"type": "object",
|
||||||
|
"additionalProperties": false
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"required": [
|
||||||
|
"interval",
|
||||||
|
"sourceRef"
|
||||||
|
],
|
||||||
|
"type": "object",
|
||||||
|
"additionalProperties": false
|
||||||
|
},
|
||||||
|
"status": {
|
||||||
|
"default": {
|
||||||
|
"observedGeneration": -1
|
||||||
|
},
|
||||||
|
"description": "ImageUpdateAutomationStatus defines the observed state of ImageUpdateAutomation",
|
||||||
|
"properties": {
|
||||||
|
"conditions": {
|
||||||
|
"items": {
|
||||||
|
"description": "Condition contains details for one aspect of the current state of this API Resource.",
|
||||||
|
"properties": {
|
||||||
|
"lastTransitionTime": {
|
||||||
|
"description": "lastTransitionTime is the last time the condition transitioned from one status to another.\nThis should be when the underlying condition changed. If that is not known, then using the time when the API field changed is acceptable.",
|
||||||
|
"format": "date-time",
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"message": {
|
||||||
|
"description": "message is a human readable message indicating details about the transition.\nThis may be an empty string.",
|
||||||
|
"maxLength": 32768,
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"observedGeneration": {
|
||||||
|
"description": "observedGeneration represents the .metadata.generation that the condition was set based upon.\nFor instance, if .metadata.generation is currently 12, but the .status.conditions[x].observedGeneration is 9, the condition is out of date\nwith respect to the current state of the instance.",
|
||||||
|
"format": "int64",
|
||||||
|
"minimum": 0,
|
||||||
|
"type": "integer"
|
||||||
|
},
|
||||||
|
"reason": {
|
||||||
|
"description": "reason contains a programmatic identifier indicating the reason for the condition's last transition.\nProducers of specific condition types may define expected values and meanings for this field,\nand whether the values are considered a guaranteed API.\nThe value should be a CamelCase string.\nThis field may not be empty.",
|
||||||
|
"maxLength": 1024,
|
||||||
|
"minLength": 1,
|
||||||
|
"pattern": "^[A-Za-z]([A-Za-z0-9_,:]*[A-Za-z0-9_])?$",
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"status": {
|
||||||
|
"description": "status of the condition, one of True, False, Unknown.",
|
||||||
|
"enum": [
|
||||||
|
"True",
|
||||||
|
"False",
|
||||||
|
"Unknown"
|
||||||
|
],
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"type": {
|
||||||
|
"description": "type of condition in CamelCase or in foo.example.com/CamelCase.",
|
||||||
|
"maxLength": 316,
|
||||||
|
"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])$",
|
||||||
|
"type": "string"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"required": [
|
||||||
|
"lastTransitionTime",
|
||||||
|
"message",
|
||||||
|
"reason",
|
||||||
|
"status",
|
||||||
|
"type"
|
||||||
|
],
|
||||||
|
"type": "object",
|
||||||
|
"additionalProperties": false
|
||||||
|
},
|
||||||
|
"type": "array"
|
||||||
|
},
|
||||||
|
"lastAutomationRunTime": {
|
||||||
|
"description": "LastAutomationRunTime records the last time the controller ran\nthis automation through to completion (even if no updates were\nmade).",
|
||||||
|
"format": "date-time",
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"lastHandledReconcileAt": {
|
||||||
|
"description": "LastHandledReconcileAt holds the value of the most recent\nreconcile request value, so a change of the annotation value\ncan be detected.",
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"lastPushCommit": {
|
||||||
|
"description": "LastPushCommit records the SHA1 of the last commit made by the\ncontroller, for this automation object",
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"lastPushTime": {
|
||||||
|
"description": "LastPushTime records the time of the last pushed change.",
|
||||||
|
"format": "date-time",
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"observedGeneration": {
|
||||||
|
"format": "int64",
|
||||||
|
"type": "integer"
|
||||||
|
},
|
||||||
|
"observedPolicies": {
|
||||||
|
"additionalProperties": {
|
||||||
|
"description": "ImageRef represents an image reference.",
|
||||||
|
"properties": {
|
||||||
|
"digest": {
|
||||||
|
"description": "Digest is the image's digest.",
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"name": {
|
||||||
|
"description": "Name is the bare image's name.",
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"tag": {
|
||||||
|
"description": "Tag is the image's tag.",
|
||||||
|
"type": "string"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"required": [
|
||||||
|
"name",
|
||||||
|
"tag"
|
||||||
|
],
|
||||||
|
"type": "object",
|
||||||
|
"additionalProperties": false
|
||||||
|
},
|
||||||
|
"description": "ObservedPolicies is the list of observed ImagePolicies that were\nconsidered by the ImageUpdateAutomation update process.",
|
||||||
|
"type": "object"
|
||||||
|
},
|
||||||
|
"observedSourceRevision": {
|
||||||
|
"description": "ObservedPolicies []ObservedPolicy `json:\"observedPolicies,omitempty\"`\nObservedSourceRevision is the last observed source revision. This can be\nused to determine if the source has been updated since last observation.",
|
||||||
|
"type": "string"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"type": "object",
|
||||||
|
"additionalProperties": false
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"type": "object"
|
||||||
|
}
|
||||||
@@ -0,0 +1,558 @@
|
|||||||
|
{
|
||||||
|
"description": "ImageUpdater is the Schema for the imageupdaters API",
|
||||||
|
"properties": {
|
||||||
|
"apiVersion": {
|
||||||
|
"description": "APIVersion defines the versioned schema of this representation of an object.\nServers should convert recognized schemas to the latest internal value, and\nmay reject unrecognized values.\nMore info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources",
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"kind": {
|
||||||
|
"description": "Kind is a string value representing the REST resource this object represents.\nServers may infer this from the endpoint the client submits requests to.\nCannot be updated.\nIn CamelCase.\nMore info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds",
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"metadata": {
|
||||||
|
"type": "object"
|
||||||
|
},
|
||||||
|
"spec": {
|
||||||
|
"description": "ImageUpdaterSpec defines the desired state of ImageUpdater\nIt specifies which applications to target, default update strategies,\nand a list of images to manage.",
|
||||||
|
"properties": {
|
||||||
|
"applicationRefs": {
|
||||||
|
"description": "ApplicationRefs indicates the set of applications to be managed.\nApplicationRefs is a list of rules to select Argo CD Applications within the ImageUpdater CR's namespace.\nEach reference can also provide specific overrides for the global settings defined above.",
|
||||||
|
"items": {
|
||||||
|
"description": "ApplicationRef contains various criteria by which to include applications for managing by image updater",
|
||||||
|
"properties": {
|
||||||
|
"commonUpdateSettings": {
|
||||||
|
"description": "CommonUpdateSettings overrides the global CommonUpdateSettings for applications\nmatched by this selector.\nThis field is ignored when UseAnnotations is true.",
|
||||||
|
"properties": {
|
||||||
|
"allowTags": {
|
||||||
|
"description": "AllowTags is a regex pattern for tags to allow.\nThis acts as the default if not overridden.",
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"forceUpdate": {
|
||||||
|
"default": false,
|
||||||
|
"description": "ForceUpdate specifies whether updates should be forced.\nThis acts as the default if not overridden.",
|
||||||
|
"type": "boolean"
|
||||||
|
},
|
||||||
|
"ignoreTags": {
|
||||||
|
"description": "IgnoreTags is a list of glob-like patterns of tags to ignore.\nThis acts as the default and can be overridden at more specific levels.",
|
||||||
|
"items": {
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"type": "array",
|
||||||
|
"x-kubernetes-list-type": "atomic"
|
||||||
|
},
|
||||||
|
"platforms": {
|
||||||
|
"description": "Platforms specifies a list of target platforms (e.g., \"linux/amd64\", \"linux/arm64\").\nIf specified, the image updater will consider these platforms when checking for new versions or digests.",
|
||||||
|
"items": {
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"type": "array",
|
||||||
|
"x-kubernetes-list-type": "atomic"
|
||||||
|
},
|
||||||
|
"pullSecret": {
|
||||||
|
"description": "PullSecret is the pull secret to use for images.\nThis acts as the default if not overridden.",
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"updateStrategy": {
|
||||||
|
"default": "semver",
|
||||||
|
"description": "UpdateStrategy defines the update strategy to apply.\nExamples: \"semver\", \"latest\", \"digest\", \"name\".\nThis acts as the default if not overridden at a more specific level.",
|
||||||
|
"type": "string"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"type": "object",
|
||||||
|
"additionalProperties": false
|
||||||
|
},
|
||||||
|
"images": {
|
||||||
|
"description": "Images contains a list of configurations that how images should be updated.\nThese rules apply to applications selected by namePattern in ApplicationRefs, and each\nimage can override global/ApplicationRef settings.\nThis field is ignored when UseAnnotations is true.",
|
||||||
|
"items": {
|
||||||
|
"description": "ImageConfig defines how a specific container image should be discovered, updated,\nand how those updates should be reflected in application manifests.",
|
||||||
|
"properties": {
|
||||||
|
"alias": {
|
||||||
|
"description": "Alias is a short, user-defined name for this image configuration.\nIt MUST be unique within a single ApplicationRef's list of images.\nThis field is mandatory.",
|
||||||
|
"pattern": "^[a-zA-Z0-9][a-zA-Z0-9-._]*$",
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"commonUpdateSettings": {
|
||||||
|
"description": "CommonUpdateSettings overrides the effective default CommonUpdateSettings for this specific image.",
|
||||||
|
"properties": {
|
||||||
|
"allowTags": {
|
||||||
|
"description": "AllowTags is a regex pattern for tags to allow.\nThis acts as the default if not overridden.",
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"forceUpdate": {
|
||||||
|
"default": false,
|
||||||
|
"description": "ForceUpdate specifies whether updates should be forced.\nThis acts as the default if not overridden.",
|
||||||
|
"type": "boolean"
|
||||||
|
},
|
||||||
|
"ignoreTags": {
|
||||||
|
"description": "IgnoreTags is a list of glob-like patterns of tags to ignore.\nThis acts as the default and can be overridden at more specific levels.",
|
||||||
|
"items": {
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"type": "array",
|
||||||
|
"x-kubernetes-list-type": "atomic"
|
||||||
|
},
|
||||||
|
"platforms": {
|
||||||
|
"description": "Platforms specifies a list of target platforms (e.g., \"linux/amd64\", \"linux/arm64\").\nIf specified, the image updater will consider these platforms when checking for new versions or digests.",
|
||||||
|
"items": {
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"type": "array",
|
||||||
|
"x-kubernetes-list-type": "atomic"
|
||||||
|
},
|
||||||
|
"pullSecret": {
|
||||||
|
"description": "PullSecret is the pull secret to use for images.\nThis acts as the default if not overridden.",
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"updateStrategy": {
|
||||||
|
"default": "semver",
|
||||||
|
"description": "UpdateStrategy defines the update strategy to apply.\nExamples: \"semver\", \"latest\", \"digest\", \"name\".\nThis acts as the default if not overridden at a more specific level.",
|
||||||
|
"type": "string"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"type": "object",
|
||||||
|
"additionalProperties": false
|
||||||
|
},
|
||||||
|
"imageName": {
|
||||||
|
"description": "ImageName is the full identifier of the image to be tracked,\nincluding the registry (if not Docker Hub), the image name, and an initial/current tag or version.\nThis is the string used to query the container registry and also as a base for finding updates.\nExample: \"docker.io/library/nginx:1.17.10\", \"quay.io/prometheus/node-exporter:v1.5.0\".\nThis field is mandatory.",
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"manifestTargets": {
|
||||||
|
"description": "ManifestTarget defines how and where to update this image in Kubernetes manifests.\nOnly one of Helm or Kustomize should be specified within this block.\nThis whole block is optional if the image update isn't written to a manifest in a structured way.",
|
||||||
|
"properties": {
|
||||||
|
"helm": {
|
||||||
|
"description": "Helm specifies update parameters if the target manifest is managed by Helm\nand updates are to be made to Helm values files.",
|
||||||
|
"properties": {
|
||||||
|
"name": {
|
||||||
|
"description": "Name is the dot-separated path to the Helm key for the image repository/name part.\nExample: \"image.repository\", \"frontend.deployment.image.name\".\nIf neither spec nor name/tag are set, defaults to \"image.name\".\nIf spec is set, this field is ignored.",
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"spec": {
|
||||||
|
"description": "Spec is the dot-separated path to a Helm key where the full image string\n(e.g., \"image/name:1.0\") should be written.\nUse this if your Helm chart expects the entire image reference in a single field,\nrather than separate name/tag fields. If this is set, name and tag will be ignored.",
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"tag": {
|
||||||
|
"description": "Tag is the dot-separated path to the Helm key for the image tag part.\nExample: \"image.tag\", \"frontend.deployment.image.version\".\nIf neither spec nor name/tag are set, defaults to \"image.tag\".\nIf spec is set, this field is ignored.",
|
||||||
|
"type": "string"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"type": "object",
|
||||||
|
"additionalProperties": false
|
||||||
|
},
|
||||||
|
"kustomize": {
|
||||||
|
"description": "Kustomize specifies update parameters if the target manifest is managed by Kustomize\nand updates involve changing image tags in Kustomize configurations.",
|
||||||
|
"properties": {
|
||||||
|
"name": {
|
||||||
|
"description": "Name is the image name (which can include the registry and an initial tag)\nas it appears in the `images` list of a kustomization.yaml file that needs to be updated.\nThe updater will typically change the tag or add a digest to this entry.\nExample: \"docker.io/library/nginx\".\nThis field is required if the Kustomize target is used.",
|
||||||
|
"type": "string"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"required": [
|
||||||
|
"name"
|
||||||
|
],
|
||||||
|
"type": "object",
|
||||||
|
"additionalProperties": false
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"type": "object",
|
||||||
|
"x-kubernetes-validations": [
|
||||||
|
{
|
||||||
|
"message": "Exactly one of helm or kustomize must be specified within manifestTargets if the block is present.",
|
||||||
|
"rule": "has(self.helm) ? !has(self.kustomize) : has(self.kustomize)"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"additionalProperties": false
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"required": [
|
||||||
|
"alias",
|
||||||
|
"imageName"
|
||||||
|
],
|
||||||
|
"type": "object",
|
||||||
|
"additionalProperties": false
|
||||||
|
},
|
||||||
|
"type": "array",
|
||||||
|
"x-kubernetes-list-map-keys": [
|
||||||
|
"alias"
|
||||||
|
],
|
||||||
|
"x-kubernetes-list-type": "map"
|
||||||
|
},
|
||||||
|
"labelSelectors": {
|
||||||
|
"description": "LabelSelectors indicates the label selectors to apply for application selection",
|
||||||
|
"properties": {
|
||||||
|
"matchExpressions": {
|
||||||
|
"description": "matchExpressions is a list of label selector requirements. The requirements are ANDed.",
|
||||||
|
"items": {
|
||||||
|
"description": "A label selector requirement is a selector that contains values, a key, and an operator that\nrelates the key and values.",
|
||||||
|
"properties": {
|
||||||
|
"key": {
|
||||||
|
"description": "key is the label key that the selector applies to.",
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"operator": {
|
||||||
|
"description": "operator represents a key's relationship to a set of values.\nValid operators are In, NotIn, Exists and DoesNotExist.",
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"values": {
|
||||||
|
"description": "values is an array of string values. If the operator is In or NotIn,\nthe values array must be non-empty. If the operator is Exists or DoesNotExist,\nthe values array must be empty. This array is replaced during a strategic\nmerge patch.",
|
||||||
|
"items": {
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"type": "array",
|
||||||
|
"x-kubernetes-list-type": "atomic"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"required": [
|
||||||
|
"key",
|
||||||
|
"operator"
|
||||||
|
],
|
||||||
|
"type": "object",
|
||||||
|
"additionalProperties": false
|
||||||
|
},
|
||||||
|
"type": "array",
|
||||||
|
"x-kubernetes-list-type": "atomic"
|
||||||
|
},
|
||||||
|
"matchLabels": {
|
||||||
|
"additionalProperties": {
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"description": "matchLabels is a map of {key,value} pairs. A single {key,value} in the matchLabels\nmap is equivalent to an element of matchExpressions, whose key field is \"key\", the\noperator is \"In\", and the values array contains only \"value\". The requirements are ANDed.",
|
||||||
|
"type": "object"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"type": "object",
|
||||||
|
"x-kubernetes-map-type": "atomic",
|
||||||
|
"additionalProperties": false
|
||||||
|
},
|
||||||
|
"namePattern": {
|
||||||
|
"description": "NamePattern indicates the glob pattern for application name",
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"useAnnotations": {
|
||||||
|
"default": false,
|
||||||
|
"description": "UseAnnotations When true, read image configuration from Application's\nargocd-image-updater.argoproj.io/* annotations instead of\nrequiring explicit Images[] configuration in this CR.\nWhen this field is set to true, only namePattern and labelSelectors are used for\napplication selection. All other fields (CommonUpdateSettings, WriteBackConfig, Images)\nare ignored.",
|
||||||
|
"type": "boolean"
|
||||||
|
},
|
||||||
|
"writeBackConfig": {
|
||||||
|
"description": "WriteBackConfig overrides the global WriteBackConfig settings for applications\nmatched by this selector.\nThis field is ignored when UseAnnotations is true.",
|
||||||
|
"properties": {
|
||||||
|
"gitConfig": {
|
||||||
|
"description": "GitConfig provides Git configuration settings if the write-back method involves Git.\nThis can only be used when method is \"git\" or starts with \"git:\".",
|
||||||
|
"properties": {
|
||||||
|
"branch": {
|
||||||
|
"description": "Branch to commit updates to.\nRequired if write-back method is Git and this is not specified at the spec level.",
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"pullRequest": {
|
||||||
|
"description": "PullRequest configures creation of pull requests when writing back image updates to Git.\nWhen set, the controller opens a PR instead of pushing to the branch.\nIf not specified write back config method is `git`.",
|
||||||
|
"properties": {
|
||||||
|
"github": {
|
||||||
|
"description": "GitHub configures PR creation via the GitHub API.",
|
||||||
|
"type": "object"
|
||||||
|
},
|
||||||
|
"gitlab": {
|
||||||
|
"description": "GitLab configures MR creation via the GitLab API.",
|
||||||
|
"type": "object"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"type": "object",
|
||||||
|
"x-kubernetes-validations": [
|
||||||
|
{
|
||||||
|
"message": "Exactly one of github or gitlab must be set",
|
||||||
|
"rule": "(has(self.github) ? 1 : 0) + (has(self.gitlab) ? 1 : 0) == 1"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"additionalProperties": false
|
||||||
|
},
|
||||||
|
"repository": {
|
||||||
|
"description": "Repository URL to commit changes to.\nIf not specified here or at the spec level, the controller MUST infer it from the\nArgo CD Application's `spec.source.repoURL`. This field allows overriding that.",
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"writeBackTarget": {
|
||||||
|
"description": "WriteBackTarget defines the path and type of file to update in the Git repository.\nExamples: \"helmvalues:./helm/values.yaml\", \"kustomization:./kustomize/overlays/production\".\nFor ApplicationSet usage, `{{ .app.path.path }}` should be resolved by ApplicationSet\nbefore this CR is generated, resulting in a concrete path here.\nRequired if write-back method is Git and this is not specified at the spec level.",
|
||||||
|
"type": "string"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"type": "object",
|
||||||
|
"additionalProperties": false
|
||||||
|
},
|
||||||
|
"method": {
|
||||||
|
"default": "argocd",
|
||||||
|
"description": "Method defines the method for writing back updated image versions.\nThis acts as the default if not overridden. If not specified, defaults to \"argocd\".",
|
||||||
|
"pattern": "^(argocd|git|git:[a-zA-Z0-9][a-zA-Z0-9-._/:]*)$",
|
||||||
|
"type": "string"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"required": [
|
||||||
|
"method"
|
||||||
|
],
|
||||||
|
"type": "object",
|
||||||
|
"additionalProperties": false
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"required": [
|
||||||
|
"namePattern"
|
||||||
|
],
|
||||||
|
"type": "object",
|
||||||
|
"x-kubernetes-validations": [
|
||||||
|
{
|
||||||
|
"message": "Either useAnnotations must be true, or images must be provided with at least one item",
|
||||||
|
"rule": "!(has(self.useAnnotations) && self.useAnnotations == true) ? (has(self.images) && size(self.images) > 0) : true"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"additionalProperties": false
|
||||||
|
},
|
||||||
|
"minItems": 1,
|
||||||
|
"type": "array",
|
||||||
|
"x-kubernetes-list-map-keys": [
|
||||||
|
"namePattern"
|
||||||
|
],
|
||||||
|
"x-kubernetes-list-type": "map"
|
||||||
|
},
|
||||||
|
"commonUpdateSettings": {
|
||||||
|
"description": "CommonUpdateSettings provides global default settings for update strategies,\ntag filtering, pull secrets, etc., for all applications matched by this CR.\nThese can be overridden at the ApplicationRef or ImageConfig level.",
|
||||||
|
"properties": {
|
||||||
|
"allowTags": {
|
||||||
|
"description": "AllowTags is a regex pattern for tags to allow.\nThis acts as the default if not overridden.",
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"forceUpdate": {
|
||||||
|
"default": false,
|
||||||
|
"description": "ForceUpdate specifies whether updates should be forced.\nThis acts as the default if not overridden.",
|
||||||
|
"type": "boolean"
|
||||||
|
},
|
||||||
|
"ignoreTags": {
|
||||||
|
"description": "IgnoreTags is a list of glob-like patterns of tags to ignore.\nThis acts as the default and can be overridden at more specific levels.",
|
||||||
|
"items": {
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"type": "array",
|
||||||
|
"x-kubernetes-list-type": "atomic"
|
||||||
|
},
|
||||||
|
"platforms": {
|
||||||
|
"description": "Platforms specifies a list of target platforms (e.g., \"linux/amd64\", \"linux/arm64\").\nIf specified, the image updater will consider these platforms when checking for new versions or digests.",
|
||||||
|
"items": {
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"type": "array",
|
||||||
|
"x-kubernetes-list-type": "atomic"
|
||||||
|
},
|
||||||
|
"pullSecret": {
|
||||||
|
"description": "PullSecret is the pull secret to use for images.\nThis acts as the default if not overridden.",
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"updateStrategy": {
|
||||||
|
"default": "semver",
|
||||||
|
"description": "UpdateStrategy defines the update strategy to apply.\nExamples: \"semver\", \"latest\", \"digest\", \"name\".\nThis acts as the default if not overridden at a more specific level.",
|
||||||
|
"type": "string"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"type": "object",
|
||||||
|
"additionalProperties": false
|
||||||
|
},
|
||||||
|
"writeBackConfig": {
|
||||||
|
"description": "WriteBackConfig provides global default settings for how and where to write back image updates.\nThis can be overridden at the ApplicationRef level.",
|
||||||
|
"properties": {
|
||||||
|
"gitConfig": {
|
||||||
|
"description": "GitConfig provides Git configuration settings if the write-back method involves Git.\nThis can only be used when method is \"git\" or starts with \"git:\".",
|
||||||
|
"properties": {
|
||||||
|
"branch": {
|
||||||
|
"description": "Branch to commit updates to.\nRequired if write-back method is Git and this is not specified at the spec level.",
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"pullRequest": {
|
||||||
|
"description": "PullRequest configures creation of pull requests when writing back image updates to Git.\nWhen set, the controller opens a PR instead of pushing to the branch.\nIf not specified write back config method is `git`.",
|
||||||
|
"properties": {
|
||||||
|
"github": {
|
||||||
|
"description": "GitHub configures PR creation via the GitHub API.",
|
||||||
|
"type": "object"
|
||||||
|
},
|
||||||
|
"gitlab": {
|
||||||
|
"description": "GitLab configures MR creation via the GitLab API.",
|
||||||
|
"type": "object"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"type": "object",
|
||||||
|
"x-kubernetes-validations": [
|
||||||
|
{
|
||||||
|
"message": "Exactly one of github or gitlab must be set",
|
||||||
|
"rule": "(has(self.github) ? 1 : 0) + (has(self.gitlab) ? 1 : 0) == 1"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"additionalProperties": false
|
||||||
|
},
|
||||||
|
"repository": {
|
||||||
|
"description": "Repository URL to commit changes to.\nIf not specified here or at the spec level, the controller MUST infer it from the\nArgo CD Application's `spec.source.repoURL`. This field allows overriding that.",
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"writeBackTarget": {
|
||||||
|
"description": "WriteBackTarget defines the path and type of file to update in the Git repository.\nExamples: \"helmvalues:./helm/values.yaml\", \"kustomization:./kustomize/overlays/production\".\nFor ApplicationSet usage, `{{ .app.path.path }}` should be resolved by ApplicationSet\nbefore this CR is generated, resulting in a concrete path here.\nRequired if write-back method is Git and this is not specified at the spec level.",
|
||||||
|
"type": "string"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"type": "object",
|
||||||
|
"additionalProperties": false
|
||||||
|
},
|
||||||
|
"method": {
|
||||||
|
"default": "argocd",
|
||||||
|
"description": "Method defines the method for writing back updated image versions.\nThis acts as the default if not overridden. If not specified, defaults to \"argocd\".",
|
||||||
|
"pattern": "^(argocd|git|git:[a-zA-Z0-9][a-zA-Z0-9-._/:]*)$",
|
||||||
|
"type": "string"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"required": [
|
||||||
|
"method"
|
||||||
|
],
|
||||||
|
"type": "object",
|
||||||
|
"additionalProperties": false
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"required": [
|
||||||
|
"applicationRefs"
|
||||||
|
],
|
||||||
|
"type": "object",
|
||||||
|
"additionalProperties": false
|
||||||
|
},
|
||||||
|
"status": {
|
||||||
|
"description": "ImageUpdaterStatus defines the observed state of ImageUpdater",
|
||||||
|
"properties": {
|
||||||
|
"applicationsMatched": {
|
||||||
|
"description": "ApplicationsMatched is the number of Argo CD applications matched by this CR's selectors.",
|
||||||
|
"format": "int32",
|
||||||
|
"minimum": 0,
|
||||||
|
"type": "integer"
|
||||||
|
},
|
||||||
|
"conditions": {
|
||||||
|
"description": "Conditions represent the latest available observations of the resource's state.",
|
||||||
|
"items": {
|
||||||
|
"description": "Condition contains details for one aspect of the current state of this API Resource.",
|
||||||
|
"properties": {
|
||||||
|
"lastTransitionTime": {
|
||||||
|
"description": "lastTransitionTime is the last time the condition transitioned from one status to another.\nThis should be when the underlying condition changed. If that is not known, then using the time when the API field changed is acceptable.",
|
||||||
|
"format": "date-time",
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"message": {
|
||||||
|
"description": "message is a human readable message indicating details about the transition.\nThis may be an empty string.",
|
||||||
|
"maxLength": 32768,
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"observedGeneration": {
|
||||||
|
"description": "observedGeneration represents the .metadata.generation that the condition was set based upon.\nFor instance, if .metadata.generation is currently 12, but the .status.conditions[x].observedGeneration is 9, the condition is out of date\nwith respect to the current state of the instance.",
|
||||||
|
"format": "int64",
|
||||||
|
"minimum": 0,
|
||||||
|
"type": "integer"
|
||||||
|
},
|
||||||
|
"reason": {
|
||||||
|
"description": "reason contains a programmatic identifier indicating the reason for the condition's last transition.\nProducers of specific condition types may define expected values and meanings for this field,\nand whether the values are considered a guaranteed API.\nThe value should be a CamelCase string.\nThis field may not be empty.",
|
||||||
|
"maxLength": 1024,
|
||||||
|
"minLength": 1,
|
||||||
|
"pattern": "^[A-Za-z]([A-Za-z0-9_,:]*[A-Za-z0-9_])?$",
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"status": {
|
||||||
|
"description": "status of the condition, one of True, False, Unknown.",
|
||||||
|
"enum": [
|
||||||
|
"True",
|
||||||
|
"False",
|
||||||
|
"Unknown"
|
||||||
|
],
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"type": {
|
||||||
|
"description": "type of condition in CamelCase or in foo.example.com/CamelCase.",
|
||||||
|
"maxLength": 316,
|
||||||
|
"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])$",
|
||||||
|
"type": "string"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"required": [
|
||||||
|
"lastTransitionTime",
|
||||||
|
"message",
|
||||||
|
"reason",
|
||||||
|
"status",
|
||||||
|
"type"
|
||||||
|
],
|
||||||
|
"type": "object",
|
||||||
|
"additionalProperties": false
|
||||||
|
},
|
||||||
|
"type": "array",
|
||||||
|
"x-kubernetes-list-map-keys": [
|
||||||
|
"type"
|
||||||
|
],
|
||||||
|
"x-kubernetes-list-type": "map"
|
||||||
|
},
|
||||||
|
"imagesManaged": {
|
||||||
|
"description": "ImagesManaged is the number of images that were eligible for update checking.",
|
||||||
|
"format": "int32",
|
||||||
|
"minimum": 0,
|
||||||
|
"type": "integer"
|
||||||
|
},
|
||||||
|
"lastCheckedAt": {
|
||||||
|
"description": "LastCheckedAt indicates when the controller last checked for image updates.",
|
||||||
|
"format": "date-time",
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"lastUpdatedAt": {
|
||||||
|
"description": "LastUpdatedAt indicates when the controller last performed an image update.",
|
||||||
|
"format": "date-time",
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"observedGeneration": {
|
||||||
|
"description": "ObservedGeneration is the most recent generation observed by the controller.",
|
||||||
|
"format": "int64",
|
||||||
|
"minimum": 0,
|
||||||
|
"type": "integer"
|
||||||
|
},
|
||||||
|
"recentUpdates": {
|
||||||
|
"description": "RecentUpdates contains the list of image updates performed during the last update cycle.",
|
||||||
|
"items": {
|
||||||
|
"description": "RecentUpdate records a single image update performed during the last update.",
|
||||||
|
"properties": {
|
||||||
|
"alias": {
|
||||||
|
"description": "Alias is the alias of the image configuration that was updated.",
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"applicationsUpdated": {
|
||||||
|
"description": "ApplicationsUpdated is the number of applications in which this image was updated.",
|
||||||
|
"format": "int32",
|
||||||
|
"minimum": 0,
|
||||||
|
"type": "integer"
|
||||||
|
},
|
||||||
|
"image": {
|
||||||
|
"description": "Image is the full image reference.",
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"message": {
|
||||||
|
"description": "Message provides a human-readable description of the update action.",
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"newVersion": {
|
||||||
|
"description": "NewVersion is the new tag or digest the image was updated to.",
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"updatedAt": {
|
||||||
|
"description": "UpdatedAt is the timestamp when the update was applied.",
|
||||||
|
"format": "date-time",
|
||||||
|
"type": "string"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"required": [
|
||||||
|
"alias",
|
||||||
|
"applicationsUpdated",
|
||||||
|
"image",
|
||||||
|
"newVersion",
|
||||||
|
"updatedAt"
|
||||||
|
],
|
||||||
|
"type": "object",
|
||||||
|
"additionalProperties": false
|
||||||
|
},
|
||||||
|
"type": "array",
|
||||||
|
"x-kubernetes-list-type": "atomic"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"type": "object",
|
||||||
|
"additionalProperties": false
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"type": "object"
|
||||||
|
}
|
||||||
@@ -0,0 +1,199 @@
|
|||||||
|
{
|
||||||
|
"description": "KeycloakAuthenticationFlow manages a Keycloak authentication flow.",
|
||||||
|
"properties": {
|
||||||
|
"apiVersion": {
|
||||||
|
"description": "APIVersion defines the versioned schema of this representation of an object.\nServers should convert recognized schemas to the latest internal value, and\nmay reject unrecognized values.\nMore info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources",
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"kind": {
|
||||||
|
"description": "Kind is a string value representing the REST resource this object represents.\nServers may infer this from the endpoint the client submits requests to.\nCannot be updated.\nIn CamelCase.\nMore info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds",
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"metadata": {
|
||||||
|
"type": "object"
|
||||||
|
},
|
||||||
|
"spec": {
|
||||||
|
"description": "KeycloakAuthenticationFlowSpec defines the desired state of KeycloakAuthenticationFlow",
|
||||||
|
"properties": {
|
||||||
|
"alias": {
|
||||||
|
"description": "Alias is the unique identifier for this flow within the realm.",
|
||||||
|
"minLength": 1,
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"clusterRealmRef": {
|
||||||
|
"description": "ClusterRealmRef is a reference to a ClusterKeycloakRealm.\nOne of realmRef or clusterRealmRef must be specified.",
|
||||||
|
"properties": {
|
||||||
|
"name": {
|
||||||
|
"description": "Name of the cluster-scoped resource",
|
||||||
|
"type": "string"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"required": [
|
||||||
|
"name"
|
||||||
|
],
|
||||||
|
"type": "object",
|
||||||
|
"additionalProperties": false
|
||||||
|
},
|
||||||
|
"description": {
|
||||||
|
"description": "Description is a human-readable description of the flow.",
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"executions": {
|
||||||
|
"description": "Executions is the ordered list of executions for this flow as a JSON\narray. Each entry is either a leaf authenticator or a nested sub-flow.\n\nLeaf authenticator (object fields):\n\n authenticator: Keycloak provider ID, e.g. \"auth-cookie\".\n requirement: REQUIRED | ALTERNATIVE | DISABLED | CONDITIONAL.\n authenticatorConfig: optional map[string]string applied to the\n execution after creation.\n\nSub-flow (object fields):\n\n subFlow: { alias, providerId, description? } \u2014 the\n child flow definition. providerId is typically\n \"basic-flow\" or \"form-flow\"; \"form-flow\" is\n required when the children are FormAction\n providers (e.g. registration-user-creation).\n requirement: REQUIRED | ALTERNATIVE | DISABLED | CONDITIONAL.\n executions: ordered list of child executions, recursively\n using the same shape. As a convenience, child\n executions may also be placed inside\n subFlow.executions; if both are present, the\n inline list precedes the sibling list.\n\nNesting depth is unconstrained.",
|
||||||
|
"x-kubernetes-preserve-unknown-fields": true
|
||||||
|
},
|
||||||
|
"providerId": {
|
||||||
|
"description": "ProviderId is the top-level flow type. Keycloak ships with \"basic-flow\"\nand \"client-flow\"; sub-flows may additionally use \"form-flow\".",
|
||||||
|
"minLength": 1,
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"realmRef": {
|
||||||
|
"description": "RealmRef is a reference to a KeycloakRealm.\nOne of realmRef or clusterRealmRef must be specified.",
|
||||||
|
"properties": {
|
||||||
|
"name": {
|
||||||
|
"description": "Name of the resource",
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"namespace": {
|
||||||
|
"description": "Namespace of the resource (optional, defaults to the same namespace)",
|
||||||
|
"type": "string"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"required": [
|
||||||
|
"name"
|
||||||
|
],
|
||||||
|
"type": "object",
|
||||||
|
"additionalProperties": false
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"required": [
|
||||||
|
"alias",
|
||||||
|
"providerId"
|
||||||
|
],
|
||||||
|
"type": "object",
|
||||||
|
"additionalProperties": false
|
||||||
|
},
|
||||||
|
"status": {
|
||||||
|
"description": "KeycloakAuthenticationFlowStatus defines the observed state of KeycloakAuthenticationFlow",
|
||||||
|
"properties": {
|
||||||
|
"conditions": {
|
||||||
|
"description": "Conditions represent the latest available observations.",
|
||||||
|
"items": {
|
||||||
|
"description": "Condition contains details for one aspect of the current state of this API Resource.",
|
||||||
|
"properties": {
|
||||||
|
"lastTransitionTime": {
|
||||||
|
"description": "lastTransitionTime is the last time the condition transitioned from one status to another.\nThis should be when the underlying condition changed. If that is not known, then using the time when the API field changed is acceptable.",
|
||||||
|
"format": "date-time",
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"message": {
|
||||||
|
"description": "message is a human readable message indicating details about the transition.\nThis may be an empty string.",
|
||||||
|
"maxLength": 32768,
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"observedGeneration": {
|
||||||
|
"description": "observedGeneration represents the .metadata.generation that the condition was set based upon.\nFor instance, if .metadata.generation is currently 12, but the .status.conditions[x].observedGeneration is 9, the condition is out of date\nwith respect to the current state of the instance.",
|
||||||
|
"format": "int64",
|
||||||
|
"minimum": 0,
|
||||||
|
"type": "integer"
|
||||||
|
},
|
||||||
|
"reason": {
|
||||||
|
"description": "reason contains a programmatic identifier indicating the reason for the condition's last transition.\nProducers of specific condition types may define expected values and meanings for this field,\nand whether the values are considered a guaranteed API.\nThe value should be a CamelCase string.\nThis field may not be empty.",
|
||||||
|
"maxLength": 1024,
|
||||||
|
"minLength": 1,
|
||||||
|
"pattern": "^[A-Za-z]([A-Za-z0-9_,:]*[A-Za-z0-9_])?$",
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"status": {
|
||||||
|
"description": "status of the condition, one of True, False, Unknown.",
|
||||||
|
"enum": [
|
||||||
|
"True",
|
||||||
|
"False",
|
||||||
|
"Unknown"
|
||||||
|
],
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"type": {
|
||||||
|
"description": "type of condition in CamelCase or in foo.example.com/CamelCase.",
|
||||||
|
"maxLength": 316,
|
||||||
|
"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])$",
|
||||||
|
"type": "string"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"required": [
|
||||||
|
"lastTransitionTime",
|
||||||
|
"message",
|
||||||
|
"reason",
|
||||||
|
"status",
|
||||||
|
"type"
|
||||||
|
],
|
||||||
|
"type": "object",
|
||||||
|
"additionalProperties": false
|
||||||
|
},
|
||||||
|
"type": "array"
|
||||||
|
},
|
||||||
|
"flowID": {
|
||||||
|
"description": "FlowID is the Keycloak internal ID of the top-level flow.",
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"instance": {
|
||||||
|
"description": "Instance contains the resolved instance reference.",
|
||||||
|
"properties": {
|
||||||
|
"clusterInstanceRef": {
|
||||||
|
"description": "ClusterInstanceRef is the name of the cluster instance",
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"instanceRef": {
|
||||||
|
"description": "InstanceRef is the name of the namespaced instance",
|
||||||
|
"type": "string"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"type": "object",
|
||||||
|
"additionalProperties": false
|
||||||
|
},
|
||||||
|
"message": {
|
||||||
|
"description": "Message contains additional information.",
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"observedGeneration": {
|
||||||
|
"description": "ObservedGeneration is the generation of the spec that was last processed.",
|
||||||
|
"format": "int64",
|
||||||
|
"type": "integer"
|
||||||
|
},
|
||||||
|
"ready": {
|
||||||
|
"description": "Ready indicates if the flow is synchronized with Keycloak.",
|
||||||
|
"type": "boolean"
|
||||||
|
},
|
||||||
|
"realm": {
|
||||||
|
"description": "Realm contains the resolved realm reference.",
|
||||||
|
"properties": {
|
||||||
|
"clusterRealmRef": {
|
||||||
|
"description": "ClusterRealmRef is the name of the cluster realm",
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"realmRef": {
|
||||||
|
"description": "RealmRef is the name of the namespaced realm",
|
||||||
|
"type": "string"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"type": "object",
|
||||||
|
"additionalProperties": false
|
||||||
|
},
|
||||||
|
"resourcePath": {
|
||||||
|
"description": "ResourcePath is the Keycloak API path for this flow.",
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"status": {
|
||||||
|
"description": "Status is a human-readable status message.",
|
||||||
|
"type": "string"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"required": [
|
||||||
|
"ready"
|
||||||
|
],
|
||||||
|
"type": "object",
|
||||||
|
"additionalProperties": false
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"type": "object"
|
||||||
|
}
|
||||||
@@ -0,0 +1,213 @@
|
|||||||
|
{
|
||||||
|
"description": "KeycloakClient defines a client within a KeycloakRealm",
|
||||||
|
"properties": {
|
||||||
|
"apiVersion": {
|
||||||
|
"description": "APIVersion defines the versioned schema of this representation of an object.\nServers should convert recognized schemas to the latest internal value, and\nmay reject unrecognized values.\nMore info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources",
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"kind": {
|
||||||
|
"description": "Kind is a string value representing the REST resource this object represents.\nServers may infer this from the endpoint the client submits requests to.\nCannot be updated.\nIn CamelCase.\nMore info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds",
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"metadata": {
|
||||||
|
"type": "object"
|
||||||
|
},
|
||||||
|
"spec": {
|
||||||
|
"description": "KeycloakClientSpec defines the desired state of KeycloakClient",
|
||||||
|
"properties": {
|
||||||
|
"clientId": {
|
||||||
|
"description": "ClientId is the client ID in Keycloak (defaults to metadata.name)",
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"clientSecretRef": {
|
||||||
|
"description": "ClientSecretRef configures the Kubernetes Secret for client credentials.\nIf the secret exists, its value is used. If it doesn't exist and Create is true,\nthe operator auto-generates a secret and creates it.",
|
||||||
|
"properties": {
|
||||||
|
"clientIdKey": {
|
||||||
|
"description": "ClientIdKey is the key for the client ID in the secret.\nDefaults to \"client-id\".",
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"clientSecretKey": {
|
||||||
|
"description": "ClientSecretKey is the key for the client secret value in the secret.\nDefaults to \"client-secret\".",
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"create": {
|
||||||
|
"default": true,
|
||||||
|
"description": "Create determines behavior when the secret doesn't exist.\nIf true (default): auto-generate a secret and create the Secret.\nIf false: error if the secret doesn't exist (strict mode for GitOps).",
|
||||||
|
"type": "boolean"
|
||||||
|
},
|
||||||
|
"name": {
|
||||||
|
"description": "Name of the Kubernetes Secret",
|
||||||
|
"type": "string"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"required": [
|
||||||
|
"name"
|
||||||
|
],
|
||||||
|
"type": "object",
|
||||||
|
"additionalProperties": false
|
||||||
|
},
|
||||||
|
"clusterRealmRef": {
|
||||||
|
"description": "ClusterRealmRef is a reference to a ClusterKeycloakRealm\nOne of realmRef or clusterRealmRef must be specified",
|
||||||
|
"properties": {
|
||||||
|
"name": {
|
||||||
|
"description": "Name of the cluster-scoped resource",
|
||||||
|
"type": "string"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"required": [
|
||||||
|
"name"
|
||||||
|
],
|
||||||
|
"type": "object",
|
||||||
|
"additionalProperties": false
|
||||||
|
},
|
||||||
|
"definition": {
|
||||||
|
"description": "Definition contains the Keycloak ClientRepresentation",
|
||||||
|
"type": "object",
|
||||||
|
"x-kubernetes-preserve-unknown-fields": true
|
||||||
|
},
|
||||||
|
"realmRef": {
|
||||||
|
"description": "RealmRef is a reference to a KeycloakRealm\nOne of realmRef or clusterRealmRef must be specified",
|
||||||
|
"properties": {
|
||||||
|
"name": {
|
||||||
|
"description": "Name of the resource",
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"namespace": {
|
||||||
|
"description": "Namespace of the resource (optional, defaults to the same namespace)",
|
||||||
|
"type": "string"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"required": [
|
||||||
|
"name"
|
||||||
|
],
|
||||||
|
"type": "object",
|
||||||
|
"additionalProperties": false
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"type": "object",
|
||||||
|
"additionalProperties": false
|
||||||
|
},
|
||||||
|
"status": {
|
||||||
|
"description": "KeycloakClientStatus defines the observed state of KeycloakClient",
|
||||||
|
"properties": {
|
||||||
|
"clientUUID": {
|
||||||
|
"description": "ClientUUID is the Keycloak internal ID",
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"conditions": {
|
||||||
|
"description": "Conditions represent the latest available observations",
|
||||||
|
"items": {
|
||||||
|
"description": "Condition contains details for one aspect of the current state of this API Resource.",
|
||||||
|
"properties": {
|
||||||
|
"lastTransitionTime": {
|
||||||
|
"description": "lastTransitionTime is the last time the condition transitioned from one status to another.\nThis should be when the underlying condition changed. If that is not known, then using the time when the API field changed is acceptable.",
|
||||||
|
"format": "date-time",
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"message": {
|
||||||
|
"description": "message is a human readable message indicating details about the transition.\nThis may be an empty string.",
|
||||||
|
"maxLength": 32768,
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"observedGeneration": {
|
||||||
|
"description": "observedGeneration represents the .metadata.generation that the condition was set based upon.\nFor instance, if .metadata.generation is currently 12, but the .status.conditions[x].observedGeneration is 9, the condition is out of date\nwith respect to the current state of the instance.",
|
||||||
|
"format": "int64",
|
||||||
|
"minimum": 0,
|
||||||
|
"type": "integer"
|
||||||
|
},
|
||||||
|
"reason": {
|
||||||
|
"description": "reason contains a programmatic identifier indicating the reason for the condition's last transition.\nProducers of specific condition types may define expected values and meanings for this field,\nand whether the values are considered a guaranteed API.\nThe value should be a CamelCase string.\nThis field may not be empty.",
|
||||||
|
"maxLength": 1024,
|
||||||
|
"minLength": 1,
|
||||||
|
"pattern": "^[A-Za-z]([A-Za-z0-9_,:]*[A-Za-z0-9_])?$",
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"status": {
|
||||||
|
"description": "status of the condition, one of True, False, Unknown.",
|
||||||
|
"enum": [
|
||||||
|
"True",
|
||||||
|
"False",
|
||||||
|
"Unknown"
|
||||||
|
],
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"type": {
|
||||||
|
"description": "type of condition in CamelCase or in foo.example.com/CamelCase.",
|
||||||
|
"maxLength": 316,
|
||||||
|
"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])$",
|
||||||
|
"type": "string"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"required": [
|
||||||
|
"lastTransitionTime",
|
||||||
|
"message",
|
||||||
|
"reason",
|
||||||
|
"status",
|
||||||
|
"type"
|
||||||
|
],
|
||||||
|
"type": "object",
|
||||||
|
"additionalProperties": false
|
||||||
|
},
|
||||||
|
"type": "array"
|
||||||
|
},
|
||||||
|
"instance": {
|
||||||
|
"description": "Instance contains the resolved instance reference",
|
||||||
|
"properties": {
|
||||||
|
"clusterInstanceRef": {
|
||||||
|
"description": "ClusterInstanceRef is the name of the cluster instance",
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"instanceRef": {
|
||||||
|
"description": "InstanceRef is the name of the namespaced instance",
|
||||||
|
"type": "string"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"type": "object",
|
||||||
|
"additionalProperties": false
|
||||||
|
},
|
||||||
|
"message": {
|
||||||
|
"description": "Message contains additional information",
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"observedGeneration": {
|
||||||
|
"description": "ObservedGeneration is the generation of the spec that was last processed",
|
||||||
|
"format": "int64",
|
||||||
|
"type": "integer"
|
||||||
|
},
|
||||||
|
"ready": {
|
||||||
|
"description": "Ready indicates if the client is ready",
|
||||||
|
"type": "boolean"
|
||||||
|
},
|
||||||
|
"realm": {
|
||||||
|
"description": "Realm contains the resolved realm reference",
|
||||||
|
"properties": {
|
||||||
|
"clusterRealmRef": {
|
||||||
|
"description": "ClusterRealmRef is the name of the cluster realm",
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"realmRef": {
|
||||||
|
"description": "RealmRef is the name of the namespaced realm",
|
||||||
|
"type": "string"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"type": "object",
|
||||||
|
"additionalProperties": false
|
||||||
|
},
|
||||||
|
"resourcePath": {
|
||||||
|
"description": "ResourcePath is the Keycloak API path for this client",
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"status": {
|
||||||
|
"description": "Status is a human-readable status message",
|
||||||
|
"type": "string"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"required": [
|
||||||
|
"ready"
|
||||||
|
],
|
||||||
|
"type": "object",
|
||||||
|
"additionalProperties": false
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"type": "object"
|
||||||
|
}
|
||||||
@@ -0,0 +1,176 @@
|
|||||||
|
{
|
||||||
|
"description": "KeycloakClientScope defines a client scope within a KeycloakRealm",
|
||||||
|
"properties": {
|
||||||
|
"apiVersion": {
|
||||||
|
"description": "APIVersion defines the versioned schema of this representation of an object.\nServers should convert recognized schemas to the latest internal value, and\nmay reject unrecognized values.\nMore info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources",
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"kind": {
|
||||||
|
"description": "Kind is a string value representing the REST resource this object represents.\nServers may infer this from the endpoint the client submits requests to.\nCannot be updated.\nIn CamelCase.\nMore info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds",
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"metadata": {
|
||||||
|
"type": "object"
|
||||||
|
},
|
||||||
|
"spec": {
|
||||||
|
"description": "KeycloakClientScopeSpec defines the desired state of KeycloakClientScope",
|
||||||
|
"properties": {
|
||||||
|
"clusterRealmRef": {
|
||||||
|
"description": "ClusterRealmRef is a reference to a ClusterKeycloakRealm\nOne of realmRef or clusterRealmRef must be specified",
|
||||||
|
"properties": {
|
||||||
|
"name": {
|
||||||
|
"description": "Name of the cluster-scoped resource",
|
||||||
|
"type": "string"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"required": [
|
||||||
|
"name"
|
||||||
|
],
|
||||||
|
"type": "object",
|
||||||
|
"additionalProperties": false
|
||||||
|
},
|
||||||
|
"definition": {
|
||||||
|
"description": "Definition contains the Keycloak ClientScopeRepresentation",
|
||||||
|
"type": "object",
|
||||||
|
"x-kubernetes-preserve-unknown-fields": true
|
||||||
|
},
|
||||||
|
"realmRef": {
|
||||||
|
"description": "RealmRef is a reference to a KeycloakRealm\nOne of realmRef or clusterRealmRef must be specified",
|
||||||
|
"properties": {
|
||||||
|
"name": {
|
||||||
|
"description": "Name of the resource",
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"namespace": {
|
||||||
|
"description": "Namespace of the resource (optional, defaults to the same namespace)",
|
||||||
|
"type": "string"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"required": [
|
||||||
|
"name"
|
||||||
|
],
|
||||||
|
"type": "object",
|
||||||
|
"additionalProperties": false
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"required": [
|
||||||
|
"definition"
|
||||||
|
],
|
||||||
|
"type": "object",
|
||||||
|
"additionalProperties": false
|
||||||
|
},
|
||||||
|
"status": {
|
||||||
|
"description": "KeycloakClientScopeStatus defines the observed state of KeycloakClientScope",
|
||||||
|
"properties": {
|
||||||
|
"conditions": {
|
||||||
|
"description": "Conditions represent the latest available observations",
|
||||||
|
"items": {
|
||||||
|
"description": "Condition contains details for one aspect of the current state of this API Resource.",
|
||||||
|
"properties": {
|
||||||
|
"lastTransitionTime": {
|
||||||
|
"description": "lastTransitionTime is the last time the condition transitioned from one status to another.\nThis should be when the underlying condition changed. If that is not known, then using the time when the API field changed is acceptable.",
|
||||||
|
"format": "date-time",
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"message": {
|
||||||
|
"description": "message is a human readable message indicating details about the transition.\nThis may be an empty string.",
|
||||||
|
"maxLength": 32768,
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"observedGeneration": {
|
||||||
|
"description": "observedGeneration represents the .metadata.generation that the condition was set based upon.\nFor instance, if .metadata.generation is currently 12, but the .status.conditions[x].observedGeneration is 9, the condition is out of date\nwith respect to the current state of the instance.",
|
||||||
|
"format": "int64",
|
||||||
|
"minimum": 0,
|
||||||
|
"type": "integer"
|
||||||
|
},
|
||||||
|
"reason": {
|
||||||
|
"description": "reason contains a programmatic identifier indicating the reason for the condition's last transition.\nProducers of specific condition types may define expected values and meanings for this field,\nand whether the values are considered a guaranteed API.\nThe value should be a CamelCase string.\nThis field may not be empty.",
|
||||||
|
"maxLength": 1024,
|
||||||
|
"minLength": 1,
|
||||||
|
"pattern": "^[A-Za-z]([A-Za-z0-9_,:]*[A-Za-z0-9_])?$",
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"status": {
|
||||||
|
"description": "status of the condition, one of True, False, Unknown.",
|
||||||
|
"enum": [
|
||||||
|
"True",
|
||||||
|
"False",
|
||||||
|
"Unknown"
|
||||||
|
],
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"type": {
|
||||||
|
"description": "type of condition in CamelCase or in foo.example.com/CamelCase.",
|
||||||
|
"maxLength": 316,
|
||||||
|
"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])$",
|
||||||
|
"type": "string"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"required": [
|
||||||
|
"lastTransitionTime",
|
||||||
|
"message",
|
||||||
|
"reason",
|
||||||
|
"status",
|
||||||
|
"type"
|
||||||
|
],
|
||||||
|
"type": "object",
|
||||||
|
"additionalProperties": false
|
||||||
|
},
|
||||||
|
"type": "array"
|
||||||
|
},
|
||||||
|
"instance": {
|
||||||
|
"description": "Instance contains the resolved instance reference",
|
||||||
|
"properties": {
|
||||||
|
"clusterInstanceRef": {
|
||||||
|
"description": "ClusterInstanceRef is the name of the cluster instance",
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"instanceRef": {
|
||||||
|
"description": "InstanceRef is the name of the namespaced instance",
|
||||||
|
"type": "string"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"type": "object",
|
||||||
|
"additionalProperties": false
|
||||||
|
},
|
||||||
|
"message": {
|
||||||
|
"description": "Message contains additional information",
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"ready": {
|
||||||
|
"description": "Ready indicates if the client scope is ready",
|
||||||
|
"type": "boolean"
|
||||||
|
},
|
||||||
|
"realm": {
|
||||||
|
"description": "Realm contains the resolved realm reference",
|
||||||
|
"properties": {
|
||||||
|
"clusterRealmRef": {
|
||||||
|
"description": "ClusterRealmRef is the name of the cluster realm",
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"realmRef": {
|
||||||
|
"description": "RealmRef is the name of the namespaced realm",
|
||||||
|
"type": "string"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"type": "object",
|
||||||
|
"additionalProperties": false
|
||||||
|
},
|
||||||
|
"resourcePath": {
|
||||||
|
"description": "ResourcePath is the Keycloak API path for this client scope",
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"status": {
|
||||||
|
"description": "Status is a human-readable status message",
|
||||||
|
"type": "string"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"required": [
|
||||||
|
"ready"
|
||||||
|
],
|
||||||
|
"type": "object",
|
||||||
|
"additionalProperties": false
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"type": "object"
|
||||||
|
}
|
||||||
@@ -0,0 +1,193 @@
|
|||||||
|
{
|
||||||
|
"description": "KeycloakComponent defines a component within a KeycloakRealm",
|
||||||
|
"properties": {
|
||||||
|
"apiVersion": {
|
||||||
|
"description": "APIVersion defines the versioned schema of this representation of an object.\nServers should convert recognized schemas to the latest internal value, and\nmay reject unrecognized values.\nMore info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources",
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"kind": {
|
||||||
|
"description": "Kind is a string value representing the REST resource this object represents.\nServers may infer this from the endpoint the client submits requests to.\nCannot be updated.\nIn CamelCase.\nMore info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds",
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"metadata": {
|
||||||
|
"type": "object"
|
||||||
|
},
|
||||||
|
"spec": {
|
||||||
|
"description": "KeycloakComponentSpec defines the desired state of KeycloakComponent",
|
||||||
|
"properties": {
|
||||||
|
"clusterRealmRef": {
|
||||||
|
"description": "ClusterRealmRef is a reference to a ClusterKeycloakRealm\nOne of realmRef or clusterRealmRef must be specified",
|
||||||
|
"properties": {
|
||||||
|
"name": {
|
||||||
|
"description": "Name of the cluster-scoped resource",
|
||||||
|
"type": "string"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"required": [
|
||||||
|
"name"
|
||||||
|
],
|
||||||
|
"type": "object",
|
||||||
|
"additionalProperties": false
|
||||||
|
},
|
||||||
|
"definition": {
|
||||||
|
"description": "Definition contains the Keycloak ComponentRepresentation",
|
||||||
|
"type": "object",
|
||||||
|
"x-kubernetes-preserve-unknown-fields": true
|
||||||
|
},
|
||||||
|
"realmRef": {
|
||||||
|
"description": "RealmRef is a reference to a KeycloakRealm\nOne of realmRef or clusterRealmRef must be specified",
|
||||||
|
"properties": {
|
||||||
|
"name": {
|
||||||
|
"description": "Name of the resource",
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"namespace": {
|
||||||
|
"description": "Namespace of the resource (optional, defaults to the same namespace)",
|
||||||
|
"type": "string"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"required": [
|
||||||
|
"name"
|
||||||
|
],
|
||||||
|
"type": "object",
|
||||||
|
"additionalProperties": false
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"required": [
|
||||||
|
"definition"
|
||||||
|
],
|
||||||
|
"type": "object",
|
||||||
|
"additionalProperties": false
|
||||||
|
},
|
||||||
|
"status": {
|
||||||
|
"description": "KeycloakComponentStatus defines the observed state of KeycloakComponent",
|
||||||
|
"properties": {
|
||||||
|
"componentID": {
|
||||||
|
"description": "ComponentID is the Keycloak internal component ID",
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"componentName": {
|
||||||
|
"description": "ComponentName is the component name in Keycloak",
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"conditions": {
|
||||||
|
"description": "Conditions represent the latest available observations",
|
||||||
|
"items": {
|
||||||
|
"description": "Condition contains details for one aspect of the current state of this API Resource.",
|
||||||
|
"properties": {
|
||||||
|
"lastTransitionTime": {
|
||||||
|
"description": "lastTransitionTime is the last time the condition transitioned from one status to another.\nThis should be when the underlying condition changed. If that is not known, then using the time when the API field changed is acceptable.",
|
||||||
|
"format": "date-time",
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"message": {
|
||||||
|
"description": "message is a human readable message indicating details about the transition.\nThis may be an empty string.",
|
||||||
|
"maxLength": 32768,
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"observedGeneration": {
|
||||||
|
"description": "observedGeneration represents the .metadata.generation that the condition was set based upon.\nFor instance, if .metadata.generation is currently 12, but the .status.conditions[x].observedGeneration is 9, the condition is out of date\nwith respect to the current state of the instance.",
|
||||||
|
"format": "int64",
|
||||||
|
"minimum": 0,
|
||||||
|
"type": "integer"
|
||||||
|
},
|
||||||
|
"reason": {
|
||||||
|
"description": "reason contains a programmatic identifier indicating the reason for the condition's last transition.\nProducers of specific condition types may define expected values and meanings for this field,\nand whether the values are considered a guaranteed API.\nThe value should be a CamelCase string.\nThis field may not be empty.",
|
||||||
|
"maxLength": 1024,
|
||||||
|
"minLength": 1,
|
||||||
|
"pattern": "^[A-Za-z]([A-Za-z0-9_,:]*[A-Za-z0-9_])?$",
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"status": {
|
||||||
|
"description": "status of the condition, one of True, False, Unknown.",
|
||||||
|
"enum": [
|
||||||
|
"True",
|
||||||
|
"False",
|
||||||
|
"Unknown"
|
||||||
|
],
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"type": {
|
||||||
|
"description": "type of condition in CamelCase or in foo.example.com/CamelCase.",
|
||||||
|
"maxLength": 316,
|
||||||
|
"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])$",
|
||||||
|
"type": "string"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"required": [
|
||||||
|
"lastTransitionTime",
|
||||||
|
"message",
|
||||||
|
"reason",
|
||||||
|
"status",
|
||||||
|
"type"
|
||||||
|
],
|
||||||
|
"type": "object",
|
||||||
|
"additionalProperties": false
|
||||||
|
},
|
||||||
|
"type": "array"
|
||||||
|
},
|
||||||
|
"instance": {
|
||||||
|
"description": "Instance contains the resolved instance reference",
|
||||||
|
"properties": {
|
||||||
|
"clusterInstanceRef": {
|
||||||
|
"description": "ClusterInstanceRef is the name of the cluster instance",
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"instanceRef": {
|
||||||
|
"description": "InstanceRef is the name of the namespaced instance",
|
||||||
|
"type": "string"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"type": "object",
|
||||||
|
"additionalProperties": false
|
||||||
|
},
|
||||||
|
"message": {
|
||||||
|
"description": "Message contains additional information",
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"observedGeneration": {
|
||||||
|
"description": "ObservedGeneration is the generation of the spec that was last processed",
|
||||||
|
"format": "int64",
|
||||||
|
"type": "integer"
|
||||||
|
},
|
||||||
|
"providerType": {
|
||||||
|
"description": "ProviderType is the component provider type",
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"ready": {
|
||||||
|
"description": "Ready indicates if the component is ready",
|
||||||
|
"type": "boolean"
|
||||||
|
},
|
||||||
|
"realm": {
|
||||||
|
"description": "Realm contains the resolved realm reference",
|
||||||
|
"properties": {
|
||||||
|
"clusterRealmRef": {
|
||||||
|
"description": "ClusterRealmRef is the name of the cluster realm",
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"realmRef": {
|
||||||
|
"description": "RealmRef is the name of the namespaced realm",
|
||||||
|
"type": "string"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"type": "object",
|
||||||
|
"additionalProperties": false
|
||||||
|
},
|
||||||
|
"resourcePath": {
|
||||||
|
"description": "ResourcePath is the Keycloak API path for this component",
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"status": {
|
||||||
|
"description": "Status is a human-readable status message",
|
||||||
|
"type": "string"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"required": [
|
||||||
|
"ready"
|
||||||
|
],
|
||||||
|
"type": "object",
|
||||||
|
"additionalProperties": false
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"type": "object"
|
||||||
|
}
|
||||||
@@ -0,0 +1,198 @@
|
|||||||
|
{
|
||||||
|
"description": "KeycloakGroup defines a group within a KeycloakRealm",
|
||||||
|
"properties": {
|
||||||
|
"apiVersion": {
|
||||||
|
"description": "APIVersion defines the versioned schema of this representation of an object.\nServers should convert recognized schemas to the latest internal value, and\nmay reject unrecognized values.\nMore info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources",
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"kind": {
|
||||||
|
"description": "Kind is a string value representing the REST resource this object represents.\nServers may infer this from the endpoint the client submits requests to.\nCannot be updated.\nIn CamelCase.\nMore info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds",
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"metadata": {
|
||||||
|
"type": "object"
|
||||||
|
},
|
||||||
|
"spec": {
|
||||||
|
"description": "KeycloakGroupSpec defines the desired state of KeycloakGroup",
|
||||||
|
"properties": {
|
||||||
|
"clusterRealmRef": {
|
||||||
|
"description": "ClusterRealmRef is a reference to a ClusterKeycloakRealm\nOne of realmRef or clusterRealmRef must be specified",
|
||||||
|
"properties": {
|
||||||
|
"name": {
|
||||||
|
"description": "Name of the cluster-scoped resource",
|
||||||
|
"type": "string"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"required": [
|
||||||
|
"name"
|
||||||
|
],
|
||||||
|
"type": "object",
|
||||||
|
"additionalProperties": false
|
||||||
|
},
|
||||||
|
"definition": {
|
||||||
|
"description": "Definition contains the Keycloak GroupRepresentation",
|
||||||
|
"type": "object",
|
||||||
|
"x-kubernetes-preserve-unknown-fields": true
|
||||||
|
},
|
||||||
|
"parentGroupRef": {
|
||||||
|
"description": "ParentGroupRef is a reference to a parent KeycloakGroup (for nested groups)",
|
||||||
|
"properties": {
|
||||||
|
"name": {
|
||||||
|
"description": "Name of the resource",
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"namespace": {
|
||||||
|
"description": "Namespace of the resource (optional, defaults to the same namespace)",
|
||||||
|
"type": "string"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"required": [
|
||||||
|
"name"
|
||||||
|
],
|
||||||
|
"type": "object",
|
||||||
|
"additionalProperties": false
|
||||||
|
},
|
||||||
|
"realmRef": {
|
||||||
|
"description": "RealmRef is a reference to a KeycloakRealm\nOne of realmRef or clusterRealmRef must be specified",
|
||||||
|
"properties": {
|
||||||
|
"name": {
|
||||||
|
"description": "Name of the resource",
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"namespace": {
|
||||||
|
"description": "Namespace of the resource (optional, defaults to the same namespace)",
|
||||||
|
"type": "string"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"required": [
|
||||||
|
"name"
|
||||||
|
],
|
||||||
|
"type": "object",
|
||||||
|
"additionalProperties": false
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"required": [
|
||||||
|
"definition"
|
||||||
|
],
|
||||||
|
"type": "object",
|
||||||
|
"additionalProperties": false
|
||||||
|
},
|
||||||
|
"status": {
|
||||||
|
"description": "KeycloakGroupStatus defines the observed state of KeycloakGroup",
|
||||||
|
"properties": {
|
||||||
|
"conditions": {
|
||||||
|
"description": "Conditions represent the latest available observations",
|
||||||
|
"items": {
|
||||||
|
"description": "Condition contains details for one aspect of the current state of this API Resource.",
|
||||||
|
"properties": {
|
||||||
|
"lastTransitionTime": {
|
||||||
|
"description": "lastTransitionTime is the last time the condition transitioned from one status to another.\nThis should be when the underlying condition changed. If that is not known, then using the time when the API field changed is acceptable.",
|
||||||
|
"format": "date-time",
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"message": {
|
||||||
|
"description": "message is a human readable message indicating details about the transition.\nThis may be an empty string.",
|
||||||
|
"maxLength": 32768,
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"observedGeneration": {
|
||||||
|
"description": "observedGeneration represents the .metadata.generation that the condition was set based upon.\nFor instance, if .metadata.generation is currently 12, but the .status.conditions[x].observedGeneration is 9, the condition is out of date\nwith respect to the current state of the instance.",
|
||||||
|
"format": "int64",
|
||||||
|
"minimum": 0,
|
||||||
|
"type": "integer"
|
||||||
|
},
|
||||||
|
"reason": {
|
||||||
|
"description": "reason contains a programmatic identifier indicating the reason for the condition's last transition.\nProducers of specific condition types may define expected values and meanings for this field,\nand whether the values are considered a guaranteed API.\nThe value should be a CamelCase string.\nThis field may not be empty.",
|
||||||
|
"maxLength": 1024,
|
||||||
|
"minLength": 1,
|
||||||
|
"pattern": "^[A-Za-z]([A-Za-z0-9_,:]*[A-Za-z0-9_])?$",
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"status": {
|
||||||
|
"description": "status of the condition, one of True, False, Unknown.",
|
||||||
|
"enum": [
|
||||||
|
"True",
|
||||||
|
"False",
|
||||||
|
"Unknown"
|
||||||
|
],
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"type": {
|
||||||
|
"description": "type of condition in CamelCase or in foo.example.com/CamelCase.",
|
||||||
|
"maxLength": 316,
|
||||||
|
"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])$",
|
||||||
|
"type": "string"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"required": [
|
||||||
|
"lastTransitionTime",
|
||||||
|
"message",
|
||||||
|
"reason",
|
||||||
|
"status",
|
||||||
|
"type"
|
||||||
|
],
|
||||||
|
"type": "object",
|
||||||
|
"additionalProperties": false
|
||||||
|
},
|
||||||
|
"type": "array"
|
||||||
|
},
|
||||||
|
"groupID": {
|
||||||
|
"description": "GroupID is the Keycloak internal group ID",
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"instance": {
|
||||||
|
"description": "Instance contains the resolved instance reference",
|
||||||
|
"properties": {
|
||||||
|
"clusterInstanceRef": {
|
||||||
|
"description": "ClusterInstanceRef is the name of the cluster instance",
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"instanceRef": {
|
||||||
|
"description": "InstanceRef is the name of the namespaced instance",
|
||||||
|
"type": "string"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"type": "object",
|
||||||
|
"additionalProperties": false
|
||||||
|
},
|
||||||
|
"message": {
|
||||||
|
"description": "Message contains additional information",
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"ready": {
|
||||||
|
"description": "Ready indicates if the group is ready",
|
||||||
|
"type": "boolean"
|
||||||
|
},
|
||||||
|
"realm": {
|
||||||
|
"description": "Realm contains the resolved realm reference",
|
||||||
|
"properties": {
|
||||||
|
"clusterRealmRef": {
|
||||||
|
"description": "ClusterRealmRef is the name of the cluster realm",
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"realmRef": {
|
||||||
|
"description": "RealmRef is the name of the namespaced realm",
|
||||||
|
"type": "string"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"type": "object",
|
||||||
|
"additionalProperties": false
|
||||||
|
},
|
||||||
|
"resourcePath": {
|
||||||
|
"description": "ResourcePath is the Keycloak API path for this group",
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"status": {
|
||||||
|
"description": "Status is a human-readable status message",
|
||||||
|
"type": "string"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"required": [
|
||||||
|
"ready"
|
||||||
|
],
|
||||||
|
"type": "object",
|
||||||
|
"additionalProperties": false
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"type": "object"
|
||||||
|
}
|
||||||
@@ -0,0 +1,190 @@
|
|||||||
|
{
|
||||||
|
"description": "KeycloakIdentityProvider defines an identity provider within a KeycloakRealm",
|
||||||
|
"properties": {
|
||||||
|
"apiVersion": {
|
||||||
|
"description": "APIVersion defines the versioned schema of this representation of an object.\nServers should convert recognized schemas to the latest internal value, and\nmay reject unrecognized values.\nMore info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources",
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"kind": {
|
||||||
|
"description": "Kind is a string value representing the REST resource this object represents.\nServers may infer this from the endpoint the client submits requests to.\nCannot be updated.\nIn CamelCase.\nMore info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds",
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"metadata": {
|
||||||
|
"type": "object"
|
||||||
|
},
|
||||||
|
"spec": {
|
||||||
|
"description": "KeycloakIdentityProviderSpec defines the desired state of KeycloakIdentityProvider",
|
||||||
|
"properties": {
|
||||||
|
"clusterRealmRef": {
|
||||||
|
"description": "ClusterRealmRef is a reference to a ClusterKeycloakRealm\nOne of realmRef or clusterRealmRef must be specified",
|
||||||
|
"properties": {
|
||||||
|
"name": {
|
||||||
|
"description": "Name of the cluster-scoped resource",
|
||||||
|
"type": "string"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"required": [
|
||||||
|
"name"
|
||||||
|
],
|
||||||
|
"type": "object",
|
||||||
|
"additionalProperties": false
|
||||||
|
},
|
||||||
|
"configSecretRef": {
|
||||||
|
"description": "ConfigSecretRef is a reference to a Kubernetes Secret whose data entries\nare merged into definition.config before syncing to Keycloak. This allows\nsensitive configuration values (e.g. clientId, clientSecret) to be stored\nin a Secret rather than in plaintext in the CR. Secret values take\nprecedence over values specified inline in definition.config.",
|
||||||
|
"properties": {
|
||||||
|
"name": {
|
||||||
|
"description": "Name of the Kubernetes Secret",
|
||||||
|
"type": "string"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"required": [
|
||||||
|
"name"
|
||||||
|
],
|
||||||
|
"type": "object",
|
||||||
|
"additionalProperties": false
|
||||||
|
},
|
||||||
|
"definition": {
|
||||||
|
"description": "Definition contains the Keycloak IdentityProviderRepresentation",
|
||||||
|
"type": "object",
|
||||||
|
"x-kubernetes-preserve-unknown-fields": true
|
||||||
|
},
|
||||||
|
"realmRef": {
|
||||||
|
"description": "RealmRef is a reference to a KeycloakRealm\nOne of realmRef or clusterRealmRef must be specified",
|
||||||
|
"properties": {
|
||||||
|
"name": {
|
||||||
|
"description": "Name of the resource",
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"namespace": {
|
||||||
|
"description": "Namespace of the resource (optional, defaults to the same namespace)",
|
||||||
|
"type": "string"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"required": [
|
||||||
|
"name"
|
||||||
|
],
|
||||||
|
"type": "object",
|
||||||
|
"additionalProperties": false
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"required": [
|
||||||
|
"definition"
|
||||||
|
],
|
||||||
|
"type": "object",
|
||||||
|
"additionalProperties": false
|
||||||
|
},
|
||||||
|
"status": {
|
||||||
|
"description": "KeycloakIdentityProviderStatus defines the observed state of KeycloakIdentityProvider",
|
||||||
|
"properties": {
|
||||||
|
"conditions": {
|
||||||
|
"description": "Conditions represent the latest available observations",
|
||||||
|
"items": {
|
||||||
|
"description": "Condition contains details for one aspect of the current state of this API Resource.",
|
||||||
|
"properties": {
|
||||||
|
"lastTransitionTime": {
|
||||||
|
"description": "lastTransitionTime is the last time the condition transitioned from one status to another.\nThis should be when the underlying condition changed. If that is not known, then using the time when the API field changed is acceptable.",
|
||||||
|
"format": "date-time",
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"message": {
|
||||||
|
"description": "message is a human readable message indicating details about the transition.\nThis may be an empty string.",
|
||||||
|
"maxLength": 32768,
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"observedGeneration": {
|
||||||
|
"description": "observedGeneration represents the .metadata.generation that the condition was set based upon.\nFor instance, if .metadata.generation is currently 12, but the .status.conditions[x].observedGeneration is 9, the condition is out of date\nwith respect to the current state of the instance.",
|
||||||
|
"format": "int64",
|
||||||
|
"minimum": 0,
|
||||||
|
"type": "integer"
|
||||||
|
},
|
||||||
|
"reason": {
|
||||||
|
"description": "reason contains a programmatic identifier indicating the reason for the condition's last transition.\nProducers of specific condition types may define expected values and meanings for this field,\nand whether the values are considered a guaranteed API.\nThe value should be a CamelCase string.\nThis field may not be empty.",
|
||||||
|
"maxLength": 1024,
|
||||||
|
"minLength": 1,
|
||||||
|
"pattern": "^[A-Za-z]([A-Za-z0-9_,:]*[A-Za-z0-9_])?$",
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"status": {
|
||||||
|
"description": "status of the condition, one of True, False, Unknown.",
|
||||||
|
"enum": [
|
||||||
|
"True",
|
||||||
|
"False",
|
||||||
|
"Unknown"
|
||||||
|
],
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"type": {
|
||||||
|
"description": "type of condition in CamelCase or in foo.example.com/CamelCase.",
|
||||||
|
"maxLength": 316,
|
||||||
|
"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])$",
|
||||||
|
"type": "string"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"required": [
|
||||||
|
"lastTransitionTime",
|
||||||
|
"message",
|
||||||
|
"reason",
|
||||||
|
"status",
|
||||||
|
"type"
|
||||||
|
],
|
||||||
|
"type": "object",
|
||||||
|
"additionalProperties": false
|
||||||
|
},
|
||||||
|
"type": "array"
|
||||||
|
},
|
||||||
|
"instance": {
|
||||||
|
"description": "Instance contains the resolved instance reference",
|
||||||
|
"properties": {
|
||||||
|
"clusterInstanceRef": {
|
||||||
|
"description": "ClusterInstanceRef is the name of the cluster instance",
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"instanceRef": {
|
||||||
|
"description": "InstanceRef is the name of the namespaced instance",
|
||||||
|
"type": "string"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"type": "object",
|
||||||
|
"additionalProperties": false
|
||||||
|
},
|
||||||
|
"message": {
|
||||||
|
"description": "Message contains additional information",
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"ready": {
|
||||||
|
"description": "Ready indicates if the identity provider is ready",
|
||||||
|
"type": "boolean"
|
||||||
|
},
|
||||||
|
"realm": {
|
||||||
|
"description": "Realm contains the resolved realm reference",
|
||||||
|
"properties": {
|
||||||
|
"clusterRealmRef": {
|
||||||
|
"description": "ClusterRealmRef is the name of the cluster realm",
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"realmRef": {
|
||||||
|
"description": "RealmRef is the name of the namespaced realm",
|
||||||
|
"type": "string"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"type": "object",
|
||||||
|
"additionalProperties": false
|
||||||
|
},
|
||||||
|
"resourcePath": {
|
||||||
|
"description": "ResourcePath is the Keycloak API path for this identity provider",
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"status": {
|
||||||
|
"description": "Status is a human-readable status message",
|
||||||
|
"type": "string"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"required": [
|
||||||
|
"ready"
|
||||||
|
],
|
||||||
|
"type": "object",
|
||||||
|
"additionalProperties": false
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"type": "object"
|
||||||
|
}
|
||||||
@@ -0,0 +1,197 @@
|
|||||||
|
{
|
||||||
|
"description": "KeycloakInstance makes a Keycloak server known to the operator",
|
||||||
|
"properties": {
|
||||||
|
"apiVersion": {
|
||||||
|
"description": "APIVersion defines the versioned schema of this representation of an object.\nServers should convert recognized schemas to the latest internal value, and\nmay reject unrecognized values.\nMore info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources",
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"kind": {
|
||||||
|
"description": "Kind is a string value representing the REST resource this object represents.\nServers may infer this from the endpoint the client submits requests to.\nCannot be updated.\nIn CamelCase.\nMore info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds",
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"metadata": {
|
||||||
|
"type": "object"
|
||||||
|
},
|
||||||
|
"spec": {
|
||||||
|
"description": "KeycloakInstanceSpec defines the desired state of KeycloakInstance",
|
||||||
|
"properties": {
|
||||||
|
"baseUrl": {
|
||||||
|
"description": "BaseUrl is the URL of the Keycloak server (e.g., http://keycloak:8080)",
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"client": {
|
||||||
|
"description": "Client contains optional service account client configuration",
|
||||||
|
"properties": {
|
||||||
|
"id": {
|
||||||
|
"description": "ID is the client ID for service account authentication",
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"secret": {
|
||||||
|
"description": "Secret is the client secret (optional for public clients)",
|
||||||
|
"type": "string"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"required": [
|
||||||
|
"id"
|
||||||
|
],
|
||||||
|
"type": "object",
|
||||||
|
"additionalProperties": false
|
||||||
|
},
|
||||||
|
"credentials": {
|
||||||
|
"description": "Credentials contains the reference to the admin credentials secret",
|
||||||
|
"properties": {
|
||||||
|
"secretRef": {
|
||||||
|
"description": "SecretRef contains the reference to the secret with credentials",
|
||||||
|
"properties": {
|
||||||
|
"name": {
|
||||||
|
"description": "Name is the name of the secret",
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"namespace": {
|
||||||
|
"description": "Namespace is the namespace of the secret (defaults to resource namespace)",
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"passwordKey": {
|
||||||
|
"default": "password",
|
||||||
|
"description": "PasswordKey is the key in the secret for the password (defaults to \"password\")",
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"usernameKey": {
|
||||||
|
"default": "username",
|
||||||
|
"description": "UsernameKey is the key in the secret for the username (defaults to \"username\")",
|
||||||
|
"type": "string"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"required": [
|
||||||
|
"name"
|
||||||
|
],
|
||||||
|
"type": "object",
|
||||||
|
"additionalProperties": false
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"required": [
|
||||||
|
"secretRef"
|
||||||
|
],
|
||||||
|
"type": "object",
|
||||||
|
"additionalProperties": false
|
||||||
|
},
|
||||||
|
"realm": {
|
||||||
|
"description": "Realm is the admin realm (defaults to \"master\")",
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"token": {
|
||||||
|
"description": "Token contains optional token caching configuration",
|
||||||
|
"properties": {
|
||||||
|
"expiresKey": {
|
||||||
|
"description": "ExpiresKey is the key in the secret for the token expiration",
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"secretName": {
|
||||||
|
"description": "SecretName is the name of the secret to cache the token",
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"tokenKey": {
|
||||||
|
"description": "TokenKey is the key in the secret for the token",
|
||||||
|
"type": "string"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"type": "object",
|
||||||
|
"additionalProperties": false
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"required": [
|
||||||
|
"baseUrl",
|
||||||
|
"credentials"
|
||||||
|
],
|
||||||
|
"type": "object",
|
||||||
|
"additionalProperties": false
|
||||||
|
},
|
||||||
|
"status": {
|
||||||
|
"description": "KeycloakInstanceStatus defines the observed state of KeycloakInstance",
|
||||||
|
"properties": {
|
||||||
|
"conditions": {
|
||||||
|
"description": "Conditions represent the latest available observations",
|
||||||
|
"items": {
|
||||||
|
"description": "Condition contains details for one aspect of the current state of this API Resource.",
|
||||||
|
"properties": {
|
||||||
|
"lastTransitionTime": {
|
||||||
|
"description": "lastTransitionTime is the last time the condition transitioned from one status to another.\nThis should be when the underlying condition changed. If that is not known, then using the time when the API field changed is acceptable.",
|
||||||
|
"format": "date-time",
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"message": {
|
||||||
|
"description": "message is a human readable message indicating details about the transition.\nThis may be an empty string.",
|
||||||
|
"maxLength": 32768,
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"observedGeneration": {
|
||||||
|
"description": "observedGeneration represents the .metadata.generation that the condition was set based upon.\nFor instance, if .metadata.generation is currently 12, but the .status.conditions[x].observedGeneration is 9, the condition is out of date\nwith respect to the current state of the instance.",
|
||||||
|
"format": "int64",
|
||||||
|
"minimum": 0,
|
||||||
|
"type": "integer"
|
||||||
|
},
|
||||||
|
"reason": {
|
||||||
|
"description": "reason contains a programmatic identifier indicating the reason for the condition's last transition.\nProducers of specific condition types may define expected values and meanings for this field,\nand whether the values are considered a guaranteed API.\nThe value should be a CamelCase string.\nThis field may not be empty.",
|
||||||
|
"maxLength": 1024,
|
||||||
|
"minLength": 1,
|
||||||
|
"pattern": "^[A-Za-z]([A-Za-z0-9_,:]*[A-Za-z0-9_])?$",
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"status": {
|
||||||
|
"description": "status of the condition, one of True, False, Unknown.",
|
||||||
|
"enum": [
|
||||||
|
"True",
|
||||||
|
"False",
|
||||||
|
"Unknown"
|
||||||
|
],
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"type": {
|
||||||
|
"description": "type of condition in CamelCase or in foo.example.com/CamelCase.",
|
||||||
|
"maxLength": 316,
|
||||||
|
"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])$",
|
||||||
|
"type": "string"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"required": [
|
||||||
|
"lastTransitionTime",
|
||||||
|
"message",
|
||||||
|
"reason",
|
||||||
|
"status",
|
||||||
|
"type"
|
||||||
|
],
|
||||||
|
"type": "object",
|
||||||
|
"additionalProperties": false
|
||||||
|
},
|
||||||
|
"type": "array"
|
||||||
|
},
|
||||||
|
"message": {
|
||||||
|
"description": "Message contains additional information about the status",
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"ready": {
|
||||||
|
"description": "Ready indicates if the Keycloak instance is accessible",
|
||||||
|
"type": "boolean"
|
||||||
|
},
|
||||||
|
"resourcePath": {
|
||||||
|
"description": "ResourcePath is the API path for this resource",
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"status": {
|
||||||
|
"description": "Status is a human-readable status message",
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"version": {
|
||||||
|
"description": "Version is the Keycloak server version",
|
||||||
|
"type": "string"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"required": [
|
||||||
|
"ready"
|
||||||
|
],
|
||||||
|
"type": "object",
|
||||||
|
"additionalProperties": false
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"type": "object"
|
||||||
|
}
|
||||||
@@ -0,0 +1,185 @@
|
|||||||
|
{
|
||||||
|
"description": "KeycloakOrganization defines an organization within a KeycloakRealm\nNOTE: Organizations require Keycloak 26.0.0 or later",
|
||||||
|
"properties": {
|
||||||
|
"apiVersion": {
|
||||||
|
"description": "APIVersion defines the versioned schema of this representation of an object.\nServers should convert recognized schemas to the latest internal value, and\nmay reject unrecognized values.\nMore info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources",
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"kind": {
|
||||||
|
"description": "Kind is a string value representing the REST resource this object represents.\nServers may infer this from the endpoint the client submits requests to.\nCannot be updated.\nIn CamelCase.\nMore info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds",
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"metadata": {
|
||||||
|
"type": "object"
|
||||||
|
},
|
||||||
|
"spec": {
|
||||||
|
"description": "KeycloakOrganizationSpec defines the desired state of KeycloakOrganization",
|
||||||
|
"properties": {
|
||||||
|
"clusterRealmRef": {
|
||||||
|
"description": "ClusterRealmRef is a reference to a ClusterKeycloakRealm\nOne of realmRef or clusterRealmRef must be specified",
|
||||||
|
"properties": {
|
||||||
|
"name": {
|
||||||
|
"description": "Name of the cluster-scoped resource",
|
||||||
|
"type": "string"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"required": [
|
||||||
|
"name"
|
||||||
|
],
|
||||||
|
"type": "object",
|
||||||
|
"additionalProperties": false
|
||||||
|
},
|
||||||
|
"definition": {
|
||||||
|
"description": "Definition contains the Keycloak OrganizationRepresentation",
|
||||||
|
"type": "object",
|
||||||
|
"x-kubernetes-preserve-unknown-fields": true
|
||||||
|
},
|
||||||
|
"realmRef": {
|
||||||
|
"description": "RealmRef is a reference to a KeycloakRealm\nOne of realmRef or clusterRealmRef must be specified",
|
||||||
|
"properties": {
|
||||||
|
"name": {
|
||||||
|
"description": "Name of the resource",
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"namespace": {
|
||||||
|
"description": "Namespace of the resource (optional, defaults to the same namespace)",
|
||||||
|
"type": "string"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"required": [
|
||||||
|
"name"
|
||||||
|
],
|
||||||
|
"type": "object",
|
||||||
|
"additionalProperties": false
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"required": [
|
||||||
|
"definition"
|
||||||
|
],
|
||||||
|
"type": "object",
|
||||||
|
"additionalProperties": false
|
||||||
|
},
|
||||||
|
"status": {
|
||||||
|
"description": "KeycloakOrganizationStatus defines the observed state of KeycloakOrganization",
|
||||||
|
"properties": {
|
||||||
|
"conditions": {
|
||||||
|
"description": "Conditions represent the latest available observations",
|
||||||
|
"items": {
|
||||||
|
"description": "Condition contains details for one aspect of the current state of this API Resource.",
|
||||||
|
"properties": {
|
||||||
|
"lastTransitionTime": {
|
||||||
|
"description": "lastTransitionTime is the last time the condition transitioned from one status to another.\nThis should be when the underlying condition changed. If that is not known, then using the time when the API field changed is acceptable.",
|
||||||
|
"format": "date-time",
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"message": {
|
||||||
|
"description": "message is a human readable message indicating details about the transition.\nThis may be an empty string.",
|
||||||
|
"maxLength": 32768,
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"observedGeneration": {
|
||||||
|
"description": "observedGeneration represents the .metadata.generation that the condition was set based upon.\nFor instance, if .metadata.generation is currently 12, but the .status.conditions[x].observedGeneration is 9, the condition is out of date\nwith respect to the current state of the instance.",
|
||||||
|
"format": "int64",
|
||||||
|
"minimum": 0,
|
||||||
|
"type": "integer"
|
||||||
|
},
|
||||||
|
"reason": {
|
||||||
|
"description": "reason contains a programmatic identifier indicating the reason for the condition's last transition.\nProducers of specific condition types may define expected values and meanings for this field,\nand whether the values are considered a guaranteed API.\nThe value should be a CamelCase string.\nThis field may not be empty.",
|
||||||
|
"maxLength": 1024,
|
||||||
|
"minLength": 1,
|
||||||
|
"pattern": "^[A-Za-z]([A-Za-z0-9_,:]*[A-Za-z0-9_])?$",
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"status": {
|
||||||
|
"description": "status of the condition, one of True, False, Unknown.",
|
||||||
|
"enum": [
|
||||||
|
"True",
|
||||||
|
"False",
|
||||||
|
"Unknown"
|
||||||
|
],
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"type": {
|
||||||
|
"description": "type of condition in CamelCase or in foo.example.com/CamelCase.",
|
||||||
|
"maxLength": 316,
|
||||||
|
"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])$",
|
||||||
|
"type": "string"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"required": [
|
||||||
|
"lastTransitionTime",
|
||||||
|
"message",
|
||||||
|
"reason",
|
||||||
|
"status",
|
||||||
|
"type"
|
||||||
|
],
|
||||||
|
"type": "object",
|
||||||
|
"additionalProperties": false
|
||||||
|
},
|
||||||
|
"type": "array"
|
||||||
|
},
|
||||||
|
"instance": {
|
||||||
|
"description": "Instance contains the resolved instance reference",
|
||||||
|
"properties": {
|
||||||
|
"clusterInstanceRef": {
|
||||||
|
"description": "ClusterInstanceRef is the name of the cluster instance",
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"instanceRef": {
|
||||||
|
"description": "InstanceRef is the name of the namespaced instance",
|
||||||
|
"type": "string"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"type": "object",
|
||||||
|
"additionalProperties": false
|
||||||
|
},
|
||||||
|
"message": {
|
||||||
|
"description": "Message contains additional information",
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"observedGeneration": {
|
||||||
|
"description": "ObservedGeneration is the generation of the spec that was last processed",
|
||||||
|
"format": "int64",
|
||||||
|
"type": "integer"
|
||||||
|
},
|
||||||
|
"organizationID": {
|
||||||
|
"description": "OrganizationID is the Keycloak internal organization ID",
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"ready": {
|
||||||
|
"description": "Ready indicates if the organization is ready",
|
||||||
|
"type": "boolean"
|
||||||
|
},
|
||||||
|
"realm": {
|
||||||
|
"description": "Realm contains the resolved realm reference",
|
||||||
|
"properties": {
|
||||||
|
"clusterRealmRef": {
|
||||||
|
"description": "ClusterRealmRef is the name of the cluster realm",
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"realmRef": {
|
||||||
|
"description": "RealmRef is the name of the namespaced realm",
|
||||||
|
"type": "string"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"type": "object",
|
||||||
|
"additionalProperties": false
|
||||||
|
},
|
||||||
|
"resourcePath": {
|
||||||
|
"description": "ResourcePath is the Keycloak API path for this organization",
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"status": {
|
||||||
|
"description": "Status is a human-readable status message",
|
||||||
|
"type": "string"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"required": [
|
||||||
|
"ready"
|
||||||
|
],
|
||||||
|
"type": "object",
|
||||||
|
"additionalProperties": false
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"type": "object"
|
||||||
|
}
|
||||||
@@ -0,0 +1,201 @@
|
|||||||
|
{
|
||||||
|
"description": "KeycloakProtocolMapper defines a protocol mapper within a KeycloakClient or KeycloakClientScope",
|
||||||
|
"properties": {
|
||||||
|
"apiVersion": {
|
||||||
|
"description": "APIVersion defines the versioned schema of this representation of an object.\nServers should convert recognized schemas to the latest internal value, and\nmay reject unrecognized values.\nMore info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources",
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"kind": {
|
||||||
|
"description": "Kind is a string value representing the REST resource this object represents.\nServers may infer this from the endpoint the client submits requests to.\nCannot be updated.\nIn CamelCase.\nMore info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds",
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"metadata": {
|
||||||
|
"type": "object"
|
||||||
|
},
|
||||||
|
"spec": {
|
||||||
|
"description": "KeycloakProtocolMapperSpec defines the desired state of KeycloakProtocolMapper",
|
||||||
|
"properties": {
|
||||||
|
"clientRef": {
|
||||||
|
"description": "ClientRef is a reference to a KeycloakClient\nOne of clientRef or clientScopeRef must be specified",
|
||||||
|
"properties": {
|
||||||
|
"name": {
|
||||||
|
"description": "Name of the resource",
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"namespace": {
|
||||||
|
"description": "Namespace of the resource (optional, defaults to the same namespace)",
|
||||||
|
"type": "string"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"required": [
|
||||||
|
"name"
|
||||||
|
],
|
||||||
|
"type": "object",
|
||||||
|
"additionalProperties": false
|
||||||
|
},
|
||||||
|
"clientScopeRef": {
|
||||||
|
"description": "ClientScopeRef is a reference to a KeycloakClientScope\nOne of clientRef or clientScopeRef must be specified",
|
||||||
|
"properties": {
|
||||||
|
"name": {
|
||||||
|
"description": "Name of the resource",
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"namespace": {
|
||||||
|
"description": "Namespace of the resource (optional, defaults to the same namespace)",
|
||||||
|
"type": "string"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"required": [
|
||||||
|
"name"
|
||||||
|
],
|
||||||
|
"type": "object",
|
||||||
|
"additionalProperties": false
|
||||||
|
},
|
||||||
|
"definition": {
|
||||||
|
"description": "Definition contains the Keycloak ProtocolMapperRepresentation",
|
||||||
|
"type": "object",
|
||||||
|
"x-kubernetes-preserve-unknown-fields": true
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"required": [
|
||||||
|
"definition"
|
||||||
|
],
|
||||||
|
"type": "object",
|
||||||
|
"additionalProperties": false
|
||||||
|
},
|
||||||
|
"status": {
|
||||||
|
"description": "KeycloakProtocolMapperStatus defines the observed state of KeycloakProtocolMapper",
|
||||||
|
"properties": {
|
||||||
|
"conditions": {
|
||||||
|
"description": "Conditions represent the latest available observations",
|
||||||
|
"items": {
|
||||||
|
"description": "Condition contains details for one aspect of the current state of this API Resource.",
|
||||||
|
"properties": {
|
||||||
|
"lastTransitionTime": {
|
||||||
|
"description": "lastTransitionTime is the last time the condition transitioned from one status to another.\nThis should be when the underlying condition changed. If that is not known, then using the time when the API field changed is acceptable.",
|
||||||
|
"format": "date-time",
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"message": {
|
||||||
|
"description": "message is a human readable message indicating details about the transition.\nThis may be an empty string.",
|
||||||
|
"maxLength": 32768,
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"observedGeneration": {
|
||||||
|
"description": "observedGeneration represents the .metadata.generation that the condition was set based upon.\nFor instance, if .metadata.generation is currently 12, but the .status.conditions[x].observedGeneration is 9, the condition is out of date\nwith respect to the current state of the instance.",
|
||||||
|
"format": "int64",
|
||||||
|
"minimum": 0,
|
||||||
|
"type": "integer"
|
||||||
|
},
|
||||||
|
"reason": {
|
||||||
|
"description": "reason contains a programmatic identifier indicating the reason for the condition's last transition.\nProducers of specific condition types may define expected values and meanings for this field,\nand whether the values are considered a guaranteed API.\nThe value should be a CamelCase string.\nThis field may not be empty.",
|
||||||
|
"maxLength": 1024,
|
||||||
|
"minLength": 1,
|
||||||
|
"pattern": "^[A-Za-z]([A-Za-z0-9_,:]*[A-Za-z0-9_])?$",
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"status": {
|
||||||
|
"description": "status of the condition, one of True, False, Unknown.",
|
||||||
|
"enum": [
|
||||||
|
"True",
|
||||||
|
"False",
|
||||||
|
"Unknown"
|
||||||
|
],
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"type": {
|
||||||
|
"description": "type of condition in CamelCase or in foo.example.com/CamelCase.",
|
||||||
|
"maxLength": 316,
|
||||||
|
"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])$",
|
||||||
|
"type": "string"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"required": [
|
||||||
|
"lastTransitionTime",
|
||||||
|
"message",
|
||||||
|
"reason",
|
||||||
|
"status",
|
||||||
|
"type"
|
||||||
|
],
|
||||||
|
"type": "object",
|
||||||
|
"additionalProperties": false
|
||||||
|
},
|
||||||
|
"type": "array"
|
||||||
|
},
|
||||||
|
"instance": {
|
||||||
|
"description": "Instance contains the resolved instance reference",
|
||||||
|
"properties": {
|
||||||
|
"clusterInstanceRef": {
|
||||||
|
"description": "ClusterInstanceRef is the name of the cluster instance",
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"instanceRef": {
|
||||||
|
"description": "InstanceRef is the name of the namespaced instance",
|
||||||
|
"type": "string"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"type": "object",
|
||||||
|
"additionalProperties": false
|
||||||
|
},
|
||||||
|
"mapperID": {
|
||||||
|
"description": "MapperID is the Keycloak internal mapper ID",
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"mapperName": {
|
||||||
|
"description": "MapperName is the mapper name in Keycloak",
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"message": {
|
||||||
|
"description": "Message contains additional information",
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"observedGeneration": {
|
||||||
|
"description": "ObservedGeneration is the generation of the spec that was last processed",
|
||||||
|
"format": "int64",
|
||||||
|
"type": "integer"
|
||||||
|
},
|
||||||
|
"parentID": {
|
||||||
|
"description": "ParentID is the parent client or clientScope ID",
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"parentType": {
|
||||||
|
"description": "ParentType indicates if parent is \"client\" or \"clientScope\"",
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"ready": {
|
||||||
|
"description": "Ready indicates if the protocol mapper is ready",
|
||||||
|
"type": "boolean"
|
||||||
|
},
|
||||||
|
"realm": {
|
||||||
|
"description": "Realm contains the resolved realm reference",
|
||||||
|
"properties": {
|
||||||
|
"clusterRealmRef": {
|
||||||
|
"description": "ClusterRealmRef is the name of the cluster realm",
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"realmRef": {
|
||||||
|
"description": "RealmRef is the name of the namespaced realm",
|
||||||
|
"type": "string"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"type": "object",
|
||||||
|
"additionalProperties": false
|
||||||
|
},
|
||||||
|
"resourcePath": {
|
||||||
|
"description": "ResourcePath is the Keycloak API path for this protocol mapper",
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"status": {
|
||||||
|
"description": "Status is a human-readable status message",
|
||||||
|
"type": "string"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"required": [
|
||||||
|
"ready"
|
||||||
|
],
|
||||||
|
"type": "object",
|
||||||
|
"additionalProperties": false
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"type": "object"
|
||||||
|
}
|
||||||
@@ -0,0 +1,189 @@
|
|||||||
|
{
|
||||||
|
"description": "KeycloakRealm defines a realm within a KeycloakInstance",
|
||||||
|
"properties": {
|
||||||
|
"apiVersion": {
|
||||||
|
"description": "APIVersion defines the versioned schema of this representation of an object.\nServers should convert recognized schemas to the latest internal value, and\nmay reject unrecognized values.\nMore info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources",
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"kind": {
|
||||||
|
"description": "Kind is a string value representing the REST resource this object represents.\nServers may infer this from the endpoint the client submits requests to.\nCannot be updated.\nIn CamelCase.\nMore info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds",
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"metadata": {
|
||||||
|
"type": "object"
|
||||||
|
},
|
||||||
|
"spec": {
|
||||||
|
"description": "KeycloakRealmSpec defines the desired state of KeycloakRealm",
|
||||||
|
"properties": {
|
||||||
|
"clusterInstanceRef": {
|
||||||
|
"description": "ClusterInstanceRef is a reference to a ClusterKeycloakInstance\nOne of instanceRef or clusterInstanceRef must be specified",
|
||||||
|
"properties": {
|
||||||
|
"name": {
|
||||||
|
"description": "Name of the cluster-scoped resource",
|
||||||
|
"type": "string"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"required": [
|
||||||
|
"name"
|
||||||
|
],
|
||||||
|
"type": "object",
|
||||||
|
"additionalProperties": false
|
||||||
|
},
|
||||||
|
"definition": {
|
||||||
|
"description": "Definition contains the Keycloak RealmRepresentation",
|
||||||
|
"type": "object",
|
||||||
|
"x-kubernetes-preserve-unknown-fields": true
|
||||||
|
},
|
||||||
|
"instanceRef": {
|
||||||
|
"description": "InstanceRef is a reference to a KeycloakInstance\nOne of instanceRef or clusterInstanceRef must be specified",
|
||||||
|
"properties": {
|
||||||
|
"name": {
|
||||||
|
"description": "Name of the resource",
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"namespace": {
|
||||||
|
"description": "Namespace of the resource (optional, defaults to the same namespace)",
|
||||||
|
"type": "string"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"required": [
|
||||||
|
"name"
|
||||||
|
],
|
||||||
|
"type": "object",
|
||||||
|
"additionalProperties": false
|
||||||
|
},
|
||||||
|
"realmName": {
|
||||||
|
"description": "RealmName is the name of the realm in Keycloak (defaults to metadata.name)",
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"smtpSecretRef": {
|
||||||
|
"description": "SmtpSecretRef is a reference to a Kubernetes Secret containing SMTP credentials.\nWhen set, the secret values are injected into definition.smtpServer.user and\ndefinition.smtpServer.password before syncing to Keycloak, so credentials\ndo not need to appear in plaintext in the CR.",
|
||||||
|
"properties": {
|
||||||
|
"name": {
|
||||||
|
"description": "Name of the Kubernetes Secret",
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"passwordKey": {
|
||||||
|
"default": "password",
|
||||||
|
"description": "PasswordKey is the key in the secret for the SMTP password (defaults to \"password\")",
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"userKey": {
|
||||||
|
"default": "user",
|
||||||
|
"description": "UserKey is the key in the secret for the SMTP username (defaults to \"user\")",
|
||||||
|
"type": "string"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"required": [
|
||||||
|
"name"
|
||||||
|
],
|
||||||
|
"type": "object",
|
||||||
|
"additionalProperties": false
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"required": [
|
||||||
|
"definition"
|
||||||
|
],
|
||||||
|
"type": "object",
|
||||||
|
"additionalProperties": false
|
||||||
|
},
|
||||||
|
"status": {
|
||||||
|
"description": "KeycloakRealmStatus defines the observed state of KeycloakRealm",
|
||||||
|
"properties": {
|
||||||
|
"conditions": {
|
||||||
|
"description": "Conditions represent the latest available observations",
|
||||||
|
"items": {
|
||||||
|
"description": "Condition contains details for one aspect of the current state of this API Resource.",
|
||||||
|
"properties": {
|
||||||
|
"lastTransitionTime": {
|
||||||
|
"description": "lastTransitionTime is the last time the condition transitioned from one status to another.\nThis should be when the underlying condition changed. If that is not known, then using the time when the API field changed is acceptable.",
|
||||||
|
"format": "date-time",
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"message": {
|
||||||
|
"description": "message is a human readable message indicating details about the transition.\nThis may be an empty string.",
|
||||||
|
"maxLength": 32768,
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"observedGeneration": {
|
||||||
|
"description": "observedGeneration represents the .metadata.generation that the condition was set based upon.\nFor instance, if .metadata.generation is currently 12, but the .status.conditions[x].observedGeneration is 9, the condition is out of date\nwith respect to the current state of the instance.",
|
||||||
|
"format": "int64",
|
||||||
|
"minimum": 0,
|
||||||
|
"type": "integer"
|
||||||
|
},
|
||||||
|
"reason": {
|
||||||
|
"description": "reason contains a programmatic identifier indicating the reason for the condition's last transition.\nProducers of specific condition types may define expected values and meanings for this field,\nand whether the values are considered a guaranteed API.\nThe value should be a CamelCase string.\nThis field may not be empty.",
|
||||||
|
"maxLength": 1024,
|
||||||
|
"minLength": 1,
|
||||||
|
"pattern": "^[A-Za-z]([A-Za-z0-9_,:]*[A-Za-z0-9_])?$",
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"status": {
|
||||||
|
"description": "status of the condition, one of True, False, Unknown.",
|
||||||
|
"enum": [
|
||||||
|
"True",
|
||||||
|
"False",
|
||||||
|
"Unknown"
|
||||||
|
],
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"type": {
|
||||||
|
"description": "type of condition in CamelCase or in foo.example.com/CamelCase.",
|
||||||
|
"maxLength": 316,
|
||||||
|
"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])$",
|
||||||
|
"type": "string"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"required": [
|
||||||
|
"lastTransitionTime",
|
||||||
|
"message",
|
||||||
|
"reason",
|
||||||
|
"status",
|
||||||
|
"type"
|
||||||
|
],
|
||||||
|
"type": "object",
|
||||||
|
"additionalProperties": false
|
||||||
|
},
|
||||||
|
"type": "array"
|
||||||
|
},
|
||||||
|
"instance": {
|
||||||
|
"description": "Instance contains the resolved instance reference",
|
||||||
|
"properties": {
|
||||||
|
"clusterInstanceRef": {
|
||||||
|
"description": "ClusterInstanceRef is the name of the cluster instance",
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"instanceRef": {
|
||||||
|
"description": "InstanceRef is the name of the namespaced instance",
|
||||||
|
"type": "string"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"type": "object",
|
||||||
|
"additionalProperties": false
|
||||||
|
},
|
||||||
|
"message": {
|
||||||
|
"description": "Message contains additional information",
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"ready": {
|
||||||
|
"description": "Ready indicates if the realm is ready",
|
||||||
|
"type": "boolean"
|
||||||
|
},
|
||||||
|
"resourcePath": {
|
||||||
|
"description": "ResourcePath is the Keycloak API path for this realm",
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"status": {
|
||||||
|
"description": "Status is a human-readable status message",
|
||||||
|
"type": "string"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"required": [
|
||||||
|
"ready"
|
||||||
|
],
|
||||||
|
"type": "object",
|
||||||
|
"additionalProperties": false
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"type": "object"
|
||||||
|
}
|
||||||
@@ -0,0 +1,185 @@
|
|||||||
|
{
|
||||||
|
"description": "KeycloakRequiredAction manages a required action provider within a Keycloak realm",
|
||||||
|
"properties": {
|
||||||
|
"apiVersion": {
|
||||||
|
"description": "APIVersion defines the versioned schema of this representation of an object.\nServers should convert recognized schemas to the latest internal value, and\nmay reject unrecognized values.\nMore info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources",
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"kind": {
|
||||||
|
"description": "Kind is a string value representing the REST resource this object represents.\nServers may infer this from the endpoint the client submits requests to.\nCannot be updated.\nIn CamelCase.\nMore info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds",
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"metadata": {
|
||||||
|
"type": "object"
|
||||||
|
},
|
||||||
|
"spec": {
|
||||||
|
"description": "KeycloakRequiredActionSpec defines the desired state of KeycloakRequiredAction",
|
||||||
|
"properties": {
|
||||||
|
"clusterRealmRef": {
|
||||||
|
"description": "ClusterRealmRef is a reference to a ClusterKeycloakRealm\nOne of realmRef or clusterRealmRef must be specified",
|
||||||
|
"properties": {
|
||||||
|
"name": {
|
||||||
|
"description": "Name of the cluster-scoped resource",
|
||||||
|
"type": "string"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"required": [
|
||||||
|
"name"
|
||||||
|
],
|
||||||
|
"type": "object",
|
||||||
|
"additionalProperties": false
|
||||||
|
},
|
||||||
|
"definition": {
|
||||||
|
"description": "Definition contains the Keycloak RequiredActionProviderRepresentation",
|
||||||
|
"type": "object",
|
||||||
|
"x-kubernetes-preserve-unknown-fields": true
|
||||||
|
},
|
||||||
|
"realmRef": {
|
||||||
|
"description": "RealmRef is a reference to a KeycloakRealm\nOne of realmRef or clusterRealmRef must be specified",
|
||||||
|
"properties": {
|
||||||
|
"name": {
|
||||||
|
"description": "Name of the resource",
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"namespace": {
|
||||||
|
"description": "Namespace of the resource (optional, defaults to the same namespace)",
|
||||||
|
"type": "string"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"required": [
|
||||||
|
"name"
|
||||||
|
],
|
||||||
|
"type": "object",
|
||||||
|
"additionalProperties": false
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"required": [
|
||||||
|
"definition"
|
||||||
|
],
|
||||||
|
"type": "object",
|
||||||
|
"additionalProperties": false
|
||||||
|
},
|
||||||
|
"status": {
|
||||||
|
"description": "KeycloakRequiredActionStatus defines the observed state of KeycloakRequiredAction",
|
||||||
|
"properties": {
|
||||||
|
"alias": {
|
||||||
|
"description": "Alias is the required action alias in Keycloak",
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"conditions": {
|
||||||
|
"description": "Conditions represent the latest available observations",
|
||||||
|
"items": {
|
||||||
|
"description": "Condition contains details for one aspect of the current state of this API Resource.",
|
||||||
|
"properties": {
|
||||||
|
"lastTransitionTime": {
|
||||||
|
"description": "lastTransitionTime is the last time the condition transitioned from one status to another.\nThis should be when the underlying condition changed. If that is not known, then using the time when the API field changed is acceptable.",
|
||||||
|
"format": "date-time",
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"message": {
|
||||||
|
"description": "message is a human readable message indicating details about the transition.\nThis may be an empty string.",
|
||||||
|
"maxLength": 32768,
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"observedGeneration": {
|
||||||
|
"description": "observedGeneration represents the .metadata.generation that the condition was set based upon.\nFor instance, if .metadata.generation is currently 12, but the .status.conditions[x].observedGeneration is 9, the condition is out of date\nwith respect to the current state of the instance.",
|
||||||
|
"format": "int64",
|
||||||
|
"minimum": 0,
|
||||||
|
"type": "integer"
|
||||||
|
},
|
||||||
|
"reason": {
|
||||||
|
"description": "reason contains a programmatic identifier indicating the reason for the condition's last transition.\nProducers of specific condition types may define expected values and meanings for this field,\nand whether the values are considered a guaranteed API.\nThe value should be a CamelCase string.\nThis field may not be empty.",
|
||||||
|
"maxLength": 1024,
|
||||||
|
"minLength": 1,
|
||||||
|
"pattern": "^[A-Za-z]([A-Za-z0-9_,:]*[A-Za-z0-9_])?$",
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"status": {
|
||||||
|
"description": "status of the condition, one of True, False, Unknown.",
|
||||||
|
"enum": [
|
||||||
|
"True",
|
||||||
|
"False",
|
||||||
|
"Unknown"
|
||||||
|
],
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"type": {
|
||||||
|
"description": "type of condition in CamelCase or in foo.example.com/CamelCase.",
|
||||||
|
"maxLength": 316,
|
||||||
|
"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])$",
|
||||||
|
"type": "string"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"required": [
|
||||||
|
"lastTransitionTime",
|
||||||
|
"message",
|
||||||
|
"reason",
|
||||||
|
"status",
|
||||||
|
"type"
|
||||||
|
],
|
||||||
|
"type": "object",
|
||||||
|
"additionalProperties": false
|
||||||
|
},
|
||||||
|
"type": "array"
|
||||||
|
},
|
||||||
|
"instance": {
|
||||||
|
"description": "Instance contains the resolved instance reference",
|
||||||
|
"properties": {
|
||||||
|
"clusterInstanceRef": {
|
||||||
|
"description": "ClusterInstanceRef is the name of the cluster instance",
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"instanceRef": {
|
||||||
|
"description": "InstanceRef is the name of the namespaced instance",
|
||||||
|
"type": "string"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"type": "object",
|
||||||
|
"additionalProperties": false
|
||||||
|
},
|
||||||
|
"message": {
|
||||||
|
"description": "Message contains additional information",
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"observedGeneration": {
|
||||||
|
"description": "ObservedGeneration is the generation of the spec that was last processed",
|
||||||
|
"format": "int64",
|
||||||
|
"type": "integer"
|
||||||
|
},
|
||||||
|
"ready": {
|
||||||
|
"description": "Ready indicates if the required action is synchronized",
|
||||||
|
"type": "boolean"
|
||||||
|
},
|
||||||
|
"realm": {
|
||||||
|
"description": "Realm contains the resolved realm reference",
|
||||||
|
"properties": {
|
||||||
|
"clusterRealmRef": {
|
||||||
|
"description": "ClusterRealmRef is the name of the cluster realm",
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"realmRef": {
|
||||||
|
"description": "RealmRef is the name of the namespaced realm",
|
||||||
|
"type": "string"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"type": "object",
|
||||||
|
"additionalProperties": false
|
||||||
|
},
|
||||||
|
"resourcePath": {
|
||||||
|
"description": "ResourcePath is the Keycloak API path for this required action",
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"status": {
|
||||||
|
"description": "Status is a human-readable status message",
|
||||||
|
"type": "string"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"required": [
|
||||||
|
"ready"
|
||||||
|
],
|
||||||
|
"type": "object",
|
||||||
|
"additionalProperties": false
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"type": "object"
|
||||||
|
}
|
||||||
@@ -0,0 +1,215 @@
|
|||||||
|
{
|
||||||
|
"description": "KeycloakRole defines a role within a KeycloakRealm or KeycloakClient",
|
||||||
|
"properties": {
|
||||||
|
"apiVersion": {
|
||||||
|
"description": "APIVersion defines the versioned schema of this representation of an object.\nServers should convert recognized schemas to the latest internal value, and\nmay reject unrecognized values.\nMore info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources",
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"kind": {
|
||||||
|
"description": "Kind is a string value representing the REST resource this object represents.\nServers may infer this from the endpoint the client submits requests to.\nCannot be updated.\nIn CamelCase.\nMore info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds",
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"metadata": {
|
||||||
|
"type": "object"
|
||||||
|
},
|
||||||
|
"spec": {
|
||||||
|
"description": "KeycloakRoleSpec defines the desired state of KeycloakRole",
|
||||||
|
"properties": {
|
||||||
|
"clientRef": {
|
||||||
|
"description": "ClientRef is a reference to a KeycloakClient for client-level roles\nIf not specified, the role is a realm-level role",
|
||||||
|
"properties": {
|
||||||
|
"name": {
|
||||||
|
"description": "Name of the resource",
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"namespace": {
|
||||||
|
"description": "Namespace of the resource (optional, defaults to the same namespace)",
|
||||||
|
"type": "string"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"required": [
|
||||||
|
"name"
|
||||||
|
],
|
||||||
|
"type": "object",
|
||||||
|
"additionalProperties": false
|
||||||
|
},
|
||||||
|
"clusterRealmRef": {
|
||||||
|
"description": "ClusterRealmRef is a reference to a ClusterKeycloakRealm\nOne of realmRef or clusterRealmRef must be specified",
|
||||||
|
"properties": {
|
||||||
|
"name": {
|
||||||
|
"description": "Name of the cluster-scoped resource",
|
||||||
|
"type": "string"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"required": [
|
||||||
|
"name"
|
||||||
|
],
|
||||||
|
"type": "object",
|
||||||
|
"additionalProperties": false
|
||||||
|
},
|
||||||
|
"definition": {
|
||||||
|
"description": "Definition contains the Keycloak RoleRepresentation",
|
||||||
|
"type": "object",
|
||||||
|
"x-kubernetes-preserve-unknown-fields": true
|
||||||
|
},
|
||||||
|
"realmRef": {
|
||||||
|
"description": "RealmRef is a reference to a KeycloakRealm\nOne of realmRef or clusterRealmRef must be specified",
|
||||||
|
"properties": {
|
||||||
|
"name": {
|
||||||
|
"description": "Name of the resource",
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"namespace": {
|
||||||
|
"description": "Namespace of the resource (optional, defaults to the same namespace)",
|
||||||
|
"type": "string"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"required": [
|
||||||
|
"name"
|
||||||
|
],
|
||||||
|
"type": "object",
|
||||||
|
"additionalProperties": false
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"required": [
|
||||||
|
"definition"
|
||||||
|
],
|
||||||
|
"type": "object",
|
||||||
|
"additionalProperties": false
|
||||||
|
},
|
||||||
|
"status": {
|
||||||
|
"description": "KeycloakRoleStatus defines the observed state of KeycloakRole",
|
||||||
|
"properties": {
|
||||||
|
"clientID": {
|
||||||
|
"description": "ClientID is the client ID if this is a client role",
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"conditions": {
|
||||||
|
"description": "Conditions represent the latest available observations",
|
||||||
|
"items": {
|
||||||
|
"description": "Condition contains details for one aspect of the current state of this API Resource.",
|
||||||
|
"properties": {
|
||||||
|
"lastTransitionTime": {
|
||||||
|
"description": "lastTransitionTime is the last time the condition transitioned from one status to another.\nThis should be when the underlying condition changed. If that is not known, then using the time when the API field changed is acceptable.",
|
||||||
|
"format": "date-time",
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"message": {
|
||||||
|
"description": "message is a human readable message indicating details about the transition.\nThis may be an empty string.",
|
||||||
|
"maxLength": 32768,
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"observedGeneration": {
|
||||||
|
"description": "observedGeneration represents the .metadata.generation that the condition was set based upon.\nFor instance, if .metadata.generation is currently 12, but the .status.conditions[x].observedGeneration is 9, the condition is out of date\nwith respect to the current state of the instance.",
|
||||||
|
"format": "int64",
|
||||||
|
"minimum": 0,
|
||||||
|
"type": "integer"
|
||||||
|
},
|
||||||
|
"reason": {
|
||||||
|
"description": "reason contains a programmatic identifier indicating the reason for the condition's last transition.\nProducers of specific condition types may define expected values and meanings for this field,\nand whether the values are considered a guaranteed API.\nThe value should be a CamelCase string.\nThis field may not be empty.",
|
||||||
|
"maxLength": 1024,
|
||||||
|
"minLength": 1,
|
||||||
|
"pattern": "^[A-Za-z]([A-Za-z0-9_,:]*[A-Za-z0-9_])?$",
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"status": {
|
||||||
|
"description": "status of the condition, one of True, False, Unknown.",
|
||||||
|
"enum": [
|
||||||
|
"True",
|
||||||
|
"False",
|
||||||
|
"Unknown"
|
||||||
|
],
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"type": {
|
||||||
|
"description": "type of condition in CamelCase or in foo.example.com/CamelCase.",
|
||||||
|
"maxLength": 316,
|
||||||
|
"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])$",
|
||||||
|
"type": "string"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"required": [
|
||||||
|
"lastTransitionTime",
|
||||||
|
"message",
|
||||||
|
"reason",
|
||||||
|
"status",
|
||||||
|
"type"
|
||||||
|
],
|
||||||
|
"type": "object",
|
||||||
|
"additionalProperties": false
|
||||||
|
},
|
||||||
|
"type": "array"
|
||||||
|
},
|
||||||
|
"instance": {
|
||||||
|
"description": "Instance contains the resolved instance reference",
|
||||||
|
"properties": {
|
||||||
|
"clusterInstanceRef": {
|
||||||
|
"description": "ClusterInstanceRef is the name of the cluster instance",
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"instanceRef": {
|
||||||
|
"description": "InstanceRef is the name of the namespaced instance",
|
||||||
|
"type": "string"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"type": "object",
|
||||||
|
"additionalProperties": false
|
||||||
|
},
|
||||||
|
"isClientRole": {
|
||||||
|
"description": "IsClientRole indicates if this is a client role",
|
||||||
|
"type": "boolean"
|
||||||
|
},
|
||||||
|
"message": {
|
||||||
|
"description": "Message contains additional information",
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"observedGeneration": {
|
||||||
|
"description": "ObservedGeneration is the generation of the spec that was last processed",
|
||||||
|
"format": "int64",
|
||||||
|
"type": "integer"
|
||||||
|
},
|
||||||
|
"ready": {
|
||||||
|
"description": "Ready indicates if the role is ready",
|
||||||
|
"type": "boolean"
|
||||||
|
},
|
||||||
|
"realm": {
|
||||||
|
"description": "Realm contains the resolved realm reference",
|
||||||
|
"properties": {
|
||||||
|
"clusterRealmRef": {
|
||||||
|
"description": "ClusterRealmRef is the name of the cluster realm",
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"realmRef": {
|
||||||
|
"description": "RealmRef is the name of the namespaced realm",
|
||||||
|
"type": "string"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"type": "object",
|
||||||
|
"additionalProperties": false
|
||||||
|
},
|
||||||
|
"resourcePath": {
|
||||||
|
"description": "ResourcePath is the Keycloak API path for this role",
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"roleID": {
|
||||||
|
"description": "RoleID is the Keycloak internal role ID",
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"roleName": {
|
||||||
|
"description": "RoleName is the role name in Keycloak",
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"status": {
|
||||||
|
"description": "Status is a human-readable status message",
|
||||||
|
"type": "string"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"required": [
|
||||||
|
"ready"
|
||||||
|
],
|
||||||
|
"type": "object",
|
||||||
|
"additionalProperties": false
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"type": "object"
|
||||||
|
}
|
||||||
@@ -0,0 +1,257 @@
|
|||||||
|
{
|
||||||
|
"description": "KeycloakRoleMapping maps a role to a user or group",
|
||||||
|
"properties": {
|
||||||
|
"apiVersion": {
|
||||||
|
"description": "APIVersion defines the versioned schema of this representation of an object.\nServers should convert recognized schemas to the latest internal value, and\nmay reject unrecognized values.\nMore info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources",
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"kind": {
|
||||||
|
"description": "Kind is a string value representing the REST resource this object represents.\nServers may infer this from the endpoint the client submits requests to.\nCannot be updated.\nIn CamelCase.\nMore info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds",
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"metadata": {
|
||||||
|
"type": "object"
|
||||||
|
},
|
||||||
|
"spec": {
|
||||||
|
"description": "KeycloakRoleMappingSpec defines the desired state of KeycloakRoleMapping",
|
||||||
|
"properties": {
|
||||||
|
"role": {
|
||||||
|
"description": "Role defines the role to assign (inline definition)\nEither Role or RoleRef must be specified",
|
||||||
|
"properties": {
|
||||||
|
"clientId": {
|
||||||
|
"description": "ClientID is the client ID for client-level roles (alternative to ClientRef)",
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"clientRef": {
|
||||||
|
"description": "ClientRef references a KeycloakClient for client-level roles\nIf not specified, the role is a realm-level role",
|
||||||
|
"properties": {
|
||||||
|
"name": {
|
||||||
|
"description": "Name of the resource",
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"namespace": {
|
||||||
|
"description": "Namespace of the resource (optional, defaults to the same namespace)",
|
||||||
|
"type": "string"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"required": [
|
||||||
|
"name"
|
||||||
|
],
|
||||||
|
"type": "object",
|
||||||
|
"additionalProperties": false
|
||||||
|
},
|
||||||
|
"name": {
|
||||||
|
"description": "Name is the role name",
|
||||||
|
"type": "string"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"required": [
|
||||||
|
"name"
|
||||||
|
],
|
||||||
|
"type": "object",
|
||||||
|
"additionalProperties": false
|
||||||
|
},
|
||||||
|
"roleRef": {
|
||||||
|
"description": "RoleRef references an existing KeycloakRole resource\nEither Role or RoleRef must be specified",
|
||||||
|
"properties": {
|
||||||
|
"name": {
|
||||||
|
"description": "Name of the resource",
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"namespace": {
|
||||||
|
"description": "Namespace of the resource (optional, defaults to the same namespace)",
|
||||||
|
"type": "string"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"required": [
|
||||||
|
"name"
|
||||||
|
],
|
||||||
|
"type": "object",
|
||||||
|
"additionalProperties": false
|
||||||
|
},
|
||||||
|
"subject": {
|
||||||
|
"description": "Subject defines who the role is assigned to (user or group)",
|
||||||
|
"properties": {
|
||||||
|
"groupRef": {
|
||||||
|
"description": "GroupRef references a KeycloakGroup",
|
||||||
|
"properties": {
|
||||||
|
"name": {
|
||||||
|
"description": "Name of the resource",
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"namespace": {
|
||||||
|
"description": "Namespace of the resource (optional, defaults to the same namespace)",
|
||||||
|
"type": "string"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"required": [
|
||||||
|
"name"
|
||||||
|
],
|
||||||
|
"type": "object",
|
||||||
|
"additionalProperties": false
|
||||||
|
},
|
||||||
|
"userRef": {
|
||||||
|
"description": "UserRef references a KeycloakUser",
|
||||||
|
"properties": {
|
||||||
|
"name": {
|
||||||
|
"description": "Name of the resource",
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"namespace": {
|
||||||
|
"description": "Namespace of the resource (optional, defaults to the same namespace)",
|
||||||
|
"type": "string"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"required": [
|
||||||
|
"name"
|
||||||
|
],
|
||||||
|
"type": "object",
|
||||||
|
"additionalProperties": false
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"type": "object",
|
||||||
|
"additionalProperties": false
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"required": [
|
||||||
|
"subject"
|
||||||
|
],
|
||||||
|
"type": "object",
|
||||||
|
"additionalProperties": false
|
||||||
|
},
|
||||||
|
"status": {
|
||||||
|
"description": "KeycloakRoleMappingStatus defines the observed state of KeycloakRoleMapping",
|
||||||
|
"properties": {
|
||||||
|
"conditions": {
|
||||||
|
"description": "Conditions represent the latest available observations",
|
||||||
|
"items": {
|
||||||
|
"description": "Condition contains details for one aspect of the current state of this API Resource.",
|
||||||
|
"properties": {
|
||||||
|
"lastTransitionTime": {
|
||||||
|
"description": "lastTransitionTime is the last time the condition transitioned from one status to another.\nThis should be when the underlying condition changed. If that is not known, then using the time when the API field changed is acceptable.",
|
||||||
|
"format": "date-time",
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"message": {
|
||||||
|
"description": "message is a human readable message indicating details about the transition.\nThis may be an empty string.",
|
||||||
|
"maxLength": 32768,
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"observedGeneration": {
|
||||||
|
"description": "observedGeneration represents the .metadata.generation that the condition was set based upon.\nFor instance, if .metadata.generation is currently 12, but the .status.conditions[x].observedGeneration is 9, the condition is out of date\nwith respect to the current state of the instance.",
|
||||||
|
"format": "int64",
|
||||||
|
"minimum": 0,
|
||||||
|
"type": "integer"
|
||||||
|
},
|
||||||
|
"reason": {
|
||||||
|
"description": "reason contains a programmatic identifier indicating the reason for the condition's last transition.\nProducers of specific condition types may define expected values and meanings for this field,\nand whether the values are considered a guaranteed API.\nThe value should be a CamelCase string.\nThis field may not be empty.",
|
||||||
|
"maxLength": 1024,
|
||||||
|
"minLength": 1,
|
||||||
|
"pattern": "^[A-Za-z]([A-Za-z0-9_,:]*[A-Za-z0-9_])?$",
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"status": {
|
||||||
|
"description": "status of the condition, one of True, False, Unknown.",
|
||||||
|
"enum": [
|
||||||
|
"True",
|
||||||
|
"False",
|
||||||
|
"Unknown"
|
||||||
|
],
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"type": {
|
||||||
|
"description": "type of condition in CamelCase or in foo.example.com/CamelCase.",
|
||||||
|
"maxLength": 316,
|
||||||
|
"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])$",
|
||||||
|
"type": "string"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"required": [
|
||||||
|
"lastTransitionTime",
|
||||||
|
"message",
|
||||||
|
"reason",
|
||||||
|
"status",
|
||||||
|
"type"
|
||||||
|
],
|
||||||
|
"type": "object",
|
||||||
|
"additionalProperties": false
|
||||||
|
},
|
||||||
|
"type": "array"
|
||||||
|
},
|
||||||
|
"instance": {
|
||||||
|
"description": "Instance contains the resolved instance reference",
|
||||||
|
"properties": {
|
||||||
|
"clusterInstanceRef": {
|
||||||
|
"description": "ClusterInstanceRef is the name of the cluster instance",
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"instanceRef": {
|
||||||
|
"description": "InstanceRef is the name of the namespaced instance",
|
||||||
|
"type": "string"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"type": "object",
|
||||||
|
"additionalProperties": false
|
||||||
|
},
|
||||||
|
"message": {
|
||||||
|
"description": "Message contains additional information",
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"observedGeneration": {
|
||||||
|
"description": "ObservedGeneration is the generation of the spec that was last processed",
|
||||||
|
"format": "int64",
|
||||||
|
"type": "integer"
|
||||||
|
},
|
||||||
|
"ready": {
|
||||||
|
"description": "Ready indicates if the role mapping is applied",
|
||||||
|
"type": "boolean"
|
||||||
|
},
|
||||||
|
"realm": {
|
||||||
|
"description": "Realm contains the resolved realm reference",
|
||||||
|
"properties": {
|
||||||
|
"clusterRealmRef": {
|
||||||
|
"description": "ClusterRealmRef is the name of the cluster realm",
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"realmRef": {
|
||||||
|
"description": "RealmRef is the name of the namespaced realm",
|
||||||
|
"type": "string"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"type": "object",
|
||||||
|
"additionalProperties": false
|
||||||
|
},
|
||||||
|
"resourcePath": {
|
||||||
|
"description": "ResourcePath is the Keycloak API path for this role mapping",
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"roleName": {
|
||||||
|
"description": "RoleName is the resolved role name",
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"roleType": {
|
||||||
|
"description": "RoleType is either \"realm\" or \"client\"",
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"status": {
|
||||||
|
"description": "Status is a human-readable status message",
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"subjectID": {
|
||||||
|
"description": "SubjectID is the Keycloak ID of the subject",
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"subjectType": {
|
||||||
|
"description": "SubjectType is either \"user\" or \"group\"",
|
||||||
|
"type": "string"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"required": [
|
||||||
|
"ready"
|
||||||
|
],
|
||||||
|
"type": "object",
|
||||||
|
"additionalProperties": false
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"type": "object"
|
||||||
|
}
|
||||||
@@ -0,0 +1,252 @@
|
|||||||
|
{
|
||||||
|
"description": "KeycloakUser defines a user within a KeycloakRealm",
|
||||||
|
"properties": {
|
||||||
|
"apiVersion": {
|
||||||
|
"description": "APIVersion defines the versioned schema of this representation of an object.\nServers should convert recognized schemas to the latest internal value, and\nmay reject unrecognized values.\nMore info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources",
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"kind": {
|
||||||
|
"description": "Kind is a string value representing the REST resource this object represents.\nServers may infer this from the endpoint the client submits requests to.\nCannot be updated.\nIn CamelCase.\nMore info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds",
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"metadata": {
|
||||||
|
"type": "object"
|
||||||
|
},
|
||||||
|
"spec": {
|
||||||
|
"description": "KeycloakUserSpec defines the desired state of KeycloakUser",
|
||||||
|
"properties": {
|
||||||
|
"clientRef": {
|
||||||
|
"description": "ClientRef is a reference to a KeycloakClient for service account users\nOne of realmRef, clusterRealmRef, or clientRef must be specified\nUse this to manage the service account user associated with a client",
|
||||||
|
"properties": {
|
||||||
|
"name": {
|
||||||
|
"description": "Name of the resource",
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"namespace": {
|
||||||
|
"description": "Namespace of the resource (optional, defaults to the same namespace)",
|
||||||
|
"type": "string"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"required": [
|
||||||
|
"name"
|
||||||
|
],
|
||||||
|
"type": "object",
|
||||||
|
"additionalProperties": false
|
||||||
|
},
|
||||||
|
"clusterRealmRef": {
|
||||||
|
"description": "ClusterRealmRef is a reference to a ClusterKeycloakRealm\nOne of realmRef, clusterRealmRef, or clientRef must be specified\nUse this for regular realm users with cluster-scoped realms",
|
||||||
|
"properties": {
|
||||||
|
"name": {
|
||||||
|
"description": "Name of the cluster-scoped resource",
|
||||||
|
"type": "string"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"required": [
|
||||||
|
"name"
|
||||||
|
],
|
||||||
|
"type": "object",
|
||||||
|
"additionalProperties": false
|
||||||
|
},
|
||||||
|
"definition": {
|
||||||
|
"description": "Definition contains the Keycloak UserRepresentation",
|
||||||
|
"type": "object",
|
||||||
|
"x-kubernetes-preserve-unknown-fields": true
|
||||||
|
},
|
||||||
|
"initialPassword": {
|
||||||
|
"description": "InitialPassword sets the initial password for the user (only on creation)",
|
||||||
|
"properties": {
|
||||||
|
"temporary": {
|
||||||
|
"description": "Temporary indicates if the user must change password on first login",
|
||||||
|
"type": "boolean"
|
||||||
|
},
|
||||||
|
"value": {
|
||||||
|
"description": "Value is the password value",
|
||||||
|
"type": "string"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"required": [
|
||||||
|
"value"
|
||||||
|
],
|
||||||
|
"type": "object",
|
||||||
|
"additionalProperties": false
|
||||||
|
},
|
||||||
|
"realmRef": {
|
||||||
|
"description": "RealmRef is a reference to a KeycloakRealm\nOne of realmRef, clusterRealmRef, or clientRef must be specified\nUse this for regular realm users",
|
||||||
|
"properties": {
|
||||||
|
"name": {
|
||||||
|
"description": "Name of the resource",
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"namespace": {
|
||||||
|
"description": "Namespace of the resource (optional, defaults to the same namespace)",
|
||||||
|
"type": "string"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"required": [
|
||||||
|
"name"
|
||||||
|
],
|
||||||
|
"type": "object",
|
||||||
|
"additionalProperties": false
|
||||||
|
},
|
||||||
|
"userSecret": {
|
||||||
|
"description": "UserSecret configures where to store user credentials",
|
||||||
|
"properties": {
|
||||||
|
"generatePassword": {
|
||||||
|
"description": "GeneratePassword indicates whether to generate a password",
|
||||||
|
"type": "boolean"
|
||||||
|
},
|
||||||
|
"passwordKey": {
|
||||||
|
"description": "PasswordKey is the key for the password (defaults to \"password\")",
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"secretName": {
|
||||||
|
"description": "SecretName is the name of the Kubernetes secret to create",
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"usernameKey": {
|
||||||
|
"description": "UsernameKey is the key for the username in the secret (defaults to \"username\")",
|
||||||
|
"type": "string"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"required": [
|
||||||
|
"secretName"
|
||||||
|
],
|
||||||
|
"type": "object",
|
||||||
|
"additionalProperties": false
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"type": "object",
|
||||||
|
"additionalProperties": false
|
||||||
|
},
|
||||||
|
"status": {
|
||||||
|
"description": "KeycloakUserStatus defines the observed state of KeycloakUser",
|
||||||
|
"properties": {
|
||||||
|
"clientID": {
|
||||||
|
"description": "ClientID is the client UUID if this is a service account user",
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"conditions": {
|
||||||
|
"description": "Conditions represent the latest available observations",
|
||||||
|
"items": {
|
||||||
|
"description": "Condition contains details for one aspect of the current state of this API Resource.",
|
||||||
|
"properties": {
|
||||||
|
"lastTransitionTime": {
|
||||||
|
"description": "lastTransitionTime is the last time the condition transitioned from one status to another.\nThis should be when the underlying condition changed. If that is not known, then using the time when the API field changed is acceptable.",
|
||||||
|
"format": "date-time",
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"message": {
|
||||||
|
"description": "message is a human readable message indicating details about the transition.\nThis may be an empty string.",
|
||||||
|
"maxLength": 32768,
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"observedGeneration": {
|
||||||
|
"description": "observedGeneration represents the .metadata.generation that the condition was set based upon.\nFor instance, if .metadata.generation is currently 12, but the .status.conditions[x].observedGeneration is 9, the condition is out of date\nwith respect to the current state of the instance.",
|
||||||
|
"format": "int64",
|
||||||
|
"minimum": 0,
|
||||||
|
"type": "integer"
|
||||||
|
},
|
||||||
|
"reason": {
|
||||||
|
"description": "reason contains a programmatic identifier indicating the reason for the condition's last transition.\nProducers of specific condition types may define expected values and meanings for this field,\nand whether the values are considered a guaranteed API.\nThe value should be a CamelCase string.\nThis field may not be empty.",
|
||||||
|
"maxLength": 1024,
|
||||||
|
"minLength": 1,
|
||||||
|
"pattern": "^[A-Za-z]([A-Za-z0-9_,:]*[A-Za-z0-9_])?$",
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"status": {
|
||||||
|
"description": "status of the condition, one of True, False, Unknown.",
|
||||||
|
"enum": [
|
||||||
|
"True",
|
||||||
|
"False",
|
||||||
|
"Unknown"
|
||||||
|
],
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"type": {
|
||||||
|
"description": "type of condition in CamelCase or in foo.example.com/CamelCase.",
|
||||||
|
"maxLength": 316,
|
||||||
|
"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])$",
|
||||||
|
"type": "string"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"required": [
|
||||||
|
"lastTransitionTime",
|
||||||
|
"message",
|
||||||
|
"reason",
|
||||||
|
"status",
|
||||||
|
"type"
|
||||||
|
],
|
||||||
|
"type": "object",
|
||||||
|
"additionalProperties": false
|
||||||
|
},
|
||||||
|
"type": "array"
|
||||||
|
},
|
||||||
|
"instance": {
|
||||||
|
"description": "Instance contains the resolved instance reference",
|
||||||
|
"properties": {
|
||||||
|
"clusterInstanceRef": {
|
||||||
|
"description": "ClusterInstanceRef is the name of the cluster instance",
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"instanceRef": {
|
||||||
|
"description": "InstanceRef is the name of the namespaced instance",
|
||||||
|
"type": "string"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"type": "object",
|
||||||
|
"additionalProperties": false
|
||||||
|
},
|
||||||
|
"isServiceAccount": {
|
||||||
|
"description": "IsServiceAccount indicates if this user is a service account for a client",
|
||||||
|
"type": "boolean"
|
||||||
|
},
|
||||||
|
"message": {
|
||||||
|
"description": "Message contains additional information",
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"observedGeneration": {
|
||||||
|
"description": "ObservedGeneration is the generation of the spec that was last processed",
|
||||||
|
"format": "int64",
|
||||||
|
"type": "integer"
|
||||||
|
},
|
||||||
|
"ready": {
|
||||||
|
"description": "Ready indicates if the user is ready",
|
||||||
|
"type": "boolean"
|
||||||
|
},
|
||||||
|
"realm": {
|
||||||
|
"description": "Realm contains the resolved realm reference",
|
||||||
|
"properties": {
|
||||||
|
"clusterRealmRef": {
|
||||||
|
"description": "ClusterRealmRef is the name of the cluster realm",
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"realmRef": {
|
||||||
|
"description": "RealmRef is the name of the namespaced realm",
|
||||||
|
"type": "string"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"type": "object",
|
||||||
|
"additionalProperties": false
|
||||||
|
},
|
||||||
|
"resourcePath": {
|
||||||
|
"description": "ResourcePath is the Keycloak API path for this user",
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"status": {
|
||||||
|
"description": "Status is a human-readable status message",
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"userID": {
|
||||||
|
"description": "UserID is the Keycloak internal user ID",
|
||||||
|
"type": "string"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"required": [
|
||||||
|
"ready"
|
||||||
|
],
|
||||||
|
"type": "object",
|
||||||
|
"additionalProperties": false
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"type": "object"
|
||||||
|
}
|
||||||
@@ -0,0 +1,229 @@
|
|||||||
|
{
|
||||||
|
"description": "KeycloakUserCredential manages credentials for a KeycloakUser",
|
||||||
|
"properties": {
|
||||||
|
"apiVersion": {
|
||||||
|
"description": "APIVersion defines the versioned schema of this representation of an object.\nServers should convert recognized schemas to the latest internal value, and\nmay reject unrecognized values.\nMore info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources",
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"kind": {
|
||||||
|
"description": "Kind is a string value representing the REST resource this object represents.\nServers may infer this from the endpoint the client submits requests to.\nCannot be updated.\nIn CamelCase.\nMore info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds",
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"metadata": {
|
||||||
|
"type": "object"
|
||||||
|
},
|
||||||
|
"spec": {
|
||||||
|
"description": "KeycloakUserCredentialSpec defines the desired state of KeycloakUserCredential",
|
||||||
|
"properties": {
|
||||||
|
"userRef": {
|
||||||
|
"description": "UserRef is a reference to a KeycloakUser",
|
||||||
|
"properties": {
|
||||||
|
"name": {
|
||||||
|
"description": "Name of the resource",
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"namespace": {
|
||||||
|
"description": "Namespace of the resource (optional, defaults to the same namespace)",
|
||||||
|
"type": "string"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"required": [
|
||||||
|
"name"
|
||||||
|
],
|
||||||
|
"type": "object",
|
||||||
|
"additionalProperties": false
|
||||||
|
},
|
||||||
|
"userSecret": {
|
||||||
|
"description": "UserSecret defines the secret containing the credentials",
|
||||||
|
"properties": {
|
||||||
|
"create": {
|
||||||
|
"description": "Create indicates whether to create the secret if it doesn't exist",
|
||||||
|
"type": "boolean"
|
||||||
|
},
|
||||||
|
"emailKey": {
|
||||||
|
"description": "EmailKey is the key for the email in the secret",
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"passwordKey": {
|
||||||
|
"default": "password",
|
||||||
|
"description": "PasswordKey is the key for the password in the secret",
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"passwordPolicy": {
|
||||||
|
"description": "PasswordPolicy configures password generation",
|
||||||
|
"properties": {
|
||||||
|
"includeNumbers": {
|
||||||
|
"default": true,
|
||||||
|
"description": "IncludeNumbers includes numbers in the password",
|
||||||
|
"type": "boolean"
|
||||||
|
},
|
||||||
|
"includeSymbols": {
|
||||||
|
"default": true,
|
||||||
|
"description": "IncludeSymbols includes symbols in the password",
|
||||||
|
"type": "boolean"
|
||||||
|
},
|
||||||
|
"length": {
|
||||||
|
"default": 24,
|
||||||
|
"description": "Length is the password length (default 24)",
|
||||||
|
"type": "integer"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"type": "object",
|
||||||
|
"additionalProperties": false
|
||||||
|
},
|
||||||
|
"secretName": {
|
||||||
|
"description": "SecretName is the name of the Kubernetes secret",
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"usernameKey": {
|
||||||
|
"default": "username",
|
||||||
|
"description": "UsernameKey is the key for the username in the secret",
|
||||||
|
"type": "string"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"required": [
|
||||||
|
"secretName"
|
||||||
|
],
|
||||||
|
"type": "object",
|
||||||
|
"additionalProperties": false
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"required": [
|
||||||
|
"userRef",
|
||||||
|
"userSecret"
|
||||||
|
],
|
||||||
|
"type": "object",
|
||||||
|
"additionalProperties": false
|
||||||
|
},
|
||||||
|
"status": {
|
||||||
|
"description": "KeycloakUserCredentialStatus defines the observed state of KeycloakUserCredential",
|
||||||
|
"properties": {
|
||||||
|
"conditions": {
|
||||||
|
"description": "Conditions represent the latest available observations",
|
||||||
|
"items": {
|
||||||
|
"description": "Condition contains details for one aspect of the current state of this API Resource.",
|
||||||
|
"properties": {
|
||||||
|
"lastTransitionTime": {
|
||||||
|
"description": "lastTransitionTime is the last time the condition transitioned from one status to another.\nThis should be when the underlying condition changed. If that is not known, then using the time when the API field changed is acceptable.",
|
||||||
|
"format": "date-time",
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"message": {
|
||||||
|
"description": "message is a human readable message indicating details about the transition.\nThis may be an empty string.",
|
||||||
|
"maxLength": 32768,
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"observedGeneration": {
|
||||||
|
"description": "observedGeneration represents the .metadata.generation that the condition was set based upon.\nFor instance, if .metadata.generation is currently 12, but the .status.conditions[x].observedGeneration is 9, the condition is out of date\nwith respect to the current state of the instance.",
|
||||||
|
"format": "int64",
|
||||||
|
"minimum": 0,
|
||||||
|
"type": "integer"
|
||||||
|
},
|
||||||
|
"reason": {
|
||||||
|
"description": "reason contains a programmatic identifier indicating the reason for the condition's last transition.\nProducers of specific condition types may define expected values and meanings for this field,\nand whether the values are considered a guaranteed API.\nThe value should be a CamelCase string.\nThis field may not be empty.",
|
||||||
|
"maxLength": 1024,
|
||||||
|
"minLength": 1,
|
||||||
|
"pattern": "^[A-Za-z]([A-Za-z0-9_,:]*[A-Za-z0-9_])?$",
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"status": {
|
||||||
|
"description": "status of the condition, one of True, False, Unknown.",
|
||||||
|
"enum": [
|
||||||
|
"True",
|
||||||
|
"False",
|
||||||
|
"Unknown"
|
||||||
|
],
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"type": {
|
||||||
|
"description": "type of condition in CamelCase or in foo.example.com/CamelCase.",
|
||||||
|
"maxLength": 316,
|
||||||
|
"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])$",
|
||||||
|
"type": "string"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"required": [
|
||||||
|
"lastTransitionTime",
|
||||||
|
"message",
|
||||||
|
"reason",
|
||||||
|
"status",
|
||||||
|
"type"
|
||||||
|
],
|
||||||
|
"type": "object",
|
||||||
|
"additionalProperties": false
|
||||||
|
},
|
||||||
|
"type": "array"
|
||||||
|
},
|
||||||
|
"instance": {
|
||||||
|
"description": "Instance contains the resolved instance reference",
|
||||||
|
"properties": {
|
||||||
|
"clusterInstanceRef": {
|
||||||
|
"description": "ClusterInstanceRef is the name of the cluster instance",
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"instanceRef": {
|
||||||
|
"description": "InstanceRef is the name of the namespaced instance",
|
||||||
|
"type": "string"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"type": "object",
|
||||||
|
"additionalProperties": false
|
||||||
|
},
|
||||||
|
"message": {
|
||||||
|
"description": "Message contains additional information",
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"observedGeneration": {
|
||||||
|
"description": "ObservedGeneration is the generation of the spec that was last processed",
|
||||||
|
"format": "int64",
|
||||||
|
"type": "integer"
|
||||||
|
},
|
||||||
|
"passwordHash": {
|
||||||
|
"description": "PasswordHash is a hash of the last synchronized password (for change detection)",
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"ready": {
|
||||||
|
"description": "Ready indicates if the credentials are synchronized",
|
||||||
|
"type": "boolean"
|
||||||
|
},
|
||||||
|
"realm": {
|
||||||
|
"description": "Realm contains the resolved realm reference",
|
||||||
|
"properties": {
|
||||||
|
"clusterRealmRef": {
|
||||||
|
"description": "ClusterRealmRef is the name of the cluster realm",
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"realmRef": {
|
||||||
|
"description": "RealmRef is the name of the namespaced realm",
|
||||||
|
"type": "string"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"type": "object",
|
||||||
|
"additionalProperties": false
|
||||||
|
},
|
||||||
|
"resourcePath": {
|
||||||
|
"description": "ResourcePath is the Keycloak API path for the user",
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"secretCreated": {
|
||||||
|
"description": "SecretCreated indicates if the secret was created by the operator",
|
||||||
|
"type": "boolean"
|
||||||
|
},
|
||||||
|
"secretResourceVersion": {
|
||||||
|
"description": "SecretResourceVersion is the resource version of the secret when last synced",
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"status": {
|
||||||
|
"description": "Status is a human-readable status message",
|
||||||
|
"type": "string"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"required": [
|
||||||
|
"ready"
|
||||||
|
],
|
||||||
|
"type": "object",
|
||||||
|
"additionalProperties": false
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"type": "object"
|
||||||
|
}
|
||||||
@@ -0,0 +1,642 @@
|
|||||||
|
{
|
||||||
|
"description": "Kustomization is the Schema for the kustomizations API.",
|
||||||
|
"properties": {
|
||||||
|
"apiVersion": {
|
||||||
|
"description": "APIVersion defines the versioned schema of this representation of an object.\nServers should convert recognized schemas to the latest internal value, and\nmay reject unrecognized values.\nMore info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources",
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"kind": {
|
||||||
|
"description": "Kind is a string value representing the REST resource this object represents.\nServers may infer this from the endpoint the client submits requests to.\nCannot be updated.\nIn CamelCase.\nMore info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds",
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"metadata": {
|
||||||
|
"type": "object"
|
||||||
|
},
|
||||||
|
"spec": {
|
||||||
|
"description": "KustomizationSpec defines the configuration to calculate the desired state\nfrom a Source using Kustomize.",
|
||||||
|
"properties": {
|
||||||
|
"commonMetadata": {
|
||||||
|
"description": "CommonMetadata specifies the common labels and annotations that are\napplied to all resources. Any existing label or annotation will be\noverridden if its key matches a common one.",
|
||||||
|
"properties": {
|
||||||
|
"annotations": {
|
||||||
|
"additionalProperties": {
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"description": "Annotations to be added to the object's metadata.",
|
||||||
|
"type": "object"
|
||||||
|
},
|
||||||
|
"labels": {
|
||||||
|
"additionalProperties": {
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"description": "Labels to be added to the object's metadata.",
|
||||||
|
"type": "object"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"type": "object",
|
||||||
|
"additionalProperties": false
|
||||||
|
},
|
||||||
|
"components": {
|
||||||
|
"description": "Components specifies relative paths to kustomize Components.",
|
||||||
|
"items": {
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"type": "array"
|
||||||
|
},
|
||||||
|
"decryption": {
|
||||||
|
"description": "Decrypt Kubernetes secrets before applying them on the cluster.",
|
||||||
|
"properties": {
|
||||||
|
"provider": {
|
||||||
|
"description": "Provider is the name of the decryption engine.",
|
||||||
|
"enum": [
|
||||||
|
"sops"
|
||||||
|
],
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"secretRef": {
|
||||||
|
"description": "The secret name containing the private OpenPGP keys used for decryption.\nA static credential for a cloud provider defined inside the Secret\ntakes priority to secret-less authentication with the ServiceAccountName\nfield.",
|
||||||
|
"properties": {
|
||||||
|
"name": {
|
||||||
|
"description": "Name of the referent.",
|
||||||
|
"type": "string"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"required": [
|
||||||
|
"name"
|
||||||
|
],
|
||||||
|
"type": "object",
|
||||||
|
"additionalProperties": false
|
||||||
|
},
|
||||||
|
"serviceAccountName": {
|
||||||
|
"description": "ServiceAccountName is the name of the service account used to\nauthenticate with KMS services from cloud providers. If a\nstatic credential for a given cloud provider is defined\ninside the Secret referenced by SecretRef, that static\ncredential takes priority.",
|
||||||
|
"type": "string"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"required": [
|
||||||
|
"provider"
|
||||||
|
],
|
||||||
|
"type": "object",
|
||||||
|
"additionalProperties": false
|
||||||
|
},
|
||||||
|
"deletionPolicy": {
|
||||||
|
"description": "DeletionPolicy can be used to control garbage collection when this\nKustomization is deleted. Valid values are ('MirrorPrune', 'Delete',\n'WaitForTermination', 'Orphan'). 'MirrorPrune' mirrors the Prune field\n(orphan if false, delete if true). Defaults to 'MirrorPrune'.",
|
||||||
|
"enum": [
|
||||||
|
"MirrorPrune",
|
||||||
|
"Delete",
|
||||||
|
"WaitForTermination",
|
||||||
|
"Orphan"
|
||||||
|
],
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"dependsOn": {
|
||||||
|
"description": "DependsOn may contain a DependencyReference slice\nwith references to Kustomization resources that must be ready before this\nKustomization can be reconciled.",
|
||||||
|
"items": {
|
||||||
|
"description": "DependencyReference defines a Kustomization dependency on another Kustomization resource.",
|
||||||
|
"properties": {
|
||||||
|
"name": {
|
||||||
|
"description": "Name of the referent.",
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"namespace": {
|
||||||
|
"description": "Namespace of the referent, defaults to the namespace of the Kustomization\nresource object that contains the reference.",
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"readyExpr": {
|
||||||
|
"description": "ReadyExpr is a CEL expression that can be used to assess the readiness\nof a dependency. When specified, the built-in readiness check\nis replaced by the logic defined in the CEL expression.\nTo make the CEL expression additive to the built-in readiness check,\nthe feature gate `AdditiveCELDependencyCheck` must be set to `true`.",
|
||||||
|
"type": "string"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"required": [
|
||||||
|
"name"
|
||||||
|
],
|
||||||
|
"type": "object",
|
||||||
|
"additionalProperties": false
|
||||||
|
},
|
||||||
|
"type": "array"
|
||||||
|
},
|
||||||
|
"force": {
|
||||||
|
"default": false,
|
||||||
|
"description": "Force instructs the controller to recreate resources\nwhen patching fails due to an immutable field change.",
|
||||||
|
"type": "boolean"
|
||||||
|
},
|
||||||
|
"healthCheckExprs": {
|
||||||
|
"description": "HealthCheckExprs is a list of healthcheck expressions for evaluating the\nhealth of custom resources using Common Expression Language (CEL).\nThe expressions are evaluated only when Wait or HealthChecks are specified.",
|
||||||
|
"items": {
|
||||||
|
"description": "CustomHealthCheck defines the health check for custom resources.",
|
||||||
|
"properties": {
|
||||||
|
"apiVersion": {
|
||||||
|
"description": "APIVersion of the custom resource under evaluation.",
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"current": {
|
||||||
|
"description": "Current is the CEL expression that determines if the status\nof the custom resource has reached the desired state.",
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"failed": {
|
||||||
|
"description": "Failed is the CEL expression that determines if the status\nof the custom resource has failed to reach the desired state.",
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"inProgress": {
|
||||||
|
"description": "InProgress is the CEL expression that determines if the status\nof the custom resource has not yet reached the desired state.",
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"kind": {
|
||||||
|
"description": "Kind of the custom resource under evaluation.",
|
||||||
|
"type": "string"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"required": [
|
||||||
|
"apiVersion",
|
||||||
|
"current",
|
||||||
|
"kind"
|
||||||
|
],
|
||||||
|
"type": "object",
|
||||||
|
"additionalProperties": false
|
||||||
|
},
|
||||||
|
"type": "array"
|
||||||
|
},
|
||||||
|
"healthChecks": {
|
||||||
|
"description": "A list of resources to be included in the health assessment.",
|
||||||
|
"items": {
|
||||||
|
"description": "NamespacedObjectKindReference contains enough information to locate the typed referenced Kubernetes resource object\nin any namespace.",
|
||||||
|
"properties": {
|
||||||
|
"apiVersion": {
|
||||||
|
"description": "API version of the referent, if not specified the Kubernetes preferred version will be used.",
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"kind": {
|
||||||
|
"description": "Kind of the referent.",
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"name": {
|
||||||
|
"description": "Name of the referent.",
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"namespace": {
|
||||||
|
"description": "Namespace of the referent, when not specified it acts as LocalObjectReference.",
|
||||||
|
"type": "string"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"required": [
|
||||||
|
"kind",
|
||||||
|
"name"
|
||||||
|
],
|
||||||
|
"type": "object",
|
||||||
|
"additionalProperties": false
|
||||||
|
},
|
||||||
|
"type": "array"
|
||||||
|
},
|
||||||
|
"ignoreMissingComponents": {
|
||||||
|
"description": "IgnoreMissingComponents instructs the controller to ignore Components paths\nnot found in source by removing them from the generated kustomization.yaml\nbefore running kustomize build.",
|
||||||
|
"type": "boolean"
|
||||||
|
},
|
||||||
|
"images": {
|
||||||
|
"description": "Images is a list of (image name, new name, new tag or digest)\nfor changing image names, tags or digests. This can also be achieved with a\npatch, but this operator is simpler to specify.",
|
||||||
|
"items": {
|
||||||
|
"description": "Image contains an image name, a new name, a new tag or digest, which will replace the original name and tag.",
|
||||||
|
"properties": {
|
||||||
|
"digest": {
|
||||||
|
"description": "Digest is the value used to replace the original image tag.\nIf digest is present NewTag value is ignored.",
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"name": {
|
||||||
|
"description": "Name is a tag-less image name.",
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"newName": {
|
||||||
|
"description": "NewName is the value used to replace the original name.",
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"newTag": {
|
||||||
|
"description": "NewTag is the value used to replace the original tag.",
|
||||||
|
"type": "string"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"required": [
|
||||||
|
"name"
|
||||||
|
],
|
||||||
|
"type": "object",
|
||||||
|
"additionalProperties": false
|
||||||
|
},
|
||||||
|
"type": "array"
|
||||||
|
},
|
||||||
|
"interval": {
|
||||||
|
"description": "The interval at which to reconcile the Kustomization.\nThis interval is approximate and may be subject to jitter to ensure\nefficient use of resources.",
|
||||||
|
"pattern": "^([0-9]+(\\.[0-9]+)?(ms|s|m|h))+$",
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"kubeConfig": {
|
||||||
|
"description": "The KubeConfig for reconciling the Kustomization on a remote cluster.\nWhen used in combination with KustomizationSpec.ServiceAccountName,\nforces the controller to act on behalf of that Service Account at the\ntarget cluster.\nIf the --default-service-account flag is set, its value will be used as\na controller level fallback for when KustomizationSpec.ServiceAccountName\nis empty.",
|
||||||
|
"properties": {
|
||||||
|
"configMapRef": {
|
||||||
|
"description": "ConfigMapRef holds an optional name of a ConfigMap that contains\nthe following keys:\n\n- `provider`: the provider to use. One of `aws`, `azure`, `gcp`, or\n `generic`. Required.\n- `cluster`: the fully qualified resource name of the Kubernetes\n cluster in the cloud provider API. Not used by the `generic`\n provider. Required when one of `address` or `ca.crt` is not set.\n- `address`: the address of the Kubernetes API server. Required\n for `generic`. For the other providers, if not specified, the\n first address in the cluster resource will be used, and if\n specified, it must match one of the addresses in the cluster\n resource.\n If audiences is not set, will be used as the audience for the\n `generic` provider.\n- `ca.crt`: the optional PEM-encoded CA certificate for the\n Kubernetes API server. If not set, the controller will use the\n CA certificate from the cluster resource.\n- `audiences`: the optional audiences as a list of\n line-break-separated strings for the Kubernetes ServiceAccount\n token. Defaults to the `address` for the `generic` provider, or\n to specific values for the other providers depending on the\n provider.\n- `serviceAccountName`: the optional name of the Kubernetes\n ServiceAccount in the same namespace that should be used\n for authentication. If not specified, the controller\n ServiceAccount will be used.\n\nMutually exclusive with SecretRef.",
|
||||||
|
"properties": {
|
||||||
|
"name": {
|
||||||
|
"description": "Name of the referent.",
|
||||||
|
"type": "string"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"required": [
|
||||||
|
"name"
|
||||||
|
],
|
||||||
|
"type": "object",
|
||||||
|
"additionalProperties": false
|
||||||
|
},
|
||||||
|
"secretRef": {
|
||||||
|
"description": "SecretRef holds an optional name of a secret that contains a key with\nthe kubeconfig file as the value. If no key is set, the key will default\nto 'value'. Mutually exclusive with ConfigMapRef.\nIt is recommended that the kubeconfig is self-contained, and the secret\nis regularly updated if credentials such as a cloud-access-token expire.\nCloud specific `cmd-path` auth helpers will not function without adding\nbinaries and credentials to the Pod that is responsible for reconciling\nKubernetes resources. Supported only for the generic provider.",
|
||||||
|
"properties": {
|
||||||
|
"key": {
|
||||||
|
"description": "Key in the Secret, when not specified an implementation-specific default key is used.",
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"name": {
|
||||||
|
"description": "Name of the Secret.",
|
||||||
|
"type": "string"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"required": [
|
||||||
|
"name"
|
||||||
|
],
|
||||||
|
"type": "object",
|
||||||
|
"additionalProperties": false
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"type": "object",
|
||||||
|
"x-kubernetes-validations": [
|
||||||
|
{
|
||||||
|
"message": "exactly one of spec.kubeConfig.configMapRef or spec.kubeConfig.secretRef must be specified",
|
||||||
|
"rule": "has(self.configMapRef) || has(self.secretRef)"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"message": "exactly one of spec.kubeConfig.configMapRef or spec.kubeConfig.secretRef must be specified",
|
||||||
|
"rule": "!has(self.configMapRef) || !has(self.secretRef)"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"additionalProperties": false
|
||||||
|
},
|
||||||
|
"namePrefix": {
|
||||||
|
"description": "NamePrefix will prefix the names of all managed resources.",
|
||||||
|
"maxLength": 200,
|
||||||
|
"minLength": 1,
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"nameSuffix": {
|
||||||
|
"description": "NameSuffix will suffix the names of all managed resources.",
|
||||||
|
"maxLength": 200,
|
||||||
|
"minLength": 1,
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"patches": {
|
||||||
|
"description": "Strategic merge and JSON patches, defined as inline YAML objects,\ncapable of targeting objects based on kind, label and annotation selectors.",
|
||||||
|
"items": {
|
||||||
|
"description": "Patch contains an inline StrategicMerge or JSON6902 patch, and the target the patch should\nbe applied to.",
|
||||||
|
"properties": {
|
||||||
|
"patch": {
|
||||||
|
"description": "Patch contains an inline StrategicMerge patch or an inline JSON6902 patch with\nan array of operation objects.",
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"target": {
|
||||||
|
"description": "Target points to the resources that the patch document should be applied to.",
|
||||||
|
"properties": {
|
||||||
|
"annotationSelector": {
|
||||||
|
"description": "AnnotationSelector is a string that follows the label selection expression\nhttps://kubernetes.io/docs/concepts/overview/working-with-objects/labels/#api\nIt matches with the resource annotations.",
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"group": {
|
||||||
|
"description": "Group is the API group to select resources from.\nTogether with Version and Kind it is capable of unambiguously identifying and/or selecting resources.\nhttps://github.com/kubernetes/community/blob/master/contributors/design-proposals/api-machinery/api-group.md",
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"kind": {
|
||||||
|
"description": "Kind of the API Group to select resources from.\nTogether with Group and Version it is capable of unambiguously\nidentifying and/or selecting resources.\nhttps://github.com/kubernetes/community/blob/master/contributors/design-proposals/api-machinery/api-group.md",
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"labelSelector": {
|
||||||
|
"description": "LabelSelector is a string that follows the label selection expression\nhttps://kubernetes.io/docs/concepts/overview/working-with-objects/labels/#api\nIt matches with the resource labels.",
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"name": {
|
||||||
|
"description": "Name to match resources with.",
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"namespace": {
|
||||||
|
"description": "Namespace to select resources from.",
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"version": {
|
||||||
|
"description": "Version of the API Group to select resources from.\nTogether with Group and Kind it is capable of unambiguously identifying and/or selecting resources.\nhttps://github.com/kubernetes/community/blob/master/contributors/design-proposals/api-machinery/api-group.md",
|
||||||
|
"type": "string"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"type": "object",
|
||||||
|
"additionalProperties": false
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"required": [
|
||||||
|
"patch"
|
||||||
|
],
|
||||||
|
"type": "object",
|
||||||
|
"additionalProperties": false
|
||||||
|
},
|
||||||
|
"type": "array"
|
||||||
|
},
|
||||||
|
"path": {
|
||||||
|
"description": "Path to the directory containing the kustomization.yaml file, or the\nset of plain YAMLs a kustomization.yaml should be generated for.\nDefaults to 'None', which translates to the root path of the SourceRef.",
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"postBuild": {
|
||||||
|
"description": "PostBuild describes which actions to perform on the YAML manifest\ngenerated by building the kustomize overlay.",
|
||||||
|
"properties": {
|
||||||
|
"substitute": {
|
||||||
|
"additionalProperties": {
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"description": "Substitute holds a map of key/value pairs.\nThe variables defined in your YAML manifests that match any of the keys\ndefined in the map will be substituted with the set value.\nIncludes support for bash string replacement functions\ne.g. ${var:=default}, ${var:position} and ${var/substring/replacement}.",
|
||||||
|
"type": "object"
|
||||||
|
},
|
||||||
|
"substituteFrom": {
|
||||||
|
"description": "SubstituteFrom holds references to ConfigMaps and Secrets containing\nthe variables and their values to be substituted in the YAML manifests.\nThe ConfigMap and the Secret data keys represent the var names, and they\nmust match the vars declared in the manifests for the substitution to\nhappen.",
|
||||||
|
"items": {
|
||||||
|
"description": "SubstituteReference contains a reference to a resource containing\nthe variables name and value.",
|
||||||
|
"properties": {
|
||||||
|
"kind": {
|
||||||
|
"description": "Kind of the values referent, valid values are ('Secret', 'ConfigMap').",
|
||||||
|
"enum": [
|
||||||
|
"Secret",
|
||||||
|
"ConfigMap"
|
||||||
|
],
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"name": {
|
||||||
|
"description": "Name of the values referent. Should reside in the same namespace as the\nreferring resource.",
|
||||||
|
"maxLength": 253,
|
||||||
|
"minLength": 1,
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"optional": {
|
||||||
|
"default": false,
|
||||||
|
"description": "Optional indicates whether the referenced resource must exist, or whether to\ntolerate its absence. If true and the referenced resource is absent, proceed\nas if the resource was present but empty, without any variables defined.",
|
||||||
|
"type": "boolean"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"required": [
|
||||||
|
"kind",
|
||||||
|
"name"
|
||||||
|
],
|
||||||
|
"type": "object",
|
||||||
|
"additionalProperties": false
|
||||||
|
},
|
||||||
|
"type": "array"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"type": "object",
|
||||||
|
"additionalProperties": false
|
||||||
|
},
|
||||||
|
"prune": {
|
||||||
|
"description": "Prune enables garbage collection.",
|
||||||
|
"type": "boolean"
|
||||||
|
},
|
||||||
|
"retryInterval": {
|
||||||
|
"description": "The interval at which to retry a previously failed reconciliation.\nWhen not specified, the controller uses the KustomizationSpec.Interval\nvalue to retry failures.",
|
||||||
|
"pattern": "^([0-9]+(\\.[0-9]+)?(ms|s|m|h))+$",
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"serviceAccountName": {
|
||||||
|
"description": "The name of the Kubernetes service account to impersonate\nwhen reconciling this Kustomization.",
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"sourceRef": {
|
||||||
|
"description": "Reference of the source where the kustomization file is.",
|
||||||
|
"properties": {
|
||||||
|
"apiVersion": {
|
||||||
|
"description": "API version of the referent.",
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"kind": {
|
||||||
|
"description": "Kind of the referent.",
|
||||||
|
"enum": [
|
||||||
|
"OCIRepository",
|
||||||
|
"GitRepository",
|
||||||
|
"Bucket",
|
||||||
|
"ExternalArtifact"
|
||||||
|
],
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"name": {
|
||||||
|
"description": "Name of the referent.",
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"namespace": {
|
||||||
|
"description": "Namespace of the referent, defaults to the namespace of the Kubernetes\nresource object that contains the reference.",
|
||||||
|
"type": "string"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"required": [
|
||||||
|
"kind",
|
||||||
|
"name"
|
||||||
|
],
|
||||||
|
"type": "object",
|
||||||
|
"additionalProperties": false
|
||||||
|
},
|
||||||
|
"suspend": {
|
||||||
|
"description": "This flag tells the controller to suspend subsequent kustomize executions,\nit does not apply to already started executions. Defaults to false.",
|
||||||
|
"type": "boolean"
|
||||||
|
},
|
||||||
|
"targetNamespace": {
|
||||||
|
"description": "TargetNamespace sets or overrides the namespace in the\nkustomization.yaml file.",
|
||||||
|
"maxLength": 63,
|
||||||
|
"minLength": 1,
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"timeout": {
|
||||||
|
"description": "Timeout for validation, apply and health checking operations.\nDefaults to 'Interval' duration.",
|
||||||
|
"pattern": "^([0-9]+(\\.[0-9]+)?(ms|s|m|h))+$",
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"wait": {
|
||||||
|
"description": "Wait instructs the controller to check the health of all the reconciled\nresources. When enabled, the HealthChecks are ignored. Defaults to false.",
|
||||||
|
"type": "boolean"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"required": [
|
||||||
|
"interval",
|
||||||
|
"prune",
|
||||||
|
"sourceRef"
|
||||||
|
],
|
||||||
|
"type": "object",
|
||||||
|
"additionalProperties": false
|
||||||
|
},
|
||||||
|
"status": {
|
||||||
|
"default": {
|
||||||
|
"observedGeneration": -1
|
||||||
|
},
|
||||||
|
"description": "KustomizationStatus defines the observed state of a kustomization.",
|
||||||
|
"properties": {
|
||||||
|
"conditions": {
|
||||||
|
"items": {
|
||||||
|
"description": "Condition contains details for one aspect of the current state of this API Resource.",
|
||||||
|
"properties": {
|
||||||
|
"lastTransitionTime": {
|
||||||
|
"description": "lastTransitionTime is the last time the condition transitioned from one status to another.\nThis should be when the underlying condition changed. If that is not known, then using the time when the API field changed is acceptable.",
|
||||||
|
"format": "date-time",
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"message": {
|
||||||
|
"description": "message is a human readable message indicating details about the transition.\nThis may be an empty string.",
|
||||||
|
"maxLength": 32768,
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"observedGeneration": {
|
||||||
|
"description": "observedGeneration represents the .metadata.generation that the condition was set based upon.\nFor instance, if .metadata.generation is currently 12, but the .status.conditions[x].observedGeneration is 9, the condition is out of date\nwith respect to the current state of the instance.",
|
||||||
|
"format": "int64",
|
||||||
|
"minimum": 0,
|
||||||
|
"type": "integer"
|
||||||
|
},
|
||||||
|
"reason": {
|
||||||
|
"description": "reason contains a programmatic identifier indicating the reason for the condition's last transition.\nProducers of specific condition types may define expected values and meanings for this field,\nand whether the values are considered a guaranteed API.\nThe value should be a CamelCase string.\nThis field may not be empty.",
|
||||||
|
"maxLength": 1024,
|
||||||
|
"minLength": 1,
|
||||||
|
"pattern": "^[A-Za-z]([A-Za-z0-9_,:]*[A-Za-z0-9_])?$",
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"status": {
|
||||||
|
"description": "status of the condition, one of True, False, Unknown.",
|
||||||
|
"enum": [
|
||||||
|
"True",
|
||||||
|
"False",
|
||||||
|
"Unknown"
|
||||||
|
],
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"type": {
|
||||||
|
"description": "type of condition in CamelCase or in foo.example.com/CamelCase.",
|
||||||
|
"maxLength": 316,
|
||||||
|
"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])$",
|
||||||
|
"type": "string"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"required": [
|
||||||
|
"lastTransitionTime",
|
||||||
|
"message",
|
||||||
|
"reason",
|
||||||
|
"status",
|
||||||
|
"type"
|
||||||
|
],
|
||||||
|
"type": "object",
|
||||||
|
"additionalProperties": false
|
||||||
|
},
|
||||||
|
"type": "array"
|
||||||
|
},
|
||||||
|
"history": {
|
||||||
|
"description": "History contains a set of snapshots of the last reconciliation attempts\ntracking the revision, the state and the duration of each attempt.",
|
||||||
|
"items": {
|
||||||
|
"description": "Snapshot represents a point-in-time record of a group of resources reconciliation,\nincluding timing information, status, and a unique digest identifier.",
|
||||||
|
"properties": {
|
||||||
|
"digest": {
|
||||||
|
"description": "Digest is the checksum in the format `<algo>:<hex>` of the resources in this snapshot.",
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"firstReconciled": {
|
||||||
|
"description": "FirstReconciled is the time when this revision was first reconciled to the cluster.",
|
||||||
|
"format": "date-time",
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"lastReconciled": {
|
||||||
|
"description": "LastReconciled is the time when this revision was last reconciled to the cluster.",
|
||||||
|
"format": "date-time",
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"lastReconciledDuration": {
|
||||||
|
"description": "LastReconciledDuration is time it took to reconcile the resources in this revision.",
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"lastReconciledStatus": {
|
||||||
|
"description": "LastReconciledStatus is the status of the last reconciliation.",
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"metadata": {
|
||||||
|
"additionalProperties": {
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"description": "Metadata contains additional information about the snapshot.",
|
||||||
|
"type": "object"
|
||||||
|
},
|
||||||
|
"totalReconciliations": {
|
||||||
|
"description": "TotalReconciliations is the total number of reconciliations that have occurred for this snapshot.",
|
||||||
|
"format": "int64",
|
||||||
|
"type": "integer"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"required": [
|
||||||
|
"digest",
|
||||||
|
"firstReconciled",
|
||||||
|
"lastReconciled",
|
||||||
|
"lastReconciledDuration",
|
||||||
|
"lastReconciledStatus",
|
||||||
|
"totalReconciliations"
|
||||||
|
],
|
||||||
|
"type": "object",
|
||||||
|
"additionalProperties": false
|
||||||
|
},
|
||||||
|
"type": "array"
|
||||||
|
},
|
||||||
|
"inventory": {
|
||||||
|
"description": "Inventory contains the list of Kubernetes resource object references that\nhave been successfully applied.",
|
||||||
|
"properties": {
|
||||||
|
"entries": {
|
||||||
|
"description": "Entries of Kubernetes resource object references.",
|
||||||
|
"items": {
|
||||||
|
"description": "ResourceRef contains the information necessary to locate a resource within a cluster.",
|
||||||
|
"properties": {
|
||||||
|
"id": {
|
||||||
|
"description": "ID is the string representation of the Kubernetes resource object's metadata,\nin the format '<namespace>_<name>_<group>_<kind>'.",
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"v": {
|
||||||
|
"description": "Version is the API version of the Kubernetes resource object's kind.",
|
||||||
|
"type": "string"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"required": [
|
||||||
|
"id",
|
||||||
|
"v"
|
||||||
|
],
|
||||||
|
"type": "object",
|
||||||
|
"additionalProperties": false
|
||||||
|
},
|
||||||
|
"type": "array"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"required": [
|
||||||
|
"entries"
|
||||||
|
],
|
||||||
|
"type": "object",
|
||||||
|
"additionalProperties": false
|
||||||
|
},
|
||||||
|
"lastAppliedOriginRevision": {
|
||||||
|
"description": "The last successfully applied origin revision.\nEquals the origin revision of the applied Artifact from the referenced Source.\nUsually present on the Metadata of the applied Artifact and depends on the\nSource type, e.g. for OCI it's the value associated with the key\n\"org.opencontainers.image.revision\".",
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"lastAppliedRevision": {
|
||||||
|
"description": "The last successfully applied revision.\nEquals the Revision of the applied Artifact from the referenced Source.",
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"lastAttemptedRevision": {
|
||||||
|
"description": "LastAttemptedRevision is the revision of the last reconciliation attempt.",
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"lastHandledReconcileAt": {
|
||||||
|
"description": "LastHandledReconcileAt holds the value of the most recent\nreconcile request value, so a change of the annotation value\ncan be detected.",
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"observedGeneration": {
|
||||||
|
"description": "ObservedGeneration is the last reconciled generation.",
|
||||||
|
"format": "int64",
|
||||||
|
"type": "integer"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"type": "object",
|
||||||
|
"additionalProperties": false
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"type": "object"
|
||||||
|
}
|
||||||
@@ -0,0 +1,689 @@
|
|||||||
|
{
|
||||||
|
"description": "ObjectStore is the Schema for the objectstores API.",
|
||||||
|
"properties": {
|
||||||
|
"apiVersion": {
|
||||||
|
"description": "APIVersion defines the versioned schema of this representation of an object.\nServers should convert recognized schemas to the latest internal value, and\nmay reject unrecognized values.\nMore info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources",
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"kind": {
|
||||||
|
"description": "Kind is a string value representing the REST resource this object represents.\nServers may infer this from the endpoint the client submits requests to.\nCannot be updated.\nIn CamelCase.\nMore info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds",
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"metadata": {
|
||||||
|
"type": "object"
|
||||||
|
},
|
||||||
|
"spec": {
|
||||||
|
"description": "Specification of the desired behavior of the ObjectStore.\nMore info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#spec-and-status",
|
||||||
|
"properties": {
|
||||||
|
"configuration": {
|
||||||
|
"description": "The configuration for the barman-cloud tool suite",
|
||||||
|
"properties": {
|
||||||
|
"azureCredentials": {
|
||||||
|
"description": "The credentials to use to upload data to Azure Blob Storage",
|
||||||
|
"properties": {
|
||||||
|
"connectionString": {
|
||||||
|
"description": "The connection string to be used",
|
||||||
|
"properties": {
|
||||||
|
"key": {
|
||||||
|
"description": "The key to select",
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"name": {
|
||||||
|
"description": "Name of the referent.",
|
||||||
|
"type": "string"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"required": [
|
||||||
|
"key",
|
||||||
|
"name"
|
||||||
|
],
|
||||||
|
"type": "object",
|
||||||
|
"additionalProperties": false
|
||||||
|
},
|
||||||
|
"inheritFromAzureAD": {
|
||||||
|
"description": "Use the Azure AD based authentication without providing explicitly the keys.",
|
||||||
|
"type": "boolean"
|
||||||
|
},
|
||||||
|
"storageAccount": {
|
||||||
|
"description": "The storage account where to upload data",
|
||||||
|
"properties": {
|
||||||
|
"key": {
|
||||||
|
"description": "The key to select",
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"name": {
|
||||||
|
"description": "Name of the referent.",
|
||||||
|
"type": "string"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"required": [
|
||||||
|
"key",
|
||||||
|
"name"
|
||||||
|
],
|
||||||
|
"type": "object",
|
||||||
|
"additionalProperties": false
|
||||||
|
},
|
||||||
|
"storageKey": {
|
||||||
|
"description": "The storage account key to be used in conjunction\nwith the storage account name",
|
||||||
|
"properties": {
|
||||||
|
"key": {
|
||||||
|
"description": "The key to select",
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"name": {
|
||||||
|
"description": "Name of the referent.",
|
||||||
|
"type": "string"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"required": [
|
||||||
|
"key",
|
||||||
|
"name"
|
||||||
|
],
|
||||||
|
"type": "object",
|
||||||
|
"additionalProperties": false
|
||||||
|
},
|
||||||
|
"storageSasToken": {
|
||||||
|
"description": "A shared-access-signature to be used in conjunction with\nthe storage account name",
|
||||||
|
"properties": {
|
||||||
|
"key": {
|
||||||
|
"description": "The key to select",
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"name": {
|
||||||
|
"description": "Name of the referent.",
|
||||||
|
"type": "string"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"required": [
|
||||||
|
"key",
|
||||||
|
"name"
|
||||||
|
],
|
||||||
|
"type": "object",
|
||||||
|
"additionalProperties": false
|
||||||
|
},
|
||||||
|
"useDefaultAzureCredentials": {
|
||||||
|
"description": "Use the default Azure authentication flow, which includes DefaultAzureCredential.\nThis allows authentication using environment variables and managed identities.",
|
||||||
|
"type": "boolean"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"type": "object",
|
||||||
|
"additionalProperties": false
|
||||||
|
},
|
||||||
|
"data": {
|
||||||
|
"description": "The configuration to be used to backup the data files\nWhen not defined, base backups files will be stored uncompressed and may\nbe unencrypted in the object store, according to the bucket default\npolicy.",
|
||||||
|
"properties": {
|
||||||
|
"additionalCommandArgs": {
|
||||||
|
"description": "AdditionalCommandArgs represents additional arguments that can be appended\nto the 'barman-cloud-backup' command-line invocation. These arguments\nprovide flexibility to customize the backup process further according to\nspecific requirements or configurations.\n\nExample:\nIn a scenario where specialized backup options are required, such as setting\na specific timeout or defining custom behavior, users can use this field\nto specify additional command arguments.\n\nNote:\nIt's essential to ensure that the provided arguments are valid and supported\nby the 'barman-cloud-backup' command, to avoid potential errors or unintended\nbehavior during execution.",
|
||||||
|
"items": {
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"type": "array"
|
||||||
|
},
|
||||||
|
"compression": {
|
||||||
|
"description": "Compress a backup file (a tar file per tablespace) while streaming it\nto the object store. Available options are empty string (no\ncompression, default), `gzip`, `bzip2`, and `snappy`.",
|
||||||
|
"enum": [
|
||||||
|
"bzip2",
|
||||||
|
"gzip",
|
||||||
|
"snappy"
|
||||||
|
],
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"encryption": {
|
||||||
|
"description": "Whenever to force the encryption of files (if the bucket is\nnot already configured for that).\nAllowed options are empty string (use the bucket policy, default),\n`AES256` and `aws:kms`",
|
||||||
|
"enum": [
|
||||||
|
"AES256",
|
||||||
|
"aws:kms"
|
||||||
|
],
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"immediateCheckpoint": {
|
||||||
|
"description": "Control whether the I/O workload for the backup initial checkpoint will\nbe limited, according to the `checkpoint_completion_target` setting on\nthe PostgreSQL server. If set to true, an immediate checkpoint will be\nused, meaning PostgreSQL will complete the checkpoint as soon as\npossible. `false` by default.",
|
||||||
|
"type": "boolean"
|
||||||
|
},
|
||||||
|
"jobs": {
|
||||||
|
"description": "The number of parallel jobs to be used to upload the backup, defaults\nto 2",
|
||||||
|
"format": "int32",
|
||||||
|
"minimum": 1,
|
||||||
|
"type": "integer"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"type": "object",
|
||||||
|
"additionalProperties": false
|
||||||
|
},
|
||||||
|
"destinationPath": {
|
||||||
|
"description": "The path where to store the backup (i.e. s3://bucket/path/to/folder)\nthis path, with different destination folders, will be used for WALs\nand for data",
|
||||||
|
"minLength": 1,
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"endpointCA": {
|
||||||
|
"description": "EndpointCA store the CA bundle of the barman endpoint.\nUseful when using self-signed certificates to avoid\nerrors with certificate issuer and barman-cloud-wal-archive",
|
||||||
|
"properties": {
|
||||||
|
"key": {
|
||||||
|
"description": "The key to select",
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"name": {
|
||||||
|
"description": "Name of the referent.",
|
||||||
|
"type": "string"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"required": [
|
||||||
|
"key",
|
||||||
|
"name"
|
||||||
|
],
|
||||||
|
"type": "object",
|
||||||
|
"additionalProperties": false
|
||||||
|
},
|
||||||
|
"endpointURL": {
|
||||||
|
"description": "Endpoint to be used to upload data to the cloud,\noverriding the automatic endpoint discovery",
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"googleCredentials": {
|
||||||
|
"description": "The credentials to use to upload data to Google Cloud Storage",
|
||||||
|
"properties": {
|
||||||
|
"applicationCredentials": {
|
||||||
|
"description": "The secret containing the Google Cloud Storage JSON file with the credentials",
|
||||||
|
"properties": {
|
||||||
|
"key": {
|
||||||
|
"description": "The key to select",
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"name": {
|
||||||
|
"description": "Name of the referent.",
|
||||||
|
"type": "string"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"required": [
|
||||||
|
"key",
|
||||||
|
"name"
|
||||||
|
],
|
||||||
|
"type": "object",
|
||||||
|
"additionalProperties": false
|
||||||
|
},
|
||||||
|
"gkeEnvironment": {
|
||||||
|
"description": "If set to true, will presume that it's running inside a GKE environment,\ndefault to false.",
|
||||||
|
"type": "boolean"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"type": "object",
|
||||||
|
"additionalProperties": false
|
||||||
|
},
|
||||||
|
"historyTags": {
|
||||||
|
"additionalProperties": {
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"description": "HistoryTags is a list of key value pairs that will be passed to the\nBarman --history-tags option.",
|
||||||
|
"type": "object"
|
||||||
|
},
|
||||||
|
"s3Credentials": {
|
||||||
|
"description": "The credentials to use to upload data to S3",
|
||||||
|
"properties": {
|
||||||
|
"accessKeyId": {
|
||||||
|
"description": "The reference to the access key id",
|
||||||
|
"properties": {
|
||||||
|
"key": {
|
||||||
|
"description": "The key to select",
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"name": {
|
||||||
|
"description": "Name of the referent.",
|
||||||
|
"type": "string"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"required": [
|
||||||
|
"key",
|
||||||
|
"name"
|
||||||
|
],
|
||||||
|
"type": "object",
|
||||||
|
"additionalProperties": false
|
||||||
|
},
|
||||||
|
"inheritFromIAMRole": {
|
||||||
|
"description": "Use the role based authentication without providing explicitly the keys.",
|
||||||
|
"type": "boolean"
|
||||||
|
},
|
||||||
|
"region": {
|
||||||
|
"description": "The reference to the secret containing the region name",
|
||||||
|
"properties": {
|
||||||
|
"key": {
|
||||||
|
"description": "The key to select",
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"name": {
|
||||||
|
"description": "Name of the referent.",
|
||||||
|
"type": "string"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"required": [
|
||||||
|
"key",
|
||||||
|
"name"
|
||||||
|
],
|
||||||
|
"type": "object",
|
||||||
|
"additionalProperties": false
|
||||||
|
},
|
||||||
|
"secretAccessKey": {
|
||||||
|
"description": "The reference to the secret access key",
|
||||||
|
"properties": {
|
||||||
|
"key": {
|
||||||
|
"description": "The key to select",
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"name": {
|
||||||
|
"description": "Name of the referent.",
|
||||||
|
"type": "string"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"required": [
|
||||||
|
"key",
|
||||||
|
"name"
|
||||||
|
],
|
||||||
|
"type": "object",
|
||||||
|
"additionalProperties": false
|
||||||
|
},
|
||||||
|
"sessionToken": {
|
||||||
|
"description": "The references to the session key",
|
||||||
|
"properties": {
|
||||||
|
"key": {
|
||||||
|
"description": "The key to select",
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"name": {
|
||||||
|
"description": "Name of the referent.",
|
||||||
|
"type": "string"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"required": [
|
||||||
|
"key",
|
||||||
|
"name"
|
||||||
|
],
|
||||||
|
"type": "object",
|
||||||
|
"additionalProperties": false
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"type": "object",
|
||||||
|
"additionalProperties": false
|
||||||
|
},
|
||||||
|
"serverName": {
|
||||||
|
"description": "The server name on S3, the cluster name is used if this\nparameter is omitted",
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"tags": {
|
||||||
|
"additionalProperties": {
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"description": "Tags is a list of key value pairs that will be passed to the\nBarman --tags option.",
|
||||||
|
"type": "object"
|
||||||
|
},
|
||||||
|
"wal": {
|
||||||
|
"description": "The configuration for the backup of the WAL stream.\nWhen not defined, WAL files will be stored uncompressed and may be\nunencrypted in the object store, according to the bucket default policy.",
|
||||||
|
"properties": {
|
||||||
|
"archiveAdditionalCommandArgs": {
|
||||||
|
"description": "Additional arguments that can be appended to the 'barman-cloud-wal-archive'\ncommand-line invocation. These arguments provide flexibility to customize\nthe WAL archive process further, according to specific requirements or configurations.\n\nExample:\nIn a scenario where specialized backup options are required, such as setting\na specific timeout or defining custom behavior, users can use this field\nto specify additional command arguments.\n\nNote:\nIt's essential to ensure that the provided arguments are valid and supported\nby the 'barman-cloud-wal-archive' command, to avoid potential errors or unintended\nbehavior during execution.",
|
||||||
|
"items": {
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"type": "array"
|
||||||
|
},
|
||||||
|
"compression": {
|
||||||
|
"description": "Compress a WAL file before sending it to the object store. Available\noptions are empty string (no compression, default), `gzip`, `bzip2`,\n`lz4`, `snappy`, `xz`, and `zstd`.",
|
||||||
|
"enum": [
|
||||||
|
"bzip2",
|
||||||
|
"gzip",
|
||||||
|
"lz4",
|
||||||
|
"snappy",
|
||||||
|
"xz",
|
||||||
|
"zstd"
|
||||||
|
],
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"encryption": {
|
||||||
|
"description": "Whenever to force the encryption of files (if the bucket is\nnot already configured for that).\nAllowed options are empty string (use the bucket policy, default),\n`AES256` and `aws:kms`",
|
||||||
|
"enum": [
|
||||||
|
"AES256",
|
||||||
|
"aws:kms"
|
||||||
|
],
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"maxParallel": {
|
||||||
|
"description": "Number of WAL files to be either archived in parallel (when the\nPostgreSQL instance is archiving to a backup object store) or\nrestored in parallel (when a PostgreSQL standby is fetching WAL\nfiles from a recovery object store). If not specified, WAL files\nwill be processed one at a time. It accepts a positive integer as a\nvalue - with 1 being the minimum accepted value.",
|
||||||
|
"minimum": 1,
|
||||||
|
"type": "integer"
|
||||||
|
},
|
||||||
|
"restoreAdditionalCommandArgs": {
|
||||||
|
"description": "Additional arguments that can be appended to the 'barman-cloud-wal-restore'\ncommand-line invocation. These arguments provide flexibility to customize\nthe WAL restore process further, according to specific requirements or configurations.\n\nExample:\nIn a scenario where specialized backup options are required, such as setting\na specific timeout or defining custom behavior, users can use this field\nto specify additional command arguments.\n\nNote:\nIt's essential to ensure that the provided arguments are valid and supported\nby the 'barman-cloud-wal-restore' command, to avoid potential errors or unintended\nbehavior during execution.",
|
||||||
|
"items": {
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"type": "array"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"type": "object",
|
||||||
|
"additionalProperties": false
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"required": [
|
||||||
|
"destinationPath"
|
||||||
|
],
|
||||||
|
"type": "object",
|
||||||
|
"x-kubernetes-validations": [
|
||||||
|
{
|
||||||
|
"fieldPath": ".serverName",
|
||||||
|
"message": "use the 'serverName' plugin parameter in the Cluster resource",
|
||||||
|
"reason": "FieldValueForbidden",
|
||||||
|
"rule": "!has(self.serverName)"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"additionalProperties": false
|
||||||
|
},
|
||||||
|
"instanceSidecarConfiguration": {
|
||||||
|
"description": "The configuration for the sidecar that runs in the instance pods",
|
||||||
|
"properties": {
|
||||||
|
"additionalContainerArgs": {
|
||||||
|
"description": "AdditionalContainerArgs is an optional list of command-line arguments\nto be passed to the sidecar container when it starts.\nThe provided arguments are appended to the container\u2019s default arguments.",
|
||||||
|
"items": {
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"type": "array",
|
||||||
|
"x-kubernetes-validations": [
|
||||||
|
{
|
||||||
|
"message": "do not set --log-level in additionalContainerArgs; use spec.instanceSidecarConfiguration.logLevel",
|
||||||
|
"reason": "FieldValueForbidden",
|
||||||
|
"rule": "!self.exists(a, a.startsWith('--log-level'))"
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"env": {
|
||||||
|
"description": "The environment to be explicitly passed to the sidecar",
|
||||||
|
"items": {
|
||||||
|
"description": "EnvVar represents an environment variable present in a Container.",
|
||||||
|
"properties": {
|
||||||
|
"name": {
|
||||||
|
"description": "Name of the environment variable.\nMay consist of any printable ASCII characters except '='.",
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"value": {
|
||||||
|
"description": "Variable references $(VAR_NAME) are expanded\nusing the previously defined environment variables in the container and\nany service environment variables. If a variable cannot be resolved,\nthe reference in the input string will be unchanged. Double $$ are reduced\nto a single $, which allows for escaping the $(VAR_NAME) syntax: i.e.\n\"$$(VAR_NAME)\" will produce the string literal \"$(VAR_NAME)\".\nEscaped references will never be expanded, regardless of whether the variable\nexists or not.\nDefaults to \"\".",
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"valueFrom": {
|
||||||
|
"description": "Source for the environment variable's value. Cannot be used if value is not empty.",
|
||||||
|
"properties": {
|
||||||
|
"configMapKeyRef": {
|
||||||
|
"description": "Selects a key of a ConfigMap.",
|
||||||
|
"properties": {
|
||||||
|
"key": {
|
||||||
|
"description": "The key to select.",
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"name": {
|
||||||
|
"default": "",
|
||||||
|
"description": "Name of the referent.\nThis field is effectively required, but due to backwards compatibility is\nallowed to be empty. Instances of this type with an empty value here are\nalmost certainly wrong.\nMore info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names",
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"optional": {
|
||||||
|
"description": "Specify whether the ConfigMap or its key must be defined",
|
||||||
|
"type": "boolean"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"required": [
|
||||||
|
"key"
|
||||||
|
],
|
||||||
|
"type": "object",
|
||||||
|
"x-kubernetes-map-type": "atomic",
|
||||||
|
"additionalProperties": false
|
||||||
|
},
|
||||||
|
"fieldRef": {
|
||||||
|
"description": "Selects a field of the pod: supports metadata.name, metadata.namespace, `metadata.labels['<KEY>']`, `metadata.annotations['<KEY>']`,\nspec.nodeName, spec.serviceAccountName, status.hostIP, status.podIP, status.podIPs.",
|
||||||
|
"properties": {
|
||||||
|
"apiVersion": {
|
||||||
|
"description": "Version of the schema the FieldPath is written in terms of, defaults to \"v1\".",
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"fieldPath": {
|
||||||
|
"description": "Path of the field to select in the specified API version.",
|
||||||
|
"type": "string"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"required": [
|
||||||
|
"fieldPath"
|
||||||
|
],
|
||||||
|
"type": "object",
|
||||||
|
"x-kubernetes-map-type": "atomic",
|
||||||
|
"additionalProperties": false
|
||||||
|
},
|
||||||
|
"fileKeyRef": {
|
||||||
|
"description": "FileKeyRef selects a key of the env file.\nRequires the EnvFiles feature gate to be enabled.",
|
||||||
|
"properties": {
|
||||||
|
"key": {
|
||||||
|
"description": "The key within the env file. An invalid key will prevent the pod from starting.\nThe keys defined within a source may consist of any printable ASCII characters except '='.\nDuring Alpha stage of the EnvFiles feature gate, the key size is limited to 128 characters.",
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"optional": {
|
||||||
|
"default": false,
|
||||||
|
"description": "Specify whether the file or its key must be defined. If the file or key\ndoes not exist, then the env var is not published.\nIf optional is set to true and the specified key does not exist,\nthe environment variable will not be set in the Pod's containers.\n\nIf optional is set to false and the specified key does not exist,\nan error will be returned during Pod creation.",
|
||||||
|
"type": "boolean"
|
||||||
|
},
|
||||||
|
"path": {
|
||||||
|
"description": "The path within the volume from which to select the file.\nMust be relative and may not contain the '..' path or start with '..'.",
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"volumeName": {
|
||||||
|
"description": "The name of the volume mount containing the env file.",
|
||||||
|
"type": "string"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"required": [
|
||||||
|
"key",
|
||||||
|
"path",
|
||||||
|
"volumeName"
|
||||||
|
],
|
||||||
|
"type": "object",
|
||||||
|
"x-kubernetes-map-type": "atomic",
|
||||||
|
"additionalProperties": false
|
||||||
|
},
|
||||||
|
"resourceFieldRef": {
|
||||||
|
"description": "Selects a resource of the container: only resources limits and requests\n(limits.cpu, limits.memory, limits.ephemeral-storage, requests.cpu, requests.memory and requests.ephemeral-storage) are currently supported.",
|
||||||
|
"properties": {
|
||||||
|
"containerName": {
|
||||||
|
"description": "Container name: required for volumes, optional for env vars",
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"divisor": {
|
||||||
|
"anyOf": [
|
||||||
|
{
|
||||||
|
"type": "integer"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "string"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"description": "Specifies the output format of the exposed resources, defaults to \"1\"",
|
||||||
|
"pattern": "^(\\+|-)?(([0-9]+(\\.[0-9]*)?)|(\\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\\+|-)?(([0-9]+(\\.[0-9]*)?)|(\\.[0-9]+))))?$",
|
||||||
|
"x-kubernetes-int-or-string": true
|
||||||
|
},
|
||||||
|
"resource": {
|
||||||
|
"description": "Required: resource to select",
|
||||||
|
"type": "string"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"required": [
|
||||||
|
"resource"
|
||||||
|
],
|
||||||
|
"type": "object",
|
||||||
|
"x-kubernetes-map-type": "atomic",
|
||||||
|
"additionalProperties": false
|
||||||
|
},
|
||||||
|
"secretKeyRef": {
|
||||||
|
"description": "Selects a key of a secret in the pod's namespace",
|
||||||
|
"properties": {
|
||||||
|
"key": {
|
||||||
|
"description": "The key of the secret to select from. Must be a valid secret key.",
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"name": {
|
||||||
|
"default": "",
|
||||||
|
"description": "Name of the referent.\nThis field is effectively required, but due to backwards compatibility is\nallowed to be empty. Instances of this type with an empty value here are\nalmost certainly wrong.\nMore info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names",
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"optional": {
|
||||||
|
"description": "Specify whether the Secret or its key must be defined",
|
||||||
|
"type": "boolean"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"required": [
|
||||||
|
"key"
|
||||||
|
],
|
||||||
|
"type": "object",
|
||||||
|
"x-kubernetes-map-type": "atomic",
|
||||||
|
"additionalProperties": false
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"type": "object",
|
||||||
|
"additionalProperties": false
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"required": [
|
||||||
|
"name"
|
||||||
|
],
|
||||||
|
"type": "object",
|
||||||
|
"additionalProperties": false
|
||||||
|
},
|
||||||
|
"type": "array"
|
||||||
|
},
|
||||||
|
"logLevel": {
|
||||||
|
"default": "info",
|
||||||
|
"description": "The log level for PostgreSQL instances. Valid values are: `error`, `warning`, `info` (default), `debug`, `trace`",
|
||||||
|
"enum": [
|
||||||
|
"error",
|
||||||
|
"warning",
|
||||||
|
"info",
|
||||||
|
"debug",
|
||||||
|
"trace"
|
||||||
|
],
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"resources": {
|
||||||
|
"description": "Resources define cpu/memory requests and limits for the sidecar that runs in the instance pods.",
|
||||||
|
"properties": {
|
||||||
|
"claims": {
|
||||||
|
"description": "Claims lists the names of resources, defined in spec.resourceClaims,\nthat are used by this container.\n\nThis field depends on the\nDynamicResourceAllocation feature gate.\n\nThis field is immutable. It can only be set for containers.",
|
||||||
|
"items": {
|
||||||
|
"description": "ResourceClaim references one entry in PodSpec.ResourceClaims.",
|
||||||
|
"properties": {
|
||||||
|
"name": {
|
||||||
|
"description": "Name must match the name of one entry in pod.spec.resourceClaims of\nthe Pod where this field is used. It makes that resource available\ninside a container.",
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"request": {
|
||||||
|
"description": "Request is the name chosen for a request in the referenced claim.\nIf empty, everything from the claim is made available, otherwise\nonly the result of this request.",
|
||||||
|
"type": "string"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"required": [
|
||||||
|
"name"
|
||||||
|
],
|
||||||
|
"type": "object",
|
||||||
|
"additionalProperties": false
|
||||||
|
},
|
||||||
|
"type": "array",
|
||||||
|
"x-kubernetes-list-map-keys": [
|
||||||
|
"name"
|
||||||
|
],
|
||||||
|
"x-kubernetes-list-type": "map"
|
||||||
|
},
|
||||||
|
"limits": {
|
||||||
|
"additionalProperties": {
|
||||||
|
"anyOf": [
|
||||||
|
{
|
||||||
|
"type": "integer"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "string"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"pattern": "^(\\+|-)?(([0-9]+(\\.[0-9]*)?)|(\\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\\+|-)?(([0-9]+(\\.[0-9]*)?)|(\\.[0-9]+))))?$",
|
||||||
|
"x-kubernetes-int-or-string": true
|
||||||
|
},
|
||||||
|
"description": "Limits describes the maximum amount of compute resources allowed.\nMore info: https://kubernetes.io/docs/concepts/configuration/manage-resources-containers/",
|
||||||
|
"type": "object"
|
||||||
|
},
|
||||||
|
"requests": {
|
||||||
|
"additionalProperties": {
|
||||||
|
"anyOf": [
|
||||||
|
{
|
||||||
|
"type": "integer"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "string"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"pattern": "^(\\+|-)?(([0-9]+(\\.[0-9]*)?)|(\\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\\+|-)?(([0-9]+(\\.[0-9]*)?)|(\\.[0-9]+))))?$",
|
||||||
|
"x-kubernetes-int-or-string": true
|
||||||
|
},
|
||||||
|
"description": "Requests describes the minimum amount of compute resources required.\nIf Requests is omitted for a container, it defaults to Limits if that is explicitly specified,\notherwise to an implementation-defined value. Requests cannot exceed Limits.\nMore info: https://kubernetes.io/docs/concepts/configuration/manage-resources-containers/",
|
||||||
|
"type": "object"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"type": "object",
|
||||||
|
"additionalProperties": false
|
||||||
|
},
|
||||||
|
"retentionPolicyIntervalSeconds": {
|
||||||
|
"default": 1800,
|
||||||
|
"description": "The retentionCheckInterval defines the frequency at which the\nsystem checks and enforces retention policies.",
|
||||||
|
"type": "integer"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"type": "object",
|
||||||
|
"additionalProperties": false
|
||||||
|
},
|
||||||
|
"retentionPolicy": {
|
||||||
|
"description": "RetentionPolicy is the retention policy to be used for backups\nand WALs (i.e. '60d'). The retention policy is expressed in the form\nof `XXu` where `XX` is a positive integer and `u` is in `[dwm]` -\ndays, weeks, months.",
|
||||||
|
"pattern": "^[1-9][0-9]*[dwm]$",
|
||||||
|
"type": "string"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"required": [
|
||||||
|
"configuration"
|
||||||
|
],
|
||||||
|
"type": "object",
|
||||||
|
"additionalProperties": false
|
||||||
|
},
|
||||||
|
"status": {
|
||||||
|
"description": "Most recently observed status of the ObjectStore. This data may not be up to\ndate. Populated by the system. Read-only.\nMore info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#spec-and-status",
|
||||||
|
"properties": {
|
||||||
|
"serverRecoveryWindow": {
|
||||||
|
"additionalProperties": {
|
||||||
|
"description": "RecoveryWindow represents the time span between the first\nrecoverability point and the last successful backup of a PostgreSQL\nserver, defining the period during which data can be restored.",
|
||||||
|
"properties": {
|
||||||
|
"firstRecoverabilityPoint": {
|
||||||
|
"description": "The first recoverability point in a PostgreSQL server refers to\nthe earliest point in time to which the database can be\nrestored.",
|
||||||
|
"format": "date-time",
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"lastFailedBackupTime": {
|
||||||
|
"description": "The last failed backup time",
|
||||||
|
"format": "date-time",
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"lastSuccessfulBackupTime": {
|
||||||
|
"description": "The last successful backup time",
|
||||||
|
"format": "date-time",
|
||||||
|
"type": "string"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"type": "object",
|
||||||
|
"additionalProperties": false
|
||||||
|
},
|
||||||
|
"description": "ServerRecoveryWindow maps each server to its recovery window",
|
||||||
|
"type": "object"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"type": "object",
|
||||||
|
"additionalProperties": false
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"required": [
|
||||||
|
"metadata",
|
||||||
|
"spec"
|
||||||
|
],
|
||||||
|
"type": "object"
|
||||||
|
}
|
||||||
@@ -0,0 +1,361 @@
|
|||||||
|
{
|
||||||
|
"description": "OCIRepository is the Schema for the ocirepositories API",
|
||||||
|
"properties": {
|
||||||
|
"apiVersion": {
|
||||||
|
"description": "APIVersion defines the versioned schema of this representation of an object.\nServers should convert recognized schemas to the latest internal value, and\nmay reject unrecognized values.\nMore info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources",
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"kind": {
|
||||||
|
"description": "Kind is a string value representing the REST resource this object represents.\nServers may infer this from the endpoint the client submits requests to.\nCannot be updated.\nIn CamelCase.\nMore info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds",
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"metadata": {
|
||||||
|
"type": "object"
|
||||||
|
},
|
||||||
|
"spec": {
|
||||||
|
"description": "OCIRepositorySpec defines the desired state of OCIRepository",
|
||||||
|
"properties": {
|
||||||
|
"certSecretRef": {
|
||||||
|
"description": "CertSecretRef can be given the name of a Secret containing\neither or both of\n\n- a PEM-encoded client certificate (`tls.crt`) and private\nkey (`tls.key`);\n- a PEM-encoded CA certificate (`ca.crt`)\n\nand whichever are supplied, will be used for connecting to the\nregistry. The client cert and key are useful if you are\nauthenticating with a certificate; the CA cert is useful if\nyou are using a self-signed server certificate. The Secret must\nbe of type `Opaque` or `kubernetes.io/tls`.",
|
||||||
|
"properties": {
|
||||||
|
"name": {
|
||||||
|
"description": "Name of the referent.",
|
||||||
|
"type": "string"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"required": [
|
||||||
|
"name"
|
||||||
|
],
|
||||||
|
"type": "object",
|
||||||
|
"additionalProperties": false
|
||||||
|
},
|
||||||
|
"ignore": {
|
||||||
|
"description": "Ignore overrides the set of excluded patterns in the .sourceignore format\n(which is the same as .gitignore). If not provided, a default will be used,\nconsult the documentation for your version to find out what those are.",
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"insecure": {
|
||||||
|
"description": "Insecure allows connecting to a non-TLS HTTP container registry.",
|
||||||
|
"type": "boolean"
|
||||||
|
},
|
||||||
|
"interval": {
|
||||||
|
"description": "Interval at which the OCIRepository URL is checked for updates.\nThis interval is approximate and may be subject to jitter to ensure\nefficient use of resources.",
|
||||||
|
"pattern": "^([0-9]+(\\.[0-9]+)?(ms|s|m|h))+$",
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"layerSelector": {
|
||||||
|
"description": "LayerSelector specifies which layer should be extracted from the OCI artifact.\nWhen not specified, the first layer found in the artifact is selected.",
|
||||||
|
"properties": {
|
||||||
|
"mediaType": {
|
||||||
|
"description": "MediaType specifies the OCI media type of the layer\nwhich should be extracted from the OCI Artifact. The\nfirst layer matching this type is selected.",
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"operation": {
|
||||||
|
"description": "Operation specifies how the selected layer should be processed.\nBy default, the layer compressed content is extracted to storage.\nWhen the operation is set to 'copy', the layer compressed content\nis persisted to storage as it is.",
|
||||||
|
"enum": [
|
||||||
|
"extract",
|
||||||
|
"copy"
|
||||||
|
],
|
||||||
|
"type": "string"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"type": "object",
|
||||||
|
"additionalProperties": false
|
||||||
|
},
|
||||||
|
"provider": {
|
||||||
|
"default": "generic",
|
||||||
|
"description": "The provider used for authentication, can be 'aws', 'azure', 'gcp' or 'generic'.\nWhen not specified, defaults to 'generic'.",
|
||||||
|
"enum": [
|
||||||
|
"generic",
|
||||||
|
"aws",
|
||||||
|
"azure",
|
||||||
|
"gcp"
|
||||||
|
],
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"proxySecretRef": {
|
||||||
|
"description": "ProxySecretRef specifies the Secret containing the proxy configuration\nto use while communicating with the container registry.",
|
||||||
|
"properties": {
|
||||||
|
"name": {
|
||||||
|
"description": "Name of the referent.",
|
||||||
|
"type": "string"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"required": [
|
||||||
|
"name"
|
||||||
|
],
|
||||||
|
"type": "object",
|
||||||
|
"additionalProperties": false
|
||||||
|
},
|
||||||
|
"ref": {
|
||||||
|
"description": "The OCI reference to pull and monitor for changes,\ndefaults to the latest tag.",
|
||||||
|
"properties": {
|
||||||
|
"digest": {
|
||||||
|
"description": "Digest is the image digest to pull, takes precedence over SemVer.\nThe value should be in the format 'sha256:<HASH>'.",
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"semver": {
|
||||||
|
"description": "SemVer is the range of tags to pull selecting the latest within\nthe range, takes precedence over Tag.",
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"semverFilter": {
|
||||||
|
"description": "SemverFilter is a regex pattern to filter the tags within the SemVer range.",
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"tag": {
|
||||||
|
"description": "Tag is the image tag to pull, defaults to latest.",
|
||||||
|
"type": "string"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"type": "object",
|
||||||
|
"additionalProperties": false
|
||||||
|
},
|
||||||
|
"secretRef": {
|
||||||
|
"description": "SecretRef contains the secret name containing the registry login\ncredentials to resolve image metadata.\nThe secret must be of type kubernetes.io/dockerconfigjson.",
|
||||||
|
"properties": {
|
||||||
|
"name": {
|
||||||
|
"description": "Name of the referent.",
|
||||||
|
"type": "string"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"required": [
|
||||||
|
"name"
|
||||||
|
],
|
||||||
|
"type": "object",
|
||||||
|
"additionalProperties": false
|
||||||
|
},
|
||||||
|
"serviceAccountName": {
|
||||||
|
"description": "ServiceAccountName is the name of the Kubernetes ServiceAccount used to authenticate\nthe image pull if the service account has attached pull secrets. For more information:\nhttps://kubernetes.io/docs/tasks/configure-pod-container/configure-service-account/#add-imagepullsecrets-to-a-service-account",
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"suspend": {
|
||||||
|
"description": "This flag tells the controller to suspend the reconciliation of this source.",
|
||||||
|
"type": "boolean"
|
||||||
|
},
|
||||||
|
"timeout": {
|
||||||
|
"default": "60s",
|
||||||
|
"description": "The timeout for remote OCI Repository operations like pulling, defaults to 60s.",
|
||||||
|
"pattern": "^([0-9]+(\\.[0-9]+)?(ms|s|m))+$",
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"url": {
|
||||||
|
"description": "URL is a reference to an OCI artifact repository hosted\non a remote container registry.",
|
||||||
|
"pattern": "^oci://.*$",
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"verify": {
|
||||||
|
"description": "Verify contains the secret name containing the trusted public keys\nused to verify the signature and specifies which provider to use to check\nwhether OCI image is authentic.",
|
||||||
|
"properties": {
|
||||||
|
"matchOIDCIdentity": {
|
||||||
|
"description": "MatchOIDCIdentity specifies the identity matching criteria to use\nwhile verifying an OCI artifact which was signed using Cosign keyless\nsigning. The artifact's identity is deemed to be verified if any of the\nspecified matchers match against the identity.",
|
||||||
|
"items": {
|
||||||
|
"description": "OIDCIdentityMatch specifies options for verifying the certificate identity,\ni.e. the issuer and the subject of the certificate.",
|
||||||
|
"properties": {
|
||||||
|
"issuer": {
|
||||||
|
"description": "Issuer specifies the regex pattern to match against to verify\nthe OIDC issuer in the Fulcio certificate. The pattern must be a\nvalid Go regular expression.",
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"subject": {
|
||||||
|
"description": "Subject specifies the regex pattern to match against to verify\nthe identity subject in the Fulcio certificate. The pattern must\nbe a valid Go regular expression.",
|
||||||
|
"type": "string"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"required": [
|
||||||
|
"issuer",
|
||||||
|
"subject"
|
||||||
|
],
|
||||||
|
"type": "object",
|
||||||
|
"additionalProperties": false
|
||||||
|
},
|
||||||
|
"type": "array"
|
||||||
|
},
|
||||||
|
"provider": {
|
||||||
|
"default": "cosign",
|
||||||
|
"description": "Provider specifies the technology used to sign the OCI Artifact.",
|
||||||
|
"enum": [
|
||||||
|
"cosign",
|
||||||
|
"notation"
|
||||||
|
],
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"secretRef": {
|
||||||
|
"description": "SecretRef specifies the Kubernetes Secret containing the\ntrusted public keys.",
|
||||||
|
"properties": {
|
||||||
|
"name": {
|
||||||
|
"description": "Name of the referent.",
|
||||||
|
"type": "string"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"required": [
|
||||||
|
"name"
|
||||||
|
],
|
||||||
|
"type": "object",
|
||||||
|
"additionalProperties": false
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"required": [
|
||||||
|
"provider"
|
||||||
|
],
|
||||||
|
"type": "object",
|
||||||
|
"additionalProperties": false
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"required": [
|
||||||
|
"interval",
|
||||||
|
"url"
|
||||||
|
],
|
||||||
|
"type": "object",
|
||||||
|
"additionalProperties": false
|
||||||
|
},
|
||||||
|
"status": {
|
||||||
|
"default": {
|
||||||
|
"observedGeneration": -1
|
||||||
|
},
|
||||||
|
"description": "OCIRepositoryStatus defines the observed state of OCIRepository",
|
||||||
|
"properties": {
|
||||||
|
"artifact": {
|
||||||
|
"description": "Artifact represents the output of the last successful OCI Repository sync.",
|
||||||
|
"properties": {
|
||||||
|
"digest": {
|
||||||
|
"description": "Digest is the digest of the file in the form of '<algorithm>:<checksum>'.",
|
||||||
|
"pattern": "^[a-z0-9]+(?:[.+_-][a-z0-9]+)*:[a-zA-Z0-9=_-]+$",
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"lastUpdateTime": {
|
||||||
|
"description": "LastUpdateTime is the timestamp corresponding to the last update of the\nArtifact.",
|
||||||
|
"format": "date-time",
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"metadata": {
|
||||||
|
"additionalProperties": {
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"description": "Metadata holds upstream information such as OCI annotations.",
|
||||||
|
"type": "object"
|
||||||
|
},
|
||||||
|
"path": {
|
||||||
|
"description": "Path is the relative file path of the Artifact. It can be used to locate\nthe file in the root of the Artifact storage on the local file system of\nthe controller managing the Source.",
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"revision": {
|
||||||
|
"description": "Revision is a human-readable identifier traceable in the origin source\nsystem. It can be a Git commit SHA, Git tag, a Helm chart version, etc.",
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"size": {
|
||||||
|
"description": "Size is the number of bytes in the file.",
|
||||||
|
"format": "int64",
|
||||||
|
"type": "integer"
|
||||||
|
},
|
||||||
|
"url": {
|
||||||
|
"description": "URL is the HTTP address of the Artifact as exposed by the controller\nmanaging the Source. It can be used to retrieve the Artifact for\nconsumption, e.g. by another controller applying the Artifact contents.",
|
||||||
|
"type": "string"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"required": [
|
||||||
|
"digest",
|
||||||
|
"lastUpdateTime",
|
||||||
|
"path",
|
||||||
|
"revision",
|
||||||
|
"url"
|
||||||
|
],
|
||||||
|
"type": "object",
|
||||||
|
"additionalProperties": false
|
||||||
|
},
|
||||||
|
"conditions": {
|
||||||
|
"description": "Conditions holds the conditions for the OCIRepository.",
|
||||||
|
"items": {
|
||||||
|
"description": "Condition contains details for one aspect of the current state of this API Resource.",
|
||||||
|
"properties": {
|
||||||
|
"lastTransitionTime": {
|
||||||
|
"description": "lastTransitionTime is the last time the condition transitioned from one status to another.\nThis should be when the underlying condition changed. If that is not known, then using the time when the API field changed is acceptable.",
|
||||||
|
"format": "date-time",
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"message": {
|
||||||
|
"description": "message is a human readable message indicating details about the transition.\nThis may be an empty string.",
|
||||||
|
"maxLength": 32768,
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"observedGeneration": {
|
||||||
|
"description": "observedGeneration represents the .metadata.generation that the condition was set based upon.\nFor instance, if .metadata.generation is currently 12, but the .status.conditions[x].observedGeneration is 9, the condition is out of date\nwith respect to the current state of the instance.",
|
||||||
|
"format": "int64",
|
||||||
|
"minimum": 0,
|
||||||
|
"type": "integer"
|
||||||
|
},
|
||||||
|
"reason": {
|
||||||
|
"description": "reason contains a programmatic identifier indicating the reason for the condition's last transition.\nProducers of specific condition types may define expected values and meanings for this field,\nand whether the values are considered a guaranteed API.\nThe value should be a CamelCase string.\nThis field may not be empty.",
|
||||||
|
"maxLength": 1024,
|
||||||
|
"minLength": 1,
|
||||||
|
"pattern": "^[A-Za-z]([A-Za-z0-9_,:]*[A-Za-z0-9_])?$",
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"status": {
|
||||||
|
"description": "status of the condition, one of True, False, Unknown.",
|
||||||
|
"enum": [
|
||||||
|
"True",
|
||||||
|
"False",
|
||||||
|
"Unknown"
|
||||||
|
],
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"type": {
|
||||||
|
"description": "type of condition in CamelCase or in foo.example.com/CamelCase.",
|
||||||
|
"maxLength": 316,
|
||||||
|
"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])$",
|
||||||
|
"type": "string"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"required": [
|
||||||
|
"lastTransitionTime",
|
||||||
|
"message",
|
||||||
|
"reason",
|
||||||
|
"status",
|
||||||
|
"type"
|
||||||
|
],
|
||||||
|
"type": "object",
|
||||||
|
"additionalProperties": false
|
||||||
|
},
|
||||||
|
"type": "array"
|
||||||
|
},
|
||||||
|
"lastHandledReconcileAt": {
|
||||||
|
"description": "LastHandledReconcileAt holds the value of the most recent\nreconcile request value, so a change of the annotation value\ncan be detected.",
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"observedGeneration": {
|
||||||
|
"description": "ObservedGeneration is the last observed generation.",
|
||||||
|
"format": "int64",
|
||||||
|
"type": "integer"
|
||||||
|
},
|
||||||
|
"observedIgnore": {
|
||||||
|
"description": "ObservedIgnore is the observed exclusion patterns used for constructing\nthe source artifact.",
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"observedLayerSelector": {
|
||||||
|
"description": "ObservedLayerSelector is the observed layer selector used for constructing\nthe source artifact.",
|
||||||
|
"properties": {
|
||||||
|
"mediaType": {
|
||||||
|
"description": "MediaType specifies the OCI media type of the layer\nwhich should be extracted from the OCI Artifact. The\nfirst layer matching this type is selected.",
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"operation": {
|
||||||
|
"description": "Operation specifies how the selected layer should be processed.\nBy default, the layer compressed content is extracted to storage.\nWhen the operation is set to 'copy', the layer compressed content\nis persisted to storage as it is.",
|
||||||
|
"enum": [
|
||||||
|
"extract",
|
||||||
|
"copy"
|
||||||
|
],
|
||||||
|
"type": "string"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"type": "object",
|
||||||
|
"additionalProperties": false
|
||||||
|
},
|
||||||
|
"url": {
|
||||||
|
"description": "URL is the download link for the artifact output of the last OCI Repository sync.",
|
||||||
|
"type": "string"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"type": "object",
|
||||||
|
"additionalProperties": false
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"type": "object"
|
||||||
|
}
|
||||||
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
@@ -0,0 +1,244 @@
|
|||||||
|
{
|
||||||
|
"description": "The `PrometheusRule` custom resource definition (CRD) defines [alerting](https://prometheus.io/docs/prometheus/latest/configuration/alerting_rules/) and [recording](https://prometheus.io/docs/prometheus/latest/configuration/recording_rules/) rules to be evaluated by `Prometheus` or `ThanosRuler` objects.\n\n`Prometheus` and `ThanosRuler` objects select `PrometheusRule` objects using label and namespace selectors.",
|
||||||
|
"properties": {
|
||||||
|
"apiVersion": {
|
||||||
|
"description": "APIVersion defines the versioned schema of this representation of an object.\nServers should convert recognized schemas to the latest internal value, and\nmay reject unrecognized values.\nMore info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources",
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"kind": {
|
||||||
|
"description": "Kind is a string value representing the REST resource this object represents.\nServers may infer this from the endpoint the client submits requests to.\nCannot be updated.\nIn CamelCase.\nMore info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds",
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"metadata": {
|
||||||
|
"type": "object"
|
||||||
|
},
|
||||||
|
"spec": {
|
||||||
|
"description": "spec defines the specification of desired alerting rule definitions for Prometheus.",
|
||||||
|
"properties": {
|
||||||
|
"groups": {
|
||||||
|
"description": "groups defines the content of Prometheus rule file",
|
||||||
|
"items": {
|
||||||
|
"description": "RuleGroup is a list of sequentially evaluated recording and alerting rules.",
|
||||||
|
"properties": {
|
||||||
|
"interval": {
|
||||||
|
"description": "interval defines how often rules in the group are evaluated.",
|
||||||
|
"pattern": "^(0|(([0-9]+)y)?(([0-9]+)w)?(([0-9]+)d)?(([0-9]+)h)?(([0-9]+)m)?(([0-9]+)s)?(([0-9]+)ms)?)$",
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"labels": {
|
||||||
|
"additionalProperties": {
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"description": "labels define the labels to add or overwrite before storing the result for its rules.\nThe labels defined at the rule level take precedence.\n\nIt requires Prometheus >= 3.0.0.\nThe field is ignored for Thanos Ruler.",
|
||||||
|
"type": "object"
|
||||||
|
},
|
||||||
|
"limit": {
|
||||||
|
"description": "limit defines the number of alerts an alerting rule and series a recording\nrule can produce.\nLimit is supported starting with Prometheus >= 2.31 and Thanos Ruler >= 0.24.",
|
||||||
|
"type": "integer"
|
||||||
|
},
|
||||||
|
"name": {
|
||||||
|
"description": "name defines the name of the rule group.",
|
||||||
|
"minLength": 1,
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"partial_response_strategy": {
|
||||||
|
"description": "partial_response_strategy is only used by ThanosRuler and will\nbe ignored by Prometheus instances.\nMore info: https://github.com/thanos-io/thanos/blob/main/docs/components/rule.md#partial-response",
|
||||||
|
"pattern": "^(?i)(abort|warn)?$",
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"query_offset": {
|
||||||
|
"description": "query_offset defines the offset the rule evaluation timestamp of this particular group by the specified duration into the past.\n\nIt requires Prometheus >= v2.53.0.\nIt is not supported for ThanosRuler.",
|
||||||
|
"pattern": "^(0|(([0-9]+)y)?(([0-9]+)w)?(([0-9]+)d)?(([0-9]+)h)?(([0-9]+)m)?(([0-9]+)s)?(([0-9]+)ms)?)$",
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"rules": {
|
||||||
|
"description": "rules defines the list of alerting and recording rules.",
|
||||||
|
"items": {
|
||||||
|
"description": "Rule describes an alerting or recording rule\nSee Prometheus documentation: [alerting](https://www.prometheus.io/docs/prometheus/latest/configuration/alerting_rules/) or [recording](https://www.prometheus.io/docs/prometheus/latest/configuration/recording_rules/#recording-rules) rule",
|
||||||
|
"properties": {
|
||||||
|
"alert": {
|
||||||
|
"description": "alert defines the name of the alert. Must be a valid label value.\nOnly one of `record` and `alert` must be set.",
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"annotations": {
|
||||||
|
"additionalProperties": {
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"description": "annotations defines annotations to add to each alert.\nOnly valid for alerting rules.",
|
||||||
|
"type": "object"
|
||||||
|
},
|
||||||
|
"expr": {
|
||||||
|
"anyOf": [
|
||||||
|
{
|
||||||
|
"type": "integer"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "string"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"description": "expr defines the PromQL expression to evaluate.",
|
||||||
|
"x-kubernetes-int-or-string": true
|
||||||
|
},
|
||||||
|
"for": {
|
||||||
|
"description": "for defines how alerts are considered firing once they have been returned for this long.",
|
||||||
|
"pattern": "^(0|(([0-9]+)y)?(([0-9]+)w)?(([0-9]+)d)?(([0-9]+)h)?(([0-9]+)m)?(([0-9]+)s)?(([0-9]+)ms)?)$",
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"keep_firing_for": {
|
||||||
|
"description": "keep_firing_for defines how long an alert will continue firing after the condition that triggered it has cleared.",
|
||||||
|
"minLength": 1,
|
||||||
|
"pattern": "^(0|(([0-9]+)y)?(([0-9]+)w)?(([0-9]+)d)?(([0-9]+)h)?(([0-9]+)m)?(([0-9]+)s)?(([0-9]+)ms)?)$",
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"labels": {
|
||||||
|
"additionalProperties": {
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"description": "labels defines labels to add or overwrite.",
|
||||||
|
"type": "object"
|
||||||
|
},
|
||||||
|
"record": {
|
||||||
|
"description": "record defines the name of the time series to output to. Must be a valid metric name.\nOnly one of `record` and `alert` must be set.",
|
||||||
|
"type": "string"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"required": [
|
||||||
|
"expr"
|
||||||
|
],
|
||||||
|
"type": "object",
|
||||||
|
"additionalProperties": false
|
||||||
|
},
|
||||||
|
"type": "array"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"required": [
|
||||||
|
"name"
|
||||||
|
],
|
||||||
|
"type": "object",
|
||||||
|
"additionalProperties": false
|
||||||
|
},
|
||||||
|
"type": "array",
|
||||||
|
"x-kubernetes-list-map-keys": [
|
||||||
|
"name"
|
||||||
|
],
|
||||||
|
"x-kubernetes-list-type": "map"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"type": "object",
|
||||||
|
"additionalProperties": false
|
||||||
|
},
|
||||||
|
"status": {
|
||||||
|
"description": "status defines the status subresource. It is under active development and is updated only when the\n\"StatusForConfigurationResources\" feature gate is enabled.\n\nMost recent observed status of the PrometheusRule. Read-only.\nMore info:\nhttps://github.com/kubernetes/community/blob/master/contributors/devel/sig-architecture/api-conventions.md#spec-and-status",
|
||||||
|
"properties": {
|
||||||
|
"bindings": {
|
||||||
|
"description": "bindings defines the list of workload resources (Prometheus, PrometheusAgent, ThanosRuler or Alertmanager) which select the configuration resource.",
|
||||||
|
"items": {
|
||||||
|
"description": "WorkloadBinding is a link between a configuration resource and a workload resource.",
|
||||||
|
"properties": {
|
||||||
|
"conditions": {
|
||||||
|
"description": "conditions defines the current state of the configuration resource when bound to the referenced Workload object.",
|
||||||
|
"items": {
|
||||||
|
"description": "ConfigResourceCondition describes the status of configuration resources linked to Prometheus, PrometheusAgent, Alertmanager or ThanosRuler.",
|
||||||
|
"properties": {
|
||||||
|
"lastTransitionTime": {
|
||||||
|
"description": "lastTransitionTime defines the time of the last update to the current status property.",
|
||||||
|
"format": "date-time",
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"message": {
|
||||||
|
"description": "message defines the human-readable message indicating details for the condition's last transition.",
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"observedGeneration": {
|
||||||
|
"description": "observedGeneration defines the .metadata.generation that the\ncondition was set based upon. For instance, if `.metadata.generation` is\ncurrently 12, but the `.status.conditions[].observedGeneration` is 9, the\ncondition is out of date with respect to the current state of the object.",
|
||||||
|
"format": "int64",
|
||||||
|
"type": "integer"
|
||||||
|
},
|
||||||
|
"reason": {
|
||||||
|
"description": "reason for the condition's last transition.",
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"status": {
|
||||||
|
"description": "status of the condition.",
|
||||||
|
"minLength": 1,
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"type": {
|
||||||
|
"description": "type of the condition being reported.\nCurrently, only \"Accepted\" is supported.",
|
||||||
|
"enum": [
|
||||||
|
"Accepted"
|
||||||
|
],
|
||||||
|
"minLength": 1,
|
||||||
|
"type": "string"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"required": [
|
||||||
|
"lastTransitionTime",
|
||||||
|
"status",
|
||||||
|
"type"
|
||||||
|
],
|
||||||
|
"type": "object",
|
||||||
|
"additionalProperties": false
|
||||||
|
},
|
||||||
|
"type": "array",
|
||||||
|
"x-kubernetes-list-map-keys": [
|
||||||
|
"type"
|
||||||
|
],
|
||||||
|
"x-kubernetes-list-type": "map"
|
||||||
|
},
|
||||||
|
"group": {
|
||||||
|
"description": "group defines the group of the referenced resource.",
|
||||||
|
"enum": [
|
||||||
|
"monitoring.coreos.com"
|
||||||
|
],
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"name": {
|
||||||
|
"description": "name defines the name of the referenced object.",
|
||||||
|
"minLength": 1,
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"namespace": {
|
||||||
|
"description": "namespace defines the namespace of the referenced object.",
|
||||||
|
"minLength": 1,
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"resource": {
|
||||||
|
"description": "resource defines the type of resource being referenced (e.g. Prometheus, PrometheusAgent, ThanosRuler or Alertmanager).",
|
||||||
|
"enum": [
|
||||||
|
"prometheuses",
|
||||||
|
"prometheusagents",
|
||||||
|
"thanosrulers",
|
||||||
|
"alertmanagers"
|
||||||
|
],
|
||||||
|
"type": "string"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"required": [
|
||||||
|
"group",
|
||||||
|
"name",
|
||||||
|
"namespace",
|
||||||
|
"resource"
|
||||||
|
],
|
||||||
|
"type": "object",
|
||||||
|
"additionalProperties": false
|
||||||
|
},
|
||||||
|
"type": "array",
|
||||||
|
"x-kubernetes-list-map-keys": [
|
||||||
|
"group",
|
||||||
|
"resource",
|
||||||
|
"name",
|
||||||
|
"namespace"
|
||||||
|
],
|
||||||
|
"x-kubernetes-list-type": "map"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"type": "object",
|
||||||
|
"additionalProperties": false
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"required": [
|
||||||
|
"spec"
|
||||||
|
],
|
||||||
|
"type": "object"
|
||||||
|
}
|
||||||
@@ -0,0 +1,197 @@
|
|||||||
|
{
|
||||||
|
"description": "Provider is the Schema for the providers API.",
|
||||||
|
"properties": {
|
||||||
|
"apiVersion": {
|
||||||
|
"description": "APIVersion defines the versioned schema of this representation of an object.\nServers should convert recognized schemas to the latest internal value, and\nmay reject unrecognized values.\nMore info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources",
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"kind": {
|
||||||
|
"description": "Kind is a string value representing the REST resource this object represents.\nServers may infer this from the endpoint the client submits requests to.\nCannot be updated.\nIn CamelCase.\nMore info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds",
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"metadata": {
|
||||||
|
"type": "object"
|
||||||
|
},
|
||||||
|
"spec": {
|
||||||
|
"description": "ProviderSpec defines the desired state of the Provider.",
|
||||||
|
"properties": {
|
||||||
|
"address": {
|
||||||
|
"description": "Address specifies the endpoint, in a generic sense, to where alerts are sent.\nWhat kind of endpoint depends on the specific Provider type being used.\nFor the generic Provider, for example, this is an HTTP/S address.\nFor other Provider types this could be a project ID or a namespace.",
|
||||||
|
"maxLength": 2048,
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"certSecretRef": {
|
||||||
|
"description": "CertSecretRef specifies the Secret containing\na PEM-encoded CA certificate (in the `ca.crt` key).\n\nNote: Support for the `caFile` key has\nbeen deprecated.",
|
||||||
|
"properties": {
|
||||||
|
"name": {
|
||||||
|
"description": "Name of the referent.",
|
||||||
|
"type": "string"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"required": [
|
||||||
|
"name"
|
||||||
|
],
|
||||||
|
"type": "object",
|
||||||
|
"additionalProperties": false
|
||||||
|
},
|
||||||
|
"channel": {
|
||||||
|
"description": "Channel specifies the destination channel where events should be posted.",
|
||||||
|
"maxLength": 2048,
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"interval": {
|
||||||
|
"description": "Interval at which to reconcile the Provider with its Secret references.",
|
||||||
|
"pattern": "^([0-9]+(\\.[0-9]+)?(ms|s|m|h))+$",
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"proxy": {
|
||||||
|
"description": "Proxy the HTTP/S address of the proxy server.",
|
||||||
|
"maxLength": 2048,
|
||||||
|
"pattern": "^(http|https)://.*$",
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"secretRef": {
|
||||||
|
"description": "SecretRef specifies the Secret containing the authentication\ncredentials for this Provider.",
|
||||||
|
"properties": {
|
||||||
|
"name": {
|
||||||
|
"description": "Name of the referent.",
|
||||||
|
"type": "string"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"required": [
|
||||||
|
"name"
|
||||||
|
],
|
||||||
|
"type": "object",
|
||||||
|
"additionalProperties": false
|
||||||
|
},
|
||||||
|
"suspend": {
|
||||||
|
"description": "Suspend tells the controller to suspend subsequent\nevents handling for this Provider.",
|
||||||
|
"type": "boolean"
|
||||||
|
},
|
||||||
|
"timeout": {
|
||||||
|
"description": "Timeout for sending alerts to the Provider.",
|
||||||
|
"pattern": "^([0-9]+(\\.[0-9]+)?(ms|s|m))+$",
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"type": {
|
||||||
|
"description": "Type specifies which Provider implementation to use.",
|
||||||
|
"enum": [
|
||||||
|
"slack",
|
||||||
|
"discord",
|
||||||
|
"msteams",
|
||||||
|
"rocket",
|
||||||
|
"generic",
|
||||||
|
"generic-hmac",
|
||||||
|
"github",
|
||||||
|
"gitlab",
|
||||||
|
"gitea",
|
||||||
|
"bitbucketserver",
|
||||||
|
"bitbucket",
|
||||||
|
"azuredevops",
|
||||||
|
"googlechat",
|
||||||
|
"googlepubsub",
|
||||||
|
"webex",
|
||||||
|
"sentry",
|
||||||
|
"azureeventhub",
|
||||||
|
"telegram",
|
||||||
|
"lark",
|
||||||
|
"matrix",
|
||||||
|
"opsgenie",
|
||||||
|
"alertmanager",
|
||||||
|
"grafana",
|
||||||
|
"githubdispatch",
|
||||||
|
"pagerduty",
|
||||||
|
"datadog"
|
||||||
|
],
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"username": {
|
||||||
|
"description": "Username specifies the name under which events are posted.",
|
||||||
|
"maxLength": 2048,
|
||||||
|
"type": "string"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"required": [
|
||||||
|
"type"
|
||||||
|
],
|
||||||
|
"type": "object",
|
||||||
|
"additionalProperties": false
|
||||||
|
},
|
||||||
|
"status": {
|
||||||
|
"default": {
|
||||||
|
"observedGeneration": -1
|
||||||
|
},
|
||||||
|
"description": "ProviderStatus defines the observed state of the Provider.",
|
||||||
|
"properties": {
|
||||||
|
"conditions": {
|
||||||
|
"description": "Conditions holds the conditions for the Provider.",
|
||||||
|
"items": {
|
||||||
|
"description": "Condition contains details for one aspect of the current state of this API Resource.",
|
||||||
|
"properties": {
|
||||||
|
"lastTransitionTime": {
|
||||||
|
"description": "lastTransitionTime is the last time the condition transitioned from one status to another.\nThis should be when the underlying condition changed. If that is not known, then using the time when the API field changed is acceptable.",
|
||||||
|
"format": "date-time",
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"message": {
|
||||||
|
"description": "message is a human readable message indicating details about the transition.\nThis may be an empty string.",
|
||||||
|
"maxLength": 32768,
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"observedGeneration": {
|
||||||
|
"description": "observedGeneration represents the .metadata.generation that the condition was set based upon.\nFor instance, if .metadata.generation is currently 12, but the .status.conditions[x].observedGeneration is 9, the condition is out of date\nwith respect to the current state of the instance.",
|
||||||
|
"format": "int64",
|
||||||
|
"minimum": 0,
|
||||||
|
"type": "integer"
|
||||||
|
},
|
||||||
|
"reason": {
|
||||||
|
"description": "reason contains a programmatic identifier indicating the reason for the condition's last transition.\nProducers of specific condition types may define expected values and meanings for this field,\nand whether the values are considered a guaranteed API.\nThe value should be a CamelCase string.\nThis field may not be empty.",
|
||||||
|
"maxLength": 1024,
|
||||||
|
"minLength": 1,
|
||||||
|
"pattern": "^[A-Za-z]([A-Za-z0-9_,:]*[A-Za-z0-9_])?$",
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"status": {
|
||||||
|
"description": "status of the condition, one of True, False, Unknown.",
|
||||||
|
"enum": [
|
||||||
|
"True",
|
||||||
|
"False",
|
||||||
|
"Unknown"
|
||||||
|
],
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"type": {
|
||||||
|
"description": "type of condition in CamelCase or in foo.example.com/CamelCase.",
|
||||||
|
"maxLength": 316,
|
||||||
|
"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])$",
|
||||||
|
"type": "string"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"required": [
|
||||||
|
"lastTransitionTime",
|
||||||
|
"message",
|
||||||
|
"reason",
|
||||||
|
"status",
|
||||||
|
"type"
|
||||||
|
],
|
||||||
|
"type": "object",
|
||||||
|
"additionalProperties": false
|
||||||
|
},
|
||||||
|
"type": "array"
|
||||||
|
},
|
||||||
|
"lastHandledReconcileAt": {
|
||||||
|
"description": "LastHandledReconcileAt holds the value of the most recent\nreconcile request value, so a change of the annotation value\ncan be detected.",
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"observedGeneration": {
|
||||||
|
"description": "ObservedGeneration is the last reconciled generation.",
|
||||||
|
"format": "int64",
|
||||||
|
"type": "integer"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"type": "object",
|
||||||
|
"additionalProperties": false
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"type": "object"
|
||||||
|
}
|
||||||
@@ -0,0 +1,156 @@
|
|||||||
|
{
|
||||||
|
"description": "Provider is the Schema for the providers API",
|
||||||
|
"properties": {
|
||||||
|
"apiVersion": {
|
||||||
|
"description": "APIVersion defines the versioned schema of this representation of an object.\nServers should convert recognized schemas to the latest internal value, and\nmay reject unrecognized values.\nMore info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources",
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"kind": {
|
||||||
|
"description": "Kind is a string value representing the REST resource this object represents.\nServers may infer this from the endpoint the client submits requests to.\nCannot be updated.\nIn CamelCase.\nMore info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds",
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"metadata": {
|
||||||
|
"type": "object"
|
||||||
|
},
|
||||||
|
"spec": {
|
||||||
|
"description": "ProviderSpec defines the desired state of the Provider.",
|
||||||
|
"properties": {
|
||||||
|
"address": {
|
||||||
|
"description": "Address specifies the endpoint, in a generic sense, to where alerts are sent.\nWhat kind of endpoint depends on the specific Provider type being used.\nFor the generic Provider, for example, this is an HTTP/S address.\nFor other Provider types this could be a project ID or a namespace.",
|
||||||
|
"maxLength": 2048,
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"certSecretRef": {
|
||||||
|
"description": "CertSecretRef specifies the Secret containing TLS certificates\nfor secure communication.\n\nSupported configurations:\n- CA-only: Server authentication (provide ca.crt only)\n- mTLS: Mutual authentication (provide ca.crt + tls.crt + tls.key)\n- Client-only: Client authentication with system CA (provide tls.crt + tls.key only)\n\nLegacy keys \"caFile\", \"certFile\", \"keyFile\" are supported but deprecated. Use \"ca.crt\", \"tls.crt\", \"tls.key\" instead.",
|
||||||
|
"properties": {
|
||||||
|
"name": {
|
||||||
|
"description": "Name of the referent.",
|
||||||
|
"type": "string"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"required": [
|
||||||
|
"name"
|
||||||
|
],
|
||||||
|
"type": "object",
|
||||||
|
"additionalProperties": false
|
||||||
|
},
|
||||||
|
"channel": {
|
||||||
|
"description": "Channel specifies the destination channel where events should be posted.",
|
||||||
|
"maxLength": 2048,
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"commitStatusExpr": {
|
||||||
|
"description": "CommitStatusExpr is a CEL expression that evaluates to a string value\nthat can be used to generate a custom commit status message for use\nwith eligible Provider types (github, gitlab, gitea, bitbucketserver,\nbitbucket, azuredevops). Supported variables are: event, provider,\nand alert.",
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"interval": {
|
||||||
|
"description": "Interval at which to reconcile the Provider with its Secret references.\nDeprecated and not used in v1beta3.",
|
||||||
|
"pattern": "^([0-9]+(\\.[0-9]+)?(ms|s|m|h))+$",
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"proxy": {
|
||||||
|
"description": "Proxy the HTTP/S address of the proxy server.\nDeprecated: Use ProxySecretRef instead. Will be removed in v1.",
|
||||||
|
"maxLength": 2048,
|
||||||
|
"pattern": "^(http|https)://.*$",
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"proxySecretRef": {
|
||||||
|
"description": "ProxySecretRef specifies the Secret containing the proxy configuration\nfor this Provider. The Secret should contain an 'address' key with the\nHTTP/S address of the proxy server. Optional 'username' and 'password'\nkeys can be provided for proxy authentication.",
|
||||||
|
"properties": {
|
||||||
|
"name": {
|
||||||
|
"description": "Name of the referent.",
|
||||||
|
"type": "string"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"required": [
|
||||||
|
"name"
|
||||||
|
],
|
||||||
|
"type": "object",
|
||||||
|
"additionalProperties": false
|
||||||
|
},
|
||||||
|
"secretRef": {
|
||||||
|
"description": "SecretRef specifies the Secret containing the authentication\ncredentials for this Provider.",
|
||||||
|
"properties": {
|
||||||
|
"name": {
|
||||||
|
"description": "Name of the referent.",
|
||||||
|
"type": "string"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"required": [
|
||||||
|
"name"
|
||||||
|
],
|
||||||
|
"type": "object",
|
||||||
|
"additionalProperties": false
|
||||||
|
},
|
||||||
|
"serviceAccountName": {
|
||||||
|
"description": "ServiceAccountName is the name of the Kubernetes ServiceAccount used to\nauthenticate with cloud provider services through workload identity.\nThis enables multi-tenant authentication without storing static credentials.\n\nSupported provider types: azureeventhub, azuredevops, googlepubsub\n\nWhen specified, the controller will:\n1. Create an OIDC token for the specified ServiceAccount\n2. Exchange it for cloud provider credentials via STS\n3. Use the obtained credentials for API authentication\n\nWhen unspecified, controller-level authentication is used (single-tenant).\n\nAn error is thrown if static credentials are also defined in SecretRef.\nThis field requires the ObjectLevelWorkloadIdentity feature gate to be enabled.",
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"suspend": {
|
||||||
|
"description": "Suspend tells the controller to suspend subsequent\nevents handling for this Provider.",
|
||||||
|
"type": "boolean"
|
||||||
|
},
|
||||||
|
"timeout": {
|
||||||
|
"description": "Timeout for sending alerts to the Provider.",
|
||||||
|
"pattern": "^([0-9]+(\\.[0-9]+)?(ms|s|m))+$",
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"type": {
|
||||||
|
"description": "Type specifies which Provider implementation to use.",
|
||||||
|
"enum": [
|
||||||
|
"slack",
|
||||||
|
"discord",
|
||||||
|
"msteams",
|
||||||
|
"rocket",
|
||||||
|
"generic",
|
||||||
|
"generic-hmac",
|
||||||
|
"github",
|
||||||
|
"gitlab",
|
||||||
|
"gitea",
|
||||||
|
"giteapullrequestcomment",
|
||||||
|
"bitbucketserver",
|
||||||
|
"bitbucket",
|
||||||
|
"azuredevops",
|
||||||
|
"googlechat",
|
||||||
|
"googlepubsub",
|
||||||
|
"webex",
|
||||||
|
"sentry",
|
||||||
|
"azureeventhub",
|
||||||
|
"telegram",
|
||||||
|
"lark",
|
||||||
|
"matrix",
|
||||||
|
"opsgenie",
|
||||||
|
"alertmanager",
|
||||||
|
"grafana",
|
||||||
|
"githubdispatch",
|
||||||
|
"githubpullrequestcomment",
|
||||||
|
"gitlabmergerequestcomment",
|
||||||
|
"pagerduty",
|
||||||
|
"datadog",
|
||||||
|
"nats",
|
||||||
|
"zulip",
|
||||||
|
"otel"
|
||||||
|
],
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"username": {
|
||||||
|
"description": "Username specifies the name under which events are posted.",
|
||||||
|
"maxLength": 2048,
|
||||||
|
"type": "string"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"required": [
|
||||||
|
"type"
|
||||||
|
],
|
||||||
|
"type": "object",
|
||||||
|
"x-kubernetes-validations": [
|
||||||
|
{
|
||||||
|
"message": "spec.commitStatusExpr is only supported for the 'github', 'gitlab', 'gitea', 'bitbucketserver', 'bitbucket', 'azuredevops' provider types",
|
||||||
|
"rule": "self.type == 'github' || self.type == 'gitlab' || self.type == 'gitea' || self.type == 'bitbucketserver' || self.type == 'bitbucket' || self.type == 'azuredevops' || !has(self.commitStatusExpr)"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"additionalProperties": false
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"type": "object"
|
||||||
|
}
|
||||||
@@ -0,0 +1,217 @@
|
|||||||
|
{
|
||||||
|
"description": "Receiver is the Schema for the receivers API.",
|
||||||
|
"properties": {
|
||||||
|
"apiVersion": {
|
||||||
|
"description": "APIVersion defines the versioned schema of this representation of an object.\nServers should convert recognized schemas to the latest internal value, and\nmay reject unrecognized values.\nMore info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources",
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"kind": {
|
||||||
|
"description": "Kind is a string value representing the REST resource this object represents.\nServers may infer this from the endpoint the client submits requests to.\nCannot be updated.\nIn CamelCase.\nMore info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds",
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"metadata": {
|
||||||
|
"type": "object"
|
||||||
|
},
|
||||||
|
"spec": {
|
||||||
|
"description": "ReceiverSpec defines the desired state of the Receiver.",
|
||||||
|
"properties": {
|
||||||
|
"events": {
|
||||||
|
"description": "Events specifies the list of event types to handle,\ne.g. 'push' for GitHub or 'Push Hook' for GitLab.",
|
||||||
|
"items": {
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"type": "array"
|
||||||
|
},
|
||||||
|
"interval": {
|
||||||
|
"default": "10m",
|
||||||
|
"description": "Interval at which to reconcile the Receiver with its Secret references.",
|
||||||
|
"pattern": "^([0-9]+(\\.[0-9]+)?(ms|s|m|h))+$",
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"resourceFilter": {
|
||||||
|
"description": "ResourceFilter is a CEL expression expected to return a boolean that is\nevaluated for each resource referenced in the Resources field when a\nwebhook is received. If the expression returns false then the controller\nwill not request a reconciliation for the resource.\nWhen the expression is specified the controller will parse it and mark\nthe object as terminally failed if the expression is invalid or does not\nreturn a boolean.",
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"resources": {
|
||||||
|
"description": "A list of resources to be notified about changes.",
|
||||||
|
"items": {
|
||||||
|
"description": "CrossNamespaceObjectReference contains enough information to let you locate the\ntyped referenced object at cluster level",
|
||||||
|
"properties": {
|
||||||
|
"apiVersion": {
|
||||||
|
"description": "API version of the referent",
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"kind": {
|
||||||
|
"description": "Kind of the referent",
|
||||||
|
"enum": [
|
||||||
|
"Bucket",
|
||||||
|
"GitRepository",
|
||||||
|
"Kustomization",
|
||||||
|
"HelmRelease",
|
||||||
|
"HelmChart",
|
||||||
|
"HelmRepository",
|
||||||
|
"ImageRepository",
|
||||||
|
"ImagePolicy",
|
||||||
|
"ImageUpdateAutomation",
|
||||||
|
"OCIRepository",
|
||||||
|
"ArtifactGenerator",
|
||||||
|
"ExternalArtifact"
|
||||||
|
],
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"matchLabels": {
|
||||||
|
"additionalProperties": {
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"description": "MatchLabels is a map of {key,value} pairs. A single {key,value} in the matchLabels\nmap is equivalent to an element of matchExpressions, whose key field is \"key\", the\noperator is \"In\", and the values array contains only \"value\". The requirements are ANDed.\nMatchLabels requires the name to be set to `*`.",
|
||||||
|
"type": "object"
|
||||||
|
},
|
||||||
|
"name": {
|
||||||
|
"description": "Name of the referent\nIf multiple resources are targeted `*` may be set.",
|
||||||
|
"maxLength": 253,
|
||||||
|
"minLength": 1,
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"namespace": {
|
||||||
|
"description": "Namespace of the referent",
|
||||||
|
"maxLength": 253,
|
||||||
|
"minLength": 1,
|
||||||
|
"type": "string"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"required": [
|
||||||
|
"kind",
|
||||||
|
"name"
|
||||||
|
],
|
||||||
|
"type": "object",
|
||||||
|
"additionalProperties": false
|
||||||
|
},
|
||||||
|
"type": "array"
|
||||||
|
},
|
||||||
|
"secretRef": {
|
||||||
|
"description": "SecretRef specifies the Secret containing the token used\nto validate the payload authenticity. The Secret must contain a 'token'\nkey. For GCR receivers, the Secret must also contain an 'email' key\nwith the IAM service account email configured on the Pub/Sub push\nsubscription, and an 'audience' key with the expected OIDC token audience.",
|
||||||
|
"properties": {
|
||||||
|
"name": {
|
||||||
|
"description": "Name of the referent.",
|
||||||
|
"type": "string"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"required": [
|
||||||
|
"name"
|
||||||
|
],
|
||||||
|
"type": "object",
|
||||||
|
"additionalProperties": false
|
||||||
|
},
|
||||||
|
"suspend": {
|
||||||
|
"description": "Suspend tells the controller to suspend subsequent\nevents handling for this receiver.",
|
||||||
|
"type": "boolean"
|
||||||
|
},
|
||||||
|
"type": {
|
||||||
|
"description": "Type of webhook sender, used to determine\nthe validation procedure and payload deserialization.",
|
||||||
|
"enum": [
|
||||||
|
"generic",
|
||||||
|
"generic-hmac",
|
||||||
|
"github",
|
||||||
|
"gitlab",
|
||||||
|
"bitbucket",
|
||||||
|
"harbor",
|
||||||
|
"dockerhub",
|
||||||
|
"quay",
|
||||||
|
"gcr",
|
||||||
|
"nexus",
|
||||||
|
"acr",
|
||||||
|
"cdevents"
|
||||||
|
],
|
||||||
|
"type": "string"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"required": [
|
||||||
|
"resources",
|
||||||
|
"secretRef",
|
||||||
|
"type"
|
||||||
|
],
|
||||||
|
"type": "object",
|
||||||
|
"additionalProperties": false
|
||||||
|
},
|
||||||
|
"status": {
|
||||||
|
"default": {
|
||||||
|
"observedGeneration": -1
|
||||||
|
},
|
||||||
|
"description": "ReceiverStatus defines the observed state of the Receiver.",
|
||||||
|
"properties": {
|
||||||
|
"conditions": {
|
||||||
|
"description": "Conditions holds the conditions for the Receiver.",
|
||||||
|
"items": {
|
||||||
|
"description": "Condition contains details for one aspect of the current state of this API Resource.",
|
||||||
|
"properties": {
|
||||||
|
"lastTransitionTime": {
|
||||||
|
"description": "lastTransitionTime is the last time the condition transitioned from one status to another.\nThis should be when the underlying condition changed. If that is not known, then using the time when the API field changed is acceptable.",
|
||||||
|
"format": "date-time",
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"message": {
|
||||||
|
"description": "message is a human readable message indicating details about the transition.\nThis may be an empty string.",
|
||||||
|
"maxLength": 32768,
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"observedGeneration": {
|
||||||
|
"description": "observedGeneration represents the .metadata.generation that the condition was set based upon.\nFor instance, if .metadata.generation is currently 12, but the .status.conditions[x].observedGeneration is 9, the condition is out of date\nwith respect to the current state of the instance.",
|
||||||
|
"format": "int64",
|
||||||
|
"minimum": 0,
|
||||||
|
"type": "integer"
|
||||||
|
},
|
||||||
|
"reason": {
|
||||||
|
"description": "reason contains a programmatic identifier indicating the reason for the condition's last transition.\nProducers of specific condition types may define expected values and meanings for this field,\nand whether the values are considered a guaranteed API.\nThe value should be a CamelCase string.\nThis field may not be empty.",
|
||||||
|
"maxLength": 1024,
|
||||||
|
"minLength": 1,
|
||||||
|
"pattern": "^[A-Za-z]([A-Za-z0-9_,:]*[A-Za-z0-9_])?$",
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"status": {
|
||||||
|
"description": "status of the condition, one of True, False, Unknown.",
|
||||||
|
"enum": [
|
||||||
|
"True",
|
||||||
|
"False",
|
||||||
|
"Unknown"
|
||||||
|
],
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"type": {
|
||||||
|
"description": "type of condition in CamelCase or in foo.example.com/CamelCase.",
|
||||||
|
"maxLength": 316,
|
||||||
|
"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])$",
|
||||||
|
"type": "string"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"required": [
|
||||||
|
"lastTransitionTime",
|
||||||
|
"message",
|
||||||
|
"reason",
|
||||||
|
"status",
|
||||||
|
"type"
|
||||||
|
],
|
||||||
|
"type": "object",
|
||||||
|
"additionalProperties": false
|
||||||
|
},
|
||||||
|
"type": "array"
|
||||||
|
},
|
||||||
|
"lastHandledReconcileAt": {
|
||||||
|
"description": "LastHandledReconcileAt holds the value of the most recent\nreconcile request value, so a change of the annotation value\ncan be detected.",
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"observedGeneration": {
|
||||||
|
"description": "ObservedGeneration is the last observed generation of the Receiver object.",
|
||||||
|
"format": "int64",
|
||||||
|
"type": "integer"
|
||||||
|
},
|
||||||
|
"webhookPath": {
|
||||||
|
"description": "WebhookPath is the generated incoming webhook address in the format\nof '/hook/sha256sum(token+name+namespace)'.",
|
||||||
|
"type": "string"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"type": "object",
|
||||||
|
"additionalProperties": false
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"type": "object"
|
||||||
|
}
|
||||||
@@ -0,0 +1,215 @@
|
|||||||
|
{
|
||||||
|
"description": "Receiver is the Schema for the receivers API.",
|
||||||
|
"properties": {
|
||||||
|
"apiVersion": {
|
||||||
|
"description": "APIVersion defines the versioned schema of this representation of an object.\nServers should convert recognized schemas to the latest internal value, and\nmay reject unrecognized values.\nMore info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources",
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"kind": {
|
||||||
|
"description": "Kind is a string value representing the REST resource this object represents.\nServers may infer this from the endpoint the client submits requests to.\nCannot be updated.\nIn CamelCase.\nMore info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds",
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"metadata": {
|
||||||
|
"type": "object"
|
||||||
|
},
|
||||||
|
"spec": {
|
||||||
|
"description": "ReceiverSpec defines the desired state of the Receiver.",
|
||||||
|
"properties": {
|
||||||
|
"events": {
|
||||||
|
"description": "Events specifies the list of event types to handle,\ne.g. 'push' for GitHub or 'Push Hook' for GitLab.",
|
||||||
|
"items": {
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"type": "array"
|
||||||
|
},
|
||||||
|
"interval": {
|
||||||
|
"description": "Interval at which to reconcile the Receiver with its Secret references.",
|
||||||
|
"pattern": "^([0-9]+(\\.[0-9]+)?(ms|s|m|h))+$",
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"resources": {
|
||||||
|
"description": "A list of resources to be notified about changes.",
|
||||||
|
"items": {
|
||||||
|
"description": "CrossNamespaceObjectReference contains enough information to let you locate the\ntyped referenced object at cluster level",
|
||||||
|
"properties": {
|
||||||
|
"apiVersion": {
|
||||||
|
"description": "API version of the referent",
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"kind": {
|
||||||
|
"description": "Kind of the referent",
|
||||||
|
"enum": [
|
||||||
|
"Bucket",
|
||||||
|
"GitRepository",
|
||||||
|
"Kustomization",
|
||||||
|
"HelmRelease",
|
||||||
|
"HelmChart",
|
||||||
|
"HelmRepository",
|
||||||
|
"ImageRepository",
|
||||||
|
"ImagePolicy",
|
||||||
|
"ImageUpdateAutomation",
|
||||||
|
"OCIRepository",
|
||||||
|
"ArtifactGenerator",
|
||||||
|
"ExternalArtifact"
|
||||||
|
],
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"matchLabels": {
|
||||||
|
"additionalProperties": {
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"description": "MatchLabels is a map of {key,value} pairs. A single {key,value} in the matchLabels\nmap is equivalent to an element of matchExpressions, whose key field is \"key\", the\noperator is \"In\", and the values array contains only \"value\". The requirements are ANDed.\nMatchLabels requires the name to be set to `*`.",
|
||||||
|
"type": "object"
|
||||||
|
},
|
||||||
|
"name": {
|
||||||
|
"description": "Name of the referent\nIf multiple resources are targeted `*` may be set.",
|
||||||
|
"maxLength": 253,
|
||||||
|
"minLength": 1,
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"namespace": {
|
||||||
|
"description": "Namespace of the referent",
|
||||||
|
"maxLength": 253,
|
||||||
|
"minLength": 1,
|
||||||
|
"type": "string"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"required": [
|
||||||
|
"kind",
|
||||||
|
"name"
|
||||||
|
],
|
||||||
|
"type": "object",
|
||||||
|
"additionalProperties": false
|
||||||
|
},
|
||||||
|
"type": "array"
|
||||||
|
},
|
||||||
|
"secretRef": {
|
||||||
|
"description": "SecretRef specifies the Secret containing the token used\nto validate the payload authenticity.",
|
||||||
|
"properties": {
|
||||||
|
"name": {
|
||||||
|
"description": "Name of the referent.",
|
||||||
|
"type": "string"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"required": [
|
||||||
|
"name"
|
||||||
|
],
|
||||||
|
"type": "object",
|
||||||
|
"additionalProperties": false
|
||||||
|
},
|
||||||
|
"suspend": {
|
||||||
|
"description": "Suspend tells the controller to suspend subsequent\nevents handling for this receiver.",
|
||||||
|
"type": "boolean"
|
||||||
|
},
|
||||||
|
"type": {
|
||||||
|
"description": "Type of webhook sender, used to determine\nthe validation procedure and payload deserialization.",
|
||||||
|
"enum": [
|
||||||
|
"generic",
|
||||||
|
"generic-hmac",
|
||||||
|
"github",
|
||||||
|
"gitlab",
|
||||||
|
"bitbucket",
|
||||||
|
"harbor",
|
||||||
|
"dockerhub",
|
||||||
|
"quay",
|
||||||
|
"gcr",
|
||||||
|
"nexus",
|
||||||
|
"acr"
|
||||||
|
],
|
||||||
|
"type": "string"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"required": [
|
||||||
|
"resources",
|
||||||
|
"secretRef",
|
||||||
|
"type"
|
||||||
|
],
|
||||||
|
"type": "object",
|
||||||
|
"additionalProperties": false
|
||||||
|
},
|
||||||
|
"status": {
|
||||||
|
"default": {
|
||||||
|
"observedGeneration": -1
|
||||||
|
},
|
||||||
|
"description": "ReceiverStatus defines the observed state of the Receiver.",
|
||||||
|
"properties": {
|
||||||
|
"conditions": {
|
||||||
|
"description": "Conditions holds the conditions for the Receiver.",
|
||||||
|
"items": {
|
||||||
|
"description": "Condition contains details for one aspect of the current state of this API Resource.",
|
||||||
|
"properties": {
|
||||||
|
"lastTransitionTime": {
|
||||||
|
"description": "lastTransitionTime is the last time the condition transitioned from one status to another.\nThis should be when the underlying condition changed. If that is not known, then using the time when the API field changed is acceptable.",
|
||||||
|
"format": "date-time",
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"message": {
|
||||||
|
"description": "message is a human readable message indicating details about the transition.\nThis may be an empty string.",
|
||||||
|
"maxLength": 32768,
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"observedGeneration": {
|
||||||
|
"description": "observedGeneration represents the .metadata.generation that the condition was set based upon.\nFor instance, if .metadata.generation is currently 12, but the .status.conditions[x].observedGeneration is 9, the condition is out of date\nwith respect to the current state of the instance.",
|
||||||
|
"format": "int64",
|
||||||
|
"minimum": 0,
|
||||||
|
"type": "integer"
|
||||||
|
},
|
||||||
|
"reason": {
|
||||||
|
"description": "reason contains a programmatic identifier indicating the reason for the condition's last transition.\nProducers of specific condition types may define expected values and meanings for this field,\nand whether the values are considered a guaranteed API.\nThe value should be a CamelCase string.\nThis field may not be empty.",
|
||||||
|
"maxLength": 1024,
|
||||||
|
"minLength": 1,
|
||||||
|
"pattern": "^[A-Za-z]([A-Za-z0-9_,:]*[A-Za-z0-9_])?$",
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"status": {
|
||||||
|
"description": "status of the condition, one of True, False, Unknown.",
|
||||||
|
"enum": [
|
||||||
|
"True",
|
||||||
|
"False",
|
||||||
|
"Unknown"
|
||||||
|
],
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"type": {
|
||||||
|
"description": "type of condition in CamelCase or in foo.example.com/CamelCase.",
|
||||||
|
"maxLength": 316,
|
||||||
|
"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])$",
|
||||||
|
"type": "string"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"required": [
|
||||||
|
"lastTransitionTime",
|
||||||
|
"message",
|
||||||
|
"reason",
|
||||||
|
"status",
|
||||||
|
"type"
|
||||||
|
],
|
||||||
|
"type": "object",
|
||||||
|
"additionalProperties": false
|
||||||
|
},
|
||||||
|
"type": "array"
|
||||||
|
},
|
||||||
|
"lastHandledReconcileAt": {
|
||||||
|
"description": "LastHandledReconcileAt holds the value of the most recent\nreconcile request value, so a change of the annotation value\ncan be detected.",
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"observedGeneration": {
|
||||||
|
"description": "ObservedGeneration is the last observed generation of the Receiver object.",
|
||||||
|
"format": "int64",
|
||||||
|
"type": "integer"
|
||||||
|
},
|
||||||
|
"url": {
|
||||||
|
"description": "URL is the generated incoming webhook address in the format\nof '/hook/sha256sum(token+name+namespace)'.\nDeprecated: Replaced by WebhookPath.",
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"webhookPath": {
|
||||||
|
"description": "WebhookPath is the generated incoming webhook address in the format\nof '/hook/sha256sum(token+name+namespace)'.",
|
||||||
|
"type": "string"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"type": "object",
|
||||||
|
"additionalProperties": false
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"type": "object"
|
||||||
|
}
|
||||||
@@ -0,0 +1,393 @@
|
|||||||
|
{
|
||||||
|
"description": "ResourceSet is the Schema for the ResourceSets API.",
|
||||||
|
"properties": {
|
||||||
|
"apiVersion": {
|
||||||
|
"description": "APIVersion defines the versioned schema of this representation of an object.\nServers should convert recognized schemas to the latest internal value, and\nmay reject unrecognized values.\nMore info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources",
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"kind": {
|
||||||
|
"description": "Kind is a string value representing the REST resource this object represents.\nServers may infer this from the endpoint the client submits requests to.\nCannot be updated.\nIn CamelCase.\nMore info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds",
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"metadata": {
|
||||||
|
"type": "object"
|
||||||
|
},
|
||||||
|
"spec": {
|
||||||
|
"description": "ResourceSetSpec defines the desired state of ResourceSet",
|
||||||
|
"properties": {
|
||||||
|
"commonMetadata": {
|
||||||
|
"description": "CommonMetadata specifies the common labels and annotations that are\napplied to all resources. Any existing label or annotation will be\noverridden if its key matches a common one.",
|
||||||
|
"properties": {
|
||||||
|
"annotations": {
|
||||||
|
"additionalProperties": {
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"description": "Annotations to be added to the object's metadata.",
|
||||||
|
"type": "object"
|
||||||
|
},
|
||||||
|
"labels": {
|
||||||
|
"additionalProperties": {
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"description": "Labels to be added to the object's metadata.",
|
||||||
|
"type": "object"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"type": "object",
|
||||||
|
"additionalProperties": false
|
||||||
|
},
|
||||||
|
"dependsOn": {
|
||||||
|
"description": "DependsOn specifies the list of Kubernetes resources that must\nexist on the cluster before the reconciliation process starts.",
|
||||||
|
"items": {
|
||||||
|
"description": "Dependency defines a ResourceSet dependency on a Kubernetes resource.",
|
||||||
|
"properties": {
|
||||||
|
"apiVersion": {
|
||||||
|
"description": "APIVersion of the resource to depend on.",
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"kind": {
|
||||||
|
"description": "Kind of the resource to depend on.",
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"name": {
|
||||||
|
"description": "Name of the resource to depend on.",
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"namespace": {
|
||||||
|
"description": "Namespace of the resource to depend on.",
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"ready": {
|
||||||
|
"description": "Ready checks if the resource Ready status condition is true.",
|
||||||
|
"type": "boolean"
|
||||||
|
},
|
||||||
|
"readyExpr": {
|
||||||
|
"description": "ReadyExpr checks if the resource satisfies the given CEL expression.\nThe expression replaces the default readiness check and\nis only evaluated if Ready is set to 'true'.",
|
||||||
|
"type": "string"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"required": [
|
||||||
|
"apiVersion",
|
||||||
|
"kind",
|
||||||
|
"name"
|
||||||
|
],
|
||||||
|
"type": "object",
|
||||||
|
"additionalProperties": false
|
||||||
|
},
|
||||||
|
"type": "array"
|
||||||
|
},
|
||||||
|
"inputStrategy": {
|
||||||
|
"description": "InputStrategy defines how the inputs are combined when multiple\ninput provider objects are used. Defaults to flattening all inputs\nfrom all providers into a single list of input sets.",
|
||||||
|
"properties": {
|
||||||
|
"includeEmptyProviders": {
|
||||||
|
"description": "IncludeEmptyProviders controls how input providers that export no\ninputs are treated. Only applies when Name is Permute. When true, if\nany provider has zero inputs the resulting permutation set is empty\n(mathematically correct Cartesian product behavior). When false or\nunset (default), providers with zero inputs are silently skipped and\nthe remaining providers still permute among themselves.",
|
||||||
|
"type": "boolean"
|
||||||
|
},
|
||||||
|
"name": {
|
||||||
|
"description": "Name defines how the inputs are combined when multiple\ninput provider objects are used. Supported values are:\n- Flatten: all inputs sets from all input provider objects are\n flattened into a single list of input sets.\n- Permute: all inputs sets from all input provider objects are\n combined using a Cartesian product, resulting in a list of input sets\n that contains every possible combination of input values.\n For example, if provider A has inputs [{x: 1}, {x: 2}] and provider B has\n inputs [{y: \"a\"}, {y: \"b\"}], the resulting input sets will be:\n [{x: 1, y: \"a\"}, {x: 1, y: \"b\"}, {x: 2, y: \"a\"}, {x: 2, y: \"b\"}].\n This strategy can lead to a large number of input sets and should be\n used with caution. Users should use filtering features from\n ResourceSetInputProvider to limit the amount of exported inputs.",
|
||||||
|
"enum": [
|
||||||
|
"Flatten",
|
||||||
|
"Permute"
|
||||||
|
],
|
||||||
|
"type": "string"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"required": [
|
||||||
|
"name"
|
||||||
|
],
|
||||||
|
"type": "object",
|
||||||
|
"x-kubernetes-validations": [
|
||||||
|
{
|
||||||
|
"message": "includeEmptyProviders only applies when name is Permute",
|
||||||
|
"rule": "!has(self.includeEmptyProviders) || self.name == 'Permute'"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"additionalProperties": false
|
||||||
|
},
|
||||||
|
"inputs": {
|
||||||
|
"description": "Inputs contains the list of ResourceSet inputs.",
|
||||||
|
"items": {
|
||||||
|
"additionalProperties": {
|
||||||
|
"x-kubernetes-preserve-unknown-fields": true
|
||||||
|
},
|
||||||
|
"description": "ResourceSetInput defines the key-value pairs of the ResourceSet input.",
|
||||||
|
"type": "object"
|
||||||
|
},
|
||||||
|
"type": "array"
|
||||||
|
},
|
||||||
|
"inputsFrom": {
|
||||||
|
"description": "InputsFrom contains the list of references to input providers.\nWhen set, the inputs are fetched from the providers and concatenated\nwith the in-line inputs defined in the ResourceSet.",
|
||||||
|
"items": {
|
||||||
|
"description": "InputProviderReference defines a reference to an input provider resource\nin the same namespace as the ResourceSet.",
|
||||||
|
"properties": {
|
||||||
|
"apiVersion": {
|
||||||
|
"description": "APIVersion of the input provider resource.\nWhen not set, the APIVersion of the ResourceSet is used.",
|
||||||
|
"enum": [
|
||||||
|
"fluxcd.controlplane.io/v1"
|
||||||
|
],
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"kind": {
|
||||||
|
"description": "Kind of the input provider resource.",
|
||||||
|
"enum": [
|
||||||
|
"ResourceSetInputProvider"
|
||||||
|
],
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"name": {
|
||||||
|
"description": "Name of the input provider resource. Cannot be set\nwhen the Selector field is set.",
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"selector": {
|
||||||
|
"description": "Selector is a label selector to filter the input provider resources\nas an alternative to the Name field.",
|
||||||
|
"properties": {
|
||||||
|
"matchExpressions": {
|
||||||
|
"description": "matchExpressions is a list of label selector requirements. The requirements are ANDed.",
|
||||||
|
"items": {
|
||||||
|
"description": "A label selector requirement is a selector that contains values, a key, and an operator that\nrelates the key and values.",
|
||||||
|
"properties": {
|
||||||
|
"key": {
|
||||||
|
"description": "key is the label key that the selector applies to.",
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"operator": {
|
||||||
|
"description": "operator represents a key's relationship to a set of values.\nValid operators are In, NotIn, Exists and DoesNotExist.",
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"values": {
|
||||||
|
"description": "values is an array of string values. If the operator is In or NotIn,\nthe values array must be non-empty. If the operator is Exists or DoesNotExist,\nthe values array must be empty. This array is replaced during a strategic\nmerge patch.",
|
||||||
|
"items": {
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"type": "array",
|
||||||
|
"x-kubernetes-list-type": "atomic"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"required": [
|
||||||
|
"key",
|
||||||
|
"operator"
|
||||||
|
],
|
||||||
|
"type": "object",
|
||||||
|
"additionalProperties": false
|
||||||
|
},
|
||||||
|
"type": "array",
|
||||||
|
"x-kubernetes-list-type": "atomic"
|
||||||
|
},
|
||||||
|
"matchLabels": {
|
||||||
|
"additionalProperties": {
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"description": "matchLabels is a map of {key,value} pairs. A single {key,value} in the matchLabels\nmap is equivalent to an element of matchExpressions, whose key field is \"key\", the\noperator is \"In\", and the values array contains only \"value\". The requirements are ANDed.",
|
||||||
|
"type": "object"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"type": "object",
|
||||||
|
"x-kubernetes-map-type": "atomic",
|
||||||
|
"additionalProperties": false
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"type": "object",
|
||||||
|
"x-kubernetes-validations": [
|
||||||
|
{
|
||||||
|
"message": "at least one of name or selector must be set for input provider references",
|
||||||
|
"rule": "has(self.name) || has(self.selector)"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"message": "cannot set both name and selector for input provider references",
|
||||||
|
"rule": "!has(self.name) || !has(self.selector)"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"additionalProperties": false
|
||||||
|
},
|
||||||
|
"type": "array"
|
||||||
|
},
|
||||||
|
"resources": {
|
||||||
|
"description": "Resources contains the list of Kubernetes resources to reconcile.",
|
||||||
|
"items": {
|
||||||
|
"x-kubernetes-preserve-unknown-fields": true
|
||||||
|
},
|
||||||
|
"type": "array"
|
||||||
|
},
|
||||||
|
"resourcesTemplate": {
|
||||||
|
"description": "ResourcesTemplate is a Go template that generates the list of\nKubernetes resources to reconcile. The template is rendered\nas multi-document YAML, the resources should be separated by '---'.\nWhen both Resources and ResourcesTemplate are set, the resulting\nobjects are merged and deduplicated, with the ones from Resources taking precedence.",
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"serviceAccountName": {
|
||||||
|
"description": "The name of the Kubernetes service account to impersonate\nwhen reconciling the generated resources.",
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"wait": {
|
||||||
|
"description": "Wait instructs the controller to check the health\nof all the reconciled resources.",
|
||||||
|
"type": "boolean"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"type": "object",
|
||||||
|
"additionalProperties": false
|
||||||
|
},
|
||||||
|
"status": {
|
||||||
|
"description": "ResourceSetStatus defines the observed state of ResourceSet.",
|
||||||
|
"properties": {
|
||||||
|
"conditions": {
|
||||||
|
"description": "Conditions contains the readiness conditions of the object.",
|
||||||
|
"items": {
|
||||||
|
"description": "Condition contains details for one aspect of the current state of this API Resource.",
|
||||||
|
"properties": {
|
||||||
|
"lastTransitionTime": {
|
||||||
|
"description": "lastTransitionTime is the last time the condition transitioned from one status to another.\nThis should be when the underlying condition changed. If that is not known, then using the time when the API field changed is acceptable.",
|
||||||
|
"format": "date-time",
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"message": {
|
||||||
|
"description": "message is a human readable message indicating details about the transition.\nThis may be an empty string.",
|
||||||
|
"maxLength": 32768,
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"observedGeneration": {
|
||||||
|
"description": "observedGeneration represents the .metadata.generation that the condition was set based upon.\nFor instance, if .metadata.generation is currently 12, but the .status.conditions[x].observedGeneration is 9, the condition is out of date\nwith respect to the current state of the instance.",
|
||||||
|
"format": "int64",
|
||||||
|
"minimum": 0,
|
||||||
|
"type": "integer"
|
||||||
|
},
|
||||||
|
"reason": {
|
||||||
|
"description": "reason contains a programmatic identifier indicating the reason for the condition's last transition.\nProducers of specific condition types may define expected values and meanings for this field,\nand whether the values are considered a guaranteed API.\nThe value should be a CamelCase string.\nThis field may not be empty.",
|
||||||
|
"maxLength": 1024,
|
||||||
|
"minLength": 1,
|
||||||
|
"pattern": "^[A-Za-z]([A-Za-z0-9_,:]*[A-Za-z0-9_])?$",
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"status": {
|
||||||
|
"description": "status of the condition, one of True, False, Unknown.",
|
||||||
|
"enum": [
|
||||||
|
"True",
|
||||||
|
"False",
|
||||||
|
"Unknown"
|
||||||
|
],
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"type": {
|
||||||
|
"description": "type of condition in CamelCase or in foo.example.com/CamelCase.",
|
||||||
|
"maxLength": 316,
|
||||||
|
"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])$",
|
||||||
|
"type": "string"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"required": [
|
||||||
|
"lastTransitionTime",
|
||||||
|
"message",
|
||||||
|
"reason",
|
||||||
|
"status",
|
||||||
|
"type"
|
||||||
|
],
|
||||||
|
"type": "object",
|
||||||
|
"additionalProperties": false
|
||||||
|
},
|
||||||
|
"type": "array"
|
||||||
|
},
|
||||||
|
"externalChecksumRefs": {
|
||||||
|
"description": "ExternalChecksumRefs lists the ConfigMap and Secret references\ndiscovered in checksumFrom annotations on the last reconciliation\nthat point to objects not rendered by this ResourceSet. Each entry\nhas the form \"Kind/namespace/name\". It is used to trigger a\nreconciliation when one of the referenced objects changes.",
|
||||||
|
"items": {
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"type": "array"
|
||||||
|
},
|
||||||
|
"history": {
|
||||||
|
"description": "History contains the reconciliation history of the ResourceSet\nas a list of snapshots ordered by the last reconciled time.",
|
||||||
|
"items": {
|
||||||
|
"description": "Snapshot represents a point-in-time record of a group of resources reconciliation,\nincluding timing information, status, and a unique digest identifier.",
|
||||||
|
"properties": {
|
||||||
|
"digest": {
|
||||||
|
"description": "Digest is the checksum in the format `<algo>:<hex>` of the resources in this snapshot.",
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"firstReconciled": {
|
||||||
|
"description": "FirstReconciled is the time when this revision was first reconciled to the cluster.",
|
||||||
|
"format": "date-time",
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"lastReconciled": {
|
||||||
|
"description": "LastReconciled is the time when this revision was last reconciled to the cluster.",
|
||||||
|
"format": "date-time",
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"lastReconciledDuration": {
|
||||||
|
"description": "LastReconciledDuration is time it took to reconcile the resources in this revision.",
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"lastReconciledStatus": {
|
||||||
|
"description": "LastReconciledStatus is the status of the last reconciliation.",
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"metadata": {
|
||||||
|
"additionalProperties": {
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"description": "Metadata contains additional information about the snapshot.",
|
||||||
|
"type": "object"
|
||||||
|
},
|
||||||
|
"totalReconciliations": {
|
||||||
|
"description": "TotalReconciliations is the total number of reconciliations that have occurred for this snapshot.",
|
||||||
|
"format": "int64",
|
||||||
|
"type": "integer"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"required": [
|
||||||
|
"digest",
|
||||||
|
"firstReconciled",
|
||||||
|
"lastReconciled",
|
||||||
|
"lastReconciledDuration",
|
||||||
|
"lastReconciledStatus",
|
||||||
|
"totalReconciliations"
|
||||||
|
],
|
||||||
|
"type": "object",
|
||||||
|
"additionalProperties": false
|
||||||
|
},
|
||||||
|
"type": "array"
|
||||||
|
},
|
||||||
|
"inventory": {
|
||||||
|
"description": "Inventory contains a list of Kubernetes resource object references\nlast applied on the cluster.",
|
||||||
|
"properties": {
|
||||||
|
"entries": {
|
||||||
|
"description": "Entries of Kubernetes resource object references.",
|
||||||
|
"items": {
|
||||||
|
"description": "ResourceRef contains the information necessary to locate a resource within a cluster.",
|
||||||
|
"properties": {
|
||||||
|
"id": {
|
||||||
|
"description": "ID is the string representation of the Kubernetes resource object's metadata,\nin the format '<namespace>_<name>_<group>_<kind>'.",
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"v": {
|
||||||
|
"description": "Version is the API version of the Kubernetes resource object's kind.",
|
||||||
|
"type": "string"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"required": [
|
||||||
|
"id",
|
||||||
|
"v"
|
||||||
|
],
|
||||||
|
"type": "object",
|
||||||
|
"additionalProperties": false
|
||||||
|
},
|
||||||
|
"type": "array"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"required": [
|
||||||
|
"entries"
|
||||||
|
],
|
||||||
|
"type": "object",
|
||||||
|
"additionalProperties": false
|
||||||
|
},
|
||||||
|
"lastAppliedRevision": {
|
||||||
|
"description": "LastAppliedRevision is the digest of the\ngenerated resources that were last reconcile.",
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"lastHandledReconcileAt": {
|
||||||
|
"description": "LastHandledReconcileAt holds the value of the most recent\nreconcile request value, so a change of the annotation value\ncan be detected.",
|
||||||
|
"type": "string"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"type": "object",
|
||||||
|
"additionalProperties": false
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"type": "object"
|
||||||
|
}
|
||||||
@@ -0,0 +1,353 @@
|
|||||||
|
{
|
||||||
|
"description": "ResourceSetInputProvider is the Schema for the ResourceSetInputProviders API.",
|
||||||
|
"properties": {
|
||||||
|
"apiVersion": {
|
||||||
|
"description": "APIVersion defines the versioned schema of this representation of an object.\nServers should convert recognized schemas to the latest internal value, and\nmay reject unrecognized values.\nMore info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources",
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"kind": {
|
||||||
|
"description": "Kind is a string value representing the REST resource this object represents.\nServers may infer this from the endpoint the client submits requests to.\nCannot be updated.\nIn CamelCase.\nMore info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds",
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"metadata": {
|
||||||
|
"type": "object"
|
||||||
|
},
|
||||||
|
"spec": {
|
||||||
|
"description": "ResourceSetInputProviderSpec defines the desired state of ResourceSetInputProvider",
|
||||||
|
"properties": {
|
||||||
|
"certSecretRef": {
|
||||||
|
"description": "CertSecretRef specifies the Kubernetes Secret containing either or both of\n\n- a PEM-encoded CA certificate (`ca.crt`)\n- a PEM-encoded client certificate (`tls.crt`) and private key (`tls.key`)\n\nWhen connecting to a Git, OCI, or ExternalService provider that uses self-signed certificates,\nthe CA certificate must be set in the Secret under the 'ca.crt' key to establish the trust relationship.\nWhen connecting to a provider that supports client certificates (mTLS), the client certificate\nand private key must be set in the Secret under the 'tls.crt' and 'tls.key' keys, respectively.",
|
||||||
|
"properties": {
|
||||||
|
"name": {
|
||||||
|
"description": "Name of the referent.",
|
||||||
|
"type": "string"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"required": [
|
||||||
|
"name"
|
||||||
|
],
|
||||||
|
"type": "object",
|
||||||
|
"additionalProperties": false
|
||||||
|
},
|
||||||
|
"defaultValues": {
|
||||||
|
"additionalProperties": {
|
||||||
|
"x-kubernetes-preserve-unknown-fields": true
|
||||||
|
},
|
||||||
|
"description": "DefaultValues contains the default values for the inputs.\nThese values are used to populate the inputs when the provider\nresponse does not contain them.",
|
||||||
|
"type": "object"
|
||||||
|
},
|
||||||
|
"filter": {
|
||||||
|
"description": "Filter defines the filter to apply to the input provider response.",
|
||||||
|
"properties": {
|
||||||
|
"excludeBranch": {
|
||||||
|
"description": "ExcludeBranch specifies the regular expression to filter the branches\nthat the input provider should exclude.",
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"excludeEnvironment": {
|
||||||
|
"description": "ExcludeEnvironment specifies the regular expression to filter the environments\nthat the input provider should exclude.",
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"excludeTag": {
|
||||||
|
"description": "ExcludeTag specifies the regular expression to filter the tags\nthat the input provider should exclude.",
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"includeBranch": {
|
||||||
|
"description": "IncludeBranch specifies the regular expression to filter the branches\nthat the input provider should include.",
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"includeEnvironment": {
|
||||||
|
"description": "IncludeEnvironment specifies the regular expression to filter the environments\nthat the input provider should include.",
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"includeTag": {
|
||||||
|
"description": "IncludeTag specifies the regular expression to filter the tags\nthat the input provider should include.",
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"labels": {
|
||||||
|
"description": "Labels specifies the list of labels to filter the input provider response.",
|
||||||
|
"items": {
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"type": "array"
|
||||||
|
},
|
||||||
|
"limit": {
|
||||||
|
"default": 100,
|
||||||
|
"description": "Limit specifies the maximum number of input sets to return.\nWhen not set, the default limit is 100.",
|
||||||
|
"type": "integer"
|
||||||
|
},
|
||||||
|
"semver": {
|
||||||
|
"description": "Semver specifies a semantic version range to filter and sort the tags.\nIf this field is not specified, the tags will be sorted in reverse\nalphabetical order.\nSupported only for tags at the moment.",
|
||||||
|
"type": "string"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"type": "object",
|
||||||
|
"additionalProperties": false
|
||||||
|
},
|
||||||
|
"insecure": {
|
||||||
|
"description": "Insecure allows connecting to an ExternalService or OCIArtifactTag provider\nover plain HTTP without TLS. When not set, the URL must use HTTPS.",
|
||||||
|
"type": "boolean"
|
||||||
|
},
|
||||||
|
"schedule": {
|
||||||
|
"description": "Schedule defines the schedules for the input provider to run.",
|
||||||
|
"items": {
|
||||||
|
"description": "Schedule defines a schedule for something to run.",
|
||||||
|
"properties": {
|
||||||
|
"cron": {
|
||||||
|
"description": "Cron specifies the cron expression for the schedule.",
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"timeZone": {
|
||||||
|
"default": "UTC",
|
||||||
|
"description": "TimeZone specifies the time zone for the cron schedule. Defaults to UTC.",
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"window": {
|
||||||
|
"default": "0s",
|
||||||
|
"description": "Window defines the time window during which the execution is allowed.\nDefaults to 0s, meaning no window is applied.",
|
||||||
|
"pattern": "^([0-9]+(\\.[0-9]+)?(ms|s|m|h))+$",
|
||||||
|
"type": "string"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"required": [
|
||||||
|
"cron"
|
||||||
|
],
|
||||||
|
"type": "object",
|
||||||
|
"additionalProperties": false
|
||||||
|
},
|
||||||
|
"type": "array"
|
||||||
|
},
|
||||||
|
"secretRef": {
|
||||||
|
"description": "SecretRef specifies the Kubernetes Secret containing the credentials\nto access the input provider.\nWhen connecting to a Git provider, the secret must contain the keys\n'username' and 'password', and the password should be a personal access token\nthat grants read-only access to the repository.\nWhen connecting to an OCI provider, the secret must contain a Kubernetes\nImage Pull Secret, as if created by `kubectl create secret docker-registry`.\nWhen connecting to an ExternalService provider, the secret must contain either\na 'token' key for bearer token authentication, or 'username' and 'password'\nkeys for basic authentication.",
|
||||||
|
"properties": {
|
||||||
|
"name": {
|
||||||
|
"description": "Name of the referent.",
|
||||||
|
"type": "string"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"required": [
|
||||||
|
"name"
|
||||||
|
],
|
||||||
|
"type": "object",
|
||||||
|
"additionalProperties": false
|
||||||
|
},
|
||||||
|
"serviceAccountName": {
|
||||||
|
"description": "ServiceAccountName specifies the name of the Kubernetes ServiceAccount\nused for authentication with AWS, Azure or GCP services through\nworkload identity federation features. If not specified, the\nauthentication for these cloud providers will use the ServiceAccount\nof the operator (or any other environment authentication configuration).",
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"skip": {
|
||||||
|
"description": "Skip defines whether we need to skip input provider response updates.",
|
||||||
|
"properties": {
|
||||||
|
"labels": {
|
||||||
|
"description": "Labels specifies list of labels to skip input provider response when any of the label conditions matched.\nWhen prefixed with !, input provider response will be skipped if it does not have this label.",
|
||||||
|
"items": {
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"type": "array"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"type": "object",
|
||||||
|
"additionalProperties": false
|
||||||
|
},
|
||||||
|
"type": {
|
||||||
|
"description": "Type specifies the type of the input provider.",
|
||||||
|
"enum": [
|
||||||
|
"Static",
|
||||||
|
"GitHubBranch",
|
||||||
|
"GitHubTag",
|
||||||
|
"GitHubPullRequest",
|
||||||
|
"GitLabBranch",
|
||||||
|
"GitLabTag",
|
||||||
|
"GitLabMergeRequest",
|
||||||
|
"GitLabEnvironment",
|
||||||
|
"AzureDevOpsBranch",
|
||||||
|
"AzureDevOpsTag",
|
||||||
|
"AzureDevOpsPullRequest",
|
||||||
|
"GiteaBranch",
|
||||||
|
"GiteaTag",
|
||||||
|
"GiteaPullRequest",
|
||||||
|
"OCIArtifactTag",
|
||||||
|
"ACRArtifactTag",
|
||||||
|
"ECRArtifactTag",
|
||||||
|
"GARArtifactTag",
|
||||||
|
"ExternalService"
|
||||||
|
],
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"url": {
|
||||||
|
"description": "URL specifies the HTTP/S or OCI address of the input provider API.\nWhen connecting to a Git provider, the URL should point to the repository address.\nWhen connecting to an OCI provider, the URL should point to the OCI repository address.",
|
||||||
|
"pattern": "^((http|https|oci)://.*){0,1}$",
|
||||||
|
"type": "string"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"required": [
|
||||||
|
"type"
|
||||||
|
],
|
||||||
|
"type": "object",
|
||||||
|
"x-kubernetes-validations": [
|
||||||
|
{
|
||||||
|
"message": "spec.url must be empty when spec.type is 'Static'",
|
||||||
|
"rule": "self.type != 'Static' || !has(self.url)"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"message": "spec.url must not be empty when spec.type is not 'Static'",
|
||||||
|
"rule": "self.type == 'Static' || has(self.url)"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"message": "spec.url must start with 'http://' or 'https://' when spec.type is a Git provider",
|
||||||
|
"rule": "!self.type.startsWith('Git') || self.url.startsWith('http')"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"message": "spec.url must start with 'http://' or 'https://' when spec.type is a Git provider",
|
||||||
|
"rule": "!self.type.startsWith('AzureDevOps') || self.url.startsWith('http')"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"message": "spec.url must start with 'oci://' when spec.type is an OCI provider",
|
||||||
|
"rule": "!self.type.endsWith('ArtifactTag') || self.url.startsWith('oci')"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"message": "spec.url must start with 'http://' or 'https://' when spec.type is 'ExternalService'",
|
||||||
|
"rule": "self.type != 'ExternalService' || self.url.startsWith('http')"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"message": "spec.insecure can only be set when spec.type is 'ExternalService' or 'OCIArtifactTag'",
|
||||||
|
"rule": "!has(self.insecure) || !self.insecure || self.type == 'ExternalService' || self.type == 'OCIArtifactTag'"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"message": "spec.url must use 'https://' unless spec.insecure is true",
|
||||||
|
"rule": "self.type != 'ExternalService' || !self.url.startsWith('http://') || (has(self.insecure) && self.insecure)"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"message": "cannot specify spec.serviceAccountName when spec.type is not one of AzureDevOps* or *ArtifactTag",
|
||||||
|
"rule": "!has(self.serviceAccountName) || self.type.startsWith('AzureDevOps') || self.type.endsWith('ArtifactTag')"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"message": "cannot specify spec.certSecretRef when spec.type is one of Static, AzureDevOps*, ACRArtifactTag, ECRArtifactTag or GARArtifactTag",
|
||||||
|
"rule": "!has(self.certSecretRef) || !(self.url == 'Static' || self.type.startsWith('AzureDevOps') || (self.type.endsWith('ArtifactTag') && self.type != 'OCIArtifactTag'))"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"message": "cannot specify spec.secretRef when spec.type is one of Static, ACRArtifactTag, ECRArtifactTag or GARArtifactTag",
|
||||||
|
"rule": "!has(self.secretRef) || !(self.url == 'Static' || (self.type.endsWith('ArtifactTag') && self.type != 'OCIArtifactTag'))"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"additionalProperties": false
|
||||||
|
},
|
||||||
|
"status": {
|
||||||
|
"description": "ResourceSetInputProviderStatus defines the observed state of ResourceSetInputProvider.",
|
||||||
|
"properties": {
|
||||||
|
"conditions": {
|
||||||
|
"description": "Conditions contains the readiness conditions of the object.",
|
||||||
|
"items": {
|
||||||
|
"description": "Condition contains details for one aspect of the current state of this API Resource.",
|
||||||
|
"properties": {
|
||||||
|
"lastTransitionTime": {
|
||||||
|
"description": "lastTransitionTime is the last time the condition transitioned from one status to another.\nThis should be when the underlying condition changed. If that is not known, then using the time when the API field changed is acceptable.",
|
||||||
|
"format": "date-time",
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"message": {
|
||||||
|
"description": "message is a human readable message indicating details about the transition.\nThis may be an empty string.",
|
||||||
|
"maxLength": 32768,
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"observedGeneration": {
|
||||||
|
"description": "observedGeneration represents the .metadata.generation that the condition was set based upon.\nFor instance, if .metadata.generation is currently 12, but the .status.conditions[x].observedGeneration is 9, the condition is out of date\nwith respect to the current state of the instance.",
|
||||||
|
"format": "int64",
|
||||||
|
"minimum": 0,
|
||||||
|
"type": "integer"
|
||||||
|
},
|
||||||
|
"reason": {
|
||||||
|
"description": "reason contains a programmatic identifier indicating the reason for the condition's last transition.\nProducers of specific condition types may define expected values and meanings for this field,\nand whether the values are considered a guaranteed API.\nThe value should be a CamelCase string.\nThis field may not be empty.",
|
||||||
|
"maxLength": 1024,
|
||||||
|
"minLength": 1,
|
||||||
|
"pattern": "^[A-Za-z]([A-Za-z0-9_,:]*[A-Za-z0-9_])?$",
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"status": {
|
||||||
|
"description": "status of the condition, one of True, False, Unknown.",
|
||||||
|
"enum": [
|
||||||
|
"True",
|
||||||
|
"False",
|
||||||
|
"Unknown"
|
||||||
|
],
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"type": {
|
||||||
|
"description": "type of condition in CamelCase or in foo.example.com/CamelCase.",
|
||||||
|
"maxLength": 316,
|
||||||
|
"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])$",
|
||||||
|
"type": "string"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"required": [
|
||||||
|
"lastTransitionTime",
|
||||||
|
"message",
|
||||||
|
"reason",
|
||||||
|
"status",
|
||||||
|
"type"
|
||||||
|
],
|
||||||
|
"type": "object",
|
||||||
|
"additionalProperties": false
|
||||||
|
},
|
||||||
|
"type": "array"
|
||||||
|
},
|
||||||
|
"exportedInputs": {
|
||||||
|
"description": "ExportedInputs contains the list of inputs exported by the provider.",
|
||||||
|
"items": {
|
||||||
|
"additionalProperties": {
|
||||||
|
"x-kubernetes-preserve-unknown-fields": true
|
||||||
|
},
|
||||||
|
"description": "ResourceSetInput defines the key-value pairs of the ResourceSet input.",
|
||||||
|
"type": "object"
|
||||||
|
},
|
||||||
|
"type": "array"
|
||||||
|
},
|
||||||
|
"lastExportedRevision": {
|
||||||
|
"description": "LastExportedRevision is the digest of the\ninputs that were last reconcile.",
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"lastHandledForceAt": {
|
||||||
|
"description": "LastHandledForceAt holds the value of the most recent\nforce request value, so a change of the annotation value\ncan be detected.",
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"lastHandledReconcileAt": {
|
||||||
|
"description": "LastHandledReconcileAt holds the value of the most recent\nreconcile request value, so a change of the annotation value\ncan be detected.",
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"nextSchedule": {
|
||||||
|
"description": "NextSchedule is the next schedule when the input provider will run.",
|
||||||
|
"properties": {
|
||||||
|
"cron": {
|
||||||
|
"description": "Cron specifies the cron expression for the schedule.",
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"timeZone": {
|
||||||
|
"default": "UTC",
|
||||||
|
"description": "TimeZone specifies the time zone for the cron schedule. Defaults to UTC.",
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"when": {
|
||||||
|
"description": "When is the next time the schedule will run.",
|
||||||
|
"format": "date-time",
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"window": {
|
||||||
|
"default": "0s",
|
||||||
|
"description": "Window defines the time window during which the execution is allowed.\nDefaults to 0s, meaning no window is applied.",
|
||||||
|
"pattern": "^([0-9]+(\\.[0-9]+)?(ms|s|m|h))+$",
|
||||||
|
"type": "string"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"required": [
|
||||||
|
"cron",
|
||||||
|
"when"
|
||||||
|
],
|
||||||
|
"type": "object",
|
||||||
|
"additionalProperties": false
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"type": "object",
|
||||||
|
"additionalProperties": false
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"type": "object"
|
||||||
|
}
|
||||||
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user