Мой план действий следующий:
- 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'
Загрузка файла работает, но выполнение не удается. Хотя я могу выполнить скрипт без проблем напрямую на сервере. Я делаю что-то не так?
решение1
Я использовал похожую схему, которая работает так, как и ожидалось:
# 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
И test.py:
#!/usr/bin/python
# write to a file
f = open('/tmp/test_from_python','w')
f.write('hi there\n')
Запуск сценария:
ansible-playbook playbook.yml --extra-vars "target=the_host_to_run_script_on"
Шоу:
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
И на удаленном хосте:
$ cat /tmp/test_from_python
hi there
Несколько отличий нашей установки:
- У меня нет одинарных кавычек вокруг параметров копирования и команды.
- Шебанг устанавливает интерпретатор Python вместо указания /usr/bin/python из командной строки
- Я установил владельцем скрипта свое имя пользователя и основную группу, которая находится в sudoers, а не root.
Надеюсь, это поможет вам правильно понять, в чем могут заключаться различия.
решение2
Для использования вам понадобится только скрипт плагина ниже
---
- hosts: ${target}
become: true
tasks:
- name: Copy and Execute the script
script: /opt/test.py