如何通过shell输出通过从group_vars / all

时间:2018-07-24 22:05:31

标签: ansible

我是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项目。

0 个答案:

没有答案