Skip to content

Commit d2a310a

Browse files
authored
add the pod security context (#470)
Signed-off-by: Shubham Chaudhary <shubham.chaudhary@harness.io>
1 parent dc8f359 commit d2a310a

File tree

5 files changed

+138
-39
lines changed

5 files changed

+138
-39
lines changed

controllers/chaosengine_controller.go

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -168,6 +168,11 @@ func getChaosRunnerLabels(cr *litmuschaosv1alpha1.ChaosEngine) map[string]string
168168

169169
// newGoRunnerPodForCR defines a new go-based Runner Pod
170170
func (r *ChaosEngineReconciler) newGoRunnerPodForCR(engine *chaosTypes.EngineInfo) (*corev1.Pod, error) {
171+
var experiment litmuschaosv1alpha1.ChaosExperiment
172+
if err := r.Client.Get(context.TODO(), types.NamespacedName{Name: engine.Instance.Spec.Experiments[0].Name, Namespace: engine.Instance.Namespace}, &experiment); err != nil {
173+
return nil, err
174+
}
175+
171176
engine.VolumeOpts.VolumeOperations(engine.Instance.Spec.Components.Runner.ConfigMaps, engine.Instance.Spec.Components.Runner.Secrets)
172177

173178
containerForRunner := container.NewBuilder().
@@ -196,6 +201,10 @@ func (r *ChaosEngineReconciler) newGoRunnerPodForCR(engine *chaosTypes.EngineInf
196201
containerForRunner.WithResourceRequirements(engine.Instance.Spec.Components.Runner.Resources)
197202
}
198203

204+
if !reflect.DeepEqual(experiment.Spec.Definition.SecurityContext.ContainerSecurityContext, corev1.SecurityContext{}) {
205+
containerForRunner.WithSecurityContext(experiment.Spec.Definition.SecurityContext.ContainerSecurityContext)
206+
}
207+
199208
podForRunner := pod.NewBuilder().
200209
WithName(engine.Instance.Name + "-runner").
201210
WithNamespace(engine.Instance.Namespace).
@@ -221,6 +230,10 @@ func (r *ChaosEngineReconciler) newGoRunnerPodForCR(engine *chaosTypes.EngineInf
221230
podForRunner.WithImagePullSecrets(engine.Instance.Spec.Components.Runner.ImagePullSecrets)
222231
}
223232

233+
if !reflect.DeepEqual(experiment.Spec.Definition.SecurityContext.PodSecurityContext, corev1.PodSecurityContext{}) {
234+
podForRunner.WithSecurityContext(experiment.Spec.Definition.SecurityContext.PodSecurityContext)
235+
}
236+
224237
runnerPod, err := podForRunner.Build()
225238
if err != nil {
226239
return nil, err

controllers/chaosengine_controller_test.go

Lines changed: 109 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -329,6 +329,11 @@ func TestNewGoRunnerPodForCR(t *testing.T) {
329329
},
330330
},
331331
},
332+
Experiments: []v1alpha1.ExperimentList{
333+
{
334+
Name: "pod-delete",
335+
},
336+
},
332337
},
333338
},
334339

@@ -355,6 +360,11 @@ func TestNewGoRunnerPodForCR(t *testing.T) {
355360
},
356361
},
357362
},
363+
Experiments: []v1alpha1.ExperimentList{
364+
{
365+
Name: "pod-delete",
366+
},
367+
},
358368
},
359369
},
360370

@@ -382,6 +392,11 @@ func TestNewGoRunnerPodForCR(t *testing.T) {
382392
},
383393
},
384394
},
395+
Experiments: []v1alpha1.ExperimentList{
396+
{
397+
Name: "pod-delete",
398+
},
399+
},
385400
},
386401
},
387402

@@ -409,6 +424,11 @@ func TestNewGoRunnerPodForCR(t *testing.T) {
409424
},
410425
},
411426
},
427+
Experiments: []v1alpha1.ExperimentList{
428+
{
429+
Name: "pod-delete",
430+
},
431+
},
412432
},
413433
},
414434

