From cd97313a45418cc2e1a9527ccd1de26aa56bf970 Mon Sep 17 00:00:00 2001 From: m00g3n Date: Wed, 22 Nov 2023 14:20:29 +0100 Subject: [PATCH] add module benchmark --- hack/benchmark/benchmark.sh | 14 ++ hack/benchmark/secret.template.json | 16 ++ ...ager.kyma-project.io_gardenerclusters.yaml | 170 ++++++++++++++++++ 3 files changed, 200 insertions(+) create mode 100755 hack/benchmark/benchmark.sh create mode 100644 hack/benchmark/secret.template.json create mode 100644 hack/external_crd/infrastructuremanager.kyma-project.io_gardenerclusters.yaml diff --git a/hack/benchmark/benchmark.sh b/hack/benchmark/benchmark.sh new file mode 100755 index 00000000..b1cba926 --- /dev/null +++ b/hack/benchmark/benchmark.sh @@ -0,0 +1,14 @@ +#!/bin/bash + +_count=$1 +_secret_template_path=$2 + +function generate_data { + jq -nR --arg _count $_count '[range(0;($_count|tonumber)) | input]' < <(while true; do uuidgen ; done) +} + +function create_secrets { + cat /dev/stdin | jq -r --argjson t "$(<$_secret_template_path)" '.[] as $id | $t | .metadata.name=$id | .metadata.labels["kyma-project.io/runtime-id"]=$id' +} + +generate_data $1 $2 | tee /tmp/input.json | create_secrets diff --git a/hack/benchmark/secret.template.json b/hack/benchmark/secret.template.json new file mode 100644 index 00000000..30fc60b8 --- /dev/null +++ b/hack/benchmark/secret.template.json @@ -0,0 +1,16 @@ +{ + "apiVersion": "v1", + "data": { + "config": "dGhpcyBpcyBmb3IgdGVzdHMgb25seQ==" + }, + "kind": "Secret", + "metadata": { + "labels": { + "kyma-project.io/runtime-id": "01a5af79-b073-48a1-906d-26c15933b12a", + "kyma-project.io/shoot-name": "benchmark-invalid" + }, + "name": "kubeconfig-01a5af79-b073-48a1-906d-26c15933b12a", + "namespace": "kcp-system" + }, + "type": "Opaque" +} diff --git a/hack/external_crd/infrastructuremanager.kyma-project.io_gardenerclusters.yaml b/hack/external_crd/infrastructuremanager.kyma-project.io_gardenerclusters.yaml new file mode 100644 index 00000000..ccf23d54 --- /dev/null +++ b/hack/external_crd/infrastructuremanager.kyma-project.io_gardenerclusters.yaml @@ -0,0 +1,170 @@ +--- +apiVersion: apiextensions.k8s.io/v1 +kind: CustomResourceDefinition +metadata: + annotations: + controller-gen.kubebuilder.io/version: v0.12.0 + name: gardenerclusters.infrastructuremanager.kyma-project.io +spec: + group: infrastructuremanager.kyma-project.io + names: + kind: GardenerCluster + listKind: GardenerClusterList + plural: gardenerclusters + singular: gardenercluster + scope: Namespaced + versions: + - additionalPrinterColumns: + - jsonPath: .status.state + name: STATE + type: string + - jsonPath: .metadata.labels.kyma-project\.io/runtime-id + name: RUNTIME-ID + type: string + - jsonPath: .metadata.labels.kyma-project\.io/shoot-name + name: SHOOT-NAME + type: string + - jsonPath: .metadata.creationTimestamp + name: Age + type: date + name: v1 + schema: + openAPIV3Schema: + description: GardenerCluster is the Schema for the clusters 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: GardenerClusterSpec defines the desired state of GardenerCluster + properties: + kubeconfig: + description: Kubeconfig defines the desired kubeconfig location + properties: + secret: + description: SecretKeyRef defines the location, and structure + of the secret containing kubeconfig + properties: + key: + type: string + name: + type: string + namespace: + type: string + required: + - key + - name + - namespace + type: object + required: + - secret + type: object + shoot: + description: Shoot defines the name of the Shoot resource + properties: + name: + type: string + required: + - name + type: object + required: + - kubeconfig + - shoot + type: object + status: + description: GardenerClusterStatus defines the observed state of GardenerCluster + properties: + conditions: + description: List of status conditions to indicate the status of a + ServiceInstance. + items: + description: "Condition contains details for one aspect of the current + state of this API Resource. --- This struct is intended for direct + use as an array at the field path .status.conditions. For example, + \n type FooStatus struct{ // Represents the observations of a + foo's current state. // Known .status.conditions.type are: \"Available\", + \"Progressing\", and \"Degraded\" // +patchMergeKey=type // +patchStrategy=merge + // +listType=map // +listMapKey=type Conditions []metav1.Condition + `json:\"conditions,omitempty\" patchStrategy:\"merge\" patchMergeKey:\"type\" + protobuf:\"bytes,1,rep,name=conditions\"` \n // other fields }" + 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 + x-kubernetes-list-map-keys: + - type + x-kubernetes-list-type: map + state: + description: State signifies current state of Gardener Cluster. Value + can be one of ("Ready", "Processing", "Error", "Deleting"). + type: string + type: object + required: + - spec + type: object + served: true + storage: true + subresources: + status: {}