11package cli
22
33import (
4+ "context"
45 "crypto/tls"
56 "fmt"
67 "io"
78 "os"
9+ "os/signal"
810 "regexp"
11+ "syscall"
912
1013 "github.com/Telmate/proxmox-api-go/proxmox"
1114 "github.com/spf13/cobra"
@@ -25,6 +28,24 @@ func init() {
2528 RootCmd .PersistentFlags ().StringP ("proxyurl" , "p" , "" , "proxy url to connect to" )
2629}
2730
31+ func Context () context.Context {
32+ ctx , cancel := context .WithCancel (context .Background ())
33+
34+ // Channel to catch OS signals
35+ signalChan := make (chan os.Signal , 1 )
36+
37+ // Notify signalChan when SIGINT or SIGTERM is received
38+ signal .Notify (signalChan , os .Interrupt , syscall .SIGTERM )
39+
40+ // Goroutine to handle signal
41+ go func () {
42+ defer signal .Stop (signalChan ) // Cleanup when done
43+ <- signalChan // Wait for a signal
44+ cancel () // Cancel the context
45+ }()
46+ return ctx
47+ }
48+
2849func Execute () (err error ) {
2950 if err = RootCmd .Execute (); err != nil {
3051 return
@@ -33,12 +54,12 @@ func Execute() (err error) {
3354}
3455
3556func NewClient () (c * proxmox.Client ) {
36- c , err := Client ("" , "" , "" , "" , "" )
57+ c , err := Client (Context (), "" , "" , "" , "" , "" )
3758 LogFatalError (err )
3859 return
3960}
4061
41- func Client (apiUrl , userID , password , otp string , http_headers string ) (c * proxmox.Client , err error ) {
62+ func Client (ctx context. Context , apiUrl , userID , password , otp string , http_headers string ) (c * proxmox.Client , err error ) {
4263 insecure , _ := RootCmd .Flags ().GetBool ("insecure" )
4364 timeout , _ := RootCmd .Flags ().GetInt ("timeout" )
4465 proxyUrl , _ := RootCmd .Flags ().GetString ("proxyurl" )
@@ -67,12 +88,12 @@ func Client(apiUrl, userID, password, otp string, http_headers string) (c *proxm
6788 if userRequiresAPIToken (userID ) {
6889 c .SetAPIToken (userID , password )
6990 // As test, get the version of the server
70- _ , err = c .GetVersion ()
91+ _ , err = c .GetVersion (Context () )
7192 if err != nil {
7293 err = fmt .Errorf ("login error: %s" , err )
7394 }
7495 } else {
75- err = c .Login (userID , password , otp )
96+ err = c .Login (ctx , userID , password , otp )
7697 }
7798 return
7899}
0 commit comments