17
19

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

AnsibleAdvent Calendar 2014

Day 3

AnsibleのFact Cachingを使う

Last updated at Posted at 2014-12-03

この記事は Ansible Advent Calendar 2014 の3日目の記事です。

注意
初出時まったくのデタラメ書いていました。申し訳ございません!

Fact Cachingとは、Ansible 1.8から導入された機能で、Factを他のホストからも使えるようにする機能です。

webサーバーとdbサーバーの2つがあり、webサーバーはdbサーバーのアドレスを知らなければならない、としましょう。このためには、

{.sourceCode .yaml}
- 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に記載します。

{.sourceCode .ini}
[defaults]
fact_caching = redis
fact_caching_timeout = 86400 # seconds

キャッシュしたfactを保存する場所は現在のところredisのみです。

redisに保存する

redisを使うには、redisのpythonライブラリを入れる必要があるので、

{.sourceCode .bash}
pip install redis

する必要がります。

ちなみにredisには以下の2つのkeyが登録されるようです。

  • "ansible_cache_keys"
  • "ansible_factstargetmachine"

ファイルに保存する

ドキュメントには書かれていませんが、redisの他に

  • jsonfile
  • memcached
  • memory

が使えます。このうちjsonfileを使うにはこうします。

{.sourceCode .ini}
[defaults]
fact_caching = jsonfile
fact_caching_connection = /tmp/cache
fact_caching_timeout = 86400 # seconds

が、まだこの辺りは公式ではないので流動的なのと、日本語が入っていると

https://github.com/ansible/ansible/blob/60b51ef6c3e4eeca5ee1170ba32bc39284db97ae/lib/ansible/utils/__init__.py#L232

のあたりでJSONを書き出せずにこけたりするので、しばしお待ちください。
(Issue あげ中)

17
19
4

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
17
19

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?