From 6015bd22c34e8287b43b462facd5ad491296c8c2 Mon Sep 17 00:00:00 2001 From: Simon Ruderich Date: Tue, 20 Apr 2021 11:43:02 +0200 Subject: [PATCH] remote: show group/trigger in verbose log for commands This helps the user to figure out why the command was executed. --- cmd/safcm-remote/sync/commands.go | 16 ++++++++++---- cmd/safcm-remote/sync/commands_test.go | 30 +++++++++++++++++--------- cmd/safcm/config/commands.go | 1 + cmd/safcm/sync_sync_test.go | 4 ++++ types.go | 1 + 5 files changed, 38 insertions(+), 14 deletions(-) diff --git a/cmd/safcm-remote/sync/commands.go b/cmd/safcm-remote/sync/commands.go index 84a318d..5a3c59c 100644 --- a/cmd/safcm-remote/sync/commands.go +++ b/cmd/safcm-remote/sync/commands.go @@ -31,7 +31,7 @@ func (s *Sync) syncCommands() error { // Run triggered commands first for _, path := range s.triggers { for _, x := range s.req.Files[path].TriggerCommands { - err := s.syncCommand(x, path) + err := s.syncCommand(x, "", path) if err != nil { return err } @@ -40,7 +40,7 @@ func (s *Sync) syncCommands() error { // Regular commands afterwards so they can react on triggers if // necessary for _, x := range s.req.Commands { - err := s.syncCommand(x.Cmd, "") + err := s.syncCommand(x.Cmd, x.OrigGroup, "") if err != nil { return err } @@ -48,7 +48,7 @@ func (s *Sync) syncCommands() error { return nil } -func (s *Sync) syncCommand(command string, trigger string) error { +func (s *Sync) syncCommand(command, group, trigger string) error { s.resp.CommandChanges = append(s.resp.CommandChanges, safcm.CommandChange{ Command: command, @@ -59,12 +59,20 @@ func (s *Sync) syncCommand(command string, trigger string) error { } change := &s.resp.CommandChanges[len(s.resp.CommandChanges)-1] + var info string + if trigger != "" { + info = fmt.Sprintf("%q", trigger) + } else if group != "" { + info = group + } + cmd := exec.Command("/bin/sh", "-c", command) cmd.Env = safcmEnviroment(s.req.Groups) // Cannot use cmd.CombinedOutputCmd() because we need another log // level (here the command is the actual change and not a side effect) // and different error handling. - s.log.Verbosef("commands: running %s", run.QuoteForDebug(cmd)) + s.log.Verbosef("commands: running %s (%s)", + run.QuoteForDebug(cmd), info) out, err := s.cmd.Runner.CombinedOutput(cmd) if len(out) > 0 { s.log.Debug2f("commands: command output:\n%s", out) diff --git a/cmd/safcm-remote/sync/commands_test.go b/cmd/safcm-remote/sync/commands_test.go index ba7f4a2..1c53418 100644 --- a/cmd/safcm-remote/sync/commands_test.go +++ b/cmd/safcm-remote/sync/commands_test.go @@ -67,6 +67,7 @@ func TestSyncCommands(t *testing.T) { }, Commands: []*safcm.Command{ { + OrigGroup: "group", Cmd: "echo; env | grep SAFCM_", }, }, @@ -84,7 +85,7 @@ func TestSyncCommands(t *testing.T) { Env: env, }}, []string{ - `3: sync remote: commands: running "/bin/sh" "-c" "echo; env | grep SAFCM_"`, + `3: sync remote: commands: running "/bin/sh" "-c" "echo; env | grep SAFCM_" (group)`, "5: sync remote: commands: command output:\nfake stdout/stderr", }, safcm.MsgSyncResp{ @@ -109,6 +110,7 @@ func TestSyncCommands(t *testing.T) { }, Commands: []*safcm.Command{ { + OrigGroup: "group", Cmd: "echo; env | grep SAFCM_", }, }, @@ -140,6 +142,7 @@ func TestSyncCommands(t *testing.T) { }, Commands: []*safcm.Command{ { + OrigGroup: "group", Cmd: "echo hi; false", }, }, @@ -157,7 +160,7 @@ func TestSyncCommands(t *testing.T) { Env: env, }}, []string{ - `3: sync remote: commands: running "/bin/sh" "-c" "echo hi; false"`, + `3: sync remote: commands: running "/bin/sh" "-c" "echo hi; false" (group)`, "5: sync remote: commands: command output:\nfake stdout/stderr", }, safcm.MsgSyncResp{ @@ -183,6 +186,7 @@ func TestSyncCommands(t *testing.T) { }, Commands: []*safcm.Command{ { + OrigGroup: "group", Cmd: "echo hi; false", }, }, @@ -214,12 +218,16 @@ func TestSyncCommands(t *testing.T) { }, Commands: []*safcm.Command{ { + OrigGroup: "group1", Cmd: "echo first", }, { + OrigGroup: "group2", Cmd: "echo second", }, { + OrigGroup: "group3", Cmd: "false", }, { + OrigGroup: "group4", Cmd: "echo third", }, }, @@ -263,11 +271,11 @@ func TestSyncCommands(t *testing.T) { Env: env, }}, []string{ - `3: sync remote: commands: running "/bin/sh" "-c" "echo first"`, + `3: sync remote: commands: running "/bin/sh" "-c" "echo first" (group1)`, "5: sync remote: commands: command output:\nfake stdout/stderr first", - `3: sync remote: commands: running "/bin/sh" "-c" "echo second"`, + `3: sync remote: commands: running "/bin/sh" "-c" "echo second" (group2)`, "5: sync remote: commands: command output:\nfake stdout/stderr second", - `3: sync remote: commands: running "/bin/sh" "-c" "false"`, + `3: sync remote: commands: running "/bin/sh" "-c" "false" (group3)`, }, safcm.MsgSyncResp{ CommandChanges: []safcm.CommandChange{ @@ -333,6 +341,7 @@ func TestSyncCommands(t *testing.T) { }, Commands: []*safcm.Command{ { + OrigGroup: "group", Cmd: "echo; env | grep SAFCM_", }, }, @@ -379,11 +388,11 @@ func TestSyncCommands(t *testing.T) { Env: env, }}, []string{ - `3: sync remote: commands: running "/bin/sh" "-c" "echo trigger ."`, + `3: sync remote: commands: running "/bin/sh" "-c" "echo trigger ." (".")`, "5: sync remote: commands: command output:\nfake stdout/stderr .", - `3: sync remote: commands: running "/bin/sh" "-c" "echo trigger dir"`, + `3: sync remote: commands: running "/bin/sh" "-c" "echo trigger dir" ("dir")`, "5: sync remote: commands: command output:\nfake stdout/stderr dir", - `3: sync remote: commands: running "/bin/sh" "-c" "echo; env | grep SAFCM_"`, + `3: sync remote: commands: running "/bin/sh" "-c" "echo; env | grep SAFCM_" (group)`, "5: sync remote: commands: command output:\nfake stdout/stderr", }, safcm.MsgSyncResp{ @@ -451,6 +460,7 @@ func TestSyncCommands(t *testing.T) { }, Commands: []*safcm.Command{ { + OrigGroup: "group", Cmd: "echo; env | grep SAFCM_", }, }, @@ -487,9 +497,9 @@ func TestSyncCommands(t *testing.T) { Env: env, }}, []string{ - `3: sync remote: commands: running "/bin/sh" "-c" "echo trigger ."`, + `3: sync remote: commands: running "/bin/sh" "-c" "echo trigger ." (".")`, "5: sync remote: commands: command output:\nfake stdout/stderr .", - `3: sync remote: commands: running "/bin/sh" "-c" "false"`, + `3: sync remote: commands: running "/bin/sh" "-c" "false" ("dir")`, "5: sync remote: commands: command output:\nfake stdout/stderr dir", }, safcm.MsgSyncResp{ diff --git a/cmd/safcm/config/commands.go b/cmd/safcm/config/commands.go index 1ba2b18..72a28fd 100644 --- a/cmd/safcm/config/commands.go +++ b/cmd/safcm/config/commands.go @@ -46,6 +46,7 @@ func LoadCommands(group string) ([]*safcm.Command, error) { var res []*safcm.Command for _, x := range cmds { res = append(res, &safcm.Command{ + OrigGroup: group, Cmd: x, }) } diff --git a/cmd/safcm/sync_sync_test.go b/cmd/safcm/sync_sync_test.go index 1294a45..f100f35 100644 --- a/cmd/safcm/sync_sync_test.go +++ b/cmd/safcm/sync_sync_test.go @@ -138,9 +138,11 @@ func TestHostSyncReq(t *testing.T) { }, Commands: []*safcm.Command{ { + OrigGroup: "group", Cmd: "echo command one", }, { + OrigGroup: "group", Cmd: "echo -n command two", }, }, @@ -241,9 +243,11 @@ func TestHostSyncReq(t *testing.T) { }, Commands: []*safcm.Command{ { + OrigGroup: "group", Cmd: "echo command one", }, { + OrigGroup: "group", Cmd: "echo -n command two", }, }, diff --git a/types.go b/types.go index d886886..37c0d4a 100644 --- a/types.go +++ b/types.go @@ -107,6 +107,7 @@ type File struct { } type Command struct { + OrigGroup string // group which provided this command Cmd string } -- 2.43.2