システム変数Fact編Tweet前回はテンプレートエンジンを使ったファイルの作成方法についてご紹介しました。今回はAnsibleが内部で用意しているグローバル変数Factについてまとめていきます。参考ページFactの一覧を確認するAnsibleにはシステム全体で利用するグローバル変数のような物が用意されており、必要に応じてPlaybookなどから利用することができます。これをFactと呼びます。Factに何が設定されているかは次のコマンドですべて表示することができます。serversの部分はInventoryファイルに記載したグループ名を指定してください。実際に実行すると非常に長大なリストがJSON形式で表示されます。"4.2.amazon",(略)FactはPlaybookからも参照できます。これを利用して例えばOSの種類ごとに実行するタスクを変更するなど細かい制御を行うことが可能になります。Factの利用方法Playbookの「条件」に利用するFactにはansible_factsという名前のハッシュを参照することでアクセスできます。以下はOSのdistributionがAmazonLinuxであればshellモジュールを実行するタスクの例になります。"Amazon"Factの一覧を表示するコマンドではキーがansible_distributionとなっていましたが、最初の接頭詞ansible_は削除し残った文字列を利用します。"Amazon",Playbookの「変数」に利用するもちろんFactは変数の中でも利用できます。次の例ではファイルをコピーする際に、ディストリビューション毎に設定ファイルを切り替える処理に利用しています。~/foo.confファイル構成は以下の通り。confディレクトリの下にdistribution毎にファイルを用意してやります。★NEWちなみにFactへのアクセスはJavaScriptのようにansible_facts.distributionとドットで区切る形式でも同じ意味になります。変数の一部として利用する際にはこちらの方がエスケープしなくて良いので使いやすいですね。お好みの書き方でどうぞ。}}.conf"templateで利用する前回まとめたテンプレートの中でも利用できます。Playbookの方は特別なことをする必要はありません。~/foo.txtJinja2側の変数にそのままansible_factsを書くことができます。実際に実行すると埋め込まれているのがわかりますね。foo.txtこのサーバのディストリビューションはAmazonです。Factsを設定する管理対象のサーバへ事前にFactを定義したファイルを配置しておき、それをPlaybook上から呼び出すことができます。Factsと呼びます。特定のサーバだけ特別な処理をしたいといった場合のトリガーに使うなど、アイデア次第で色々と活用できると思います。公式ドキュメントによると、設置場所やフォーマットは以下の通り。keyword./etc/ansible/facts.dの下にファイルを配置するファイル形式はJSONかINIファイルの拡張子は.factでは試しにやってみましょう。対象のサーバにログインし、所定の場所にファイルを置きます。今回はINI形式にしましたが、JSONでももちろん大丈夫。Georgie!/etc/ansible/facts.d/ディレクトリ配下に複数のファイルを配置した場合、拡張子が.factになっていればすべて読みこんでくれます。何らかの理由でファイルを分割したい場合でも対応可能です。パスを変更するには?Playbook上でfact_pathの項目を追加するだけでOKです。Factの場合はansible_localを参照します。ansible-fact.log何となく想像がつくと思いますが、ansible_local[ファイル名][グループ][項目]という具合に指定してやります。実行する実行すると、無事に事前に設定した値を取得することができました。Factsの定義ファイルはPlaybookを実行するPCではなく、管理対象のサーバに置く必要があることに注意してください。その他Factを無効にするFactを利用しないことが最初からわかっている場合はgather_factsにnoを設定することで無効化することができます。lsAnsibleがFactに情報を収集する処理はそれなりに時間がかかります。大量のサーバ群に対して実行するようなケースで、予め環境情報が判明しているような場合はOFFにした方が実行速度を上げることが期待できます。setupの実行結果を掲載します。ここではAmazonLinuxに対して実行しています。自宅警備がてらゲームのお仕事や講師などしてご飯を食べてます。ご質問やリクエストなどお気軽に。メールアドレスの入力は任意です。書き込みが反映されるまで時間がかかります。コメントデータの処理方法の詳細はこちらをご覧ください。ブログをメールで購読メールアドレスを記入して購読すれば、更新をメールで受信できます。