[k8s-checker] Add support for DaemonSets
Bug: skia:13597
Change-Id: Icd9fd98dfe530511db51c8c0219479e1dc7d3eb8
Reviewed-on: https://skia-review.googlesource.com/c/buildbot/+/564860
Reviewed-by: Ravi Mistry <rmistry@google.com>
Commit-Queue: Eric Boren <borenet@google.com>
diff --git a/datahopper/go/cd_metrics/cd_metrics.go b/datahopper/go/cd_metrics/cd_metrics.go
index 7b00dfe..c041ca4 100644
--- a/datahopper/go/cd_metrics/cd_metrics.go
+++ b/datahopper/go/cd_metrics/cd_metrics.go
@@ -346,7 +346,7 @@
if err != nil {
return skerr.Wrapf(err, "failed to read %s at %s", file, commit.Hash)
}
- deployments, statefulSets, cronJobs, err := k8s_config.ParseK8sConfigFile(contents)
+ deployments, statefulSets, cronJobs, daemonSets, err := k8s_config.ParseK8sConfigFile(contents)
if err != nil {
return skerr.Wrapf(err, "failed to parse %s", file)
}
@@ -364,6 +364,9 @@
for _, config := range cronJobs {
containers = append(containers, config.Spec.JobTemplate.Spec.Template.Spec.Containers...)
}
+ for _, config := range daemonSets {
+ containers = append(containers, config.Spec.Template.Spec.Containers...)
+ }
// Find the images used by each container.
for _, container := range containers {
diff --git a/k8s-checker/go/k8s-checker/main.go b/k8s-checker/go/k8s-checker/main.go
index c3ea850..15d501f 100644
--- a/k8s-checker/go/k8s-checker/main.go
+++ b/k8s-checker/go/k8s-checker/main.go
@@ -311,7 +311,7 @@
}
// There can be multiple YAML documents within a single YAML file.
- deployments, statefulSets, cronJobs, err := k8s_config.ParseK8sConfigFile(yamlContents)
+ deployments, statefulSets, cronJobs, daemonSets, err := k8s_config.ParseK8sConfigFile(yamlContents)
if err != nil {
sklog.Fatalf("Error when parsing %s: %s", filepath.Join(cluster, f), err)
}
@@ -341,6 +341,11 @@
namespaces = append(namespaces, fixupNamespace(config.Namespace))
containers = append(containers, config.Spec.Template.Spec.Containers)
}
+ for _, config := range daemonSets {
+ apps = append(apps, config.Spec.Template.Labels[appLabel])
+ namespaces = append(namespaces, fixupNamespace(config.Namespace))
+ containers = append(containers, config.Spec.Template.Spec.Containers)
+ }
for idx, app := range apps {
checkedInAppsToContainers[app] = util.StringSet{}
for _, c := range containers[idx] {
diff --git a/k8s-checker/go/k8s_config/k8s_config.go b/k8s-checker/go/k8s_config/k8s_config.go
index 3eb3de6..49cf784 100644
--- a/k8s-checker/go/k8s_config/k8s_config.go
+++ b/k8s-checker/go/k8s_config/k8s_config.go
@@ -14,19 +14,21 @@
CronJobKind = "CronJob"
DeploymentKind = "Deployment"
StatefulSetKind = "StatefulSet"
+ DaemonSetKind = "DaemonSet"
)
// ParseK8sConfigFile parses the given config file contents and returns the
// configs it contains.
-func ParseK8sConfigFile(contents []byte) ([]*apps.Deployment, []*apps.StatefulSet, []*batch.CronJob, error) {
+func ParseK8sConfigFile(contents []byte) ([]*apps.Deployment, []*apps.StatefulSet, []*batch.CronJob, []*apps.DaemonSet, error) {
yamlDocs := strings.Split(string(contents), "---")
deployments := []*apps.Deployment{}
statefulSets := []*apps.StatefulSet{}
cronJobs := []*batch.CronJob{}
+ daemonSets := []*apps.DaemonSet{}
for _, yamlDoc := range yamlDocs {
deployment := new(apps.Deployment)
if err := yaml.Unmarshal([]byte(yamlDoc), deployment); err != nil {
- return nil, nil, nil, skerr.Wrapf(err, "failed to parse config file")
+ return nil, nil, nil, nil, skerr.Wrapf(err, "failed to parse config file")
}
switch deployment.TypeMeta.Kind {
case DeploymentKind:
@@ -34,17 +36,23 @@
case StatefulSetKind:
statefulSet := new(apps.StatefulSet)
if err := yaml.Unmarshal([]byte(yamlDoc), statefulSet); err != nil {
- return nil, nil, nil, skerr.Wrapf(err, "failed to parse config file")
+ return nil, nil, nil, nil, skerr.Wrapf(err, "failed to parse config file")
}
statefulSets = append(statefulSets, statefulSet)
case CronJobKind:
cronJob := new(batch.CronJob)
if err := yaml.Unmarshal([]byte(yamlDoc), cronJob); err != nil {
- return nil, nil, nil, skerr.Wrapf(err, "failed to parse config file")
+ return nil, nil, nil, nil, skerr.Wrapf(err, "failed to parse config file")
}
cronJobs = append(cronJobs, cronJob)
+ case DaemonSetKind:
+ daemonSet := new(apps.DaemonSet)
+ if err := yaml.Unmarshal([]byte(yamlDoc), daemonSet); err != nil {
+ return nil, nil, nil, nil, skerr.Wrapf(err, "failed to parse config file")
+ }
+ daemonSets = append(daemonSets, daemonSet)
}
}
- return deployments, statefulSets, cronJobs, nil
+ return deployments, statefulSets, cronJobs, daemonSets, nil
}
diff --git a/k8s-checker/go/k8s_config/k8s_config_test.go b/k8s-checker/go/k8s_config/k8s_config_test.go
index 5e50608..855847a 100644
--- a/k8s-checker/go/k8s_config/k8s_config_test.go
+++ b/k8s-checker/go/k8s_config/k8s_config_test.go
@@ -171,11 +171,12 @@
func TestParseK8sConfigFile_Success(t *testing.T) {
unittest.SmallTest(t)
- deployments, statefulSets, cronJobs, err := ParseK8sConfigFile([]byte(k8sConfig))
+ deployments, statefulSets, cronJobs, daemonSets, err := ParseK8sConfigFile([]byte(k8sConfig))
require.NoError(t, err)
require.Len(t, deployments, 1)
require.Len(t, statefulSets, 1)
require.Len(t, cronJobs, 1)
+ require.Len(t, daemonSets, 0)
require.Equal(t, "gcr.io/skia-public/datahopper:2022-06-24T14_25_21Z-borenet-17bb7f4-clean", deployments[0].Spec.Template.Spec.Containers[0].Image)
require.Equal(t, "gcr.io/skia-public/autoroll-be:2022-06-21T13_56_34Z-borenet-33d442f-clean", statefulSets[0].Spec.Template.Spec.Containers[0].Image)
require.Equal(t, "gcr.io/skia-public/comp-ui-gitcron:2022-04-08T11_33_16Z-jcgregorio-72d31c9-clean", cronJobs[0].Spec.JobTemplate.Spec.Template.Spec.Containers[0].Image)
diff --git a/promk/go/genpromcrd/genpromcrd/genpromcrd.go b/promk/go/genpromcrd/genpromcrd/genpromcrd.go
index a939d2e..2bdda11 100644
--- a/promk/go/genpromcrd/genpromcrd/genpromcrd.go
+++ b/promk/go/genpromcrd/genpromcrd/genpromcrd.go
@@ -60,7 +60,7 @@
if err != nil {
return err
}
- deployments, statefulSets, _, err := k8s_config.ParseK8sConfigFile(b)
+ deployments, statefulSets, _, _, err := k8s_config.ParseK8sConfigFile(b)
if err != nil {
return skerr.Wrapf(err, "failed to parse")
}