Ansible 徹底入門

最新構成自動化ツールを実践的に解説!クラウド時代に入り、コンピュータシステムのサーバーの導入やセッティングの状況が変わってきています。以前は手作業で進めてきたサーバーの構築は、人が行う作業としては大規模かつ煩雑なものとなってきています。Ansibleはこ...

www.shoeisha.co.jp

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

ムラムラ

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

Ansible Module について

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

speakerdeck.com

作った Ansible Module

ansible-sandbox - Ansible について色々と試したことを溜めておきます

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

モジュールの置き場

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

  • カレントディレクトリの 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 徹底入門」を読んでる途中だけど Ansible Module(Datadog のタグを管理するモジュール) を作ってみたのメモ