]> ruderich.org/simon Gitweb - safcm/safcm.git/blobdiff - cmd/safcm/config/hosts.go
Use SPDX license identifiers
[safcm/safcm.git] / cmd / safcm / config / hosts.go
index cf750cbc0024c7381142ae5852d640b60046fecc..05924df585169b248369553c060016964007e91a 100644 (file)
@@ -1,25 +1,14 @@
 // Config: parse hosts.yaml
 
-// Copyright (C) 2021  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
-// the Free Software Foundation, either version 3 of the License, or
-// (at your option) any later version.
-//
-// This program is distributed in the hope that it will be useful,
-// but WITHOUT ANY WARRANTY; without even the implied warranty of
-// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-// GNU General Public License for more details.
-//
-// You should have received a copy of the GNU General Public License
-// along with this program.  If not, see <http://www.gnu.org/licenses/>.
+// SPDX-License-Identifier: GPL-3.0-or-later
+// Copyright (C) 2021-2024  Simon Ruderich
 
 package config
 
 import (
        "fmt"
        "os"
+       "strings"
 
        "gopkg.in/yaml.v2"
 )
@@ -31,6 +20,8 @@ type Hosts struct {
 
 type Host struct {
        Name string `yaml:"name"`
+
+       SshUser string `yaml:"ssh_user"`
 }
 
 func LoadHosts() (*Hosts, error) {
@@ -48,6 +39,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
        }