Hãy tưởng tượng một tập tin tồn kho như thế này:Ansible: Nhận tất cả các địa chỉ IP của một nhóm
node-01 ansible_ssh_host=192.168.100.101
node-02 ansible_ssh_host=192.168.100.102
node-03 ansible_ssh_host=192.168.100.103
node-04 ansible_ssh_host=192.168.100.104
node-05 ansible_ssh_host=192.168.100.105
[mainnodes]
node-[01:04]
Trong playbook của tôi bây giờ tôi muốn tạo ra một số biến chứa địa chỉ IP của các nhóm mainnodes
:
vars:
main_nodes_ips: "192.168.100.101,192.168.100.102,192.168.100.103,192.168.100.104"
main_nodes_ips_with_port: "192.168.100.101:3000,192.168.100.102:3000,192.168.100.103:3000,192.168.100.104:3000"
Đây là những gì tôi có cho đến nay:
vars:
main_nodes_ips: "{{groups['mainnodes']|join(',')}}"
main_nodes_ips_with_port: "{{groups['mainnodes']|join(':3000,')}}"
nhưng điều đó sẽ sử dụng các máy chủ na thay vì địa chỉ IP.
Bất kỳ ý tưởng nào về cách thực hiện điều này?
Cập nhật:
nhìn vào tài liệu trong một thời gian, tôi nghĩ rằng điều này sẽ cho phép tôi để lặp qua tất cả các adresses ip:
{% for host in groups['mainnodes'] %}
{{hostvars[host]['ansible_ssh_host']}}
{% endfor %}
Nhưng tôi chỉ không thể tìm ra cách để tạo một mảng chứa tất cả các IP này. Để tôi có thể sử dụng lệnh |join()
trên chúng.
Update2:
tôi chỉ nghĩ rằng tôi đã figured it out ... nhưng nó chỉ ra rằng bạn không thể sử dụng {%}% cú pháp trong playbook ... hoặc có thể tôi? Cũng trong phần vars nó không. :/
vars:
{% set main_nodes_ip_arr=[] %}
{% for host in groups['mesos-slave'] %}
{% if main_nodes_ip_arr.insert(loop.index,hostvars[host]['ansible_ssh_host']) %} {% endif %}
{% endfor %}
main_nodes_ips: "{{main_nodes_ip_arr|join(',')}}"
main_nodes_ips_with_port: "{{main_nodes_ip_arr|join(':3000,')}}"
Đối với bất kỳ ai sử dụng phiên bản 2.0 ansible_ssh_host' đã không được chấp nhận. Giải pháp này vẫn hoạt động nhưng bạn cần phải thay thế nó bằng câu trả lời của 'ansible_host' – Pudding