Несчастный и Wget
Я пытаюсь загрузить файл с веб-сервера из загрузочной книги Ansible.
Вот фрагмент 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
Вызов с помощью:
ansible-playbook my_3rparties.yml -l vsrv644 --extra-vars "repo_host=vsrv656" -K -f 10
Не удается выполнить следующее:
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
При попытке выполнить команду, которая не выполняется с помощью обычного удаленного ssh, чтобы имитировать то, что могла бы сделать, оно не работает следующим образом:
-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
Но я могу решить это с помощью -t следующим образом:
-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'
Затем он работает.
Есть ли способ установить параметр -t (псевдо-tty) на доступный?
P.S: Я мог бы решить это, отредактировав файл sudoers, как предлагают другие, но это ручной шаг, который я пытаюсь избежать.
Ответы
Ответ 1
Не используйте shell -модуль, когда доступны специализированные модули. В вашем случае:
Создание каталогов с file -module:
- name: create project directory {{ common.project_dir }}
file: state=directory path={{ common.project_dir }}
Загрузка файлов с get_url -module:
- name: download sources
get_url: url={{ opencv.url }} dest={{ common.project_dir }}/{{ opencv.file }}
Обратите внимание на новый синтаксис вызова модуля в приведенных выше примерах.
Если вам нужно использовать sudo
с паролем, не забудьте указать --ask-sudo-pass
при необходимости (см., например, Информация о удаленном подключении).