Ansibleでファイル編集を行いたい~そして見つかる致命的な弱点とは~
お疲れ様です。伊藤です。
いよいよ本格的にAnsibleを使って環境構築を自動化していきたいと思っていますが、早速壁にぶつかりました。AnsibleではModuleを使ってLinuxやらWindowsやらの設定変更を行います。これまでに記載したようなyumですとか、user、groupなんかを使って設定変更していきます。その中でも一番多い設定変更は設定ファイルの書き換えです。
が、しかしこれがAnsibleは苦手っぽいようです。例えば考えられるファイル編集で使えるModuleは下記になります。
module名 | いいとこ | わるいとこ |
---|---|---|
lineinfile | 1行ずつ追加や変更や削除ができる。使えるオプションが一番多くて細かい指示が出せる | 行を追加したり変更するときに対象行を検索するが、文字列検索しかできないので1ファイルに同じ内容の行があったら一番上の行が対象になってしまう |
replace | 複数行置き換えができる | 新規追加ができない。あとlineinfileと同じ問題も起きる |
blockinfile | lineinfileの複数行版。lineinfileでは出来ないファイルの中間に複数行の塊を追加できる | 複数行の塊を分けて追加できない。再度追加すると一度追加した内容を書き換える。あとlineinfileと同じ問題も起きる |
copy | 事前にファイルを作っておいてファイルごと置き換え。ファイルは自分で作るので自由が利く | ファイルを事前に作る必要があるので面倒 |
その他にini_fileというiniファイル専用書き換えModuleがありますがかなり限定的なのでここでは書き控えます。
で、それぞれ一長一短があります。
まあそれぞれ使うには結構致命的な問題があります(個人的には)
そもそも設定ファイルって結構同じ文字列が散らばってたりするから文字列検索で対象探すのは難しいんですよね。。。なぜ行数指定ができないんだ。。
で、それを解決するとなるとcommandやshellを使ってsedなどで編集したりする必要が発生してきます。う~ん。。。それはちょっと。。。Playbookでcommandを多用すると判断とか分岐がきついんですよねぇ・・・
そうなると考えられる手段は自作でModuleを作る方法しかありません!次回はついに自作でModuleを作る!に挑戦の巻です。AnsibleのModuleを自作してみる - ときどきAnsible日記
お疲れ様でした。