2014-04-08 18 views
24

Tôi đang cố gắng wget một tập tin từ một máy chủ web từ bên trong một Playbook Ansible.Ansible and Wget

Dưới đây là đoạn Ansible:

--- 
- hosts: all 
    sudo: true 
    tasks: 
    - name: Prepare Install folder 
    sudo: true 
    action: shell sudo mkdir -p /tmp/my_install/mysql/ && cd /tmp/my_install/mysql/ 
    - name: Download MySql 
    sudo: true 
    action: shell sudo wget http://{{ repo_host }}/MySQL-5.6.15-1.el6.x86_64.rpm-bundle.tar 

Gọi nó thông qua:

ansible-playbook my_3rparties.yml -l vsrv644 --extra-vars "repo_host=vsrv656" -K -f 10 

Nó không thành công với những điều sau đây:

Cannot write to `MySQL-5.6.15-1.el6.x86_64.rpm-bundle.tar' (Permission denied). 
FATAL: all hosts have already failed -- aborting 

PLAY RECAP ******************************************************************** 
      to retry, use: --limit @/usr2/ihazan/vufroria_3rparties.retry 

vsrv644    : ok=2 changed=1 unreachable=0 failed=1 

Khi cố gắng để thực hiện lệnh mà không qua thường xuyên từ xa ssh để bắt chước những gì ansible sẽ làm, nó không hoạt động như sau:

-bash-4.1$ ssh [email protected] 'cd /tmp/my_install/mysql && sudo wget http://vsrv656/MySQL-5.6.15-1.el6.x86_64.rpm-bundle.tar' 
Enter passphrase for key '/usr2/ihazan/.ssh/id_rsa': 
sudo: sorry, you must have a tty to run sudo 

Nhưng tôi có thể giải quyết nó bằng cách sử -t như sau:

-bash-4.1$ ssh -t [email protected] 'cd /tmp/my_install/mysql && sudo wget http://vsrv656/MySQL-5.6.15-1.el6.x86_64.rpm-bundle.tar' 

Sau đó nó hoạt động.

Có cách nào để đặt tùy chọn -t (giả tty) trên ansible không?

P.S: Tôi có thể giải quyết nó bằng cách chỉnh sửa tệp sudoers như những người khác đề xuất nhưng đó là một bước thủ công tôi đang cố gắng tránh.

Trả lời

53

Không sử dụng shell - mô-đun khi có sẵn các mô đun chuyên dụng. Trong trường hợp của bạn:

Tạo thư mục với file -module:

- name: create project directory {{ common.project_dir }} 
    file: state=directory path={{ common.project_dir }} 

Tải file với get_url -module:

- name: download sources 
    get_url: url={{ opencv.url }} dest={{ common.project_dir }}/{{ opencv.file }} 

Note mới cú pháp mô-đun cuộc gọi trong các ví dụ ở trên.

Nếu bạn phải sử dụng sudo bằng mật khẩu, hãy nhớ cung cấp --ask-sudo-pass khi cần (xem ví dụ: Remote Connection Information).

+0

Thx, điều này rất hữu ích !!! –