Por que você precisaria mudar os usuários efetivos duas vezes?
Você pode especificar o ID do usuário efetivo que o ansible precisa executar conforme a tarefa, portanto, quando você precisar executar um comando como o usuário postgres, defina isso diretamente.
tasks:
- name: Create Postgres User
shell: /bin/createuser -D -R -S myuser
become: yes
become_user: postgres
Frequentemente, quando um usuário obtém sudo permissões para se tornar root , ele já recebe ALL e se torna qualquer usuário, incluindo postgres.
Alternativamente, crie uma permissão sudo adicional para que seu usuário possa executar comandos (específicos) como o usuário postgres.
Observação : considere o uso dos módulos de banco de dados do Ansible Postgres para gerenciar seu bancos de dados, funções e permissões.
Em resposta ao seu comentário: Eu me conecto com o Ansible como um usuário comum:
ansible example -a "/bin/whoami"
example | SUCCESS | rc=0 >>
hbruijn
Eu tenho um trecho " /etc/sudoers.d/hbruijn " bastante típico que não impõe restrições sobre o que eu (meu usuário Ansible) pode fazer:
# /etc/sudoers.d/hbruijn
hbruijn ALL = NOPASSWD: ALL
E então eu posso become qualquer usuário executar comandos com uma ID de usuário e tarefa diferentes sem chamar sudo ou su first:
ansible example -b --become-user=root -a "/bin/whoami"
example | SUCCESS | rc=0 >>
root
ou:
ansible example -b --become-user=postgres -a "/bin/whoami"
example | SUCCESS | rc=0 >>
postgres
tudo sem Ansible conectando diretamente como superusuário.