提取nslookup结果

时间:2019-01-26 08:03:15

标签: ansible

我试图弄清楚如何提取nslookup命令结果中“地址”的值以完成Ansible任务。我将始终在结果中返回1个IP地址:

nslookup fs-d12345.efs.ap-southeast-2.amazonaws.com 10.75.0.2
Server:     10.75.0.2
Address:    10.75.0.2#53

Non-authoritative answer:
Name:   fs-d12345.efs.ap-southeast-2.amazonaws.com
Address: 10.75.21.67

我需要将值 10.75.21.67 存储为变量,以便以后在剧本中使用。

我的任务类似于:

- shell: "nslookup fs-d12345.efs.ap-southeast-2.amazonaws.com 10.75.0.2" 
  register: results

如何提取地址的值?

谢谢!

1 个答案:

答案 0 :(得分:1)

在接触commandshell模块之前,请先四处寻找替代方法,以解决常见任务,Ansible社区经常为您完成繁重的工作。

如果您可以安装其他Python软件包来支持,则Ansible中已经内置了nslookup(很好地挖掘)实用程序:

- set_fact:
    target_ip: "{{ lookup('dig', 'fs-d12345.efs.ap-southeast-2.amazonaws.com', '@10.75.0.2') }}"

要使其正常工作,必须先在要运行此任务的计算机上安装dnspython库,例如

apt-get install python-dnspython

yum install python-dns # (I think ...)

如果您只想在控制计算机上执行此操作,但是希望能够访问远程计算机上的查找数据,则可以执行以下操作:

- hosts: localhost
  connection: local
  tasks:
    - set_fact:
        target_ip: "{{ lookup('dig', 'fs-d12345.efs.ap-southeast-2.amazonaws.com', '@10.75.0.2') }}"
- hosts: remote_machine
  tasks:
    - debug:
        var: hostvars['localhost'].target_ip