diff --git a/pkg/skaffold/deploy/kubectl.go b/pkg/skaffold/deploy/kubectl.go index e88282241fd..cd6c8375a91 100644 --- a/pkg/skaffold/deploy/kubectl.go +++ b/pkg/skaffold/deploy/kubectl.go @@ -298,6 +298,7 @@ func (l *manifestList) replaceImages(b []build.Build) (manifestList, error) { } recursiveReplaceImage(m, replacements) + addSkaffoldLabels(m) updatedManifest, err := yaml.Marshal(m) if err != nil { @@ -318,6 +319,21 @@ func (l *manifestList) replaceImages(b []build.Build) (manifestList, error) { return updatedManifests, nil } +func addSkaffoldLabels(m map[interface{}]interface{}) { + metadata, ok := m["metadata"].(map[interface{}]interface{}) + if !ok { + return + } + + if metadata["labels"] == nil { + metadata["labels"] = make(map[interface{}]interface{}) + } + + if labels, ok := metadata["labels"].(map[interface{}]interface{}); ok { + labels["skaffold"] = "true" + } +} + func recursiveReplaceImage(i interface{}, replacements map[string]*replacement) { switch t := i.(type) { case []interface{}: diff --git a/pkg/skaffold/deploy/kubectl_test.go b/pkg/skaffold/deploy/kubectl_test.go index 4daac25efb4..b4157d8c4b2 100644 --- a/pkg/skaffold/deploy/kubectl_test.go +++ b/pkg/skaffold/deploy/kubectl_test.go @@ -223,6 +223,8 @@ func TestReplaceImages(t *testing.T) { apiVersion: v1 kind: Pod metadata: + labels: + key: value name: getting-started spec: containers: @@ -231,11 +233,18 @@ spec: - image: gcr.io/k8s-skaffold/example:latest name: latest - image: gcr.io/k8s-skaffold/example:v1 - name: fully-qualified - - image: skaffold/other - name: other - - image: gcr.io/k8s-skaffold/example@sha256:81daf011d63b68cfa514ddab7741a1adddd59d3264118dfb0fd9266328bb8883 - name: digest + name: fully-qualified`), []byte(` +apiVersion: v1 +kind: Deployment +metadata: + name: deployment +template: + spec: + containers: + - image: skaffold/other + name: other + - image: gcr.io/k8s-skaffold/example@sha256:81daf011d63b68cfa514ddab7741a1adddd59d3264118dfb0fd9266328bb8883 + name: digest `)} builds := []build.Build{{ @@ -250,6 +259,9 @@ spec: apiVersion: v1 kind: Pod metadata: + labels: + key: value + skaffold: "true" name: getting-started spec: containers: @@ -258,11 +270,20 @@ spec: - image: gcr.io/k8s-skaffold/example:TAG name: latest - image: gcr.io/k8s-skaffold/example:v1 - name: fully-qualified - - image: skaffold/other:OTHER_TAG - name: other - - image: gcr.io/k8s-skaffold/example@sha256:81daf011d63b68cfa514ddab7741a1adddd59d3264118dfb0fd9266328bb8883 - name: digest + name: fully-qualified`), []byte(` +apiVersion: v1 +kind: Deployment +metadata: + labels: + skaffold: "true" + name: deployment +template: + spec: + containers: + - image: skaffold/other:OTHER_TAG + name: other + - image: gcr.io/k8s-skaffold/example@sha256:81daf011d63b68cfa514ddab7741a1adddd59d3264118dfb0fd9266328bb8883 + name: digest `)} resultManifest, err := manifests.replaceImages(builds) @@ -323,6 +344,7 @@ kind: Deployment metadata: labels: run: skaffold + skaffold: "true" name: skaffold spec: replicas: 1