diff --git a/executor_extra_test.go b/executor_extra_test.go index bff6af6..1d93437 100644 --- a/executor_extra_test.go +++ b/executor_extra_test.go @@ -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"} diff --git a/modules.go b/modules.go index 6ba9287..312be27 100644 --- a/modules.go +++ b/modules.go @@ -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 != "" {