Eu tenho uma tarefa Ansible baseada em https://github.com/al3x/sovereign/blob/master/roles/tarsnap/tasks/tarsnap.yml#L2 que continua falhando quando deveria ter sucesso.
Eu costumava executar a função com ansible_ssh_user=root
, mas recentemente mudei para usar um usuário não root que tem direitos de sudo sem senha e, become
em seguida, chamei meus playbooks.
No entanto, agora a tarefa Ansible falha mesmo que eu tenha especificado become=true
. Tarsnap já está instalado, mas a tarefa ainda retorna stderr: /bin/sh: tarsnap: command not found
. Acho que é por causa de algo sudo
que não entendo muito bem.
Quando eu ssh manualmente no servidor como este usuário não root e executo sudo tarsnap --version | grep 1.0.35 --color=never
, recebo sudo: tarsnap: command not found
. Mas se eu fizer SSH como root, esse mesmo comando me dará tarsnap 1.0.35
. Da mesma forma, quando executo sudo -i tarsnap --version | grep 1.0.35 --color=never
(observe o -i ), recebo tarsnap 1.0.35
.
Estou usando o CentOS 7.
1) Por que os resultados são diferentes para sudo
vs sudo -i
?
2) Como corrijo minha tarefa Ansible?
Aponte para o tarsnap com um caminho totalmente qualificado ou defina seu PATH explicitamente para que ele possa encontrar o tarsnap. Você pode encontrar o elemento de caminho ausente fazendo login como root e executando
which tarsnap
Você não menciona qual tipo de Linux está usando, então tenha em mente que /bin/sh pode muito bem não ser o mesmo que /bin/bash (ex. ~/.bashrc e ~/.bash_profile podem não ser lidos ).
sudo -i
lhe dará um shell 'interativo'. Você deve consultar a página de manual do bash (se realmente estiver usando o bash) para descobrir o que 'interactivemeans (ie. which files are consulted). I think you'll find that
sudo -iwill read in ~/.bashrc, while just
sudo(without
-i`) não fará.