Skip to content

Commit e94226b

Browse files
committed
Link pod image pull secrets
1 parent 4c30c44 commit e94226b

2 files changed

Lines changed: 32 additions & 6 deletions

File tree

dev/kubeSnapshot.ts

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -40,6 +40,7 @@ type KubeItem = {
4040
runtimeClassName?: string;
4141
schedulerName?: string;
4242
schedulingGates?: Array<{ name?: string }>;
43+
imagePullSecrets?: Array<{ name?: string }>;
4344
selector?: Record<string, string> | { matchLabels?: Record<string, string> };
4445
serviceAccountName?: string;
4546
tolerations?: KubeToleration[];
@@ -763,6 +764,7 @@ function resourceReferences(item: KubeItem, namespace: string) {
763764
return uniqueReferences([
764765
...volumeReferences(item, namespace),
765766
...serviceAccountReferences(item, namespace),
767+
...imagePullSecretReferences(item, namespace),
766768
...envReferences(item, namespace),
767769
]);
768770
}
@@ -839,6 +841,12 @@ function serviceAccountReferences(item: KubeItem, namespace: string) {
839841
return serviceAccountName ? [{ kind: "ServiceAccount", namespace, name: serviceAccountName }] : [];
840842
}
841843

844+
function imagePullSecretReferences(item: KubeItem, namespace: string) {
845+
return (item.spec?.imagePullSecrets ?? [])
846+
.filter((secret) => secret.name)
847+
.map((secret) => ({ kind: "Secret", namespace, name: secret.name ?? "" }));
848+
}
849+
842850
function envReferences(item: KubeItem, namespace: string) {
843851
const references: Array<{ kind: string; namespace: string; name: string }> = [];
844852
const containers = [

src-tauri/src/kube_commands.rs

Lines changed: 24 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -2799,6 +2799,9 @@ fn pod_dependency_references(pod: &Pod, namespace: &str) -> Vec<ResourceReferenc
27992799
if let Some(reference) = pod_service_account_reference(pod, namespace) {
28002800
push_unique_reference(&mut references, reference);
28012801
}
2802+
for reference in pod_image_pull_secret_references(pod, namespace) {
2803+
push_unique_reference(&mut references, reference);
2804+
}
28022805
for reference in pod_env_references(pod, namespace) {
28032806
push_unique_reference(&mut references, reference);
28042807
}
@@ -2813,6 +2816,16 @@ fn pod_service_account_reference(pod: &Pod, namespace: &str) -> Option<ResourceR
28132816
.map(|name| resource_reference("ServiceAccount", namespace, name))
28142817
}
28152818

2819+
fn pod_image_pull_secret_references(pod: &Pod, namespace: &str) -> Vec<ResourceReference> {
2820+
pod.spec
2821+
.as_ref()
2822+
.and_then(|spec| spec.image_pull_secrets.as_deref())
2823+
.unwrap_or_default()
2824+
.iter()
2825+
.map(|secret| resource_reference("Secret", namespace, &secret.name))
2826+
.collect()
2827+
}
2828+
28162829
fn pod_volume_references(pod: &Pod, namespace: &str) -> Vec<ResourceReference> {
28172830
pod.spec
28182831
.as_ref()
@@ -3130,8 +3143,8 @@ mod tests {
31303143
use super::*;
31313144
use k8s_openapi::api::core::v1::{
31323145
ConfigMapEnvSource, ConfigMapKeySelector, ConfigMapVolumeSource, Container, ContainerState,
3133-
ContainerStateWaiting, EnvFromSource, EnvVar, EnvVarSource, ObjectReference, PersistentVolumeClaimVolumeSource,
3134-
PodSpec, PodStatus, SecretEnvSource, SecretKeySelector, SecretVolumeSource, Volume,
3146+
ContainerStateWaiting, EnvFromSource, EnvVar, EnvVarSource, LocalObjectReference, ObjectReference,
3147+
PersistentVolumeClaimVolumeSource, PodSpec, PodStatus, SecretEnvSource, SecretKeySelector, SecretVolumeSource, Volume,
31353148
};
31363149
use k8s_openapi::api::discovery::v1::{Endpoint, EndpointConditions, EndpointSlice};
31373150
use k8s_openapi::api::networking::v1::{
@@ -3983,6 +3996,9 @@ mod tests {
39833996
let mut pod = Pod::default();
39843997
pod.spec = Some(PodSpec {
39853998
service_account_name: Some("api-sa".to_string()),
3999+
image_pull_secrets: Some(vec![LocalObjectReference {
4000+
name: "registry-creds".to_string(),
4001+
}]),
39864002
containers: vec![Container {
39874003
name: "api".to_string(),
39884004
env_from: Some(vec![
@@ -4057,7 +4073,7 @@ mod tests {
40574073

40584074
let references = pod_dependency_references(&pod, "default");
40594075

4060-
assert_eq!(references.len(), 6);
4076+
assert_eq!(references.len(), 7);
40614077
assert_eq!(references[0].kind, "ConfigMap");
40624078
assert_eq!(references[0].name, "app-config");
40634079
assert_eq!(references[1].kind, "Secret");
@@ -4067,9 +4083,11 @@ mod tests {
40674083
assert_eq!(references[3].kind, "ServiceAccount");
40684084
assert_eq!(references[3].name, "api-sa");
40694085
assert_eq!(references[4].kind, "Secret");
4070-
assert_eq!(references[4].name, "env-secret");
4071-
assert_eq!(references[5].kind, "ConfigMap");
4072-
assert_eq!(references[5].name, "feature-config");
4086+
assert_eq!(references[4].name, "registry-creds");
4087+
assert_eq!(references[5].kind, "Secret");
4088+
assert_eq!(references[5].name, "env-secret");
4089+
assert_eq!(references[6].kind, "ConfigMap");
4090+
assert_eq!(references[6].name, "feature-config");
40734091
}
40744092

40754093
#[test]

0 commit comments

Comments
 (0)