ping多个ip并将其保存到ansible中的一个文件中



我想用我的linux服务器ping几个IP,即:

  • ip 10.0.0.1,它是连接到接口swp1的主机
  • ip 10.0.0.2,它是连接到接口swp2的主机

如果ip源为10.0.0.3,则结果将存储在一个文件中。此命令通过ansible与以下任务一起执行:

- hosts: localhost
connection: local
gather_facts: yes
tasks:
- name: VERIFICATION // CONNECTIVITY BY PING
shell: ping {{ item }} -c 2 -s 10.0.0.3 | grep -i received | awk '{print $4}'
register: ping
loop:
- 10.0.0.1
- 10.0.0.2
- copy:
content: "{{ ping.results | map(attribute='stdout') | join('n') }}"
dest: ping.txt

ping.txt的内容如下:

2
0

这个任务执行成功了,但是,我如何添加被ping主机的连接接口,使ping.txt变成:

swp1 : 2
swp2 : 0

可以添加什么脚本来获得此结果?

这有帮助吗?我需要删除我的"-s 10.0.0.3",但更新并评论了下面剧本中的链接。我的-s与您的操作系统的镜像不同
-主机:localhost连接:本地gather_facts:yes任务:-name:验证//通过PING连接#shell:ping{{item.ip}}-c2-s 10.0.0.3 | grep-i received | awk"{print"{{{item.name}}:"$4}"shell:ping{{item.ip}}-c2|grep-i received | awk"{print"{{item.name}}:"$4}"寄存器:ping循环:-{ip:"10.0.0.1",名称:"swp1"}-{ip:"10.0.0.2",名称:"swp2"}-副本:content:"{{ping.results|map(attribute='stuot'(|join('\n'(}"dest:ping.txt
My ping.txt:swp1:2swp2:0
您可以在"awk"命令中调整间距以获得"swp1:2">

在主机的ansible_facts中可以访问节点的接口
每个接口都有一个条目,其名称是ansible_facts字典的属性,并且可以在ansible_facts.interfaces下访问所有现有接口的列表。

此外,可以通过results列表下字典的item属性访问用于从注册命令中的循环创建结果的项。

因此,您可以创建一个中间事实,以便在将结果转储到文件之前,根据接口的IP查找接口的名称。

以下是由此产生的事实和copy任务:

- set_fact: 
ping_results: >-
{{
ping_results | default([]) + [
(
_interfaces_ip | zip(_interfaces_names) 
| selectattr("0", "eq", item.item) 
| first
).1
~ ' : ' 
~ item.stdout
]
}}
loop: "{{ ping.results }}"
loop_control:
label: "{{ item.item }}"
vars:
_interfaces: >-
{{
ansible_facts 
| dict2items 
| selectattr('key', 'in', ansible_facts.interfaces) 
}}
_interfaces_names: >-
{{
_interfaces
| map(attribute="key")
}}
_interfaces_ip: >-
{{
_interfaces
| map(attribute="value.ipv4.address", default="n/a")
}}
- copy:
content: "{{ ping_results | join('n') }}"
dest: ping.txt

在你的情况下,你修改后的剧本应该会屈服:

TASK [Gathering Facts] ***************************************************
ok: [localhost]
TASK [VERIFICATION // CONNECTIVITY BY PING] ******************************
ok: [localhost]
TASK [set_fact] **********************************************************
ok: [localhost] => (item=10.0.0.1)
ok: [localhost] => (item=10.0.0.2)
TASK [copy] **************************************************************
ok: [localhost]

您的ping.txt将包含:

swp1 : 2
swp2 : 0

相关内容

最新更新