Ansible初心者が始めの1カ月でやったこと


# Ansibleを始めたきかっけ

以前から構成管理ツールの類は気になっていたのですが、サーバーだけでなくネットワーク機器にも対応したことと、オライリーから「初めてのAnsible」が出たことをきっかけにしてAnsibleの勉強を始めました。

私のようなAnsibleの勉強を始めたばかりの方に参考になればと思い、私が始めの1カ月での行ったインプット、アウトプットをまとめたいと思います。ネットワーク機器を操作したいという目的があるため少し偏りがあるかもしれません。ターゲットバージョンは2.1です。

# ■ 1週目
## インプット
- 書籍「[初めてのAnsible](https://www.amazon.co.jp/%E5%88%9D%E3%82%81%E3%81%A6%E3%81%AEAnsible-Lorin-Hochstein/dp/4873117658)」
 - 概要を知るための最初の一冊、という感じでしょうか。
 - エージェントレスであることなどの特徴、Playbookの形式、ロール、Ansible Galaxyの存在など、広く浅く知れたと思います。
 - EC2やDockerの章は熟読しませんでした。また、当時はモジュールを作成しようとは思っていなかったのでカスタムモジュールの章もあまり読みませんでした。

## アウトプット
- 特にありません。

# ■ 2週目
## インプット
- 書籍「[Ansible完全読本](https://www.amazon.co.jp/Ansible%E5%AE%8C%E5%85%A8%E8%AA%AD%E6%9C%AC-%E5%BB%A3%E5%B7%9D%E8%8B%B1%E5%AF%BF-ebook/dp/B01G3OZG78)」
 - 電子書籍しかありませんがAnsible 2に対応した日本語書籍です。Playbookの例が前述の「始めてAnsible」より簡単なので、試してみようかなという気になりました。
 - 具体的には、Linuxにnginxをインストールしてサービスの起動、chkconfigをonにするという単純なPlaybookを初めてかきました。冪等性とはどういうものか少し実感できました。

- [公式ドキュメント](https://docs.ansible.com/ansible/intro.html)
 - もともとCisco IOSの機器を操作したいと思っていたので、ios_configやios_commandのモジュールの説明のページを見るようになりました。ですが、正直細かい仕様がわからず、ネット上にまだ使用例も少なかったので「もしかしたらモジュールのコードを読まないといけないのでは」を感じ始めました。

- [公式動画](https://www.ansible.com/webinars-training)
 - ネットワーク自動化に関する動画もあり、ios_configなどのモジュールの使用例、実行例を見られたという点で貴重でした。

## アウトプット
- Qiita「[Ansibleで複数のCatalystのパスワードを一括変更する](http://qiita.com/akira6592/items/7695881f91dee1036e4a)」
 - 分からないなりに試してみました。


# ■ 3週目
## インプット
- 書籍「[Extending Ansible](https://www.amazon.co.jp/gp/product/B01BSTEDL8/)」
 - 「細かい仕様をするにはコードを読む、コードを読みやすくなるには、モジュール開発向けのドキュメントを読む」という発想でパラパラと読みました。
 - 後になって、この本読む前にカスタムモジュールに関する公式ドキュメント（後述）を漁っておくべきだったかなと思いました。

## アウトプット
- Qiita「[Ansibleのios_command等の各タスクの認証情報は「provider」1行でキメる](http://qiita.com/akira6592/items/f0fba66ee7743ceb0365)」
 - タスクに与える認証情報をなるべくスマートにする方法を動画をきっかけに知ったので試しました。
- Qiita「[AnsibleのPlaybook実行時に牛とゆかいな仲間たちを表示させる] (http://qiita.com/akira6592/items/f0aa04b8d71311a15175)」
 - 「Ansible完全読本」に載っていたネタを試しました

- Qiita「[【Hello,module!】15分くらいでできるAnsibleモジュール作成体験（Bash編）](http://qiita.com/akira6592/items/0913efe4357780eb3e6e)」
 - 「Extending Ansible」に載っていたBashで作成するとても簡単なカスタムモジュールを試しました

- Qiita「[AnsibleでCisco IOSの機器のホスト名を大文字に統一する](http://qiita.com/akira6592/items/8db8420d43c2dee28d8a
)」
 - jinja2のフィルタを初めて使いました

# ■ 4週目
## インプット
- 公式ドキュメント「[Modules --- Ansible Documentation](http://docs.ansible.com/ansible/developing_program_flow_modules.html)」
- 公式ドキュメント「[Developing Modules --- Ansible Documentation](http://docs.ansible.com/ansible/developing_modules.html)」
- コード「[ios_config.py](https://github.com/ansible/ansible-modules-core/blob/stable-2.1/network/ios/ios_config.py)」「[ios.py](https://github.com/ansible/ansible/blob/stable-2.1/lib/ansible/module_utils/ios.py)」「[netcfg.py](https://github.com/ansible/ansible/blob/stable-2.1/lib/ansible/module_utils/netcfg.py)」
 - 的を絞って具体的にコードを読み始めました。機器から show run をとってくる様子、Playbookで指定されたコマンドと同比較して、最終的なコマンドをどう生成するかを追っています。（現在進行形）
 
## アウトプット
- Qiita「[Ansibleのios_configモジュールの parents オプションの使い道を考える](http://qiita.com/akira6592/items/6a47df09938f4a6e827e)」
 - linesオプションとparantsオプションの使い分けで疑問があったので試しました
- Qiita「[AnsibleでCisco IOSのコンフィグを標準機能だけで収集する](http://qiita.com/akira6592/items/0e75709ff83b884fbca1)」
 - ios_templateモジュールを始めて使いました
- Qiita「[AnsibleでCisco IOSに対して冪等性のある「no shutdown」をする](http://qiita.com/akira6592/items/92e6efc478978eb41eac)」
 - このあたりまじめに考えると少し難しいのかなと思いました

# これから
Ansible全般としては、ロール構成にしてみたり、Ansible Galaxyのものを試してみたりしたいと思います。
ネットワーク方面では、ios_configのmatch、replaceオプションの詳細は挙動を追っていきたいと思います。