From bcaf0203444b391436a4cca4d8d34ebe310c190b Mon Sep 17 00:00:00 2001 From: Marco98 Date: Fri, 26 Jul 2024 10:47:47 +0200 Subject: [PATCH 1/2] feat: add "force no" flag and exit codes --- README.md | 3 +++ main.go | 20 +++++++++++++++----- 2 files changed, 18 insertions(+), 5 deletions(-) diff --git a/README.md b/README.md index 6a2c348..cb03020 100644 --- a/README.md +++ b/README.md @@ -40,6 +40,8 @@ Run the tool! ```shell Usage of routeros-upgrader: + -b string + set branch (stable, testing, ..) (default "stable") -c string config path (default "routers.yml") -d uint @@ -48,6 +50,7 @@ Usage of routeros-upgrader: install additional packages -l string limit routers + -n force no -nofw dont upgrade routerboard firmware -t string diff --git a/main.go b/main.go index 2c336d3..d2ff012 100644 --- a/main.go +++ b/main.go @@ -3,6 +3,7 @@ package main import ( "bufio" "bytes" + "errors" "flag" "fmt" "log" @@ -28,9 +29,10 @@ const ( ) var ( - version = "dev" - commit = "none" - date = "unknown" + version = "dev" + commit = "none" + date = "unknown" + errPendingUpdatesRefused = errors.New("pending updates forced with no") ) type RosParams struct { @@ -49,7 +51,11 @@ type RosParams struct { } func main() { - if err := run(); err != nil { + err := run() + if errors.Is(err, errPendingUpdatesRefused) { + os.Exit(2) + } + if err != nil { log.Fatalf("fatal error: %s", err) } } @@ -63,6 +69,7 @@ func run() error { tags := flag.String("t", "", "filter tags") limit := flag.String("l", "", "limit routers") forceyes := flag.Bool("y", false, "force yes") + forceno := flag.Bool("n", false, "force no") delaysecs := flag.Uint("d", 10, "reboot delay in seconds") extpkgsS := flag.String("extpkgs", "", "install additional packages") prversion := flag.Bool("v", false, "print version") @@ -102,8 +109,11 @@ func run() error { log.Println("no action required - exiting") return nil } + if *forceno { + return errPendingUpdatesRefused + } if !askYN("Install?", *forceyes) { - return nil + return errPendingUpdatesRefused } // Upgrade From 4083d80ca3ca8b47d5e7c8f5ed12c4bcd027f536 Mon Sep 17 00:00:00 2001 From: Marco98 Date: Sat, 27 Jul 2024 19:07:24 +0200 Subject: [PATCH 2/2] fix: exit with err when no-op cause of unreachable --- main.go | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/main.go b/main.go index d2ff012..e928990 100644 --- a/main.go +++ b/main.go @@ -33,6 +33,7 @@ var ( commit = "none" date = "unknown" errPendingUpdatesRefused = errors.New("pending updates forced with no") + errRouterUnreachable = errors.New("one or more routers unreachable") ) type RosParams struct { @@ -107,6 +108,11 @@ func run() error { pkgupdrts, fwupdrts := planUpgrades(rts, *tver, *branch, *noupdfw) if len(pkgupdrts) == 0 && len(fwupdrts) == 0 { log.Println("no action required - exiting") + for _, v := range rts { + if v.Conn == nil { + return errRouterUnreachable + } + } return nil } if *forceno {