Ansible: невозможно создать /etc/ansible/facts.d/openshift.fact, разрешение отклонено

Я следую этому блогу, чтобы установить OpenShift Origin V3 на OpenStack с использованием ansible. Но я получаю ошибку

«Не удалось создать файл фактов: %s, ошибка: %s» % (имя файла, ex) main.OpenShiftFactsFileWriteError: Не удалось создать файл фактов: /etc/ansible/facts.d/openshift.fact , ошибка: [Errno 13] Отказано в доступе: '/etc/ansible/facts.d'

Целевая система — CentOS, и я могу выполнять sudo без пароля на целевых системах. Я даже добавил в /etc/sudoers

Centos Все=(ВСЕ) NOPASSWD:ВСЕ

ко всем узлам, а также в системе, из которой я запускаю ansible.

Из системы, в которой я запускаю ansible, я попытался выполнить как sudo, как root, но с теми же результатами.

Я не уверен, где он сталкивается с отказом в разрешении, я имею в виду хост или целевые системы.

Хосты Ansible:

[OSEv3:children"]
masters
nodes

[OSEv3:vars]
ansible_ssh_user=centos
ansible_sudo=true
#ansible_ssh_user=root

product_type=openshift
deployment_type=origin

[masters]
192.168.144.132 openshift_public_hostname=master.novalocal openshift_ip=10.0.1.163 openshift_public_ip=192.168.144.132

[nodes]
192.168.144.128 openshift_public_hostname=node1.novalocal openshift_ip=10.0.1.164 openshift_public_ip=192.168.144.128 openshift_node_labels="{'region': 'primary', 'zone': 'east'}" 
192.168.144.129 openshift_public_hostname=node2.novalocal openshift_ip=10.0.1.165 openshift_public_ip=192.168.144.129 openshift_node_labels="{'region': 'primary', 'zone': 'west'}"

Ansible.cfg

[defaults]
hostfile = ansible_hosts
remote_user = centos
host_key_checking = False

Ниже приведен журнал:

TASK: [openshift_facts | Ensure PyYaml is installed] ************************** 
ok: [192.168.144.132] => (item=PyYAML)

TASK: [openshift_facts | Gather Cluster facts] ******************************** 
failed: [192.168.144.132] => {"failed": true, "parsed": false}
Traceback (most recent call last):
  File "/home/centos/.ansible/tmp/ansible-tmp-1449035570.03-273189812167365/openshift_facts", line 6355, in <module>
    main()
  File "/home/centos/.ansible/tmp/ansible-tmp-1449035570.03-273189812167365/openshift_facts", line 1222, in main
    openshift_facts = OpenShiftFacts(role, fact_file, local_facts, additive_facts_to_overwrite)
  File "/home/centos/.ansible/tmp/ansible-tmp-1449035570.03-273189812167365/openshift_facts", line 999, in __init__
    self.facts = self.generate_facts(local_facts, additive_facts_to_overwrite)
  File "/home/centos/.ansible/tmp/ansible-tmp-1449035570.03-273189812167365/openshift_facts", line 1013, in generate_facts
    local_facts = self.init_local_facts(local_facts, additive_facts_to_overwrite)
  File "/home/centos/.ansible/tmp/ansible-tmp-1449035570.03-273189812167365/openshift_facts", line 1194, in init_local_facts
    save_local_facts(self.filename, new_local_facts)
  File "/home/centos/.ansible/tmp/ansible-tmp-1449035570.03-273189812167365/openshift_facts", line 924, in save_local_facts
    "Could not create fact file: %s, error: %s" % (filename, ex)
__main__.OpenShiftFactsFileWriteError: Could not create fact file: /etc/ansible/facts.d/openshift.fact, error: [Errno 13] Permission denied: '/etc/ansible'
OpenSSH_6.6.1, OpenSSL 1.0.1f 6 Jan 2014
debug1: Reading configuration data /etc/ssh/ssh_config
debug1: /etc/ssh/ssh_config line 19: Applying options for *
debug1: auto-mux: Trying existing master
debug1: mux_client_request_session: master session id: 2
Shared connection to 192.168.144.132 closed.


FATAL: all hosts have already failed -- aborting

PLAY RECAP ******************************************************************** 
           to retry, use: --limit @/root/config.retry

192.168.144.132            : ok=6    changed=0    unreachable=0    failed=1   
localhost                  : ok=7    changed=0    unreachable=0    failed=0   

У меня нет опыта работы с ansible, поэтому я не могу больше отлаживать.


person user3275095    schedule 02.12.2015    source источник
comment
Эта ошибка указывает на то, что модуль openshift_facts не может выполнить запись в каталог /etc/ansible/facts.d на удаленном хосте. Как правило, я видел эту ошибку только при запуске от имени пользователя без полномочий root без sudo, но, судя по предоставленным вами фрагментам инвентаризации, здесь это не так. Если вы вручную подключитесь по ssh к 192.168.144.132 как пользователь centos и попытаетесь выполнить следующую команду: sudo touch /etc/ansible/facts.d/openshift.fact. Если это не удается, то перед продолжением необходимо устранить причину, по которой root не может получить доступ к /etc/ansible/facts.d.   -  person detiber    schedule 03.12.2015
comment
@detiber sudo touch /etc/ansible/facts.d/openshift.fact выдает ошибку Нет такого файла или каталога, вероятно, потому, что папка fact.d не существует. Но я могу создать случайный файл в папке /etc/ansible.   -  person user3275095    schedule 03.12.2015
comment
Какую версию ансибла вы используете?   -  person detiber    schedule 03.12.2015
comment
Я не совсем уверен, что может привести к тому, что каталог fact.d не будет создан, поскольку мы используем os.makedirs для создания каталога (и родительских каталогов), если они не существуют: github.com/openshift/openshift-ansible/blob/   -  person detiber    schedule 03.12.2015
comment
@detiber Я потерял доступ к машине, над которой работал, но вчера я установил ее из репозитория yum, а также клонировал ansible из github. Итак, это последняя доступная в репо и github.   -  person user3275095    schedule 03.12.2015
comment
Не могли бы вы предоставить полный файл инвентаризации, который вы используете, и полную командную строку, которую вы используете для вызова ansible-playbook?   -  person detiber    schedule 03.12.2015
comment
@detiber Не могли бы вы подтвердить целевую версию OpenStack для этой пьесы? Моя версия OpenStack — IceHouse. Кстати, я обновил вопрос с полным файлом инвентаризации.   -  person user3275095    schedule 04.12.2015


Ответы (1)


Решение кажется очень тривиальным. Я нашел его в группе google ansible.

Просто нужно добавить

sudo = true 
sudo_user = root

в файле ansible.cfg.

По крайней мере, эта ошибка исчезла, но я столкнулся с новой ошибкой.

EDIT Как было предложено в комментариях ниже, sudo_user должен быть root, поэтому соответствующим образом изменил ответ.

person user3275095    schedule 03.12.2015
comment
установка sudo_user не кажется правильной, это должен быть пользователь, от имени которого действует ansible, что в данном случае должно быть по умолчанию для root. - person detiber; 03.12.2015
comment
Вы имеете в виду, что его не следует добавлять, и по умолчанию он принимает значения true и root? - person user3275095; 03.12.2015
comment
sudo = true на самом деле не нужно, так как ваш инвентарь устанавливает ansible_sudo в группе OSEv3, но это не повредит, если он будет в файле ansible.cfg. - person detiber; 03.12.2015
comment
sudo_user = centos сообщает ansible sudo to пользователю centos при выполнении задач, у которых не будет надлежащих разрешений для установки пакетов или изменения многих файлов, необходимых на этапах настройки. - person detiber; 03.12.2015