임시 명령을 사용하여 호스트 또는 그룹에 대한 모든 Ansible 변수를 나열하시겠습니까?

임시 명령을 사용하여 호스트 또는 그룹에 대한 모든 Ansible 변수를 나열하시겠습니까?

Ansible 변수는 다양한 소스에서 나옵니다. 예를 들어 매니페스트 파일이 포함된 폴더의 하위 폴더 및 하위 폴더에 각각 YAML 파일을 생성하여 host_varshost_vars 및 group_vars를 제공 할 수 있습니다.group_vars

어떻게 목록을 올릴 수 있어?모든 변수안시푸르회의플레이북에 나오는 그룹이나 호스트를 알고 있나요? 참고: 나는 이것을 시도했지만 성공 ansible -m debug -e 'var=hostvars' host하지 못했습니다 ansible -m debug -e '- debug: var=hostvars'.

팁: ansible <group|host> -m setup아니요정답은 이것이다아니요다른 소스의 모든 변수를 포함합니다(만 포함됩니다 . 실제로 { "ansible_facts" : { ... } }동적 매니페스트 스크립트(등을 통해 ) _meta에서 제공되는 변수 도 포함하지 않습니다.

앤서블 버전: 1.9.1.

답변1

ansible <host pattern> -m debug -a "var=hostvars[inventory_hostname]"작동하는 것 같습니다. 유효한 것으로
바꾸십시오 .<host pattern>호스트 모드.

유효한 변수 소스( 동적 목록의 host_vars, group_vars등)가 고려됩니다._meta

동적 인벤토리 스크립트를 사용하십시오 hosts.sh.

#!/bin/sh
if test "$1" = "--host"; then
        echo {}
else
        cat <<EOF
{
  "ungrouped": [ "x.example.com", "y.example.com" ],
  "group1": [ "a.example.com" ],
  "group2": [ "b.example.com" ],
  "groups": {
    "children": [ "group1", "group2" ],
    "vars": { "ansible_ssh_user": "user" }
  },
  "_meta": {
    "hostvars": {
      "a.example.com": { "ansible_ssh_host": "10.0.0.1" },
      "b.example.com": { "ansible_ssh_host": "10.0.0.2" }
    }
  }
}
EOF
fi

당신은 얻을 수 있습니다:

$ chmod +x hosts.sh
$ ansible -i hosts.sh a.example.com -m debug -a "var=hostvars[inventory_hostname]"
a.example.com | success >> {
    "var": {
        "hostvars": {
            "ansible_ssh_host": "10.0.0.1", 
            "ansible_ssh_user": "user", 
            "group_names": [
                "group1", 
                "groups"
            ], 
            "groups": {
                "all": [
                    "x.example.com", 
                    "y.example.com", 
                    "a.example.com", 
                    "b.example.com"
                ], 
                "group1": [
                    "a.example.com"
                ], 
                "group2": [
                    "b.example.com"
                ], 
                "groups": [
                    "a.example.com", 
                    "b.example.com"
                ], 
                "ungrouped": [
                    "x.example.com", 
                    "y.example.com"
                ]
            }, 
            "inventory_hostname": "a.example.com", 
            "inventory_hostname_short": "a"
        }
    }
}

답변2

위의 매우 좋은 답변에 작은 메모를 추가하면 프로그래밍 방식으로 탐색하려면 다음을 수행하십시오.

기존 답변 사용호스트 변수:

ansible -m debug myhost -a "var=hostvars[inventory_hostname].ansible_version"

하지만 가능한 사실debug모듈이 실행되고 있지 않기 때문에 비어 있습니다 setup. 따라서 jq유효한 json으로 만들기 위해 출력을 다듬은 후 몇 가지 추가 작업을 시도해야 합니다.

ansible -m setup myhost | sed 's#.*SUCCESS =>##' | jq .ansible_facts.ansible_all_ipv4_addresses

나는 사람들이 Ansible 사실로 반환된 텍스트의 거대한 벽을 조사할 때 다음과 같이 한 가지만 원할 때 이것이 유용하다고 생각할 것이라고 생각합니다.jq .ansible_facts.ansible_devices.vda.size

답변3

참고로:이것이 github 프로젝트는 모든 호스트에 있는 변수의 90%를 나열하는 방법을 보여줍니다. 단일 호스트 명령보다 전역적으로 더 유용하다고 생각합니다. 추가 정보 파일에는 간단한 재고 보고서 작성에 대한 지침이 포함되어 있습니다. 모든 사실을 확인하려면 플레이북 끝부분에서 이 명령을 실행하는 것이 더 가치가 있습니다. 작업 동작을 디버깅하려면 레지스터를 사용하십시오.

관련 정보