@@ -421,6 +441,13 @@ func TestNewGoRunnerPodForCR(t *testing.T) {
421441
engine: chaosTypes.EngineInfo{
422442
Instance: &v1alpha1.ChaosEngine{
423443
ObjectMeta: metav1.ObjectMeta{},
444+
Spec: v1alpha1.ChaosEngineSpec{
445+
Experiments: []v1alpha1.ExperimentList{
446+
{
447+
Name: "pod-delete",
448+
},
449+
},
450+
},
424451
},
425452
AppExperiments: []string{"exp-1"},
426453
},
@@ -435,6 +462,11 @@ func TestNewGoRunnerPodForCR(t *testing.T) {
435462
},
436463
Spec: v1alpha1.ChaosEngineSpec{
437464
ChaosServiceAccount: "fake-serviceAccount",
465+
Experiments: []v1alpha1.ExperimentList{
466+
{
467+
Name: "pod-delete",
468+
},
469+
},
438470
},
439471
},
440472

@@ -451,6 +483,11 @@ func TestNewGoRunnerPodForCR(t *testing.T) {
451483
},
452484
Spec: v1alpha1.ChaosEngineSpec{
453485
ChaosServiceAccount: "fake-serviceAccount",
486+
Experiments: []v1alpha1.ExperimentList{
487+
{
488+
Name: "pod-delete",
489+
},
490+
},
454491
},
455492
},
456493

@@ -472,6 +509,11 @@ func TestNewGoRunnerPodForCR(t *testing.T) {
472509
Image: "",
473510
},
474511
},
512+
Experiments: []v1alpha1.ExperimentList{
513+
{
514+
Name: "pod-delete",
515+
},
516+
},
475517
},
476518
},
477519

@@ -483,6 +525,15 @@ func TestNewGoRunnerPodForCR(t *testing.T) {
483525
for name, mock := range tests {
484526
t.Run(name, func(t *testing.T) {
485527
r := CreateFakeClient(t)
528+
exp := v1alpha1.ChaosExperiment{
529+
ObjectMeta: metav1.ObjectMeta{
530+
Name: "pod-delete",
531+
Namespace: "test",
532+
},
533+
}
534+
if err := r.Client.Create(context.TODO(), &exp); err != nil {
535+
t.Fatalf("Test %q failed: expected error not to be nil", name)
536+
}
486537
_, err := r.newGoRunnerPodForCR(&mock.engine)
487538
if mock.isErr && err == nil {
488539
t.Fatalf("Test %q failed: expected error not to be nil", name)
@@ -959,6 +1010,11 @@ func TestCheckEngineRunnerPod(t *testing.T) {
9591010
Image: "fake-runner-image",
9601011
},
9611012
},
1013+
Experiments: []v1alpha1.ExperimentList{
1014+
{
1015+
Name: "exp-1",
1016+
},
1017+
},
9621018
},
9631019
},
9641020

@@ -980,6 +1036,11 @@ func TestCheckEngineRunnerPod(t *testing.T) {
9801036
Image: "fake-runner-image",
9811037
},
9821038
},
1039+
Experiments: []v1alpha1.ExperimentList{
1040+
{
1041+
Name: "exp-1",
1042+
},
1043+
},
9831044
},
9841045
},
9851046

@@ -1002,6 +1063,11 @@ func TestCheckEngineRunnerPod(t *testing.T) {
10021063
Image: "fake-runner-image",
10031064
},
10041065
},
1066+
Experiments: []v1alpha1.ExperimentList{
1067+
{
1068+
Name: "exp-1",
1069+
},
1070+
},
10051071
},
10061072
},
10071073

@@ -1024,6 +1090,11 @@ func TestCheckEngineRunnerPod(t *testing.T) {
10241090
Image: "fake-runner-image",
10251091
},
10261092
},
1093+
Experiments: []v1alpha1.ExperimentList{
1094+
{
1095+
Name: "exp-1",
1096+
},
1097+
},
10271098
},
10281099
},
10291100

