Skip to content

Commit

Permalink
fix: missing labels and annotations logic
Browse files Browse the repository at this point in the history
  • Loading branch information
elliotxx committed Aug 16, 2023
1 parent 5e23a2f commit ae1057d
Show file tree
Hide file tree
Showing 3 changed files with 63 additions and 20 deletions.
31 changes: 21 additions & 10 deletions pkg/generator/appconfiguration/generators/job_generator.go
Original file line number Diff line number Diff line change
Expand Up @@ -11,21 +11,21 @@ import (

type jobGenerator struct {
projectName string
jobName string
appName string
job *workload.Job
}

func NewJobGenerator(projectName, jobName string, job *workload.Job) (Generator, error) {
func NewJobGenerator(projectName, appName string, job *workload.Job) (Generator, error) {
return &jobGenerator{
projectName: projectName,
jobName: jobName,
appName: appName,
job: job,
}, nil
}

func NewJobGeneratorFunc(projectName, jobName string, job *workload.Job) NewGeneratorFunc {
func NewJobGeneratorFunc(projectName, appName string, job *workload.Job) NewGeneratorFunc {
return func() (Generator, error) {
return NewJobGenerator(projectName, jobName, job)
return NewJobGenerator(projectName, appName, job)
}
}

Expand All @@ -40,10 +40,15 @@ func (g *jobGenerator) Generate(spec *models.Spec) error {
}

meta := metav1.ObjectMeta{
Namespace: g.projectName,
Name: uniqueWorkloadName(g.projectName, g.jobName),
Labels: g.job.Labels,
Annotations: g.job.Annotations,
Namespace: g.projectName,
Name: uniqueAppName(g.projectName, g.appName),
Labels: mergeMaps(
uniqueAppLabels(g.projectName, g.appName),
g.job.Labels,
),
Annotations: mergeMaps(
g.job.Annotations,
),
}

containers, err := toOrderedContainers(job.Containers)
Expand All @@ -53,7 +58,13 @@ func (g *jobGenerator) Generate(spec *models.Spec) error {
jobSpec := batchv1.JobSpec{
Template: corev1.PodTemplateSpec{
ObjectMeta: metav1.ObjectMeta{
Labels: uniqueWorkloadLabels(g.projectName, g.jobName),
Labels: mergeMaps(
uniqueAppLabels(g.projectName, g.appName),
g.job.Labels,
),
Annotations: mergeMaps(
g.job.Annotations,
),
},
Spec: corev1.PodSpec{
Containers: containers,
Expand Down
32 changes: 26 additions & 6 deletions pkg/generator/appconfiguration/generators/util.go
Original file line number Diff line number Diff line change
Expand Up @@ -68,6 +68,26 @@ func IntPtr[T any](i T) *T {
return &i
}

// mergeMaps merges multiple map[string]string into one
// map[string]string.
// If a map is nil, it skips it and moves on to the next one. For each
// non-nil map, it iterates over its key-value pairs and adds them to
// the merged map. Finally, it returns the merged map.
func mergeMaps(maps ...map[string]string) map[string]string {
merged := make(map[string]string)

for _, m := range maps {
if m == nil {
continue
}
for k, v := range m {
merged[k] = v
}
}

return merged
}

// kubernetesResourceID returns the unique ID of a Kubernetes resource
// based on its type and metadata.
func kubernetesResourceID(typeMeta metav1.TypeMeta, objectMeta metav1.ObjectMeta) string {
Expand Down Expand Up @@ -98,15 +118,15 @@ func appendToSpec(resourceID string, resource any, spec *models.Spec) error {
return nil
}

// uniqueWorkloadName returns a unique name for a workload based on
// its project and name.
func uniqueWorkloadName(projectName, compName string) string {
return projectName + "-" + compName
// uniqueAppName returns a unique name for a workload based on
// its project and app name.
func uniqueAppName(projectName, appName string) string {
return projectName + appName
}

// uniqueWorkloadLabels returns a map of labels that identify a
// uniqueAppLabels returns a map of labels that identify a
// app based on its project and name.
func uniqueWorkloadLabels(projectName, appName string) map[string]string {
func uniqueAppLabels(projectName, appName string) map[string]string {
return map[string]string{
"app.kubernetes.io/part-of": projectName,
"app.kubernetes.io/name": appName,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -84,18 +84,30 @@ func (g *workloadServiceGenerator) Generate(spec *models.Spec) error {
Kind: "Deployment",
},
ObjectMeta: metav1.ObjectMeta{
Labels: uniqueWorkloadLabels(g.projectName, g.appName),
Name: uniqueWorkloadName(g.projectName, g.appName),
Labels: mergeMaps(
uniqueAppLabels(g.projectName, g.appName),
g.service.Labels,
),
Annotations: mergeMaps(
g.service.Annotations,
),
Name: uniqueAppName(g.projectName, g.appName),
Namespace: g.projectName,
},
Spec: appsv1.DeploymentSpec{
Replicas: IntPtr(int32(lrs.Replicas)),
Selector: &metav1.LabelSelector{
MatchLabels: uniqueWorkloadLabels(g.projectName, g.appName),
MatchLabels: uniqueAppLabels(g.projectName, g.appName),
},
Template: v1.PodTemplateSpec{
ObjectMeta: metav1.ObjectMeta{
Labels: uniqueWorkloadLabels(g.projectName, g.appName),
Labels: mergeMaps(
uniqueAppLabels(g.projectName, g.appName),
g.service.Labels,
),
Annotations: mergeMaps(
g.service.Annotations,
),
},
Spec: v1.PodSpec{
Containers: containers,
Expand Down

0 comments on commit ae1057d

Please sign in to comment.