Ansible 徹底入門
自分自身はまだ読んでいる途中ですが、Ansible をこれから利用しようと考えている方から、各種クラウド環境と組み合わせた一歩踏み込んだ利用を考えて方まで幅広い層の皆さんにお薦め出来ると思います。
ムラムラ
Ansible 徹底入門を読み進めているうちに、ムラムラっと Ansible Module を作ってみたくなったので作ってみました。
Ansible Module について
以下の資料にまとめました。
作った Ansible Module
Datadog のホストに付与するタグを管理するモジュール。
デモ
デモ環境
$ python --version Python 2.7.13 $ ansible --version ansible 2.2.1.0 config file = /path/to/.ansible.cfg configured module search path = Default w/o overrides
モジュールの置き場
以下の何れかのディレクトリに置きます。
- カレントディレクトリの
library
ディレクトリ - 環境変数
ANSIBLE_LIBRARY
で指定されたパス - ansible.cfg で指定されたパス
--module-path
で指定されたパス
Playbook
- hosts: localhost tasks: - name: Test datadog_tags(present) datadog_tags: state: present host: myhost tags: 'aa,bb,cc,dd' api_key: xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx app_key: xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx - name: Test datadog_tags(absent) datadog_tags: state: absent host: myhost api_key: xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx app_key: xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
プロビジョニング
$ ansible-playbook datadog.yml [WARNING]: Host file not found: /etc/ansible/hosts [WARNING]: provided hosts list is empty, only localhost is available PLAY [localhost] *************************************************************** TASK [setup] ******************************************************************* ok: [localhost] TASK [Test datadog_tags(present)] ********************************************** changed: [localhost] TASK [Test datadog_tags(absent)] *********************************************** changed: [localhost] PLAY RECAP ********************************************************************* localhost : ok=3 changed=2 unreachable=0 failed=0
実行例では present
して absent
しているので、実行結果としてはタグは付与されていないことになるので、一応、present
のみ実行した状態は以下のように指定したホストにタグが付与されています。
実装にあたり
- 引数は AnsibleModule クラスを継承したインスタンスの params に含まれているので適宜取り出して処理すれば良いのは楽
- モジュール側で冪等性を頑張る必要がある(既に指定したタグが存在している場合には
module.exit_json(changed=False)
で終了するとか)
参考
以下のリンクを参考にさせて頂くことで、思いのほか簡単に Ansible Module を作ることが出来た。
- Ansible 徹底入門
- Building A Simple Module
- Developing Plugins
- Ansibleのモジュール開発(基礎編)
- 初めてのAnsible(10章:カスタムモジュール)
- Datadog API Reference
ありがとうございました。