2016-02-01 31 views
8

Tôi đang cố gắng chạy tập lệnh python từ tập lệnh không thể đọc được. Tôi nghĩ rằng đây sẽ là một điều dễ dàng để làm, nhưng tôi không thể tìm ra. Tôi có cấu trúc dự án như thế này:Chạy tập lệnh Python qua ansible

playbook-folder 
    roles 
    stagecode 
     files 
     mypythonscript.py 
     tasks 
     main.yml 
    release.yml 

Tôi đang cố gắng chạy mypythonscript.py trong một tác vụ trong main.yml (một vai trò được sử dụng trong release.yml). Đây là nhiệm vụ:

- name: run my script! 
    command: ./roles/stagecode/files/mypythonscript.py 
    args: 
    chdir: /dir/to/be/run/in 
    delegate_to: 127.0.0.1 
    run_once: true 

Tôi cũng đã thử ../files/mypythonscript.py. Tôi nghĩ rằng con đường cho ansible sẽ liên quan đến playbook, nhưng tôi đoán không?

Tôi cũng đã thử gỡ lỗi để tìm ra nơi tôi đang ở giữa tập lệnh, nhưng cũng không có may mắn.

- name: figure out where we are 
    stat: path=. 
    delegate_to: 127.0.0.1 
    run_once: true 
    register: righthere 

- name: print where we are 
    debug: msg="{{righthere.stat.path}}" 
    delegate_to: 127.0.0.1 
    run_once: true 

Điều đó chỉ in ra ".". Vì vậy, hữu ích ...

Trả lời

11

Nếu bạn muốn có thể sử dụng đường dẫn tương đối cho tập lệnh của mình thay vì đường dẫn tuyệt đối thì bạn có thể tốt hơn bằng cách sử dụng role_path magic variable để tìm đường dẫn đến vai trò và làm việc từ đó.

Với cấu trúc bạn đang sử dụng trong câu hỏi sau đây nên làm việc:

- name: run my script! 
    command: ./mypythonscript.py 
    args: 
    chdir: "{{ role_path }}"/files 
    delegate_to: 127.0.0.1 
    run_once: true 
+0

Điều đó sẽ làm hỏng thư mục của tôi Tôi định chạy tập lệnh python, nhưng tôi cho rằng tôi có thể chuyển đó làm tham số cho tập lệnh python. Cảm ơn! – CorayThan

+1

Sau đó, chỉ cần thay đổi dòng lệnh 'thành' command: ./ "{{role_path}}"/files/mypythonscript.py' nếu kịch bản Python của bạn cần được chạy từ một số đường dẫn cụ thể (và rõ ràng là thay đổi 'chdir' arg đến con đường bạn muốn nó được) – ydaetskcoR

14

cố gắng sử dụng kịch bản chỉ thị, nó làm việc cho tôi

main.yml tôi

--- 
- name: execute install script 
    script: get-pip.py 

get-pip.py tệp phải ở trong các tệp trong cùng một vai trò

+0

Đây là câu trả lời tốt hơn và tôi thậm chí không chắc chắn lý do tại sao tôi đã không đề nghị nó khác hơn là chặt chẽ hơn sau mã gốc của OP. Sử dụng vai trò và sau đó sử dụng đường cú pháp xung quanh chúng, chẳng hạn như đường dẫn tìm kiếm cho tập lệnh/tệp và mẫu, v.v. – ydaetskcoR

Các vấn đề liên quan