Назад | Перейти на главную страницу

Ошибка модуля Ansible unarchive: «Не удалось проверить сертификат SSL»

Недавно я изменил способ настройки среды Python на клиентских машинах, настроенных с помощью Ansible.

Это включало минимизацию количества пакетов, установленных и настроенных в системе Python install (на клиентах Ubuntu 14.04), чтобы избежать потенциальных конфликтов библиотек, когда клиентские машины впоследствии используются для разработки.

После внесения этого изменения у меня возникли проблемы с unarchive Модуль Ansible не удалось проверить сертификаты SSL, если remote_src используется вместе с URL-адресом HTTPS.

Вот пример неудачной команды:

- name: Get and untar opus-1.1.2
  unarchive:
    src="http://downloads.xiph.org/releases/opus/opus-1.1.2.tar.gz"
    dest="/opt/library-sources"
    remote_src=yes

При запуске вышеуказанная команда завершается ошибкой со следующим сообщением об ошибке:

fatal: [10.0.0.90]: FAILED! => {"changed": false, "failed": true, "msg": "Failed to validate the SSL certificate for downloads.xiph.org:443. Make sure your managed systems have a valid CA certificate installed. If the website serving the url uses SNI you need python >= 2.7.9 on your managed machine or you can install the `urllib3`, `pyopenssl`, `ndg-httpsclient`, and `pyasn1` python modules to perform SNI verification in python >= 2.6. You can use validate_certs=False if you do not need to confirm the servers identity but this is unsafe and not recommended. Paths checked for this platform: /etc/ssl/certs, /etc/pki/ca-trust/extracted/pem, /etc/pki/tls/certs, /usr/share/ca-certificates/cacert.org, /etc/ansible"}

Насколько я понимаю, эта ошибка заключается в том, что отсутствуют библиотеки Python, которые unarchive зависит от.

Чего я не смог выяснить ни в одной документации по Ansible, так это то, являются ли эти пакеты требованиями среды Python на серверном компьютере (которому поручено выполнение сценариев Ansible) или клиентских машинах (на которых задачи, подробно описанные в Скрипты Ansible выполняются).

Следует отметить, что у меня на сервере установлен Ansible (также работающий под управлением Ubuntu 14.04) через pip в котором также установлены следующие версии пакетов, упомянутых в сообщении об ошибке:

urllib3==1.7.1
ndg-httpsclient==0.4.3
pyasn1==0.4.2
pyOpenSSL==0.13

Это наводит меня на мысль, что эти пакеты, вероятно, требуются как на клиентской машине, так и на сервере.

Кто-нибудь знает, на каких машинах (серверных и / или клиентских) требуются эти пакеты? Мне также было бы интересно узнать, где это задокументировано, потому что это может вызвать проблемы в других местах моих скриптов Ansible.

Вы должны знать, что unarchive происходит на сервере, которым управляет ansible, а не на машине, на которой вы его запускаете, когда remote_src=yes и src это URL.

Кроме того, вы должны знать, что посещение http://downloads.xiph.org/ перенаправляет на https://downloads.xiph.org/ который является безопасным веб-сайтом, который в дальнейшем перенаправляет на https://ftp.osuosl.org/pub/xiph/ если вам удастся зайти так далеко.

Таким образом, проверка сертификата SSL происходит на этом сервере, и программное обеспечение и сертификаты CA, необходимые для выполнения этой проверки, должны находиться на этом сервере. Кроме того, это должны быть системные пакеты, а не пакеты, которые вы установили сами. pip. Вы должны убедиться, что установка этих предварительных компонентов входит в число самых ранних запускаемых вами задач по подготовке.