2015-08-05 1 views
2

Я получаю очень странные ошибки, когда я бегу анзибль:

 
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, так что я буду работать как служба. Конечная цель состоит в том, чтобы иметь сервис, который может автоматически запускать проигрыватель, когда он сочтет это необходимым.

Начало пьес выглядит следующим образом:

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

Sudo установлен Верно, так что я несколько уверен, что ошибка не на целевой машине.

Сформированный вызов анзибль-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 происходит на сервере или на удаленном компьютере, или почему анзибль пытается сделать каталог $HOME в /. Это происходит только тогда, когда программа, вызывающая ansible, вызывается из службы linux, а не когда она явно вызывается из командной строки.


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

+0

Я голосующий, чтобы закрыть этот вопрос не по теме, потому что я задал более лучший вопрос (надеюсь!): Http: //unix.stackexchange.com/questions/220841/start-stop-daemon-services-environment-variables-and-ansible – FrustratedWithFormsDesigner

ответ

1

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

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

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

+0

Вы правы, это, кажется, проблема вызова Ansible из программы, которая вызывается 'start-stop-daemon'. Я пробовал этот трюк в ответе, который вы связали, но, увы, он, похоже, не работает :( – FrustratedWithFormsDesigner

+0

Это грязный хак, но что, если вы на самом деле создаете/$ HOME, возможно, как символическую ссылку на/tmp? Ln -s/tmp/$ ДОМАШНИЙ (может быть, избежать $. Извините, на мобильном сейчас и не могу проверить) – udondan

+0

Я не *, что * desparate. Тем не менее ...:/ – FrustratedWithFormsDesigner

4

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

+2

Помните, что [объясните свое решение] (http://stackoverflow.com/help/how-to-answer) немного? –

+0

Я посмотрел на свою систему, и она принадлежала как корень. Может быть, запустить предыдущую команду, как ее создал root? –

2

Late ответить, но может быть кому-то полезным. Проверьте право собственности на ~/.ansible. Причиной этой проблемы может стать право собственности на .ansible на локальном компьютере (который запускает доступный/доступный узел контроллера). «Chown -R имя_пользователя: groupname .ansible» (имя пользователя: имя_группы должно быть у пользователя, запускающего playbook), и попробуйте снова запустить playbook

В качестве альтернативы удалите этот .переменный каталог с узла контроллера и запустите программу воспроизведения ,

0

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

HOME=/path/to/your/users/home