Liệt kê TẤT CẢ các biến Ansible cho máy chủ hoặc nhóm bằng lệnh ad hoc?


25

Biến ansible đến từ nhiều nguồn khác nhau. Ví dụ, có thể cung cấp host_vars và group_vars bằng cách tạo các tệp YAML trong thư mục con có tên host_varsgroup_varstương ứng của thư mục chứa tệp kiểm kê.

Làm cách nào tôi có thể liệt kê tất cả các biến mà Ansible sẽ biết về một nhóm hoặc máy chủ lưu trữ trong một cuốn sách? Lưu ý: Tôi đã thử ansible -m debug -e 'var=hostvars' hostansible -m debug -e '- debug: var=hostvars'vô ích.

Gợi ý: ansible <group|host> -m setupkhông câu trả lời đúng vì nó không bao gồm tất cả các biến mà đến từ các nguồn khác (nó chỉ chứa { "ansible_facts" : { ... } }Trong thực tế, nó thậm chí không bao gồm các biến được cung cấp bởi một kịch bản kiểm kê năng động (thông qua. _metaVà vân vân).

Phiên bản ansible: 1.9.1.

Câu trả lời:


26

ansible -m debug -a "var=hostvars[inventory_hostname]"dường như làm việc Nguồn biến hợp lệ ( host_vars, group_vars, _metatrong một hàng tồn kho năng động, vv) đều được đưa vào tính toán.

Với tập lệnh kiểm kê động 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

Bạn có thể làm được:

$ 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"
        }
    }
}

Với ansible 2.0.2, điều này dường như không còn hoạt động nữa. Đầu ra làlocalhost | SUCCESS => { "hostvars": "<ansible.vars.hostvars.HostVars object at 0x7f320943da10>" }
Zulakis

Đề xuất chỉnh sửa để sử dụng "var=hostvars[inventory_hostname]"trên ansible> 2.0
stuart-warren

Đối với 1.9.4, nó không trả lại những thứ được trả về bởiansible my.hostname.example.com -m setup -i ../my/inventory/hosts.example -u root
akostadinov 11/03/2016

1
Điều này làm việc cho tôiansible host-name -m debug -a "var=[var_name]" -i inventory/testing/hosts
Montaro

2

FYI: Dự án github này chỉ cho bạn cách liệt kê 90% biến trên tất cả các máy chủ. Tôi thấy nó hữu ích hơn toàn cầu so với các lệnh máy chủ duy nhất. README bao gồm các hướng dẫn để xây dựng một báo cáo hàng tồn kho đơn giản. Thậm chí còn có giá trị hơn khi chạy nó ở cuối một cuốn sách để xem tất cả các Sự kiện. Để gỡ lỗi hành vi tác vụ sử dụng đăng ký:


2

Thêm một mẹo nhỏ vào câu trả lời thực sự hay ở trên, nếu bạn muốn lập trình chọc xung quanh bạn có thể

Sử dụng câu trả lời hiện có cho hostvars :

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

Nhưng ansible_facts trống vì debugkhông chạy setupmô-đun. Vì vậy, bạn cần phải thử một cái gì đó thêm như jqsau khi cắt đầu ra để làm cho nó hợp lệ.

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

Tôi nghĩ mọi người có thể thấy điều này hữu ích khi điều tra bức tường văn bản khổng lồ xuất hiện trong các sự kiện có thể hiểu được khi bạn chỉ muốn một thứ như jq .ansible_facts.ansible_devices.vda.size

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.