From 9ae3940be24258737c4c5c29ca471501da23787c Mon Sep 17 00:00:00 2001 From: Stefan Prodan Date: Fri, 16 Aug 2024 16:04:00 +0300 Subject: [PATCH] operator flux-operator (0.8.0) --- .../flux-operator.clusterserviceversion.yaml | 301 +++++++++++++ ...xinstances.fluxcd.controlplane.io.crd.yaml | 412 ++++++++++++++++++ ...luxreports.fluxcd.controlplane.io.crd.yaml | 257 +++++++++++ .../0.8.0/metadata/annotations.yaml | 18 + .../0.8.0/tests/scorecard/config.yaml | 51 +++ 5 files changed, 1039 insertions(+) create mode 100644 operators/flux-operator/0.8.0/manifests/flux-operator.clusterserviceversion.yaml create mode 100644 operators/flux-operator/0.8.0/manifests/fluxinstances.fluxcd.controlplane.io.crd.yaml create mode 100644 operators/flux-operator/0.8.0/manifests/fluxreports.fluxcd.controlplane.io.crd.yaml create mode 100644 operators/flux-operator/0.8.0/metadata/annotations.yaml create mode 100644 operators/flux-operator/0.8.0/tests/scorecard/config.yaml diff --git a/operators/flux-operator/0.8.0/manifests/flux-operator.clusterserviceversion.yaml b/operators/flux-operator/0.8.0/manifests/flux-operator.clusterserviceversion.yaml new file mode 100644 index 00000000000..b5429774c65 --- /dev/null +++ b/operators/flux-operator/0.8.0/manifests/flux-operator.clusterserviceversion.yaml @@ -0,0 +1,301 @@ +apiVersion: operators.coreos.com/v1alpha1 +kind: ClusterServiceVersion +metadata: + name: flux-operator.v0.8.0 + namespace: placeholder + annotations: + alm-examples: |- + [ + { + "apiVersion": "fluxcd.controlplane.io/v1", + "kind": "FluxInstance", + "metadata": { + "name": "flux", + "namespace": "flux-system", + "annotations": { + "fluxcd.controlplane.io/reconcileEvery": "1h", + "fluxcd.controlplane.io/reconcileTimeout": "5m" + } + }, + "spec": { + "distribution": { + "version": "2.x", + "registry": "ghcr.io/fluxcd" + }, + "components": [ + "source-controller", + "kustomize-controller", + "helm-controller", + "notification-controller", + "image-reflector-controller", + "image-automation-controller" + ], + "cluster": { + "type": "openshift", + "domain": "cluster.local", + "networkPolicy": true, + "multitenant": true, + "tenantDefaultServiceAccount": "flux" + } + } + }, + { + "apiVersion": "fluxcd.controlplane.io/v1", + "kind": "FluxReport", + "metadata": { + "name": "flux", + "namespace": "flux-system" + }, + "spec": { + "distribution": { + "entitlement": "Issued by controlplane", + "managedBy": "flux-operator", + "status": "Installed", + "version": "v2.3.0" + }, + "components": [ + { + "image": "ghcr.io/fluxcd/kustomize-controller:v1.3.0@sha256:48a032574dd45c39750ba0f1488e6f1ae36756a38f40976a6b7a588d83acefc1", + "name": "kustomize-controller", + "ready": true, + "status": "Current Deployment is available. Replicas: 1" + }, + { + "image": "ghcr.io/fluxcd/source-controller:v1.3.0@sha256:161da425b16b64dda4b3cec2ba0f8d7442973aba29bb446db3b340626181a0bc", + "name": "source-controller", + "ready": true, + "status": "Current Deployment is available. Replicas: 1" + } + ], + "reconcilers": [ + { + "apiVersion": "kustomize.toolkit.fluxcd.io/v1", + "kind": "Kustomization", + "stats": { + "failing": 0, + "running": 1, + "suspended": 0 + } + }, + { + "apiVersion": "source.toolkit.fluxcd.io/v1", + "kind": "GitRepository", + "stats": { + "failing": 0, + "running": 1, + "suspended": 0, + "totalSize": "3.7 MiB" + } + } + ], + "sync": { + "ready": true, + "id": "kustomization/flux-system", + "path": "clusters/production", + "source": "https://github.com/my-org/my-fleet.git", + "status": "Applied revision: refs/heads/main@sha1:a90cd1ac35de01c175f7199315d3f4cd60195911" + } + } + } + ] + categories: Integration & Delivery + certified: 'false' + createdAt: '2024-08-16T15:50:22Z' + description: |- + The Flux Operator manages the lifecycle of the CNCF Flux project. + containerImage: ghcr.io/controlplaneio-fluxcd/flux-operator:v0.8.0 + support: Community + capabilities: Deep Insights + repository: https://github.com/controlplaneio-fluxcd/flux-operator + operatorframework.io/suggested-namespace: flux-system +spec: + displayName: Flux Operator + description: |- + [Flux](https://fluxcd.io) is a leading GitOps Continuous Delivery tool + used to streamline and automate application deployments on Kubernetes. + Flux enables teams to achieve a reliable and auditable delivery process + while promoting collaboration and traceability across different environments. + + Flux is powered by the GitOps Toolkit, a set of composable APIs and + specialized tools that enable a wide range of continuous delivery use-cases, + from simple Kubernetes deployment pipelines to multi-tenant and multi-cluster + progressive delivery rollouts. + For more information about the CNCF-graduated Flux project, please see + the [Flux architecture overview](https://fluxcd.control-plane.io/guides/flux-architecture/). + + ### Operator Capabilities + + The [Flux Operator](https://github.com/controlplaneio-fluxcd/flux-operator) provides a + declarative API for the installation, configuration and upgrade of CNCF Flux + and the ControlPlane [enterprise distribution](https://fluxcd.control-plane.io/). + + The operator allows the configuration of Flux multi-tenancy lockdown, network policies, + persistent storage, vertical scaling, custom patches, and the synchronization of the + cluster state from Git repositories, OCI artifacts and S3-compatible storage. + + The Flux Operator supervises the Flux controllers and provides a unified view + of all the Flux resources that define the GitOps workflows for the target cluster. + The operator generates reports, emits events, and exports Prometheus metrics + to help with monitoring and troubleshooting Flux. + + ### OpenShift Support + + The Flux Operator should be installed in a dedicated namespace, e.g. `flux-system`. + + To deploy Flux on OpenShift clusters, create a `FluxInstance` custom resource + named `flux` in the same namespace as the operator + and set the `.spec.cluster.type` field to `openshift`. + + For more information on how to configure the Flux instance, please see the + [Flux Operator documentation](https://fluxcd.control-plane.io/operator/flux-config/). + + maturity: beta + version: 0.8.0 + minKubeVersion: 1.22.0 + keywords: + - flux + - fluxcd + - gitops + - continuous delivery + maintainers: + - name: ControlPlane Flux Team + email: flux-enterprise@control-plane.io + provider: + name: ControlPlane Ltd. + url: https://control-plane.io + labels: + app.kubernetes.io/name: flux-operator + selector: + matchLabels: + app.kubernetes.io/name: flux-operator + links: + - name: 'Source Code' + url: 'https://github.com/controlplaneio-fluxcd/flux-operator' + - name: 'Documentation' + url: 'https://fluxcd.control-plane.io/operator/' + - name: 'Enterprise Support' + url: 'https://fluxcd.control-plane.io/pricing/' + icon: + - base64data: >- + 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 + mediatype: image/png + customresourcedefinitions: + owned: + - name: fluxinstances.fluxcd.controlplane.io + displayName: FluxInstance + kind: FluxInstance + version: v1 + description: Flux Instance + - name: fluxreports.fluxcd.controlplane.io + displayName: FluxReport + kind: FluxReport + version: v1 + description: Flux Report (Autogenerated) + install: + strategy: deployment + spec: + clusterPermissions: + - serviceAccountName: flux-operator + rules: + - apiGroups: + - '*' + resources: + - '*' + verbs: + - '*' + services: + - name: flux-operator + spec: + ports: + - name: http-metrics + port: 8080 + protocol: TCP + targetPort: 8080 + selector: + app.kubernetes.io/name: flux-operator + deployments: + - name: flux-operator + spec: + selector: + matchLabels: + app.kubernetes.io/name: flux-operator + replicas: 1 + template: + metadata: + annotations: + prometheus.io/scrape: "true" + prometheus.io/port: "8080" + prometheus.io/path: "/metrics" + labels: + app.kubernetes.io/name: flux-operator + spec: + serviceAccountName: flux-operator + terminationGracePeriodSeconds: 10 + affinity: + nodeAffinity: + requiredDuringSchedulingIgnoredDuringExecution: + nodeSelectorTerms: + - matchExpressions: + - key: kubernetes.io/os + operator: In + values: + - linux + containers: + - name: manager + image: 'ghcr.io/controlplaneio-fluxcd/flux-operator:v0.8.0' + imagePullPolicy: IfNotPresent + securityContext: + runAsNonRoot: true + readOnlyRootFilesystem: true + allowPrivilegeEscalation: false + capabilities: + drop: + - ALL + seccompProfile: + type: RuntimeDefault + ports: + - containerPort: 8080 + name: http-metrics + protocol: TCP + - containerPort: 8081 + name: http + protocol: TCP + livenessProbe: + httpGet: + path: /healthz + port: 8081 + initialDelaySeconds: 15 + periodSeconds: 20 + readinessProbe: + httpGet: + path: /readyz + port: 8081 + initialDelaySeconds: 5 + periodSeconds: 10 + resources: + limits: + cpu: 1000m + memory: 1Gi + requests: + cpu: 10m + memory: 64Mi + env: + - name: RUNTIME_NAMESPACE + valueFrom: + fieldRef: + fieldPath: metadata.namespace + volumeMounts: + - name: temp + mountPath: /tmp + volumes: + - name: temp + emptyDir: {} + installModes: + - type: OwnNamespace + supported: true + - type: SingleNamespace + supported: false + - type: MultiNamespace + supported: false + - type: AllNamespaces + supported: true diff --git a/operators/flux-operator/0.8.0/manifests/fluxinstances.fluxcd.controlplane.io.crd.yaml b/operators/flux-operator/0.8.0/manifests/fluxinstances.fluxcd.controlplane.io.crd.yaml new file mode 100644 index 00000000000..c134f8ccb5b --- /dev/null +++ b/operators/flux-operator/0.8.0/manifests/fluxinstances.fluxcd.controlplane.io.crd.yaml @@ -0,0 +1,412 @@ +--- +apiVersion: apiextensions.k8s.io/v1 +kind: CustomResourceDefinition +metadata: + annotations: + controller-gen.kubebuilder.io/version: v0.16.1 + name: fluxinstances.fluxcd.controlplane.io +spec: + group: fluxcd.controlplane.io + names: + kind: FluxInstance + listKind: FluxInstanceList + plural: fluxinstances + singular: fluxinstance + scope: Namespaced + versions: + - additionalPrinterColumns: + - jsonPath: .metadata.creationTimestamp + name: Age + type: date + - jsonPath: .status.conditions[?(@.type=="Ready")].status + name: Ready + type: string + - jsonPath: .status.conditions[?(@.type=="Ready")].message + name: Status + type: string + - jsonPath: .status.lastAttemptedRevision + name: Revision + type: string + name: v1 + schema: + openAPIV3Schema: + description: FluxInstance is the Schema for the fluxinstances API + properties: + apiVersion: + description: |- + APIVersion defines the versioned schema of this representation of an object. + Servers should convert recognized schemas to the latest internal value, and + may reject unrecognized values. + More 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. + Servers may infer this from the endpoint the client submits requests to. + Cannot be updated. + In CamelCase. + More 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. + Defaults to 'cluster.local'. + type: string + multitenant: + description: Multitenant enables the multitenancy lockdown. + type: boolean + networkPolicy: + default: true + description: |- + NetworkPolicy restricts network access to the current namespace. + Defaults to true. + type: boolean + tenantDefaultServiceAccount: + description: |- + TenantDefaultServiceAccount is the name of the service account + to use as default when the multitenant lockdown is enabled. + Defaults to the 'default' service account from the tenant namespace. + type: string + type: + default: kubernetes + description: |- + Type specifies the distro of the Kubernetes cluster. + Defaults to 'kubernetes'. + enum: + - kubernetes + - openshift + - aws + - azure + - gcp + type: string + required: + - domain + - networkPolicy + type: object + components: + description: |- + Components is the list of controllers to install. + Defaults to all controllers. + 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 + 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 + the latest Kubernetes manifests for the distribution, + e.g. 'oci://ghcr.io/controlplaneio-fluxcd/flux-operator-manifests:latest'. + pattern: ^oci://.*$ + type: string + imagePullSecret: + description: |- + ImagePullSecret is the name of the Kubernetes secret + to use for pulling images. + type: string + registry: + description: |- + Registry address to pull the distribution images from + e.g. 'ghcr.io/fluxcd'. + type: string + version: + description: Version semver expression e.g. '2.x', '2.3.x'. + type: string + required: + - registry + - version + type: object + kustomize: + description: |- + Kustomize holds a set of patches that can be applied to the + Flux installation, to customize the way Flux operates. + properties: + patches: + description: |- + Strategic merge and JSON patches, defined as inline YAML objects, + capable 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 + be applied to. + properties: + patch: + description: |- + Patch contains an inline StrategicMerge patch or an inline JSON6902 patch with + an 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 + https://kubernetes.io/docs/concepts/overview/working-with-objects/labels/#api + It matches with the resource annotations. + type: string + group: + description: |- + Group is the API group to select resources from. + Together with Version and Kind it is capable of unambiguously identifying and/or selecting resources. + https://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. + Together with Group and Version it is capable of unambiguously + identifying and/or selecting resources. + https://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 + https://kubernetes.io/docs/concepts/overview/working-with-objects/labels/#api + It 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. + Together with Group and Kind it is capable of unambiguously identifying and/or selecting resources. + https://github.com/kubernetes/community/blob/master/contributors/design-proposals/api-machinery/api-group.md + type: string + type: object + required: + - patch + type: object + type: array + type: object + storage: + description: |- + Storage holds the specification of the source-controller + persistent 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 + sync: + description: |- + Sync specifies the source for the cluster sync operation. + When set, a Flux source (GitRepository, OCIRepository or Bucket) + and Flux Kustomization are created to sync the cluster state + with 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 + path: + description: |- + Path is the path to the source directory containing + the kustomize overlay or plain Kubernetes manifests. + type: string + pullSecret: + description: |- + PullSecret specifies the Kubernetes Secret containing the + authentication credentials for the source. + For Git over HTTP/S sources, the secret must contain username and password fields. + For Git over SSH sources, the secret must contain known_hosts and identity fields. + For OCI sources, the secret must be of type kubernetes.io/dockerconfigjson. + For 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', + an 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, + an OCI repository address or a Bucket endpoint. + type: string + required: + - kind + - path + - ref + - url + type: object + wait: + default: true + description: |- + Wait instructs the controller to check the health of all the reconciled + resources. Defaults to true. + type: boolean + required: + - distribution + - wait + type: object + 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 + 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. + This 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. + This may be an empty string. + maxLength: 32768 + type: string + observedGeneration: + description: |- + observedGeneration represents the .metadata.generation that the condition was set based upon. + For instance, if .metadata.generation is currently 12, but the .status.conditions[x].observedGeneration is 9, the condition is out of date + with 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. + Producers of specific condition types may define expected values and meanings for this field, + and whether the values are considered a guaranteed API. + The value should be a CamelCase string. + This 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 + type: array + inventory: + description: |- + Inventory contains a list of Kubernetes resource object references + last 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, + in the format '___'. + type: string + v: + description: Version is the API version of the Kubernetes + resource object's kind. + type: string + required: + - id + - v + type: object + type: array + required: + - entries + type: object + lastAppliedRevision: + description: |- + LastAppliedRevision is the version and digest of the + distribution config that was last reconcile. + type: string + lastAttemptedRevision: + description: |- + LastAttemptedRevision is the version and digest of the + distribution config that was last attempted to reconcile. + type: string + lastHandledReconcileAt: + description: |- + LastHandledReconcileAt holds the value of the most recent + reconcile request value, so a change of the annotation value + can be detected. + type: string + type: object + type: object + served: true + storage: true + subresources: + status: {} diff --git a/operators/flux-operator/0.8.0/manifests/fluxreports.fluxcd.controlplane.io.crd.yaml b/operators/flux-operator/0.8.0/manifests/fluxreports.fluxcd.controlplane.io.crd.yaml new file mode 100644 index 00000000000..794836b421b --- /dev/null +++ b/operators/flux-operator/0.8.0/manifests/fluxreports.fluxcd.controlplane.io.crd.yaml @@ -0,0 +1,257 @@ +--- +apiVersion: apiextensions.k8s.io/v1 +kind: CustomResourceDefinition +metadata: + annotations: + controller-gen.kubebuilder.io/version: v0.16.1 + name: fluxreports.fluxcd.controlplane.io +spec: + group: fluxcd.controlplane.io + names: + kind: FluxReport + listKind: FluxReportList + plural: fluxreports + singular: fluxreport + scope: Namespaced + versions: + - additionalPrinterColumns: + - jsonPath: .spec.distribution.entitlement + name: Entitlement + priority: 10 + type: string + - jsonPath: .metadata.creationTimestamp + name: Age + type: date + - jsonPath: .status.conditions[?(@.type=="Ready")].status + name: Ready + type: string + - jsonPath: .status.conditions[?(@.type=="Ready")].message + name: Status + type: string + - jsonPath: .status.conditions[?(@.type=="Ready")].lastTransitionTime + name: LastUpdated + type: string + name: v1 + schema: + openAPIV3Schema: + description: FluxReport is the Schema for the fluxreports API. + properties: + apiVersion: + description: |- + APIVersion defines the versioned schema of this representation of an object. + Servers should convert recognized schemas to the latest internal value, and + may reject unrecognized values. + More 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. + Servers may infer this from the endpoint the client submits requests to. + Cannot be updated. + In CamelCase. + More 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: + 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 + about the Flux component observed state. + type: string + required: + - image + - name + - ready + - status + type: object + 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 + about the distribution observed state. + type: string + version: + description: Version is the version of the Flux instance. + type: string + required: + - entitlement + - status + type: object + reconcilers: + description: |- + ReconcilersStatus is the list of Flux reconcilers and + their 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 + resources in the Failing state. + type: integer + running: + description: |- + Running is the number of reconciled + resources in the Running state. + type: integer + suspended: + description: |- + Suspended is the number of reconciled + resources 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 + required: + - apiVersion + - kind + type: object + type: array + sync: + description: |- + SyncStatus is the status of the cluster sync + Source 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 + about the sync observed state. + type: string + required: + - id + - ready + - status + type: object + required: + - distribution + type: object + 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. + This 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. + This may be an empty string. + maxLength: 32768 + type: string + observedGeneration: + description: |- + observedGeneration represents the .metadata.generation that the condition was set based upon. + For instance, if .metadata.generation is currently 12, but the .status.conditions[x].observedGeneration is 9, the condition is out of date + with 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. + Producers of specific condition types may define expected values and meanings for this field, + and whether the values are considered a guaranteed API. + The value should be a CamelCase string. + This 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 + type: array + lastHandledReconcileAt: + description: |- + LastHandledReconcileAt holds the value of the most recent + reconcile request value, so a change of the annotation value + can be detected. + type: string + type: object + type: object + served: true + storage: true + subresources: + status: {} diff --git a/operators/flux-operator/0.8.0/metadata/annotations.yaml b/operators/flux-operator/0.8.0/metadata/annotations.yaml new file mode 100644 index 00000000000..91ddbb715d2 --- /dev/null +++ b/operators/flux-operator/0.8.0/metadata/annotations.yaml @@ -0,0 +1,18 @@ +annotations: + # Core bundle annotations. + operators.operatorframework.io.bundle.channels.v1: stable + operators.operatorframework.io.bundle.channel.default.v1: stable + operators.operatorframework.io.bundle.manifests.v1: manifests/ + operators.operatorframework.io.bundle.mediatype.v1: registry+v1 + operators.operatorframework.io.bundle.metadata.v1: metadata/ + operators.operatorframework.io.bundle.package.v1: flux-operator + operators.operatorframework.io.metrics.builder: operator-sdk-v1.29.0 + operators.operatorframework.io.metrics.mediatype.v1: metrics+v1 + operators.operatorframework.io.metrics.project_layout: go.kubebuilder.io/v4 + + # Annotations for testing. + operators.operatorframework.io.test.mediatype.v1: scorecard+v1 + operators.operatorframework.io.test.config.v1: tests/scorecard/ + + # OpenShift specific annotations + com.redhat.openshift.versions: "v4.12-v4.15" diff --git a/operators/flux-operator/0.8.0/tests/scorecard/config.yaml b/operators/flux-operator/0.8.0/tests/scorecard/config.yaml new file mode 100644 index 00000000000..feda39c3457 --- /dev/null +++ b/operators/flux-operator/0.8.0/tests/scorecard/config.yaml @@ -0,0 +1,51 @@ +# see https://sdk.operatorframework.io/docs/testing-operators/scorecard/ for more information +apiVersion: scorecard.operatorframework.io/v1alpha3 +kind: Configuration +metadata: + name: config +stages: + - parallel: true + tests: + - entrypoint: + - scorecard-test + - basic-check-spec + image: quay.io/operator-framework/scorecard-test:v1.27.0 + labels: + suite: basic + test: basic-check-spec-test + storage: + spec: + mountPath: {} + - entrypoint: + - scorecard-test + - olm-bundle-validation + image: quay.io/operator-framework/scorecard-test:v1.27.0 + labels: + suite: olm + test: olm-bundle-validation-test + storage: + spec: + mountPath: {} + - entrypoint: + - scorecard-test + - olm-crds-have-validation + image: quay.io/operator-framework/scorecard-test:v1.27.0 + labels: + suite: olm + test: olm-crds-have-validation-test + storage: + spec: + mountPath: {} + - entrypoint: + - scorecard-test + - olm-crds-have-validation + image: quay.io/operator-framework/scorecard-test:v1.7.1 + labels: + suite: olm + test: olm-crds-have-validation-test + storage: + spec: + mountPath: {} +storage: + spec: + mountPath: {}