みなさん、こんにちは。ピクトリンク事業部インフラ課の藤本佳世です。

フリュー Advent Calendar 2018の12/18分の記事になります。

 

先日、SSL証明書の更新をAnsibleで実施しようとコードを書いていた時にはまった

「Ansibleで連番の複数ホストを指定できなかった件」について、シェアしたいと思います。

みなさんも、「これで動きそうなんだけど、なぜ動かない!!」と思ったことあるかと思います。

今回、私もそんな状況になってしまいました。

※Ansibleについては、以前ブログを書いているのでこちらをご覧ください。

やりたかったこと

今回やりたかった作業はSSL証明書の更新です。この作業をAnsibleで実施しようと考えました。

サーバ ドメイン
test-web-01~05 hoge.com
test-web-06~10 fuga.com

SSL証明書の場所は下記の通りです。

Webサーバ証明書ファイル /usr/local/ssl/server.crt
Webサーバの秘密鍵ファイル /usr/local/ssl/private.key
中間CA証明書ファイル /usr/local/ssl/server_ca.crt

ここで注意ポイントがあります。
test-web-01~test-web-05はドメインhoge.comの証明書
test-web-06~test-web-10まではドメインfuga.com証明書
のように、サーバによって証明書が異なることです。

実際のAnsibleコード

role配下のmain.ymlはこんな感じで書きました。

playbook.ymlはこんな感じです。

サーバによって証明書が異なるので、when句を使って
test-web-01~test-web-05はhoge_com
test-web-06~test-web-10はfuga_com
のように指定したつもりでしたが、うまくいきませんでした。

ex) test-web-05, test-web-10に対して実行した結果

エラー出力されませんが、すべてskippingされた状態になりました。

対処法

下記のようにplaybook.ymlを修正しました。

inventroy_hostname(ホスト名)の数字の部分だけを取り出し、「5以下」、「6以上」と識別するようにしました。
公式ドキュメントにも書いている通り、CentOSのバージョンによって処理を分けることもできます。

Tip: Sometimes you’ll get back a variable that’s a string and you’ll want to do a math operation comparison on it.

このTipsは今後も使えそうです!

だめだった方法

記述方法をいろいろ替えてやってみましたが、うまくいかず。。。

こちらの記事を参考にしてみましたが、うまいかず。。。

うまくいかなかった問題に関しては、また時間がある時に調べてみたいと思います。

最後に

2018年度の私の投稿はこの記事で最後になります。

2018年は大変お世話になり、ありがとうございました。来年もどんどんブログを書くつもりなので、

今後ともどうぞよろしくお願い致します。

 

みなさまにとって2018年は素敵な年となりましたでしょうか?
願わくは、2019年も素敵な年となりますように★