状況
ある日 ansible-galaxy にて使えそうな Ansible role を探して三千里、
さて早速インストールだと思ったら、以下のようなエラーが出ました。
(hogehogeはここで説明するための、存在しない適当なroleです。)
$ ansible-galaxy install hogehoge
- downloading role 'hogehoge', owned by fugafuga
- downloading role from https://github.com/...
[ERROR]: failed to download the file: Failed to validate the SSL certificate for github.com:443. Make sure your managed systems have a valid CA certificate installed. 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/ansible, /usr/local/etc/openssl. The exception msg was: [SSL: TLSV1_ALERT_PROTOCOL_VERSION] tlsv1 alert protocol version (_ssl.c:590).
[WARNING]: - hogehoge was NOT installed successfully.
ERROR! - you can use --ignore-errors to skip failed roles and finish processing the list.
助けてドラえもん
前提
筆者環境
- macOS Sierra
- Homebrew 1.5.10-22-gcb6828d
- Ansible 2.4.3 (Homebrew経由)
- Python 3.6.4 (Pyenv経由)
- Openssl 1.0.2n 7 Dec 2017 (Homebrew経由)
原因
結論からいうと、GitHubのTLSv1廃止に伴う諸々のやつですね多分。
処理的な部分を追うと、どうやらpythonの何らかの処理で何かが起きているっぽいです。(適当)
しかし環境的には、概ね最新状態にしているはずなんですけど...。
(恐らく、OpenSSL(1.0.2n)とPython(2.7.14以降)が必要。)
$ python --version
Python 3.6.4
$ openssl version
OpenSSL 1.0.2n 7 Dec 2017
$ python -c "import ssl; print(ssl.OPENSSL_VERSION)"
OpenSSL 1.0.2n 7 Dec 2017
$ python3 -c "import ssl; print(ssl.OPENSSL_VERSION)"
OpenSSL 1.0.2n 7 Dec 2017
$ ansible --version
ansible 2.4.3.0
config file = None
configured module search path = [u'/Users/n-funaki/.ansible/plugins/modules', u'/usr/share/ansible/plugins/modules']
ansible python module location = /usr/local/Cellar/ansible/2.4.3.0/libexec/lib/python2.7/site-packages/ansible
executable location = /usr/local/bin/ansible
python version = 2.7.10 (default, Feb 7 2017, 00:08:15) [GCC 4.2.1 Compatible Apple LLVM 8.0.0 (clang-800.0.34)]
!?
AnsibleのPythonバージョンが「2.7.10」になっている...これが原因ですね。
詳しくは把握してませんが、ansibleのインストールを実行した時点の依存関係的なところに起因する気がします。
解決策
ansibleを再インストールしたら直りました。
## 一旦 brew でansibleをアンインストール
$ brew uninstall ansible
Uninstalling /usr/local/Cellar/ansible/2.4.3.0... (11,827 files, 143.7MB)
## 再度 ansibleをインストール
$ brew install ansible
Updating Homebrew...
==> Installing dependencies for ansible: python@2
==> Installing ansible dependency: python@2
==> Downloading https://homebrew.bintray.com/bottles/python@2-2.7.14_3.sierra.bottle.tar.gz
######################################################################## 100.0%
==> Pouring python@2-2.7.14_3.sierra.bottle.tar.gz
...
See: https://docs.brew.sh/Homebrew-and-Python
==> Summary
🍺 /usr/local/Cellar/python@2/2.7.14_3: 4,550 files, 81.0MB
==> Installing ansible
==> Downloading https://homebrew.bintray.com/bottles/ansible-2.4.3.0_3.sierra.bottle.tar.gz
######################################################################## 100.0%
==> Pouring ansible-2.4.3.0_3.sierra.bottle.tar.gz
🍺 /usr/local/Cellar/ansible/2.4.3.0_3: 11,220 files, 137.4MB
ビール飲みたい。
## バージョンを確認 「$ source ~/.bash_profile」が必要かも?
$ ansible --version
ansible 2.4.3.0
config file = None
configured module search path = [u'/Users/n-funaki/.ansible/plugins/modules', u'/usr/share/ansible/plugins/modules']
ansible python module location = /usr/local/Cellar/ansible/2.4.3.0_3/libexec/lib/python2.7/site-packages/ansible
executable location = /usr/local/bin/ansible
python version = 2.7.14 (default, Mar 10 2018, 00:01:04) [GCC 4.2.1 Compatible Apple LLVM 9.0.0 (clang-900.0.39.2)]
再インストールの結果、ansibleのPythonが 2.7.14 になりました。
これで再度 ansible-galaxyを実行したところ、無事成功しました。
$ ansible-galaxy install hogehoge
- downloading role 'hogehoge', owned by fugafuga
- downloading role from https://github.com/...
- extracting hogehoge to /Users/n-funaki/.ansible/roles/hogehoge
- hogehoge (master) was installed successfully
補足であり余談であり
homebrew経由の場合、homebrew上のansibleの依存関係に引っ張られるっぽいですが、
任意のpythonバージョンにしたい場合は、pip(Pythonのパッケージソフトウェア)経由でインストールするといけます。
$ python --version
Python 3.6.4
$ pip3 --version
pip 9.0.1 from /Users/n-funaki/.pyenv/versions/3.6.4/lib/python3.6/site-packages (python 3.6)
## pipでansibleインストール
$ sudo pip3 install ansible
... ながいログ ...
Successfully installed MarkupSafe-1.0 PyYAML-3.12 ansible-2.4.3.0 asn1crypto-0.24.0 bcrypt-3.1.4 cffi-1.11.5 cryptography-2.1.4 idna-2.6 jinja2-2.10 paramiko-2.4.1 pyasn1-0.4.2 pycparser-2.18 pynacl-1.2.1 six-1.11.0
## インストールされたansibleを確認
$ ansible --version
ansible 2.4.3.0
config file = None
configured module search path = ['/Users/n-funaki/.ansible/plugins/modules', '/usr/share/ansible/plugins/modules']
ansible python module location = /Users/n-funaki/.pyenv/versions/3.6.4/lib/python3.6/site-packages/ansible
executable location = /Users/n-funaki/.pyenv/versions/3.6.4/bin/ansible
python version = 3.6.4 (default, Mar 16 2018, 13:56:26) [GCC 4.2.1 Compatible Apple LLVM 9.0.0 (clang-900.0.39.2)]
私が遭遇した状況について、
こちらからは以上です。