feat(ansible): add builtin ping module
Co-Authored-By: Virgil <virgil@lethean.io>
This commit is contained in:
parent
f4d8ae1851
commit
fbfc2a6c7e
7 changed files with 56 additions and 1 deletions
|
|
@ -1581,6 +1581,7 @@ func isCheckModeSafeTask(task *Task) bool {
|
|||
case "ansible.builtin.debug",
|
||||
"ansible.builtin.fail",
|
||||
"ansible.builtin.assert",
|
||||
"ansible.builtin.ping",
|
||||
"ansible.builtin.pause",
|
||||
"ansible.builtin.wait_for",
|
||||
"ansible.builtin.stat",
|
||||
|
|
|
|||
|
|
@ -61,6 +61,37 @@ func TestExecutorExtra_ModuleFail_Good_CustomMessage(t *testing.T) {
|
|||
assert.Equal(t, "deployment blocked", result.Msg)
|
||||
}
|
||||
|
||||
// --- modulePing ---
|
||||
|
||||
func TestExecutorExtra_ModulePing_Good_DefaultPong(t *testing.T) {
|
||||
e, mock := newTestExecutorWithMock("host1")
|
||||
|
||||
result, err := executeModuleWithMock(e, mock, "host1", &Task{
|
||||
Module: "ping",
|
||||
})
|
||||
|
||||
require.NoError(t, err)
|
||||
assert.False(t, result.Failed)
|
||||
assert.False(t, result.Changed)
|
||||
assert.Equal(t, "pong", result.Msg)
|
||||
assert.True(t, mock.hasExecuted(`^true$`))
|
||||
}
|
||||
|
||||
func TestExecutorExtra_ModulePing_Good_CustomData(t *testing.T) {
|
||||
e, mock := newTestExecutorWithMock("host1")
|
||||
|
||||
result, err := executeModuleWithMock(e, mock, "host1", &Task{
|
||||
Module: "ansible.builtin.ping",
|
||||
Args: map[string]any{
|
||||
"data": "hello",
|
||||
},
|
||||
})
|
||||
|
||||
require.NoError(t, err)
|
||||
assert.False(t, result.Failed)
|
||||
assert.Equal(t, "hello", result.Msg)
|
||||
}
|
||||
|
||||
// --- moduleAssert ---
|
||||
|
||||
func TestExecutorExtra_ModuleAssert_Good_PassingAssertion(t *testing.T) {
|
||||
|
|
|
|||
|
|
@ -480,6 +480,9 @@ func executeModuleWithMock(e *Executor, mock *MockSSHClient, host string, task *
|
|||
case "ansible.builtin.archive":
|
||||
return moduleArchiveWithClient(e, mock, args)
|
||||
|
||||
case "ansible.builtin.ping", "ping":
|
||||
return e.modulePing(context.Background(), mock, args)
|
||||
|
||||
case "ansible.builtin.setup":
|
||||
return e.moduleSetup(context.Background(), host, mock, args)
|
||||
|
||||
|
|
|
|||
15
modules.go
15
modules.go
|
|
@ -129,6 +129,8 @@ func (e *Executor) executeModule(ctx context.Context, host string, client sshExe
|
|||
return e.moduleFail(args)
|
||||
case "ansible.builtin.assert":
|
||||
return e.moduleAssert(args, host)
|
||||
case "ansible.builtin.ping":
|
||||
return e.modulePing(ctx, client, args)
|
||||
case "ansible.builtin.set_fact":
|
||||
return e.moduleSetFact(args)
|
||||
case "ansible.builtin.add_host":
|
||||
|
|
@ -1483,6 +1485,19 @@ func (e *Executor) moduleFail(args map[string]any) (*TaskResult, error) {
|
|||
}, nil
|
||||
}
|
||||
|
||||
func (e *Executor) modulePing(ctx context.Context, client sshExecutorClient, args map[string]any) (*TaskResult, error) {
|
||||
data := getStringArg(args, "data", "pong")
|
||||
stdout, stderr, rc, err := client.Run(ctx, "true")
|
||||
if err != nil {
|
||||
return &TaskResult{Failed: true, Msg: err.Error(), Stdout: stdout, Stderr: stderr, RC: rc}, nil
|
||||
}
|
||||
if rc != 0 {
|
||||
return &TaskResult{Failed: true, Msg: stderr, Stdout: stdout, Stderr: stderr, RC: rc}, nil
|
||||
}
|
||||
|
||||
return &TaskResult{Msg: data}, nil
|
||||
}
|
||||
|
||||
func (e *Executor) moduleAssert(args map[string]any, host string) (*TaskResult, error) {
|
||||
that, ok := args["that"]
|
||||
if !ok {
|
||||
|
|
|
|||
|
|
@ -850,6 +850,7 @@ func TestParser_IsModule_Good_KnownModules(t *testing.T) {
|
|||
assert.True(t, isModule("rpm"))
|
||||
assert.True(t, isModule("debug"))
|
||||
assert.True(t, isModule("set_fact"))
|
||||
assert.True(t, isModule("ping"))
|
||||
}
|
||||
|
||||
func TestParser_IsModule_Good_FQCN(t *testing.T) {
|
||||
|
|
@ -877,6 +878,7 @@ func TestParser_NormalizeModule_Good(t *testing.T) {
|
|||
assert.Equal(t, "ansible.builtin.copy", NormalizeModule("copy"))
|
||||
assert.Equal(t, "ansible.builtin.apt", NormalizeModule("apt"))
|
||||
assert.Equal(t, "ansible.builtin.rpm", NormalizeModule("rpm"))
|
||||
assert.Equal(t, "ansible.builtin.ping", NormalizeModule("ping"))
|
||||
}
|
||||
|
||||
func TestParser_NormalizeModule_Good_CommunityAliases(t *testing.T) {
|
||||
|
|
|
|||
2
types.go
2
types.go
|
|
@ -394,6 +394,7 @@ var KnownModules = []string{
|
|||
"ansible.builtin.debug",
|
||||
"ansible.builtin.fail",
|
||||
"ansible.builtin.assert",
|
||||
"ansible.builtin.ping",
|
||||
"ansible.builtin.pause",
|
||||
"ansible.builtin.wait_for",
|
||||
"ansible.builtin.set_fact",
|
||||
|
|
@ -442,6 +443,7 @@ var KnownModules = []string{
|
|||
"debug",
|
||||
"fail",
|
||||
"assert",
|
||||
"ping",
|
||||
"pause",
|
||||
"wait_for",
|
||||
"set_fact",
|
||||
|
|
|
|||
|
|
@ -761,6 +761,7 @@ func TestTypes_KnownModules_Good_ContainsExpected(t *testing.T) {
|
|||
"ansible.builtin.rpm",
|
||||
"ansible.builtin.debug",
|
||||
"ansible.builtin.set_fact",
|
||||
"ansible.builtin.ping",
|
||||
"community.general.ufw",
|
||||
"ansible.posix.authorized_key",
|
||||
"ansible.builtin.docker_compose",
|
||||
|
|
@ -773,7 +774,7 @@ func TestTypes_KnownModules_Good_ContainsExpected(t *testing.T) {
|
|||
|
||||
shortModules := []string{
|
||||
"shell", "command", "copy", "file", "apt", "service",
|
||||
"systemd", "rpm", "debug", "set_fact", "template", "user", "group",
|
||||
"systemd", "rpm", "debug", "set_fact", "ping", "template", "user", "group",
|
||||
}
|
||||
for _, mod := range shortModules {
|
||||
assert.Contains(t, KnownModules, mod, "expected short-form module %s", mod)
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue