[sk8s] Record the k8s image name of each pod.
The associated YAML CL is https://skia-review.googlesource.com/c/k8s-config/+/288817.
Change-Id: I85bfa501dbf09b100491b0bb4521c7a1ec3f5574
Reviewed-on: https://skia-review.googlesource.com/c/buildbot/+/289622
Reviewed-by: Kevin Lubick <kjlubick@google.com>
Commit-Queue: Joe Gregorio <jcgregorio@google.com>
diff --git a/machine/go/machine/machine.go b/machine/go/machine/machine.go
index ca988bc..894f6d1 100644
--- a/machine/go/machine/machine.go
+++ b/machine/go/machine/machine.go
@@ -48,13 +48,18 @@
Annotation Annotation
Dimensions SwarmingDimensions
PodName string
+
+ // KubernetesImage is the kubernetes image name.
+ KubernetesImage string
+
// ScheduledForDeletion will be a non-empty string and equal to PodName if
// the pod should be deleted.
ScheduledForDeletion string
- LastUpdated time.Time
- Battery int // Charge as an integer percent, e.g. 50% = 50.
- Temperature map[string]float64 // In Celsius.
- RunningSwarmingTask bool
+
+ LastUpdated time.Time
+ Battery int // Charge as an integer percent, e.g. 50% = 50.
+ Temperature map[string]float64 // In Celsius.
+ RunningSwarmingTask bool
}
// NewDescription returns a new Description instance.
@@ -104,6 +109,9 @@
// PodName is the kubernetes pod name.
PodName string `json:"pod_name"`
+
+ // KubernetesImage is the container image being run.
+ KubernetesImage string `json:"image"`
}
// Event is the information a machine should send via Source when
diff --git a/machine/go/machine/machine_test.go b/machine/go/machine/machine_test.go
index c9a8b8c..9290640 100644
--- a/machine/go/machine/machine_test.go
+++ b/machine/go/machine/machine_test.go
@@ -24,6 +24,7 @@
"foo": []string{"bar"},
},
PodName: "rpi-swarming-1235-987",
+ KubernetesImage: "gcr.io/skia-public/rpi-swarming-client:2020-05-09T19_28_20Z-jcgregorio-4fef3ca-clean",
ScheduledForDeletion: "rpi-swarming-1235-987",
LastUpdated: testTime,
Battery: 91,
diff --git a/machine/go/machine/processor/impl.go b/machine/go/machine/processor/impl.go
index 952a182..e19c0e8 100644
--- a/machine/go/machine/processor/impl.go
+++ b/machine/go/machine/processor/impl.go
@@ -155,6 +155,7 @@
ret.RunningSwarmingTask = event.RunningSwarmingTask
ret.PodName = event.Host.PodName
ret.LastUpdated = time.Now()
+ ret.KubernetesImage = event.Host.KubernetesImage
for k, values := range dimensions {
ret.Dimensions[k] = values
}
diff --git a/machine/go/machine/processor/impl_test.go b/machine/go/machine/processor/impl_test.go
index a5c6a97..c8b18dd 100644
--- a/machine/go/machine/processor/impl_test.go
+++ b/machine/go/machine/processor/impl_test.go
@@ -148,8 +148,9 @@
GetProp: props,
},
Host: machine.Host{
- Name: "skia-rpi2-0001",
- PodName: "rpi-swarming-12345-987",
+ Name: "skia-rpi2-0001",
+ PodName: "rpi-swarming-12345-987",
+ KubernetesImage: "gcr.io/skia-public/rpi-swarming-client:2020-05-09T19_28_20Z-jcgregorio-4fef3ca-clean",
},
}
@@ -172,6 +173,7 @@
assert.Equal(t, expected, next.Dimensions)
assert.Equal(t, machine.ModeAvailable, next.Mode)
assert.Equal(t, event.Host.PodName, next.PodName)
+ assert.Equal(t, event.Host.KubernetesImage, next.KubernetesImage)
}
func TestProcess_DetectInsideDocker(t *testing.T) {
diff --git a/sk8s/go/bot_config/machine/machine.go b/sk8s/go/bot_config/machine/machine.go
index 4e9b112..baa6024 100644
--- a/sk8s/go/bot_config/machine/machine.go
+++ b/sk8s/go/bot_config/machine/machine.go
@@ -41,6 +41,9 @@
// Hostname is the hostname(), which is the pod name under k8s.
Hostname string
+ // KubernetesImage is the container image being run.
+ KubernetesImage string
+
// Metrics
interrogateTimer metrics2.Float64SummaryMetric
interrogateAndSendFailures metrics2.Counter
@@ -69,6 +72,7 @@
}
machineID := os.Getenv(swarming.SwarmingBotIDEnvVar)
+ kubernetesImage := os.Getenv(swarming.KubernetesImageEnvVar)
hostname, err := os.Hostname()
if err != nil {
return nil, skerr.Wrapf(err, "Could not determine hostname.")
@@ -81,6 +85,7 @@
adb: adb.New(),
MachineID: machineID,
Hostname: hostname,
+ KubernetesImage: kubernetesImage,
interrogateTimer: metrics2.GetFloat64SummaryMetric("bot_config_machine_interrogate_timer", map[string]string{"machine": machineID}),
interrogateAndSendFailures: metrics2.GetCounter("bot_config_machine_interrogate_and_send_errors", map[string]string{"machine": machineID}),
storeWatchArrivalCounter: metrics2.GetCounter("bot_config_machine_store_watch_arrival", map[string]string{"machine": machineID}),
@@ -94,6 +99,7 @@
ret := machine.NewEvent()
ret.Host.Name = m.MachineID
ret.Host.PodName = m.Hostname
+ ret.Host.KubernetesImage = m.KubernetesImage
if props, err := m.adb.RawProperties(ctx); err != nil {
sklog.Infof("Failed to read android properties: %s", err)
diff --git a/sk8s/go/bot_config/machine/machine_test.go b/sk8s/go/bot_config/machine/machine_test.go
index 6b8e19d..41a70c2 100644
--- a/sk8s/go/bot_config/machine/machine_test.go
+++ b/sk8s/go/bot_config/machine/machine_test.go
@@ -81,6 +81,17 @@
require.NoError(t, err)
}()
+ const imageName = "gcr.io/skia-public/rpi-swarming-client:2020-05-09T19_28_20Z-jcgregorio-4fef3ca-clean"
+
+ // Set the IMAGE_NAME env variable.
+ oldImageVar := os.Getenv(swarming.KubernetesImageEnvVar)
+ err = os.Setenv(swarming.KubernetesImageEnvVar, imageName)
+ require.NoError(t, err)
+ defer func() {
+ err = os.Setenv(swarming.KubernetesImageEnvVar, oldImageVar)
+ require.NoError(t, err)
+ }()
+
// Create a Machine instance.
m, err := New(ctx, true, instanceConfig)
require.NoError(t, err)
@@ -130,8 +141,9 @@
DumpsysThermalService: adbShellDumpSysBattery,
},
Host: machine.Host{
- Name: "my-test-bot-001",
- PodName: hostname,
+ Name: "my-test-bot-001",
+ PodName: hostname,
+ KubernetesImage: imageName,
},
},
event)
diff --git a/sk8s/go/bot_config/swarming/swarming.go b/sk8s/go/bot_config/swarming/swarming.go
index ed4e4db..3ca38c1 100644
--- a/sk8s/go/bot_config/swarming/swarming.go
+++ b/sk8s/go/bot_config/swarming/swarming.go
@@ -45,6 +45,13 @@
// SwarmingBotIDEnvVar is the swarming bot id environment variable name. See
// https://chromium.googlesource.com/infra/luci/luci-py.git/+/master/appengine/swarming/doc/Magic-Values.md#task-runtime-environment-variables
SwarmingBotIDEnvVar = "SWARMING_BOT_ID"
+
+ // KubernetesImageEnvVar is the environment variable that contains the
+ // daemonset image name.
+ //
+ // See https://skia.googlesource.com/k8s-config/+/refs/heads/master/skolo-rack4/rpi-swarming-daemonset.yaml
+ // where IMAGE_NAME is set.
+ KubernetesImageEnvVar = "IMAGE_NAME"
)
// New creates a new *Bot instance.