@@ -25,10 +25,13 @@ func kubernetesResourcesInputConfig() *service.ConfigSpec {
2525 return service .NewConfigSpec ().
2626 Beta ().
2727 Categories ("Services" ).
28- Summary ("List pods in Kubernetes." ).
28+ Summary ("List resources in Kubernetes." ).
2929 Fields (
3030 service .NewStringListField ("namespaces" ).
31- Description ("List of namespaces to list pods from." ),
31+ Description ("List of namespaces to list resources from." ),
32+ service .NewStringEnumField ("resource_type" , "pod" , "node" , "persistentvolume" , "persistentvolumeclaim" ).
33+ Description ("Type of resource to list." ).
34+ Default ("pod" ),
3235 service .NewStringField ("label_selector" ).
3336 Description ("Label selector applied to each list operation." ).
3437 Optional (),
@@ -46,6 +49,7 @@ func init() {
4649
4750type kubernetesResourcesInput struct {
4851 namespaces []string
52+ resourceType string
4953 labelSelector labels.Selector
5054 logger * service.Logger
5155
@@ -63,6 +67,11 @@ func newKubernetesResourcesInput(conf *service.ParsedConfig, logger *service.Log
6367 return nil , err
6468 }
6569
70+ resourceType , err := conf .FieldString ("resource_type" )
71+ if err != nil {
72+ return nil , err
73+ }
74+
6675 // Normalize the namespaces to lowercase and deduplicate.
6776 namespaces = lo .Uniq (lo .Map (namespaces , func (s string , _ int ) string { return strings .ToLower (s ) }))
6877
@@ -116,6 +125,7 @@ func newKubernetesResourcesInput(conf *service.ParsedConfig, logger *service.Log
116125 return & kubernetesResourcesInput {
117126 namespaces : namespaces ,
118127 labelSelector : selector ,
128+ resourceType : resourceType ,
119129 manager : mgr ,
120130 client : client ,
121131 logger : logger ,
@@ -153,36 +163,84 @@ func (in *kubernetesResourcesInput) ReadBatch(ctx context.Context) (service.Mess
153163
154164 // Iterate over each namespace and list pods.
155165 for _ , ns := range in .namespaces {
156- podList := & corev1.PodList {}
157166 opts := []client.ListOption {client .InNamespace (ns )}
158167 if in .labelSelector != nil {
159168 opts = append (opts , client.MatchingLabelsSelector {
160169 Selector : in .labelSelector ,
161170 })
162171 }
163172
164- if err := in .client .List (ctx , podList , opts ... ); err != nil {
165- return nil , nil , err
166- }
173+ switch in .resourceType {
174+ case "pod" :
175+ podList := & corev1.PodList {}
176+ if err := in .client .List (ctx , podList , opts ... ); err != nil {
177+ return nil , nil , err
178+ }
179+
180+ for _ , pod := range podList .Items {
181+ if ! lo .EveryBy (pod .Status .ContainerStatuses , func (cs corev1.ContainerStatus ) bool {
182+ return cs .State .Running != nil
183+ }) {
184+ continue
185+ }
186+
187+ encoded , err := json .Marshal (pod )
188+ if err != nil {
189+ return nil , nil , err
190+ }
191+
192+ in .logger .Debugf ("adding pod %s to batch" , pod .Name )
193+ batch = append (batch , service .NewMessage (encoded ))
194+ }
195+ case "node" :
196+ nodeList := & corev1.NodeList {}
197+ if err := in .client .List (ctx , nodeList , opts ... ); err != nil {
198+ return nil , nil , err
199+ }
167200
168- for _ , pod := range podList .Items {
169- if ! lo .EveryBy (pod .Status .ContainerStatuses , func (cs corev1.ContainerStatus ) bool {
170- return cs .State .Running != nil
171- }) {
172- continue
201+ for _ , node := range nodeList .Items {
202+ encoded , err := json .Marshal (node )
203+ if err != nil {
204+ return nil , nil , err
205+ }
206+
207+ in .logger .Debugf ("adding node %s to batch" , node .Name )
208+ batch = append (batch , service .NewMessage (encoded ))
209+ }
210+ case "persistentvolume" :
211+ persistentVolumeList := & corev1.PersistentVolumeList {}
212+ if err := in .client .List (ctx , persistentVolumeList , opts ... ); err != nil {
213+ return nil , nil , err
173214 }
174215
175- encoded , err := json .Marshal (pod )
176- if err != nil {
216+ for _ , persistentVolume := range persistentVolumeList .Items {
217+ encoded , err := json .Marshal (persistentVolume )
218+ if err != nil {
219+ return nil , nil , err
220+ }
221+
222+ in .logger .Debugf ("adding persistent volume %s to batch" , persistentVolume .Name )
223+ batch = append (batch , service .NewMessage (encoded ))
224+ }
225+ case "persistentvolumeclaim" :
226+ persistentVolumeClaimList := & corev1.PersistentVolumeClaimList {}
227+ if err := in .client .List (ctx , persistentVolumeClaimList , opts ... ); err != nil {
177228 return nil , nil , err
178229 }
179230
180- in .logger .Debugf ("adding pod %s to batch" , pod .Name )
181- batch = append (batch , service .NewMessage (encoded ))
231+ for _ , persistentVolumeClaim := range persistentVolumeClaimList .Items {
232+ encoded , err := json .Marshal (persistentVolumeClaim )
233+ if err != nil {
234+ return nil , nil , err
235+ }
236+
237+ in .logger .Debugf ("adding persistent volume claim %s to batch" , persistentVolumeClaim .Name )
238+ batch = append (batch , service .NewMessage (encoded ))
239+ }
182240 }
183241 }
184242
185- in .logger .Debugf ("batch size: %d" , len (batch ))
243+ in .logger .Debugf ("batch size of %s : %d" , in . resourceType , len (batch ))
186244
187245 return batch , func (context.Context , error ) error {
188246 // A nack (when err is non-nil) is handled automatically when we
0 commit comments