@@ -1036,6 +1107,13 @@ func TestCheckEngineRunnerPod(t *testing.T) {
10361107
engine: chaosTypes.EngineInfo{
10371108
Instance: &v1alpha1.ChaosEngine{
10381109
ObjectMeta: metav1.ObjectMeta{},
1110+
Spec: v1alpha1.ChaosEngineSpec{
1111+
Experiments: []v1alpha1.ExperimentList{
1112+
{
1113+
Name: "exp-1",
1114+
},
1115+
},
1116+
},
10391117
},
10401118

10411119
AppExperiments: []string{"exp-1"},
@@ -1051,6 +1129,11 @@ func TestCheckEngineRunnerPod(t *testing.T) {
10511129
},
10521130
Spec: v1alpha1.ChaosEngineSpec{
10531131
ChaosServiceAccount: "fake-serviceAccount",
1132+
Experiments: []v1alpha1.ExperimentList{
1133+
{
1134+
Name: "exp-1",
1135+
},
1136+
},
10541137
},
10551138
},
10561139

@@ -1099,6 +1182,15 @@ func TestCheckEngineRunnerPod(t *testing.T) {
10991182
for name, mock := range tests {
11001183
t.Run(name, func(t *testing.T) {
11011184
r := CreateFakeClient(t)
1185+
exp := v1alpha1.ChaosExperiment{
1186+
ObjectMeta: metav1.ObjectMeta{
1187+
Name: "exp-1",
1188+
Namespace: "test",
1189+
},
1190+
}
1191+
if err := r.Client.Create(context.TODO(), &exp); err != nil {
1192+
t.Fatalf("Test %q failed: expected error not to be nil", name)
1193+
}
11021194
reqLogger := chaosTypes.Log.WithValues()
11031195
err := r.checkEngineRunnerPod(&mock.engine, reqLogger)
11041196
if mock.isErr && err == nil {
@@ -1506,6 +1598,15 @@ func TestReconcileForCreationAndRunning(t *testing.T) {
15061598
for name, mock := range tests {
15071599
t.Run(name, func(t *testing.T) {
15081600
r := CreateFakeClient(t)
1601+
exp := v1alpha1.ChaosExperiment{
1602+
ObjectMeta: metav1.ObjectMeta{
1603+
Name: "exp-1",
1604+
Namespace: "test",
1605+
},
1606+
}
1607+
if err := r.Client.Create(context.TODO(), &exp); err != nil {
1608+
t.Fatalf("Test %q failed: expected error not to be nil", name)
1609+
}
15091610
reqLogger := chaosTypes.Log.WithValues()
15101611
_, err := r.reconcileForCreationAndRunning(&mock.engine, reqLogger)
15111612
if mock.isErr && err == nil {
@@ -1534,11 +1635,18 @@ func CreateFakeClient(t *testing.T) *ChaosEngineReconciler {
15341635
},
15351636
}
15361637

1638+
exp := &v1alpha1.ChaosExperiment{
1639+
ObjectMeta: metav1.ObjectMeta{
1640+
Labels: make(map[string]string),
1641+
Name: "dummyexp",
1642+
},
1643+
}
1644+
15371645
chaosResultList := &v1alpha1.ChaosResultList{
15381646
Items: []v1alpha1.ChaosResult{},
15391647
}
15401648

1541-
s.AddKnownTypes(v1alpha1.SchemeGroupVersion, engineR, chaosResultList)
1649+
s.AddKnownTypes(v1alpha1.SchemeGroupVersion, engineR, chaosResultList, exp)
15421650

15431651
recorder := record.NewFakeRecorder(1024)
15441652

go.mod

Lines changed: 10 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -4,17 +4,17 @@ go 1.19
44

55
require (
66
cloud.google.com/go v0.81.0 // indirect
7-
github.com/go-logr/logr v0.4.0
7+
github.com/go-logr/logr v1.2.3
88
github.com/google/go-cmp v0.5.6 // indirect
99
github.com/jpillora/go-ogle-analytics v0.0.0-20161213085824-14b04e0594ef
10-
github.com/litmuschaos/elves v0.0.0-20201107015738-552d74669e3c
10+
github.com/litmuschaos/elves v0.0.0-20230607095010-c7119636b529
1111
github.com/pkg/errors v0.9.1
1212
github.com/spf13/pflag v1.0.5 // indirect
1313
golang.org/x/crypto v0.0.0-20220314234659-1baeb1ce4c0b // indirect
1414
golang.org/x/oauth2 v0.0.0-20210514164344-f6687ab2804c // indirect
1515
gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c // indirect
16-
k8s.io/api v0.22.1
17-
k8s.io/apimachinery v0.22.1
16+
k8s.io/api v0.26.0
17+
k8s.io/apimachinery v0.26.0
1818
k8s.io/client-go v12.0.0+incompatible
1919
sigs.k8s.io/controller-runtime v0.10.0
2020
)
@@ -64,7 +64,7 @@ require (
6464
go.uber.org/multierr v1.6.0 // indirect
6565
go.uber.org/zap v1.19.0 // indirect
6666
golang.org/x/lint v0.0.0-20210508222113-6edffad5e616 // indirect
67-
golang.org/x/net v0.0.0-20220722155237-a158d28d115b // indirect
67+
golang.org/x/net v0.3.1-0.20221206200815-1e63c2f08a10 // indirect
6868
golang.org/x/sys v0.5.0 // indirect
6969
golang.org/x/term v0.5.0 // indirect
7070
golang.org/x/text v0.7.0 // indirect
@@ -78,15 +78,16 @@ require (
7878
gopkg.in/yaml.v3 v3.0.1 // indirect
7979
k8s.io/apiextensions-apiserver v0.22.1 // indirect
8080
k8s.io/component-base v0.22.2 // indirect
81-
k8s.io/klog/v2 v2.9.0 // indirect
81+
k8s.io/klog/v2 v2.80.1 // indirect
8282
k8s.io/kube-openapi v0.0.0-20210421082810-95288971da7e // indirect
83-
k8s.io/utils v0.0.0-20210819203725-bdf08cb9a70a // indirect
84-
sigs.k8s.io/structured-merge-diff/v4 v4.1.2 // indirect
83+
k8s.io/utils v0.0.0-20221107191617-1a15be271d1d // indirect
84+
sigs.k8s.io/structured-merge-diff/v4 v4.2.3 // indirect
8585
sigs.k8s.io/yaml v1.2.0 // indirect
8686
)
8787

8888
// Pinned to kubernetes-1.21.2
8989
replace (
90+
github.com/go-logr/logr => github.com/go-logr/logr v0.4.0
9091
k8s.io/api => k8s.io/api v0.21.2
9192
k8s.io/apiextensions-apiserver => k8s.io/apiextensions-apiserver v0.21.2
9293
k8s.io/apimachinery => k8s.io/apimachinery v0.21.2
@@ -99,6 +100,7 @@ replace (
99100
k8s.io/component-base => k8s.io/component-base v0.21.2
100101
k8s.io/cri-api => k8s.io/cri-api v0.21.2
101102
k8s.io/csi-translation-lib => k8s.io/csi-translation-lib v0.21.2
103+
k8s.io/klog/v2 => k8s.io/klog/v2 v2.9.0
102104
k8s.io/kube-aggregator => k8s.io/kube-aggregator v0.21.2
103105
k8s.io/kube-controller-manager => k8s.io/kube-controller-manager v0.21.2
104106
k8s.io/kube-proxy => k8s.io/kube-proxy v0.21.2

go.sum

Lines changed: 6 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -300,8 +300,6 @@ github.com/go-kit/log v0.1.0/go.mod h1:zbhenjAZHb184qTLMA9ZjW7ThYL0H2mk7Q6pNt4vb
300300
github.com/go-logfmt/logfmt v0.3.0/go.mod h1:Qt1PoO58o5twSAckw1HlFXLmHsOX5/0LbT9GBnD5lWE=
301301
github.com/go-logfmt/logfmt v0.4.0/go.mod h1:3RMwSq7FuexP4Kalkev3ejPJsZTpXXBr9+V4qmtdjCk=
302302
github.com/go-logfmt/logfmt v0.5.0/go.mod h1:wCYkCAKZfumFQihp8CzCvQ3paCTfi41vtzG1KdI/P7A=
303-
github.com/go-logr/logr v0.1.0/go.mod h1:ixOQHD9gLJUVQQ2ZOR7zLEifBX6tGkNJF4QyIY7sIas=
304-
github.com/go-logr/logr v0.2.0/go.mod h1:z6/tIYblkpsD+a4lm/fGIIU9mZ+XfAiaFtq7xTgseGU=
305303
github.com/go-logr/logr v0.4.0 h1:K7/B1jt6fIBQVd4Owv2MqGQClcgf0R266+7C/QjRcLc=
306304
github.com/go-logr/logr v0.4.0/go.mod h1:z6/tIYblkpsD+a4lm/fGIIU9mZ+XfAiaFtq7xTgseGU=
307305
github.com/go-logr/zapr v0.1.0/go.mod h1:tabnROwaDl0UNxkVeFRbY8bwB37GwRv0P8lg6aAiEnk=
@@ -619,8 +617,8 @@ github.com/liggitt/tabwriter v0.0.0-20181228230101-89fcab3d43de/go.mod h1:zAbeS9
619617
github.com/lightstep/lightstep-tracer-common/golang/gogo v0.0.0-20190605223551-bc2310a04743/go.mod h1:qklhhLq1aX+mtWk9cPHPzaBjWImj5ULL6C7HFJtXQMM=
620618
github.com/lightstep/lightstep-tracer-go v0.18.0/go.mod h1:jlF1pusYV4pidLvZ+XD0UBX0ZE6WURAspgAczcDHrL4=
621619
github.com/lithammer/dedent v1.1.0/go.mod h1:jrXYCQtgg0nJiN+StA2KgR7w6CiQNv9Fd/Z9BP0jIOc=
622-
github.com/litmuschaos/elves v0.0.0-20201107015738-552d74669e3c h1:+hlppERdpCxMRW0QC+ckbz/mS6wH+fNVMlDMFGClk7U=
623-
github.com/litmuschaos/elves v0.0.0-20201107015738-552d74669e3c/go.mod h1:DsbHGNUq/78NZozWVVI9Q6eBei4I+JjlkkD5aibJ3MQ=
620+
github.com/litmuschaos/elves v0.0.0-20230607095010-c7119636b529 h1:Id7WZy5wXg7RYHbunkzkXFRolrfAerZzZkpjZ6MEZ/4=
621+
github.com/litmuschaos/elves v0.0.0-20230607095010-c7119636b529/go.mod h1:N4ljNnCRBeKgKw1zThi6wbQGQ2b6tlXb4eCVQRLJIvE=
624622
github.com/lovoo/gcloud-opentracing v0.3.0/go.mod h1:ZFqk2y38kMDDikZPAK7ynTTGuyt17nSPdS3K5e+ZTBY=
625623
github.com/magiconair/properties v1.8.0/go.mod h1:PppfXfuXeibc/6YijjN8zIbojt8czPbwD3XqdrwzmxQ=
626624
github.com/magiconair/properties v1.8.1/go.mod h1:PppfXfuXeibc/6YijjN8zIbojt8czPbwD3XqdrwzmxQ=
@@ -1473,9 +1471,6 @@ k8s.io/klog v0.3.3/go.mod h1:Gq+BEi5rUBO/HRz0bTSXDUcqjScdoY3a9IHpCEIOOfk=
14731471
k8s.io/klog v0.4.0/go.mod h1:4Bi6QPql/J/LkTDqv7R/cd3hPo4k2DG6Ptcz060Ez5I=
14741472
k8s.io/klog v1.0.0 h1:Pt+yjF5aB1xDSVbau4VsWe+dQNzA0qv1LlXdC2dF6Q8=
14751473
k8s.io/klog v1.0.0/go.mod h1:4Bi6QPql/J/LkTDqv7R/cd3hPo4k2DG6Ptcz060Ez5I=
1476-
k8s.io/klog/v2 v2.0.0/go.mod h1:PBfzABfn139FHAV07az/IF9Wp1bkk3vpT2XSJ76fSDE=
1477-
k8s.io/klog/v2 v2.2.0/go.mod h1:Od+F08eJP+W3HUb4pSrPpgp9DGU4GzlpG/TmITuYh/Y=
1478-
k8s.io/klog/v2 v2.8.0/go.mod h1:hy9LJ/NvuK+iVyP4Ehqva4HxZG/oXyIS3n3Jmire4Ec=
14791474
k8s.io/klog/v2 v2.9.0 h1:D7HV+n1V57XeZ0m6tdRkfknthUaM06VFbWldOFh8kzM=
14801475
k8s.io/klog/v2 v2.9.0/go.mod h1:hy9LJ/NvuK+iVyP4Ehqva4HxZG/oXyIS3n3Jmire4Ec=
14811476
k8s.io/kube-openapi v0.0.0-20190320154901-5e45bb682580/go.mod h1:BXM9ceUBTj2QnfH2MK1odQs778ajze1RxcmP6S8RVVc=
@@ -1493,8 +1488,8 @@ k8s.io/utils v0.0.0-20191114200735-6ca3b61696b6/go.mod h1:sZAwmy6armz5eXlNoLmJcl
14931488
k8s.io/utils v0.0.0-20200324210504-a9aa75ae1b89/go.mod h1:sZAwmy6armz5eXlNoLmJcl4F1QuKu7sr+mFQ0byX7Ew=
14941489
k8s.io/utils v0.0.0-20201110183641-67b214c5f920/go.mod h1:jPW/WVKK9YHAvNhRxK0md/EJ228hCsBRufyofKtW8HA=
14951490
k8s.io/utils v0.0.0-20210802155522-efc7438f0176/go.mod h1:jPW/WVKK9YHAvNhRxK0md/EJ228hCsBRufyofKtW8HA=
1496-
k8s.io/utils v0.0.0-20210819203725-bdf08cb9a70a h1:8dYfu/Fc9Gz2rNJKB9IQRGgQOh2clmRzNIPPY1xLY5g=
1497-
k8s.io/utils v0.0.0-20210819203725-bdf08cb9a70a/go.mod h1:jPW/WVKK9YHAvNhRxK0md/EJ228hCsBRufyofKtW8HA=
1491+
k8s.io/utils v0.0.0-20221107191617-1a15be271d1d h1:0Smp/HP1OH4Rvhe+4B8nWGERtlqAGSftbSbbmm45oFs=
1492+
k8s.io/utils v0.0.0-20221107191617-1a15be271d1d/go.mod h1:OLgZIPagt7ERELqWJFomSt595RzquPNLL48iOWgYOg0=
14981493
rsc.io/binaryregexp v0.2.0/go.mod h1:qTv7/COck+e2FymRvadv62gMdZztPaShugOCi3I+8D8=
14991494
rsc.io/letsencrypt v0.0.3/go.mod h1:buyQKZ6IXrRnB7TdkHP0RyEybLx18HHyOSoTyoOLqNY=
15001495
rsc.io/quote/v3 v3.1.0/go.mod h1:yEA65RcK8LyAZtP9Kv3t0HmxON59tX3rD+tICJqUlj0=
@@ -1513,8 +1508,8 @@ sigs.k8s.io/kustomize/kyaml v0.10.17/go.mod h1:mlQFagmkm1P+W4lZJbJ/yaxMd8PqMRSC4
15131508
sigs.k8s.io/structured-merge-diff v0.0.0-20190525122527-15d366b2352e/go.mod h1:wWxsB5ozmmv/SG7nM11ayaAW51xMvak/t1r0CSlcokI=
15141509
sigs.k8s.io/structured-merge-diff/v4 v4.0.2/go.mod h1:bJZC9H9iH24zzfZ/41RGcq60oK1F7G282QMXDPYydCw=
15151510
sigs.k8s.io/structured-merge-diff/v4 v4.1.0/go.mod h1:bJZC9H9iH24zzfZ/41RGcq60oK1F7G282QMXDPYydCw=
1516-
sigs.k8s.io/structured-merge-diff/v4 v4.1.2 h1:Hr/htKFmJEbtMgS/UD0N+gtgctAqz81t3nu+sPzynno=
1517-
sigs.k8s.io/structured-merge-diff/v4 v4.1.2/go.mod h1:j/nl6xW8vLS49O8YvXW1ocPhZawJtm+Yrr7PPRQ0Vg4=
1511+
sigs.k8s.io/structured-merge-diff/v4 v4.2.3 h1:PRbqxJClWWYMNV1dhaG4NsibJbArud9kFxnAMREiWFE=
1512+
sigs.k8s.io/structured-merge-diff/v4 v4.2.3/go.mod h1:qjx8mGObPmV2aSZepjQjbmb2ihdVs8cGKBraizNC69E=
15181513
sigs.k8s.io/yaml v1.1.0/go.mod h1:UJmg0vDUVViEyp3mgSv9WPwZCDxu4rQW1olrI1uml+o=
15191514
sigs.k8s.io/yaml v1.2.0 h1:kr/MCeFWJWTwyaHoR9c8EjH9OumOmoF9YGiZd7lFm/Q=
15201515
sigs.k8s.io/yaml v1.2.0/go.mod h1:yfXDCHCao9+ENCvLSE62v9VSji2MKu5jeNfTrofGhJc=

0 commit comments

Comments
 (0)