]> ruderich.org/simon Gitweb - safcm/safcm.git/blobdiff - cmd/safcm/config/hosts.go
Update copyright years
[safcm/safcm.git] / cmd / safcm / config / hosts.go
index cf750cbc0024c7381142ae5852d640b60046fecc..bb459c02a47be80d91e71a4b2a7a48837284906e 100644 (file)
@@ -1,6 +1,6 @@
 // Config: parse hosts.yaml
 
-// Copyright (C) 2021  Simon Ruderich
+// Copyright (C) 2021-2024  Simon Ruderich
 //
 // This program is free software: you can redistribute it and/or modify
 // it under the terms of the GNU General Public License as published by
@@ -20,6 +20,7 @@ package config
 import (
        "fmt"
        "os"
+       "strings"
 
        "gopkg.in/yaml.v2"
 )
@@ -31,6 +32,8 @@ type Hosts struct {
 
 type Host struct {
        Name string `yaml:"name"`
+
+       SshUser string `yaml:"ssh_user"`
 }
 
 func LoadHosts() (*Hosts, error) {
@@ -48,6 +51,28 @@ func LoadHosts() (*Hosts, error) {
 
        hostMap := make(map[string]*Host)
        for _, x := range hostList {
+               errPrefix := fmt.Sprintf("%s: host %q:", path, x.Name)
+               if x.Name == GroupAll {
+                       return nil, fmt.Errorf(
+                               "%s conflict with pre-defined group %q",
+                               errPrefix, x.Name)
+               }
+               if strings.HasPrefix(x.Name, GroupDetectedPrefix) {
+                       return nil, fmt.Errorf(
+                               "%s name must not start with %q "+
+                                       "(reserved for detected groups)",
+                               errPrefix, GroupDetectedPrefix)
+               }
+               if strings.Contains(x.Name, GroupSpecialSeparator) {
+                       return nil, fmt.Errorf(
+                               "%s name must not contain %q",
+                               errPrefix, GroupSpecialSeparator)
+               }
+
+               if hostMap[x.Name] != nil {
+                       return nil, fmt.Errorf("%s host name already exists",
+                               errPrefix)
+               }
                hostMap[x.Name] = x
        }