Skip to content

Commit

Permalink
Fix a bug in setting labels for ReplicaSet pods (#244)
Browse files Browse the repository at this point in the history
  • Loading branch information
zivnevo committed Jun 22, 2023
1 parent e280617 commit 938039f
Show file tree
Hide file tree
Showing 2 changed files with 11 additions and 16 deletions.
23 changes: 9 additions & 14 deletions pkg/analyzer/scan.go
Original file line number Diff line number Diff line change
Expand Up @@ -26,46 +26,40 @@ import (

// Create a common.Resource object from a k8s Workload object
func ScanK8sWorkloadObject(kind string, objDataBuf []byte) (*common.Resource, error) {
var podSpecV1 v1.PodTemplateSpec
var podSpecV1 *v1.PodTemplateSpec
var resourceCtx common.Resource
var metaObj metaV1.Object
resourceCtx.Resource.Kind = kind
switch kind { // TODO: handle Pod
case "ReplicaSet":
obj := parseResource[appsv1.ReplicaSet](bytes.NewReader(objDataBuf))
resourceCtx.Resource.Labels = obj.GetLabels()
podSpecV1 = obj.Spec.Template
podSpecV1 = &obj.Spec.Template
metaObj = obj
case "ReplicationController":
obj := parseResource[v1.ReplicationController](bytes.NewReader(objDataBuf))
resourceCtx.Resource.Labels = obj.Spec.Template.Labels
podSpecV1 = *obj.Spec.Template
podSpecV1 = obj.Spec.Template
metaObj = obj
case "Deployment":
obj := parseResource[appsv1.Deployment](bytes.NewReader(objDataBuf))
resourceCtx.Resource.Labels = obj.Spec.Template.Labels
podSpecV1 = obj.Spec.Template
podSpecV1 = &obj.Spec.Template
metaObj = obj
case "DaemonSet":
obj := parseResource[appsv1.DaemonSet](bytes.NewReader(objDataBuf))
resourceCtx.Resource.Labels = obj.Spec.Template.Labels
podSpecV1 = obj.Spec.Template
podSpecV1 = &obj.Spec.Template
metaObj = obj
case "StatefulSet":
obj := parseResource[appsv1.StatefulSet](bytes.NewReader(objDataBuf))
resourceCtx.Resource.Labels = obj.Spec.Template.Labels
podSpecV1 = obj.Spec.Template
podSpecV1 = &obj.Spec.Template
metaObj = obj
case "Job":
obj := parseResource[batchv1.Job](bytes.NewReader(objDataBuf))
resourceCtx.Resource.Labels = obj.Spec.Template.Labels
podSpecV1 = obj.Spec.Template
podSpecV1 = &obj.Spec.Template
metaObj = obj
default:
return nil, fmt.Errorf("unsupported object type: `%s`", kind)
}

parseDeployResource(&podSpecV1, metaObj, &resourceCtx)
parseDeployResource(podSpecV1, metaObj, &resourceCtx)
return &resourceCtx, nil
}

Expand Down Expand Up @@ -178,6 +172,7 @@ func ScanIngressObject(kind string, objDataBuf []byte, servicesToExpose common.S
func parseDeployResource(podSpec *v1.PodTemplateSpec, obj metaV1.Object, resourceCtx *common.Resource) {
resourceCtx.Resource.Name = obj.GetName()
resourceCtx.Resource.Namespace = obj.GetNamespace()
resourceCtx.Resource.Labels = podSpec.Labels
resourceCtx.Resource.ServiceAccountName = podSpec.Spec.ServiceAccountName
for containerIdx := range podSpec.Spec.Containers {
container := &podSpec.Spec.Containers[containerIdx]
Expand Down
4 changes: 2 additions & 2 deletions tests/k8s_guestbook/redis-leader-deployment.yaml
Original file line number Diff line number Diff line change
@@ -1,11 +1,11 @@
# SOURCE: https://cloud.google.com/kubernetes-engine/docs/tutorials/guestbook
apiVersion: apps/v1
kind: Deployment
kind: ReplicaSet
metadata:
name: redis-leader
namespace: redis
labels:
app: redis
app: redisapp
role: leader
tier: backend
spec:
Expand Down

0 comments on commit 938039f

Please sign in to comment.