// "sync" sub-command: collect information from remote host // SPDX-License-Identifier: GPL-3.0-or-later // Copyright (C) 2021-2024 Simon Ruderich 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) { resp, err := s.loop.HostInfoMsg(s, conn, safcm.MsgInfoReq{ LogLevel: s.config.LogLevel, DetectGroups: s.config.DetectGroups, }) if err != nil { return nil, err } 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{ hostInfoDetectedGroupName(resp.Goos), hostInfoDetectedGroupName(resp.Goarch), } for _, x := range resp.Output { groups = append(groups, hostInfoDetectedGroupName(x)) } return groups } func hostInfoDetectedGroupName(x string) string { x = strings.TrimSpace(x) x = strings.ToLower(x) x = infoGroupDetectedRegexp.ReplaceAllString(x, "_") x = config.GroupDetectedPrefix + "_" + x return x }