Подтвердить что ты не робот

Как выполнить оболочку script на удаленном сервере с помощью Ansible?

Я планирую выполнить оболочку script на удаленном сервере с помощью Ansible playbook.

test.sh:

touch test.txt

Playbook:

---
- name: Transfer and execute a script.
  hosts: server
  user: test_user
  sudo: yes
  tasks:
     - name: Transfer the script
       copy: src=test.sh dest=/home/test_user mode=0777

     - name: Execute the script
       local_action: command sudo sh /home/test_user/test.sh

Когда я запускаю книгу, передача выполняется успешно, но script не выполняется.

4b9b3361

Ответ 1

local_action запускает команду на локальном сервере, а не на серверах, которые вы указываете в параметре hosts.

Измените задачу "Выполнение задачи script" на

- name: Execute the script
  command: sh /home/test_user/test.sh

и он должен это сделать.

Вам не нужно повторять sudo в командной строке, потому что вы уже определили его в playbook.

Согласно Ansible Intro to Playbooks user параметр был переименован в remote_user в Ansible 1.4, поэтому вы тоже должны его изменить

remote_user: test_user

Итак, книжка станет:

---
- name: Transfer and execute a script.
  hosts: server
  remote_user: test_user
  sudo: yes
  tasks:
     - name: Transfer the script
       copy: src=test.sh dest=/home/test_user mode=0777

     - name: Execute the script
       command: sh /home/test_user/test.sh

Ответ 2

вы можете использовать script модуль

Пример

- name: Transfer and execute a script.
  hosts: all
  tasks:

     - name: Copy and Execute the script 
       script: /home/user/userScript.sh