我试图弄清楚如何提取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
如何提取地址的值?
谢谢!
答案 0 :(得分:1)
在接触command
或shell
模块之前,请先四处寻找替代方法,以解决常见任务,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