4
4

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

【Hello,module!】15分くらいでできるAnsibleモジュール作成体験(Bash編)

Last updated at Posted at 2016-06-11

1.はじめに

Ansibleにはあらかじめ多くのモジュールが含まれていて、
最近ではWindowsや、ネットワーク機器に対応したモジュールもあります。
それらを組み合わせてもやりたいことができない場合、カスタムモジュールを自作するという手段もあります。
モジュールはPythonのほかにもRubyやシェルスクリプト等でも作成できます。
とはいえPythonが作りやすいと思いますが。2.2にでは Go言語などのバイナリにも対応するそうです。

今回は、なるべく簡単にカスタムモジュールの作成を体験するために
シェルスクリプト(実質1行)でやってみます。検証環境は Ansible2.1 / Ubuntu 16.04 です。

2.モジュールの作成

まず、Playbookのおくディレクトリにlibraryディレクトリを作成します。
ディレクトリの名前は決められています。
libraryディレクトリは配下にhelloという名前の以下の内容のシェルスクリプトを作成します。

hello
#!/bin/bash
echo -e "{\"hello\":\"hello, module@`hostname`"\""}"

内容はとても簡単で{"hello":"Hello,module! @ホスト名"}というJSONを出力するだけです。
モジュールはValidなJSONを出力する必要があります。
ホスト名は実行先のホスト名になります。
これをあとでAnsibleのPlaybookから呼び出す形になります。

ファイル構成例:

/etc/ansible
    hello.yml    # Playbook
    library
         hello   #カスタムモジュール(シェルスクリプト)

3. Playbookの作成

モジュールを置いたlibraryディレクトリから一つ上にもどり、
以下の内容のPlaybookを作成します。

hello.yml
---
- hosts: localhost
  tasks:
    - name: hello        # 便宜上のタスクの名前      
      action: hello      # 作成したカスタムモジュールを呼び出す
      register: result   # 出力結果を変数resultに登録する
    - debug: var=result  # 変数resultをデバッグ表示する

なるべく簡単にするためここではlocalhostを対象にしています。

4.Playbookの実行

先ほど作成したPlaybookを実行します。

user@ubuntu-vm:/etc/ansible$ ansible-playbook  hello.ymml

PLAY [localhost] ***************************************************************

TASK [setup] *******************************************************************
ok: [localhost]

TASK [hello] *******************************************************************
ok: [localhost]

TASK [debug] *******************************************************************
ok: [localhost] => {
    "result": {
        "changed": false,
        "hello": "Hello, module! @ubuntu-vm"     # ★モジュールが出力してる部分
    }
}

PLAY RECAP *********************************************************************
localhost                  : ok=3    changed=0    unreachable=0    failed=0

hello": "Hello, module! @ubuntu-vm" の部分がモジュールが出力している部分です。
ホスト名の部分は実行先のhostnameの結果が拾えてます。

以上、とても簡単な例でのカスタムモジュールの作成でした。

5.参考資料

  • 書籍「Extending Ansible

  • 「Chapter2. Getting to Know Ansible Modules」にモジュールの作成方法が書かれています。メインはやはりPythonです。

  • 書籍「初めてのAnsible

  • こちらの「10章 カスタムモジュール」にPythonやBashでカスタムモジュールの作成方法が書かれています。

  • 動画「WRITING MODULES FOR ANSIBLE

    • 公式の動画です。
4
4
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
4
4

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?