Mi libro de jugadas es el siguiente:
- hosts : mygroup
user : user
sudo : yes
tasks :
- name : Copy script
copy : 'src=/home/user/Scripts/logchecker.py dest=/opt/root2/logchecker.py owner=root group=root mode=755'
- name : Execute script
command : '/usr/bin/python /opt/root2/logchecker.py'
La carga del archivo está funcionando, pero la ejecución falla. Aunque puedo ejecutar el script sin ningún problema directamente en el servidor. ¿Estoy haciendo algo mal?
Respuesta1
He usado un libro de jugadas similar que funciona como se esperaba:
# 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
Y prueba.py:
#!/usr/bin/python
# write to a file
f = open('/tmp/test_from_python','w')
f.write('hi there\n')
Ejecutando el libro de jugadas:
ansible-playbook playbook.yml --extra-vars "target=the_host_to_run_script_on"
Muestra:
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
Y en el host remoto:
$ cat /tmp/test_from_python
hi there
Varias diferencias entre nuestra configuración:
- No tengo comillas simples alrededor de los parámetros de copia y comando.
- El shebang configura el intérprete de Python en lugar de especificar /usr/bin/python desde la línea de comando
- Configuré el propietario del script con mi propio nombre de usuario y grupo principal que está en sudoers, en lugar de root.
Con suerte, esto puede indicarle la dirección correcta sobre dónde podrían estar las diferencias.
Respuesta2
Solo necesita el siguiente script de complemento para usar
---
- hosts: ${target}
become: true
tasks:
- name: Copy and Execute the script
script: /opt/test.py