読者です 読者をやめる 読者になる 読者になる

ようへいの日々精進XP

よかろうもん

「Ansible 徹底入門」を読んでる途中だけど Ansible Module(Datadog のタグを管理するモジュール) を作ってみたのメモ

Ansible 徹底入門

www.shoeisha.co.jp

自分自身はまだ読んでいる途中ですが、Ansible をこれから利用しようと考えている方から、各種クラウド環境と組み合わせた一歩踏み込んだ利用を考えて方まで幅広い層の皆さんにお薦め出来ると思います。

ムラムラ

Ansible 徹底入門を読み進めているうちに、ムラムラっと Ansible Module を作ってみたくなったので作ってみました。

Ansible Module について

以下の資料にまとめました。

speakerdeck.com

作った Ansible Module

github.com

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

モジュールの置き場

以下の何れかのディレクトリに置きます。

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 のみ実行した状態は以下のように指定したホストにタグが付与されています。

f:id:inokara:20170326000854p:plain

実装にあたり

  • 引数は AnsibleModule クラスを継承したインスタンスの params に含まれているので適宜取り出して処理すれば良いのは楽
  • モジュール側で冪等性を頑張る必要がある(既に指定したタグが存在している場合には module.exit_json(changed=False) で終了するとか)

参考

以下のリンクを参考にさせて頂くことで、思いのほか簡単に Ansible Module を作ることが出来た。

ありがとうございました。