Код Ansible:
---
- hosts: all
gather_facts: no
tasks:
- command: 'docker --version | { read _ _ v _; printf %s\\n "${v%,}"; }'
register: docker_version
- debug: var=hostvars[inventory_hostname].docker_version.stdout
ignore_errors: true
- set_fact:
docker_version: "{{ docker_version.stdout }}"
- name: Display all variables/facts known for a host
debug: var=hostvars[inventory_hostname]
ansible-playbook -i inventory.txt gather.yml
PLAY [all] *********************************************************************
TASK [command] *****************************************************************
changed: [10.x-hosname]
TASK [debug] *******************************************************************
ok: [10.x-hosname] => {
"hostvars[inventory_hostname].docker_version.stdout": "Docker version 1.12.3, build 34a2ead"
}
TASK [set_fact] ****************************************************************
ok: [10.x-hosname]
TASK [Display all variables/facts known for a host] ****************************
ok: [10.x-hosname] => {
"hostvars[inventory_hostname]": {
"ansible_check_mode": false,
"ansible_version": {
"full": "2.2.1.0",
"major": 2,
"minor": 2,
"revision": 1,
"string": "2.2.1.0"
},
"docker_version": "Docker version 1.12.3, build 34a2ead",
"group_names": [],
"groups": {
"all": [
"10.x-hosname"
],
"ungrouped": []
},
"inventory_dir": "/Users/username/Git/gather",
"inventory_file": "/Users/username/Git/gather/inventory.txt",
"inventory_hostname": "10.x-hosname",
"inventory_hostname_short": "10",
"playbook_dir": ""
}
}
10.x-hosname - это IP-адрес, указанный в inventory.txt.
Я хотел бы, чтобы этот сценарий создавал файл инвентаризации json с нескольких серверов, включая настраиваемые факты, такие как docker_version. Результат последней команды - это именно то, что я хочу видеть в файле json, но для нескольких хостов.
Сделайте шаблон (например, facts.j2
):
[
{% for host in play_hosts %}
{{ hostvars[host] | to_nice_json }}
{% if not loop.last %},{% endif %}
{% endfor %}
]
Назовите это последней задачей:
- name: Generate JSON
template:
src: facts.j2
dest: /tmp/facts.json
delegate_to: localhost
run_once: yes