YAML에서 생성된 Ansible 사실의 일부 정보가 필요합니다. 하지만 오류가 발생합니다. 내 요구 사항은 한 줄로 출력을 얻는 것입니다. 이렇게 하면 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