2019/07/29Windows Server 2016の構築手順を自動化する その4
こんにちわ。
技術の樋口です。
ここからは、実際の処理内容について説明します。
前回は、roleとvarsを使いました。
Ansible モジュールには冪等性がある
冪等性という言葉でググると、「1回やっても、2回やっても、何回やっても、結果が同じことという概念」という説明がなされています。ふむふむ、これだけ聞くとよくわからん。
寿司屋さんで例えると、「イカ二貫」というオーダーを繰り返したとしましょう。
Ansibleで「イカ2貫」というオーダーを繰り返したときは、
⼿元に1貫しかない場合は、板前さんが1貫だけにぎって合計2貫
⼿元に2貫ある場合は、板前さんは何もにぎらず、合計2貫
⼿元になにもない場合は、板前さんが2貫にぎって合計2貫
これをWindowsのバッチファイルやスクリプトで「イカ2貫」
というオーダーを繰り返したときは、
⼿元に1貫しかない場合は、板前さんが2貫にぎって合計3貫
⼿元に2貫ある場合でも、板前さんが2貫にぎって合計4貫
⼿元になにもない場合は、板前さんが2貫にぎって合計2貫
冪等性はこんな特性です。逆にわかりづらいですかね︖(笑)
今度は前回のPlaybookで説明したユーザー追加を例にしてみましょう。
ユーザー追加を通常のWindowsのコマンドプロンプトで実施すると以下の様になります。
C:\Users\ansible-11>net user kubo /add コマンドは正常に終了しました。
このコマンドをもう一回流すと以下のようにエラーで終了します。
ここで、Playbookをもう一回実行してみます。
C:\Users\ansible-11>net user kubo /add<br > アカウントは既に存在します。 NET HELPMSG 2224 と入力すると、より詳しい説明が得られます。
既にユーザーが存在している場合にも、エラーがないように終了するには
事前にnet user kuboコマンドでユーザー情報のステータスチェックを⾏い、
そのリターンコードによってIF⽂などをつかって、
分岐処理を⾏うというちょっと複雑な処理を書かないといけないです。
Windowsバッチファイルにするとちょい⻑くなります。
@echo off net user kubo if %ERRORLEVEL% == 2 ( net user kubo /add exit /b 0 ) if %ERRORLEVEL% == 0 ( exit /b 0 )
Ansibleの場合は、既にユーザーがいようが、いまいが
以下(イカにかけているわけではない)の構⽂だけで⼤丈夫です。
--- - win_user: name: kubo
寿司屋さんで例えると、「イカ2貫が⼿元にあること」という処理を
Windowsバッチファイルで例えると
手元の以下の数と数える もし手元のイカが0貫ならば2貫にぎってして終了 もし手元のイカが1貫ならば1貫にぎって終了 もし手元のイカが2貫ならば何もにぎらず終了
Ansibleの構文で例えると
イカ2貫
圧倒的に短くなるのがわかりますよね︖︖
Ansibleのモジュールには標準で冪等性が実装されているので、
・エラーハンドリングを気にしなくていい
・構⽂が短い
などなど様々なメリットがあります。
次回はループ処理について書きたいと思います。