
У меня есть этот 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
Я создал 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: hostname -I | cut -d' ' -f1 >> /tmp/{{ ansible_hostname }}_data.csv аргументы: исполняемый файл: /bin/bash
имя: Получить ядро процессора оболочка: nproc >> /tmp/{{ ansible_hostname }}_data.csv аргументы: исполняемый файл: /bin/bash
имя: Получить памятьпамять-вычисление оболочка: awk '/MemTotal/ {print $2}' /proc/meminfo > аргументы памяти: исполняемый файл: /bin/bash
имя: Получить память в ГБпамять-вычисление оболочка: awk '{ print $1/1000000}' память >> /tmp/{{ ansible_hostname }}_data.csv аргументы: исполняемый файл: /bin/bash
имя: Получить информацию о дискедиск-расчет
Расчет будет неверным, если есть диск с МБ
и /dev/vd используется вместо /dev/sd
оболочка: fdisk -l|grep /dev/sd > disk && awk '/Disk /dev/sd/ {print $3}' disk > disk2 аргументы: исполняемый файл: /bin/bash
имя: Узнать, сколько дисковдиск-расчет оболочка: cat disk2 | wc -l аргументы: исполняемый файл: /bin/bash регистр: countline
имя: Рассчитать сумму дисковдиск-расчет shell: awk '{sum+=$1} (NR%{{countline.stdout}})==0{print sum}' disk2 >> /tmp/{{ ansible_hostname }}_data.csv args: исполняемый файл: /bin/bash
имя: удалить csv оболочка: rm -f /tmp/{{ ansible_hostname }}_output.csv аргументы: исполняемый файл: /bin/bash предупреждение: false игнорировать_ошибки: 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 %}открыт{% else %}открыт{% endif %}" >> /tmp/{{ ansible_hostname }}_output.csv args: исполняемый файл: /bin/bash when: item.item.server1 == ansible_hostname with_items: "{{ out.results }}"имя: удалить локальный /tmp/fetched оболочка: rm -fr /tmp/fetched/ аргументы: исполняемый файл: /bin/bash предупреждение: Ложь игнорировать_ошибки: Истина делегат_то: localhost
имя: Извлечение файла fetch: src: /tmp/{{ ansible_hostname }}_output.csv dest: /tmp/fetched
имя: Выполнить один раз на localhost 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, ЦП-ядро, ОЗУ-ГБ, Диск-ГБ vm1, 192.168.2.70, 1, 0.999696, 21.5, , порт 80 vm2 открыт centos, 192.168.2.100, 2, 1.86599, 85.9, , порт 22 vm1 открыт , порт 22 vm2 открыт vm2, 192.168.2.71, 2, 1.86705, 86, , порт 22 vm1 открыт