X-Git-Url: https://ruderich.org/simon/gitweb/?a=blobdiff_plain;f=cmd%2Fsafcm%2Fsync.go;h=7fa2c936b637c7059e5429b273f310233ee92ed4;hb=4473e968425319e6beae558643bb047a6b01c17a;hp=09ffe854e1e7491727882f963a894ff9c801994e;hpb=f2f2bc47e8729548f3c10117f7f008b547c4afc5;p=safcm%2Fsafcm.git diff --git a/cmd/safcm/sync.go b/cmd/safcm/sync.go index 09ffe85..7fa2c93 100644 --- a/cmd/safcm/sync.go +++ b/cmd/safcm/sync.go @@ -71,6 +71,8 @@ func MainSync(args []string) error { optionDryRun := flag.Bool("n", false, "dry-run, show diff but don't perform any changes") + optionQuiet := flag.Bool("q", false, + "hide successful, non-trigger commands with no output from host changes listing") optionLog := flag.String("log", "info", "set log `level`; "+ "levels: error, info, verbose, debug, debug2, debug3") @@ -105,6 +107,7 @@ func MainSync(args []string) error { return err } cfg.DryRun = *optionDryRun + cfg.Quiet = *optionQuiet cfg.LogLevel = level toSync, err := hostsToSync(names, allHosts, allGroups) @@ -183,8 +186,24 @@ func MainSync(args []string) error { func hostsToSync(names []string, allHosts *config.Hosts, allGroups map[string][]string) ([]*config.Host, error) { + detectedMap := make(map[string]bool) + for _, x := range config.TransitivelyDetectedGroups(allGroups) { + detectedMap[x] = true + } + + const detectedErr = ` + +Groups depending on "detected" groups cannot be used to select hosts as these +are only available after the hosts were contacted. +` + nameMap := make(map[string]bool) for _, x := range names { + if detectedMap[x] { + return nil, fmt.Errorf( + "group %q depends on \"detected\" groups%s", + x, detectedErr) + } nameMap[x] = true } nameMatched := make(map[string]bool) @@ -200,8 +219,6 @@ func hostsToSync(names []string, allHosts *config.Hosts, nameMatched[host.Name] = true } - // TODO: don't permit groups which contain "detected" groups - // because these are not available yet groups, err := config.ResolveHostGroups(host.Name, allGroups, nil) if err != nil { @@ -310,7 +327,7 @@ func (s *Sync) Host(wg *sync.WaitGroup) error { }() // Connect to remote host - err := conn.DialSSH(s.host.Name) + err := conn.DialSSH(s.host.SshUser, s.host.Name) if err != nil { return err }