用於上傳和執行 python 腳本的 Ansible playbook

用於上傳和執行 python 腳本的 Ansible playbook

我的劇本如下:

- 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

和測試.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

我們的設定之間存在一些差異:

  • 我在複製和命令參數周圍沒有單引號
  • shebang 設定 python 解釋器,而不是從命令列指定 /usr/bin/python
  • 我將腳本的擁有者設定為我自己的使用者名稱和 sudoers 中的主要群組,而不是 root

希望這可以為您指出可能存在差異的正確方向。

答案2

您只需要使用下面的插件腳本

---
- hosts: ${target}
  become: true
  tasks:
  - name: Copy and Execute the script
    script: /opt/test.py

相關內容