Ansible Tips
忘れがちな小技を整理する。Ansible2.0以降を前提にしてる。
pingを飛ばす
|
|
factで取れる情報を確認する
|
|
rebootして再接続できるまで待つ
こんな感じ。
|
|
set_factで情報を書き換える
set_factモジュールを使えば接続情報を変更できる。
|
|
前述の再起動と合わせれば sshd のポート変更とかも対応できてやってる人がいた。
フラグからvarsファイルを使う
プレイブックに明示せず実行時に変数を与えたい場合は --extra-vars
オプションを使う。
変数をスペース区切りの形式やJSONで与えられる。 @filename でファイルを渡すこともできる。
|
|
lookup pluginで外部から取得する
lookupプラグインを使ってデータソースから値を取得する。
環境変数, fileglob, HashiCorp Vault, Consul, k8s, redis, digとデータ取得元は色々ある。 環境変数から取得する場合は下のようにできる。インベントリファイルでも利用できる。
|
|
タスクをinclude
タスクを別のファイルに分けて when とかの条件で読み込むのはよくなる。 with_items を使って3回 include させられる。
|
|
include される側で下のように確認したが、どの形式も問題なく表示される。
|
|
blockディレクティブで共通化
blockディレクティブで複数の処理を束ねられる。下みたいな感じ。
|
|
blockディレクティブで例外処理
resque,always でエラーハンドリングもできる。
meta: flush_handlers
を使うと block 内部で notify ハンドラーの実行を止められる。
|
|
metaでAnsibleのバージョン依存を指定する
下みたいにAnsibleのバージョンを指定できる。
|
|
デプロイの適用戦略を調整する
linear がデフォルトの strategy になっていて、タスクの進捗は、ホスト横並びで進められる。 serial を使えば同時実行台数や割合を指定できる。
そして、以下のようにすれば strategy を free に切り替えられる。
|
|
registerで結果を取り出す
下のように register を使うことでコマンドの結果を利用することができる。
|
|
taskによる変更記録を強制する
changed_when
を使うことでタスクの実行によって変更があったかを明記することができる。特に shell などで重要になる。
|
|
taskの失敗を無視する
failed_when を指定することで失敗などを制御できる。例えば失敗するかしないかを利用するようなタスクを作った場合、タスク失敗として停止されては困るために使ったりする。
|
|
checkモードに対応する
check モードを使って事前に検証するけど、 shell とかは実行されない。後続タスクの情報取得などに利用する場合はcheckモードでも動いてほしい。そんな時にはcheck_mode: no
と指定する。
これによっていつでも動く。古いAnsibleの場合には always_run ディレクティブを用いる。
|
|
inventoryをyamlで記述する(配列が使える)
2.4以降ではインベントリファイルにyamlが使える。古い形式はプラグインによって互換性が確保されている。yamlで書く方に統一するのが良さそう。
callback pluginでslackに通知を出す
callbackプラグリンはたくさんある。 slack(doc)に従って ansible.cfg で設定する。
したみたいに書く。
|
|
下みたいに報告される。詳細が出ないのが気になる。