Ansible и 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, чтобы имитировать то, что сделал бы 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

Но я могу решить это с помощью -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'

Тогда это работает.

Есть ли способ установить параметр -t (псевдотерминал) на доступном?

P.S: Я мог бы решить эту проблему, отредактировав файл sudoers, как предлагают другие, но я стараюсь избегать этого шага вручную.


person isaac.hazan    schedule 08.04.2014    source источник


Ответы (2)


Не используйте shell-модуль, когда доступны специализированные модули. В твоем случае:

Создайте каталоги с файлом-модулем:

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

Загрузите файлы с get_url-модулем:

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

Обратите внимание на новый синтаксис вызова модуля в приведенных выше примерах.

Если вам нужно использовать sudo с паролем, не забудьте указать --ask-sudo-pass при необходимости (см., например, Информация об удаленном соединении).

person user272735    schedule 09.04.2014
comment
К вашему сведению, все ссылки (кроме информации об удаленном подключении) мертвы, вот доступные: - модуль оболочки: docs.ansible.com/ansible/2.3/shell_module.html — файловый модуль: docs.ansible.com/ansible/2.5/modules/ — модуль get_url: docs.ansible.com/ansible/2.3/get_url_module.html И в документах используется другой синтаксис, чем у вас здесь, я не уверен, что он все еще действительно или будет работать, но это стоит иметь в виду. - person Maxie Berkmann; 20.02.2021

В Ансибле:

  • файловый модуль для управления файлами/каталогами
  • модуль get_url для загрузки того, что вам нужно
  • стать: да, чтобы использовать привилегии sudo

См. документацию по ansible: https://docs.ansible.com/ansible/latest/modules/modules_by_category.html

person noccoa0    schedule 25.06.2020