fix(ansible): fail fast on reboot initiation errors
Some checks are pending
CI / test (push) Waiting to run
CI / auto-fix (push) Waiting to run
CI / auto-merge (push) Waiting to run

This commit is contained in:
Virgil 2026-04-03 11:49:21 +00:00
parent 610294db6b
commit 22e689bbfa
2 changed files with 32 additions and 2 deletions

View file

@ -3253,12 +3253,27 @@ func (e *Executor) moduleReboot(ctx context.Context, client sshExecutorClient, a
testCommand := getStringArg(args, "test_command", "whoami")
msg := getStringArg(args, "msg", "Reboot initiated by Ansible")
runReboot := func(cmd string) (*TaskResult, error) {
stdout, stderr, rc, err := client.Run(ctx, cmd)
if err != nil || rc != 0 {
msg := stderr
if msg == "" && err != nil {
msg = err.Error()
}
return &TaskResult{Failed: true, Msg: msg, Stdout: stdout, Stderr: stderr, RC: rc}, nil
}
return nil, nil
}
if preRebootDelay > 0 {
cmd := sprintf("sleep %d && shutdown -r now '%s' &", preRebootDelay, msg)
_, _, _, _ = client.Run(ctx, cmd)
if result, err := runReboot(cmd); err != nil || result != nil {
return result, err
}
} else {
_, _, _, _ = client.Run(ctx, sprintf("shutdown -r now '%s' &", msg))
if result, err := runReboot(sprintf("shutdown -r now '%s' &", msg)); err != nil || result != nil {
return result, err
}
}
if postRebootDelay > 0 {

View file

@ -1999,3 +1999,18 @@ func TestModulesAdv_ModuleReboot_Bad_TimesOutWaitingForTestCommand(t *testing.T)
assert.Equal(t, "host unreachable", result.Stderr)
assert.Equal(t, 1, result.RC)
}
func TestModulesAdv_ModuleReboot_Bad_ReportsInitialShutdownFailure(t *testing.T) {
e, mock := newTestExecutorWithMock("host1")
mock.expectCommand(`shutdown -r now 'Reboot initiated by Ansible' &`, "", "permission denied", 1)
result, err := e.moduleReboot(context.Background(), mock, map[string]any{})
require.NoError(t, err)
require.NotNil(t, result)
assert.True(t, result.Failed)
assert.Equal(t, "permission denied", result.Msg)
assert.Equal(t, 1, result.RC)
assert.Equal(t, 1, mock.commandCount())
assert.False(t, mock.hasExecuted(`whoami`))
}