no_log: wahr

no_log: wahr

Ich habe diese input.csv

Server, Check-Server, Firewall-Port,
Server1,Server2,80,
,Server2,9999,
,server8,8443,
Server2,,,
server3,Server6,8443,
,Server9,8888,

und ich werde eine server.yml erstellen,

---

  Server1:
     name: Server2
        - 80
        - 9999
     name: server8
        - 8443
  Server2:
  server3:
     name: Server6
        - 8443
     name: Server9
        - 8888

Ich habe Ansible unten erstellt, weiß aber nicht, wie ich es filtern kann, um den Server auf andere Server-Ports zu testen. Dies prüft alle Server.

--- 
- 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   

Bitte helfen Sie!

Antwort1

Die Datei servers.yml sollte wie folgt aussehen:


Server: - Server1: Centos Server2: VM1 Port: 22 - Server1: Centos Server2: VM2 Port: 22 - Server1: VM2 Server2: VM1 Port: 22 - Server1: VM1 Server2: VM2 Port: 80

Das Ansible-Skript sollte wie folgt aussehen:


  • Name: Server-Firewall einschließen, um include_vars zu prüfen: server.yml

  • Name: Hostnamen abrufen Shell: echo {{ ansible_hostname }} > /tmp/{{ ansible_hostname }}_data.csv

    no_log: wahr

    Argumente: ausführbare Datei: /bin/bash

  • Name: IP-Shell abrufen: Hostname -I | cut -d' ' -f1 >> /tmp/{{ ansible_hostname }}_data.csv Argumente: ausführbare Datei: /bin/bash

  • Name: CPU-Kern-Shell abrufen: nproc >> /tmp/{{ ansible_hostname }}_data.csv Argumente: ausführbare Datei: /bin/bash

  • Name: Speicher abrufenSpeicherberechnung Shell: awk '/MemTotal/ {print $2}' /proc/meminfo > Speicherargumente: ausführbare Datei: /bin/bash

  • Name: Speicher in GB abrufenSpeicherberechnung Shell: awk '{ print $1/1000000}' Speicher >> /tmp/{{ ansible_hostname }}_data.csv Argumente: ausführbare Datei: /bin/bash

  • Name: Datenträgerinformationen abrufenFestplattenberechnung

    Die Berechnung wird falsch sein, wenn eine Festplatte mit MB vorhanden ist

    und /dev/vd wird anstelle von /dev/sd verwendet

    Shell: fdisk -l|grep /dev/sd > disk && awk '/Disk /dev/sd/ {print $3}' disk > disk2 args: ausführbare Datei: /bin/bash

  • Name: Wie viele Festplatten abrufenFestplattenberechnung Shell: cat disk2 | wc -l args: ausführbare Datei: /bin/bash register: countline

  • Name: Summe der Festplatten berechnenFestplattenberechnung Shell: awk '{sum+=$1} (NR%{{countline.stdout}})==0{print sum}' disk2 >> /tmp/{{ ansible_hostname }}_data.csv args: ausführbare Datei: /bin/bash

  • Name: CSV löschen Shell: rm -f /tmp/{{ ansible_hostname }}_output.csv Argumente: ausführbare Datei: /bin/bash Warnung: false ignore_errors: True

  • Name: Fügen Sie es in einer Zeile als CSV ein. Shell: cat /tmp/{{ ansible_hostname }}_data.csv | awk '{print}' ORS=',' > /tmp/{{ ansible_hostname }}_output.csv args: ausführbare Datei: /bin/bash

  • Name: Überprüfen, ob der Port des Remote-Hosts wait_for ist: Host={{ item.server2 }} Port={{ item.port }} Timeout=1 ignore_errors: True Register: out wenn: item.server1 == ansible_hostname with_items: "{{ servers }}"

  • debuggen: var=out

  • Name: Remote-Port-
    Shell speichern: printf "\n,{{ item.item.server2 }} Port {{ item.item.port }} ist {% if item.failed %}geschlossen{% else %}offen{% endif %}" >> /tmp/{{ ansible_hostname }}_output.csv Argumente: ausführbare Datei: /bin/bash wann: item.item.server1 == ansible_hostname with_items: "{{ out.results }}"

  • Name: delete local /tmp/fetched Shell: rm -fr /tmp/fetched/ Argumente: ausführbare Datei: /bin/bash Warnung: False ignore_errors: True delegate_to: localhost

  • Name: Datei abrufen fetch: src: /tmp/{{ ansible_hostname }}_output.csv dest: /tmp/fetched

  • Name: Einmal auf der lokalen Host-Shell ausführen: echo 'Hostname,IP,CPU-Core,Ram-GB,Disk-GB' > /tmp/fetched/main_output.csv einmal_ausführen: True delegate_to: localhost

  • Name: Zu einer Datei kombiniert Shell: cat /tmp/fetched/{{ ansible_hostname }}/tmp/{{ ansible_hostname }}_output.csv >> /tmp/fetched/main_output.csv && printf '\r\n' >> /tmp/fetched/main_output.csv Argumente: ausführbare Datei: /bin/bash delegate_to: localhost

    Und die Datei output.csv sollte so aussehen:

Hostname, IP, CPU-Core, RAM-GB, Disk-GB vm1, 192.168.2.70, 1, 0,999696, 21,5, , vm2-Port 80 ist offen centos, 192.168.2.100, 2, 1,86599, 85,9, , vm1-Port 22 ist offen , vm2-Port 22 ist offen vm2, 192.168.2.71, 2, 1,86705, 86, , vm1-Port 22 ist offen

verwandte Informationen