@@ -6,7 +6,7 @@ use std::time::Duration;
66use colored:: Colorize ;
77use tabled:: Table ;
88
9- use crate :: cli:: { DeployProjectParams , ProjectId , ProjectRun } ;
9+ use crate :: cli:: { DeployProjectParams , ProjectId , ProjectLogs , ProjectRun } ;
1010use crate :: client:: { CanineClient , CanineError , Pod , ProcessStatus } ;
1111use crate :: config:: CanineConfig ;
1212use crate :: kubeconfig:: { ensure_kubectl, kubeconfig_to_yaml} ;
@@ -80,6 +80,58 @@ pub async fn handle_run(
8080 Ok ( ( ) )
8181}
8282
83+ pub async fn handle_logs (
84+ config : & CanineConfig ,
85+ client : & CanineClient ,
86+ params : & ProjectLogs ,
87+ ) -> Result < ( ) , Box < dyn std:: error:: Error > > {
88+ gate_kubectl ( ) ;
89+
90+ print ! ( "Fetching project {}... " , params. project. cyan( ) ) ;
91+ io:: stdout ( ) . flush ( ) . unwrap ( ) ;
92+ let project = client. get_project ( & params. project ) . await ?;
93+ println ! ( "{}" , "done" . green( ) ) ;
94+
95+ print ! (
96+ "Downloading kubeconfig for cluster {}... " ,
97+ project. cluster_name. cyan( )
98+ ) ;
99+ io:: stdout ( ) . flush ( ) . unwrap ( ) ;
100+ let kubeconfig = client
101+ . download_kubeconfig_file ( & project. cluster_name . to_string ( ) )
102+ . await ?;
103+ let yaml = kubeconfig_to_yaml ( & kubeconfig. kubeconfig ) ?;
104+ config. save_kubeconfig ( yaml) ?;
105+ println ! ( "{}" , "done" . green( ) ) ;
106+
107+ print ! ( "Finding process {}... " , params. process. cyan( ) ) ;
108+ io:: stdout ( ) . flush ( ) . unwrap ( ) ;
109+ let processes = client. get_processes ( & params. project ) . await ?;
110+ let pod = processes
111+ . pods
112+ . iter ( )
113+ . find ( |p| p. name . contains ( & params. process ) )
114+ . ok_or_else ( || format ! ( "Process '{}' not found" , params. process) ) ?;
115+ println ! ( "{}" , "done" . green( ) ) ;
116+
117+ let mut args = vec ! [ "logs" , "-n" , & pod. namespace, & pod. name] ;
118+ if params. tail {
119+ args. push ( "-f" ) ;
120+ }
121+
122+ Command :: new ( "kubectl" )
123+ . args ( & args)
124+ . env (
125+ "KUBECONFIG" ,
126+ CanineConfig :: credential_path ( ) . to_str ( ) . unwrap ( ) ,
127+ )
128+ . stdout ( Stdio :: inherit ( ) )
129+ . stderr ( Stdio :: inherit ( ) )
130+ . status ( ) ?;
131+
132+ Ok ( ( ) )
133+ }
134+
83135pub async fn handle_deploy (
84136 client : & CanineClient ,
85137 params : & DeployProjectParams ,
0 commit comments