Назад | Перейти на главную страницу

Один-ко-многим доступная проверка портов брандмауэра

У меня есть 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

    no_log: true

    аргументы: исполняемый файл: / 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

  • имя: Получить информацию о диске диск-счет

    расчет будет неверным, если будет диск с МБ

    и / dev / vd используется вместо / dev / sd

    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 открыт