1
1
use futures:: { Stream , StreamExt , TryStreamExt } ;
2
2
use kube:: {
3
- api:: { Api , DynamicObject , GroupVersionKind , ListParams , ResourceExt } ,
4
- discovery:: { self , ApiCapabilities , Scope } ,
5
- runtime:: { metadata_watcher, watcher, WatchStreamExt } ,
6
- Client ,
3
+ api:: { Api , DynamicObject , GroupVersionKind , ListParams , Resource , ResourceExt } ,
4
+ runtime:: { metadata_watcher, watcher, watcher:: Event , WatchStreamExt } ,
7
5
} ;
8
6
use serde:: de:: DeserializeOwned ;
9
7
use tracing:: * ;
@@ -13,7 +11,7 @@ use std::{env, fmt::Debug};
13
11
#[ tokio:: main]
14
12
async fn main ( ) -> anyhow:: Result < ( ) > {
15
13
tracing_subscriber:: fmt:: init ( ) ;
16
- let client = Client :: try_default ( ) . await ?;
14
+ let client = kube :: Client :: try_default ( ) . await ?;
17
15
18
16
// If set will receive only the metadata for watched resources
19
17
let watch_metadata = env:: var ( "WATCH_METADATA" ) . map ( |s| s == "1" ) . unwrap_or ( false ) ;
@@ -26,34 +24,31 @@ async fn main() -> anyhow::Result<()> {
26
24
// Turn them into a GVK
27
25
let gvk = GroupVersionKind :: gvk ( & group, & version, & kind) ;
28
26
// Use API discovery to identify more information about the type (like its plural)
29
- let ( ar, caps ) = discovery:: pinned_kind ( & client, & gvk) . await ?;
27
+ let ( ar, _caps ) = kube :: discovery:: pinned_kind ( & client, & gvk) . await ?;
30
28
31
29
// Use the full resource info to create an Api with the ApiResource as its DynamicType
32
30
let api = Api :: < DynamicObject > :: all_with ( client, & ar) ;
31
+ let lp = ListParams :: default ( ) ;
33
32
34
33
// Start a metadata or a full resource watch
35
34
if watch_metadata {
36
- handle_events ( metadata_watcher ( api, ListParams :: default ( ) ) , caps ) . await ?
35
+ handle_events ( metadata_watcher ( api, lp ) ) . await
37
36
} else {
38
- handle_events ( watcher ( api, ListParams :: default ( ) ) , caps ) . await ?
37
+ handle_events ( watcher ( api, lp ) ) . await
39
38
}
40
-
41
- Ok ( ( ) )
42
39
}
43
40
44
- async fn handle_events < K : kube:: Resource + Clone + Debug + Send + DeserializeOwned + ' static > (
45
- stream : impl Stream < Item = watcher:: Result < watcher:: Event < K > > > + Send + ' static ,
46
- api_caps : ApiCapabilities ,
41
+ async fn handle_events < K : Resource + Clone + Debug + Send + DeserializeOwned + ' static > (
42
+ stream : impl Stream < Item = watcher:: Result < Event < K > > > + Send + ' static ,
47
43
) -> anyhow:: Result < ( ) > {
48
- // Fully compatible with kube-runtime
49
44
let mut items = stream. applied_objects ( ) . boxed ( ) ;
50
45
while let Some ( p) = items. try_next ( ) . await ? {
51
- if api_caps . scope == Scope :: Cluster {
52
- info ! ( "saw {}" , p. name_any( ) ) ;
46
+ if let Some ( ns ) = p . namespace ( ) {
47
+ info ! ( "saw {} in {ns} " , p. name_any( ) ) ;
53
48
} else {
54
- info ! ( "saw {} in {} " , p. name_any( ) , p . namespace ( ) . unwrap ( ) ) ;
49
+ info ! ( "saw {}" , p. name_any( ) ) ;
55
50
}
51
+ trace ! ( "full obj: {p:?}" ) ;
56
52
}
57
-
58
53
Ok ( ( ) )
59
54
}
0 commit comments