我是Ansible的新手。所以请原谅我问一个已经在其他地方回答的问题。
我对Openstack计算/控制器节点有以下要求(每个计算将具有多个nic / ips)。我想从远程主机(清单中的主机文件中定义的主机列表)检索nics和IPs信息。对于我检索的每个IP,我想提交dns条目(如果还没有的话)。因此,根据NIC名称,我的域后缀将更改。 例如:
NIC name Domain Suffix
-------- -------------
br-ex <hostname>.abc.com
enp6s0 <hostname>s.abc.com
enp7s0 <hostname>api.abc.com
enp8s0 <hostname>prv.abc.com
为此,我编写了剧本,shell脚本(在文件下)和groups_vars / all,如下所示: 剧本:main_play.yml
---
- name: Get Nics and IPs
hosts: 127.0.0.1
connection: local
tasks:
- name: Get Compute Hosts List
shell: files/ip_network_mapping.sh {{ item }}
loop: "{{ query('inventory_hostnames', 'all') }}"
register: ip_network_maps
- debug: msg="{{ item }}"
with_items: "{{ ip_network_maps | json_query('results[].stdout_lines[]') }}"
- debug: msg="{{ ip_network_maps.results }}"
- include_vars: "/home/<username>/ansible_examples/inventories/<env_name>/group_vars/all"
- name: Print dns items
debug: msg="{{ item.key }} {{ item.value }}"
with_dict: "{{ dns_items }}"
Shell脚本:ip_network_mapping.sh
#!/usr/bin/bash
ARG1=$1
ssh -q <username>@${ARG1} "/usr/sbin/ip -o a | grep -v tap | grep -v qvo | grep -v qvb | grep -v inet6|grep -v 127.0.0.1|awk '{print \$2,\$4}'|awk -F[/] '{print \$1}'"
group_vars / all(此dns_items,如enp6s0,enp7s0等,在较高的env中将有所不同,因此我将为每个env定义group_vars / all): dns_items: br-ex: env_tag:env_name dc_function:企业实用程序 VIP:.abc.com
enp6s0:
env_tag: env_name
dc_function: storage
vip: a.abc.com
enp7s0:
env_tag: env_name
dc_function: api
vip: api.abc.com
enp8s0:
env_tag: env_name
dc_function: provision
vip: prv.abc.com
我的库存托管文件: [计算] 主机名1 主机名2
我要寻找的是,在剧本中,我想合并从远程主机检索到的nics和IP信息,并与从group_vars / all文件检索到的dns_items匹配,并填充包含所有提交dns所需信息的新哈希。例如:
br-ex:
env_tag: env_name
dc_function: enterprise utility
vip: <hostname>.abc.com
ip: xxx.xxx.xxx.xxx.
我无法使其按我想要的方式工作。运行剧本时,我可以从远程主机获取nics / ips并获取dns项目。