]> ruderich.org/simon Gitweb - safcm/safcm.git/blob - remote/info/info.go
Move embedded remote helpers to cmd/safcm/
[safcm/safcm.git] / remote / info / info.go
1 // MsgInfoReq: collect information about the remote host
2
3 // Copyright (C) 2021  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 info
19
20 import (
21         "fmt"
22         "runtime"
23
24         "ruderich.org/simon/safcm"
25         "ruderich.org/simon/safcm/remote/log"
26         "ruderich.org/simon/safcm/remote/run"
27 )
28
29 type Info struct {
30         req  safcm.MsgInfoReq
31         resp safcm.MsgInfoResp
32
33         cmd    *run.Cmd
34         logger *log.Logger
35 }
36
37 func Handle(req safcm.MsgInfoReq,
38         runner run.Runner, fun log.LogFunc) safcm.MsgInfoResp {
39
40         i := Info{
41                 req:    req,
42                 logger: log.NewLogger(fun),
43         }
44         i.cmd = run.NewCmd(runner, i.logger)
45
46         err := i.handle()
47         if err != nil {
48                 i.resp.Error = fmt.Sprintf("%v", err)
49         }
50         return i.resp
51 }
52
53 func (i *Info) handle() error {
54         i.resp.Goos = runtime.GOOS
55         i.resp.Goarch = runtime.GOARCH
56
57         for _, x := range i.req.DetectGroups {
58                 stdout, _, err := i.cmd.Run("detect group",
59                         "/bin/sh", "-c", x)
60                 if err != nil {
61                         return err
62                 }
63                 i.resp.Output = append(i.resp.Output, string(stdout))
64         }
65
66         return nil
67 }