syncable_cli/analyzer/kubelint/extract/
metadata.rs

1//! Metadata extraction utilities.
2
3use crate::analyzer::kubelint::context::K8sObject;
4use std::collections::BTreeMap;
5
6/// Extract labels from a Kubernetes object.
7pub fn extract_labels(obj: &K8sObject) -> Option<&BTreeMap<String, String>> {
8    match obj {
9        K8sObject::Deployment(d) => d.labels.as_ref(),
10        K8sObject::StatefulSet(d) => d.labels.as_ref(),
11        K8sObject::DaemonSet(d) => d.labels.as_ref(),
12        K8sObject::ReplicaSet(d) => d.labels.as_ref(),
13        K8sObject::Pod(d) => d.labels.as_ref(),
14        K8sObject::Job(d) => d.labels.as_ref(),
15        K8sObject::CronJob(d) => d.labels.as_ref(),
16        K8sObject::Service(d) => d.labels.as_ref(),
17        K8sObject::Ingress(d) => d.labels.as_ref(),
18        K8sObject::NetworkPolicy(d) => d.labels.as_ref(),
19        K8sObject::Role(d) => d.labels.as_ref(),
20        K8sObject::ClusterRole(d) => d.labels.as_ref(),
21        K8sObject::RoleBinding(d) => d.labels.as_ref(),
22        K8sObject::ClusterRoleBinding(d) => d.labels.as_ref(),
23        K8sObject::ServiceAccount(d) => d.labels.as_ref(),
24        K8sObject::HorizontalPodAutoscaler(d) => d.labels.as_ref(),
25        K8sObject::PodDisruptionBudget(d) => d.labels.as_ref(),
26        K8sObject::PersistentVolumeClaim(d) => d.labels.as_ref(),
27        K8sObject::Unknown(d) => d.labels.as_ref(),
28    }
29}
30
31/// Check if an object has a specific annotation.
32pub fn has_annotation(obj: &K8sObject, key: &str) -> bool {
33    obj.annotations()
34        .map(|a| a.contains_key(key))
35        .unwrap_or(false)
36}
37
38/// Get an annotation value from an object.
39pub fn get_annotation<'a>(obj: &'a K8sObject, key: &str) -> Option<&'a str> {
40    obj.annotations()
41        .and_then(|a| a.get(key))
42        .map(|s| s.as_str())
43}