Manual de estrategias de Ansible para cargar y ejecutar un script de Python

Manual de estrategias de Ansible para cargar y ejecutar un script de Python

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

información relacionada