Ansible не может сделать dir /$HOME/.ansible/cp

Я получаю очень странную ошибку при запуске ansible:

GATHERING FACTS *************************************************************** 
fatal: [i-0f55b6a4] => Could not make dir /$HOME/.ansible/cp: [Errno 13] Permission denied: '/$HOME'

TASK: [Task #1] *************************************************************** 
FATAL: no hosts matched or all hosts have already failed -- aborting


PLAY RECAP ******************************************************************** 
           to retry, use: --limit @/home/ubuntu/install.retry

i-0f55b6a4                 : ok=0    changed=0    unreachable=1    failed=0   

Обычно эта книга запускается без проблем, но я недавно внес некоторые изменения, так что программа, вызывающая ansible, вызывается из start-stop-daemon, так что я буду работать как служба. Конечная цель - создать сервис, который может автоматически запускать playbook, когда сочтет это необходимым.

Начало пьесы выглядит так:

---
- hosts: w_vm:main
  sudo: True
  tasks:
  - name: Task #1
    ...

sudo установлено значение True, поэтому я несколько уверен, что ошибка не на целевой машине.

Сгенерированный вызов ansible-playbook выглядит так:

ansible-playbook -i /tmp/ansible3397486563152037600.inventory \
                    /home/ubuntu/playbooks/main_playbook.yml \
                    -e @/home/ubuntu/extra_params.json

Я не уверен, возникает ли эта Could not make dir /$HOME/.ansible/cp ошибка на сервере или на удаленном компьютере, или почему ansible пытается создать каталог с именем $HOME в /. Это происходит только тогда, когда программа, вызывающая ansible, вызывается из службы Linux, а не когда она вызывается явно из командной строки.


Я задал здесь более конкретный вопрос: https://unix.stackexchange.com/questions/220841/start-stop-daemon-services-environment-variables-and-ansible


person FrustratedWithFormsDesigner    schedule 05.08.2015    source источник
comment
Я голосую за то, чтобы закрыть этот вопрос как не по теме, потому что я задал здесь лучший (надеюсь!) Вопрос: unix.stackexchange.com/questions/220841/   -  person FrustratedWithFormsDesigner    schedule 07.08.2015


Ответы (4)


Попробуйте sudo chown -R YOUR_USERNAME /home/YOUR_USERNAME/.ansible

person Justas    schedule 09.11.2015
comment
Не хотите немного объяснить свое решение? - person Markus W Mahlberg; 09.11.2015
comment
Я посмотрел на свою систему, и она принадлежала пользователю root. Может быть, запуск предыдущей команды от имени root создал ее? - person wobbily_col; 19.04.2016

Поздно отвечать, но может быть кому-то полезен. Проверьте право собственности на ~ / .ansible. Право собственности на .ansible на локальном компьютере (на котором работает узел контроллера ansible / ansible) может быть причиной проблемы. Выполните "chown -R username: groupname .ansible" (имя пользователя: groupname должно принадлежать пользователю, запускающему playbook) и попробуйте снова запустить playbook.

В качестве альтернативы удалите этот каталог .ansible с узла контроллера и перезапустите playbook.

person Antony    schedule 07.04.2017

Ansible создает временные файлы в ~/.ansible на вашем локальном компьютере и на удаленном компьютере. Так что теоретически это могло быть инициировано с обеих сторон.

Я предполагаю, что это на локальном компьютере, где запускается Ansible, поскольку то, как был запущен Ansible, не должно влиять на целевые ящики. Быстрый поиск показал, что программы, запущенные с start-stop-deamon, не имеют $HOME (или вообще каких-либо env), но есть опция -e, позволяющая установить их в соответствии с вашими потребностями.

Если -e недоступен, см. Этот ответ, в котором предлагается дополнительно выполнить /usr/bin/env для установки переменных среды.

person udondan    schedule 05.08.2015
comment
Вы правы, похоже, это проблема с вызовом Ansible из программы, которая вызывается start-stop-daemon. Я попробовал этот трюк в ответе, который вы связали, но, увы, похоже, он не работает :( - person FrustratedWithFormsDesigner; 06.08.2015
comment
Это грязный прием, но что, если вы действительно создадите / $ HOME, возможно, как символическую ссылку на / tmp? ln -s / tmp / $ HOME (можно избежать $. Извините, сейчас на мобильном устройстве и не могу проверить) - person udondan; 06.08.2015
comment
Я не такой отчаянный. Пока что... :/ - person FrustratedWithFormsDesigner; 06.08.2015
comment
На самом деле, я думаю, что проблема связана с тем, что ansible не может найти свою конфигурацию, когда он выполняется как служба. Для переменной remote_tmp по умолчанию установлено значение /$HOME/.ansible/tmp (docs.ansible.com/ansible/ intro_configuration.html # remote-tmp), и мне интересно, может ли это также повлиять на то, что он пытается здесь установить, если ansible-run-as-service не может определить, что такое $HOME. Я пытался изменить это в /etc/ansible/ansible.cfg, но похоже, что это не работает ... - person FrustratedWithFormsDesigner; 06.08.2015
comment
Похоже, это и есть источник моего горя: github.com/ansible/ansible/blob/ - person FrustratedWithFormsDesigner; 07.08.2015

Я столкнулся с аналогичной проблемой при использовании Jenkins. По умолчанию $HOME env var была установлена ​​на /root/. Решением было ввести переменную среды во время выполнения.

HOME=/path/to/your/users/home
person modle13    schedule 16.05.2017
comment
У меня тоже была эта проблема. Для людей, работающих как команда, вы можете использовать утилиту env в unix-подобных системах: env HOME=/path/to/home ansible ... - person glmdev; 22.12.2020