我有这个输入.csv
Server, Check-Server, Firewall-Port,
Server1,Server2,80,
,Server2,9999,
,server8,8443,
Server2,,,
server3,Server6,8443,
,Server9,8888,
我将创建一个 server.yml,
---
Server1:
name: Server2
- 80
- 9999
name: server8
- 8443
Server2:
server3:
name: Server6
- 8443
name: Server9
- 8888
我已经在下面创建了 ansible,但我不知道如何过滤它以测试服务器到另一个服务器端口。这检查所有服务器。
---
- name: Include file
include_vars: server.yml
- name: Check if remote host port
wait_for: host={{ item.name }} port={{ item.port }} timeout=1
ignore_errors: True
register: out
with_items: "{{ servers }}"
- debug: var=out
- name: Save remote port
shell: printf "\n,{{ item.item.name }} port {{ item.item.port }} is {% if item.failed %}closed{% else %}open{% endif %}" >> /tmp/{{ ansible_hostname }}_output.csv
args:
executable: /bin/bash
with_items: "{{ out.results }}"
- name: delete local /tmp/fetched
shell: rm -fr /tmp/fetched/
args:
executable: /bin/bash
warn: False
ignore_errors: True
delegate_to: localhost
- name: Fetching file
fetch:
src: /tmp/{{ ansible_hostname }}_output.csv
dest: /tmp/fetched
- name: Run once on localhost
shell: echo 'Hostname,IP,CPU-Core,Ram-GB,Disk-GB' > /tmp/fetched/main_output.csv
run_once: True
delegate_to: localhost
- name: Combined to one file
shell: cat /tmp/fetched/{{ ansible_hostname }}/tmp/{{ ansible_hostname }}_output.csv >> /tmp/fetched/main_output.csv && printf '\r\n' >> /tmp/fetched/main_output.csv
args:
executable: /bin/bash
delegate_to: localhost
请帮忙!
答案1
servers.yml 应该是这样的,
服务器: - 服务器 1:centos 服务器 2:vm1 端口:22 - 服务器 1:centos 服务器 2:vm2 端口:22 - 服务器 1:vm2 服务器 2:vm1 端口:22 - 服务器 1:vm1 服务器 2:vm2 端口:80
ansible 脚本应该是这样的,
名称:包含要检查的服务器防火墙include_vars:server.yml
名称:获取主机名 shell:echo {{ ansible_hostname }} > /tmp/{{ ansible_hostname }}_data.csv
no_log:是的
参数:可执行文件:/bin/bash
名称:获取 IP shell:主机名 -I | cut -d' ' -f1 >> /tmp/{{ ansible_hostname }}_data.csv 参数:可执行文件:/bin/bash
名称:获取 CPU 核心 shell:nproc >> /tmp/{{ ansible_hostname }}_data.csv 参数:可执行文件:/bin/bash
名称:获取内存记忆计算 shell:awk'/MemTotal/{print $2}'/proc/meminfo > 内存参数:可执行文件:/bin/bash
名称:获取内存(以 GB 为单位)记忆计算 shell:awk'{print $1/1000000}'内存>>/tmp/{{ansible_hostname}}_data.csv args:可执行文件:/bin/bash
名称:获取磁盘信息磁盘计算
如果有 MB 的磁盘,计算将会错误
并且使用 /dev/vd 代替 /dev/sd
shell:fdisk -l|grep /dev/sd > disk && awk '/Disk /dev/sd/ {print $3}' disk > disk2 参数:可执行文件:/bin/bash
名称:获取磁盘数量磁盘计算 shell:cat disk2 | wc -l args:可执行文件:/bin/bash 寄存器:countline
名称:计算磁盘总数磁盘计算 shell:awk'{sum+=$1} (NR%{{countline.stdout}})==0{print sum}' disk2 >> /tmp/{{ ansible_hostname }}_data.csv args:可执行文件:/bin/bash
名称:删除 csv shell:rm -f /tmp/{{ ansible_hostname }}_output.csv 参数:可执行文件:/bin/bash 警告:false ignore_errors:True
名称:将其放在一行中的 CSV shell:cat /tmp/{{ ansible_hostname }}_data.csv | awk '{print}' ORS=',' > /tmp/{{ ansible_hostname }}_output.csv args:可执行文件:/bin/bash
名称:检查远程主机端口 wait_for:host={{ item.server2 }} port={{ item.port }} timeout=1 ignore_errors:True register:out when:item.server1 == ansible_hostname with_items:“{{ servers }}”
调试:var=out
名称:保存远程端口
shell:printf“\n,{{ item.item.server2 }} 端口 {{ item.item.port }} 是 {% if item.failed %}closed{% else %}open{% endif %}”>> /tmp/{{ ansible_hostname }}_output.csv 参数:可执行文件:/bin/bash 时间:item.item.server1 == ansible_hostname with_items:“{{ out.results }}”名称:删除本地 /tmp/fetched shell:rm -fr /tmp/fetched/ args:可执行文件:/bin/bash 警告:False ignore_errors:True delegate_to:localhost
名称:获取文件 fetch:src:/tmp/{{ ansible_hostname }}_output.csv dest:/tmp/fetched
名称:在本地主机上运行一次 shell:echo'Hostname,IP,CPU-Core,Ram-GB,Disk-GB'> /tmp/fetched/main_output.csv run_once:True delegate_to:localhost
名称:合并为一个文件 shell:cat /tmp/fetched/{{ ansible_hostname }}/tmp/{{ ansible_hostname }}_output.csv >> /tmp/fetched/main_output.csv && printf '\r\n' >> /tmp/fetched/main_output.csv args:可执行文件:/bin/bash delegate_to:localhost
output.csv 应该是这样的,
主机名,IP,CPU-核心,Ram-GB,磁盘-GB vm1,192.168.2.70,1,0.999696,21.5, ,vm2 端口 80 已打开 centos,192.168.2.100,2,1.86599,85.9, ,vm1 端口 22 已打开 ,vm2 端口 22 已打开 vm2,192.168.2.71,2,1.86705,86, ,vm1 端口 22 已打开