
Tengo este input.csv
Server, Check-Server, Firewall-Port,
Server1,Server2,80,
,Server2,9999,
,server8,8443,
Server2,,,
server3,Server6,8443,
,Server9,8888,
y crearé un server.yml,
---
Server1:
name: Server2
- 80
- 9999
name: server8
- 8443
Server2:
server3:
name: Server6
- 8443
name: Server9
- 8888
He creado el siguiente ansible, pero no sé cómo filtrarlo para probar el servidor en otros puertos del servidor. Este cheque a todos los servidores.
---
- 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
¡Por favor ayuda!
Respuesta1
El servers.yml debería ser así,
servidores: - servidor1: centos servidor2: vm1 puerto: 22 - servidor1: centos servidor2: vm2 puerto: 22 - servidor1: vm2 servidor2: vm1 puerto: 22 - servidor1: vm1 servidor2: vm2 puerto: 80
El script ansible debería ser así,
nombre: incluya el firewall del servidor para verificar include_vars: server.yml
nombre: obtener el nombre de host shell: echo {{ ansible_hostname }} > /tmp/{{ ansible_hostname }}_data.csv
no_log: verdadero
argumentos: ejecutable: /bin/bash
nombre: Obtener IP shell: nombre de host -I | cut -d'' -f1 >> /tmp/{{ ansible_hostname }}_data.csv args: ejecutable: /bin/bash
nombre: Obtener shell del núcleo de la CPU: nproc >> /tmp/{{ ansible_hostname }}_data.csv args: ejecutable: /bin/bash
nombre: Obtener memoriacálculo de memoria shell: awk '/MemTotal/ {print $2}' /proc/meminfo > argumentos de memoria: ejecutable: /bin/bash
nombre: Obtener memoria en GBcálculo de memoria shell: awk '{ print $1/1000000}' memoria >> /tmp/{{ ansible_hostname }}_data.csv args: ejecutable: /bin/bash
nombre: Obtener información del discocálculo-de-disco
el cálculo será incorrecto si hay un disco con MB
y /dev/vd se usa en lugar de /dev/sd
shell: fdisk -l|grep /dev/sd > disk && awk '/Disk /dev/sd/ {print $3}' disk > disk2 args: ejecutable: /bin/bash
nombre: Obtenga cuántos discoscálculo-de-disco shell: disco de gato2 | wc -l args: ejecutable: /bin/bash registro: línea de conteo
nombre: Calcular la suma de discoscálculo-de-disco shell: awk '{sum+=$1} (NR%{{countline.stdout}})==0{print sum}' disk2 >> /tmp/{{ ansible_hostname }}_data.csv args: ejecutable: /bin/bash
nombre: eliminar csv shell: rm -f /tmp/{{ ansible_hostname }}_output.csv args: ejecutable: /bin/bash advertencia: falso ignore_errors: verdadero
nombre: póngalo en CSV en un shell de una línea: cat /tmp/{{ ansible_hostname }}_data.csv | awk '{print}' ORS=',' > /tmp/{{ ansible_hostname }}_output.csv args: ejecutable: /bin/bash
nombre: compruebe si el puerto del host remoto espera_para: host={{ item.server2 }} port={{ item.port }} timeout=1 ignore_errors: True registro: fuera cuando: item.server1 == ansible_hostname with_items: "{{ servidores }}"
depuración: var=fuera
nombre: Guardar shell de puerto remoto
: printf "\n,{{ item.item.server2 }} puerto {{ item.item.port }} es {% if item.failed %}cerrado{% else %}abierto{% endif %}" >> /tmp/{{ ansible_hostname }}_output.csv args: ejecutable: /bin/bash cuando: item.item.server1 == ansible_hostname with_items: "{{ out.results }}"nombre: eliminar local /tmp/fetched shell: rm -fr /tmp/fetched/ args: ejecutable: /bin/bash advertencia: Falso ignore_errors: Verdadero delegado_a: localhost
nombre: Obteniendo archivo fetch: src: /tmp/{{ ansible_hostname }}_output.csv dest: /tmp/fetched
nombre: Ejecutar una vez en el shell del host local: echo 'Nombre de host,IP,CPU-Core,Ram-GB,Disk-GB' > /tmp/fetched/main_output.csv run_once: Verdadero delegado_a: localhost
nombre: Combinado en un archivo 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: ejecutable: /bin/bash delegado_to: localhost
Y el archivo output.csv debería ser así,
Nombre de host, IP, CPU-Core, Ram-GB, Disk-GB vm1,192.168.2.70,1,0.999696,21.5, el puerto 80 de vm2 está abierto centos, 192.168.2.100,2,1.86599,85.9, el puerto 22 de vm1 es abierto, el puerto 22 de vm2 está abierto vm2,192.168.2.71,2,1.86705,86, el puerto 22 de vm1 está abierto