From 099404392d9019b7efbae4ff8e15b37acd65d1d1 Mon Sep 17 00:00:00 2001
From: Derek Wang
Date: Wed, 20 May 2020 10:10:21 -0700
Subject: [PATCH] fix: template metadata populated to gateway pod (#669)
---
api/gateway.html | 52 +++++++++
api/gateway.md | 100 ++++++++++++++++++
api/openapi-spec/swagger.json | 22 ++++
controllers/gateway/resource.go | 20 +++-
.../gateway/v1alpha1/openapi_generated.go | 50 ++++++++-
pkg/apis/gateway/v1alpha1/types.go | 22 ++--
.../gateway/v1alpha1/zz_generated.deepcopy.go | 31 ++++++
7 files changed, 287 insertions(+), 10 deletions(-)
diff --git a/api/gateway.html b/api/gateway.html
index f5ad15edec..185cb7d324 100644
--- a/api/gateway.html
+++ b/api/gateway.html
@@ -434,6 +434,45 @@ GatewayStatus
+
+
+(Appears on:
+Template)
+
+
+
Metadata holds the annotations and labels of a gateway pod
+
+
+
+
+Field |
+Description |
+
+
+
+
+
+annotations
+
+map[string]string
+
+ |
+
+ |
+
+
+
+labels
+
+map[string]string
+
+ |
+
+ |
+
+
+
NATSSubscriber
@@ -731,6 +770,19 @@
Template
+metadata
+
+
+Metadata
+
+
+ |
+
+ Metdata sets the pods’s metadata, i.e. annotations and labels
+ |
+
+
+
serviceAccountName
string
diff --git a/api/gateway.md b/api/gateway.md
index ef025a6c5b..6eed94d7dd 100644
--- a/api/gateway.md
+++ b/api/gateway.md
@@ -846,6 +846,85 @@ Resources refers to the metadata about the gateway resources
+
+
+
+
+(Appears on:
+Template)
+
+
+
+
+
+
+
+Metadata holds the annotations and labels of a gateway pod
+
+
+
+
+
+
+
+
+
+
+
+
+
+Field
+
+ |
+
+
+
+Description
+
+ |
+
+
+
+
+
+
+
+
+
+
+
+annotations map\[string\]string
+
+ |
+
+
+
+ |
+
+
+
+
+
+
+
+labels map\[string\]string
+
+ |
+
+
+
+ |
+
+
+
+
+
+
+
NATSSubscriber
@@ -1454,6 +1533,27 @@ Description
+metadata
+ Metadata
+
+ |
+
+
+
+
+
+Metdata sets the pods’s metadata, i.e. annotations and labels
+
+
+
+ |
+
+ |
+
+
+
+
+
serviceAccountName string
|
diff --git a/api/openapi-spec/swagger.json b/api/openapi-spec/swagger.json
index 9223d0ccd5..946f8218e9 100644
--- a/api/openapi-spec/swagger.json
+++ b/api/openapi-spec/swagger.json
@@ -836,6 +836,24 @@
}
}
},
+ "io.argoproj.gateway.v1alpha1.Metadata": {
+ "description": "Metadata holds the annotations and labels of a gateway pod",
+ "type": "object",
+ "properties": {
+ "annotations": {
+ "type": "object",
+ "additionalProperties": {
+ "type": "string"
+ }
+ },
+ "labels": {
+ "type": "object",
+ "additionalProperties": {
+ "type": "string"
+ }
+ }
+ }
+ },
"io.argoproj.gateway.v1alpha1.NATSSubscriber": {
"description": "NATSSubscriber holds the context of subscriber over NATS.",
"type": "object",
@@ -956,6 +974,10 @@
"description": "Container is the main container image to run in the gateway pod",
"$ref": "#/definitions/io.k8s.api.core.v1.Container"
},
+ "metadata": {
+ "description": "Metdata sets the pods's metadata, i.e. annotations and labels",
+ "$ref": "#/definitions/io.argoproj.gateway.v1alpha1.Metadata"
+ },
"securityContext": {
"description": "SecurityContext holds pod-level security attributes and common container settings. Optional: Defaults to empty. See type description for default values of each field.",
"$ref": "#/definitions/io.k8s.api.core.v1.PodSecurityContext"
diff --git a/controllers/gateway/resource.go b/controllers/gateway/resource.go
index 448070af3f..fe20bc7622 100644
--- a/controllers/gateway/resource.go
+++ b/controllers/gateway/resource.go
@@ -101,6 +101,13 @@ func (ctx *gatewayContext) makeDeploymentSpec() (*appv1.DeploymentSpec, error) {
common.LabelGatewayName: ctx.gateway.Name,
common.LabelObjectName: ctx.gateway.Name,
}
+ podTemplateLabels := make(map[string]string)
+ if len(ctx.gateway.Spec.Template.Metadata.Labels) > 0 {
+ podTemplateLabels = ctx.gateway.Spec.Template.Metadata.Labels
+ }
+ for k, v := range labels {
+ podTemplateLabels[k] = v
+ }
eventContainer := corev1.Container{
Name: "main",
@@ -123,7 +130,8 @@ func (ctx *gatewayContext) makeDeploymentSpec() (*appv1.DeploymentSpec, error) {
Replicas: &replicas,
Template: corev1.PodTemplateSpec{
ObjectMeta: metav1.ObjectMeta{
- Labels: labels,
+ Labels: podTemplateLabels,
+ Annotations: ctx.gateway.Spec.Template.Metadata.Annotations,
},
Spec: corev1.PodSpec{
ServiceAccountName: ctx.gateway.Spec.Template.ServiceAccountName,
@@ -164,6 +172,13 @@ func (ctx *gatewayContext) makeLegacyDeploymentSpec() (*appv1.DeploymentSpec, er
common.LabelGatewayName: ctx.gateway.Name,
common.LabelObjectName: ctx.gateway.Name,
}
+ podTemplateLabels := make(map[string]string)
+ if len(ctx.gateway.Spec.Template.Metadata.Labels) > 0 {
+ podTemplateLabels = ctx.gateway.Spec.Template.Metadata.Labels
+ }
+ for k, v := range labels {
+ podTemplateLabels[k] = v
+ }
return &appv1.DeploymentSpec{
Selector: &metav1.LabelSelector{
@@ -172,7 +187,8 @@ func (ctx *gatewayContext) makeLegacyDeploymentSpec() (*appv1.DeploymentSpec, er
Replicas: &replicas,
Template: corev1.PodTemplateSpec{
ObjectMeta: metav1.ObjectMeta{
- Labels: labels,
+ Labels: podTemplateLabels,
+ Annotations: ctx.gateway.Spec.Template.Metadata.Annotations,
},
Spec: *ctx.gateway.Spec.Template.Spec,
},
diff --git a/pkg/apis/gateway/v1alpha1/openapi_generated.go b/pkg/apis/gateway/v1alpha1/openapi_generated.go
index 131d027f88..9d3bf7ca66 100644
--- a/pkg/apis/gateway/v1alpha1/openapi_generated.go
+++ b/pkg/apis/gateway/v1alpha1/openapi_generated.go
@@ -35,6 +35,7 @@ func GetOpenAPIDefinitions(ref common.ReferenceCallback) map[string]common.OpenA
"github.com/argoproj/argo-events/pkg/apis/gateway/v1alpha1.GatewayResource": schema_pkg_apis_gateway_v1alpha1_GatewayResource(ref),
"github.com/argoproj/argo-events/pkg/apis/gateway/v1alpha1.GatewaySpec": schema_pkg_apis_gateway_v1alpha1_GatewaySpec(ref),
"github.com/argoproj/argo-events/pkg/apis/gateway/v1alpha1.GatewayStatus": schema_pkg_apis_gateway_v1alpha1_GatewayStatus(ref),
+ "github.com/argoproj/argo-events/pkg/apis/gateway/v1alpha1.Metadata": schema_pkg_apis_gateway_v1alpha1_Metadata(ref),
"github.com/argoproj/argo-events/pkg/apis/gateway/v1alpha1.NATSSubscriber": schema_pkg_apis_gateway_v1alpha1_NATSSubscriber(ref),
"github.com/argoproj/argo-events/pkg/apis/gateway/v1alpha1.NodeStatus": schema_pkg_apis_gateway_v1alpha1_NodeStatus(ref),
"github.com/argoproj/argo-events/pkg/apis/gateway/v1alpha1.Service": schema_pkg_apis_gateway_v1alpha1_Service(ref),
@@ -318,6 +319,47 @@ func schema_pkg_apis_gateway_v1alpha1_GatewayStatus(ref common.ReferenceCallback
}
}
+func schema_pkg_apis_gateway_v1alpha1_Metadata(ref common.ReferenceCallback) common.OpenAPIDefinition {
+ return common.OpenAPIDefinition{
+ Schema: spec.Schema{
+ SchemaProps: spec.SchemaProps{
+ Description: "Metadata holds the annotations and labels of a gateway pod",
+ Type: []string{"object"},
+ Properties: map[string]spec.Schema{
+ "annotations": {
+ SchemaProps: spec.SchemaProps{
+ Type: []string{"object"},
+ AdditionalProperties: &spec.SchemaOrBool{
+ Allows: true,
+ Schema: &spec.Schema{
+ SchemaProps: spec.SchemaProps{
+ Type: []string{"string"},
+ Format: "",
+ },
+ },
+ },
+ },
+ },
+ "labels": {
+ SchemaProps: spec.SchemaProps{
+ Type: []string{"object"},
+ AdditionalProperties: &spec.SchemaOrBool{
+ Allows: true,
+ Schema: &spec.Schema{
+ SchemaProps: spec.SchemaProps{
+ Type: []string{"string"},
+ Format: "",
+ },
+ },
+ },
+ },
+ },
+ },
+ },
+ },
+ }
+}
+
func schema_pkg_apis_gateway_v1alpha1_NATSSubscriber(ref common.ReferenceCallback) common.OpenAPIDefinition {
return common.OpenAPIDefinition{
Schema: spec.Schema{
@@ -520,6 +562,12 @@ func schema_pkg_apis_gateway_v1alpha1_Template(ref common.ReferenceCallback) com
Description: "Template holds the information of a Gateway deployment template",
Type: []string{"object"},
Properties: map[string]spec.Schema{
+ "metadata": {
+ SchemaProps: spec.SchemaProps{
+ Description: "Metdata sets the pods's metadata, i.e. annotations and labels",
+ Ref: ref("github.com/argoproj/argo-events/pkg/apis/gateway/v1alpha1.Metadata"),
+ },
+ },
"serviceAccountName": {
SchemaProps: spec.SchemaProps{
Description: "ServiceAccountName is the name of the ServiceAccount to use to run gateway pod. More info: https://kubernetes.io/docs/tasks/configure-pod-container/configure-service-account/",
@@ -587,6 +635,6 @@ func schema_pkg_apis_gateway_v1alpha1_Template(ref common.ReferenceCallback) com
},
},
Dependencies: []string{
- "k8s.io/api/core/v1.Affinity", "k8s.io/api/core/v1.Container", "k8s.io/api/core/v1.PodSecurityContext", "k8s.io/api/core/v1.PodSpec", "k8s.io/api/core/v1.Toleration", "k8s.io/api/core/v1.Volume"},
+ "github.com/argoproj/argo-events/pkg/apis/gateway/v1alpha1.Metadata", "k8s.io/api/core/v1.Affinity", "k8s.io/api/core/v1.Container", "k8s.io/api/core/v1.PodSecurityContext", "k8s.io/api/core/v1.PodSpec", "k8s.io/api/core/v1.Toleration", "k8s.io/api/core/v1.Volume"},
}
}
diff --git a/pkg/apis/gateway/v1alpha1/types.go b/pkg/apis/gateway/v1alpha1/types.go
index 84c9d9de87..c7f4b5efd6 100644
--- a/pkg/apis/gateway/v1alpha1/types.go
+++ b/pkg/apis/gateway/v1alpha1/types.go
@@ -78,31 +78,39 @@ type GatewaySpec struct {
// Template holds the information of a Gateway deployment template
type Template struct {
+ // Metdata sets the pods's metadata, i.e. annotations and labels
+ Metadata Metadata `json:"metadata,omitempty" protobuf:"bytes,1,opt,name=metadata"`
// ServiceAccountName is the name of the ServiceAccount to use to run gateway pod.
// More info: https://kubernetes.io/docs/tasks/configure-pod-container/configure-service-account/
// +optional
- ServiceAccountName string `json:"serviceAccountName,omitempty" protobuf:"bytes,1,opt,name=serviceAccountName"`
+ ServiceAccountName string `json:"serviceAccountName,omitempty" protobuf:"bytes,2,opt,name=serviceAccountName"`
// Container is the main container image to run in the gateway pod
// +optional
- Container *corev1.Container `json:"container,omitempty" protobuf:"bytes,2,opt,name=container"`
+ Container *corev1.Container `json:"container,omitempty" protobuf:"bytes,3,opt,name=container"`
// Volumes is a list of volumes that can be mounted by containers in a workflow.
// +patchStrategy=merge
// +patchMergeKey=name
// +optional
- Volumes []corev1.Volume `json:"volumes,omitempty" patchStrategy:"merge" patchMergeKey:"name" protobuf:"bytes,3,opt,name=volumes"`
+ Volumes []corev1.Volume `json:"volumes,omitempty" patchStrategy:"merge" patchMergeKey:"name" protobuf:"bytes,4,opt,name=volumes"`
// SecurityContext holds pod-level security attributes and common container settings.
// Optional: Defaults to empty. See type description for default values of each field.
// +optional
- SecurityContext *corev1.PodSecurityContext `json:"securityContext,omitempty" protobuf:"bytes,4,opt,name=securityContext"`
+ SecurityContext *corev1.PodSecurityContext `json:"securityContext,omitempty" protobuf:"bytes,5,opt,name=securityContext"`
// If specified, the pod's scheduling constraints
// +optional
- Affinity *corev1.Affinity `json:"affinity,omitempty" protobuf:"bytes,5,opt,name=affinity"`
+ Affinity *corev1.Affinity `json:"affinity,omitempty" protobuf:"bytes,6,opt,name=affinity"`
// If specified, the pod's tolerations.
// +optional
- Tolerations []corev1.Toleration `json:"tolerations,omitempty" protobuf:"bytes,6,opt,name=tolerations"`
+ Tolerations []corev1.Toleration `json:"tolerations,omitempty" protobuf:"bytes,7,opt,name=tolerations"`
// Spec holds the gateway deployment spec.
// DEPRECATED: Use Container instead.
- Spec *corev1.PodSpec `json:"spec,omitempty" protobuf:"bytes,7,opt,name=spec"`
+ Spec *corev1.PodSpec `json:"spec,omitempty" protobuf:"bytes,8,opt,name=spec"`
+}
+
+// Metadata holds the annotations and labels of a gateway pod
+type Metadata struct {
+ Annotations map[string]string `json:"annotations,omitempty" protobuf:"bytes,1,opt,name=annotations"`
+ Labels map[string]string `json:"labels,omitempty" protobuf:"bytes,2,opt,name=labels"`
}
// Service holds the service information gateway exposes
diff --git a/pkg/apis/gateway/v1alpha1/zz_generated.deepcopy.go b/pkg/apis/gateway/v1alpha1/zz_generated.deepcopy.go
index 927849bfd8..01f0c41ced 100644
--- a/pkg/apis/gateway/v1alpha1/zz_generated.deepcopy.go
+++ b/pkg/apis/gateway/v1alpha1/zz_generated.deepcopy.go
@@ -190,6 +190,36 @@ func (in *GatewayStatus) DeepCopy() *GatewayStatus {
return out
}
+// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.
+func (in *Metadata) DeepCopyInto(out *Metadata) {
+ *out = *in
+ 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
+ }
+ }
+ if in.Labels != nil {
+ in, out := &in.Labels, &out.Labels
+ *out = make(map[string]string, len(*in))
+ for key, val := range *in {
+ (*out)[key] = val
+ }
+ }
+ return
+}
+
+// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new Metadata.
+func (in *Metadata) DeepCopy() *Metadata {
+ if in == nil {
+ return nil
+ }
+ out := new(Metadata)
+ in.DeepCopyInto(out)
+ return out
+}
+
// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.
func (in *NATSSubscriber) DeepCopyInto(out *NATSSubscriber) {
*out = *in
@@ -279,6 +309,7 @@ func (in *Subscribers) DeepCopy() *Subscribers {
// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.
func (in *Template) DeepCopyInto(out *Template) {
*out = *in
+ in.Metadata.DeepCopyInto(&out.Metadata)
if in.Container != nil {
in, out := &in.Container, &out.Container
*out = new(corev1.Container)