AnsibleのModuleを自作してみる
お疲れ様です。伊藤です。
~前回までのあらすじ~
昨日Moduleを使って設定ファイルの書き換えを行おうと思ったところ、今のModuleでは使い勝手が悪いっ!・・ということに気づきました。ここはやはりModuleを自作するしかないか。。。(゚A゚;)ゴクリ
詳細はAnsibleでファイル編集を行いたい~そして見つかる致命的な弱点とは~ - ときどきAnsible日記をご参照ください。
というわけで本日はAnsibleのModuleを作ってみます。と、大層な風に書きましたが、実際やってみたら大したことありませんでした。まずは作るModuleの仕様を決めます。今回はこんな感じ。
state = present line = 変更内容 row = 指定行 path = 対象ファイル 動作:指定された行のデータを見てlineの内容と違っていたら追加 state = present regexp = 変更対象 line = 変更内容 row = 指定行 path = 対象ファイル 動作:指定された行のデータを見てregexpの内容とあっていたらlineの情報に変更 state = absent regexp = 削除内容 row = 指定行 path = 対象ファイル 動作:指定された行のデータを見てregexpの内容とあっていたら削除
既存のlineinfileに行数指定を追加した、みたいな内容です。なのでほとんどlineinfileのモジュールを流用出来ます。
ModuleはPythonで書かれており、Ansibleの中にまんまソースがあるので、それを探します。ファイル名はModule名+.pyです。
# find / -name lineinfile.py /usr/lib/python2.7/site-packages/ansible/modules/files/lineinfile.py
で、これをいつもAnsibleを実行しているフォルダに持ってきます。Ansibleは配下にlibraryというフォルダがあればその中を検索しに行くようなので、フォルダを切ります。
# cd /ansible # mkdir library # cp -p /usr/lib/python2.7/site-packages/ansible/modules/files/lineinfile.py /ansible/library/
であとはModuleの名前にシェル名を変えます。
# cd library # mv lineinfile.py rowinfile.py
とりあえず今回はrowinfileとしました(ネーミングセンスは気にしないでください。。。。)
なんとこれでオリジナルModulleのrowinfileの完成です。Playbookからrowinfileが呼び出せます!
後はPythonができる人を探して、仕様通りに直してもらって。。。。というのは無理なので自力で頑張ります。
ア-シテ\(゜ロ\)(/ロ゜)/コ-シテ
で、何とかスクリプトが完成。Playbookから呼び出して動かしてみます。Playbookの内容は下記のような感じ。
管理対象側の設定ファイルを事前に確認しておきます。
で、実行!
デキタ━━━━━━━━m9( ゚∀゚)━━━━━━━━!!
対象ファイルを見るとできてる!
後はこんな感じで動作確認しながら修正を加えていきます。例えばこれ5行目を指定してますが、6行目に入ってます。おそらくPythonが0からスタートしてるからと。。。
こんな感じで非常に簡単にModuleが作れました。作る前まではなかなか敷居が高かったのですが、実際にやってみるとそうでもありませんので皆さまも是非!(これを公式に挙げるとなると相当大変ですが。。。)
注 本格的に自作Moduleを作成する場合には色々とルールがありますので下記URLをご参照ください(英語ですが。。。)
http://docs.ansible.com/ansible/developing_modules.html
以上、お疲れ様でした。