macにAnsibleのインストール

## はじめに
タイトルそのまんまですが、手元のmacにAnsible実行環境を作成します。
参画プロジェクトのProduction環境でPythonのバージョンも異なるだろうと思い、pipenvを採用。
macの場合はpyenvの方が良い（表現がアレですが、pyenvの方がスムーズなのかな？）とのこと、またvirtualenvも利用頻度は低いが覚えておくとよきとのことです。それはまたどこかで。

環境作成にあたり[Ansible実践ガイド](https://www.amazon.co.jp/Ansible%E5%AE%9F%E8%B7%B5%E3%82%AC%E3%82%A4%E3%83%89-%E7%AC%AC3%E7%89%88-impress-top-gear/dp/4295007641/ref=sr_1_1?__mk_ja_JP=%E3%82%AB%E3%82%BF%E3%82%AB%E3%83%8A&crid=13SV9QUMDF563&keywords=ansible&qid=1573745596&sprefix=ansi%2Caps%2C247&sr=8-1)と下記サイトを参考にさせて頂きました。
この場を借りてお礼申し上げます:pray:

[Pipenvの基本的な使い方](https://pipenv-ja.readthedocs.io/ja/translate-ja/basics.html)
[[Python] pyenv と pipenv による python 仮想環境を構築する（CentOS 7 ほぼ初期状態から ）](https://tekunabe.hatenablog.jp/entry/2018/12/28/pyenv_pipenv)
[Pipenvことはじめ
](https://qiita.com/shinshin86/items/e11c1124e3e2e74556b8)

## 環境と使用書籍
mac
[Ansible実践ガイド](https://www.amazon.co.jp/%E3%83%97%E3%83%AD%E3%82%B0%E3%83%A9%E3%83%9E%E3%81%AE%E3%81%9F%E3%82%81%E3%81%AEDocker%E6%95%99%E7%A7%91%E6%9B%B8-%E7%AC%AC2%E7%89%88-%E3%82%A4%E3%83%B3%E3%83%95%E3%83%A9%E3%81%AE%E5%9F%BA%E7%A4%8E%E7%9F%A5%E8%AD%98-%E3%82%B3%E3%83%BC%E3%83%89%E3%81%AB%E3%82%88%E3%82%8B%E7%92%B0%E5%A2%83%E6%A7%8B%E7%AF%89%E3%81%AE%E8%87%AA%E5%8B%95%E5%8C%96-WINGS%E3%83%97%E3%83%AD%E3%82%B8%E3%82%A7%E3%82%AF%E3%83%88%E9%98%BF%E4%BD%90-ebook/dp/B07BHK5KX7/ref=sr_1_5?__mk_ja_JP=%E3%82%AB%E3%82%BF%E3%82%AB%E3%83%8A&keywords=docker&qid=1573610875&sr=8-5)

## 作業開始
### pipenvのインストール
macの場合は開発ツール（python-devel, python-dev)はいらないのかな？
わからないので進める！

```
# 現在のPythonのバージョンを確認
$ python -V
Python 2.7.10

# homebrewでPython3系のインストール
$ brew install python3

#　バージョン確認
$ python3 -V
Python 3.7.5

# pipのインストール
$ curl https://bootstrap.pypa.io/get-pip.py -o get-pip.py
$ python3 get-pip.py

# pipenvのインストール
$ brew install pipenv

# pipenvのバージョン確認
$ pipenv --python 3.7.5

# Pipfile自動生成とcat
$ ls -l Pipfile
$ cat Pipfile
[[source]]
name = "pypi"
url = "https://pypi.org/simple"
verify_ssl = true

[dev-packages]

[packages]

[requires]
python_version = "3.7"
```

サイトを読み進めてると、パッケージのインストールが必要のように見える。
[Pipenvの基本的な使い方](https://pipenv-ja.readthedocs.io/ja/translate-ja/basics.html)に倣って、requestsをインストールしてみます。
用途に合わせてパッケージをインストールするんでしょうね。

```
$ pipenv install requests
$ cat Pipfile
[[source]]
name = "pypi"
url = "https://pypi.org/simple"
verify_ssl = true

[dev-packages]

[packages]
requests = "*"

[requires]
python_version = "3.7"
```

次にAnsibleを実行するディレクトリ「ansible」を作成します。
その後はcdしてpipenvを起動。

```
$ mkdir ~/ansible
$ cd ~/ansible
$ pipenv --version
pipenv, version 2018.11.26
$ pipenv shell
(admin)$
```

bashが起動しました！嬉しい！w
仮想環境でAnsibleをインストールします。

```
(admin)$ pip install ansible
(admin)$ ansible --version
ansible 2.9.1
```

これにて完了！

## おわりに
断片的ではあるのですがAnsibleの実行環境に関する知識がなかったら頓挫していたと思います。。先人の知恵をお借りして実現できてよかった！
次はこの環境を使って実際にAnsibleをガリガリ実行するところから。

## おまけ
localhostにpingを投げるときはinventoryを以下のように記述します。

・inventory
ファイル名に拡張子を付けなくても読み込みます（inventory.ini）。
また、インベントリはyamlでも良い。
pipenvでインストールしなかったら/etc/ansible/にhostsという名前のファイルが生成されるので、そこに記述すれば良い。ように読めた。

localhostの書き方でハマり数時間消し飛びました。。
グループは無くても動きます。

```
$ cat inventory
[test]
localhost ansible_connection=local

$ ansible -i inventory test[もしくはall] -m ping
[WARNING]: Platform darwin on host localhost is using the discovered Python interpreter at /usr/bin/python, but future installation of another
Python interpreter could change this. See https://docs.ansible.com/ansible/2.9/reference_appendices/interpreter_discovery.html for more
information.

localhost | SUCCESS => {
    "ansible_facts": {
        "discovered_interpreter_python": "/usr/bin/python"
    },
    "changed": false,
    "ping": "pong"
}
```

-i：インベントリの指定
-m：モジュールを使う際のオプション

pingじゃなくてpongってなってるのは、ターゲットノードにpingを投げてる訳じゃなくてsshで接続した結果をpingの結果として返しているからとのこと。
playbook.ymlで指定しても動くはず。これはまた次回行います。

以上です:innocent: