Ansible和Wget

isa*_*zan 29 ansible

我试图从Ansible playbook中的Web服务器中获取文件.

这是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 
Run Code Online (Sandbox Code Playgroud)

通过以下方式调用它:

ansible-playbook my_3rparties.yml -l vsrv644 --extra-vars "repo_host=vsrv656" -K -f 10 
Run Code Online (Sandbox Code Playgroud)

它失败了以下内容:

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   
Run Code Online (Sandbox Code Playgroud)

当尝试通过常规远程ssh执行失败的命令以模仿ansible将执行的操作时,它不会按以下方式工作:

-bash-4.1$ ssh ihazan@vsrv644 '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
Run Code Online (Sandbox Code Playgroud)

但是我可以使用-t解决它,如下所示:

-bash-4.1$ ssh -t ihazan@vsrv644 'cd /tmp/my_install/mysql && sudo wget http://vsrv656/MySQL-5.6.15-1.el6.x86_64.rpm-bundle.tar'
Run Code Online (Sandbox Code Playgroud)

然后它工作.

有没有办法在ansible上设置-t(伪tty选项)?

PS:我可以像其他人建议的那样通过编辑sudoers文件来解决它,但这是我试图避免的手动步骤.

use*_*735 66

当有专门的模块可用时,不要使用shell -module.在你的情况下:

使用file -module 创建目录:

- name: create project directory {{ common.project_dir }}
  file: state=directory path={{ common.project_dir }}
Run Code Online (Sandbox Code Playgroud)

使用get_url -module 下载文件:

- name: download sources
  get_url: url={{ opencv.url }} dest={{ common.project_dir }}/{{ opencv.file }}
Run Code Online (Sandbox Code Playgroud)

请注意上面示例中的新模块调用语法.

如果必须使用sudo密码,请记住--ask-sudo-pass在需要时给出(参见例如远程连接信息).

  • 仅供参考,所有链接(远程连接信息除外)均已失效,以下是可用的链接: - shell 模块:https://docs.ansible.com/ansible/2.3/shell_module.html - 文件模块:https:// docs.ansible.com/ansible/2.5/modules/file_module.html#file-module - get_url 模块:https://docs.ansible.com/ansible/2.3/get_url_module.html 并且文档使用与您不同的语法在这里,我不确定它是否仍然有效或有效,但值得牢记。 (3认同)