У меня есть input.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
У меня есть доступный ниже созданный, но я не знаю, как отфильтровать его, чтобы проверить сервер на порты другого сервера. Это проверка всему серверу.
---
- 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
Пожалуйста помоги!
Server.yml должен быть таким,
серверы: - server1: centos server2: vm1 порт: 22 - server1: centos server2: vm2 порт: 22 - server1: vm2 server2: vm1 порт: 22 - server1: vm1 server2: vm2 порт: 80
Анзибл скрипт должен быть таким,
name: включить брандмауэр сервера для проверки include_vars: server.yml
name: Получить имя хоста shell: echo {{ansible_hostname}}> / tmp / {{ansible_hostname}} _ data.csv
аргументы: исполняемый файл: / bin / bash
name: Получить IP-оболочку: hostname -I | cut -d '' -f1 >> / tmp / {{ansible_hostname}} _ data.csv args: исполняемый файл: / bin / bash
имя: Получить оболочку ядра процессора: nproc >> / tmp / {{ansible_hostname}} _ data.csv args: исполняемый файл: / bin / bash
имя: Получить память вычисление памяти оболочка: awk '/ MemTotal / {print $ 2}' / proc / meminfo> аргументы памяти: исполняемый файл: / bin / bash
name: получить память в ГБ вычисление памяти shell: awk '{print $ 1/1000000}' memory >> / tmp / {{ansible_hostname}} _ data.csv args: исполняемый файл: / bin / bash
имя: Получить информацию о диске диск-счет
shell: fdisk -l | grep / dev / sd> disk && awk '/ Disk / dev / sd / {print $ 3}' disk> disk2 args: исполняемый файл: / bin / bash
имя: Получить сколько диска диск-счет оболочка: cat disk2 | wc -l args: исполняемый файл: / bin / bash register: countline
имя: Рассчитать сумму дисков диск-счет shell: awk '{sum + = $ 1} (NR% {{countline.stdout}}) == 0 {print sum}' disk2 >> / tmp / {{ansible_hostname}} _ data.csv аргументы: исполняемый файл: / bin / bash
имя: удалить оболочку csv: rm -f / tmp / {{ansible_hostname}} _ output.csv args: исполняемый файл: / bin / bash warn: false ignore_errors: True
имя: Поместите его в CSV в одну строку оболочки: cat / tmp / {{ansible_hostname}} _ data.csv | awk '{print}' ORS = ','> / tmp / {{ansible_hostname}} _ output.csv args: исполняемый файл: / bin / bash
name: проверьте, есть ли порт удаленного хоста wait_for: host = {{item.server2}} port = {{item.port}} timeout = 1 ignore_errors: True register: out when: item.server1 == ansible_hostname with_items: "{{серверы }} "
отладка: var = out
имя: Сохранить удаленный порт
shell: printf "\ n, {{item.item.server2}} порт {{item.item.port}} is {% if item.failed%} closed {% else%} open {% endif%}" >> / tmp / {{ansible_hostname}} _ output.csv args: исполняемый файл: / bin / bash when: item.item.server1 == ansible_hostname with_items: "{{out.results}}"
имя: удалить локальный / tmp / извлеченный оболочка: rm -fr / tmp / извлеченный / аргументы: исполняемый файл: / bin / bash warn: False ignore_errors: True delegate_to: localhost
name: Получение файла fetch: src: / tmp / {{ansible_hostname}} _ output.csv dest: / tmp / fetched
name: выполнить один раз в оболочке localhost: echo 'Hostname, IP, CPU-Core, Ram-GB, Disk-GB'> /tmp/fetched/main_output.csv run_once: True delegate_to: localhost
имя: Объединено в одну файловую оболочку: 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-Core, RAM-GB, Disk-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 открыт, порт 22 vm2 открыт vm2,192.168.2.71,2,1.86705,86`` порт 22 vm1 открыт