diff --git a/executor_test.go b/executor_test.go index f61d451..1d92063 100644 --- a/executor_test.go +++ b/executor_test.go @@ -128,6 +128,30 @@ func TestExecutor_GetClient_Good_PlayVarsOverrideInventoryVars(t *testing.T) { assert.Equal(t, "play-user", sshClient.user) } +func TestExecutor_GetClient_Good_UsesInventoryBecomePassword(t *testing.T) { + e := NewExecutor("/tmp") + e.SetInventoryDirect(&Inventory{ + All: &InventoryGroup{ + Hosts: map[string]*Host{ + "host1": { + AnsibleHost: "127.0.0.1", + AnsibleBecomePassword: "secret", + }, + }, + }, + }) + + client, err := e.getClient("host1", &Play{Become: true, BecomeUser: "admin"}) + require.NoError(t, err) + + sshClient, ok := client.(*SSHClient) + require.True(t, ok) + become, user, pass := sshClient.BecomeState() + assert.True(t, become) + assert.Equal(t, "admin", user) + assert.Equal(t, "secret", pass) +} + func TestExecutor_GetClient_Good_UpdatesCachedBecomeState(t *testing.T) { e := NewExecutor("/tmp") e.SetInventoryDirect(&Inventory{ diff --git a/parser.go b/parser.go index 2fc762c..43a2f4c 100644 --- a/parser.go +++ b/parser.go @@ -1147,6 +1147,9 @@ func collectHostVars(group *InventoryGroup, hostname string, vars map[string]any if host.AnsibleConnection != "" { vars["ansible_connection"] = host.AnsibleConnection } + if host.AnsibleBecomePassword != "" { + vars["ansible_become_password"] = host.AnsibleBecomePassword + } for k, v := range host.Vars { vars[k] = v } diff --git a/parser_test.go b/parser_test.go index 332acbd..120c92f 100644 --- a/parser_test.go +++ b/parser_test.go @@ -843,9 +843,10 @@ func TestParser_GetHostVars_Good_DirectHost(t *testing.T) { Vars: map[string]any{"global_var": "global"}, Hosts: map[string]*Host{ "myhost": { - AnsibleHost: "10.0.0.1", - AnsiblePort: 2222, - AnsibleUser: "deploy", + AnsibleHost: "10.0.0.1", + AnsiblePort: 2222, + AnsibleUser: "deploy", + AnsibleBecomePassword: "secret", }, }, }, @@ -855,6 +856,7 @@ func TestParser_GetHostVars_Good_DirectHost(t *testing.T) { assert.Equal(t, "10.0.0.1", vars["ansible_host"]) assert.Equal(t, 2222, vars["ansible_port"]) assert.Equal(t, "deploy", vars["ansible_user"]) + assert.Equal(t, "secret", vars["ansible_become_password"]) assert.Equal(t, "global", vars["global_var"]) }