Skip to content

Commit 25d6904

Browse files
authored
Merge pull request #55 from utilitywarehouse/as-sb-bug
Strongbox bug fix and kustomize update
2 parents 9ef48a4 + b8e8562 commit 25d6904

File tree

5 files changed

+117
-57
lines changed

5 files changed

+117
-57
lines changed

Dockerfile

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@ FROM golang:1.21-alpine AS build
22

33
ENV \
44
STRONGBOX_VERSION=1.1.0 \
5-
KUSTOMIZE_VERSION=v5.1.0
5+
KUSTOMIZE_VERSION=v5.2.1
66

77
RUN os=$(go env GOOS) && arch=$(go env GOARCH) \
88
&& apk --no-cache add curl \

decrypt.go

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -24,12 +24,12 @@ func ensureDecryption(ctx context.Context, cwd string, app applicationInfo) erro
2424
return fmt.Errorf("unable to check if app source folder has encrypted files err:%s", err)
2525
}
2626

27-
if !found {
28-
return nil
29-
}
30-
3127
d, err := getKeyRingData(ctx, app.destinationNamespace, app.keyringSecret)
3228
if err != nil {
29+
// if there are no local secret file and secret is not found then its not an error
30+
if !found && errors.Is(err, errNotFound) {
31+
return nil
32+
}
3333
return err
3434
}
3535

decrypt_test.go

Lines changed: 76 additions & 40 deletions
Original file line numberDiff line numberDiff line change
@@ -151,6 +151,15 @@ func Test_ensureDecryption(t *testing.T) {
151151
}
152152

