]> ruderich.org/simon Gitweb - safcm/safcm.git/blobdiff - cmd/safcm/sync.go
safcm: add experimental support to sync from Windows hosts
[safcm/safcm.git] / cmd / safcm / sync.go
index 6358f0cb60feb4570cc5dae1a9e0e24bce6a69ed..0f7c54ff309f360ac0e0bc9cbe4071a467c7c02b 100644 (file)
@@ -23,6 +23,7 @@ import (
        "log"
        "os"
        "os/signal"
+       "runtime"
        "sort"
        "strings"
        "sync"
@@ -105,6 +106,10 @@ func MainSync(args []string) error {
                os.Exit(1)
        }
 
+       if runtime.GOOS == "windows" {
+               log.Print("WARNING: Windows support is experimental!")
+       }
+
        cfg, allHosts, allGroups, err := LoadBaseFiles()
        if err != nil {
                return err
@@ -122,7 +127,8 @@ func MainSync(args []string) error {
                return fmt.Errorf("no hosts found")
        }
 
-       isTTY := term.IsTerminal(int(os.Stdout.Fd()))
+       isTTY := term.IsTerminal(int(os.Stdout.Fd())) &&
+               term.IsTerminal(int(os.Stderr.Fd()))
 
        done := make(chan bool)
        // Collect events from all hosts and print them
@@ -246,13 +252,13 @@ are only available after the hosts were contacted.
        nameMatched := make(map[string]bool)
        // To detect typos we must check all given names but one host can be
        // matched by multiple names (e.g. two groups with overlapping hosts)
-       hostMatched := make(map[string]bool)
+       hostAdded := make(map[string]bool)
 
        var res []*config.Host
        for _, host := range allHosts.List {
                if nameMap[host.Name] {
                        res = append(res, host)
-                       hostMatched[host.Name] = true
+                       hostAdded[host.Name] = true
                        nameMatched[host.Name] = true
                }
 
@@ -263,9 +269,9 @@ are only available after the hosts were contacted.
                }
                for _, x := range groups {
                        if nameMap[x] {
-                               if !hostMatched[host.Name] {
+                               if !hostAdded[host.Name] {
                                        res = append(res, host)
-                                       hostMatched[host.Name] = true
+                                       hostAdded[host.Name] = true
                                }
                                nameMatched[x] = true
                        }
@@ -399,9 +405,7 @@ func (s *Sync) Host(wg *sync.WaitGroup) error {
        return nil
 }
 
-func (s *Sync) logf(level safcm.LogLevel, escaped bool,
-       format string, a ...interface{}) {
-
+func (s *Sync) log(level safcm.LogLevel, escaped bool, msg string) {
        if s.config.LogLevel < level {
                return
        }
@@ -409,16 +413,16 @@ func (s *Sync) logf(level safcm.LogLevel, escaped bool,
                Host: s.host,
                Log: Log{
                        Level: level,
-                       Text:  fmt.Sprintf(format, a...),
+                       Text:  msg,
                },
                Escaped: escaped,
        }
 }
 func (s *Sync) logDebugf(format string, a ...interface{}) {
-       s.logf(safcm.LogDebug, false, format, a...)
+       s.log(safcm.LogDebug, false, fmt.Sprintf(format, a...))
 }
 func (s *Sync) logVerbosef(format string, a ...interface{}) {
-       s.logf(safcm.LogVerbose, false, format, a...)
+       s.log(safcm.LogVerbose, false, fmt.Sprintf(format, a...))
 }
 
 // sendRecv sends a message over conn and waits for the response. Any MsgLog
@@ -436,7 +440,7 @@ func (s *Sync) sendRecv(conn *rpc.Conn, msg safcm.Msg) (safcm.Msg, error) {
                }
                log, ok := x.(safcm.MsgLog)
                if ok {
-                       s.logf(log.Level, false, "%s", log.Text)
+                       s.log(log.Level, false, log.Text)
                        continue
                }
                return x, nil