10
6

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

ansibleがGitHubへのSSL的エラーで動かないのを何とかした話

Last updated at Posted at 2018-03-16

状況

ある日 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 で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

ビール飲みたい。

再インストール後のansible確認
## バージョンを確認   「$ 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実行
$ 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のパッケージソフトウェア)経由でインストールするといけます。

pip経由でansibleインストール
$ 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)]

私が遭遇した状況について、
こちらからは以上です。

10
6
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
10
6

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?