Tighten structured module results
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 12:24:19 +00:00
parent 7cbb53dbc8
commit 1e99665f6e
2 changed files with 46 additions and 2 deletions

View file

@ -75,6 +75,8 @@ func TestExecutorExtra_ModulePing_Good_DefaultPong(t *testing.T) {
assert.False(t, result.Failed)
assert.False(t, result.Changed)
assert.Equal(t, "pong", result.Msg)
require.NotNil(t, result.Data)
assert.Equal(t, "pong", result.Data["ping"])
assert.True(t, mock.hasExecuted(`^true$`))
}
@ -91,6 +93,29 @@ func TestExecutorExtra_ModulePing_Good_CustomData(t *testing.T) {
require.NoError(t, err)
assert.False(t, result.Failed)
assert.Equal(t, "hello", result.Msg)
require.NotNil(t, result.Data)
assert.Equal(t, "hello", result.Data["ping"])
}
func TestExecutorExtra_ModuleSetFact_Good_ReturnsStructuredFacts(t *testing.T) {
e := NewExecutor("/tmp")
result, err := e.moduleSetFact("host1", map[string]any{
"app_version": "1.2.3",
"cacheable": true,
})
require.NoError(t, err)
assert.True(t, result.Changed)
require.NotNil(t, result.Data)
facts, ok := result.Data["ansible_facts"].(map[string]any)
require.True(t, ok)
assert.Equal(t, "1.2.3", facts["app_version"])
_, cached := facts["cacheable"]
assert.False(t, cached)
assert.Equal(t, "1.2.3", e.hostScopedVars("host1")["app_version"])
_, cached = e.hostScopedVars("host1")["cacheable"]
assert.False(t, cached)
}
func TestExecutorExtra_ExecuteModule_Good_LegacyNamespaceCommand(t *testing.T) {
@ -394,6 +419,16 @@ func TestExecutorExtra_ModuleMeta_Good(t *testing.T) {
assert.Equal(t, "flush_handlers", result.Data["action"])
}
func TestExecutorExtra_ModuleMeta_Good_ExplicitActionField(t *testing.T) {
e := NewExecutor("/tmp")
result, err := e.moduleMeta(map[string]any{"action": "refresh_inventory"})
require.NoError(t, err)
assert.False(t, result.Changed)
require.NotNil(t, result.Data)
assert.Equal(t, "refresh_inventory", result.Data["action"])
}
func TestExecutorExtra_ModuleMeta_Good_ClearFacts(t *testing.T) {
e := NewExecutor("/tmp")
e.facts["host1"] = &Facts{Hostname: "web01"}

View file

@ -1673,7 +1673,10 @@ func (e *Executor) modulePing(ctx context.Context, client sshExecutorClient, arg
return &TaskResult{Failed: true, Msg: stderr, Stdout: stdout, Stderr: stderr, RC: rc}, nil
}
return &TaskResult{Msg: data}, nil
return &TaskResult{
Msg: data,
Data: map[string]any{"ping": data},
}, nil
}
func (e *Executor) moduleAssert(args map[string]any, host string) (*TaskResult, error) {
@ -1702,7 +1705,10 @@ func (e *Executor) moduleSetFact(host string, args map[string]any) (*TaskResult,
values[k] = v
}
e.setHostVars(host, values)
return &TaskResult{Changed: true}, nil
return &TaskResult{
Changed: true,
Data: map[string]any{"ansible_facts": values},
}, nil
}
func (e *Executor) moduleAddHost(args map[string]any) (*TaskResult, error) {
@ -2896,6 +2902,9 @@ func (e *Executor) moduleMeta(args map[string]any) (*TaskResult, error) {
if action == "" {
action = getStringArg(args, "free_form", "")
}
if action == "" {
action = getStringArg(args, "action", "")
}
result := &TaskResult{Changed: action == "clear_facts"}
if action != "" {