From 4184322296ad4d5d21d1ff36ec741608350aefe1 Mon Sep 17 00:00:00 2001 From: Daniel-Echeverry Date: Mon, 21 Jul 2025 09:35:11 -0500 Subject: [PATCH 1/3] new file: packs/crossplane-1.20.0/README.md new file: packs/crossplane-1.20.0/charts/crossplane-1.20.0.tgz new file: packs/crossplane-1.20.0/charts/crossplane/.helmignore new file: packs/crossplane-1.20.0/charts/crossplane/Chart.yaml new file: packs/crossplane-1.20.0/charts/crossplane/LICENSE new file: packs/crossplane-1.20.0/charts/crossplane/README.md new file: packs/crossplane-1.20.0/charts/crossplane/README.md.gotmpl new file: packs/crossplane-1.20.0/charts/crossplane/templates/NOTES.txt new file: packs/crossplane-1.20.0/charts/crossplane/templates/_helpers.tpl new file: packs/crossplane-1.20.0/charts/crossplane/templates/clusterrole.yaml new file: packs/crossplane-1.20.0/charts/crossplane/templates/clusterrolebinding.yaml new file: packs/crossplane-1.20.0/charts/crossplane/templates/deployment.yaml new file: packs/crossplane-1.20.0/charts/crossplane/templates/extra-objects.yaml new file: packs/crossplane-1.20.0/charts/crossplane/templates/rbac-manager-allowed-provider-permissions.yaml new file: packs/crossplane-1.20.0/charts/crossplane/templates/rbac-manager-clusterrole.yaml new file: packs/crossplane-1.20.0/charts/crossplane/templates/rbac-manager-clusterrolebinding.yaml new file: packs/crossplane-1.20.0/charts/crossplane/templates/rbac-manager-deployment.yaml new file: packs/crossplane-1.20.0/charts/crossplane/templates/rbac-manager-managed-clusterroles.yaml new file: packs/crossplane-1.20.0/charts/crossplane/templates/rbac-manager-serviceaccount.yaml new file: packs/crossplane-1.20.0/charts/crossplane/templates/secret.yaml new file: packs/crossplane-1.20.0/charts/crossplane/templates/service.yaml new file: packs/crossplane-1.20.0/charts/crossplane/templates/serviceaccount.yaml new file: packs/crossplane-1.20.0/charts/crossplane/values.yaml new file: packs/crossplane-1.20.0/logo.png new file: packs/crossplane-1.20.0/pack.json new file: packs/crossplane-1.20.0/presets.yaml new file: packs/crossplane-1.20.0/values.yaml --- packs/crossplane-1.20.0/README.md | 37 +++ .../charts/crossplane-1.20.0.tgz | Bin 0 -> 14420 bytes .../charts/crossplane/.helmignore | 24 ++ .../charts/crossplane/Chart.yaml | 35 +++ .../charts/crossplane/LICENSE | 201 +++++++++++++ .../charts/crossplane/README.md | 180 +++++++++++ .../charts/crossplane/README.md.gotmpl | 112 +++++++ .../charts/crossplane/templates/NOTES.txt | 8 + .../charts/crossplane/templates/_helpers.tpl | 43 +++ .../crossplane/templates/clusterrole.yaml | 107 +++++++ .../templates/clusterrolebinding.yaml | 19 ++ .../crossplane/templates/deployment.yaml | 284 ++++++++++++++++++ .../crossplane/templates/extra-objects.yaml | 4 + ...-manager-allowed-provider-permissions.yaml | 14 + .../templates/rbac-manager-clusterrole.yaml | 135 +++++++++ .../rbac-manager-clusterrolebinding.yaml | 17 ++ .../templates/rbac-manager-deployment.yaml | 133 ++++++++ .../rbac-manager-managed-clusterroles.yaml | 203 +++++++++++++ .../rbac-manager-serviceaccount.yaml | 16 + .../charts/crossplane/templates/secret.yaml | 43 +++ .../charts/crossplane/templates/service.yaml | 25 ++ .../crossplane/templates/serviceaccount.yaml | 19 ++ .../charts/crossplane/values.yaml | 217 +++++++++++++ packs/crossplane-1.20.0/logo.png | Bin 0 -> 91169 bytes packs/crossplane-1.20.0/pack.json | 42 +++ packs/crossplane-1.20.0/presets.yaml | 11 + packs/crossplane-1.20.0/values.yaml | 228 ++++++++++++++ 27 files changed, 2157 insertions(+) create mode 100644 packs/crossplane-1.20.0/README.md create mode 100644 packs/crossplane-1.20.0/charts/crossplane-1.20.0.tgz create mode 100644 packs/crossplane-1.20.0/charts/crossplane/.helmignore create mode 100644 packs/crossplane-1.20.0/charts/crossplane/Chart.yaml create mode 100644 packs/crossplane-1.20.0/charts/crossplane/LICENSE create mode 100644 packs/crossplane-1.20.0/charts/crossplane/README.md create mode 100644 packs/crossplane-1.20.0/charts/crossplane/README.md.gotmpl create mode 100644 packs/crossplane-1.20.0/charts/crossplane/templates/NOTES.txt create mode 100644 packs/crossplane-1.20.0/charts/crossplane/templates/_helpers.tpl create mode 100644 packs/crossplane-1.20.0/charts/crossplane/templates/clusterrole.yaml create mode 100644 packs/crossplane-1.20.0/charts/crossplane/templates/clusterrolebinding.yaml create mode 100644 packs/crossplane-1.20.0/charts/crossplane/templates/deployment.yaml create mode 100644 packs/crossplane-1.20.0/charts/crossplane/templates/extra-objects.yaml create mode 100644 packs/crossplane-1.20.0/charts/crossplane/templates/rbac-manager-allowed-provider-permissions.yaml create mode 100644 packs/crossplane-1.20.0/charts/crossplane/templates/rbac-manager-clusterrole.yaml create mode 100644 packs/crossplane-1.20.0/charts/crossplane/templates/rbac-manager-clusterrolebinding.yaml create mode 100644 packs/crossplane-1.20.0/charts/crossplane/templates/rbac-manager-deployment.yaml create mode 100644 packs/crossplane-1.20.0/charts/crossplane/templates/rbac-manager-managed-clusterroles.yaml create mode 100644 packs/crossplane-1.20.0/charts/crossplane/templates/rbac-manager-serviceaccount.yaml create mode 100644 packs/crossplane-1.20.0/charts/crossplane/templates/secret.yaml create mode 100644 packs/crossplane-1.20.0/charts/crossplane/templates/service.yaml create mode 100644 packs/crossplane-1.20.0/charts/crossplane/templates/serviceaccount.yaml create mode 100644 packs/crossplane-1.20.0/charts/crossplane/values.yaml create mode 100644 packs/crossplane-1.20.0/logo.png create mode 100644 packs/crossplane-1.20.0/pack.json create mode 100644 packs/crossplane-1.20.0/presets.yaml create mode 100644 packs/crossplane-1.20.0/values.yaml diff --git a/packs/crossplane-1.20.0/README.md b/packs/crossplane-1.20.0/README.md new file mode 100644 index 00000000..0c5d3648 --- /dev/null +++ b/packs/crossplane-1.20.0/README.md @@ -0,0 +1,37 @@ +# Crossplane + +Crossplane is an open source Kubernetes extension that transforms your Kubernetes cluster into a universal control plane. + +Crossplane lets you manage anything, anywhere, all through standard Kubernetes APIs. Crossplane can even let you order a pizza directly from Kubernetes. If it has an API, Crossplane can connect to it. + +With Crossplane, platform teams can create new abstractions and custom APIs with the full power of Kubernetes policies, namespaces, role based access controls and more. Crossplane brings all your non-Kubernetes resources under one roof. + +Custom APIs, created by platform teams, allow security and compliance enforcement across resources or clouds, without exposing any complexity to the developers. A single API call can create multiple resources, in multiple clouds and use Kubernetes as the control plane for everything. + +## Prerequisites + +Kubernetes >= 1.27.0 + +## Usage + +Installing a provider creates new Kubernetes resources representing the Provider’s APIs. Installing a provider also creates a Provider pod that’s responsible for reconciling the Provider’s APIs into the Kubernetes cluster. Providers constantly watch the state of the desired managed resources and create any external resources that are missing. + +Install a Provider with a Crossplane Provider object setting the spec.package value to the location of the provider package. Additional providers can be found in the [Upboud Marketplace](https://marketplace.upbound.io/) + +*For Example* +Install the [Palette Provider](https://marketplace.upbound.io/providers/crossplane-contrib/provider-palette/v0.19.2) + +```yaml +apiVersion: pkg.crossplane.io/v1 +kind: Provider +metadata: + name: provider-palette +spec: + package: xpkg.upbound.io/crossplane-contrib/provider-palette:v0.23.5 +``` + +## References + +Crossplane Provider Guide - +Crossplane Concepts - +Upbound Marketplace - diff --git a/packs/crossplane-1.20.0/charts/crossplane-1.20.0.tgz b/packs/crossplane-1.20.0/charts/crossplane-1.20.0.tgz new file mode 100644 index 0000000000000000000000000000000000000000..94d88f766ac9f41ccc5464080644ca3aff25522f GIT binary patch literal 14420 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 aKR%Do +``` + +## Uninstalling the Chart + +To uninstall/delete the `crossplane` deployment: + +```console +helm delete crossplane --namespace crossplane-system +``` + +That command removes all Kubernetes components associated with Crossplane, +including all the custom resources and controllers. + +## Configuration + +The following tables lists the configurable parameters of the Crossplane chart +and their default values. + +| Parameter | Description | Default | +| --- | --- | --- | +| `affinity` | Add `affinities` to the Crossplane pod deployment. | `{}` | +| `args` | Add custom arguments to the Crossplane pod. | `[]` | +| `configuration.packages` | A list of Configuration packages to install. | `[]` | +| `customAnnotations` | Add custom `annotations` to the Crossplane pod deployment. | `{}` | +| `customLabels` | Add custom `labels` to the Crossplane pod deployment. | `{}` | +| `deploymentStrategy` | The deployment strategy for the Crossplane and RBAC Manager pods. | `"RollingUpdate"` | +| `dnsPolicy` | Specify the `dnsPolicy` to be used by the Crossplane pod. | `""` | +| `extraEnvVarsCrossplane` | Add custom environmental variables to the Crossplane pod deployment. Replaces any `.` in a variable name with `_`. For example, `SAMPLE.KEY=value1` becomes `SAMPLE_KEY=value1`. | `{}` | +| `extraEnvVarsRBACManager` | Add custom environmental variables to the RBAC Manager pod deployment. Replaces any `.` in a variable name with `_`. For example, `SAMPLE.KEY=value1` becomes `SAMPLE_KEY=value1`. | `{}` | +| `extraObjects` | To add arbitrary Kubernetes Objects during a Helm Install | `[]` | +| `extraVolumeMountsCrossplane` | Add custom `volumeMounts` to the Crossplane pod. | `{}` | +| `extraVolumesCrossplane` | Add custom `volumes` to the Crossplane pod. | `{}` | +| `function.packages` | A list of Function packages to install | `[]` | +| `functionCache.medium` | Set to `Memory` to hold the function cache in a RAM backed file system. Useful for Crossplane development. | `""` | +| `functionCache.pvc` | The name of a PersistentVolumeClaim to use as the function cache. Disables the default function cache `emptyDir` Volume. | `""` | +| `functionCache.sizeLimit` | The size limit for the function cache. If medium is `Memory` the `sizeLimit` can't exceed Node memory. | `"512Mi"` | +| `hostNetwork` | Enable `hostNetwork` for the Crossplane deployment. Caution: enabling `hostNetwork` grants the Crossplane Pod access to the host network namespace. Consider setting `dnsPolicy` to `ClusterFirstWithHostNet`. | `false` | +| `image.pullPolicy` | The image pull policy used for Crossplane and RBAC Manager pods. | `"IfNotPresent"` | +| `image.repository` | Repository for the Crossplane pod image. | `"xpkg.crossplane.io/crossplane/crossplane"` | +| `image.tag` | The Crossplane image tag. Defaults to the value of `appVersion` in `Chart.yaml`. | `""` | +| `imagePullSecrets` | The imagePullSecret names to add to the Crossplane ServiceAccount. | `[]` | +| `leaderElection` | Enable [leader election](https://docs.crossplane.io/latest/concepts/pods/#leader-election) for the Crossplane pod. | `true` | +| `metrics.enabled` | Enable Prometheus path, port and scrape annotations and expose port 8080 for both the Crossplane and RBAC Manager pods. | `false` | +| `metrics.port` | The port the metrics server listens on. | `""` | +| `nodeSelector` | Add `nodeSelectors` to the Crossplane pod deployment. | `{}` | +| `packageCache.configMap` | The name of a ConfigMap to use as the package cache. Disables the default package cache `emptyDir` Volume. | `""` | +| `packageCache.medium` | Set to `Memory` to hold the package cache in a RAM backed file system. Useful for Crossplane development. | `""` | +| `packageCache.pvc` | The name of a PersistentVolumeClaim to use as the package cache. Disables the default package cache `emptyDir` Volume. | `""` | +| `packageCache.sizeLimit` | The size limit for the package cache. If medium is `Memory` the `sizeLimit` can't exceed Node memory. | `"20Mi"` | +| `podSecurityContextCrossplane` | Add a custom `securityContext` to the Crossplane pod. | `{}` | +| `podSecurityContextRBACManager` | Add a custom `securityContext` to the RBAC Manager pod. | `{}` | +| `priorityClassName` | The PriorityClass name to apply to the Crossplane and RBAC Manager pods. | `""` | +| `provider.packages` | A list of Provider packages to install. | `[]` | +| `rbacManager.affinity` | Add `affinities` to the RBAC Manager pod deployment. | `{}` | +| `rbacManager.args` | Add custom arguments to the RBAC Manager pod. | `[]` | +| `rbacManager.deploy` | Deploy the RBAC Manager pod and its required roles. | `true` | +| `rbacManager.leaderElection` | Enable [leader election](https://docs.crossplane.io/latest/concepts/pods/#leader-election) for the RBAC Manager pod. | `true` | +| `rbacManager.nodeSelector` | Add `nodeSelectors` to the RBAC Manager pod deployment. | `{}` | +| `rbacManager.replicas` | The number of RBAC Manager pod `replicas` to deploy. | `1` | +| `rbacManager.revisionHistoryLimit` | The number of RBAC Manager ReplicaSets to retain. | `nil` | +| `rbacManager.skipAggregatedClusterRoles` | Don't install aggregated Crossplane ClusterRoles. | `false` | +| `rbacManager.tolerations` | Add `tolerations` to the RBAC Manager pod deployment. | `[]` | +| `rbacManager.topologySpreadConstraints` | Add `topologySpreadConstraints` to the RBAC Manager pod deployment. | `[]` | +| `readiness.port` | The port the readyz server listens on. | `""` | +| `registryCaBundleConfig.key` | The ConfigMap key containing a custom CA bundle to enable fetching packages from registries with unknown or untrusted certificates. | `""` | +| `registryCaBundleConfig.name` | The ConfigMap name containing a custom CA bundle to enable fetching packages from registries with unknown or untrusted certificates. | `""` | +| `replicas` | The number of Crossplane pod `replicas` to deploy. | `1` | +| `resourcesCrossplane.limits.cpu` | CPU resource limits for the Crossplane pod. | `"500m"` | +| `resourcesCrossplane.limits.memory` | Memory resource limits for the Crossplane pod. | `"1024Mi"` | +| `resourcesCrossplane.requests.cpu` | CPU resource requests for the Crossplane pod. | `"100m"` | +| `resourcesCrossplane.requests.memory` | Memory resource requests for the Crossplane pod. | `"256Mi"` | +| `resourcesRBACManager.limits.cpu` | CPU resource limits for the RBAC Manager pod. | `"100m"` | +| `resourcesRBACManager.limits.memory` | Memory resource limits for the RBAC Manager pod. | `"512Mi"` | +| `resourcesRBACManager.requests.cpu` | CPU resource requests for the RBAC Manager pod. | `"100m"` | +| `resourcesRBACManager.requests.memory` | Memory resource requests for the RBAC Manager pod. | `"256Mi"` | +| `revisionHistoryLimit` | The number of Crossplane ReplicaSets to retain. | `nil` | +| `runtimeClassName` | The runtimeClassName name to apply to the Crossplane and RBAC Manager pods. | `""` | +| `securityContextCrossplane.allowPrivilegeEscalation` | Enable `allowPrivilegeEscalation` for the Crossplane pod. | `false` | +| `securityContextCrossplane.readOnlyRootFilesystem` | Set the Crossplane pod root file system as read-only. | `true` | +| `securityContextCrossplane.runAsGroup` | The group ID used by the Crossplane pod. | `65532` | +| `securityContextCrossplane.runAsUser` | The user ID used by the Crossplane pod. | `65532` | +| `securityContextRBACManager.allowPrivilegeEscalation` | Enable `allowPrivilegeEscalation` for the RBAC Manager pod. | `false` | +| `securityContextRBACManager.readOnlyRootFilesystem` | Set the RBAC Manager pod root file system as read-only. | `true` | +| `securityContextRBACManager.runAsGroup` | The group ID used by the RBAC Manager pod. | `65532` | +| `securityContextRBACManager.runAsUser` | The user ID used by the RBAC Manager pod. | `65532` | +| `service.customAnnotations` | Configure annotations on the service object. Only enabled when webhooks.enabled = true | `{}` | +| `serviceAccount.create` | Specifies whether Crossplane ServiceAccount should be created | `true` | +| `serviceAccount.customAnnotations` | Add custom `annotations` to the Crossplane ServiceAccount. | `{}` | +| `serviceAccount.name` | Provide the name of an already created Crossplane ServiceAccount. Required when `serviceAccount.create` is `false` | `""` | +| `tolerations` | Add `tolerations` to the Crossplane pod deployment. | `[]` | +| `topologySpreadConstraints` | Add `topologySpreadConstraints` to the Crossplane pod deployment. | `[]` | +| `webhooks.enabled` | Enable webhooks for Crossplane and installed Provider packages. | `true` | +| `webhooks.port` | The port the webhook server listens on. | `""` | + +### Command Line + +You can pass the settings with helm command line parameters. Specify each +parameter using the `--set key=value[,key=value]` argument to `helm install`. +For example, the following command will install Crossplane with an image pull +policy of `IfNotPresent`. + +```console +helm install --namespace crossplane-system crossplane-stable/crossplane --set image.pullPolicy=IfNotPresent +``` + +### Settings File + +Alternatively, a yaml file that specifies the values for the above parameters +(`values.yaml`) can be provided while installing the chart. + +```console +helm install crossplane --namespace crossplane-system crossplane-stable/crossplane -f values.yaml +``` + +Here are the sample settings to get you started. + +```yaml +replicas: 1 + +deploymentStrategy: RollingUpdate + +image: + repository: xpkg.crossplane.io/crossplane/crossplane + tag: alpha + pullPolicy: Always +``` + + + +[Kubernetes cluster]: https://kubernetes.io/docs/setup/ +[Minikube]: https://kubernetes.io/docs/tasks/tools/install-minikube/ +[Helm]: https://docs.helm.sh/using_helm/ + diff --git a/packs/crossplane-1.20.0/charts/crossplane/README.md.gotmpl b/packs/crossplane-1.20.0/charts/crossplane/README.md.gotmpl new file mode 100644 index 00000000..bc6f2b18 --- /dev/null +++ b/packs/crossplane-1.20.0/charts/crossplane/README.md.gotmpl @@ -0,0 +1,112 @@ + +Crossplane can be easily installed into any existing Kubernetes cluster using +the regularly published Helm chart. The Helm chart contains all the custom +resources and controllers needed to deploy and configure Crossplane. + +## Pre-requisites + +* [Kubernetes cluster], minimum version `v1.16.0+` +* [Helm], minimum version `v3.0.0+`. + +## Installation + +Helm charts for Crossplane are currently published to the `stable` and `master` +channels. + +### Stable + +The stable channel is the most recent release of Crossplane that is considered +ready for the community. + +```console +kubectl create namespace crossplane-system + +helm repo add crossplane-stable https://charts.crossplane.io/stable +helm repo update + +helm install crossplane --namespace crossplane-system crossplane-stable/crossplane +``` + +### Master + +The `master` channel contains the latest commits, with all automated tests +passing. `master` is subject to instability, incompatibility, and features may +be added or removed without much prior notice. It is recommended to use one of +the more stable channels, but if you want the absolute newest Crossplane +installed, then you can use the `master` channel. + +To install the Helm chart from master, you will need to pass the specific +version returned by the `search` command: + +```console +kubectl create namespace crossplane-system +helm repo add crossplane-master https://charts.crossplane.io/master/ +helm repo update +helm search repo crossplane-master --devel + +helm install crossplane --namespace crossplane-system crossplane-master/crossplane --devel --version +``` + +## Uninstalling the Chart + +To uninstall/delete the `crossplane` deployment: + +```console +helm delete crossplane --namespace crossplane-system +``` + +That command removes all Kubernetes components associated with Crossplane, +including all the custom resources and controllers. + +## Configuration + +The following tables lists the configurable parameters of the Crossplane chart +and their default values. + +{{ template "chart.valuesTable" . }} + +### Command Line + +You can pass the settings with helm command line parameters. Specify each +parameter using the `--set key=value[,key=value]` argument to `helm install`. +For example, the following command will install Crossplane with an image pull +policy of `IfNotPresent`. + +```console +helm install --namespace crossplane-system crossplane-stable/crossplane --set image.pullPolicy=IfNotPresent +``` + +### Settings File + +Alternatively, a yaml file that specifies the values for the above parameters +(`values.yaml`) can be provided while installing the chart. + +```console +helm install crossplane --namespace crossplane-system crossplane-stable/crossplane -f values.yaml +``` + +Here are the sample settings to get you started. + +```yaml +replicas: 1 + +deploymentStrategy: RollingUpdate + +image: + repository: xpkg.crossplane.io/crossplane/crossplane + tag: alpha + pullPolicy: Always +``` + + + +[Kubernetes cluster]: https://kubernetes.io/docs/setup/ +[Minikube]: https://kubernetes.io/docs/tasks/tools/install-minikube/ +[Helm]: https://docs.helm.sh/using_helm/ +{{ define "chart.valuesTable" }} +| Parameter | Description | Default | +| --- | --- | --- | + {{- range .Values }} +| `{{ .Key }}` | {{ if .Description }}{{ .Description }}{{ else }}{{ .AutoDescription }}{{ end }} | {{ if .Default }}{{ .Default }}{{ else }}{{ .AutoDefault }}{{ end }} | + {{- end }} +{{ end }} diff --git a/packs/crossplane-1.20.0/charts/crossplane/templates/NOTES.txt b/packs/crossplane-1.20.0/charts/crossplane/templates/NOTES.txt new file mode 100644 index 00000000..f1c8a0c6 --- /dev/null +++ b/packs/crossplane-1.20.0/charts/crossplane/templates/NOTES.txt @@ -0,0 +1,8 @@ +Release: {{.Release.Name}} + +Chart Name: {{.Chart.Name}} +Chart Description: {{.Chart.Description}} +Chart Version: {{.Chart.Version}} +Chart Application Version: {{.Chart.AppVersion}} + +Kube Version: {{.Capabilities.KubeVersion}} diff --git a/packs/crossplane-1.20.0/charts/crossplane/templates/_helpers.tpl b/packs/crossplane-1.20.0/charts/crossplane/templates/_helpers.tpl new file mode 100644 index 00000000..ef1c0d4a --- /dev/null +++ b/packs/crossplane-1.20.0/charts/crossplane/templates/_helpers.tpl @@ -0,0 +1,43 @@ +{{/* vim: set filetype=mustache: */}} +{{/* +Expand the name of the chart. +*/}} +{{- define "crossplane.name" -}} +{{- default .Chart.Name .Values.nameOverride | trunc 63 | trimSuffix "-" -}} +{{- end -}} + +{{/* +Create chart name and version as used by the chart label. +*/}} +{{- define "crossplane.chart" -}} +{{- printf "%s-%s" .Chart.Name .Chart.Version | replace "+" "_" | trunc 63 | trimSuffix "-" -}} +{{- end -}} + +{{/* +Generate basic labels +*/}} +{{- define "crossplane.labels" }} +helm.sh/chart: {{ include "crossplane.chart" . }} +app.kubernetes.io/managed-by: {{ .Release.Service }} +app.kubernetes.io/component: cloud-infrastructure-controller +app.kubernetes.io/part-of: {{ template "crossplane.name" . }} +app.kubernetes.io/name: {{ include "crossplane.name" . }} +app.kubernetes.io/instance: {{ .Release.Name }} +{{- if .Chart.AppVersion }} +app.kubernetes.io/version: {{ .Chart.AppVersion | quote }} +{{- end }} +{{- if .Values.customLabels }} +{{ toYaml .Values.customLabels }} +{{- end }} +{{- end }} + +{{/* +Define ExternalSecretStoreEnabled Feature Flag +*/}} +{{- define "crossplane.externalSecretStoresEnabled" -}} +{{- if has "--enable-external-secret-stores" .Values.args -}} +true +{{- else -}} +false +{{- end -}} +{{- end -}} diff --git a/packs/crossplane-1.20.0/charts/crossplane/templates/clusterrole.yaml b/packs/crossplane-1.20.0/charts/crossplane/templates/clusterrole.yaml new file mode 100644 index 00000000..5559ae3b --- /dev/null +++ b/packs/crossplane-1.20.0/charts/crossplane/templates/clusterrole.yaml @@ -0,0 +1,107 @@ +apiVersion: rbac.authorization.k8s.io/v1 +kind: ClusterRole +metadata: + name: {{ template "crossplane.name" . }} + labels: + app: {{ template "crossplane.name" . }} + {{- include "crossplane.labels" . | indent 4 }} +{{- if .Values.rbacManager.deploy }} +aggregationRule: + clusterRoleSelectors: + - matchLabels: + rbac.crossplane.io/aggregate-to-crossplane: "true" +--- +apiVersion: rbac.authorization.k8s.io/v1 +kind: ClusterRole +metadata: + name: {{ template "crossplane.name" . }}:system:aggregate-to-crossplane + labels: + app: {{ template "crossplane.name" . }} + {{- include "crossplane.labels" . | indent 4 }} + crossplane.io/scope: "system" + rbac.crossplane.io/aggregate-to-crossplane: "true" +{{- end }} +rules: +- apiGroups: + - "" + resources: + - events + verbs: + - create + - update + - patch + - delete +- apiGroups: + - apiextensions.k8s.io + resources: + - customresourcedefinitions + - customresourcedefinitions/status + verbs: + - "*" +- apiGroups: + - "" + resources: + - secrets + verbs: + - get + - list + - watch + - create + - update + - patch + - delete +- apiGroups: + - "" + resources: + - serviceaccounts + - services + verbs: + - "*" +- apiGroups: + - apiextensions.crossplane.io + - pkg.crossplane.io + - secrets.crossplane.io + resources: + - "*" + verbs: + - "*" +- apiGroups: + - extensions + - apps + resources: + - deployments + verbs: + - get + - list + - create + - update + - patch + - delete + - watch +- apiGroups: + - "" + - coordination.k8s.io + resources: + - configmaps + - leases + verbs: + - get + - list + - create + - update + - patch + - watch + - delete +- apiGroups: + - admissionregistration.k8s.io + resources: + - validatingwebhookconfigurations + - mutatingwebhookconfigurations + verbs: + - get + - list + - create + - update + - patch + - watch + - delete diff --git a/packs/crossplane-1.20.0/charts/crossplane/templates/clusterrolebinding.yaml b/packs/crossplane-1.20.0/charts/crossplane/templates/clusterrolebinding.yaml new file mode 100644 index 00000000..9864fe58 --- /dev/null +++ b/packs/crossplane-1.20.0/charts/crossplane/templates/clusterrolebinding.yaml @@ -0,0 +1,19 @@ +apiVersion: rbac.authorization.k8s.io/v1 +kind: ClusterRoleBinding +metadata: + name: {{ template "crossplane.name" . }} + labels: + app: {{ template "crossplane.name" . }} + {{- include "crossplane.labels" . | indent 4 }} +roleRef: + apiGroup: rbac.authorization.k8s.io + kind: ClusterRole + name: {{ template "crossplane.name" . }} +subjects: +- kind: ServiceAccount + {{- if not .Values.serviceAccount.create }} + name: {{ .Values.serviceAccount.name }} + {{- else }} + name: {{ template "crossplane.name" . }} + {{- end }} + namespace: {{ .Release.Namespace }} diff --git a/packs/crossplane-1.20.0/charts/crossplane/templates/deployment.yaml b/packs/crossplane-1.20.0/charts/crossplane/templates/deployment.yaml new file mode 100644 index 00000000..9560df72 --- /dev/null +++ b/packs/crossplane-1.20.0/charts/crossplane/templates/deployment.yaml @@ -0,0 +1,284 @@ +{{- $externalSecretStoresEnabled := include "crossplane.externalSecretStoresEnabled" . | eq "true" -}} +apiVersion: apps/v1 +kind: Deployment +metadata: + name: {{ template "crossplane.name" . }} + namespace: {{ .Release.Namespace }} + labels: + app: {{ template "crossplane.name" . }} + release: {{ .Release.Name }} + {{- include "crossplane.labels" . | indent 4 }} + {{- with .Values.customAnnotations }} + annotations: {{ toYaml . | nindent 4 }} + {{- end }} +spec: + replicas: {{ .Values.replicas }} + selector: + matchLabels: + app: {{ template "crossplane.name" . }} + release: {{ .Release.Name }} + strategy: + type: {{ .Values.deploymentStrategy }} + {{- if .Values.revisionHistoryLimit }} + revisionHistoryLimit: {{ .Values.revisionHistoryLimit }} + {{- end }} + template: + metadata: + {{- if or .Values.metrics.enabled .Values.customAnnotations }} + annotations: + {{- end }} + {{- if .Values.metrics.enabled }} + prometheus.io/path: /metrics + prometheus.io/port: "8080" + prometheus.io/scrape: "true" + {{- end }} + {{- with .Values.customAnnotations }} + {{- toYaml . | nindent 8 }} + {{- end }} + labels: + app: {{ template "crossplane.name" . }} + release: {{ .Release.Name }} + {{- include "crossplane.labels" . | indent 8 }} + spec: + {{- with .Values.podSecurityContextCrossplane }} + securityContext: + {{- toYaml . | nindent 8 }} + {{- end }} + {{- if .Values.priorityClassName }} + priorityClassName: {{ .Values.priorityClassName | quote }} + {{- end }} + {{- if .Values.runtimeClassName }} + runtimeClassName: {{ .Values.runtimeClassName | quote }} + {{- end }} + {{- if not .Values.serviceAccount.create }} + serviceAccountName: {{ .Values.serviceAccount.name }} + {{- else }} + serviceAccountName: {{ template "crossplane.name" . }} + {{- end }} + hostNetwork: {{ .Values.hostNetwork }} + initContainers: + - image: "{{ .Values.image.repository }}:{{ .Values.image.tag | default (printf "v%s" .Chart.AppVersion) }}" + args: + - core + - init + {{- range $arg := .Values.provider.packages }} + - --provider + - "{{ $arg }}" + {{- end }} + {{- range $arg := .Values.configuration.packages }} + - --configuration + - "{{ $arg }}" + {{- end }} + {{- range $arg := .Values.function.packages }} + - --function + - "{{ $arg }}" + {{- end }} + imagePullPolicy: {{ .Values.image.pullPolicy }} + name: {{ .Chart.Name }}-init + resources: + {{- toYaml .Values.resourcesCrossplane | nindent 12 }} + {{- with .Values.securityContextCrossplane }} + securityContext: + {{- toYaml . | nindent 12 }} + {{- end }} + env: + - name: GOMAXPROCS + valueFrom: + resourceFieldRef: + containerName: {{ .Chart.Name }}-init + resource: limits.cpu + divisor: "1" + - name: GOMEMLIMIT + valueFrom: + resourceFieldRef: + containerName: {{ .Chart.Name }}-init + resource: limits.memory + divisor: "1" + - name: POD_NAMESPACE + valueFrom: + fieldRef: + fieldPath: metadata.namespace + - name: POD_SERVICE_ACCOUNT + valueFrom: + fieldRef: + fieldPath: spec.serviceAccountName + {{- if .Values.webhooks.enabled }} + - name: "WEBHOOK_SERVICE_NAME" + value: {{ template "crossplane.name" . }}-webhooks + - name: "WEBHOOK_SERVICE_NAMESPACE" + valueFrom: + fieldRef: + fieldPath: metadata.namespace + - name: "WEBHOOK_SERVICE_PORT" + value: "9443" + {{- else }} + - name: "ENABLE_WEBHOOKS" + value: "false" + {{- end }} + {{- if $externalSecretStoresEnabled }} + - name: "ESS_TLS_SERVER_SECRET_NAME" + value: ess-server-certs + {{- end }} + - name: "TLS_CA_SECRET_NAME" + value: crossplane-root-ca + - name: "TLS_SERVER_SECRET_NAME" + value: crossplane-tls-server + - name: "TLS_CLIENT_SECRET_NAME" + value: crossplane-tls-client + containers: + - image: "{{ .Values.image.repository }}:{{ .Values.image.tag | default (printf "v%s" .Chart.AppVersion) }}" + args: + - core + - start + {{- range $arg := .Values.args }} + - {{ $arg }} + {{- end }} + imagePullPolicy: {{ .Values.image.pullPolicy }} + name: {{ .Chart.Name }} + resources: + {{- toYaml .Values.resourcesCrossplane | nindent 12 }} + startupProbe: + failureThreshold: 30 + periodSeconds: 2 + tcpSocket: + port: readyz + ports: + - name: readyz + containerPort: {{ .Values.readiness.port | default 8081 }} + {{- if .Values.metrics.enabled }} + - name: metrics + containerPort: {{ .Values.metrics.port | default 8080 }} + {{- end }} + {{- if .Values.webhooks.enabled }} + - name: webhooks + containerPort: {{ .Values.webhooks.port | default 9443 }} + {{- end }} + {{- with .Values.securityContextCrossplane }} + securityContext: + {{- toYaml . | nindent 12 }} + {{- end }} + env: + - name: GOMAXPROCS + valueFrom: + resourceFieldRef: + containerName: {{ .Chart.Name }} + resource: limits.cpu + divisor: "1" + - name: GOMEMLIMIT + valueFrom: + resourceFieldRef: + containerName: {{ .Chart.Name }} + resource: limits.memory + divisor: "1" + - name: POD_NAMESPACE + valueFrom: + fieldRef: + fieldPath: metadata.namespace + - name: POD_SERVICE_ACCOUNT + valueFrom: + fieldRef: + fieldPath: spec.serviceAccountName + - name: LEADER_ELECTION + value: "{{ .Values.leaderElection }}" + {{- if .Values.registryCaBundleConfig.key }} + - name: CA_BUNDLE_PATH + value: "/certs/{{ .Values.registryCaBundleConfig.key }}" + {{- end}} + {{- if not .Values.webhooks.enabled }} + - name: "ENABLE_WEBHOOKS" + value: "false" + {{- end }} + {{- if and .Values.webhooks.enabled .Values.webhooks.port }} + - name: "WEBHOOK_PORT" + value: "{{ .Values.webhooks.port }}" + {{- end}} + {{- if and .Values.metrics.enabled .Values.metrics.port }} + - name: "METRICS_PORT" + value: "{{ .Values.metrics.port }}" + {{- end}} + {{- if .Values.readiness.port }} + - name: "HEALTH_PROBE_PORT" + value: "{{ .Values.readiness.port }}" + {{- end}} + - name: "TLS_SERVER_SECRET_NAME" + value: crossplane-tls-server + - name: "TLS_SERVER_CERTS_DIR" + value: /tls/server + - name: "TLS_CLIENT_SECRET_NAME" + value: crossplane-tls-client + - name: "TLS_CLIENT_CERTS_DIR" + value: /tls/client + {{- range $key, $value := .Values.extraEnvVarsCrossplane }} + - name: {{ $key | replace "." "_" }} + value: {{ $value | quote }} + {{- end}} + volumeMounts: + - mountPath: /cache/xpkg + name: package-cache + - mountPath: /cache/xfn + name: function-cache + {{- if .Values.registryCaBundleConfig.name }} + - mountPath: /certs + name: ca-certs + {{- end }} + {{- if .Values.extraVolumeMountsCrossplane }} + {{- toYaml .Values.extraVolumeMountsCrossplane | nindent 10 }} + {{- end }} + - mountPath: /tls/server + name: tls-server-certs + - mountPath: /tls/client + name: tls-client-certs + volumes: + - name: package-cache + {{- if .Values.packageCache.pvc }} + persistentVolumeClaim: + claimName: {{ .Values.packageCache.pvc }} + {{- else if .Values.packageCache.configMap }} + configMap: + name: {{ .Values.packageCache.configMap }} + {{- else }} + emptyDir: + medium: {{ .Values.packageCache.medium }} + sizeLimit: {{ .Values.packageCache.sizeLimit }} + {{- end }} + - name: function-cache + {{- if .Values.functionCache.pvc }} + persistentVolumeClaim: + claimName: {{ .Values.functionCache.pvc }} + {{- else }} + emptyDir: + medium: {{ .Values.functionCache.medium }} + sizeLimit: {{ .Values.functionCache.sizeLimit }} + {{- end }} + {{- if .Values.registryCaBundleConfig.name }} + - name: ca-certs + configMap: + name: {{ .Values.registryCaBundleConfig.name }} + items: + - key: {{ .Values.registryCaBundleConfig.key }} + path: {{ .Values.registryCaBundleConfig.key }} + {{- end }} + - name: tls-server-certs + secret: + secretName: crossplane-tls-server + - name: tls-client-certs + secret: + secretName: crossplane-tls-client + {{- if .Values.extraVolumesCrossplane }} + {{- toYaml .Values.extraVolumesCrossplane | nindent 6 }} + {{- end }} + {{- if .Values.nodeSelector }} + nodeSelector: {{ toYaml .Values.nodeSelector | nindent 8 }} + {{- end }} + {{- if .Values.tolerations }} + tolerations: {{ toYaml .Values.tolerations | nindent 6 }} + {{- end }} + {{- if .Values.affinity }} + affinity: {{ toYaml .Values.affinity | nindent 8 }} + {{- end }} + {{- if .Values.topologySpreadConstraints }} + topologySpreadConstraints: {{ toYaml .Values.topologySpreadConstraints | nindent 8 }} + {{- end }} + {{- with .Values.dnsPolicy }} + dnsPolicy: {{ . }} + {{- end }} diff --git a/packs/crossplane-1.20.0/charts/crossplane/templates/extra-objects.yaml b/packs/crossplane-1.20.0/charts/crossplane/templates/extra-objects.yaml new file mode 100644 index 00000000..a9bb3b6b --- /dev/null +++ b/packs/crossplane-1.20.0/charts/crossplane/templates/extra-objects.yaml @@ -0,0 +1,4 @@ +{{ range .Values.extraObjects }} +--- +{{ tpl (toYaml .) $ }} +{{ end }} diff --git a/packs/crossplane-1.20.0/charts/crossplane/templates/rbac-manager-allowed-provider-permissions.yaml b/packs/crossplane-1.20.0/charts/crossplane/templates/rbac-manager-allowed-provider-permissions.yaml new file mode 100644 index 00000000..9a373fff --- /dev/null +++ b/packs/crossplane-1.20.0/charts/crossplane/templates/rbac-manager-allowed-provider-permissions.yaml @@ -0,0 +1,14 @@ +{{- if .Values.rbacManager.deploy }} +--- +apiVersion: rbac.authorization.k8s.io/v1 +kind: ClusterRole +metadata: + name: {{ template "crossplane.name" . }}:allowed-provider-permissions + labels: + app: {{ template "crossplane.name" . }} + {{- include "crossplane.labels" . | indent 4 }} +aggregationRule: + clusterRoleSelectors: + - matchLabels: + rbac.crossplane.io/aggregate-to-allowed-provider-permissions: "true" +{{- end}} \ No newline at end of file diff --git a/packs/crossplane-1.20.0/charts/crossplane/templates/rbac-manager-clusterrole.yaml b/packs/crossplane-1.20.0/charts/crossplane/templates/rbac-manager-clusterrole.yaml new file mode 100644 index 00000000..8943b5f5 --- /dev/null +++ b/packs/crossplane-1.20.0/charts/crossplane/templates/rbac-manager-clusterrole.yaml @@ -0,0 +1,135 @@ +{{- if .Values.rbacManager.deploy }} +apiVersion: rbac.authorization.k8s.io/v1 +kind: ClusterRole +metadata: + name: {{ template "crossplane.name" . }}-rbac-manager + labels: + app: {{ template "crossplane.name" . }} + {{- include "crossplane.labels" . | indent 4 }} +rules: +- apiGroups: + - "" + resources: + - events + verbs: + - create + - update + - patch + - delete +- apiGroups: + - "" + resources: + - namespaces + verbs: + - get + - list + - watch +- apiGroups: + - apps + resources: + - deployments + verbs: + - get + - list + - watch +# The RBAC manager creates a series of RBAC roles for each namespace it sees. +# These RBAC roles are controlled (in the owner reference sense) by the namespace. +# The RBAC manager needs permission to set finalizers on Namespaces in order to +# create resources that block their deletion when the +# OwnerReferencesPermissionEnforcement admission controller is enabled. +# See https://kubernetes.io/docs/reference/access-authn-authz/admission-controllers/#ownerreferencespermissionenforcement +- apiGroups: + - "" + resources: + - namespaces/finalizers + verbs: + - update +- apiGroups: + - apiextensions.crossplane.io + resources: + - compositeresourcedefinitions + verbs: + - get + - list + - watch +# The RBAC manager creates a series of RBAC cluster roles for each XRD it sees. +# These cluster roles are controlled (in the owner reference sense) by the XRD. +# The RBAC manager needs permission to set finalizers on XRDs in order to +# create resources that block their deletion when the +# OwnerReferencesPermissionEnforcement admission controller is enabled. +# See https://kubernetes.io/docs/reference/access-authn-authz/admission-controllers/#ownerreferencespermissionenforcement +- apiGroups: + - apiextensions.crossplane.io + resources: + - compositeresourcedefinitions/finalizers + verbs: + - update +- apiGroups: + - pkg.crossplane.io + resources: + - providerrevisions + verbs: + - get + - list + - watch +# The RBAC manager creates a series of RBAC cluster roles for each ProviderRevision +# it sees. These cluster roles are controlled (in the owner reference sense) by the +# ProviderRevision. The RBAC manager needs permission to set finalizers on +# ProviderRevisions in order to create resources that block their deletion when the +# OwnerReferencesPermissionEnforcement admission controller is enabled. +# See https://kubernetes.io/docs/reference/access-authn-authz/admission-controllers/#ownerreferencespermissionenforcement +- apiGroups: + - pkg.crossplane.io + resources: + - providerrevisions/finalizers + verbs: + - update +- apiGroups: + - apiextensions.k8s.io + resources: + - customresourcedefinitions + verbs: + - get + - list + - watch +- apiGroups: + - rbac.authorization.k8s.io + resources: + - clusterroles + - roles + verbs: + - get + - list + - watch + - create + - update + - patch + # The RBAC manager may grant access it does not have. + - escalate +- apiGroups: + - rbac.authorization.k8s.io + resources: + - clusterroles + verbs: + - bind +- apiGroups: + - rbac.authorization.k8s.io + resources: + - clusterrolebindings + verbs: + - "*" +- apiGroups: + - "" + - coordination.k8s.io + resources: + - configmaps + - leases + verbs: + - get + - list + - create + - update + - patch + - watch + - delete +{{- end}} diff --git a/packs/crossplane-1.20.0/charts/crossplane/templates/rbac-manager-clusterrolebinding.yaml b/packs/crossplane-1.20.0/charts/crossplane/templates/rbac-manager-clusterrolebinding.yaml new file mode 100644 index 00000000..56e0300b --- /dev/null +++ b/packs/crossplane-1.20.0/charts/crossplane/templates/rbac-manager-clusterrolebinding.yaml @@ -0,0 +1,17 @@ +{{- if .Values.rbacManager.deploy }} +apiVersion: rbac.authorization.k8s.io/v1 +kind: ClusterRoleBinding +metadata: + name: {{ template "crossplane.name" . }}-rbac-manager + labels: + app: {{ template "crossplane.name" . }} + {{- include "crossplane.labels" . | indent 4 }} +roleRef: + apiGroup: rbac.authorization.k8s.io + kind: ClusterRole + name: {{ template "crossplane.name" . }}-rbac-manager +subjects: +- kind: ServiceAccount + name: rbac-manager + namespace: {{ .Release.Namespace }} +{{- end}} \ No newline at end of file diff --git a/packs/crossplane-1.20.0/charts/crossplane/templates/rbac-manager-deployment.yaml b/packs/crossplane-1.20.0/charts/crossplane/templates/rbac-manager-deployment.yaml new file mode 100644 index 00000000..a04d7232 --- /dev/null +++ b/packs/crossplane-1.20.0/charts/crossplane/templates/rbac-manager-deployment.yaml @@ -0,0 +1,133 @@ +{{- if .Values.rbacManager.deploy }} +apiVersion: apps/v1 +kind: Deployment +metadata: + name: {{ template "crossplane.name" . }}-rbac-manager + namespace: {{ .Release.Namespace }} + labels: + app: {{ template "crossplane.name" . }}-rbac-manager + release: {{ .Release.Name }} + {{- include "crossplane.labels" . | indent 4 }} + {{- with .Values.customAnnotations }} + annotations: {{ toYaml . | nindent 4 }} + {{- end }} +spec: + replicas: {{ .Values.rbacManager.replicas }} + selector: + matchLabels: + app: {{ template "crossplane.name" . }}-rbac-manager + release: {{ .Release.Name }} + strategy: + type: {{ .Values.deploymentStrategy }} + {{- if .Values.rbacManager.revisionHistoryLimit }} + revisionHistoryLimit: {{ .Values.rbacManager.revisionHistoryLimit }} + {{- end }} + template: + metadata: + {{- if or .Values.metrics.enabled .Values.customAnnotations }} + annotations: + {{- end }} + {{- if .Values.metrics.enabled }} + prometheus.io/path: /metrics + prometheus.io/port: "8080" + prometheus.io/scrape: "true" + {{- end }} + {{- with .Values.customAnnotations }} + {{- toYaml . | nindent 8 }} + {{- end }} + labels: + app: {{ template "crossplane.name" . }}-rbac-manager + release: {{ .Release.Name }} + {{- include "crossplane.labels" . | indent 8 }} + spec: + {{- with .Values.podSecurityContextRBACManager }} + securityContext: + {{- toYaml . | nindent 8 }} + {{- end }} + {{- if .Values.priorityClassName }} + priorityClassName: {{ .Values.priorityClassName | quote }} + {{- end }} + serviceAccountName: rbac-manager + {{- if .Values.runtimeClassName }} + runtimeClassName: {{ .Values.runtimeClassName | quote }} + {{- end }} + initContainers: + - image: "{{ .Values.image.repository }}:{{ .Values.image.tag | default (printf "v%s" .Chart.AppVersion) }}" + args: + - rbac + - init + imagePullPolicy: {{ .Values.image.pullPolicy }} + name: {{ .Chart.Name }}-init + resources: + {{- toYaml .Values.resourcesRBACManager | nindent 12 }} + {{- with .Values.securityContextRBACManager }} + securityContext: + {{- toYaml . | nindent 12 }} + {{- end }} + env: + - name: GOMAXPROCS + valueFrom: + resourceFieldRef: + containerName: {{ .Chart.Name }}-init + resource: limits.cpu + divisor: "1" + - name: GOMEMLIMIT + valueFrom: + resourceFieldRef: + containerName: {{ .Chart.Name }}-init + resource: limits.memory + divisor: "1" + containers: + - image: "{{ .Values.image.repository }}:{{ .Values.image.tag | default (printf "v%s" .Chart.AppVersion) }}" + args: + - rbac + - start + {{- range $arg := .Values.rbacManager.args }} + - {{ $arg }} + {{- end }} + - --provider-clusterrole={{ template "crossplane.name" . }}:allowed-provider-permissions + imagePullPolicy: {{ .Values.image.pullPolicy }} + name: {{ .Chart.Name }} + resources: + {{- toYaml .Values.resourcesRBACManager | nindent 12 }} + {{- if .Values.metrics.enabled }} + ports: + - name: metrics + containerPort: 8080 + {{- end }} + {{- with .Values.securityContextRBACManager }} + securityContext: + {{- toYaml . | nindent 12 }} + {{- end }} + env: + - name: GOMAXPROCS + valueFrom: + resourceFieldRef: + containerName: {{ .Chart.Name }} + resource: limits.cpu + divisor: "1" + - name: GOMEMLIMIT + valueFrom: + resourceFieldRef: + containerName: {{ .Chart.Name }} + resource: limits.memory + divisor: "1" + - name: LEADER_ELECTION + value: "{{ .Values.rbacManager.leaderElection }}" + {{- range $key, $value := .Values.extraEnvVarsRBACManager }} + - name: {{ $key | replace "." "_" }} + value: {{ $value | quote }} + {{- end}} + {{- if .Values.rbacManager.nodeSelector }} + nodeSelector: {{ toYaml .Values.rbacManager.nodeSelector | nindent 8 }} + {{- end }} + {{- if .Values.rbacManager.tolerations }} + tolerations: {{ toYaml .Values.rbacManager.tolerations | nindent 6 }} + {{- end }} + {{- if .Values.rbacManager.topologySpreadConstraints }} + topologySpreadConstraints: {{ toYaml .Values.rbacManager.topologySpreadConstraints | nindent 6 }} + {{- end }} + {{- if .Values.rbacManager.affinity }} + affinity: {{ toYaml .Values.rbacManager.affinity | nindent 8 }} + {{- end }} +{{- end}} diff --git a/packs/crossplane-1.20.0/charts/crossplane/templates/rbac-manager-managed-clusterroles.yaml b/packs/crossplane-1.20.0/charts/crossplane/templates/rbac-manager-managed-clusterroles.yaml new file mode 100644 index 00000000..c8ad21be --- /dev/null +++ b/packs/crossplane-1.20.0/charts/crossplane/templates/rbac-manager-managed-clusterroles.yaml @@ -0,0 +1,203 @@ +{{- if .Values.rbacManager.deploy }} +--- +apiVersion: rbac.authorization.k8s.io/v1 +kind: ClusterRoleBinding +metadata: + name: {{ template "crossplane.name" . }}-admin + labels: + app: {{ template "crossplane.name" . }} + {{- include "crossplane.labels" . | indent 4 }} +roleRef: + apiGroup: rbac.authorization.k8s.io + kind: ClusterRole + name: {{ template "crossplane.name" . }}-admin +subjects: +- apiGroup: rbac.authorization.k8s.io + kind: Group + name: {{ template "crossplane.name" . }}:masters +--- +apiVersion: rbac.authorization.k8s.io/v1 +kind: ClusterRole +metadata: + name: {{ template "crossplane.name" . }}-admin + labels: + app: {{ template "crossplane.name" . }} + {{- include "crossplane.labels" . | indent 4 }} +aggregationRule: + clusterRoleSelectors: + - matchLabels: + rbac.crossplane.io/aggregate-to-admin: "true" +--- +apiVersion: rbac.authorization.k8s.io/v1 +kind: ClusterRole +metadata: + name: {{ template "crossplane.name" . }}-edit + labels: + app: {{ template "crossplane.name" . }} + {{- include "crossplane.labels" . | indent 4 }} +aggregationRule: + clusterRoleSelectors: + - matchLabels: + rbac.crossplane.io/aggregate-to-edit: "true" +--- +apiVersion: rbac.authorization.k8s.io/v1 +kind: ClusterRole +metadata: + name: {{ template "crossplane.name" . }}-view + labels: + app: {{ template "crossplane.name" . }} + {{- include "crossplane.labels" . | indent 4 }} +aggregationRule: + clusterRoleSelectors: + - matchLabels: + rbac.crossplane.io/aggregate-to-view: "true" +--- +apiVersion: rbac.authorization.k8s.io/v1 +kind: ClusterRole +metadata: + name: {{ template "crossplane.name" . }}-browse + labels: + app: {{ template "crossplane.name" . }} + {{- include "crossplane.labels" . | indent 4 }} +aggregationRule: + clusterRoleSelectors: + - matchLabels: + rbac.crossplane.io/aggregate-to-browse: "true" +{{- if not .Values.rbacManager.skipAggregatedClusterRoles }} +--- +apiVersion: rbac.authorization.k8s.io/v1 +kind: ClusterRole +metadata: + name: {{ template "crossplane.name" . }}:aggregate-to-admin + labels: + rbac.crossplane.io/aggregate-to-admin: "true" + app: {{ template "crossplane.name" . }} + {{- include "crossplane.labels" . | indent 4 }} +rules: +# Crossplane administrators have access to view events. +- apiGroups: [""] + resources: [events] + verbs: [get, list, watch] +# Crossplane administrators must create provider credential secrets, and may +# need to read or otherwise interact with connection secrets. They may also need +# to create or annotate namespaces. +- apiGroups: [""] + resources: [secrets, namespaces] + verbs: ["*"] +# Crossplane administrators have access to view the roles that they may be able +# to grant to other subjects. +- apiGroups: [rbac.authorization.k8s.io] + resources: [clusterroles, roles] + verbs: [get, list, watch] +# Crossplane administrators have access to grant the access they have to other +# subjects. +- apiGroups: [rbac.authorization.k8s.io] + resources: [clusterrolebindings, rolebindings] + verbs: ["*"] +# Crossplane administrators have full access to built in Crossplane types. +- apiGroups: + - apiextensions.crossplane.io + resources: ["*"] + verbs: ["*"] +- apiGroups: + - pkg.crossplane.io + resources: ["*"] + verbs: ["*"] +- apiGroups: + - secrets.crossplane.io + resources: ["*"] + verbs: ["*"] +# Crossplane administrators have access to view CRDs in order to debug XRDs. +- apiGroups: [apiextensions.k8s.io] + resources: [customresourcedefinitions] + verbs: [get, list, watch] +--- +apiVersion: rbac.authorization.k8s.io/v1 +kind: ClusterRole +metadata: + name: {{ template "crossplane.name" . }}:aggregate-to-edit + labels: + rbac.crossplane.io/aggregate-to-edit: "true" + app: {{ template "crossplane.name" . }} + {{- include "crossplane.labels" . | indent 4 }} +rules: +# Crossplane editors have access to view events. +- apiGroups: [""] + resources: [events] + verbs: [get, list, watch] +# Crossplane editors must create provider credential secrets, and may need to +# read or otherwise interact with connection secrets. +- apiGroups: [""] + resources: [secrets] + verbs: ["*"] +# Crossplane editors may see which namespaces exist, but not edit them. +- apiGroups: [""] + resources: [namespaces] + verbs: [get, list, watch] +# Crossplane editors have full access to built in Crossplane types. +- apiGroups: + - apiextensions.crossplane.io + resources: ["*"] + verbs: ["*"] +- apiGroups: + - pkg.crossplane.io + resources: ["*"] + verbs: ["*"] +- apiGroups: + - secrets.crossplane.io + resources: ["*"] + verbs: ["*"] +--- +apiVersion: rbac.authorization.k8s.io/v1 +kind: ClusterRole +metadata: + name: {{ template "crossplane.name" . }}:aggregate-to-view + labels: + rbac.crossplane.io/aggregate-to-view: "true" + app: {{ template "crossplane.name" . }} + {{- include "crossplane.labels" . | indent 4 }} +rules: +# Crossplane viewers have access to view events. +- apiGroups: [""] + resources: [events] + verbs: [get, list, watch] +# Crossplane viewers may see which namespaces exist. +- apiGroups: [""] + resources: [namespaces] + verbs: [get, list, watch] +# Crossplane viewers have read-only access to built in Crossplane types. +- apiGroups: + - apiextensions.crossplane.io + resources: ["*"] + verbs: [get, list, watch] +- apiGroups: + - pkg.crossplane.io + resources: ["*"] + verbs: [get, list, watch] +- apiGroups: + - secrets.crossplane.io + resources: ["*"] + verbs: [get, list, watch] +--- +apiVersion: rbac.authorization.k8s.io/v1 +kind: ClusterRole +metadata: + name: {{ template "crossplane.name" . }}:aggregate-to-browse + labels: + rbac.crossplane.io/aggregate-to-browse: "true" + app: {{ template "crossplane.name" . }} + {{- include "crossplane.labels" . | indent 4 }} +rules: +# Crossplane browsers have access to view events. +- apiGroups: [""] + resources: [events] + verbs: [get, list, watch] +# Crossplane browsers have read-only access to compositions and XRDs. This +# allows them to discover and select an appropriate composition when creating a +# resource claim. +- apiGroups: + - apiextensions.crossplane.io + resources: ["*"] + verbs: [get, list, watch] +{{- end }} +{{- end }} diff --git a/packs/crossplane-1.20.0/charts/crossplane/templates/rbac-manager-serviceaccount.yaml b/packs/crossplane-1.20.0/charts/crossplane/templates/rbac-manager-serviceaccount.yaml new file mode 100644 index 00000000..fd1dcc97 --- /dev/null +++ b/packs/crossplane-1.20.0/charts/crossplane/templates/rbac-manager-serviceaccount.yaml @@ -0,0 +1,16 @@ +{{- if .Values.rbacManager.deploy }} +apiVersion: v1 +kind: ServiceAccount +metadata: + name: rbac-manager + namespace: {{ .Release.Namespace }} + labels: + app: {{ template "crossplane.name" . }} + {{- include "crossplane.labels" . | indent 4 }} +{{- with .Values.imagePullSecrets }} +imagePullSecrets: +{{- range $index, $secret := . }} +- name: {{ $secret }} +{{- end }} +{{- end }} +{{- end}} \ No newline at end of file diff --git a/packs/crossplane-1.20.0/charts/crossplane/templates/secret.yaml b/packs/crossplane-1.20.0/charts/crossplane/templates/secret.yaml new file mode 100644 index 00000000..78d05eb7 --- /dev/null +++ b/packs/crossplane-1.20.0/charts/crossplane/templates/secret.yaml @@ -0,0 +1,43 @@ +{{- $externalSecretStoresEnabled := include "crossplane.externalSecretStoresEnabled" . | eq "true" -}} +{{- if $externalSecretStoresEnabled }} +--- +# The reason this is created empty and filled by the init container is we want +# to manage the lifecycle of the secret via Helm. This way whenever Crossplane +# is deleted, the secret is deleted as well. +apiVersion: v1 +kind: Secret +metadata: + name: ess-server-certs + namespace: {{ .Release.Namespace }} +type: Opaque +{{- end }} +--- +# The reason this is created empty and filled by the init container is we want +# to manage the lifecycle of the secret via Helm. This way whenever Crossplane +# is deleted, the secret is deleted as well. +apiVersion: v1 +kind: Secret +metadata: + name: crossplane-root-ca + namespace: {{ .Release.Namespace }} +type: Opaque +--- +# The reason this is created empty and filled by the init container is we want +# to manage the lifecycle of the secret via Helm. This way whenever Crossplane +# is deleted, the secret is deleted as well. +apiVersion: v1 +kind: Secret +metadata: + name: crossplane-tls-server + namespace: {{ .Release.Namespace }} +type: Opaque +--- +# The reason this is created empty and filled by the init container is we want +# to manage the lifecycle of the secret via Helm. This way whenever Crossplane +# is deleted, the secret is deleted as well. +apiVersion: v1 +kind: Secret +metadata: + name: crossplane-tls-client + namespace: {{ .Release.Namespace }} +type: Opaque \ No newline at end of file diff --git a/packs/crossplane-1.20.0/charts/crossplane/templates/service.yaml b/packs/crossplane-1.20.0/charts/crossplane/templates/service.yaml new file mode 100644 index 00000000..c807e7be --- /dev/null +++ b/packs/crossplane-1.20.0/charts/crossplane/templates/service.yaml @@ -0,0 +1,25 @@ +{{- if .Values.webhooks.enabled }} +apiVersion: v1 +kind: Service +metadata: + name: {{ template "crossplane.name" . }}-webhooks + namespace: {{ .Release.Namespace }} + labels: + app: {{ template "crossplane.name" . }} + release: {{ .Release.Name }} + {{- include "crossplane.labels" . | indent 4 }} + annotations: + {{- with .Values.service.customAnnotations }} + {{- range $key, $value := . }} + {{ $key }}: {{ $value | quote }} + {{- end }} + {{- end }} +spec: + selector: + app: {{ template "crossplane.name" . }} + release: {{ .Release.Name }} + ports: + - protocol: TCP + port: 9443 + targetPort: {{ .Values.webhooks.port | default 9443 }} +{{- end }} diff --git a/packs/crossplane-1.20.0/charts/crossplane/templates/serviceaccount.yaml b/packs/crossplane-1.20.0/charts/crossplane/templates/serviceaccount.yaml new file mode 100644 index 00000000..e711adf8 --- /dev/null +++ b/packs/crossplane-1.20.0/charts/crossplane/templates/serviceaccount.yaml @@ -0,0 +1,19 @@ +{{- if .Values.serviceAccount.create }} +apiVersion: v1 +kind: ServiceAccount +metadata: + name: {{ template "crossplane.name" . }} + namespace: {{ .Release.Namespace }} + labels: + app: {{ template "crossplane.name" . }} + {{- include "crossplane.labels" . | indent 4 }} + {{- with .Values.serviceAccount.customAnnotations }} + annotations: {{ toYaml . | nindent 4 }} + {{- end }} +{{- with .Values.imagePullSecrets }} +imagePullSecrets: +{{- range $index, $secret := . }} +- name: {{ $secret }} +{{- end }} +{{ end }} +{{- end }} \ No newline at end of file diff --git a/packs/crossplane-1.20.0/charts/crossplane/values.yaml b/packs/crossplane-1.20.0/charts/crossplane/values.yaml new file mode 100644 index 00000000..719dfd1f --- /dev/null +++ b/packs/crossplane-1.20.0/charts/crossplane/values.yaml @@ -0,0 +1,217 @@ +# helm-docs renders these comments into markdown. Use markdown formatting where +# appropiate. +# +# -- The number of Crossplane pod `replicas` to deploy. +replicas: 1 + +# -- The number of Crossplane ReplicaSets to retain. +revisionHistoryLimit: null + +# -- The deployment strategy for the Crossplane and RBAC Manager pods. +deploymentStrategy: RollingUpdate + +image: + # -- Repository for the Crossplane pod image. + repository: xpkg.crossplane.io/crossplane/crossplane + # -- The Crossplane image tag. Defaults to the value of `appVersion` in `Chart.yaml`. + tag: "" + # -- The image pull policy used for Crossplane and RBAC Manager pods. + pullPolicy: IfNotPresent + +# -- Add `nodeSelectors` to the Crossplane pod deployment. +nodeSelector: {} +# -- Add `tolerations` to the Crossplane pod deployment. +tolerations: [] +# -- Add `affinities` to the Crossplane pod deployment. +affinity: {} +# -- Add `topologySpreadConstraints` to the Crossplane pod deployment. +topologySpreadConstraints: [] + +# -- Enable `hostNetwork` for the Crossplane deployment. Caution: enabling `hostNetwork` grants the Crossplane Pod access to the host network namespace. Consider setting `dnsPolicy` to `ClusterFirstWithHostNet`. +hostNetwork: false + +# -- Specify the `dnsPolicy` to be used by the Crossplane pod. +dnsPolicy: "" + +# -- Add custom `labels` to the Crossplane pod deployment. +customLabels: {} + +# -- Add custom `annotations` to the Crossplane pod deployment. +customAnnotations: {} + +serviceAccount: + # -- Specifies whether Crossplane ServiceAccount should be created + create: true + # -- Provide the name of an already created Crossplane ServiceAccount. Required when `serviceAccount.create` is `false` + name: "" + # -- Add custom `annotations` to the Crossplane ServiceAccount. + customAnnotations: {} + +# -- Enable [leader election](https://docs.crossplane.io/latest/concepts/pods/#leader-election) for the Crossplane pod. +leaderElection: true +# -- Add custom arguments to the Crossplane pod. +args: [] + +provider: + # -- A list of Provider packages to install. + packages: [] + +configuration: + # -- A list of Configuration packages to install. + packages: [] + +function: + # -- A list of Function packages to install + packages: [] + +# -- The imagePullSecret names to add to the Crossplane ServiceAccount. +imagePullSecrets: [] + +registryCaBundleConfig: + # -- The ConfigMap name containing a custom CA bundle to enable fetching packages from registries with unknown or untrusted certificates. + name: "" + # -- The ConfigMap key containing a custom CA bundle to enable fetching packages from registries with unknown or untrusted certificates. + key: "" + +service: + # -- Configure annotations on the service object. Only enabled when webhooks.enabled = true + customAnnotations: {} + +webhooks: + # -- Enable webhooks for Crossplane and installed Provider packages. + enabled: true + # -- The port the webhook server listens on. + port: "" + +rbacManager: + # -- Deploy the RBAC Manager pod and its required roles. + deploy: true + # -- Don't install aggregated Crossplane ClusterRoles. + skipAggregatedClusterRoles: false + # -- The number of RBAC Manager pod `replicas` to deploy. + replicas: 1 + # -- The number of RBAC Manager ReplicaSets to retain. + revisionHistoryLimit: null + # -- Enable [leader election](https://docs.crossplane.io/latest/concepts/pods/#leader-election) for the RBAC Manager pod. + leaderElection: true + # -- Add custom arguments to the RBAC Manager pod. + args: [] + # -- Add `nodeSelectors` to the RBAC Manager pod deployment. + nodeSelector: {} + # -- Add `tolerations` to the RBAC Manager pod deployment. + tolerations: [] + # -- Add `affinities` to the RBAC Manager pod deployment. + affinity: {} + # -- Add `topologySpreadConstraints` to the RBAC Manager pod deployment. + topologySpreadConstraints: [] + +# -- The PriorityClass name to apply to the Crossplane and RBAC Manager pods. +priorityClassName: "" + +# -- The runtimeClassName name to apply to the Crossplane and RBAC Manager pods. +runtimeClassName: "" + +resourcesCrossplane: + limits: + # -- CPU resource limits for the Crossplane pod. + cpu: 500m + # -- Memory resource limits for the Crossplane pod. + memory: 1024Mi + requests: + # -- CPU resource requests for the Crossplane pod. + cpu: 100m + # -- Memory resource requests for the Crossplane pod. + memory: 256Mi + +securityContextCrossplane: + # -- The user ID used by the Crossplane pod. + runAsUser: 65532 + # -- The group ID used by the Crossplane pod. + runAsGroup: 65532 + # -- Enable `allowPrivilegeEscalation` for the Crossplane pod. + allowPrivilegeEscalation: false + # -- Set the Crossplane pod root file system as read-only. + readOnlyRootFilesystem: true + +packageCache: + # -- Set to `Memory` to hold the package cache in a RAM backed file system. Useful for Crossplane development. + medium: "" + # -- The size limit for the package cache. If medium is `Memory` the `sizeLimit` can't exceed Node memory. + sizeLimit: 20Mi + # -- The name of a PersistentVolumeClaim to use as the package cache. Disables the default package cache `emptyDir` Volume. + pvc: "" + # -- The name of a ConfigMap to use as the package cache. Disables the default package cache `emptyDir` Volume. + configMap: "" + +functionCache: + # -- Set to `Memory` to hold the function cache in a RAM backed file system. Useful for Crossplane development. + medium: "" + # -- The size limit for the function cache. If medium is `Memory` the `sizeLimit` can't exceed Node memory. + sizeLimit: 512Mi + # -- The name of a PersistentVolumeClaim to use as the function cache. Disables the default function cache `emptyDir` Volume. + pvc: "" + +resourcesRBACManager: + limits: + # -- CPU resource limits for the RBAC Manager pod. + cpu: 100m + # -- Memory resource limits for the RBAC Manager pod. + memory: 512Mi + requests: + # -- CPU resource requests for the RBAC Manager pod. + cpu: 100m + # -- Memory resource requests for the RBAC Manager pod. + memory: 256Mi + +securityContextRBACManager: + # -- The user ID used by the RBAC Manager pod. + runAsUser: 65532 + # -- The group ID used by the RBAC Manager pod. + runAsGroup: 65532 + # -- Enable `allowPrivilegeEscalation` for the RBAC Manager pod. + allowPrivilegeEscalation: false + # -- Set the RBAC Manager pod root file system as read-only. + readOnlyRootFilesystem: true + +metrics: + # -- Enable Prometheus path, port and scrape annotations and expose port 8080 for both the Crossplane and RBAC Manager pods. + enabled: false + # -- The port the metrics server listens on. + port: "" + +readiness: + # -- The port the readyz server listens on. + port: "" + +# -- Add custom environmental variables to the Crossplane pod deployment. +# Replaces any `.` in a variable name with `_`. For example, `SAMPLE.KEY=value1` becomes `SAMPLE_KEY=value1`. +extraEnvVarsCrossplane: {} + +# -- Add custom environmental variables to the RBAC Manager pod deployment. +# Replaces any `.` in a variable name with `_`. For example, `SAMPLE.KEY=value1` becomes `SAMPLE_KEY=value1`. +extraEnvVarsRBACManager: {} + +# -- Add a custom `securityContext` to the Crossplane pod. +podSecurityContextCrossplane: {} + +# -- Add a custom `securityContext` to the RBAC Manager pod. +podSecurityContextRBACManager: {} + +# -- Add custom `volumes` to the Crossplane pod. +extraVolumesCrossplane: {} + +# -- Add custom `volumeMounts` to the Crossplane pod. +extraVolumeMountsCrossplane: {} + +# -- To add arbitrary Kubernetes Objects during a Helm Install +extraObjects: [] + # - apiVersion: pkg.crossplane.io/v1alpha1 + # kind: ControllerConfig + # metadata: + # name: aws-config + # annotations: + # eks.amazonaws.com/role-arn: arn:aws:iam::123456789101:role/example + # helm.sh/hook: post-install + # spec: + # podSecurityContext: + # fsGroup: 2000 diff --git a/packs/crossplane-1.20.0/logo.png b/packs/crossplane-1.20.0/logo.png new file mode 100644 index 0000000000000000000000000000000000000000..94280b87bc667f8700a8c06d52561f7354f3b6a8 GIT binary patch literal 91169 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 A!T Date: Wed, 30 Jul 2025 09:24:57 -0500 Subject: [PATCH 2/3] Blank space romoved --- packs/crossplane-1.20.0/pack.json | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/packs/crossplane-1.20.0/pack.json b/packs/crossplane-1.20.0/pack.json index af3416f8..d9ef605c 100644 --- a/packs/crossplane-1.20.0/pack.json +++ b/packs/crossplane-1.20.0/pack.json @@ -34,8 +34,7 @@ "minLimit": 256 } ] - } - + } } From 3f97219cf31018a397ac19e3c716f6f0c9e3141e Mon Sep 17 00:00:00 2001 From: Daniel-Echeverry Date: Wed, 17 Sep 2025 10:21:14 -0500 Subject: [PATCH 3/3] new file: packs/fluentbit-4.0.7/README.md new file: packs/fluentbit-4.0.7/charts/fluent-bit-0.53.0.tgz new file: packs/fluentbit-4.0.7/charts/fluent-bit-0.53.0.tgz.orig new file: packs/fluentbit-4.0.7/charts/fluent-bit/.helmignore new file: packs/fluentbit-4.0.7/charts/fluent-bit/Chart.yaml new file: packs/fluentbit-4.0.7/charts/fluent-bit/README.md new file: packs/fluentbit-4.0.7/charts/fluent-bit/ci/ci-values.yaml new file: packs/fluentbit-4.0.7/charts/fluent-bit/dashboards/fluent-bit.json new file: packs/fluentbit-4.0.7/charts/fluent-bit/templates/NOTES.txt new file: packs/fluentbit-4.0.7/charts/fluent-bit/templates/_helpers.tpl new file: packs/fluentbit-4.0.7/charts/fluent-bit/templates/_pod.tpl new file: packs/fluentbit-4.0.7/charts/fluent-bit/templates/clusterrole.yaml new file: packs/fluentbit-4.0.7/charts/fluent-bit/templates/clusterrolebinding.yaml new file: packs/fluentbit-4.0.7/charts/fluent-bit/templates/configmap-dashboards.yaml new file: packs/fluentbit-4.0.7/charts/fluent-bit/templates/configmap-luascripts.yaml new file: packs/fluentbit-4.0.7/charts/fluent-bit/templates/configmap.yaml new file: packs/fluentbit-4.0.7/charts/fluent-bit/templates/daemonset.yaml new file: packs/fluentbit-4.0.7/charts/fluent-bit/templates/deployment.yaml new file: packs/fluentbit-4.0.7/charts/fluent-bit/templates/hpa.yaml new file: packs/fluentbit-4.0.7/charts/fluent-bit/templates/ingress.yaml new file: packs/fluentbit-4.0.7/charts/fluent-bit/templates/networkpolicy.yaml new file: packs/fluentbit-4.0.7/charts/fluent-bit/templates/pdb.yaml new file: packs/fluentbit-4.0.7/charts/fluent-bit/templates/prometheusrule.yaml new file: packs/fluentbit-4.0.7/charts/fluent-bit/templates/psp.yaml new file: packs/fluentbit-4.0.7/charts/fluent-bit/templates/scc.yaml new file: packs/fluentbit-4.0.7/charts/fluent-bit/templates/service.yaml new file: packs/fluentbit-4.0.7/charts/fluent-bit/templates/serviceaccount.yaml new file: packs/fluentbit-4.0.7/charts/fluent-bit/templates/servicemonitor.yaml new file: packs/fluentbit-4.0.7/charts/fluent-bit/templates/tests/test-connection.yaml new file: packs/fluentbit-4.0.7/charts/fluent-bit/templates/vpa.yaml new file: packs/fluentbit-4.0.7/charts/fluent-bit/values.yaml new file: packs/fluentbit-4.0.7/logo.png new file: packs/fluentbit-4.0.7/pack.json new file: packs/fluentbit-4.0.7/values.yaml --- packs/fluentbit-4.0.7/README.md | 58 + .../charts/fluent-bit-0.53.0.tgz | Bin 0 -> 15268 bytes .../charts/fluent-bit-0.53.0.tgz.orig | Bin 0 -> 15272 bytes .../charts/fluent-bit/.helmignore | 23 + .../charts/fluent-bit/Chart.yaml | 27 + .../charts/fluent-bit/README.md | 57 + .../charts/fluent-bit/ci/ci-values.yaml | 43 + .../fluent-bit/dashboards/fluent-bit.json | 1565 +++++++++++++++++ .../charts/fluent-bit/templates/NOTES.txt | 6 + .../charts/fluent-bit/templates/_helpers.tpl | 138 ++ .../charts/fluent-bit/templates/_pod.tpl | 169 ++ .../fluent-bit/templates/clusterrole.yaml | 46 + .../templates/clusterrolebinding.yaml | 16 + .../templates/configmap-dashboards.yaml | 21 + .../templates/configmap-luascripts.yaml | 13 + .../fluent-bit/templates/configmap.yaml | 25 + .../fluent-bit/templates/daemonset.yaml | 48 + .../fluent-bit/templates/deployment.yaml | 51 + .../charts/fluent-bit/templates/hpa.yaml | 40 + .../charts/fluent-bit/templates/ingress.yaml | 65 + .../fluent-bit/templates/networkpolicy.yaml | 23 + .../charts/fluent-bit/templates/pdb.yaml | 21 + .../fluent-bit/templates/prometheusrule.yaml | 18 + .../charts/fluent-bit/templates/psp.yaml | 45 + .../charts/fluent-bit/templates/scc.yaml | 45 + .../charts/fluent-bit/templates/service.yaml | 60 + .../fluent-bit/templates/serviceaccount.yaml | 16 + .../fluent-bit/templates/servicemonitor.yaml | 51 + .../templates/tests/test-connection.yaml | 26 + .../charts/fluent-bit/templates/vpa.yaml | 43 + .../charts/fluent-bit/values.yaml | 537 ++++++ packs/fluentbit-4.0.7/logo.png | Bin 0 -> 10283 bytes packs/fluentbit-4.0.7/pack.json | 41 + packs/fluentbit-4.0.7/values.yaml | 544 ++++++ 34 files changed, 3881 insertions(+) create mode 100644 packs/fluentbit-4.0.7/README.md create mode 100644 packs/fluentbit-4.0.7/charts/fluent-bit-0.53.0.tgz create mode 100644 packs/fluentbit-4.0.7/charts/fluent-bit-0.53.0.tgz.orig create mode 100644 packs/fluentbit-4.0.7/charts/fluent-bit/.helmignore create mode 100644 packs/fluentbit-4.0.7/charts/fluent-bit/Chart.yaml create mode 100644 packs/fluentbit-4.0.7/charts/fluent-bit/README.md create mode 100644 packs/fluentbit-4.0.7/charts/fluent-bit/ci/ci-values.yaml create mode 100644 packs/fluentbit-4.0.7/charts/fluent-bit/dashboards/fluent-bit.json create mode 100644 packs/fluentbit-4.0.7/charts/fluent-bit/templates/NOTES.txt create mode 100644 packs/fluentbit-4.0.7/charts/fluent-bit/templates/_helpers.tpl create mode 100644 packs/fluentbit-4.0.7/charts/fluent-bit/templates/_pod.tpl create mode 100644 packs/fluentbit-4.0.7/charts/fluent-bit/templates/clusterrole.yaml create mode 100644 packs/fluentbit-4.0.7/charts/fluent-bit/templates/clusterrolebinding.yaml create mode 100644 packs/fluentbit-4.0.7/charts/fluent-bit/templates/configmap-dashboards.yaml create mode 100644 packs/fluentbit-4.0.7/charts/fluent-bit/templates/configmap-luascripts.yaml create mode 100644 packs/fluentbit-4.0.7/charts/fluent-bit/templates/configmap.yaml create mode 100644 packs/fluentbit-4.0.7/charts/fluent-bit/templates/daemonset.yaml create mode 100644 packs/fluentbit-4.0.7/charts/fluent-bit/templates/deployment.yaml create mode 100644 packs/fluentbit-4.0.7/charts/fluent-bit/templates/hpa.yaml create mode 100644 packs/fluentbit-4.0.7/charts/fluent-bit/templates/ingress.yaml create mode 100644 packs/fluentbit-4.0.7/charts/fluent-bit/templates/networkpolicy.yaml create mode 100644 packs/fluentbit-4.0.7/charts/fluent-bit/templates/pdb.yaml create mode 100644 packs/fluentbit-4.0.7/charts/fluent-bit/templates/prometheusrule.yaml create mode 100644 packs/fluentbit-4.0.7/charts/fluent-bit/templates/psp.yaml create mode 100644 packs/fluentbit-4.0.7/charts/fluent-bit/templates/scc.yaml create mode 100644 packs/fluentbit-4.0.7/charts/fluent-bit/templates/service.yaml create mode 100644 packs/fluentbit-4.0.7/charts/fluent-bit/templates/serviceaccount.yaml create mode 100644 packs/fluentbit-4.0.7/charts/fluent-bit/templates/servicemonitor.yaml create mode 100644 packs/fluentbit-4.0.7/charts/fluent-bit/templates/tests/test-connection.yaml create mode 100644 packs/fluentbit-4.0.7/charts/fluent-bit/templates/vpa.yaml create mode 100644 packs/fluentbit-4.0.7/charts/fluent-bit/values.yaml create mode 100644 packs/fluentbit-4.0.7/logo.png create mode 100644 packs/fluentbit-4.0.7/pack.json create mode 100644 packs/fluentbit-4.0.7/values.yaml diff --git a/packs/fluentbit-4.0.7/README.md b/packs/fluentbit-4.0.7/README.md new file mode 100644 index 00000000..38d61c5d --- /dev/null +++ b/packs/fluentbit-4.0.7/README.md @@ -0,0 +1,58 @@ +# Fluent Bit + +Fluent Bit is a lightweight and high-performance log processor and forwarder. It allows you to collect data or logs from different sources, unify them, and send them to multiple destinations including Elasticsearch, OpenSearch, Kafka, Datadog, and more. + +### How it works + +Fluent Bit runs as a DaemonSet in the Kubernetes cluster and collects logs from each node. The logs are parsed, filtered, and enriched with Kubernetes metadata before being shipped to the specified backend. This configuration is fully customizable via Fluent Bit configuration blocks defined in the Helm `values.yaml`. + +The default configuration in this package collects logs from containers in `/var/log/containers/*.log` and system logs via `systemd`, filters them using Kubernetes metadata, and forwards them to an Elasticsearch endpoint. + +## Prerequisites + +Kubernetes 1.27 and higher are supported. + +The following cloud types are supported: +* all clouds + + + +## Parameters + +| **Parameter** | **Description** | **Type** | **Default Value** | **Required** | +|---|---|---|---|---| +| charts.fluent-bit.kind | Kubernetes controller to use (DaemonSet or Deployment) | string | DaemonSet | Yes | +| charts.fluent-bit.image.repository | Image repository for Fluent Bit | string | cr.fluentbit.io/fluent/fluent-bit | Yes | +| charts.fluent-bit.image.pullPolicy | Image pull policy | string | IfNotPresent | No | +| charts.fluent-bit.flush | Interval (in seconds) to flush the logs | integer | 1 | No | +| charts.fluent-bit.logLevel | Logging level for Fluent Bit | string | info | No | +| charts.fluent-bit.metricsPort | Port for exposing metrics | integer | 2020 | No | +| charts.fluent-bit.config.service | Main Fluent Bit service configuration | string | See values.yaml | Yes | +| charts.fluent-bit.config.inputs | Log input configuration | string | See values.yaml | Yes | +| charts.fluent-bit.config.filters | Filters applied to logs (e.g. Kubernetes metadata) | string | See values.yaml | Yes | +| charts.fluent-bit.config.outputs | Log output configuration | string | See values.yaml | Yes | +| charts.fluent-bit.config.customParsers | Custom parsers for log messages | string | See values.yaml | No | +| charts.fluent-bit.daemonSetVolumes | Volumes to mount for log access | list | /var/log, /var/lib/docker/containers, /etc/machine-id | Yes | +| charts.fluent-bit.daemonSetVolumeMounts | Mount points in Fluent Bit containers | list | See values.yaml | Yes | +| charts.fluent-bit.service.port | Port exposed by the Fluent Bit service | integer | 2020 | No | +| charts.fluent-bit.rbac.create | Whether to create RBAC resources | bool | true | No | +| charts.fluent-bit.podSecurityPolicy.create | Whether to create PodSecurityPolicy | bool | false | No | +| charts.fluent-bit.hotReload.enabled | Enable configmap hot reload with sidecar | bool | false | No | +| charts.fluent-bit.autoscaling.enabled | Enable horizontal pod autoscaler (only for Deployment) | bool | false | No | + +## References + +- [Fluent Bit Official Docs](https://docs.fluentbit.io/manual) +- [Fluent Bit Helm Chart](https://github.com/fluent/helm-charts/tree/main/charts/fluent-bit) +- [Spectro Cloud Docs - Fluent Bit](https://docs.spectrocloud.com/integrations/fluentbit) + +--- + +This package is maintained by **Spectro Cloud** and is provided as a community-supported integration. + +**Version:** 4.0.7 + +**Source:** community + +**Contributor:** Spectro Cloud + diff --git a/packs/fluentbit-4.0.7/charts/fluent-bit-0.53.0.tgz b/packs/fluentbit-4.0.7/charts/fluent-bit-0.53.0.tgz new file mode 100644 index 0000000000000000000000000000000000000000..06ba38e1a7163d09fabb17e264d5d187fba109e7 GIT binary patch literal 15268 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 literal 0 HcmV?d00001 diff --git a/packs/fluentbit-4.0.7/charts/fluent-bit-0.53.0.tgz.orig b/packs/fluentbit-4.0.7/charts/fluent-bit-0.53.0.tgz.orig new file mode 100644 index 0000000000000000000000000000000000000000..91a0b1a2ef07d8b07511559f597b3a3bdcc10bf2 GIT binary patch literal 15272 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 literal 0 HcmV?d00001 diff --git a/packs/fluentbit-4.0.7/charts/fluent-bit/.helmignore b/packs/fluentbit-4.0.7/charts/fluent-bit/.helmignore new file mode 100644 index 00000000..0e8a0eb3 --- /dev/null +++ b/packs/fluentbit-4.0.7/charts/fluent-bit/.helmignore @@ -0,0 +1,23 @@ +# Patterns to ignore when building packages. +# This supports shell glob matching, relative path matching, and +# negation (prefixed with !). Only one pattern per line. +.DS_Store +# Common VCS dirs +.git/ +.gitignore +.bzr/ +.bzrignore +.hg/ +.hgignore +.svn/ +# Common backup files +*.swp +*.bak +*.tmp +*.orig +*~ +# Various IDEs +.project +.idea/ +*.tmproj +.vscode/ diff --git a/packs/fluentbit-4.0.7/charts/fluent-bit/Chart.yaml b/packs/fluentbit-4.0.7/charts/fluent-bit/Chart.yaml new file mode 100644 index 00000000..6d238a34 --- /dev/null +++ b/packs/fluentbit-4.0.7/charts/fluent-bit/Chart.yaml @@ -0,0 +1,27 @@ +annotations: + artifacthub.io/changes: | + - kind: changed + description: "Make securityContext of hot reload container configurable in fluent-bit chart" +apiVersion: v1 +appVersion: 4.0.7 +description: Fast and lightweight log processor and forwarder or Linux, OSX and BSD + family operating systems. +home: https://fluentbit.io/ +icon: https://raw.githubusercontent.com/cncf/artwork/master/projects/fluentd/fluentbit/icon/fluentbit-icon-color.svg +keywords: +- logging +- fluent-bit +- fluentd +maintainers: +- email: eduardo@calyptia.com + name: edsiper +- email: naseem@transit.app + name: naseemkullah +- email: towmeykaw@gmail.com + name: Towmeykaw +- email: steve.hipwell@gmail.com + name: stevehipwell +name: fluent-bit +sources: +- https://github.com/fluent/fluent-bit/ +version: 0.53.0 diff --git a/packs/fluentbit-4.0.7/charts/fluent-bit/README.md b/packs/fluentbit-4.0.7/charts/fluent-bit/README.md new file mode 100644 index 00000000..2a4224c6 --- /dev/null +++ b/packs/fluentbit-4.0.7/charts/fluent-bit/README.md @@ -0,0 +1,57 @@ +# Fluent Bit Helm chart + +[Fluent Bit](https://fluentbit.io) is a fast and lightweight log processor and forwarder or Linux, OSX and BSD family operating systems. + +## Installation + +To add the `fluent` helm repo, run: + +```sh +helm repo add fluent https://fluent.github.io/helm-charts +``` + +To install a release named `fluent-bit`, run: + +```sh +helm install fluent-bit fluent/fluent-bit +``` + +## Chart values + +```sh +helm show values fluent/fluent-bit +``` + +## Using Lua scripts +Fluent Bit allows us to build filter to modify the incoming records using custom [Lua scripts.](https://docs.fluentbit.io/manual/pipeline/filters/lua) + +### How to use Lua scripts with this Chart + +First, you should add your Lua scripts to `luaScripts` in values.yaml, templating is supported. + +```yaml +luaScripts: + filter_example.lua: | + function filter_name(tag, timestamp, record) + -- put your lua code here. + end +``` + +After that, the Lua scripts will be ready to be used as filters. So next step is to add your Fluent bit [filter](https://docs.fluentbit.io/manual/concepts/data-pipeline/filter) to `config.filters` in values.yaml, for example: + +```yaml +config: + filters: | + [FILTER] + Name lua + Match + script /fluent-bit/scripts/filter_example.lua + call filter_name +``` +Under the hood, the chart will: +- Create a configmap using `luaScripts`. +- Add a volumeMounts for each Lua scripts using the path `/fluent-bit/scripts/