// "sync" sub-command: collect information from remote host // 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 . package main import ( "fmt" "regexp" "strings" "ruderich.org/simon/safcm" "ruderich.org/simon/safcm/cmd/safcm/config" "ruderich.org/simon/safcm/rpc" ) func (s *Sync) hostInfo(conn *rpc.Conn) ([]string, error) { x, err := s.sendRecv(conn, safcm.MsgInfoReq{ LogLevel: s.config.LogLevel, DetectGroups: s.config.DetectGroups, }) if err != nil { return nil, err } resp, ok := x.(safcm.MsgInfoResp) if !ok { return nil, fmt.Errorf("unexpected response %v", x) } if resp.Error != "" { return nil, fmt.Errorf("%s", resp.Error) } return hostInfoRespToGroups(resp), nil } // Keep in sync with cmd/safcm/config/groups.go:groupNameRegexp var infoGroupDetectedRegexp = regexp.MustCompile(`[^a-z0-9_-]+`) func hostInfoRespToGroups(resp safcm.MsgInfoResp) []string { groups := []string{ config.GroupDetectedPrefix + "_" + resp.Goos, config.GroupDetectedPrefix + "_" + resp.Goarch, } for _, x := range resp.Output { x = strings.TrimSpace(x) x = strings.ToLower(x) x = infoGroupDetectedRegexp.ReplaceAllString(x, "_") groups = append(groups, config.GroupDetectedPrefix+"_"+x) } return groups }