Eu usei um manual semelhante que funciona como esperado:
# playbook.yml
---
- hosts: ${target}
sudo: yes
tasks:
- name: Copy file
copy: src=../files/test.py dest=/opt/test.py owner=howardsandford group=admin mode=755
- name: Execute script
command: /opt/test.py
e test.py:
#!/usr/bin/python
# write to a file
f = open('/tmp/test_from_python','w')
f.write('hi there\n')
Executando o playboook:
ansible-playbook playbook.yml --extra-vars "target=the_host_to_run_script_on"
Mostra:
PLAY [the_host_to_run_script_on] ***************************************************************
GATHERING FACTS ***************************************************************
ok: [the_host_to_run_script_on]
TASK: [Copy file] *************************************************************
changed: [the_host_to_run_script_on]
TASK: [Execute script] ********************************************************
changed: [the_host_to_run_script_on]
PLAY RECAP ********************************************************************
the_host_to_run_script_on : ok=3 changed=2 unreachable=0 failed=0
E no host remoto:
$ cat /tmp/test_from_python
hi there
Várias diferenças entre nossa configuração:
- Eu não tenho aspas simples ao redor dos parâmetros de cópia e comando
- O shebang define o interpretador python em vez de especificar / usr / bin / python a partir da linha de comando
- Defino o proprietário do script para meu próprio nome de usuário e grupo principal que está em sudoers, em vez de raiz
Espero que isso possa apontar você na direção certa de onde as diferenças podem estar.