fix(ansible): clear become state when disabled
Some checks are pending
CI / test (push) Waiting to run
CI / auto-fix (push) Waiting to run
CI / auto-merge (push) Waiting to run

Co-Authored-By: Virgil <virgil@lethean.io>
This commit is contained in:
Virgil 2026-04-03 11:41:04 +00:00
parent fe0ed9b2ee
commit 82c7c73d50
7 changed files with 54 additions and 3 deletions

View file

@ -58,6 +58,11 @@ func (c *becomeRecordingClient) SetBecome(become bool, user, password string) {
c.mu.Lock()
defer c.mu.Unlock()
c.become = become
if !become {
c.becomeUser = ""
c.becomePass = ""
return
}
if user != "" {
c.becomeUser = user
}

View file

@ -35,6 +35,11 @@ func (c *localClient) SetBecome(become bool, user, password string) {
c.mu.Lock()
defer c.mu.Unlock()
c.become = become
if !become {
c.becomeUser = ""
c.becomePass = ""
return
}
if user != "" {
c.becomeUser = user
}

View file

@ -78,3 +78,19 @@ func TestExecutor_GatherFacts_Good_LocalConnection(t *testing.T) {
assert.NotEmpty(t, facts.Hostname)
assert.NotEmpty(t, facts.Kernel)
}
func TestLocalClient_Good_SetBecomeResetsStateWhenDisabled(t *testing.T) {
client := newLocalClient()
client.SetBecome(true, "admin", "secret")
become, user, password := client.BecomeState()
assert.True(t, become)
assert.Equal(t, "admin", user)
assert.Equal(t, "secret", password)
client.SetBecome(false, "", "")
become, user, password = client.BecomeState()
assert.False(t, become)
assert.Empty(t, user)
assert.Empty(t, password)
}

View file

@ -258,6 +258,11 @@ func (m *MockSSHClient) SetBecome(become bool, user, password string) {
m.mu.Lock()
defer m.mu.Unlock()
m.become = become
if !become {
m.becomeUser = ""
m.becomePass = ""
return
}
if user != "" {
m.becomeUser = user
}

View file

@ -741,9 +741,8 @@ func TestModulesInfra_Become_Good_DisableAfterEnable(t *testing.T) {
client.SetBecome(false, "", "")
assert.False(t, client.become)
// becomeUser and becomePass are only updated if non-empty
assert.Equal(t, "root", client.becomeUser)
assert.Equal(t, "secret", client.becomePass)
assert.Empty(t, client.becomeUser)
assert.Empty(t, client.becomePass)
}
func TestModulesInfra_Become_Good_MockBecomeTracking(t *testing.T) {

5
ssh.go
View file

@ -498,6 +498,11 @@ func (c *SSHClient) SetBecome(become bool, user, password string) {
c.mu.Lock()
defer c.mu.Unlock()
c.become = become
if !become {
c.becomeUser = ""
c.becomePass = ""
return
}
if user != "" {
c.becomeUser = user
}

View file

@ -34,3 +34,19 @@ func TestSSH_NewSSHClient_Good_Defaults(t *testing.T) {
assert.Equal(t, "root", client.user)
assert.Equal(t, 30*time.Second, client.timeout)
}
func TestSSH_SetBecome_Good_DisablesAndClearsState(t *testing.T) {
client := &SSHClient{}
client.SetBecome(true, "admin", "secret")
become, user, password := client.BecomeState()
assert.True(t, become)
assert.Equal(t, "admin", user)
assert.Equal(t, "secret", password)
client.SetBecome(false, "", "")
become, user, password = client.BecomeState()
assert.False(t, become)
assert.Empty(t, user)
assert.Empty(t, password)
}