BFT名古屋 TECH BLOG

日々の業務で得た知識を所属するエンジニアたちがアウトプットしていきます。

【Ansible】Ansibleあるある疑問の回答を紹介

 こんにちは!
 BFT名古屋支店の、佐野です。

 最近はAnsibleに関する案件に参加しており、関連資料をがしがし作っております。
 その中で、お客様から3点の質問がありましたので、本記事において質問に対する回答を紹介させて頂きます。


【その1】ansible-playbook チェックモードに関する質問

「ansible-playbook xxx.yml --check」でPlaybookを実行した場合、本当に一度実行しているのか。
実行して変更した後、変更前の状態に戻しているといったようなものなのか

 ansible-playbook --checkですが、これは「該当のPlaybookをチェックモードで実行する」というコマンドになります。
 このチェックモードは一般的に言うドライランに当たるものであり、管理対象(ターゲットノード)の状態をチェックして実行したPlaybookによる変更の必要を確認するものです。
 勿論チェックだけでありますので、実際に変更を行なうことはありません。

 ちなみにcommandモジュールなど、チェックモードに対応していないモジュールがいくつか存在します。
 それらが含まれるPlaybookでチェックモード実行を行なった場合、そのチェックモード非対応のモジュールの処理についてはスキップされ、実行結果が失敗となります。
 チェックモード非対応のモジュールを使っているPlaybookで正常にチェックモードを使用したい場合は、Playbookに「check_mode: no」オプションを組み込み必要があります。


【その2】/roles/*/tasksディレクトリ内で実行されるPlaybookに関する質問

/roles/*/tasksディレクトリ内にmain.ymlを含む複数のPlaybookを置いた場合、main.yml以外のPlaybookは実行されるのか
実行される場合、どのような順番で実行されるのか

 roles配下のディレクトリで実行されるPlaybookはmain.ymlのみであり、たとえmain.ymlと同じ場所に他のPlaybookをおいても、main.yml以外のPlaybookが実行されることはありません。
 ただし、main.ymlに「import_tasks:」を組み込み、tasksディレクトリ内にあるPlaybookを指定することで実行することは可能です。
 その際はymlの実行規則に従って、構文上で定義した順に実行が行われます。


【その3】Playbookを作成するためのツールに関する質問

Playbookの形式であるymlを作る時、メモ帳やワードパッドといった通常のテキストエディタではインデントミスなどが起こりやすい。
何かおススメのコーディングツールはないか

 Visual Studio CodeEmacs など色々挙げられるものはありますが、筆者自身が使用しているツールとして Atom があります。
 GitHubで開発されているAtomは、パッケージと呼ばれる拡張機能を加えていくことで利用するユーザーに合わせたカスタマイズが行えるのが特徴のソフトウェア開発用テキストエディタです。
 各言語の構文強調パッケージを導入すれば多数の言語に対応することができ、設定画面等も見やすいので、なんとなくで操作ができるのが気に入っております。
 一応欠点として、パッケージを入れに入れてしまうと重くなったり、意図しない動作を引き起こす可能性があるというのがありますが、この辺は導入するパッケージについて管理を行なうことでカバーできる点であると考えています。
 2015年より登場した Atom ですが、現在では定番と言えるくらいに普及してきた印象があります。
 筆者はPlaybook(YAML)だけでなく、Markdownなどで資料を作る際もAtomを利用しています。  


最後に(まとめ)

質問の回答の紹介は以上となります。
今回の質問は比較的誰もがふと思い浮かべる疑問であると思いましたので、知りたいと思った方の助けになれば幸いです。
軽い記事となりましたが、最近はAWSとAnsibleの掛け合わせを考える機会も多くなりましたので、また分厚い題材でいくらか書きたいなと考えております。