no_log: правда

no_log: правда

У меня есть этот 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 открыт

Связанный контент