2015-09-10 4 views
6

У меня есть простой анзибль задача, которая создает файл:анзибль разрешения вопроса

- name: create fake file 
    file: 
    name: /opt/refdata/PROD02/roman.delete 
    state: touch 

Я генерируемый общественных/частные ключи и добавил общественность один к authorized_keys2 для пользователя я бег, как на целевом хосте.

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

failed: [experiment01] => {"failed": true, "parsed": false} 
Traceback (most recent call last): 
    File "/home/acplus_uat01/.ansible/tmp/ansible-tmp-1441921944.69-3869708445827/file", line 1999, in <module> 
    main() 
    File "/home/acplus_uat01/.ansible/tmp/ansible-tmp-1441921944.69-3869708445827/file", line 372, in main 
    open(path, 'w').close() 
IOError: [Errno 2] No such file or directory: '/opt/refdata/PROD02/roman.delete' 

Таким образом, чтобы увидеть, если у меня есть проблемы с SSH или питона я попытался это - я создал файл питона с одной строкой:

open('/opt/refdata/PROD02/roman.delete', 'w').close() 

и побежал это с того же места и того же пользователя, как я бегу анзибль:

cat test2.py | ssh -i ~/.ssh/myPrivateKey -q [email protected] python - 

и он создал файл.

Итак, мой вопрос: где проблема, почему он не может создать файл?

путь я бегу пьес это:

ansible-playbook -i inventory/prod/ acc.yml -v --vault-password-file=~/.ansible-vault-pw --private-key ~/.ssh/myPrivateKey 

Я также пытался создать файл в/TMP/и анзибль работал.

Редактировать: Итак, еще одно обновление - я создал каталог, в котором я пишу файл в мир, доступный для записи (777), и создал файл. Итак, вопрос - чем отличается в анзибль, что

cat test2.py | ssh -i ~/.ssh/myPrivateKey -q [email protected] python - 

работ и делает по существу то же самое через анзибль не делает.

+0

Поскольку анзибль Playbook может записывать файлы в/TMP, но не здесь, я бы добавить шаг к игре в 'отладки: переменная = ansible_ssh_user' и проверить, соответствует пользователю, что ваш питон скрипт бытии в ведении , – nikobelia

+0

Я просто коснусь/tmp/foo из Ansible, а затем просмотрю права и права собственности/tmp/foo, чтобы убедиться, что файл создается Ansible с ожидаемыми вами атрибутами. –

+0

Создано с атрибутами, которые я ожидаю - правильный пользователь/группа –

ответ

3

Если /opt/refdata/PROD02/ не существует, вы должны создать каталог первого

file: 
    name: /opt/refdata/PROD02 
    state: directory 
    recurse: yes 
    mode: 0755 

Ansible documentation говорит:

recurse - Set the specified file attributes (applies only to state=directory)

Так анзибль не может создать файл и все каталоги в это путь в одной команде.

Затем с помощью второй команды вы должны создать файл.

name: create fake file 
    file: 
    name: /opt/refdata/PROD02/roman.delete 
    state: touch 
+0

/opt/refdata/PROD02/есть –