X-Git-Url: https://ruderich.org/simon/gitweb/?a=blobdiff_plain;f=cmd%2Fsafcm%2Fconfig%2Fhosts.go;h=05924df585169b248369553c060016964007e91a;hb=HEAD;hp=cf750cbc0024c7381142ae5852d640b60046fecc;hpb=f2f2bc47e8729548f3c10117f7f008b547c4afc5;p=safcm%2Fsafcm.git diff --git a/cmd/safcm/config/hosts.go b/cmd/safcm/config/hosts.go index cf750cb..05924df 100644 --- a/cmd/safcm/config/hosts.go +++ b/cmd/safcm/config/hosts.go @@ -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 . +// 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 }