Skip to content

Commit 3ef34ba

Browse files
committed
Feat: Support for ephemeralContainers (kubectl debug)
1 parent 74e46ff commit 3ef34ba

File tree

6 files changed

+22
-7
lines changed

6 files changed

+22
-7
lines changed

docs/recommendations.md

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -77,5 +77,5 @@ containersources.
7777

7878
The digester KRM function does not inspect the resource type or Kind,
7979
and it resolves digests for any resource that contains the fields
80-
`spec.containers`, `spec.initContainers`, `spec.template.spec.containers`, and
81-
`spec.template.spec.initContainers`.
80+
`spec.containers`, `spec.initContainers`, `spec.ephemeralContainers`,
81+
`spec.template.spec.containers`, and `spec.template.spec.initContainers`.

manifests/README.md

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -34,7 +34,7 @@ If you use a private GKE cluster, see additional steps for
3434
2. Apply this package:
3535

3636
```sh
37-
VERSION=v0.1.16
37+
VERSION=v0.1.17
3838
kustomize build "https://github.com/google/k8s-digester.git/manifests?ref=$VERSION" | kubectl apply -f -
3939
```
4040

@@ -52,7 +52,7 @@ If you use a private GKE cluster, see additional steps for
5252
3. Fetch this package:
5353

5454
```sh
55-
VERSION=v0.1.16
55+
VERSION=v0.1.17
5656
kpt pkg get "https://github.com/google/k8s-digester.git/manifests@${VERSION}" manifests
5757
```
5858

manifests/mutating-webhook-configuration.yaml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -39,6 +39,7 @@ webhooks:
3939
rules:
4040
- resources:
4141
- pods
42+
- pods/ephemeralcontainers
4243
- podtemplates
4344
- replicationcontrollers
4445
apiGroups:

pkg/resolve/resolve.go

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -69,6 +69,7 @@ func ImageTags(ctx context.Context, log logr.Logger, config *rest.Config, n *yam
6969
yaml.Lookup("spec"),
7070
yaml.Tee(yaml.Lookup("containers"), imageTagFilter),
7171
yaml.Tee(yaml.Lookup("initContainers"), imageTagFilter),
72+
yaml.Tee(yaml.Lookup("ephemeralContainers"), imageTagFilter),
7273
yaml.Lookup("template", "spec"),
7374
yaml.Tee(yaml.Lookup("containers"), imageTagFilter),
7475
yaml.Tee(yaml.Lookup("initContainers"), imageTagFilter),

pkg/resolve/resolve_stub_test.go

Lines changed: 12 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,7 @@ import (
2020
"sigs.k8s.io/kustomize/kyaml/yaml"
2121
)
2222

23-
func createPodNode(containerImages []string, initContainerImages []string) (*yaml.RNode, error) {
23+
func createPodNode(containerImages []string, initContainerImages []string, ephemeralContainerImages []string) (*yaml.RNode, error) {
2424
node, err := yaml.FromMap(M{
2525
"apiVersion": "v1",
2626
"kind": "Pod",
@@ -53,6 +53,17 @@ func createPodNode(containerImages []string, initContainerImages []string) (*yam
5353
return nil, err
5454
}
5555
}
56+
for index, image := range ephemeralContainerImages {
57+
if err := node.PipeE(
58+
yaml.LookupCreate(yaml.SequenceNode, "spec", "ephemeralContainers"),
59+
yaml.Append(yaml.NewMapRNode(&map[string]string{
60+
"name": fmt.Sprintf("ephemeralcontainer%d", index),
61+
"image": image,
62+
}).YNode()),
63+
); err != nil {
64+
return nil, err
65+
}
66+
}
5667
return node, nil
5768
}
5869

pkg/resolve/resolve_test.go

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -96,7 +96,7 @@ func Test_ImageTagFilter_filterImage_Container(t *testing.T) {
9696
}
9797

9898
func Test_ImageTags_Pod(t *testing.T) {
99-
node, err := createPodNode([]string{"image0", "image1"}, []string{"image2", "image3"})
99+
node, err := createPodNode([]string{"image0", "image1"}, []string{"image2", "image3"}, []string{"image4", "image5"})
100100
if err != nil {
101101
t.Fatalf("could not create pod node: %v", err)
102102
}
@@ -110,10 +110,12 @@ func Test_ImageTags_Pod(t *testing.T) {
110110
assertContainer(t, node, "image1@sha256:cc292b92ce7f10f2e4f727ecdf4b12528127c51b6ddf6058e213674603190d06", "spec", "containers", "[name=container1]")
111111
assertContainer(t, node, "image2@sha256:5bb21ac469b5e7df4e17899d4aae0adfb430f0f0b336a2242ef1a22d25bd2e53", "spec", "initContainers", "[name=initcontainer0]")
112112
assertContainer(t, node, "image3@sha256:b0542da3f90bad69318e16ec7fcb6b13b089971886999e08bec91cea34891f0f", "spec", "initContainers", "[name=initcontainer1]")
113+
assertContainer(t, node, "image4@sha256:9ca97c69ef7957a20eb9747ae40ae1d7c1326736b68fc75a74b25742c3f1fecd", "spec", "ephemeralContainers", "[name=ephemeralcontainer0]")
114+
assertContainer(t, node, "image5@sha256:51077af79f2b143d082e17640704cec760301d4e266ec868147f0cef3e329a48", "spec", "ephemeralContainers", "[name=ephemeralcontainer1]")
113115
}
114116

115117
func Test_ImageTags_Pod_Skip_Prefixes(t *testing.T) {
116-
node, err := createPodNode([]string{"image0", "skip1.local/image1"}, []string{"image2", "skip2.local/image3"})
118+
node, err := createPodNode([]string{"image0", "skip1.local/image1"}, []string{"image2", "skip2.local/image3"}, []string{})
117119
if err != nil {
118120
t.Fatalf("could not create pod node: %v", err)
119121
}

0 commit comments

Comments
 (0)