1行で印刷されたAnsibleファクト

1行で印刷されたAnsibleファクト

YAMLで生成されたAnsibleファクトのいくつかの情報が必要です。しかし、エラーが発生します。私の要件は、1行で出力を取得することです。これにより、CSVまたはスプレッドシートを使用してフィルタリングできます。

---
- hosts: all
  become: yes
  tasks:
  - name: Get content of remote server
    shell: echo system {{ inventory_hostname }} {{ crashkernel }} {{ ansible_os_family }}

間違い:

+++++++++++++++++
TASK [Get content of remote server] ********************************************************************************************************************************************************************************************
fatal: [ip]: FAILED! => {"msg": "The task includes an option with an undefined variable. The error was: 'crashkernel' is undefined\n\nThe error appears to be in 'status.yaml': line 5, column 5, but may\nbe elsewhere in the file depending on the exact syntax problem.\n\nThe offending line appears to be:\n\n  tasks:\n  - name: Get content of remote server\n    ^ here\n"}

++++++++++++++++

また試してくださいyamllint

$ yamllint status.yaml
status.yaml
  3:11      warning  truthy value should be one of [false, true]  (truthy)
  6:81      error    line too long (89 > 80 characters)  (line-length)

ベストアンサー1

crashkernelそれ自体は真実ではなく、事実ansible_proc_cmdlineの子なので、以下を使用してください。

---
- hosts: all
  become: yes
  tasks:
  - name: Get content of remote server
    shell: echo system {{ inventory_hostname }} {{ ansible_proc_cmdline['crashkernel'] }} {{ ansible_os_family }}

ansibleを使用できます。デバッグechoリモート側にメッセージを転送する代わりにメッセージを印刷するモジュール:

---
- hosts: all
  become: yes
  tasks:
  - name: Get content of remote server
    debug: 
      msg: "system {{ inventory_hostname }} {{ ansible_proc_cmdline['crashkernel'] }} {{ ansible_os_family }}"

また、以下を使用できます。事実の収集ホストに関する情報をJSONデータを含むファイルに収集するためのモジュール:

ansible localhost -m Gather_facts --tree /tmp/facts

次に、目的のプログラミング言語または類似のツールを使用してください。ジャック必要な情報を抽出してください。

jq '.ansible_facts.ansible_proc_cmdline.crashkernel' /tmp/facts/localhost

おすすめ記事