feat(ansible): support wait_for port state stopped
Co-Authored-By: Virgil <virgil@lethean.io>
This commit is contained in:
parent
a81e05a078
commit
8e21d5dff8
2 changed files with 36 additions and 17 deletions
35
modules.go
35
modules.go
|
|
@ -1690,24 +1690,25 @@ func (e *Executor) moduleWaitFor(ctx context.Context, client sshExecutorClient,
|
|||
}
|
||||
}
|
||||
|
||||
if port > 0 && state == "started" {
|
||||
cmd := sprintf("timeout %d bash -c 'until nc -z %s %d; do sleep 1; done'",
|
||||
timeout, host, port)
|
||||
stdout, stderr, rc, err := client.Run(ctx, cmd)
|
||||
if err != nil || rc != 0 {
|
||||
return &TaskResult{Failed: true, Msg: stderr, Stdout: stdout, RC: rc}, nil
|
||||
if port > 0 {
|
||||
switch state {
|
||||
case "started", "present":
|
||||
cmd := sprintf("timeout %d bash -c 'until nc -z %s %d; do sleep 1; done'",
|
||||
timeout, host, port)
|
||||
stdout, stderr, rc, err := client.Run(ctx, cmd)
|
||||
if err != nil || rc != 0 {
|
||||
return &TaskResult{Failed: true, Msg: stderr, Stdout: stdout, RC: rc}, nil
|
||||
}
|
||||
return &TaskResult{Changed: false}, nil
|
||||
case "stopped", "absent":
|
||||
cmd := sprintf("timeout %d bash -c 'until ! nc -z %s %d; do sleep 1; done'",
|
||||
timeout, host, port)
|
||||
stdout, stderr, rc, err := client.Run(ctx, cmd)
|
||||
if err != nil || rc != 0 {
|
||||
return &TaskResult{Failed: true, Msg: stderr, Stdout: stdout, RC: rc}, nil
|
||||
}
|
||||
return &TaskResult{Changed: false}, nil
|
||||
}
|
||||
return &TaskResult{Changed: false}, nil
|
||||
}
|
||||
|
||||
if port > 0 && state == "absent" {
|
||||
cmd := sprintf("timeout %d bash -c 'until ! nc -z %s %d; do sleep 1; done'",
|
||||
timeout, host, port)
|
||||
stdout, stderr, rc, err := client.Run(ctx, cmd)
|
||||
if err != nil || rc != 0 {
|
||||
return &TaskResult{Failed: true, Msg: stderr, Stdout: stdout, RC: rc}, nil
|
||||
}
|
||||
return &TaskResult{Changed: false}, nil
|
||||
}
|
||||
|
||||
return &TaskResult{Changed: false}, nil
|
||||
|
|
|
|||
|
|
@ -909,6 +909,24 @@ func TestModulesAdv_ModuleWaitFor_Good_WaitsForPortAbsent(t *testing.T) {
|
|||
assert.True(t, mock.hasExecuted(`until ! nc -z 127.0.0.1 8080`))
|
||||
}
|
||||
|
||||
func TestModulesAdv_ModuleWaitFor_Good_WaitsForPortStopped(t *testing.T) {
|
||||
e, mock := newTestExecutorWithMock("host1")
|
||||
mock.expectCommand(`timeout 2 bash -c 'until ! nc -z 127.0.0.1 8080; do sleep 1; done'`, "", "", 0)
|
||||
|
||||
result, err := e.moduleWaitFor(context.Background(), mock, map[string]any{
|
||||
"host": "127.0.0.1",
|
||||
"port": 8080,
|
||||
"state": "stopped",
|
||||
"timeout": 2,
|
||||
})
|
||||
|
||||
require.NoError(t, err)
|
||||
assert.NotNil(t, result)
|
||||
assert.False(t, result.Failed)
|
||||
assert.False(t, result.Changed)
|
||||
assert.True(t, mock.hasExecuted(`until ! nc -z 127.0.0.1 8080`))
|
||||
}
|
||||
|
||||
// --- include_vars module ---
|
||||
|
||||
func TestModulesAdv_ModuleIncludeVars_Good_LoadSingleFile(t *testing.T) {
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue