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