From ed76f5a944e99fd6dde293836d07bc8244966b20 Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" Date: Thu, 18 Jul 2024 00:47:08 +0000 Subject: [PATCH] Charts CI ``` Updated: crate/crate-operator: - 2.40.0 speedscale/speedscale-operator: - 2.2.169 ``` --- assets/crate/crate-operator-2.40.0.tgz | Bin 0 -> 7814 bytes .../speedscale-operator-2.2.169.tgz | Bin 0 -> 16672 bytes .../crate/crate-operator/2.40.0/.helmignore | 23 + charts/crate/crate-operator/2.40.0/Chart.lock | 6 + charts/crate/crate-operator/2.40.0/Chart.yaml | 18 + charts/crate/crate-operator/2.40.0/README.md | 61 ++ .../charts/crate-operator-crds/.helmignore | 23 + .../charts/crate-operator-crds/Chart.yaml | 9 + .../charts/crate-operator-crds/README.md | 30 + .../crate-operator-crds/templates/NOTES.txt | 1 + .../templates/cratedbs-cloud-crate-io.yaml | 691 ++++++++++++++++++ .../charts/crate-operator-crds/values.yaml | 3 + .../crate-operator/2.40.0/templates/NOTES.txt | 1 + .../2.40.0/templates/_helpers.tpl | 63 ++ .../2.40.0/templates/deployment.yaml | 59 ++ .../crate-operator/2.40.0/templates/rbac.yaml | 87 +++ .../2.40.0/templates/serviceaccount.yaml | 18 + .../crate/crate-operator/2.40.0/values.yaml | 65 ++ .../speedscale-operator/2.2.169/.helmignore | 23 + .../speedscale-operator/2.2.169/Chart.yaml | 27 + .../speedscale-operator/2.2.169/LICENSE | 201 +++++ .../speedscale-operator/2.2.169/README.md | 108 +++ .../speedscale-operator/2.2.169/app-readme.md | 108 +++ .../2.2.169/questions.yaml | 9 + .../2.2.169/templates/NOTES.txt | 12 + .../2.2.169/templates/admission.yaml | 199 +++++ .../2.2.169/templates/configmap.yaml | 41 ++ .../templates/crds/trafficreplays.yaml | 514 +++++++++++++ .../2.2.169/templates/deployments.yaml | 132 ++++ .../2.2.169/templates/hooks.yaml | 73 ++ .../2.2.169/templates/rbac.yaml | 244 +++++++ .../2.2.169/templates/secrets.yaml | 18 + .../2.2.169/templates/services.yaml | 22 + .../2.2.169/templates/tls.yaml | 183 +++++ .../speedscale-operator/2.2.169/values.yaml | 133 ++++ index.yaml | 55 +- 36 files changed, 3259 insertions(+), 1 deletion(-) create mode 100644 assets/crate/crate-operator-2.40.0.tgz create mode 100644 assets/speedscale/speedscale-operator-2.2.169.tgz create mode 100644 charts/crate/crate-operator/2.40.0/.helmignore create mode 100644 charts/crate/crate-operator/2.40.0/Chart.lock create mode 100644 charts/crate/crate-operator/2.40.0/Chart.yaml create mode 100644 charts/crate/crate-operator/2.40.0/README.md create mode 100644 charts/crate/crate-operator/2.40.0/charts/crate-operator-crds/.helmignore create mode 100644 charts/crate/crate-operator/2.40.0/charts/crate-operator-crds/Chart.yaml create mode 100644 charts/crate/crate-operator/2.40.0/charts/crate-operator-crds/README.md create mode 100644 charts/crate/crate-operator/2.40.0/charts/crate-operator-crds/templates/NOTES.txt create mode 100644 charts/crate/crate-operator/2.40.0/charts/crate-operator-crds/templates/cratedbs-cloud-crate-io.yaml create mode 100644 charts/crate/crate-operator/2.40.0/charts/crate-operator-crds/values.yaml create mode 100644 charts/crate/crate-operator/2.40.0/templates/NOTES.txt create mode 100644 charts/crate/crate-operator/2.40.0/templates/_helpers.tpl create mode 100644 charts/crate/crate-operator/2.40.0/templates/deployment.yaml create mode 100644 charts/crate/crate-operator/2.40.0/templates/rbac.yaml create mode 100644 charts/crate/crate-operator/2.40.0/templates/serviceaccount.yaml create mode 100644 charts/crate/crate-operator/2.40.0/values.yaml create mode 100644 charts/speedscale/speedscale-operator/2.2.169/.helmignore create mode 100644 charts/speedscale/speedscale-operator/2.2.169/Chart.yaml create mode 100644 charts/speedscale/speedscale-operator/2.2.169/LICENSE create mode 100644 charts/speedscale/speedscale-operator/2.2.169/README.md create mode 100644 charts/speedscale/speedscale-operator/2.2.169/app-readme.md create mode 100644 charts/speedscale/speedscale-operator/2.2.169/questions.yaml create mode 100644 charts/speedscale/speedscale-operator/2.2.169/templates/NOTES.txt create mode 100644 charts/speedscale/speedscale-operator/2.2.169/templates/admission.yaml create mode 100644 charts/speedscale/speedscale-operator/2.2.169/templates/configmap.yaml create mode 100644 charts/speedscale/speedscale-operator/2.2.169/templates/crds/trafficreplays.yaml create mode 100644 charts/speedscale/speedscale-operator/2.2.169/templates/deployments.yaml create mode 100644 charts/speedscale/speedscale-operator/2.2.169/templates/hooks.yaml create mode 100644 charts/speedscale/speedscale-operator/2.2.169/templates/rbac.yaml create mode 100644 charts/speedscale/speedscale-operator/2.2.169/templates/secrets.yaml create mode 100644 charts/speedscale/speedscale-operator/2.2.169/templates/services.yaml create mode 100644 charts/speedscale/speedscale-operator/2.2.169/templates/tls.yaml create mode 100644 charts/speedscale/speedscale-operator/2.2.169/values.yaml diff --git a/assets/crate/crate-operator-2.40.0.tgz b/assets/crate/crate-operator-2.40.0.tgz new file mode 100644 index 0000000000000000000000000000000000000000..14c19ff280776a2df733e3b606026382312914b9 GIT binary patch literal 7814 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 Y(kiXeDmA442><~9|9Y~})&SZ705UM7ZvX%Q literal 0 HcmV?d00001 diff --git a/assets/speedscale/speedscale-operator-2.2.169.tgz b/assets/speedscale/speedscale-operator-2.2.169.tgz new file mode 100644 index 0000000000000000000000000000000000000000..9526681f421809aac5001407997d17cc611d03f0 GIT binary patch literal 16672 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 literal 0 HcmV?d00001 diff --git a/charts/crate/crate-operator/2.40.0/.helmignore b/charts/crate/crate-operator/2.40.0/.helmignore new file mode 100644 index 000000000..0e8a0eb36 --- /dev/null +++ b/charts/crate/crate-operator/2.40.0/.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/charts/crate/crate-operator/2.40.0/Chart.lock b/charts/crate/crate-operator/2.40.0/Chart.lock new file mode 100644 index 000000000..d5fb4c26f --- /dev/null +++ b/charts/crate/crate-operator/2.40.0/Chart.lock @@ -0,0 +1,6 @@ +dependencies: +- name: crate-operator-crds + repository: file://../crate-operator-crds + version: 2.40.0 +digest: sha256:8720952f1eda53fa1d5041453257f90785367806e668eb80f83b5b2e3ea20d35 +generated: "2024-07-17T09:02:45.497416786Z" diff --git a/charts/crate/crate-operator/2.40.0/Chart.yaml b/charts/crate/crate-operator/2.40.0/Chart.yaml new file mode 100644 index 000000000..02d2c2888 --- /dev/null +++ b/charts/crate/crate-operator/2.40.0/Chart.yaml @@ -0,0 +1,18 @@ +annotations: + catalog.cattle.io/certified: partner + catalog.cattle.io/display-name: CrateDB Operator + catalog.cattle.io/release-name: crate-operator +apiVersion: v2 +appVersion: 2.40.0 +dependencies: +- condition: crate-operator-crds.enabled + name: crate-operator-crds + repository: file://./charts/crate-operator-crds + version: 2.40.0 +description: Crate Operator - Helm chart for installing and upgrading Crate Operator. +icon: file://assets/icons/crate-operator.svg +maintainers: +- name: Crate.io +name: crate-operator +type: application +version: 2.40.0 diff --git a/charts/crate/crate-operator/2.40.0/README.md b/charts/crate/crate-operator/2.40.0/README.md new file mode 100644 index 000000000..96e327220 --- /dev/null +++ b/charts/crate/crate-operator/2.40.0/README.md @@ -0,0 +1,61 @@ +# Crate Operator Helm Chart + +A Helm chart for installing and upgrading the [Crate Operator](https://github.com/crate/crate-operator). +The **CrateDB Kubernetes Operator** provides convenient way to run [CrateDB](https://github.com/crate/crate) +clusters inside Kubernetes. + +Helm must be installed to use the charts. Please refer to Helm's [documentation](https://helm.sh/docs/) to get started. + +## Prerequisites + +The Crate Operator requires the CrateDB [CRD](https://kubernetes.io/docs/concepts/extend-kubernetes/api-extension/custom-resources/#customresourcedefinitions). +It can be installed separately by installing the [Helm Chart](../cratedb-crds/) or as a dependency of this Chart. + +If the CRD is already installed (via the `crate-operator-crds` Helm chart or manually), you need to pass `--set crate-operator-crds.enabled=false` when installing the Operator. + +If the RBAC resources are already installed, you need to pass `--set rbac.create=false` when installing the Operator. + +## Usage + +Once Helm is properly set up, install the chart. + +### Install from local folder + +``` +helm install crate-operator crate-operator +``` + +### Install from repo + +``` +helm repo add crate-operator https://crate.github.io/crate-operator +helm search repo crate-operator +helm install crate-operator crate-operator/crate-operator +``` + +#### Namespace + +The operator is installed in the namespace `crate-operator`. +The namespace needs either to be created first: + +```shell +kubectl create namespace crate-operator +``` + +or it will be created automatically by adding `--namespace=crate-operator --create-namespace` to the Helm command: + +```shell +helm upgrade --install --atomic crate-operator crate-operator \ + --namespace=crate-operator \ + --create-namespace +``` + +#### Configuration + +Please refer to the [configuration documentation](https://github.com/crate/crate-operator/blob/master/docs/source/configuration.rst) for further details. + +### Upgrading the Operator + +``` +helm upgrade --atomic crate-operator crate-operator +``` diff --git a/charts/crate/crate-operator/2.40.0/charts/crate-operator-crds/.helmignore b/charts/crate/crate-operator/2.40.0/charts/crate-operator-crds/.helmignore new file mode 100644 index 000000000..0e8a0eb36 --- /dev/null +++ b/charts/crate/crate-operator/2.40.0/charts/crate-operator-crds/.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/charts/crate/crate-operator/2.40.0/charts/crate-operator-crds/Chart.yaml b/charts/crate/crate-operator/2.40.0/charts/crate-operator-crds/Chart.yaml new file mode 100644 index 000000000..cdaf66302 --- /dev/null +++ b/charts/crate/crate-operator/2.40.0/charts/crate-operator-crds/Chart.yaml @@ -0,0 +1,9 @@ +apiVersion: v2 +appVersion: 2.40.0 +description: Crate Operator CRDs - Helm chart for installing and upgrading Custom + Resource Definitions (CRDs) for the Crate Operator. +maintainers: +- name: Crate.io +name: crate-operator-crds +type: application +version: 2.40.0 diff --git a/charts/crate/crate-operator/2.40.0/charts/crate-operator-crds/README.md b/charts/crate/crate-operator/2.40.0/charts/crate-operator-crds/README.md new file mode 100644 index 000000000..29f503e4f --- /dev/null +++ b/charts/crate/crate-operator/2.40.0/charts/crate-operator-crds/README.md @@ -0,0 +1,30 @@ +# Crate Operator CRDs Helm Chart + +A Helm chart for installing and upgrading the CRDs for [Crate Operator](https://github.com/crate/crate-operator). +To be able to deploy the custom resource CrateDB to a Kubernetes cluster, the API needs to be extended with a Custom Resource Definition (CRD). + +Helm must be installed to use the charts. Please refer to Helm's [documentation](https://helm.sh/docs/) to get started. + +## Usage + +Once Helm is properly set up, install the chart. + +### Install from local folder + +``` +helm install crate-operator-crds crate-operator-crds +``` + +### Install from repo + +``` +helm repo add crate-operator https://crate.github.io/crate-operator +helm search repo crate-operator +helm install crate-operator-crds crate-operator/crate-operator-crds +``` + +### Upgrading the Operator + +``` +helm upgrade --atomic crate-operator-crds crate-operator-crds +``` diff --git a/charts/crate/crate-operator/2.40.0/charts/crate-operator-crds/templates/NOTES.txt b/charts/crate/crate-operator/2.40.0/charts/crate-operator-crds/templates/NOTES.txt new file mode 100644 index 000000000..c5615c64c --- /dev/null +++ b/charts/crate/crate-operator/2.40.0/charts/crate-operator-crds/templates/NOTES.txt @@ -0,0 +1 @@ +Thank you for installing {{ .Chart.Name }}. diff --git a/charts/crate/crate-operator/2.40.0/charts/crate-operator-crds/templates/cratedbs-cloud-crate-io.yaml b/charts/crate/crate-operator/2.40.0/charts/crate-operator-crds/templates/cratedbs-cloud-crate-io.yaml new file mode 100644 index 000000000..575073b9c --- /dev/null +++ b/charts/crate/crate-operator/2.40.0/charts/crate-operator-crds/templates/cratedbs-cloud-crate-io.yaml @@ -0,0 +1,691 @@ +--- +apiVersion: apiextensions.k8s.io/v1 +kind: CustomResourceDefinition +metadata: + annotations: + name: cratedbs.cloud.crate.io +spec: + conversion: + strategy: None + group: cloud.crate.io + names: + kind: CrateDB + listKind: CrateDBList + plural: cratedbs + singular: cratedb + scope: Namespaced + versions: + - additionalPrinterColumns: + - description: The CrateDB Cluster name + jsonPath: .spec.cluster.name + name: ClusterName + type: string + - description: The CrateDB Cluster version + jsonPath: .spec.cluster.version + name: Version + type: string + - description: Number of data nodes in this cluster + jsonPath: .spec.nodes.data[?(@.name == "hot")].replicas + name: Nodes + type: number + - description: CPU Requests + jsonPath: .spec.nodes.data[?(@.name == "hot")].resources.requests.cpu + name: CPU_REQ + type: number + - description: CPU Limits + jsonPath: .spec.nodes.data[?(@.name == "hot")].resources.limits.cpu + name: CPU_LIM + type: number + # Only shown in wide mode (-o wide) + priority: 1 + - jsonPath: .metadata.creationTimestamp + name: Age + type: date + - jsonPath: .status.crateDBStatus.health + name: Health + type: string + name: v1 + schema: + openAPIV3Schema: + properties: + spec: + properties: + backups: + properties: + aws: + properties: + accessKeyId: + properties: + secretKeyRef: + properties: + key: + description: The key within the Kubernetes Secret + that holds the AWS Access Key ID. + type: string + name: + description: Name of a Kubernetes Secret that contains + the AWS Access Key ID to be used for backups. + type: string + required: + - key + - name + type: object + required: + - secretKeyRef + type: object + basePath: + description: The base path within the backup under which the + snapshots will be placed. + type: string + bucket: + properties: + secretKeyRef: + properties: + key: + description: The key within the Kubernetes Secret + that holds the AWS S3 bucket name. + type: string + name: + description: Name of a Kubernetes Secret that contains + the AWS S3 bucket name to be used for backups. + type: string + required: + - key + - name + type: object + required: + - secretKeyRef + type: object + cron: + description: A crontab formatted string indicating when and + how often to perform backups. + pattern: ^(((\d+,)+\d+|(\d+(\/|-)\d+)|\d+|\*) ){4}(((\d+,)+\d+|(\d+(\/|-)\d+)|\d+|\*))$ + type: string + endpointUrl: + properties: + secretKeyRef: + properties: + key: + description: The key within the Kubernetes Secret + that holds the S3 endpoint. + type: string + name: + description: Name of a Kubernetes Secret that contains + the S3 endpoint-url to be used for backups. + type: string + required: + - key + - name + type: object + required: + - secretKeyRef + type: object + region: + properties: + secretKeyRef: + properties: + key: + description: The key within the Kubernetes Secret + that holds the name of the AWS region to use. + type: string + name: + description: Name of a Kubernetes Secret that contains + the AWS region to be used for backups. + type: string + required: + - key + - name + type: object + required: + - secretKeyRef + type: object + secretAccessKey: + properties: + secretKeyRef: + properties: + key: + description: The key within the Kubernetes Secret + that holds the AWS Secret Access Key. + type: string + name: + description: Name of a Kubernetes Secret that contains + the AWS Secret Access Key to be used for backups. + type: string + required: + - key + - name + type: object + required: + - secretKeyRef + type: object + required: + - accessKeyId + - bucket + - cron + - region + - secretAccessKey + type: object + type: object + cluster: + properties: + allowedCIDRs: + description: Whitelisted CIDRs + items: + type: string + type: array + externalDNS: + description: The external DNS name record that should point to + the CrateDB cluster. + type: string + imageRegistry: + description: Point to a Docker registry. For the offical image + it's 'crate', testing and nightly releases are under 'crate/crate'. + Or others under 'https://example.com/path/to/registry' + type: string + license: + properties: + secretKeyRef: + properties: + key: + description: The key within the Kubernetes Secret that + holds the CrateDB license. + type: string + name: + description: Name of a Kubernetes Secret that contains + a valid CrateDB license. + type: string + required: + - key + - name + type: object + description: Deprecated and no longer has any effect. + Only here for backwards-compatibility. + required: + - secretKeyRef + type: object + name: + description: Name of the cluster + pattern: ^[a-z0-9]([a-z0-9-]{0,61}[a-z0-9])?$ + type: string + restoreSnapshot: + description: Restore data from a snapshot. + properties: + accessKeyId: + properties: + secretKeyRef: + properties: + key: + description: The key within the Kubernetes Secret + that holds the Access Key ID. + type: string + name: + description: Name of a Kubernetes Secret that contains + the Access Key ID to be used for accessing the + backup of the source cluster. + type: string + required: + - key + - name + type: object + required: + - secretKeyRef + type: object + basePath: + properties: + secretKeyRef: + properties: + key: + description: The key within the Kubernetes Secret + that holds the base path of the repository. + type: string + name: + description: Name of a Kubernetes Secret that contains + the base path to be used. + type: string + required: + - key + - name + type: object + required: + - secretKeyRef + type: object + bucket: + properties: + secretKeyRef: + properties: + key: + description: The key within the Kubernetes Secret + that holds the snapshot's bucket name. + type: string + name: + description: Name of a Kubernetes Secret that contains + the snapshot's bucket name to be used for the restore. + type: string + required: + - key + - name + type: object + required: + - secretKeyRef + type: object + secretAccessKey: + properties: + secretKeyRef: + properties: + key: + description: The key within the Kubernetes Secret + that holds the Secret Access Key. + type: string + name: + description: Name of a Kubernetes Secret that contains + the Secret Access Key to be used for accessing the + backup of the source cluster.. + type: string + required: + - key + - name + type: object + required: + - secretKeyRef + type: object + snapshot: + description: The name of the snapshot to use. + type: string + type: + type: string + enum: ["all", "tables", "metadata", "partitions", "sections"] + tables: + description: The tables to restore from the backup. + Format '.'. + items: + type: string + type: array + sections: + description: Restore a single metadata group or only tables or views. + items: + type: string + enum: ["tables", "views", "users", "privileges", "analyzers", "udfs"] + type: array + partitions: + description: Restore certain table partitions by their column and value. + items: + properties: + table_ident: + type: string + columns: + items: + properties: + name: + type: string + value: + type: string + required: + - name + - value + type: object + type: array + required: + - table_ident + - columns + type: object + type: array + required: + - snapshot + - bucket + - secretAccessKey + - basePath + - accessKeyId + type: object + settings: + description: Additional settings to apply to all nodes in the + cluster. + type: object + x-kubernetes-preserve-unknown-fields: true + service: + description: Additional configuration for k8s services. + properties: + annotations: + description: Additional annotations to add to the k8s load balancer service. + type: object + x-kubernetes-preserve-unknown-fields: true + type: object + ssl: + properties: + keystore: + properties: + secretKeyRef: + properties: + key: + description: CrateDB SSL keystore + type: string + name: + description: Keystore name + type: string + required: + - key + - name + type: object + required: + - secretKeyRef + type: object + keystoreKeyPassword: + properties: + secretKeyRef: + properties: + key: + description: Keystore key password + type: string + name: + description: Keystore passwords + type: string + required: + - key + - name + type: object + required: + - secretKeyRef + type: object + keystorePassword: + properties: + secretKeyRef: + properties: + key: + description: Keystore password + type: string + name: + description: Keystore passwords + type: string + required: + - key + - name + type: object + required: + - secretKeyRef + type: object + required: + - keystore + - keystoreKeyPassword + - keystorePassword + type: object + version: + description: CrateDB version + type: string + required: + - imageRegistry + - name + - version + type: object + grandCentral: + properties: + backendImage: + description: The image of the grand central backend. + type: string + backendEnabled: + description: Flag indicating whether grand central backend is + deployed for this cluster. + type: boolean + jwkUrl: + description: The endpoint to retrieve the list of JWK public keys + used for verifying JWT tokens. + type: string + apiUrl: + description: The CrateDB Cloud API URL. + type: string + required: + - backendImage + - jwkUrl + - apiUrl + - backendEnabled + type: object + nodes: + properties: + data: + items: + properties: + annotations: + description: Additional annotations to put on the corresponding + pods. + type: object + x-kubernetes-preserve-unknown-fields: true + labels: + description: Additional labels to put on the corresponding + pods. + type: object + x-kubernetes-preserve-unknown-fields: true + name: + description: Uniquely identifying name of this type of node. + pattern: ^(([A-Za-z0-9][-A-Za-z0-9_.]*)?[A-Za-z0-9])?$ + type: string + replicas: + description: Number of CrateDB nodes of this type. + type: number + nodepool: + description: Type of nodepool where the cluster should run. + type: string + resources: + properties: + cpus: + description: Deprecated - please use requests/d. + type: number + disk: + properties: + count: + description: Number of disks + type: number + size: + description: Size of the disk. + type: string + storageClass: + description: The name of a Kubernetes StorageClass + type: string + required: + - count + - size + - storageClass + type: object + heapRatio: + description: Allocated heap size relative to memory + format: float + type: number + limits: + properties: + cpu: + description: Limited CPUs for each CrateDB container. + Supports the syntax documented in https://kubernetes.io/docs/concepts/configuration/manage-resources-containers/. + type: number + memory: + description: Limited memory for each CrateDB container. + Supports the syntax documented in https://kubernetes.io/docs/concepts/configuration/manage-resources-containers/. + type: string + type: object + memory: + description: Deprecated - please use requests/limits. + type: string + requests: + properties: + cpu: + description: Requested CPUs for each CrateDB container. + Supports the syntax documented in https://kubernetes.io/docs/concepts/configuration/manage-resources-containers/. + type: number + memory: + description: Requested memory for each CrateDB container. + Supports the syntax documented in https://kubernetes.io/docs/concepts/configuration/manage-resources-containers/. + type: string + type: object + required: + - disk + - heapRatio + type: object + settings: + description: Additional settings to apply to all nodes of + that type in the cluster. + type: object + x-kubernetes-preserve-unknown-fields: true + required: + - name + - replicas + - resources + type: object + minItems: 1 + type: array + master: + properties: + annotations: + description: Additional annotations to put on the corresponding + pods. + type: object + x-kubernetes-preserve-unknown-fields: true + labels: + description: Additional labels to put on the corresponding + pods. + type: object + x-kubernetes-preserve-unknown-fields: true + replicas: + description: Number of master nodes. Should be an odd number. + minimum: 3 + type: number + nodepool: + description: Type of nodepool where the cluster should run. + type: string + resources: + properties: + cpus: + description: Deprecated - please use requests/limits. + type: number + disk: + properties: + count: + description: Number of disks + type: number + size: + description: Size of the disk. + type: string + storageClass: + description: The name of a Kubernetes StorageClass + type: string + required: + - count + - size + - storageClass + type: object + heapRatio: + description: Allocated heap size relative to memory + format: float + type: number + limits: + properties: + cpu: + description: Limited CPUs for each CrateDB container. + Supports the syntax documented in https://kubernetes.io/docs/concepts/configuration/manage-resources-containers/. + type: number + memory: + description: Limited memory for each CrateDB container. + Supports the syntax documented in https://kubernetes.io/docs/concepts/configuration/manage-resources-containers/. + type: string + type: object + memory: + description: Deprecated - please use requests/limits. + type: string + requests: + properties: + cpu: + description: Requested CPUs for each CrateDB container. + Supports the syntax documented in https://kubernetes.io/docs/concepts/configuration/manage-resources-containers/. + type: number + memory: + description: Requested memory for each CrateDB container. + Supports the syntax documented in https://kubernetes.io/docs/concepts/configuration/manage-resources-containers/. + type: string + type: object + required: + - disk + - heapRatio + type: object + settings: + description: Additional settings to apply to all master nodes + in the cluster. + type: object + x-kubernetes-preserve-unknown-fields: true + required: + - replicas + - resources + type: object + required: + - data + type: object + ports: + properties: + exporter: + description: SQL exporter port number + maximum: 65535 + minimum: 1 + type: number + http: + description: HTTP port number + maximum: 65535 + minimum: 1 + type: number + jmx: + description: JMX port number + maximum: 65535 + minimum: 1 + type: number + postgres: + description: PostgreSQL port number + maximum: 65535 + minimum: 1 + type: number + prometheus: + description: Prometheus port number + maximum: 65535 + minimum: 1 + type: number + required: + - exporter + - http + - jmx + - postgres + - prometheus + type: object + users: + items: + properties: + name: + description: The username for a CrateDB cluster user. + type: string + password: + properties: + secretKeyRef: + properties: + key: + description: The key within the Kubernetes Secret that + holds the user's password. + type: string + name: + description: Name of a Kubernetes Secret that contains + the password for the user. + type: string + required: + - key + - name + type: object + required: + - secretKeyRef + type: object + required: + - name + - password + type: object + type: array + required: + - cluster + - nodes + type: object + status: + type: object + x-kubernetes-preserve-unknown-fields: true + required: + - spec + type: object + served: true + storage: true diff --git a/charts/crate/crate-operator/2.40.0/charts/crate-operator-crds/values.yaml b/charts/crate/crate-operator/2.40.0/charts/crate-operator-crds/values.yaml new file mode 100644 index 000000000..45a6fce00 --- /dev/null +++ b/charts/crate/crate-operator/2.40.0/charts/crate-operator-crds/values.yaml @@ -0,0 +1,3 @@ +# Default values for crate-operator-crds. +# This is a YAML-formatted file. +# Declare variables to be passed into your templates. diff --git a/charts/crate/crate-operator/2.40.0/templates/NOTES.txt b/charts/crate/crate-operator/2.40.0/templates/NOTES.txt new file mode 100644 index 000000000..c5615c64c --- /dev/null +++ b/charts/crate/crate-operator/2.40.0/templates/NOTES.txt @@ -0,0 +1 @@ +Thank you for installing {{ .Chart.Name }}. diff --git a/charts/crate/crate-operator/2.40.0/templates/_helpers.tpl b/charts/crate/crate-operator/2.40.0/templates/_helpers.tpl new file mode 100644 index 000000000..136cc8076 --- /dev/null +++ b/charts/crate/crate-operator/2.40.0/templates/_helpers.tpl @@ -0,0 +1,63 @@ +{{/* +Expand the name of the chart. +*/}} +{{- define "crate-operator.name" -}} +{{- default .Chart.Name .Values.nameOverride | trunc 63 | trimSuffix "-" }} +{{- end }} + +{{/* +Create a default fully qualified app name. +We truncate at 63 chars because some Kubernetes name fields are limited to this (by the DNS naming spec). +If release name contains chart name it will be used as a full name. +*/}} +{{- define "crate-operator.fullname" -}} +{{- if .Values.fullnameOverride }} +{{- .Values.fullnameOverride | trunc 63 | trimSuffix "-" }} +{{- else }} +{{- $name := default .Chart.Name .Values.nameOverride }} +{{- if contains $name .Release.Name }} +{{- .Release.Name | trunc 63 | trimSuffix "-" }} +{{- else }} +{{- printf "%s-%s" .Release.Name $name | trunc 63 | trimSuffix "-" }} +{{- end }} +{{- end }} +{{- end }} + +{{/* +Create chart name and version as used by the chart label. +*/}} +{{- define "crate-operator.chart" -}} +{{- printf "%s-%s" .Chart.Name .Chart.Version | replace "+" "_" | trunc 63 | trimSuffix "-" }} +{{- end }} + +{{/* +Common labels +*/}} +{{- define "crate-operator.labels" -}} +helm.sh/chart: {{ include "crate-operator.chart" . }} +{{ include "crate-operator.selectorLabels" . }} +{{- if .Chart.AppVersion }} +app.kubernetes.io/version: {{ .Values.image.tag | default .Chart.AppVersion | quote }} +{{- end }} +app.kubernetes.io/managed-by: {{ .Release.Service }} +app.kubernetes.io/instance: {{ .Release.Name }} +app.kubernetes.io/part-of: {{ .Values.partOf }} +{{- end }} + +{{/* +Selector labels +*/}} +{{- define "crate-operator.selectorLabels" -}} +app.kubernetes.io/name: {{ include "crate-operator.name" . }} +{{- end }} + +{{/* +Create the name of the service account to use +*/}} +{{- define "crate-operator.serviceAccountName" -}} +{{- if .Values.serviceAccount.create }} +{{- default (include "crate-operator.fullname" .) .Values.serviceAccount.name }} +{{- else }} +{{- default "default" .Values.serviceAccount.name }} +{{- end }} +{{- end }} diff --git a/charts/crate/crate-operator/2.40.0/templates/deployment.yaml b/charts/crate/crate-operator/2.40.0/templates/deployment.yaml new file mode 100644 index 000000000..28a3ebe2f --- /dev/null +++ b/charts/crate/crate-operator/2.40.0/templates/deployment.yaml @@ -0,0 +1,59 @@ +--- +apiVersion: apps/v1 +kind: Deployment +metadata: + labels: + {{- include "crate-operator.labels" . | nindent 4 }} + name: {{ include "crate-operator.fullname" . }} + namespace: {{ .Release.Namespace }} +spec: + replicas: {{ .Values.replicaCount }} + selector: + matchLabels: + {{- include "crate-operator.selectorLabels" . | nindent 6 }} + strategy: + type: Recreate + template: + metadata: + {{- with .Values.podAnnotations }} + annotations: + {{- toYaml . | nindent 8 }} + {{- end }} + labels: + {{- include "crate-operator.labels" . | nindent 8 }} + spec: + {{- with .Values.imagePullSecrets }} + imagePullSecrets: + {{- toYaml . | nindent 8 }} + {{- end }} + serviceAccountName: {{ include "crate-operator.serviceAccountName" . }} + containers: + - name: {{ .Chart.Name }} + image: "{{ .Values.image.repository }}:{{ .Values.image.tag | default .Chart.AppVersion }}" + imagePullPolicy: {{ .Values.image.pullPolicy }} + env: + {{- range $name, $value := .Values.envFromSecret }} + - name: {{ $name }} + valueFrom: + secretKeyRef: + name: {{ $value.name }} + key: {{ $value.key }} + {{- end }} + {{- range $name, $value := .Values.env }} + - name: {{ $name }} + value: "{{ $value }}" + {{- end }} + resources: + {{- toYaml .Values.resources | nindent 12 }} + {{- with .Values.nodeSelector }} + nodeSelector: + {{- toYaml . | nindent 8 }} + {{- end }} + {{- with .Values.affinity }} + affinity: + {{- toYaml . | nindent 8 }} + {{- end }} + {{- with .Values.tolerations }} + tolerations: + {{- toYaml . | nindent 8 }} + {{- end }} diff --git a/charts/crate/crate-operator/2.40.0/templates/rbac.yaml b/charts/crate/crate-operator/2.40.0/templates/rbac.yaml new file mode 100644 index 000000000..695834939 --- /dev/null +++ b/charts/crate/crate-operator/2.40.0/templates/rbac.yaml @@ -0,0 +1,87 @@ +{{- if .Values.rbac.create -}} +--- +apiVersion: rbac.authorization.k8s.io/v1 +kind: ClusterRole +metadata: + labels: + {{- include "crate-operator.labels" . | nindent 4 }} + name: {{ template "crate-operator.fullname" . }} +rules: +# Framework: posting the events about the handlers progress/errors +- apiGroups: + - "" + - events.k8s.io + resources: + - events + verbs: + - create +# Application: watching & handling for the custom resources +- apiGroups: + - cloud.crate.io + resources: + - cratedbs + verbs: + - get + - list + - watch + - patch +# Application: other resources it produces and manipulates +- apiGroups: + - "" + - apps + - batch + - policy + - networking.k8s.io + resources: + - configmaps + - cronjobs + - jobs + - deployments + - ingresses + - namespaces + - persistentvolumeclaims + - persistentvolumes + - pods + - secrets + - services + - statefulsets + - poddisruptionbudgets + verbs: + - create + - delete + - get + - list + - patch + - update + - watch +- apiGroups: + - "" + resources: + - pods/exec + verbs: + - "*" +# Required by kopf to scan for CRD Changes. +- apiGroups: + - apiextensions.k8s.io + resources: + - customresourcedefinitions + verbs: + - list + - watch + +--- +apiVersion: rbac.authorization.k8s.io/v1 +kind: ClusterRoleBinding +metadata: + labels: + {{- include "crate-operator.labels" . | nindent 4 }} + name: {{ template "crate-operator.fullname" . }} +roleRef: + apiGroup: rbac.authorization.k8s.io + kind: ClusterRole + name: {{ template "crate-operator.fullname" . }} +subjects: +- kind: ServiceAccount + name: {{ template "crate-operator.serviceAccountName" . }} + namespace: {{ .Release.Namespace }} +{{- end -}} diff --git a/charts/crate/crate-operator/2.40.0/templates/serviceaccount.yaml b/charts/crate/crate-operator/2.40.0/templates/serviceaccount.yaml new file mode 100644 index 000000000..f79f3e3be --- /dev/null +++ b/charts/crate/crate-operator/2.40.0/templates/serviceaccount.yaml @@ -0,0 +1,18 @@ +{{- if .Values.serviceAccount.create -}} +--- +apiVersion: v1 +kind: ServiceAccount +metadata: + {{- with .Values.serviceAccount.annotations }} + annotations: + {{- toYaml . | nindent 4 }} + {{- end }} + labels: + {{- include "crate-operator.labels" . | nindent 4 }} + name: {{ include "crate-operator.serviceAccountName" . }} + namespace: {{ .Release.Namespace }} +{{- with .Values.imagePullSecrets }} +imagePullSecrets: + {{- toYaml . | nindent 2 }} +{{- end }} +{{- end }} diff --git a/charts/crate/crate-operator/2.40.0/values.yaml b/charts/crate/crate-operator/2.40.0/values.yaml new file mode 100644 index 000000000..81f3946c0 --- /dev/null +++ b/charts/crate/crate-operator/2.40.0/values.yaml @@ -0,0 +1,65 @@ +--- +# Default values for crate-operator. +# This is a YAML-formatted file. +# Declare variables to be passed into your templates. + +# If the `crate-operator-crds` is already installed, its installation +# can be disabled by changing this value to `false`. +crate-operator-crds: + # Make this disabled if you don't want to install + # the CRD dependency automatically. + enabled: true + +replicaCount: 1 + +image: + repository: crate/crate-operator + pullPolicy: Always + # Overrides the image tag whose default is the chart appVersion. + # tag: latest + +imagePullSecrets: [] +nameOverride: "crate-operator" +fullnameOverride: "crate-operator" + +partOf: cratedb + +env: + CRATEDB_OPERATOR_BOOTSTRAP_TIMEOUT: "1800" + CRATEDB_OPERATOR_DEBUG_VOLUME_SIZE: "128GiB" + CRATEDB_OPERATOR_DEBUG_VOLUME_STORAGE_CLASS: "default" + CRATEDB_OPERATOR_JMX_EXPORTER_VERSION: "1.0.0" + CRATEDB_OPERATOR_LOG_LEVEL: "INFO" + CRATEDB_OPERATOR_ROLLING_RESTART_TIMEOUT: "3600" + CRATEDB_OPERATOR_SCALING_TIMEOUT: "3600" + +envFromSecret: {} + +serviceAccount: + # Specifies whether a service account should be created + create: true + # Annotations to add to the service account + annotations: {} + # The name of the service account to use. + # If not set and create is true, a name is generated using the fullname template + name: "crate-operator" + +rbac: + # Specifies whether RBAC resources should be created + create: true + +podAnnotations: {} + +resources: + limits: + cpu: 250m + memory: 128Mi + requests: + cpu: 250m + memory: 128Mi + +nodeSelector: {} + +tolerations: [] + +affinity: {} diff --git a/charts/speedscale/speedscale-operator/2.2.169/.helmignore b/charts/speedscale/speedscale-operator/2.2.169/.helmignore new file mode 100644 index 000000000..0e8a0eb36 --- /dev/null +++ b/charts/speedscale/speedscale-operator/2.2.169/.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/charts/speedscale/speedscale-operator/2.2.169/Chart.yaml b/charts/speedscale/speedscale-operator/2.2.169/Chart.yaml new file mode 100644 index 000000000..5d1ce9bc7 --- /dev/null +++ b/charts/speedscale/speedscale-operator/2.2.169/Chart.yaml @@ -0,0 +1,27 @@ +annotations: + catalog.cattle.io/certified: partner + catalog.cattle.io/display-name: Speedscale Operator + catalog.cattle.io/kube-version: '>= 1.17.0-0' + catalog.cattle.io/release-name: speedscale-operator +apiVersion: v1 +appVersion: 2.2.169 +description: Stress test your APIs with real world scenarios. Collect and replay + traffic without scripting. +home: https://speedscale.com +icon: file://assets/icons/speedscale-operator.png +keywords: +- speedscale +- test +- testing +- regression +- reliability +- load +- replay +- network +- traffic +kubeVersion: '>= 1.17.0-0' +maintainers: +- email: support@speedscale.com + name: Speedscale Support +name: speedscale-operator +version: 2.2.169 diff --git a/charts/speedscale/speedscale-operator/2.2.169/LICENSE b/charts/speedscale/speedscale-operator/2.2.169/LICENSE new file mode 100644 index 000000000..b78723d62 --- /dev/null +++ b/charts/speedscale/speedscale-operator/2.2.169/LICENSE @@ -0,0 +1,201 @@ + Apache License + Version 2.0, January 2004 + http://www.apache.org/licenses/ + + TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION + + 1. Definitions. + + "License" shall mean the terms and conditions for use, reproduction, + and distribution as defined by Sections 1 through 9 of this document. + + "Licensor" shall mean the copyright owner or entity authorized by + the copyright owner that is granting the License. + + "Legal Entity" shall mean the union of the acting entity and all + other entities that control, are controlled by, or are under common + control with that entity. For the purposes of this definition, + "control" means (i) the power, direct or indirect, to cause the + direction or management of such entity, whether by contract or + otherwise, or (ii) ownership of fifty percent (50%) or more of the + outstanding shares, or (iii) beneficial ownership of such entity. + + "You" (or "Your") shall mean an individual or Legal Entity + exercising permissions granted by this License. + + "Source" form shall mean the preferred form for making modifications, + including but not limited to software source code, documentation + source, and configuration files. + + "Object" form shall mean any form resulting from mechanical + transformation or translation of a Source form, including but + not limited to compiled object code, generated documentation, + and conversions to other media types. + + "Work" shall mean the work of authorship, whether in Source or + Object form, made available under the License, as indicated by a + copyright notice that is included in or attached to the work + (an example is provided in the Appendix below). + + "Derivative Works" shall mean any work, whether in Source or Object + form, that is based on (or derived from) the Work and for which the + editorial revisions, annotations, elaborations, or other modifications + represent, as a whole, an original work of authorship. For the purposes + of this License, Derivative Works shall not include works that remain + separable from, or merely link (or bind by name) to the interfaces of, + the Work and Derivative Works thereof. + + "Contribution" shall mean any work of authorship, including + the original version of the Work and any modifications or additions + to that Work or Derivative Works thereof, that is intentionally + submitted to Licensor for inclusion in the Work by the copyright owner + or by an individual or Legal Entity authorized to submit on behalf of + the copyright owner. For the purposes of this definition, "submitted" + means any form of electronic, verbal, or written communication sent + to the Licensor or its representatives, including but not limited to + communication on electronic mailing lists, source code control systems, + and issue tracking systems that are managed by, or on behalf of, the + Licensor for the purpose of discussing and improving the Work, but + excluding communication that is conspicuously marked or otherwise + designated in writing by the copyright owner as "Not a Contribution." + + "Contributor" shall mean Licensor and any individual or Legal Entity + on behalf of whom a Contribution has been received by Licensor and + subsequently incorporated within the Work. + + 2. Grant of Copyright License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + copyright license to reproduce, prepare Derivative Works of, + publicly display, publicly perform, sublicense, and distribute the + Work and such Derivative Works in Source or Object form. + + 3. Grant of Patent License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + (except as stated in this section) patent license to make, have made, + use, offer to sell, sell, import, and otherwise transfer the Work, + where such license applies only to those patent claims licensable + by such Contributor that are necessarily infringed by their + Contribution(s) alone or by combination of their Contribution(s) + with the Work to which such Contribution(s) was submitted. If You + institute patent litigation against any entity (including a + cross-claim or counterclaim in a lawsuit) alleging that the Work + or a Contribution incorporated within the Work constitutes direct + or contributory patent infringement, then any patent licenses + granted to You under this License for that Work shall terminate + as of the date such litigation is filed. + + 4. Redistribution. You may reproduce and distribute copies of the + Work or Derivative Works thereof in any medium, with or without + modifications, and in Source or Object form, provided that You + meet the following conditions: + + (a) You must give any other recipients of the Work or + Derivative Works a copy of this License; and + + (b) You must cause any modified files to carry prominent notices + stating that You changed the files; and + + (c) You must retain, in the Source form of any Derivative Works + that You distribute, all copyright, patent, trademark, and + attribution notices from the Source form of the Work, + excluding those notices that do not pertain to any part of + the Derivative Works; and + + (d) If the Work includes a "NOTICE" text file as part of its + distribution, then any Derivative Works that You distribute must + include a readable copy of the attribution notices contained + within such NOTICE file, excluding those notices that do not + pertain to any part of the Derivative Works, in at least one + of the following places: within a NOTICE text file distributed + as part of the Derivative Works; within the Source form or + documentation, if provided along with the Derivative Works; or, + within a display generated by the Derivative Works, if and + wherever such third-party notices normally appear. The contents + of the NOTICE file are for informational purposes only and + do not modify the License. You may add Your own attribution + notices within Derivative Works that You distribute, alongside + or as an addendum to the NOTICE text from the Work, provided + that such additional attribution notices cannot be construed + as modifying the License. + + You may add Your own copyright statement to Your modifications and + may provide additional or different license terms and conditions + for use, reproduction, or distribution of Your modifications, or + for any such Derivative Works as a whole, provided Your use, + reproduction, and distribution of the Work otherwise complies with + the conditions stated in this License. + + 5. Submission of Contributions. Unless You explicitly state otherwise, + any Contribution intentionally submitted for inclusion in the Work + by You to the Licensor shall be under the terms and conditions of + this License, without any additional terms or conditions. + Notwithstanding the above, nothing herein shall supersede or modify + the terms of any separate license agreement you may have executed + with Licensor regarding such Contributions. + + 6. Trademarks. This License does not grant permission to use the trade + names, trademarks, service marks, or product names of the Licensor, + except as required for reasonable and customary use in describing the + origin of the Work and reproducing the content of the NOTICE file. + + 7. Disclaimer of Warranty. Unless required by applicable law or + agreed to in writing, Licensor provides the Work (and each + Contributor provides its Contributions) on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or + implied, including, without limitation, any warranties or conditions + of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A + PARTICULAR PURPOSE. You are solely responsible for determining the + appropriateness of using or redistributing the Work and assume any + risks associated with Your exercise of permissions under this License. + + 8. Limitation of Liability. In no event and under no legal theory, + whether in tort (including negligence), contract, or otherwise, + unless required by applicable law (such as deliberate and grossly + negligent acts) or agreed to in writing, shall any Contributor be + liable to You for damages, including any direct, indirect, special, + incidental, or consequential damages of any character arising as a + result of this License or out of the use or inability to use the + Work (including but not limited to damages for loss of goodwill, + work stoppage, computer failure or malfunction, or any and all + other commercial damages or losses), even if such Contributor + has been advised of the possibility of such damages. + + 9. Accepting Warranty or Additional Liability. While redistributing + the Work or Derivative Works thereof, You may choose to offer, + and charge a fee for, acceptance of support, warranty, indemnity, + or other liability obligations and/or rights consistent with this + License. However, in accepting such obligations, You may act only + on Your own behalf and on Your sole responsibility, not on behalf + of any other Contributor, and only if You agree to indemnify, + defend, and hold each Contributor harmless for any liability + incurred by, or claims asserted against, such Contributor by reason + of your accepting any such warranty or additional liability. + + END OF TERMS AND CONDITIONS + + APPENDIX: How to apply the Apache License to your work. + + To apply the Apache License to your work, attach the following + boilerplate notice, with the fields enclosed by brackets "[]" + replaced with your own identifying information. (Don't include + the brackets!) The text should be enclosed in the appropriate + comment syntax for the file format. We also recommend that a + file or class name and description of purpose be included on the + same "printed page" as the copyright notice for easier + identification within third-party archives. + + Copyright 2021 Speedscale + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. diff --git a/charts/speedscale/speedscale-operator/2.2.169/README.md b/charts/speedscale/speedscale-operator/2.2.169/README.md new file mode 100644 index 000000000..97a522e89 --- /dev/null +++ b/charts/speedscale/speedscale-operator/2.2.169/README.md @@ -0,0 +1,108 @@ +# Speedscale Operator + +The [Speedscale](https://www.speedscale.com) Operator is a [Kubernetes operator](https://kubernetes.io/docs/concepts/extend-kubernetes/operator/) +that watches for deployments to be applied to the cluster and takes action based on annotations. The operator +can inject a proxy to capture traffic into or out of applications, or setup an isolation test environment around +a deployment for testing. The operator itself is a deployment that will be always present on the cluster once +the helm chart is installed. + +## Prerequisites + +- Kubernetes 1.20+ +- Helm 3+ +- Appropriate [network and firewall configuration](https://docs.speedscale.com/reference/networking) for Speedscale cloud and webhook traffic + +## Get Repo Info + +```bash +helm repo add speedscale https://speedscale.github.io/operator-helm/ +helm repo update +``` + +_See [helm repo](https://helm.sh/docs/helm/helm_repo/) for command documentation._ + +## Install Chart + +An API key is required. Sign up for a [free Speedscale trial](https://speedscale.com/free-trial/) if you do not have one. + +```bash +helm install speedscale-operator speedscale/speedscale-operator \ + -n speedscale \ + --create-namespace \ + --set apiKey= \ + --set clusterName= +``` + +_See [helm install](https://helm.sh/docs/helm/helm_install/) for command documentation._ + +### Pre-install job failure + +We use pre-install job to check provided API key and provision some of the required resources. + +If the job failed during the installation, you'll see the following error during install: + +``` +Error: INSTALLATION FAILED: failed pre-install: job failed: BackoffLimitExceeded +``` + +You can inspect the logs using this command: + +```bash +kubectl -n speedscale logs job/speedscale-operator-pre-install +``` + +After fixing the error, uninstall the helm release, delete the failed job +and try installing again: + +```bash +helm -n speedscale uninstall speedscale-operator +kubectl -n speedscale delete job speedscale-operator-pre-install +``` + +## Uninstall Chart + +```bash +helm -n speedscale uninstall speedscale-operator +``` + +This removes all the Kubernetes components associated with the chart and deletes the release. + +_See [helm uninstall](https://helm.sh/docs/helm/helm_uninstall/) for command documentation._ + +CRDs created by this chart are not removed by default and should be manually cleaned up: + +```bash +kubectl delete crd trafficreplays.speedscale.com +``` + +## Upgrading Chart + +```bash +helm repo update +helm -n speedscale upgrade speedscale-operator speedscale/speedscale-operator +``` + +Resources capturing traffic will need to be rolled to pick up the latest +Speedscale sidecar. Use the rollout restart command for each namespace and +resource type: + +```bash +kubectl -n rollout restart deployment +``` + +With Helm v3, CRDs created by this chart are not updated by default +and should be manually updated. +Consult also the [Helm Documentation on CRDs](https://helm.sh/docs/chart_best_practices/custom_resource_definitions). + +_See [helm upgrade](https://helm.sh/docs/helm/helm_upgrade/) for command documentation._ + +### Upgrading an existing Release to a new version + +A major chart version change (like v1.2.3 -> v2.0.0) indicates that there is an +incompatible breaking change needing manual actions. + + +## Help + +Speedscale docs information available at [docs.speedscale.com](https://docs.speedscale.com) or join us +on the [Speedscale community Slack](https://join.slack.com/t/speedscalecommunity/shared_invite/zt-x5rcrzn4-XHG1QqcHNXIM~4yozRrz8A)! diff --git a/charts/speedscale/speedscale-operator/2.2.169/app-readme.md b/charts/speedscale/speedscale-operator/2.2.169/app-readme.md new file mode 100644 index 000000000..97a522e89 --- /dev/null +++ b/charts/speedscale/speedscale-operator/2.2.169/app-readme.md @@ -0,0 +1,108 @@ +# Speedscale Operator + +The [Speedscale](https://www.speedscale.com) Operator is a [Kubernetes operator](https://kubernetes.io/docs/concepts/extend-kubernetes/operator/) +that watches for deployments to be applied to the cluster and takes action based on annotations. The operator +can inject a proxy to capture traffic into or out of applications, or setup an isolation test environment around +a deployment for testing. The operator itself is a deployment that will be always present on the cluster once +the helm chart is installed. + +## Prerequisites + +- Kubernetes 1.20+ +- Helm 3+ +- Appropriate [network and firewall configuration](https://docs.speedscale.com/reference/networking) for Speedscale cloud and webhook traffic + +## Get Repo Info + +```bash +helm repo add speedscale https://speedscale.github.io/operator-helm/ +helm repo update +``` + +_See [helm repo](https://helm.sh/docs/helm/helm_repo/) for command documentation._ + +## Install Chart + +An API key is required. Sign up for a [free Speedscale trial](https://speedscale.com/free-trial/) if you do not have one. + +```bash +helm install speedscale-operator speedscale/speedscale-operator \ + -n speedscale \ + --create-namespace \ + --set apiKey= \ + --set clusterName= +``` + +_See [helm install](https://helm.sh/docs/helm/helm_install/) for command documentation._ + +### Pre-install job failure + +We use pre-install job to check provided API key and provision some of the required resources. + +If the job failed during the installation, you'll see the following error during install: + +``` +Error: INSTALLATION FAILED: failed pre-install: job failed: BackoffLimitExceeded +``` + +You can inspect the logs using this command: + +```bash +kubectl -n speedscale logs job/speedscale-operator-pre-install +``` + +After fixing the error, uninstall the helm release, delete the failed job +and try installing again: + +```bash +helm -n speedscale uninstall speedscale-operator +kubectl -n speedscale delete job speedscale-operator-pre-install +``` + +## Uninstall Chart + +```bash +helm -n speedscale uninstall speedscale-operator +``` + +This removes all the Kubernetes components associated with the chart and deletes the release. + +_See [helm uninstall](https://helm.sh/docs/helm/helm_uninstall/) for command documentation._ + +CRDs created by this chart are not removed by default and should be manually cleaned up: + +```bash +kubectl delete crd trafficreplays.speedscale.com +``` + +## Upgrading Chart + +```bash +helm repo update +helm -n speedscale upgrade speedscale-operator speedscale/speedscale-operator +``` + +Resources capturing traffic will need to be rolled to pick up the latest +Speedscale sidecar. Use the rollout restart command for each namespace and +resource type: + +```bash +kubectl -n rollout restart deployment +``` + +With Helm v3, CRDs created by this chart are not updated by default +and should be manually updated. +Consult also the [Helm Documentation on CRDs](https://helm.sh/docs/chart_best_practices/custom_resource_definitions). + +_See [helm upgrade](https://helm.sh/docs/helm/helm_upgrade/) for command documentation._ + +### Upgrading an existing Release to a new version + +A major chart version change (like v1.2.3 -> v2.0.0) indicates that there is an +incompatible breaking change needing manual actions. + + +## Help + +Speedscale docs information available at [docs.speedscale.com](https://docs.speedscale.com) or join us +on the [Speedscale community Slack](https://join.slack.com/t/speedscalecommunity/shared_invite/zt-x5rcrzn4-XHG1QqcHNXIM~4yozRrz8A)! diff --git a/charts/speedscale/speedscale-operator/2.2.169/questions.yaml b/charts/speedscale/speedscale-operator/2.2.169/questions.yaml new file mode 100644 index 000000000..29aee3895 --- /dev/null +++ b/charts/speedscale/speedscale-operator/2.2.169/questions.yaml @@ -0,0 +1,9 @@ +questions: +- variable: apiKey + default: "fffffffffffffffffffffffffffffffffffffffffffff" + description: "An API key is required to connect to the Speedscale cloud." + required: true + type: string + label: API Key + group: Authentication + diff --git a/charts/speedscale/speedscale-operator/2.2.169/templates/NOTES.txt b/charts/speedscale/speedscale-operator/2.2.169/templates/NOTES.txt new file mode 100644 index 000000000..cabb59b17 --- /dev/null +++ b/charts/speedscale/speedscale-operator/2.2.169/templates/NOTES.txt @@ -0,0 +1,12 @@ +Thank you for installing the Speedscale Operator! + +Next you'll need to add the Speedscale Proxy Sidecar to your deployments. +See https://docs.speedscale.com/setup/sidecar/install/ + +If upgrading use the rollout restart command for each namespace and resource +type to ensure Speedscale sidecars are updated: + + kubectl -n rollout restart deployment + +Once your deployment is running the sidecar your service will show up on +https://app.speedscale.com/. diff --git a/charts/speedscale/speedscale-operator/2.2.169/templates/admission.yaml b/charts/speedscale/speedscale-operator/2.2.169/templates/admission.yaml new file mode 100644 index 000000000..9a2a943d3 --- /dev/null +++ b/charts/speedscale/speedscale-operator/2.2.169/templates/admission.yaml @@ -0,0 +1,199 @@ +{{- $cacrt := "" -}} +{{- $crt := "" -}} +{{- $key := "" -}} +{{- $s := (lookup "v1" "Secret" .Release.Namespace "speedscale-webhook-certs") -}} +{{- if $s -}} +{{- $cacrt = index $s.data "ca.crt" | default (index $s.data "tls.crt") | b64dec -}} +{{- $crt = index $s.data "tls.crt" | b64dec -}} +{{- $key = index $s.data "tls.key" | b64dec -}} +{{ else }} +{{- $altNames := list ( printf "speedscale-operator.%s" .Release.Namespace ) ( printf "speedscale-operator.%s.svc" .Release.Namespace ) -}} +{{- $ca := genCA "speedscale-operator" 3650 -}} +{{- $cert := genSignedCert "speedscale-operator" nil $altNames 3650 $ca -}} +{{- $cacrt = $ca.Cert -}} +{{- $crt = $cert.Cert -}} +{{- $key = $cert.Key -}} +{{- end -}} +--- +apiVersion: admissionregistration.k8s.io/v1 +kind: MutatingWebhookConfiguration +metadata: + creationTimestamp: null + name: speedscale-operator + annotations: + argocd.argoproj.io/hook: PreSync + {{- if .Values.globalAnnotations }} +{{ toYaml .Values.globalAnnotations | indent 4}} + {{- end }} +webhooks: +- admissionReviewVersions: + - v1 + clientConfig: + caBundle: {{ $cacrt | b64enc }} + service: + name: speedscale-operator + namespace: {{ .Release.Namespace }} + path: /mutate + failurePolicy: Ignore + name: sidecar.speedscale.com + namespaceSelector: + matchExpressions: + - key: kubernetes.io/metadata.name + operator: "NotIn" + values: + - kube-system + - kube-node-lease + {{- if .Values.namespaceSelector }} + - key: kubernetes.io/metadata.name + operator: "In" + values: + {{- range .Values.namespaceSelector }} + - {{ . | quote }} + {{- end }} + {{- end }} + reinvocationPolicy: IfNeeded + rules: + - apiGroups: + - apps + - batch + apiVersions: + - v1 + operations: + - CREATE + - UPDATE + - DELETE + resources: + - deployments + - statefulsets + - daemonsets + - jobs + - replicasets + - apiGroups: + - "" + apiVersions: + - v1 + operations: + - CREATE + - UPDATE + - DELETE + resources: + - pods + sideEffects: None + timeoutSeconds: 10 +--- +apiVersion: admissionregistration.k8s.io/v1 +kind: MutatingWebhookConfiguration +metadata: + creationTimestamp: null + name: speedscale-operator-replay + annotations: + argocd.argoproj.io/hook: PreSync + {{- if .Values.globalAnnotations }} +{{ toYaml .Values.globalAnnotations | indent 4}} + {{- end }} +webhooks: +- admissionReviewVersions: + - v1 + clientConfig: + caBundle: {{ $cacrt | b64enc }} + service: + name: speedscale-operator + namespace: {{ .Release.Namespace }} + path: /mutate-speedscale-com-v1-trafficreplay + failurePolicy: Fail + name: replay.speedscale.com + namespaceSelector: + matchExpressions: + - key: kubernetes.io/metadata.name + operator: "NotIn" + values: + - kube-system + - kube-node-lease + {{- if .Values.namespaceSelector }} + - key: kubernetes.io/metadata.name + operator: "In" + values: + {{- range .Values.namespaceSelector }} + - {{ . | quote }} + {{- end }} + {{- end }} + rules: + - apiGroups: + - speedscale.com + apiVersions: + - v1 + operations: + - CREATE + - UPDATE + resources: + - trafficreplays + sideEffects: None + timeoutSeconds: 10 +--- +apiVersion: admissionregistration.k8s.io/v1 +kind: ValidatingWebhookConfiguration +metadata: + creationTimestamp: null + name: speedscale-operator-replay + annotations: + argocd.argoproj.io/hook: PreSync + {{- if .Values.globalAnnotations }} +{{ toYaml .Values.globalAnnotations | indent 4}} + {{- end }} +webhooks: +- admissionReviewVersions: + - v1 + clientConfig: + caBundle: {{ $cacrt | b64enc }} + service: + name: speedscale-operator + namespace: {{ .Release.Namespace }} + path: /validate-speedscale-com-v1-trafficreplay + failurePolicy: Fail + name: replay.speedscale.com + namespaceSelector: + matchExpressions: + - key: kubernetes.io/metadata.name + operator: "NotIn" + values: + - kube-system + - kube-node-lease + {{- if .Values.namespaceSelector }} + - key: kubernetes.io/metadata.name + operator: "In" + values: + {{- range .Values.namespaceSelector }} + - {{ . | quote }} + {{- end }} + {{- end }} + rules: + - apiGroups: + - speedscale.com + apiVersions: + - v1 + operations: + - CREATE + - UPDATE + - DELETE + resources: + - trafficreplays + sideEffects: None + timeoutSeconds: 10 +--- +apiVersion: v1 +kind: Secret +metadata: + annotations: + helm.sh/hook: pre-install + helm.sh/hook-delete-policy: before-hook-creation + {{- if .Values.globalAnnotations }} +{{ toYaml .Values.globalAnnotations | indent 4}} + {{- end }} + creationTimestamp: null + name: speedscale-webhook-certs + namespace: {{ .Release.Namespace }} +type: kubernetes.io/tls +data: + ca.crt: {{ $cacrt | b64enc }} + tls.crt: {{ $crt | b64enc }} + tls.key: {{ $key | b64enc }} diff --git a/charts/speedscale/speedscale-operator/2.2.169/templates/configmap.yaml b/charts/speedscale/speedscale-operator/2.2.169/templates/configmap.yaml new file mode 100644 index 000000000..af735e288 --- /dev/null +++ b/charts/speedscale/speedscale-operator/2.2.169/templates/configmap.yaml @@ -0,0 +1,41 @@ +--- +apiVersion: v1 +kind: ConfigMap +metadata: + name: speedscale-operator + namespace: {{ .Release.Namespace }} + annotations: + argocd.argoproj.io/hook: PreSync + {{- if .Values.globalAnnotations }} +{{ toYaml .Values.globalAnnotations | indent 4}} + {{- end }} +data: + CLUSTER_NAME: {{ .Values.clusterName }} + IMAGE_PULL_POLICY: {{ .Values.image.pullPolicy }} + IMAGE_PULL_SECRETS: "" + IMAGE_REGISTRY: {{ .Values.image.registry }} + IMAGE_TAG: {{ .Values.image.tag }} + INSTANCE_ID: '{{- $cm := (lookup "v1" "ConfigMap" .Release.Namespace "speedscale-operator") -}}{{ if $cm }}{{ $cm.data.INSTANCE_ID }}{{ else }}{{ ( printf "%s-%s" .Values.clusterName uuidv4 ) }}{{ end }}' + LOG_LEVEL: {{ .Values.logLevel }} + SPEEDSCALE_DLP_CONFIG: {{ .Values.dlp.config }} + SPEEDSCALE_FILTER_RULE: {{ .Values.filterRule }} + TELEMETRY_INTERVAL: 1s + WITH_DLP: {{ .Values.dlp.enabled | quote }} + WITH_INSPECTOR: {{ .Values.dashboardAccess | quote }} + API_KEY_SECRET_NAME: {{ .Values.apiKeySecret | quote }} + DEPLOY_DEMO: {{ .Values.deployDemo | quote }} + GLOBAL_ANNOTATIONS: {{ .Values.globalAnnotations | toJson | quote }} + GLOBAL_LABELS: {{ .Values.globalLabels | toJson | quote }} + {{- if .Values.http_proxy }} + HTTP_PROXY: {{ .Values.http_proxy }} + {{- end }} + {{- if .Values.https_proxy }} + HTTPS_PROXY: {{ .Values.https_proxy }} + {{- end }} + {{- if .Values.no_proxy }} + NO_PROXY: {{ .Values.no_proxy }} + {{- end }} + PRIVILEGED_SIDECARS: {{ .Values.privilegedSidecars | quote }} + DISABLE_SMARTDNS: {{ .Values.disableSidecarSmartReverseDNS | quote }} + SIDECAR_CONFIG: {{ .Values.sidecar | toJson | quote }} + FORWARDER_CONFIG: {{ .Values.forwarder | toJson | quote }} diff --git a/charts/speedscale/speedscale-operator/2.2.169/templates/crds/trafficreplays.yaml b/charts/speedscale/speedscale-operator/2.2.169/templates/crds/trafficreplays.yaml new file mode 100644 index 000000000..9a85d5da4 --- /dev/null +++ b/charts/speedscale/speedscale-operator/2.2.169/templates/crds/trafficreplays.yaml @@ -0,0 +1,514 @@ +apiVersion: apiextensions.k8s.io/v1 +kind: CustomResourceDefinition +metadata: + annotations: + controller-gen.kubebuilder.io/version: v0.15.0 + creationTimestamp: null + name: trafficreplays.speedscale.com +spec: + group: speedscale.com + names: + kind: TrafficReplay + listKind: TrafficReplayList + plural: trafficreplays + shortNames: + - replay + singular: trafficreplay + scope: Namespaced + versions: + - additionalPrinterColumns: + - jsonPath: .status.active + name: Active + type: boolean + - jsonPath: .spec.mode + name: Mode + type: string + - jsonPath: .status.conditions[-1:].message + name: Status + type: string + - jsonPath: .metadata.creationTimestamp + name: Age + type: date + name: v1 + schema: + openAPIV3Schema: + description: TrafficReplay is the Schema for the trafficreplays 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: TrafficReplaySpec defines the desired state of TrafficReplay + properties: + buildTag: + description: |- + BuildTag links a unique tag, build hash, etc. to the generated + traffic replay report. That way you can connect the report results to the + version of the code that was tested. + type: string + cleanup: + description: |- + Cleanup is the name of cleanup mode used for this + TrafficReplay. + enum: + - inventory + - all + - none + type: string + collectLogs: + description: |- + CollectLogs enables or disables log collection from target + workload. Defaults to true. + DEPRECATED: use TestReport.ActualConfig.Cluster.CollectLogs + type: boolean + configChecksum: + description: |- + ConfigChecksum, managed my the operator, is the SHA1 checksum of the + configuration. + type: string + customURL: + description: CustomURL allows to specify custom URL to the SUT. + type: string + generatorLowData: + description: |- + GeneratorLowData forces the generator into a high + efficiency/low data output mode. This is ideal for high volume + performance tests. Defaults to false. + DEPRECATED + type: boolean + mode: + description: Mode is the name of replay mode used for this TrafficReplay. + enum: + - full-replay + - responder-only + - generator-only + type: string + needsReport: + description: Indicates whether a responder-only replay needs a report. + type: boolean + proxyMode: + description: |- + ProxyMode defines proxy operational mode used with injected sidecar. + DEPRECATED + type: string + responderLowData: + description: |- + ResponderLowData forces the responder into a high + efficiency/low data output mode. This is ideal for high volume + performance tests. Defaults to false. + DEPRECATED + type: boolean + secretRefs: + description: |- + SecretRefs hold the references to the secrets which contain + various secrets like (e.g. short-lived JWTs to be used by the generator + for authorization with HTTP calls). + items: + description: |- + LocalObjectReference contains enough information to locate the referenced + Kubernetes resource object. + properties: + name: + description: Name of the referent. + type: string + required: + - name + type: object + type: array + sidecar: + description: |- + Sidecar defines sidecar specific configuration. + DEPRECATED: use Workloads + properties: + inject: + description: 'DEPRECATED: do not use' + type: boolean + patch: + description: Patch is .yaml file patch for the Workload + format: byte + type: string + tls: + properties: + in: + description: In provides configuration for sidecar inbound + TLS. + properties: + private: + description: Private is the filename of the TLS inbound + private key. + type: string + public: + description: Public is the filename of the TLS inbound + public key. + type: string + secret: + description: Secret is a secret with the TLS keys to use + for inbound traffic. + type: string + type: object + mutual: + description: Mutual provides configuration for sidecar mutual + TLS. + properties: + private: + description: Private is the filename of the mutual TLS + private key. + type: string + public: + description: Public is the filename of the mutual TLS + public key. + type: string + secret: + description: Secret is a secret with the mutual TLS keys. + type: string + type: object + out: + description: |- + Out enables or disables TLS out on the + sidecar during replay. + type: boolean + type: object + type: object + snapshotID: + description: |- + SnapshotID is the id of the traffic snapshot for this + TrafficReplay. + type: string + testConfigID: + description: |- + TestConfigID is the id of the replay configuration to be used + by the generator and responder for the TrafficReplay. + type: string + timeout: + description: |- + Timeout is the time to wait for replay test to finish. Defaults + to value of the `TIMEOUT` setting of the operator. + type: string + ttlAfterReady: + description: |- + TTLAfterReady provides a TTL (time to live) mechanism to limit + the lifetime of TrafficReplay object that have finished the execution and + reached its final state (either complete or failed). + type: string + workloadRef: + description: |- + WorkloadRef is the reference to the target workload (SUT) for + TrafficReplay. The operations will be performed in the namespace of the + target object. + DEPRECATED: use Workloads + properties: + apiVersion: + description: API version of the referenced object. + type: string + kind: + description: Kind of the referenced object. Defaults to "Deployment". + type: string + name: + description: Name of the referenced object. + type: string + namespace: + description: Namespace of the referenced object. Defaults to the + TrafficReplay namespace. + type: string + required: + - name + type: object + workloads: + description: |- + Workloads define target workloads (SUT) for a TrafficReplay. Many + workloads may be provided, or none. Workloads may be modified and + restarted during replay to configure communication with a responder. + items: + description: |- + Workload represents a Kubernetes workload to be targeted during replay and + associated settings. + properties: + customURI: + description: CustomURI will be target of the traffic instead + of directly targeting workload + type: string + inTrafficKey: + description: 'DEPRECATED: use InTrafficKeys' + type: string + inTrafficKeys: + description: 'DEPRECATED: use Tests' + items: + type: string + type: array + mocks: + description: |- + Mocks are strings used to identify slices of outbound snapshot traffic to + mock for this workload and maps directly to a snapshot's `OutTraffic` + field. Snapshot egress traffic can be split across multiple slices where + each slice contains part of the traffic. A workload may specify multiple + keys and multiple workloads may specify the same key. + + + Only the traffic slices defined here will be mocked. A workload with no + keys defined will not mock any traffic. Pass '*' to mock all traffic. + + + Mock strings may only match part of the snapshot's `OutTraffic` key if the + string matches exactly one key. For example, the test string + `foo.example.com` would match the `OutTraffic` key of + my-service:foo.example.com:8080, as long as no other keys would match + `foo.example.com`. Multiple mocks must be specified for multiple keys + unless using '*'. + items: + type: string + type: array + outTrafficKeys: + description: 'DEPRECATED: use Mocks' + items: + type: string + type: array + ref: + description: |- + Ref is a reference to a cluster workload, like a deployment or a + statefulset. + properties: + apiVersion: + description: API version of the referenced object. + type: string + kind: + description: Kind of the referenced object. Defaults to + "Deployment". + type: string + name: + description: Name of the referenced object. + type: string + namespace: + description: Namespace of the referenced object. Defaults + to the TrafficReplay namespace. + type: string + required: + - name + type: object + routing: + description: Routing configures how workloads route egress traffic + to responders + enum: + - hostalias + - nat + type: string + sidecar: + description: |- + TODO: this is not implemented, come back and replace deprecated Sidecar with workload specific settings + Sidecar defines sidecar specific configuration. + properties: + inject: + description: 'DEPRECATED: do not use' + type: boolean + patch: + description: Patch is .yaml file patch for the Workload + format: byte + type: string + tls: + properties: + in: + description: In provides configuration for sidecar inbound + TLS. + properties: + private: + description: Private is the filename of the TLS + inbound private key. + type: string + public: + description: Public is the filename of the TLS inbound + public key. + type: string + secret: + description: Secret is a secret with the TLS keys + to use for inbound traffic. + type: string + type: object + mutual: + description: Mutual provides configuration for sidecar + mutual TLS. + properties: + private: + description: Private is the filename of the mutual + TLS private key. + type: string + public: + description: Public is the filename of the mutual + TLS public key. + type: string + secret: + description: Secret is a secret with the mutual + TLS keys. + type: string + type: object + out: + description: |- + Out enables or disables TLS out on the + sidecar during replay. + type: boolean + type: object + type: object + tests: + description: |- + Tests are strings used to identify slices of inbound snapshot traffic this + workload is targeting and maps directly to a snapshot's `InTraffic` field. + Snapshot ingress traffic can be split across multiple slices where each + slice contains part of the traffic. A key must only be specified once + across all workloads, but a workload may specify multiple keys. + + + Test strings may only match part of the snapshot's `InTraffic` key if the + string matches exactly one key. For example, the test string + `foo.example.com` would match the `InTraffic` key of + my-service:foo.example.com:8080, as long as no other keys would match + `foo.example.com` + + + This field is optional in the spec to provide support for single-workload + and legacy replays, but must be specified for multi-workload replays in + order to provide deterministic replay configuration. + items: + type: string + type: array + type: object + type: array + required: + - snapshotID + - testConfigID + type: object + status: + default: + observedGeneration: -1 + description: TrafficReplayStatus defines the observed state of TrafficReplay + properties: + active: + description: Active indicates whether this traffic replay is currently + underway or not. + type: boolean + conditions: + items: + description: "Condition contains details for one aspect of the current + state of this API Resource.\n---\nThis struct is intended for + direct use as an array at the field path .status.conditions. For + example,\n\n\n\ttype FooStatus struct{\n\t // Represents the + observations of a foo's current state.\n\t // Known .status.conditions.type + are: \"Available\", \"Progressing\", and \"Degraded\"\n\t // + +patchMergeKey=type\n\t // +patchStrategy=merge\n\t // +listType=map\n\t + \ // +listMapKey=type\n\t Conditions []metav1.Condition `json:\"conditions,omitempty\" + patchStrategy:\"merge\" patchMergeKey:\"type\" protobuf:\"bytes,1,rep,name=conditions\"`\n\n\n\t + \ // other fields\n\t}" + 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. + --- + Many .condition.type values are consistent across resources like Available, but because arbitrary conditions can be + useful (see .node.status.conditions), the ability to deconflict is important. + The regex it matches is (dns1123SubdomainFmt/)?(qualifiedNameFmt) + 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 + finishedTime: + description: Information when the traffic replay has finished. + format: date-time + type: string + initializedTime: + description: Information when the test environment was successfully + prepared. + format: date-time + type: string + lastHeartbeatTime: + description: 'DEPRECATED: will not be set' + format: date-time + type: string + observedGeneration: + description: ObservedGeneration is the last observed generation. + format: int64 + type: integer + reconcileFailures: + description: |- + ReconcileFailures is the number of times the traffic replay controller + experienced an error during the reconciliation process. The traffic + replay will be deleted if too many errors occur. + format: int64 + type: integer + reportID: + description: The id of the traffic replay report created. + type: string + reportURL: + description: The url to the traffic replay report. + type: string + startedTime: + description: Information when the traffic replay has started. + format: date-time + type: string + type: object + type: object + served: true + storage: true + subresources: + status: {} +status: + acceptedNames: + kind: "" + plural: "" + conditions: null + storedVersions: null diff --git a/charts/speedscale/speedscale-operator/2.2.169/templates/deployments.yaml b/charts/speedscale/speedscale-operator/2.2.169/templates/deployments.yaml new file mode 100644 index 000000000..e5f329257 --- /dev/null +++ b/charts/speedscale/speedscale-operator/2.2.169/templates/deployments.yaml @@ -0,0 +1,132 @@ +--- +apiVersion: apps/v1 +kind: Deployment +metadata: + annotations: + operator.speedscale.com/ignore: "true" + {{- if .Values.globalAnnotations }} +{{ toYaml .Values.globalAnnotations | indent 4}} + {{- end }} + labels: + app: speedscale-operator + controlplane.speedscale.com/component: operator + {{- if .Values.globalLabels }} +{{ toYaml .Values.globalLabels | indent 4}} + {{- end }} + name: speedscale-operator + namespace: {{ .Release.Namespace }} +spec: + replicas: 1 + selector: + matchLabels: + app: speedscale-operator + controlplane.speedscale.com/component: operator + strategy: + type: Recreate + template: + metadata: + annotations: + {{- if .Values.globalAnnotations }} +{{ toYaml .Values.globalAnnotations | indent 8}} + {{- end }} + labels: + app: speedscale-operator + controlplane.speedscale.com/component: operator + {{- if .Values.globalLabels }} +{{ toYaml .Values.globalLabels | indent 8}} + {{- end }} + spec: + containers: + - command: + - /operator + env: + - name: POD_NAME + valueFrom: + fieldRef: + apiVersion: v1 + fieldPath: metadata.name + - name: POD_NAMESPACE + valueFrom: + fieldRef: + apiVersion: v1 + fieldPath: metadata.namespace + envFrom: + - configMapRef: + name: speedscale-operator + # https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.23/#container-v1-core + # When a key exists in multiple sources, the value associated with the last source will take precedence. + # Values defined by an Env with a duplicate key will take precedence. + - configMapRef: + name: speedscale-operator-override + optional: true + - secretRef: + name: '{{ ne .Values.apiKeySecret "" | ternary .Values.apiKeySecret "speedscale-apikey" }}' + optional: false + image: '{{ .Values.image.registry }}/operator:{{ .Values.image.tag }}' + imagePullPolicy: {{ .Values.image.pullPolicy }} + livenessProbe: + failureThreshold: 5 + httpGet: + path: /healthz + port: health-check + scheme: HTTP + initialDelaySeconds: 30 + periodSeconds: 30 + successThreshold: 1 + timeoutSeconds: 5 + name: operator + ports: + - containerPort: 443 + name: webhook-server + - containerPort: 8081 + name: health-check + readinessProbe: + failureThreshold: 10 + httpGet: + path: /readyz + port: health-check + scheme: HTTP + initialDelaySeconds: 5 + periodSeconds: 5 + successThreshold: 1 + timeoutSeconds: 5 + resources: {{- toYaml .Values.operator.resources | nindent 10 }} + securityContext: + allowPrivilegeEscalation: false + privileged: false + readOnlyRootFilesystem: true + runAsNonRoot: false + # Run as root to bind 443 https://github.com/kubernetes/kubernetes/issues/56374 + runAsUser: 0 + volumeMounts: + - mountPath: /tmp + name: tmp + - mountPath: /tmp/k8s-webhook-server/serving-certs + name: webhook-certs + readOnly: true + - mountPath: /etc/ssl/speedscale + name: speedscale-tls-out + readOnly: true + hostNetwork: {{ .Values.hostNetwork }} + securityContext: + runAsNonRoot: true + serviceAccountName: speedscale-operator + terminationGracePeriodSeconds: 10 + volumes: + - emptyDir: {} + name: tmp + - name: webhook-certs + secret: + secretName: speedscale-webhook-certs + - name: speedscale-tls-out + secret: + secretName: speedscale-certs + {{- if .Values.affinity }} + affinity: {{ toYaml .Values.affinity | nindent 8 }} + {{- end }} + {{- if .Values.tolerations }} + tolerations: {{ toYaml .Values.tolerations | nindent 8 }} + {{- end }} + {{- if .Values.nodeSelector }} + nodeSelector: {{ toYaml .Values.nodeSelector | nindent 8 }} + {{- end }} diff --git a/charts/speedscale/speedscale-operator/2.2.169/templates/hooks.yaml b/charts/speedscale/speedscale-operator/2.2.169/templates/hooks.yaml new file mode 100644 index 000000000..3e8231f19 --- /dev/null +++ b/charts/speedscale/speedscale-operator/2.2.169/templates/hooks.yaml @@ -0,0 +1,73 @@ +--- +apiVersion: batch/v1 +kind: Job +metadata: + annotations: + helm.sh/hook: pre-install + helm.sh/hook-delete-policy: before-hook-creation,hook-succeeded + helm.sh/hook-weight: "4" + {{- if .Values.globalAnnotations }} +{{ toYaml .Values.globalAnnotations | indent 4}} + {{- end }} + creationTimestamp: null + name: speedscale-operator-pre-install + namespace: {{ .Release.Namespace }} + labels: + {{- if .Values.globalLabels }} +{{ toYaml .Values.globalLabels | indent 4}} + {{- end }} +spec: + backoffLimit: 0 + ttlSecondsAfterFinished: 30 + template: + metadata: + annotations: + {{- if .Values.globalAnnotations }} +{{ toYaml .Values.globalAnnotations | indent 8}} + {{- end }} + creationTimestamp: null + labels: + {{- if .Values.globalLabels }} +{{ toYaml .Values.globalLabels | indent 8}} + {{- end }} + spec: + containers: + - args: + - |- + # ensure valid settings before the chart reports a successfull install + {{- if .Values.http_proxy }} + HTTP_PROXY={{ .Values.http_proxy | quote }} \ + {{- end }} + {{- if .Values.https_proxy }} + HTTPS_PROXY={{ .Values.https_proxy | quote }} \ + {{- end }} + {{- if .Values.no_proxy }} + NO_PROXY={{ .Values.no_proxy | quote }} \ + {{- end }} + speedctl init --overwrite --no-rcfile-update \ + --api-key $SPEEDSCALE_API_KEY \ + --app-url $SPEEDSCALE_APP_URL + + # in case we're in istio + curl -X POST http://127.0.0.1:15000/quitquitquit || true + command: + - sh + - -c + envFrom: + - secretRef: + name: '{{ ne .Values.apiKeySecret "" | ternary .Values.apiKeySecret "speedscale-apikey" }}' + optional: false + image: '{{ .Values.image.registry }}/speedscale-cli:{{ .Values.image.tag }}' + imagePullPolicy: {{ .Values.image.pullPolicy }} + name: speedscale-cli + resources: {} + restartPolicy: Never + {{- if .Values.affinity }} + affinity: {{ toYaml .Values.affinity | nindent 8 }} + {{- end }} + {{- if .Values.tolerations }} + tolerations: {{ toYaml .Values.tolerations | nindent 8 }} + {{- end }} + {{- if .Values.nodeSelector }} + nodeSelector: {{ toYaml .Values.nodeSelector | nindent 8 }} + {{- end }} diff --git a/charts/speedscale/speedscale-operator/2.2.169/templates/rbac.yaml b/charts/speedscale/speedscale-operator/2.2.169/templates/rbac.yaml new file mode 100644 index 000000000..e1ea42d99 --- /dev/null +++ b/charts/speedscale/speedscale-operator/2.2.169/templates/rbac.yaml @@ -0,0 +1,244 @@ +--- +apiVersion: rbac.authorization.k8s.io/v1 +kind: ClusterRole +metadata: + creationTimestamp: null + name: speedscale-operator + {{- if .Values.globalAnnotations }} + annotations: {{ toYaml .Values.globalAnnotations | nindent 4 }} + {{- end }} +rules: +- apiGroups: + - apps + resources: + - deployments + - statefulsets + - daemonsets + verbs: + - create + - delete + - deletecollection + - get + - list + - patch + - update + - watch +- apiGroups: + - apps + resources: + - replicasets + verbs: + - delete + - deletecollection + - get + - list + - patch + - update + - watch +- apiGroups: + - batch + resources: + - jobs + verbs: + - create + - delete + - deletecollection + - get + - list + - patch + - update + - watch +- apiGroups: + - apiextensions.k8s.io + resources: + - customresourcedefinitions + verbs: + - get + - list +- apiGroups: + - admissionregistration.k8s.io + resources: + - mutatingwebhookconfigurations + - validatingwebhookconfigurations + verbs: + - get + - list +- apiGroups: + - rbac.authorization.k8s.io + resources: + - clusterrolebindings + - clusterroles + verbs: + - get + - list +- apiGroups: + - "" + resources: + - namespaces + verbs: + - get + - list + - watch +- apiGroups: + - "" + resources: + - configmaps + - secrets + - pods + - services + - serviceaccounts + verbs: + - create + - delete + - deletecollection + - get + - list + - patch + - update + - watch +- apiGroups: + - "" + resources: + - pods/log + verbs: + - get + - list +- apiGroups: + - "" + resources: + - events + verbs: + - get + - list + - watch +- apiGroups: + - "" + resources: + - nodes + verbs: + - get + - list + - watch +- apiGroups: + - metrics.k8s.io + resources: + - pods + verbs: + - get + - list + - watch +- apiGroups: + - rbac.authorization.k8s.io + resources: + - rolebindings + - roles + verbs: + - create + - delete + - deletecollection + - get + - list + - patch + - update + - watch +- apiGroups: + - networking.istio.io + resources: + - envoyfilters + - sidecars + verbs: + - create + - delete + - deletecollection + - get + - list + - patch + - update + - watch +- apiGroups: + - security.istio.io + resources: + - peerauthentications + verbs: + - create + - delete + - deletecollection + - get + - list + - patch + - update + - watch +- apiGroups: + - coordination.k8s.io + resources: + - leases + verbs: + - create + - delete + - deletecollection + - get + - list + - patch + - update + - watch +- apiGroups: + - speedscale.com + resources: + - trafficreplays + verbs: + - create + - delete + - deletecollection + - get + - list + - patch + - update + - watch +- apiGroups: + - speedscale.com + resources: + - trafficreplays/status + verbs: + - get + - update + - patch +- apiGroups: + - argoproj.io + resources: + - rollouts + verbs: + - get + - list + - patch + - update + - watch +--- +apiVersion: rbac.authorization.k8s.io/v1 +kind: ClusterRoleBinding +metadata: + name: speedscale-operator + {{- if .Values.globalAnnotations }} + annotations: {{ toYaml .Values.globalAnnotations | nindent 4 }} + {{- end }} +roleRef: + apiGroup: rbac.authorization.k8s.io + kind: ClusterRole + name: speedscale-operator +subjects: +- kind: ServiceAccount + name: speedscale-operator + namespace: {{ .Release.Namespace }} +--- +apiVersion: v1 +automountServiceAccountToken: true +kind: ServiceAccount +metadata: + creationTimestamp: null + labels: + app: speedscale-operator + controlplane.speedscale.com/component: operator + name: speedscale-operator + namespace: {{ .Release.Namespace }} + {{- if .Values.globalAnnotations }} + annotations: {{ toYaml .Values.globalAnnotations | nindent 4 }} + {{- end }} diff --git a/charts/speedscale/speedscale-operator/2.2.169/templates/secrets.yaml b/charts/speedscale/speedscale-operator/2.2.169/templates/secrets.yaml new file mode 100644 index 000000000..1fb6999e4 --- /dev/null +++ b/charts/speedscale/speedscale-operator/2.2.169/templates/secrets.yaml @@ -0,0 +1,18 @@ +--- +{{ if .Values.apiKey }} +apiVersion: v1 +kind: Secret +metadata: + name: speedscale-apikey + namespace: {{ .Release.Namespace }} + annotations: + helm.sh/hook: pre-install + helm.sh/hook-weight: "3" + {{- if .Values.globalAnnotations }} +{{ toYaml .Values.globalAnnotations | indent 4}} + {{- end }} +type: Opaque +data: + SPEEDSCALE_API_KEY: {{ .Values.apiKey | b64enc }} + SPEEDSCALE_APP_URL: {{ .Values.appUrl | b64enc }} +{{ end }} diff --git a/charts/speedscale/speedscale-operator/2.2.169/templates/services.yaml b/charts/speedscale/speedscale-operator/2.2.169/templates/services.yaml new file mode 100644 index 000000000..f9da2c25c --- /dev/null +++ b/charts/speedscale/speedscale-operator/2.2.169/templates/services.yaml @@ -0,0 +1,22 @@ +--- +apiVersion: v1 +kind: Service +metadata: + creationTimestamp: null + labels: + app: speedscale-operator + controlplane.speedscale.com/component: operator + name: speedscale-operator + namespace: {{ .Release.Namespace }} + {{- if .Values.globalAnnotations }} + annotations: {{ toYaml .Values.globalAnnotations | nindent 4 }} + {{- end }} +spec: + ports: + - port: 443 + protocol: TCP + selector: + app: speedscale-operator + controlplane.speedscale.com/component: operator +status: + loadBalancer: {} diff --git a/charts/speedscale/speedscale-operator/2.2.169/templates/tls.yaml b/charts/speedscale/speedscale-operator/2.2.169/templates/tls.yaml new file mode 100644 index 000000000..4a2456288 --- /dev/null +++ b/charts/speedscale/speedscale-operator/2.2.169/templates/tls.yaml @@ -0,0 +1,183 @@ +{{- $crt := "" -}} +{{- $key := "" -}} +{{- $s := (lookup "v1" "Secret" .Release.Namespace "speedscale-certs") -}} +{{- if $s -}} +{{- $crt = index $s.data "tls.crt" | b64dec -}} +{{- $key = index $s.data "tls.key" | b64dec -}} +{{ else }} +{{- $cert := genCA "Speedscale" 3650 -}} +{{- $crt = $cert.Cert -}} +{{- $key = $cert.Key -}} +{{- end -}} +--- +apiVersion: batch/v1 +kind: Job +metadata: + annotations: + helm.sh/hook: pre-install + helm.sh/hook-delete-policy: before-hook-creation,hook-succeeded + helm.sh/hook-weight: "5" + {{- if .Values.globalAnnotations }} +{{ toYaml .Values.globalAnnotations | indent 4}} + {{- end }} + creationTimestamp: null + name: speedscale-operator-create-jks + namespace: {{ .Release.Namespace }} + labels: + {{- if .Values.globalLabels }} +{{ toYaml .Values.globalLabels | indent 4}} + {{- end }} +spec: + backoffLimit: 0 + ttlSecondsAfterFinished: 30 + template: + metadata: + annotations: + {{- if .Values.globalAnnotations }} +{{ toYaml .Values.globalAnnotations | indent 8}} + {{- end }} + creationTimestamp: null + labels: + {{- if .Values.globalAnnotations }} +{{ toYaml .Values.globalAnnotations | indent 8}} + {{- end }} + spec: + containers: + - args: + - |- + keytool -keystore /usr/lib/jvm/jre/lib/security/cacerts -importcert -noprompt -trustcacerts -storepass changeit -alias speedscale -file /etc/ssl/speedscale/tls.crt + kubectl -n ${POD_NAMESPACE} delete secret speedscale-jks || true + kubectl -n ${POD_NAMESPACE} create secret generic speedscale-jks --from-file=cacerts.jks=/usr/lib/jvm/jre/lib/security/cacerts + + # in case we're in istio + curl -X POST http://127.0.0.1:15000/quitquitquit || true + command: + - sh + - -c + volumeMounts: + - mountPath: /etc/ssl/speedscale + name: speedscale-tls-out + readOnly: true + env: + - name: POD_NAMESPACE + valueFrom: + fieldRef: + apiVersion: v1 + fieldPath: metadata.namespace + envFrom: + - secretRef: + name: '{{ ne .Values.apiKeySecret "" | ternary .Values.apiKeySecret "speedscale-apikey" }}' + optional: false + image: '{{ .Values.image.registry }}/amazoncorretto' + imagePullPolicy: {{ .Values.image.pullPolicy }} + name: create-jks + resources: {} + restartPolicy: Never + serviceAccountName: speedscale-operator-provisioning + volumes: + - name: speedscale-tls-out + secret: + secretName: speedscale-certs + {{- if .Values.affinity }} + affinity: {{ toYaml .Values.affinity | nindent 8 }} + {{- end }} + {{- if .Values.tolerations }} + tolerations: {{ toYaml .Values.tolerations | nindent 8 }} + {{- end }} + {{- if .Values.nodeSelector }} + nodeSelector: {{ toYaml .Values.nodeSelector | nindent 8 }} + {{- end }} +--- +apiVersion: v1 +automountServiceAccountToken: true +kind: ServiceAccount +metadata: + annotations: + helm.sh/hook: pre-install + helm.sh/hook-delete-policy: before-hook-creation,hook-succeeded + helm.sh/hook-weight: "1" + {{- if .Values.globalAnnotations }} +{{ toYaml .Values.globalAnnotations | indent 4}} + {{- end }} + creationTimestamp: null + labels: + app: speedscale-operator + controlplane.speedscale.com/component: operator + name: speedscale-operator-provisioning + namespace: {{ .Release.Namespace }} +--- +apiVersion: rbac.authorization.k8s.io/v1 +kind: ClusterRole +metadata: + annotations: + helm.sh/hook: pre-install + helm.sh/hook-delete-policy: before-hook-creation,hook-succeeded + helm.sh/hook-weight: "2" + creationTimestamp: null + name: speedscale-operator-provisioning +rules: +- apiGroups: + - "" + resources: + - secrets + verbs: + - create + - delete + - deletecollection + - get + - list + - patch + - update + - watch +- apiGroups: + - admissionregistration.k8s.io + resources: + - mutatingwebhookconfigurations + - validatingwebhookconfigurations + verbs: + - create + - delete + - deletecollection + - get + - list + - patch + - update + - watch +--- +apiVersion: rbac.authorization.k8s.io/v1 +kind: ClusterRoleBinding +metadata: + annotations: + helm.sh/hook: pre-install + helm.sh/hook-delete-policy: before-hook-creation,hook-succeeded + helm.sh/hook-weight: "3" + {{- if .Values.globalAnnotations }} +{{ toYaml .Values.globalAnnotations | indent 4}} + {{- end }} + creationTimestamp: null + name: speedscale-operator-provisioning +roleRef: + apiGroup: rbac.authorization.k8s.io + kind: ClusterRole + name: speedscale-operator-provisioning +subjects: +- kind: ServiceAccount + name: speedscale-operator-provisioning + namespace: {{ .Release.Namespace }} +--- +apiVersion: v1 +kind: Secret +metadata: + annotations: + helm.sh/hook: pre-install + helm.sh/hook-delete-policy: before-hook-creation + {{- if .Values.globalAnnotations }} +{{ toYaml .Values.globalAnnotations | indent 4}} + {{- end }} + creationTimestamp: null + name: speedscale-certs + namespace: {{ .Release.Namespace }} +type: kubernetes.io/tls +data: + tls.crt: {{ $crt | b64enc }} + tls.key: {{ $key | b64enc }} diff --git a/charts/speedscale/speedscale-operator/2.2.169/values.yaml b/charts/speedscale/speedscale-operator/2.2.169/values.yaml new file mode 100644 index 000000000..28930755a --- /dev/null +++ b/charts/speedscale/speedscale-operator/2.2.169/values.yaml @@ -0,0 +1,133 @@ +# An API key is required to connect to the Speedscale cloud. +# If you need a key email support@speedscale.com. +apiKey: "" + +# A secret name can be referenced instead of the api key itself. +# The secret must be of the format: +# +# type: Opaque +# data: +# SPEEDSCALE_API_KEY: +# SPEEDSCALE_APP_URL: +apiKeySecret: "" + +# Speedscale domain to use. +appUrl: "app.speedscale.com" + +# The name of your cluster. +clusterName: "my-cluster" + +# Speedscale components image settings. +image: + registry: gcr.io/speedscale + tag: v2.2.169 + pullPolicy: Always + +# Log level for Speedscale components. +logLevel: "info" + +# Namespaces to be watched by Speedscale Operator as a list of names. +namespaceSelector: [] + +# Instructs operator to deploy resources necessary to interact with your cluster from the Speedscale dashboard. +dashboardAccess: true + +# Filter Rule to apply to the Speedscale Forwarder +filterRule: "standard" + +# Data Loss Prevention settings. +dlp: + # Instructs operator to enable data loss prevention features + enabled: false + + # Configuration for data loss prevention + config: "standard" + +# If the operator pod/webhooks need to be on the host network. +# This is only needed if the control plane cannot connect directly to a pod +# for eg. if Calico is used as EKS's default networking +# https://docs.tigera.io/calico/3.25/getting-started/kubernetes/managed-public-cloud/eks#install-eks-with-calico-networking +hostNetwork: false + +# A set of annotations to be applied to all Speedscale related deployments, +# services, jobs, pods, etc. +# +# Example: +# annotation.first: value +# annotation.second: value +globalAnnotations: {} + +# A set of labels to be applied to all Speedscale related deployments, +# services, jobs, pods, etc. +# +# Example: +# label1: value +# label2: value +globalLabels: {} + +# A full affinity object as detailed: https://kubernetes.io/docs/tasks/configure-pod-container/assign-pods-nodes-using-node-affinity +affinity: {} + +# The list of tolerations as detailed: https://kubernetes.io/docs/concepts/scheduling-eviction/taint-and-toleration/ +tolerations: [] + +# A nodeselector object as detailed: https://kubernetes.io/docs/tasks/configure-pod-container/assign-pods-nodes/ +nodeSelector: {} + +# Deploy a demo app at startup. Set this to an empty string to not deploy. +# Valid values: ["java", ""] +deployDemo: "java" + +# Proxy connection settings if required by your network. These translate to standard proxy environment +# variables HTTP_PROXY, HTTPS_PROXY, and NO_PROXY +http_proxy: "" +https_proxy: "" +no_proxy: "" + +# control if sidecar init containers should run with privileged set +privilegedSidecars: false + +# control if the sidecar should enable/disable use of the smart dns lookup feature (requires NET_ADMIN) +disableSidecarSmartReverseDNS: false + +# Operator settings. These limits are recommended unless you have a cluster +# with a very large number of workloads (for eg. 10k+ deployments, replicasets, etc.). +operator: + resources: + limits: + cpu: 500m + memory: 512Mi + requests: + cpu: 100m + memory: 128Mi + +# Default sidecar settings. Example: +# sidecar: +# resources: +# limits: +# cpu: 500m +# memory: 512Mi +# ephemeral-storage: 100Mi +# requests: +# cpu: 10m +# memory: 32Mi +# ephemeral-storage: 100Mi +# ignore_src_hosts: example.com, example.org +# ignore_src_ips: 8.8.8.8, 1.1.1.1 +# ignore_dst_hosts: example.com, example.org +# ignore_dst_ips: 8.8.8.8, 1.1.1.1 +# insert_init_first: false +# tls_out: false +# reinitialize_iptables: false +sidecar: {} + +# Forwarder settings +# forwarder: +# resources: +# limits: +# cpu: 500m +# memory: 500M +# requests: +# cpu: 300m +# memory: 250M +forwarder: {} diff --git a/index.yaml b/index.yaml index 9a8bceaee..cc65a3b98 100644 --- a/index.yaml +++ b/index.yaml @@ -6855,6 +6855,28 @@ entries: - assets/kubecost/cost-analyzer-1.103.3.tgz version: 1.103.3 crate-operator: + - annotations: + catalog.cattle.io/certified: partner + catalog.cattle.io/display-name: CrateDB Operator + catalog.cattle.io/release-name: crate-operator + apiVersion: v2 + appVersion: 2.40.0 + created: "2024-07-18T00:45:48.956053121Z" + dependencies: + - condition: crate-operator-crds.enabled + name: crate-operator-crds + repository: file://./charts/crate-operator-crds + version: 2.40.0 + description: Crate Operator - Helm chart for installing and upgrading Crate Operator. + digest: 0b8096d9e71885c6f1002db3c1e11c0a5bab95bb89eeb881dd6adf74cca684a4 + icon: file://assets/icons/crate-operator.svg + maintainers: + - name: Crate.io + name: crate-operator + type: application + urls: + - assets/crate/crate-operator-2.40.0.tgz + version: 2.40.0 - annotations: catalog.cattle.io/certified: partner catalog.cattle.io/display-name: CrateDB Operator @@ -30825,6 +30847,37 @@ entries: - assets/btp/sextant-2.2.21.tgz version: 2.2.21 speedscale-operator: + - annotations: + catalog.cattle.io/certified: partner + catalog.cattle.io/display-name: Speedscale Operator + catalog.cattle.io/kube-version: '>= 1.17.0-0' + catalog.cattle.io/release-name: speedscale-operator + apiVersion: v1 + appVersion: 2.2.169 + created: "2024-07-18T00:45:52.228880431Z" + description: Stress test your APIs with real world scenarios. Collect and replay + traffic without scripting. + digest: 94f0c14a83cea034c012350ac8033924eeb42240912b255e2c1bb2f4271a8fbf + home: https://speedscale.com + icon: file://assets/icons/speedscale-operator.png + keywords: + - speedscale + - test + - testing + - regression + - reliability + - load + - replay + - network + - traffic + kubeVersion: '>= 1.17.0-0' + maintainers: + - email: support@speedscale.com + name: Speedscale Support + name: speedscale-operator + urls: + - assets/speedscale/speedscale-operator-2.2.169.tgz + version: 2.2.169 - annotations: catalog.cattle.io/certified: partner catalog.cattle.io/display-name: Speedscale Operator @@ -36344,4 +36397,4 @@ entries: urls: - assets/netfoundry/ziti-host-1.5.1.tgz version: 1.5.1 -generated: "2024-07-17T00:47:11.280144407Z" +generated: "2024-07-18T00:45:48.504920851Z"