]> ruderich.org/simon Gitweb - safcm/safcm.git/blob - cmd/safcm/config/services.go
9a27b2dc07b3c8c066c38182ae22c213c52e08b3
[safcm/safcm.git] / cmd / safcm / config / services.go
1 // Config: parse services.yaml
2
3 // Copyright (C) 2021-2024  Simon Ruderich
4 //
5 // This program is free software: you can redistribute it and/or modify
6 // it under the terms of the GNU General Public License as published by
7 // the Free Software Foundation, either version 3 of the License, or
8 // (at your option) any later version.
9 //
10 // This program is distributed in the hope that it will be useful,
11 // but WITHOUT ANY WARRANTY; without even the implied warranty of
12 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
13 // GNU General Public License for more details.
14 //
15 // You should have received a copy of the GNU General Public License
16 // along with this program.  If not, see <http://www.gnu.org/licenses/>.
17
18 package config
19
20 import (
21         "fmt"
22         "os"
23         "path/filepath"
24         "strings"
25
26         "gopkg.in/yaml.v2"
27 )
28
29 func LoadServices(group string) ([]string, error) {
30         path := filepath.Join(group, "services.yaml")
31
32         var res []string
33         x, err := os.ReadFile(path)
34         if err != nil {
35                 if os.IsNotExist(err) {
36                         return nil, nil
37                 }
38                 return nil, err
39         }
40         err = yaml.UnmarshalStrict(x, &res)
41         if err != nil {
42                 return nil, fmt.Errorf("%s: failed to load: %v", path, err)
43         }
44
45         // Sanity checks
46         for _, x := range res {
47                 if len(strings.Fields(x)) != 1 {
48                         return nil, fmt.Errorf(
49                                 "%s: service name %q must not contain whitespace",
50                                 path, x)
51                 }
52         }
53
54         return res, nil
55 }