diff --git a/pkg/app/pipedv1/plugin/kubernetes/provider/deployment.go b/pkg/app/pipedv1/plugin/kubernetes/provider/deployment.go index b60aaa6162..dfcfa1cd3e 100644 --- a/pkg/app/pipedv1/plugin/kubernetes/provider/deployment.go +++ b/pkg/app/pipedv1/plugin/kubernetes/provider/deployment.go @@ -43,6 +43,11 @@ func FindContainerImages(m Manifest) []string { // - spec.template.spec.initContainers.envFrom.configMapRef.name // - spec.template.spec.containers.env.valueFrom.configMapKeyRef.name // - spec.template.spec.containers.envFrom.configMapRef.name +// - spec.jobTemplate.spec.template.spec.volumes.configMap.name +// - spec.jobTemplate.spec.template.spec.initContainers.env.valueFrom.configMapKeyRef.name +// - spec.jobTemplate.spec.template.spec.initContainers.envFrom.configMapRef.name +// - spec.jobTemplate.spec.template.spec.containers.env.valueFrom.configMapKeyRef.name +// - spec.jobTemplate.spec.template.spec.containers.envFrom.configMapRef.name func FindReferencingConfigMaps(m Manifest) []string { var configMaps []string @@ -66,6 +71,26 @@ func FindReferencingConfigMaps(m Manifest) []string { configMaps = append(configMaps, n...) } + if n := nestedStringSlice(m.body.Object, "spec", "jobTemplate", "spec", "template", "spec", "volumes", "configMap", "name"); len(n) > 0 { + configMaps = append(configMaps, n...) + } + + if n := nestedStringSlice(m.body.Object, "spec", "jobTemplate", "spec", "template", "spec", "initContainers", "env", "valueFrom", "configMapKeyRef", "name"); len(n) > 0 { + configMaps = append(configMaps, n...) + } + + if n := nestedStringSlice(m.body.Object, "spec", "jobTemplate", "spec", "template", "spec", "initContainers", "envFrom", "configMapRef", "name"); len(n) > 0 { + configMaps = append(configMaps, n...) + } + + if n := nestedStringSlice(m.body.Object, "spec", "jobTemplate", "spec", "template", "spec", "containers", "env", "valueFrom", "configMapKeyRef", "name"); len(n) > 0 { + configMaps = append(configMaps, n...) + } + + if n := nestedStringSlice(m.body.Object, "spec", "jobTemplate", "spec", "template", "spec", "containers", "envFrom", "configMapRef", "name"); len(n) > 0 { + configMaps = append(configMaps, n...) + } + slices.Sort(configMaps) return slices.Compact(configMaps) } @@ -78,6 +103,11 @@ func FindReferencingConfigMaps(m Manifest) []string { // - spec.template.spec.initContainers.envFrom.secretRef.name // - spec.template.spec.containers.env.valueFrom.secretKeyRef.name // - spec.template.spec.containers.envFrom.secretRef.name +// - spec.jobTemplate.spec.template.spec.volumes.secret.secretName +// - spec.jobTemplate.spec.template.spec.initContainers.env.valueFrom.secretKeyRef.name +// - spec.jobTemplate.spec.template.spec.initContainers.envFrom.secretRef.name +// - spec.jobTemplate.spec.template.spec.containers.env.valueFrom.secretKeyRef.name +// - spec.jobTemplate.spec.template.spec.containers.envFrom.secretRef.name func FindReferencingSecrets(m Manifest) []string { var secrets []string @@ -101,6 +131,26 @@ func FindReferencingSecrets(m Manifest) []string { secrets = append(secrets, n...) } + if n := nestedStringSlice(m.body.Object, "spec", "jobTemplate", "spec", "template", "spec", "volumes", "secret", "secretName"); len(n) > 0 { + secrets = append(secrets, n...) + } + + if n := nestedStringSlice(m.body.Object, "spec", "jobTemplate", "spec", "template", "spec", "initContainers", "env", "valueFrom", "secretKeyRef", "name"); len(n) > 0 { + secrets = append(secrets, n...) + } + + if n := nestedStringSlice(m.body.Object, "spec", "jobTemplate", "spec", "template", "spec", "initContainers", "envFrom", "secretRef", "name"); len(n) > 0 { + secrets = append(secrets, n...) + } + + if n := nestedStringSlice(m.body.Object, "spec", "jobTemplate", "spec", "template", "spec", "containers", "env", "valueFrom", "secretKeyRef", "name"); len(n) > 0 { + secrets = append(secrets, n...) + } + + if n := nestedStringSlice(m.body.Object, "spec", "jobTemplate", "spec", "template", "spec", "containers", "envFrom", "secretRef", "name"); len(n) > 0 { + secrets = append(secrets, n...) + } + slices.Sort(secrets) return slices.Compact(secrets) } diff --git a/pkg/app/pipedv1/plugin/kubernetes/provider/deployment_test.go b/pkg/app/pipedv1/plugin/kubernetes/provider/deployment_test.go index 52c9a99764..76951a9df5 100644 --- a/pkg/app/pipedv1/plugin/kubernetes/provider/deployment_test.go +++ b/pkg/app/pipedv1/plugin/kubernetes/provider/deployment_test.go @@ -239,6 +239,43 @@ spec: "init-configmap-1", }, }, + { + name: "configmap in cronjob", + manifest: ` +apiVersion: batch/v1 +kind: CronJob +metadata: + name: cronjob-with-configmap +spec: + schedule: "*/5 * * * *" + jobTemplate: + spec: + template: + spec: + containers: + - name: helloworld + image: gcr.io/pipecd/helloworld:v0.5.0 + env: + - name: env1 + valueFrom: + configMapKeyRef: + name: cronjob-configmap-1 + key: key1 + volumeMounts: + - name: config + mountPath: /etc/pipecd-config + readOnly: true + volumes: + - name: config + configMap: + name: cronjob-configmap-2 + restartPolicy: OnFailure +`, + expected: []string{ + "cronjob-configmap-1", + "cronjob-configmap-2", + }, + }, } for _, tc := range testcases { @@ -404,6 +441,43 @@ spec: "secret-2", }, }, + { + name: "secret in cronjob", + manifest: ` +apiVersion: batch/v1 +kind: CronJob +metadata: + name: cronjob-with-secret +spec: + schedule: "*/5 * * * *" + jobTemplate: + spec: + template: + spec: + containers: + - name: helloworld + image: gcr.io/pipecd/helloworld:v0.5.0 + env: + - name: env1 + valueFrom: + secretKeyRef: + name: cronjob-secret-1 + key: key1 + volumeMounts: + - name: config + mountPath: /etc/pipecd-config + readOnly: true + volumes: + - name: config + secret: + secretName: cronjob-secret-2 + restartPolicy: OnFailure +`, + expected: []string{ + "cronjob-secret-1", + "cronjob-secret-2", + }, + }, } for _, tc := range testcases { diff --git a/pkg/app/pipedv1/plugin/kubernetes_multicluster/provider/deployment.go b/pkg/app/pipedv1/plugin/kubernetes_multicluster/provider/deployment.go index 641b5e559d..3f5dcf0d5d 100644 --- a/pkg/app/pipedv1/plugin/kubernetes_multicluster/provider/deployment.go +++ b/pkg/app/pipedv1/plugin/kubernetes_multicluster/provider/deployment.go @@ -53,6 +53,11 @@ func FindContainerImages(m Manifest) []string { // - spec.template.spec.initContainers.envFrom.configMapRef.name // - spec.template.spec.containers.env.valueFrom.configMapKeyRef.name // - spec.template.spec.containers.envFrom.configMapRef.name +// - spec.jobTemplate.spec.template.spec.volumes.configMap.name +// - spec.jobTemplate.spec.template.spec.initContainers.env.valueFrom.configMapKeyRef.name +// - spec.jobTemplate.spec.template.spec.initContainers.envFrom.configMapRef.name +// - spec.jobTemplate.spec.template.spec.containers.env.valueFrom.configMapKeyRef.name +// - spec.jobTemplate.spec.template.spec.containers.envFrom.configMapRef.name func FindReferencingConfigMaps(m Manifest) []string { var configMaps []string @@ -76,6 +81,26 @@ func FindReferencingConfigMaps(m Manifest) []string { configMaps = append(configMaps, n...) } + if n := nestedStringSlice(m.body.Object, "spec", "jobTemplate", "spec", "template", "spec", "volumes", "configMap", "name"); len(n) > 0 { + configMaps = append(configMaps, n...) + } + + if n := nestedStringSlice(m.body.Object, "spec", "jobTemplate", "spec", "template", "spec", "initContainers", "env", "valueFrom", "configMapKeyRef", "name"); len(n) > 0 { + configMaps = append(configMaps, n...) + } + + if n := nestedStringSlice(m.body.Object, "spec", "jobTemplate", "spec", "template", "spec", "initContainers", "envFrom", "configMapRef", "name"); len(n) > 0 { + configMaps = append(configMaps, n...) + } + + if n := nestedStringSlice(m.body.Object, "spec", "jobTemplate", "spec", "template", "spec", "containers", "env", "valueFrom", "configMapKeyRef", "name"); len(n) > 0 { + configMaps = append(configMaps, n...) + } + + if n := nestedStringSlice(m.body.Object, "spec", "jobTemplate", "spec", "template", "spec", "containers", "envFrom", "configMapRef", "name"); len(n) > 0 { + configMaps = append(configMaps, n...) + } + slices.Sort(configMaps) return slices.Compact(configMaps) } @@ -88,6 +113,11 @@ func FindReferencingConfigMaps(m Manifest) []string { // - spec.template.spec.initContainers.envFrom.secretRef.name // - spec.template.spec.containers.env.valueFrom.secretKeyRef.name // - spec.template.spec.containers.envFrom.secretRef.name +// - spec.jobTemplate.spec.template.spec.volumes.secret.secretName +// - spec.jobTemplate.spec.template.spec.initContainers.env.valueFrom.secretKeyRef.name +// - spec.jobTemplate.spec.template.spec.initContainers.envFrom.secretRef.name +// - spec.jobTemplate.spec.template.spec.containers.env.valueFrom.secretKeyRef.name +// - spec.jobTemplate.spec.template.spec.containers.envFrom.secretRef.name func FindReferencingSecrets(m Manifest) []string { var secrets []string @@ -111,6 +141,26 @@ func FindReferencingSecrets(m Manifest) []string { secrets = append(secrets, n...) } + if n := nestedStringSlice(m.body.Object, "spec", "jobTemplate", "spec", "template", "spec", "volumes", "secret", "secretName"); len(n) > 0 { + secrets = append(secrets, n...) + } + + if n := nestedStringSlice(m.body.Object, "spec", "jobTemplate", "spec", "template", "spec", "initContainers", "env", "valueFrom", "secretKeyRef", "name"); len(n) > 0 { + secrets = append(secrets, n...) + } + + if n := nestedStringSlice(m.body.Object, "spec", "jobTemplate", "spec", "template", "spec", "initContainers", "envFrom", "secretRef", "name"); len(n) > 0 { + secrets = append(secrets, n...) + } + + if n := nestedStringSlice(m.body.Object, "spec", "jobTemplate", "spec", "template", "spec", "containers", "env", "valueFrom", "secretKeyRef", "name"); len(n) > 0 { + secrets = append(secrets, n...) + } + + if n := nestedStringSlice(m.body.Object, "spec", "jobTemplate", "spec", "template", "spec", "containers", "envFrom", "secretRef", "name"); len(n) > 0 { + secrets = append(secrets, n...) + } + slices.Sort(secrets) return slices.Compact(secrets) } diff --git a/pkg/app/pipedv1/plugin/kubernetes_multicluster/provider/deployment_test.go b/pkg/app/pipedv1/plugin/kubernetes_multicluster/provider/deployment_test.go index 921597fc61..fa0039281f 100644 --- a/pkg/app/pipedv1/plugin/kubernetes_multicluster/provider/deployment_test.go +++ b/pkg/app/pipedv1/plugin/kubernetes_multicluster/provider/deployment_test.go @@ -239,6 +239,43 @@ spec: "init-configmap-1", }, }, + { + name: "configmap in cronjob", + manifest: ` +apiVersion: batch/v1 +kind: CronJob +metadata: + name: cronjob-with-configmap +spec: + schedule: "*/5 * * * *" + jobTemplate: + spec: + template: + spec: + containers: + - name: helloworld + image: gcr.io/pipecd/helloworld:v0.5.0 + env: + - name: env1 + valueFrom: + configMapKeyRef: + name: cronjob-configmap-1 + key: key1 + volumeMounts: + - name: config + mountPath: /etc/pipecd-config + readOnly: true + volumes: + - name: config + configMap: + name: cronjob-configmap-2 + restartPolicy: OnFailure +`, + expected: []string{ + "cronjob-configmap-1", + "cronjob-configmap-2", + }, + }, } for _, tc := range testcases { @@ -404,6 +441,43 @@ spec: "secret-2", }, }, + { + name: "secret in cronjob", + manifest: ` +apiVersion: batch/v1 +kind: CronJob +metadata: + name: cronjob-with-secret +spec: + schedule: "*/5 * * * *" + jobTemplate: + spec: + template: + spec: + containers: + - name: helloworld + image: gcr.io/pipecd/helloworld:v0.5.0 + env: + - name: env1 + valueFrom: + secretKeyRef: + name: cronjob-secret-1 + key: key1 + volumeMounts: + - name: config + mountPath: /etc/pipecd-config + readOnly: true + volumes: + - name: config + secret: + secretName: cronjob-secret-2 + restartPolicy: OnFailure +`, + expected: []string{ + "cronjob-secret-1", + "cronjob-secret-2", + }, + }, } for _, tc := range testcases {