This is an automated email from the ASF dual-hosted git repository. pcongiusti pushed a commit to branch main in repository https://gitbox.apache.org/repos/asf/camel-k.git
commit ab6217d4b6b43e96c9a4db5f9de2254fbddafbf7 Author: Rodrigue Cloutier <rclout...@petalmd.com> AuthorDate: Thu Jan 25 08:06:12 2024 -0500 Add feature to insert annotations in the builder pod, from config --- config/crd/bases/camel.apache.org_builds.yaml | 54 ++++++++++++++++++++++ .../camel.apache.org_integrationplatforms.yaml | 12 +++++ docs/modules/ROOT/partials/apis/camel-k-crds.adoc | 7 +++ helm/camel-k/crds/crd-build.yaml | 54 ++++++++++++++++++++++ helm/camel-k/crds/crd-integration-platform.yaml | 12 +++++ pkg/apis/camel/v1/common_types.go | 2 + pkg/apis/camel/v1/zz_generated.deepcopy.go | 7 +++ .../camel/v1/buildconfiguration.go | 15 ++++++ pkg/controller/build/build_pod.go | 3 +- pkg/resources/resources.go | 8 ++-- 10 files changed, 169 insertions(+), 5 deletions(-) diff --git a/config/crd/bases/camel.apache.org_builds.yaml b/config/crd/bases/camel.apache.org_builds.yaml index 6fd600e23..28f75654f 100644 --- a/config/crd/bases/camel.apache.org_builds.yaml +++ b/config/crd/bases/camel.apache.org_builds.yaml @@ -86,6 +86,12 @@ spec: Build. Deprecated: no longer in use in Camel K 2 - maintained for backward compatibility' properties: + annotations: + additionalProperties: + type: string + description: Annotation to use for the builder pod. Only used + for `pod` strategy + type: object limitCPU: description: The maximum amount of CPU required. Only used for `pod` strategy @@ -158,6 +164,12 @@ spec: description: The configuration that should be used to perform the Build. properties: + annotations: + additionalProperties: + type: string + description: Annotation to use for the builder pod. + Only used for `pod` strategy + type: object limitCPU: description: The maximum amount of CPU required. Only used for `pod` strategy @@ -256,6 +268,12 @@ spec: description: The configuration that should be used to perform the Build. properties: + annotations: + additionalProperties: + type: string + description: Annotation to use for the builder pod. + Only used for `pod` strategy + type: object limitCPU: description: The maximum amount of CPU required. Only used for `pod` strategy @@ -767,6 +785,12 @@ spec: description: The configuration that should be used to perform the Build. properties: + annotations: + additionalProperties: + type: string + description: Annotation to use for the builder pod. + Only used for `pod` strategy + type: object limitCPU: description: The maximum amount of CPU required. Only used for `pod` strategy @@ -836,6 +860,12 @@ spec: description: The configuration that should be used to perform the Build. properties: + annotations: + additionalProperties: + type: string + description: Annotation to use for the builder pod. + Only used for `pod` strategy + type: object limitCPU: description: The maximum amount of CPU required. Only used for `pod` strategy @@ -933,6 +963,12 @@ spec: description: The configuration that should be used to perform the Build. properties: + annotations: + additionalProperties: + type: string + description: Annotation to use for the builder pod. + Only used for `pod` strategy + type: object limitCPU: description: The maximum amount of CPU required. Only used for `pod` strategy @@ -1029,6 +1065,12 @@ spec: description: The configuration that should be used to perform the Build. properties: + annotations: + additionalProperties: + type: string + description: Annotation to use for the builder pod. + Only used for `pod` strategy + type: object limitCPU: description: The maximum amount of CPU required. Only used for `pod` strategy @@ -1531,6 +1573,12 @@ spec: description: The configuration that should be used to perform the Build. properties: + annotations: + additionalProperties: + type: string + description: Annotation to use for the builder pod. + Only used for `pod` strategy + type: object limitCPU: description: The maximum amount of CPU required. Only used for `pod` strategy @@ -1596,6 +1644,12 @@ spec: description: The configuration that should be used to perform the Build. properties: + annotations: + additionalProperties: + type: string + description: Annotation to use for the builder pod. + Only used for `pod` strategy + type: object limitCPU: description: The maximum amount of CPU required. Only used for `pod` strategy diff --git a/config/crd/bases/camel.apache.org_integrationplatforms.yaml b/config/crd/bases/camel.apache.org_integrationplatforms.yaml index 3afa3fd0f..7d6b012d7 100644 --- a/config/crd/bases/camel.apache.org_integrationplatforms.yaml +++ b/config/crd/bases/camel.apache.org_integrationplatforms.yaml @@ -105,6 +105,12 @@ spec: description: the configuration required to build an Integration container image properties: + annotations: + additionalProperties: + type: string + description: Annotation to use for the builder pod. Only used + for `pod` strategy + type: object limitCPU: description: The maximum amount of CPU required. Only used for `pod` strategy @@ -1905,6 +1911,12 @@ spec: description: the configuration required to build an Integration container image properties: + annotations: + additionalProperties: + type: string + description: Annotation to use for the builder pod. Only used + for `pod` strategy + type: object limitCPU: description: The maximum amount of CPU required. Only used for `pod` strategy diff --git a/docs/modules/ROOT/partials/apis/camel-k-crds.adoc b/docs/modules/ROOT/partials/apis/camel-k-crds.adoc index 0a65eef48..44c752fff 100644 --- a/docs/modules/ROOT/partials/apis/camel-k-crds.adoc +++ b/docs/modules/ROOT/partials/apis/camel-k-crds.adoc @@ -608,6 +608,13 @@ map[string]string The node selector for the builder pod. Only used for `pod` strategy +|`annotations` + +map[string]string +| + + +Annotation to use for the builder pod. Only used for `pod` strategy + |=== diff --git a/helm/camel-k/crds/crd-build.yaml b/helm/camel-k/crds/crd-build.yaml index 6fd600e23..28f75654f 100644 --- a/helm/camel-k/crds/crd-build.yaml +++ b/helm/camel-k/crds/crd-build.yaml @@ -86,6 +86,12 @@ spec: Build. Deprecated: no longer in use in Camel K 2 - maintained for backward compatibility' properties: + annotations: + additionalProperties: + type: string + description: Annotation to use for the builder pod. Only used + for `pod` strategy + type: object limitCPU: description: The maximum amount of CPU required. Only used for `pod` strategy @@ -158,6 +164,12 @@ spec: description: The configuration that should be used to perform the Build. properties: + annotations: + additionalProperties: + type: string + description: Annotation to use for the builder pod. + Only used for `pod` strategy + type: object limitCPU: description: The maximum amount of CPU required. Only used for `pod` strategy @@ -256,6 +268,12 @@ spec: description: The configuration that should be used to perform the Build. properties: + annotations: + additionalProperties: + type: string + description: Annotation to use for the builder pod. + Only used for `pod` strategy + type: object limitCPU: description: The maximum amount of CPU required. Only used for `pod` strategy @@ -767,6 +785,12 @@ spec: description: The configuration that should be used to perform the Build. properties: + annotations: + additionalProperties: + type: string + description: Annotation to use for the builder pod. + Only used for `pod` strategy + type: object limitCPU: description: The maximum amount of CPU required. Only used for `pod` strategy @@ -836,6 +860,12 @@ spec: description: The configuration that should be used to perform the Build. properties: + annotations: + additionalProperties: + type: string + description: Annotation to use for the builder pod. + Only used for `pod` strategy + type: object limitCPU: description: The maximum amount of CPU required. Only used for `pod` strategy @@ -933,6 +963,12 @@ spec: description: The configuration that should be used to perform the Build. properties: + annotations: + additionalProperties: + type: string + description: Annotation to use for the builder pod. + Only used for `pod` strategy + type: object limitCPU: description: The maximum amount of CPU required. Only used for `pod` strategy @@ -1029,6 +1065,12 @@ spec: description: The configuration that should be used to perform the Build. properties: + annotations: + additionalProperties: + type: string + description: Annotation to use for the builder pod. + Only used for `pod` strategy + type: object limitCPU: description: The maximum amount of CPU required. Only used for `pod` strategy @@ -1531,6 +1573,12 @@ spec: description: The configuration that should be used to perform the Build. properties: + annotations: + additionalProperties: + type: string + description: Annotation to use for the builder pod. + Only used for `pod` strategy + type: object limitCPU: description: The maximum amount of CPU required. Only used for `pod` strategy @@ -1596,6 +1644,12 @@ spec: description: The configuration that should be used to perform the Build. properties: + annotations: + additionalProperties: + type: string + description: Annotation to use for the builder pod. + Only used for `pod` strategy + type: object limitCPU: description: The maximum amount of CPU required. Only used for `pod` strategy diff --git a/helm/camel-k/crds/crd-integration-platform.yaml b/helm/camel-k/crds/crd-integration-platform.yaml index 3afa3fd0f..7d6b012d7 100644 --- a/helm/camel-k/crds/crd-integration-platform.yaml +++ b/helm/camel-k/crds/crd-integration-platform.yaml @@ -105,6 +105,12 @@ spec: description: the configuration required to build an Integration container image properties: + annotations: + additionalProperties: + type: string + description: Annotation to use for the builder pod. Only used + for `pod` strategy + type: object limitCPU: description: The maximum amount of CPU required. Only used for `pod` strategy @@ -1905,6 +1911,12 @@ spec: description: the configuration required to build an Integration container image properties: + annotations: + additionalProperties: + type: string + description: Annotation to use for the builder pod. Only used + for `pod` strategy + type: object limitCPU: description: The maximum amount of CPU required. Only used for `pod` strategy diff --git a/pkg/apis/camel/v1/common_types.go b/pkg/apis/camel/v1/common_types.go index 8dadcb3bb..fdcd68324 100644 --- a/pkg/apis/camel/v1/common_types.go +++ b/pkg/apis/camel/v1/common_types.go @@ -55,6 +55,8 @@ type BuildConfiguration struct { LimitMemory string `property:"limit-memory" json:"limitMemory,omitempty"` // The node selector for the builder pod. Only used for `pod` strategy NodeSelector map[string]string `property:"node-selector" json:"nodeSelector,omitempty"` + // Annotation to use for the builder pod. Only used for `pod` strategy + Annotations map[string]string `property:"annotations" json:"annotations,omitempty"` } // BuildStrategy specifies how the Build should be executed. diff --git a/pkg/apis/camel/v1/zz_generated.deepcopy.go b/pkg/apis/camel/v1/zz_generated.deepcopy.go index f0d23440d..ed9b930e3 100644 --- a/pkg/apis/camel/v1/zz_generated.deepcopy.go +++ b/pkg/apis/camel/v1/zz_generated.deepcopy.go @@ -153,6 +153,13 @@ func (in *BuildConfiguration) DeepCopyInto(out *BuildConfiguration) { (*out)[key] = val } } + if in.Annotations != nil { + in, out := &in.Annotations, &out.Annotations + *out = make(map[string]string, len(*in)) + for key, val := range *in { + (*out)[key] = val + } + } } // DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new BuildConfiguration. diff --git a/pkg/client/camel/applyconfiguration/camel/v1/buildconfiguration.go b/pkg/client/camel/applyconfiguration/camel/v1/buildconfiguration.go index e970d81d2..1b1f99777 100644 --- a/pkg/client/camel/applyconfiguration/camel/v1/buildconfiguration.go +++ b/pkg/client/camel/applyconfiguration/camel/v1/buildconfiguration.go @@ -35,6 +35,7 @@ type BuildConfigurationApplyConfiguration struct { LimitCPU *string `json:"limitCPU,omitempty"` LimitMemory *string `json:"limitMemory,omitempty"` NodeSelector map[string]string `json:"nodeSelector,omitempty"` + Annotations map[string]string `json:"annotations,omitempty"` } // BuildConfigurationApplyConfiguration constructs an declarative configuration of the BuildConfiguration type for use with @@ -120,3 +121,17 @@ func (b *BuildConfigurationApplyConfiguration) WithNodeSelector(entries map[stri } return b } + +// WithAnnotations puts the entries into the Annotations field in the declarative configuration +// and returns the receiver, so that objects can be build by chaining "With" function invocations. +// If called multiple times, the entries provided by each call will be put on the Annotations field, +// overwriting an existing map entries in Annotations field with the same key. +func (b *BuildConfigurationApplyConfiguration) WithAnnotations(entries map[string]string) *BuildConfigurationApplyConfiguration { + if b.Annotations == nil && len(entries) > 0 { + b.Annotations = make(map[string]string, len(entries)) + } + for k, v := range entries { + b.Annotations[k] = v + } + return b +} diff --git a/pkg/controller/build/build_pod.go b/pkg/controller/build/build_pod.go index ab9c433d5..2b2b87798 100644 --- a/pkg/controller/build/build_pod.go +++ b/pkg/controller/build/build_pod.go @@ -67,12 +67,13 @@ func newBuildPod(ctx context.Context, client client.Client, build *v1.Build) *co "camel.apache.org/build": build.Name, "camel.apache.org/component": "builder", }, + Annotations: build.BuilderConfiguration().Annotations, }, Spec: corev1.PodSpec{ ServiceAccountName: platform.BuilderServiceAccount, RestartPolicy: corev1.RestartPolicyNever, SecurityContext: podSecurityContext, - NodeSelector: build.TaskConfiguration("builder").NodeSelector, + NodeSelector: build.BuilderConfiguration().NodeSelector, }, } diff --git a/pkg/resources/resources.go b/pkg/resources/resources.go index 4084f39b5..09dc7fdcf 100644 --- a/pkg/resources/resources.go +++ b/pkg/resources/resources.go @@ -117,9 +117,9 @@ var assets = func() http.FileSystem { "/crd/bases/camel.apache.org_builds.yaml": &vfsgen۰CompressedFileInfo{ name: "camel.apache.org_builds.yaml", modTime: time.Time{}, - uncompressedSize: 95791, + uncompressedSize: 98647, - compressedContent: []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\xec\x7d\x6b\x73\x1b\x37\x96\xe8\x77\xfd\x8a\x53\xf1\x07\xcb\x55\x22\x35\xe3\x64\x67\xb3\xba\xb5\x75\x4b\x2b\x27\xb3\x1a\x27\xb6\xd7\x94\x3d\x99\xda\xda\x2a\x81\xdd\x87\x24\xc2\x6e\xa0\x2f\x80\x16\xcd\xdc\xba\xff\xfd\x16\x5e\xfd\x10\xd9\xdd\x00\x45\xda\x9e\x72\xe3\x4b\x62\xaa\x01\x9c\x83\xc7\x79\xe1\x3c\x9e\xc1\xe4\x78\xed\xec\x19\xfc\x42\x13\x64\x12\x53\x50\x1c\xd4\x0a\xe1\xba\x20\xc9\x0a\x61\xc6\x17\x6a\x43\x04\xc2\x [...] + compressedContent: []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\xec\x7d\x5d\x93\xdb\x38\x92\xe0\x7b\xfd\x8a\x8c\xf6\x83\xcb\x11\x92\x6a\xc6\xdd\x3b\xdb\x5b\x17\x1b\x17\xb5\xe5\xee\xd9\x1a\x77\xdb\x5e\xab\xec\xe9\x89\x8d\x8d\x28\x88\x4c\x49\x68\x91\x00\x0f\x00\x4b\x56\x5f\xdc\x7f\xbf\xc0\x17\x45\x4a\x22\x09\xa8\x24\xdb\x13\x26\x5e\xba\xad\x22\x12\x99\xf8\xc8\x2f\x24\x32\x9f\xc1\xf8\x74\xed\xe2\x19\xfc\x42\x13\x64\x12\x53\x50\x1c\xd4\x12\xe1\xa6\x20\xc9\x12\x61\xca\xe7\x6a\x4d\x04\x [...] }, "/crd/bases/camel.apache.org_camelcatalogs.yaml": &vfsgen۰CompressedFileInfo{ name: "camel.apache.org_camelcatalogs.yaml", @@ -138,9 +138,9 @@ var assets = func() http.FileSystem { "/crd/bases/camel.apache.org_integrationplatforms.yaml": &vfsgen۰CompressedFileInfo{ name: "camel.apache.org_integrationplatforms.yaml", modTime: time.Time{}, - uncompressedSize: 200434, + uncompressedSize: 201010, - compressedContent: []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\xec\x7d\xff\x73\xdb\x36\xd2\xf7\xef\xfd\x2b\x30\xee\x3c\x13\xbb\xa3\x2f\x49\xef\x69\xaf\x8f\x9f\xeb\xbd\xaf\xeb\xa4\xad\x9b\x38\xf6\x6b\x3b\xb9\xbb\x69\x3b\x15\x44\xae\x24\xc4\x24\xc0\x03\x40\xd9\xea\xdc\x1f\xff\x0e\x16\x00\x49\x49\x14\x48\x7d\xb1\xe3\xb4\x52\x67\x1a\xdb\x22\xc0\x05\xb0\xd8\x5d\x2c\x76\x3f\xfb\x39\xe9\xee\xee\xf3\xd9\xe7\xe4\x0d\x8b\x80\x2b\x88\x89\x16\x44\x4f\x80\x9c\x64\x34\x9a\x00\xb9\x16\x23\x7d\x [...] + compressedContent: []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\xec\x7d\xff\x73\xdb\x36\xd2\xf7\xef\xfd\x2b\x30\xee\x3c\x63\xa7\xa3\x2f\x49\xef\x69\xaf\x8f\x9f\xeb\xbd\xaf\xeb\xa4\xad\x9b\x38\xf6\x6b\x3b\xb9\xbb\x69\x3b\x15\x44\xae\x24\xc4\x24\xc0\x03\x40\xd9\xea\xdc\x1f\xff\x0e\x16\x00\x49\x49\x14\x48\x7d\xb1\xe3\xb4\x62\x67\x1a\x4b\x22\xc1\x05\xb0\xd8\x5d\x2c\x76\x3f\xfb\x39\xe9\xee\xee\xfa\xec\x73\xf2\x86\x45\xc0\x15\xc4\x44\x0b\xa2\x27\x40\x4e\x32\x1a\x4d\x80\x5c\x8b\x91\xbe\x [...] }, "/crd/bases/camel.apache.org_integrations.yaml": &vfsgen۰CompressedFileInfo{ name: "camel.apache.org_integrations.yaml",