web-dev-qa-db-ja.com

プレイブック内の収集事実をフィルタリングする方法は?

私は、単一の事実を収集するだけの役割に取り組んでいます。

パフォーマンスは懸念事項であり、事実の収集には時間がかかることを知っています。

プレイブック内で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
Bernardo Vale

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

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

- 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
22
udondan

プレイブックの上部にあるAnsibleの方法(追加の方法):

----
- hosts: web
  gather_facts: True
  gather_subset:
    - network
    - virtual

次を使用して変数をデバッグします。

  - name: Print some debug information 
    vars: 
      msg: |
          Module Variables ("vars"):
          --------------------------------
          {{ vars | to_Nice_json }} 

          Environment Variables ("environment"):
          --------------------------------
          {{ environment | to_Nice_json }} 

          GROUP NAMES Variables ("group_names"):
          --------------------------------
          {{ group_names | to_Nice_json }}

          GROUPS Variables ("groups"):
          --------------------------------
          {{ groups | to_Nice_json }}

          Host Variables ("hostvars"):
          --------------------------------
          {{ hostvars | to_Nice_json }} 

    debug: 
      msg: "{{ msg.split('\n') }}"       
    tags: debug_info
10
imjoseangel

この質問に答えた後、 Ansible 2.1はセットアップモジュールにgather_subsetオプション を追加したので、ドキュメントで説明されている!facter,!ohai,network構文を使用できるようになりました正規表現フィルターより:

- hosts: all
  Sudo: yes
  gather_facts: False
  pre_tasks:
   - setup:
       gather_subset: !facter,!ohai,network
  roles:
   - your_role_here
8
ZachP

必要なのが各ホストのホスト名だけである場合は、次のようにするだけで必要なことを実行できます。

- hosts: all
  gather_facts: false
  tasks:

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

    - debug: var=my_hostname

興味のある他の事実がある場合は、適切なコマンドを指定し、登録された変数を介してその事実を参照します。

2
Bruce P