1.はじめに
Ansibleにはあらかじめ多くのモジュールが含まれていて、
最近ではWindowsや、ネットワーク機器に対応したモジュールもあります。
それらを組み合わせてもやりたいことができない場合、カスタムモジュールを自作するという手段もあります。
モジュールはPythonのほかにもRubyやシェルスクリプト等でも作成できます。
とはいえPythonが作りやすいと思いますが。2.2にでは Go言語などのバイナリにも対応するそうです。
今回は、なるべく簡単にカスタムモジュールの作成を体験するために
シェルスクリプト(実質1行)でやってみます。検証環境は Ansible2.1 / Ubuntu 16.04 です。
2.モジュールの作成
まず、Playbookのおくディレクトリにlibrary
ディレクトリを作成します。
ディレクトリの名前は決められています。
library
ディレクトリは配下に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を作成します。
---
- 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.参考資料
-
「Chapter2. Getting to Know Ansible Modules」にモジュールの作成方法が書かれています。メインはやはりPythonです。
-
書籍「初めてのAnsible」
-
こちらの「10章 カスタムモジュール」にPythonやBashでカスタムモジュールの作成方法が書かれています。
-
動画「WRITING MODULES FOR ANSIBLE」
- 公式の動画です。