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.