2015-12-27 6 views
7

私はただ一つの事実を集める必要がある役割に取り組んでいます。プラカード内のフィルターを使用した可能性のある事実

パフォーマンスそれは心配であり、事実を集めることは時間がかかることを知っています。

gather_factsをプレイリスト内にフィルタリングする方法を探しています。これにより、必要な情報のみを収集することができます。

これは、セットアップ・コアモジュールを使用することで可能です:

ansible -m setup -a 'filter=ansible_hostname' my_host 

10.200.0.127 | success >> { 
    "ansible_facts": { 
     "ansible_hostname": "my_host" 
    }, 
    "changed": false 
} 

それは脚本の内部でこの機能を使用することが可能ですか?このようなもの?

- hosts: all 
    sudo: yes 
    gather_facts: True 
    filter: "filter=ansible_*" 

PS:上記のコードは構文例外をスロー。

EDIT 1:誰かがホスト名を取得する必要がある場合も、別の有用な変数inventory_hostnameがあります。

答えて

13

はい、可能ですが、ファクトを収集する際のデフォルト動作ではありません。 gather_factstrueに設定すると、再生の最初のタスクとしてsetup moduleが呼び出されます。このようにして、setupモジュールコールをパラメータ化する方法はありません。

しかし、デフォルトの動作を無効にして、filterパラメータを使用して自分でセットアップを呼び出すことができます。

- hosts: all 
    sudo: yes 
    gather_facts: False 
    tasks: 
    - setup: 
     filter: ansible_* 

ロールで作業しているので、このセットアップコールを自分のロールで使用したくない場合は、pre_tasksを使用できます。

- hosts: all 
    sudo: yes 
    gather_facts: False 
    pre_tasks: 
    - setup: 
     filter: ansible_* 
    roles: 
    - your_role_here 
1

あなたが興味を持っているすべてはあなたが必要なものを行う必要があり、単にこのような何かをやって、各ホストのホスト名の場合:それはあなたがちょうど指定に興味を持っていることを他のいくつかの事実はなら

- hosts: all 
    gather_facts: false 
    tasks: 

    - name: Get hostname 
     command: /bin/hostname 
     register: my_hostname 

    - debug: var=my_hostname 

は、適切なコマンドを入力し、登録された変数を介してファクトを参照します。

3

ドキュメントではなく、正規表現フィルタで説明!facter,!ohai,network構文を使用して可能になりましので、この質問は、セットアップ・モジュールに尋ねたと答え、Ansible 2.1 added the gather_subset optionた後:

- hosts: all 
    sudo: yes 
    gather_facts: False 
    pre_tasks: 
    - setup: 
     gather_subset: !facter,!ohai,network 
    roles: 
    - your_role_here 
関連する問題