この記事は Ansible Advent Calendar 2014 の3日目の記事です。
注意
初出時まったくのデタラメ書いていました。申し訳ございません!
Fact Cachingとは、Ansible 1.8から導入された機能で、Factを他のホストからも使えるようにする機能です。
webサーバーとdbサーバーの2つがあり、webサーバーはdbサーバーのアドレスを知らなければならない、としましょう。このためには、
- hosts: db
tasks: []
- hosts: web
tasks:
- template: ...
とし、webサーバーに対するtemplateで {{hostvars['db']['ansible_os_family'] }}
としてdbのアドレスを使えます。
こうすればできますが、webサーバーに対するplaybookなのにまずdbサーバーに対して実行しなければなりません。Fact Cachingは一定時間取得したFactをキャッシュしておくことで、dbサーバーに対するplaybook実行をする必要がなくなります。
Fact Cachingを使ってみる
デフォルトでは無効化されているので、以下の設定をansible.cfgに記載します。
[defaults]
fact_caching = redis
fact_caching_timeout = 86400 # seconds
キャッシュしたfactを保存する場所は現在のところredisのみです。
redisに保存する
redisを使うには、redisのpythonライブラリを入れる必要があるので、
pip install redis
する必要がります。
ちなみにredisには以下の2つのkeyが登録されるようです。
- "ansible_cache_keys"
- "ansible_factstargetmachine"
ファイルに保存する
ドキュメントには書かれていませんが、redisの他に
- jsonfile
- memcached
- memory
が使えます。このうちjsonfileを使うにはこうします。
[defaults]
fact_caching = jsonfile
fact_caching_connection = /tmp/cache
fact_caching_timeout = 86400 # seconds
が、まだこの辺りは公式ではないので流動的なのと、日本語が入っていると
のあたりでJSONを書き出せずにこけたりするので、しばしお待ちください。
(Issue あげ中)