153153
kubeClient = fake.NewSimpleClientset(
154+
&v1.Secret{
155+
ObjectMeta: metaV1.ObjectMeta{
156+
Name: "strongbox-secret",
157+
Namespace: "bar",
158+
},
159+
Data: map[string][]byte{
160+
"keyring": kr,
161+
},
162+
},
154163
&v1.Secret{
155164
ObjectMeta: metaV1.ObjectMeta{
156165
Name: "strongbox-secret",
@@ -174,7 +183,7 @@ func Test_ensureDecryption(t *testing.T) {
174183
},
175184
)
176185

177-
// withRemoteBase doesn't have enc files so it should not look for "missing-secrets" secret
186+
// withRemoteBase doesn't have encrypted files so it should not error for "missing-secrets" secret
178187
bar := applicationInfo{
179188
name: "bar",
180189
destinationNamespace: "bar",
@@ -183,12 +192,35 @@ func Test_ensureDecryption(t *testing.T) {
183192
key: "invalid",
184193
},
185194
}
186-
err = ensureDecryption(context.Background(), withRemoteBaseTestDir, bar)
187-
if err != nil {
188-
t.Fatal(err)
195+
t.Run("no-encrypted-files-no-secret", func(t *testing.T) {
196+
err = ensureDecryption(context.Background(), withRemoteBaseTestDir, bar)
197+
if err != nil {
198+
t.Fatal(err)
199+
}
200+
})
201+
202+
// withRemoteBase doesn't have encrypted files but namespace contains secret so it should setup
203+
// strongbox for remote base's encrypted secrets
204+
bar2 := applicationInfo{
205+
name: "bar",
206+
destinationNamespace: "bar",
207+
keyringSecret: secretInfo{
208+
name: "strongbox-secret",
209+
key: "keyring",
210+
},
189211
}
212+
t.Run("no-encrypted-files-with-secret", func(t *testing.T) {
213+
err = ensureDecryption(context.Background(), withRemoteBaseTestDir, bar2)
214+
if err != nil {
215+
t.Fatal(err)
216+
}
217+
// make sure .strongbox_keyring file exists with correct keyring data
218+
if !bytes.Contains(getFileContent(t, withRemoteBaseTestDir+"/.strongbox_keyring"), kr) {
219+
t.Error(withRemoteBaseTestDir + "/.strongbox_keyring should contain keyring data")
220+
}
221+
})
190222

191-
// encryptedTestDir1 has enc files so it should look for secret and then decrypt content
223+
// encryptedTestDir1 has encrypted files so it should look for secret and then decrypt content
192224
// keyring secret in app's destination NS
193225
foo := applicationInfo{
194226
name: "foo",
@@ -198,29 +230,31 @@ func Test_ensureDecryption(t *testing.T) {
198230
key: "keyring",
199231
},
200232
}
201-
err = ensureDecryption(context.Background(), encryptedTestDir1, foo)
202-
if err != nil {
203-
t.Fatal(err)
204-
}
233+
t.Run("encrypted-files-with-secret", func(t *testing.T) {
234+
err = ensureDecryption(context.Background(), encryptedTestDir1, foo)
235+
if err != nil {
236+
t.Fatal(err)
237+
}
205238

206-
if !bytes.Contains(getFileContent(t, encryptedTestDir1+"/secrets/strongbox-keyring"), kr) {
207-
t.Error(encryptedTestDir1 + "/secrets/strongbox-keyring should contain keyring data")
208-
}
239+
if !bytes.Contains(getFileContent(t, encryptedTestDir1+"/secrets/strongbox-keyring"), kr) {
240+
t.Error(encryptedTestDir1 + "/secrets/strongbox-keyring should contain keyring data")
241+
}
209242

210-
encryptedFiles := []string{
211-
encryptedTestDir1 + "/app/secrets/env_secrets",
212-
encryptedTestDir1 + "/app/secrets/kube_secret.yaml",
213-
encryptedTestDir1 + "/app/secrets/s1.json",
214-
encryptedTestDir1 + "/app/secrets/s2.yaml",
215-
}
243+
encryptedFiles := []string{
244+
encryptedTestDir1 + "/app/secrets/env_secrets",
245+
encryptedTestDir1 + "/app/secrets/kube_secret.yaml",
246+
encryptedTestDir1 + "/app/secrets/s1.json",
247+
encryptedTestDir1 + "/app/secrets/s2.yaml",
248+
}
216249

217-
for _, f := range encryptedFiles {
218-
if !bytes.Contains(getFileContent(t, f), []byte("PlainText")) {
219-
t.Errorf("%s should be decrypted", f)
250+
for _, f := range encryptedFiles {
251+
if !bytes.Contains(getFileContent(t, f), []byte("PlainText")) {
252+
t.Errorf("%s should be decrypted", f)
253+
}
220254
}
221-
}
255+
})
222256

223-
// encryptedTestDir2 has enc files so it should look for secret and then decrypt content
257+
// encryptedTestDir2 has encrypted files so it should look for secret and then decrypt content
224258
// keyring secret in different namespace then app's destination NS
225259
baz := applicationInfo{
226260
name: "foo",
@@ -231,26 +265,28 @@ func Test_ensureDecryption(t *testing.T) {
231265
key: "keyring",
232266
},
233267
}
234-
err = ensureDecryption(context.Background(), encryptedTestDir2, baz)
235-
if err != nil {
236-
t.Fatal(err)
237-
}
268+
t.Run("encrypted-files-with-secret-from-diff-ns", func(t *testing.T) {
269+
err = ensureDecryption(context.Background(), encryptedTestDir2, baz)
270+
if err != nil {
271+
t.Fatal(err)
272+
}
238273

239-
if !bytes.Contains(getFileContent(t, encryptedTestDir2+"/secrets/strongbox-keyring"), kr) {
240-
t.Error(encryptedTestDir2 + "/secrets/strongbox-keyring should contain keyring data")
241-
}
274+
if !bytes.Contains(getFileContent(t, encryptedTestDir2+"/secrets/strongbox-keyring"), kr) {
275+
t.Error(encryptedTestDir2 + "/secrets/strongbox-keyring should contain keyring data")
276+
}
242277

243-
encryptedFiles = []string{
244-
encryptedTestDir2 + "/app/secrets/env_secrets",
245-
encryptedTestDir2 + "/app/secrets/kube_secret.yaml",
246-
encryptedTestDir2 + "/app/secrets/s1.json",
247-
encryptedTestDir2 + "/app/secrets/s2.yaml",
248-
}
278+
encryptedFiles := []string{
279+
encryptedTestDir2 + "/app/secrets/env_secrets",
280+
encryptedTestDir2 + "/app/secrets/kube_secret.yaml",
281+
encryptedTestDir2 + "/app/secrets/s1.json",
282+
encryptedTestDir2 + "/app/secrets/s2.yaml",
283+
}
249284

250-
for _, f := range encryptedFiles {
251-
if !bytes.Contains(getFileContent(t, f), []byte("PlainText")) {
252-
t.Errorf("%s should be decrypted", f)
285+
for _, f := range encryptedFiles {
286+
if !bytes.Contains(getFileContent(t, f), []byte("PlainText")) {
287+
t.Errorf("%s should be decrypted", f)
288+
}
253289
}
254-
}
290+
})
255291

256292
}

go.mod

Lines changed: 12 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -6,17 +6,17 @@ require (
66
github.com/google/go-cmp v0.6.0
77
github.com/hashicorp/go-hclog v1.5.0
88
github.com/urfave/cli/v2 v2.25.7
9-
k8s.io/api v0.28.3
10-
k8s.io/apimachinery v0.28.3
11-
k8s.io/client-go v0.28.3
9+
k8s.io/api v0.28.4
10+
k8s.io/apimachinery v0.28.4
11+
k8s.io/client-go v0.28.4
1212
)
1313

1414
require (
1515
github.com/cpuguy83/go-md2man/v2 v2.0.3 // indirect
1616
github.com/davecgh/go-spew v1.1.1 // indirect
1717
github.com/emicklei/go-restful/v3 v3.11.0 // indirect
1818
github.com/evanphx/json-patch v5.6.0+incompatible // indirect
19-
github.com/fatih/color v1.15.0 // indirect
19+
github.com/fatih/color v1.16.0 // indirect
2020
github.com/go-logr/logr v1.3.0 // indirect
2121
github.com/go-openapi/jsonpointer v0.20.0 // indirect
2222
github.com/go-openapi/jsonreference v0.20.2 // indirect
@@ -37,20 +37,20 @@ require (
3737
github.com/pkg/errors v0.9.1 // indirect
3838
github.com/russross/blackfriday/v2 v2.1.0 // indirect
3939
github.com/xrash/smetrics v0.0.0-20201216005158-039620a65673 // indirect
40-
golang.org/x/net v0.17.0 // indirect
41-
golang.org/x/oauth2 v0.13.0 // indirect
42-
golang.org/x/sys v0.13.0 // indirect
43-
golang.org/x/term v0.13.0 // indirect
44-
golang.org/x/text v0.13.0 // indirect
45-
golang.org/x/time v0.3.0 // indirect
40+
golang.org/x/net v0.18.0 // indirect
41+
golang.org/x/oauth2 v0.14.0 // indirect
42+
golang.org/x/sys v0.14.0 // indirect
43+
golang.org/x/term v0.14.0 // indirect
44+
golang.org/x/text v0.14.0 // indirect
45+
golang.org/x/time v0.4.0 // indirect
4646
google.golang.org/appengine v1.6.8 // indirect
4747
google.golang.org/protobuf v1.31.0 // indirect
4848
gopkg.in/inf.v0 v0.9.1 // indirect
4949
gopkg.in/yaml.v2 v2.4.0 // indirect
5050
gopkg.in/yaml.v3 v3.0.1 // indirect
5151
k8s.io/klog/v2 v2.110.1 // indirect
52-
k8s.io/kube-openapi v0.0.0-20231010175941-2dd684a91f00 // indirect
53-
k8s.io/utils v0.0.0-20230726121419-3b25d923346b // indirect
52+
k8s.io/kube-openapi v0.0.0-20231113174909-778a5567bc1e // indirect
53+
k8s.io/utils v0.0.0-20231121161247-cf03d44ff3cf // indirect
5454
sigs.k8s.io/json v0.0.0-20221116044647-bc3834ca7abd // indirect
5555
sigs.k8s.io/structured-merge-diff/v4 v4.4.1 // indirect
5656
sigs.k8s.io/yaml v1.4.0 // indirect

go.sum

Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,8 @@ github.com/evanphx/json-patch v5.6.0+incompatible/go.mod h1:50XU6AFN0ol/bzJsmQLi
1111
github.com/fatih/color v1.13.0/go.mod h1:kLAiJbzzSOZDVNGyDpeOxJ47H46qBXwg5ILebYFFOfk=
1212
github.com/fatih/color v1.15.0 h1:kOqh6YHBtK8aywxGerMG2Eq3H6Qgoqeo13Bk2Mv/nBs=
1313
github.com/fatih/color v1.15.0/go.mod h1:0h5ZqXfHYED7Bhv2ZJamyIOUej9KtShiJESRwBDUSsw=
14+
github.com/fatih/color v1.16.0 h1:zmkK9Ngbjj+K0yRhTVONQh1p/HknKYSlNT+vZCzyokM=
15+
github.com/fatih/color v1.16.0/go.mod h1:fL2Sau1YI5c0pdGEVCbKQbLXB6edEj1ZgiY4NijnWvE=
1416
github.com/go-logr/logr v1.3.0 h1:2y3SDp0ZXuc6/cjLSZ+Q3ir+QB9T/iG5yYRXqsagWSY=
1517
github.com/go-logr/logr v1.3.0/go.mod h1:9T104GzyrTigFIr8wt5mBrctHMim0Nb2HLGrmQ40KvY=
1618
github.com/go-openapi/jsonpointer v0.19.6/go.mod h1:osyAmYz/mB/C3I+WsTTSgw1ONzaLJoLCyoi6/zppojs=
@@ -121,8 +123,12 @@ golang.org/x/net v0.0.0-20210226172049-e18ecbb05110/go.mod h1:m0MpNAwzfU5UDzcl9v
121123
golang.org/x/net v0.0.0-20220722155237-a158d28d115b/go.mod h1:XRhObCWvk6IyKnWLug+ECip1KBveYUHfp+8e9klMJ9c=
122124
golang.org/x/net v0.17.0 h1:pVaXccu2ozPjCXewfr1S7xza/zcXTity9cCdXQYSjIM=
123125
golang.org/x/net v0.17.0/go.mod h1:NxSsAGuq816PNPmqtQdLE42eU2Fs7NoRIZrHJAlaCOE=
126+
golang.org/x/net v0.18.0 h1:mIYleuAkSbHh0tCv7RvjL3F6ZVbLjq4+R7zbOn3Kokg=
127+
golang.org/x/net v0.18.0/go.mod h1:/czyP5RqHAH4odGYxBJ1qz0+CE5WZ+2j1YgoEo8F2jQ=
124128
golang.org/x/oauth2 v0.13.0 h1:jDDenyj+WgFtmV3zYVoi8aE2BwtXFLWOA67ZfNWftiY=
125129
golang.org/x/oauth2 v0.13.0/go.mod h1:/JMhi4ZRXAf4HG9LiNmxvk+45+96RUlVThiH8FzNBn0=
130+
golang.org/x/oauth2 v0.14.0 h1:P0Vrf/2538nmC0H+pEQ3MNFRRnVR7RlqyVw+bvm26z0=
131+
golang.org/x/oauth2 v0.14.0/go.mod h1:lAtNWgaWfL4cm7j2OV8TxGi9Qb7ECORx8DktCY74OwM=
126132
golang.org/x/sync v0.0.0-20190423024810-112230192c58/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
127133
golang.org/x/sync v0.0.0-20190911185100-cd5d95a43a6e/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
128134
golang.org/x/sync v0.0.0-20201020160332-67f06af15bc9/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
@@ -143,18 +149,26 @@ golang.org/x/sys v0.0.0-20220811171246-fbc7d0a398ab/go.mod h1:oPkhp1MJrh7nUepCBc
143149
golang.org/x/sys v0.6.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
144150
golang.org/x/sys v0.13.0 h1:Af8nKPmuFypiUBjVoU9V20FiaFXOcuZI21p0ycVYYGE=
145151
golang.org/x/sys v0.13.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
152+
golang.org/x/sys v0.14.0 h1:Vz7Qs629MkJkGyHxUlRHizWJRG2j8fbQKjELVSNhy7Q=
153+
golang.org/x/sys v0.14.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA=
146154
golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo=
147155
golang.org/x/term v0.0.0-20210927222741-03fcf44c2211/go.mod h1:jbD1KX2456YbFQfuXm/mYQcufACuNUgVhRMnK/tPxf8=
148156
golang.org/x/term v0.13.0 h1:bb+I9cTfFazGW51MZqBVmZy7+JEJMouUHTUSKVQLBek=
149157
golang.org/x/term v0.13.0/go.mod h1:LTmsnFJwVN6bCy1rVCoS+qHT1HhALEFxKncY3WNNh4U=
158+
golang.org/x/term v0.14.0 h1:LGK9IlZ8T9jvdy6cTdfKUCltatMFOehAQo9SRC46UQ8=
159+
golang.org/x/term v0.14.0/go.mod h1:TySc+nGkYR6qt8km8wUhuFRTVSMIX3XPR58y2lC8vww=
150160
golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ=
151161
golang.org/x/text v0.3.3/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ=
152162
golang.org/x/text v0.3.7/go.mod h1:u+2+/6zg+i71rQMx5EYifcz6MCKuco9NR6JIITiCfzQ=
153163
golang.org/x/text v0.3.8/go.mod h1:E6s5w1FMmriuDzIBO73fBruAKo1PCIq6d2Q6DHfQ8WQ=
154164
golang.org/x/text v0.13.0 h1:ablQoSUd0tRdKxZewP80B+BaqeKJuVhuRxj/dkrun3k=
155165
golang.org/x/text v0.13.0/go.mod h1:TvPlkZtksWOMsz7fbANvkp4WM8x/WCo/om8BMLbz+aE=
166+
golang.org/x/text v0.14.0 h1:ScX5w1eTa3QqT8oi6+ziP7dTV1S2+ALU0bI+0zXKWiQ=
167+
golang.org/x/text v0.14.0/go.mod h1:18ZOQIKpY8NJVqYksKHtTdi31H5itFRjB5/qKTNYzSU=
156168
golang.org/x/time v0.3.0 h1:rg5rLMjNzMS1RkNLzCG38eapWhnYLFYXDXj2gOlr8j4=
157169
golang.org/x/time v0.3.0/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ=
170+
golang.org/x/time v0.4.0 h1:Z81tqI5ddIoXDPvVQ7/7CC9TnLM7ubaFG2qXYd5BbYY=
171+
golang.org/x/time v0.4.0/go.mod h1:3BpzKBy/shNhVucY/MWOyx10tF3SFh9QdLuxbVysPQM=
158172
golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ=
159173
golang.org/x/tools v0.0.0-20191119224855-298f0cb1881e/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo=
160174
golang.org/x/tools v0.0.0-20200619180055-7c47624df98f/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE=
@@ -185,16 +199,26 @@ gopkg.in/yaml.v3 v3.0.1 h1:fxVm/GzAzEWqLHuvctI91KS9hhNmmWOoWu0XTYJS7CA=
185199
gopkg.in/yaml.v3 v3.0.1/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM=
186200
k8s.io/api v0.28.3 h1:Gj1HtbSdB4P08C8rs9AR94MfSGpRhJgsS+GF9V26xMM=
187201
k8s.io/api v0.28.3/go.mod h1:MRCV/jr1dW87/qJnZ57U5Pak65LGmQVkKTzf3AtKFHc=
202+
k8s.io/api v0.28.4 h1:8ZBrLjwosLl/NYgv1P7EQLqoO8MGQApnbgH8tu3BMzY=
203+
k8s.io/api v0.28.4/go.mod h1:axWTGrY88s/5YE+JSt4uUi6NMM+gur1en2REMR7IRj0=
188204
k8s.io/apimachinery v0.28.3 h1:B1wYx8txOaCQG0HmYF6nbpU8dg6HvA06x5tEffvOe7A=
189205
k8s.io/apimachinery v0.28.3/go.mod h1:uQTKmIqs+rAYaq+DFaoD2X7pcjLOqbQX2AOiO0nIpb8=
206+
k8s.io/apimachinery v0.28.4 h1:zOSJe1mc+GxuMnFzD4Z/U1wst50X28ZNsn5bhgIIao8=
207+
k8s.io/apimachinery v0.28.4/go.mod h1:wI37ncBvfAoswfq626yPTe6Bz1c22L7uaJ8dho83mgg=
190208
k8s.io/client-go v0.28.3 h1:2OqNb72ZuTZPKCl+4gTKvqao0AMOl9f3o2ijbAj3LI4=
191209
k8s.io/client-go v0.28.3/go.mod h1:LTykbBp9gsA7SwqirlCXBWtK0guzfhpoW4qSm7i9dxo=
210+
k8s.io/client-go v0.28.4 h1:Np5ocjlZcTrkyRJ3+T3PkXDpe4UpatQxj85+xjaD2wY=
211+
k8s.io/client-go v0.28.4/go.mod h1:0VDZFpgoZfelyP5Wqu0/r/TRYcLYuJ2U1KEeoaPa1N4=
192212
k8s.io/klog/v2 v2.110.1 h1:U/Af64HJf7FcwMcXyKm2RPM22WZzyR7OSpYj5tg3cL0=
193213
k8s.io/klog/v2 v2.110.1/go.mod h1:YGtd1984u+GgbuZ7e08/yBuAfKLSO0+uR1Fhi6ExXjo=
194214
k8s.io/kube-openapi v0.0.0-20231010175941-2dd684a91f00 h1:aVUu9fTY98ivBPKR9Y5w/AuzbMm96cd3YHRTU83I780=
195215
k8s.io/kube-openapi v0.0.0-20231010175941-2dd684a91f00/go.mod h1:AsvuZPBlUDVuCdzJ87iajxtXuR9oktsTctW/R9wwouA=
216+
k8s.io/kube-openapi v0.0.0-20231113174909-778a5567bc1e h1:snPmy96t93RredGRjKfMFt+gvxuVAncqSAyBveJtr4Q=
217+
k8s.io/kube-openapi v0.0.0-20231113174909-778a5567bc1e/go.mod h1:AsvuZPBlUDVuCdzJ87iajxtXuR9oktsTctW/R9wwouA=
196218
k8s.io/utils v0.0.0-20230726121419-3b25d923346b h1:sgn3ZU783SCgtaSJjpcVVlRqd6GSnlTLKgpAAttJvpI=
197219
k8s.io/utils v0.0.0-20230726121419-3b25d923346b/go.mod h1:OLgZIPagt7ERELqWJFomSt595RzquPNLL48iOWgYOg0=
220+
k8s.io/utils v0.0.0-20231121161247-cf03d44ff3cf h1:iTzha1p7Fi83476ypNSz8nV9iR9932jIIs26F7gNLsU=
221+
k8s.io/utils v0.0.0-20231121161247-cf03d44ff3cf/go.mod h1:OLgZIPagt7ERELqWJFomSt595RzquPNLL48iOWgYOg0=
198222
sigs.k8s.io/json v0.0.0-20221116044647-bc3834ca7abd h1:EDPBXCAspyGV4jQlpZSudPeMmr1bNJefnuqLsRAsHZo=
199223
sigs.k8s.io/json v0.0.0-20221116044647-bc3834ca7abd/go.mod h1:B8JuhiUyNFVKdsE8h686QcCxMaH6HrOAZj4vswFpcB0=
200224
sigs.k8s.io/structured-merge-diff/v4 v4.4.1 h1:150L+0vs/8DA78h1u02ooW1/fFq/Lwr+sGiqlzvrtq4=

0 commit comments

Comments
 (0)