Python 스크립트를 업로드하고 실행하는 Ansible 플레이북

Python 스크립트를 업로드하고 실행하는 Ansible 플레이북

내 플레이북은 아래와 같습니다.

- 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

설정 간의 몇 가지 차이점은 다음과 같습니다.

  • 복사 및 명령 매개변수 주위에 작은따옴표가 없습니다.
  • Shebang은 명령줄에서 /usr/bin/python을 지정하는 대신 Python 인터프리터를 설정합니다.
  • 스크립트 소유자를 루트가 아닌 sudoers에 있는 내 사용자 이름과 기본 그룹으로 설정했습니다.

이것이 차이점이 있을 수 있는 올바른 방향을 알려줄 수 있기를 바랍니다.

답변2

사용하려면 아래 플러그인 스크립트만 필요합니다.

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

관련 정보