How to create server inventory using shell scripts

Today, we are going to explain how to create Linux inventory using simple shell script. You don't have to visit each and every servers for getting the system details.

- Create file to store server name  

[root@centOS01 ~]# cat server_list
centOS01
node01
node02
[root@centOS01 ~]#

     - Create script call data-collection.sh to generate data and store the information in /tmp/server_check_list file on servers. It will store below data of the servers in file

     HOSTNAME , IPDETAILS ,DNS ,OS Version, SELINUX ,FIREWALLD ,KERNEL ,NTP ,CHRONYD, MAIL, NFS, CIFS, MEMORY(KB), SWAP(KB), CPU, DISK-COUNT, PARTITION-COUNT, DISKS-DETAIL, PARTITION-DETAIL, MACHINE

[root@centOS01 ~]# cat data-collection.sh

#!/bin/bash
# Purpose: Collect system details
# Version: 1.0
# Created Date: 26-June-2020 
# Modified Date: 26-June-2020
# Author : Vallabh Darole
# START #

#echo -n >/tmp/server_check_list
RHOSTNAME=`hostname`
IPDETAILS=`hostname -I`
DNSSERVERS=`grep '^nameserver' /etc/resolv.conf | awk '{print $NF}' | sed ':a;N;$!ba;s/\n/ /g'`
SELINUX=`getenforce`
FIREWALLD=`if ps -ef | grep firewalld | grep -v grep >/dev/null ; then echo 'Firewalld OK' ; else echo 'Firewalld KO' ; fi`
KERNELV=`uname -r`
NTP=`if ntpstat > /dev/null ; then echo 'NTP OK' ; else echo 'NTP KO' ; fi`
CHRONYD=`if systemctl status chronyd > /dev/null ; then echo 'CHRONYD OK' ; else echo 'CHRONYD KO' ; fi`
MAIL=`if service postfix status > /dev/null ; then echo 'MAIL OK' ; else echo 'MAIL KO' ; fi`
DISKS=`lsblk  | grep disk | grep sd | awk '{printf $1"="$4 " "}'`
PARTITION=`df -PTh | egrep -vi "type|devtmpfs|tmpfs" | awk '{printf $1"="$2"="$3"="$7 " "}'`
CDISKS=`lsblk  | grep disk | grep sd | wc -l`
CPARTITION=`df -PTh | egrep -vi "type|devtmpfs|tmpfs" |  wc -l`
NFS=`cat /proc/mounts | grep -i nfs |wc -l`
CIFS=`cat /proc/mounts | grep -i cifs |wc -l`
MEMORY=`cat /proc/meminfo  | grep MemTotal | awk '{print $2}'`
SWAP=`cat /proc/meminfo  | grep SwapTotal | awk '{print $2}'`
CPU=`cat /proc/cpuinfo |  grep "processor" | wc -l`
OS=`cat /etc/redhat-release`
MACHINE=`dmidecode | grep -A1 "System Information"  | grep Manufacturer | awk '{print $2" "$NF}'| sed 's/,//g'`
echo  "$RHOSTNAME,$IPDETAILS,$DNSSERVERS,$OS,$SELINUX,$FIREWALLD,$KERNELV,$NTP,$CHRONYD,$MAIL,$NFS,$CIFS,$MEMORY,$SWAP,$CPU,$CDISKS,$CPARTITION,$DISKS,$PARTITION,$MACHINE" >> /tmp/server_check_list

#END#
[root@centOS01 ~]# 

- The below script will copy the data-collation.sh script on all servers in /tmp folder. Then it will execute the script and create file server_check_list"  on all servers in /tmp directory. Then it going to read the file /tmp/server_check_list  from all server and create file /tmp/server_check_list.csv file. It will also send email with attached server_check_list.csv file. if you do not received the mail you can download the file /tmp/server_check_list.csv from servers which you had executed the script.

[root@centOS01 ~]# cat inventory.sh
#!/bin/bash
# Purpose: Copy & Execute data collection script.
# Version: 1.0
# Created Date: 26-June-2020 
# Modified Date: 26-June-2020
# Author : Vallabh Darole
# START #

echo "Enter your email ID"
read EMAIL

echo -n >/tmp/server_check_list.csv
echo "HOSTNAME ,IPDETAILS,DNSSERVERS,OS,SELINUX,FIREWALLD,KERNELV,NTP,CHRONYD,MAIL,NFS,CIFS,MEMORY(KB),SWAP,CPU,DISK-COUNT, PARTITION-COUNT,DISKS-DETAIL,PARTITION-DETAIL,MACHINE" >> /tmp/server_check_list.csv
for i in `cat /root/server_list`
do
echo $i
scp data-collection.sh $i:/tmp
timeout 5 ssh $i /tmp/data-collection.sh
timeout 5 ssh $i cat /tmp/server_check_list >>/tmp/server_check_list.csv
timeout 5 ssh $i rm /tmp/server_check_list
timeout 5 ssh $i rm /tmp/data-collection.sh
done
DATE=`date`
echo -n "Please find the server inventory create for servers " >/tmp/MESSAGE
cat /root/server_list >> /tmp/MESSAGE
echo `cat /tmp/MESSAGE` | mailx -s "Inventory list create on $DATE" -a "/tmp/server_check_list.csv"  $EMAIL

# END #
[root@centOS01 ~]#

- You will receive below email on you email ID provided. 


- Below is inventory file create from script. 



For result you can see the below video.






ATR Script for RHEL7
# vi inventory.sh  
#!/bin/bash
# Purpose: Collect system details
# Version: 1.0
# Created Date: 9-May-2022 
# Modified Date: 9-May-2022
# Author : Vallabh Darole
# START #

DATE=`date +"%d-%B-%Y"`

echo > server_check_list.csv
HOSTNAME=`uname -n | cut -d . -f1`
FHOSTNAME=`hostname`
IPDETAILS=`ip r | grep 'proto kernel' | awk '{print $3"="$9}' | sed ':a;N;$!ba;s/\n/ /g'`
DNSSERVERS=`grep '^nameserver' /etc/resolv.conf | awk '{print $NF}' | sed ':a;N;$!ba;s/\n/ /g'`
FIREWALL=`if systemctl status firewalld > /dev/null ; then echo 'FIREWALL OK' ; else echo 'FIREWALL KO' ; fi`
SELINUX=`getenforce`

QUALYS=`if service qualys-cloud-agent status > /dev/null ; then echo 'QUALYS OK' ; else echo 'QUALYS KO' ; fi`
FALCOM=`if service falcon-sensor status > /dev/null ; then echo 'FALCOM OK' ; else echo 'FALCOM KO' ; fi` 
DS_AGENT=`if service ds_agent status > /dev/null ; then echo 'DS AGENT OK' ; else echo 'DS AGENT KO' ; fi` 
WALINUX=`rpm -qa | grep WALinuxAgent`

NTP=`if ntpstat > /dev/null ; then echo 'NTP OK' ; else echo 'NTP KO' ; fi`
CHRONYD=`if systemctl status chronyd > /dev/null ; then echo 'CHRONYD OK' ; else echo 'CHRONYD KO' ; fi`
MAIL=`if service postfix status > /dev/null ; then echo 'MAIL OK' ; else echo 'MAIL KO' ; fi`
CDISKS=`lsblk  | grep disk | grep sd | wc -l`
CPARTITION=`df -PThl | egrep -vi "type|devtmpfs|tmpfs" |  wc -l`
PARTITION=`df -PThl | egrep -vi "type|devtmpfs|tmpfs" | awk '{printf $1" "$2" "$7" ; "}'`
NFS=`cat /proc/mounts | grep -i nfs |wc -l`
CIFS=`cat /proc/mounts | grep -i cifs |wc -l`
MEMORY=`cat /proc/meminfo  | grep MemTotal | awk '{print int($2/1048576)" GB"}'`
SWAP=`cat /proc/meminfo  | grep SwapTotal | awk '{print int($2/1048576)" GB"}'`
CPU=`cat /proc/cpuinfo |  grep "processor" | wc -l`
OS=`cat /etc/redhat-release`
KERNEL=`uname -r`
MACHINE=`dmidecode | grep -A1 "System Information"  | grep Manufacturer | awk '{print $2" "$NF}'| sed 's/,//g'`
ASM=`if service oracleasm status > /dev/null ; then /etc/init.d/oracleasm listdisks | awk '{ printf $1 " "}' ; else echo 'ASM dont exist' ; fi`
CETHERNET=`ip r | grep link | wc -l`
SERVICE=`netstat -nuatp | grep LIST | awk -F "/" '{ print $2";" }' | sort -u | awk '{printf $1" "$2 }'`


echo "ServerName,FQDN,OS-version,Kernel,NTP,Chronyd,DNS-IP,IP-address,No-NIC,Firewall,Selinux,QUALYS,FALCOM,DS-AGENT, WALINUX ,CPU ,RAM , SWAP ,NFS-Count ,CIFS-Count ,Disk-count, FS-Count ,Partition ,ASM , MACHINE SERVICE ">> server_check_list.csv

echo "$HOSTNAME ,$FHOSTNAME ,$OS ,$KERNEL , $NTP ,$CHRONYD , $DNSSERVERS ,$IPDETAILS ,$CETHERNET ,$FIREWALL , $SELINUX,$QUALYS ,$FALCOM ,$DS_AGENT ,$WALINUX ,$CPU, $MEMORY , $SWAP ,$NFS ,$CIFS ,$CDISKS ,$CPARTITION ,$PARTITION ,$ASM ,$ MACHINE , $SERVICE ">>server_check_list.csv

cat server_check_list.csv

# END #

ATR Script for RHEL6
# vi inventory.sh  
#!/bin/bash
# Purpose: Collect system details
# Version: 1.0
# Created Date: 9-May-2022 
# Modified Date: 9-May-2022
# Author : Vallabh Darole
# START #

DATE=`date +"%d-%B-%Y"`
echo > server_check_list.csv
HOSTNAME=`uname -n | cut -d . -f1`
FHOSTNAME=`hostname`
IPDETAILS=`ip r | grep 'proto kernel' | awk '{print $3"="$9}' | sed ':a;N;$!ba;s/\n/ /g'`
DNSSERVERS=`grep '^nameserver' /etc/resolv.conf | awk '{print $NF}' | sed ':a;N;$!ba;s/\n/ /g'`
FIREWALL=`if  service iptables status > /dev/null ; then echo 'FIREWALL OK' ; else echo 'FIREWALL KO' ; fi`
SELINUX=`getenforce`
QUALYS=`if service qualys-cloud-agent status > /dev/null ; then echo 'QUALYS OK' ; else echo 'QUALYS KO' ; fi`
FALCOM=`if service falcon-sensor status > /dev/null ; then echo 'FALCOM OK' ; else echo 'FALCOM KO' ; fi` 
DS_AGENT=`if service ds_agent status > /dev/null ; then echo 'DS AGENT OK' ; else echo 'DS AGENT KO' ; fi` 
WALINUX=`rpm -qa | grep WALinuxAgent`
NTP=`if ntpstat > /dev/null ; then echo 'NTP OK' ; else echo 'NTP KO' ; fi`
CHRONYD=`echo "CHRONYD KO"`
MAIL=`if service postfix status > /dev/null ; then echo 'MAIL OK' ; else echo 'MAIL KO' ; fi`
CDISKS=`lsblk  | grep disk | grep sd | wc -l`
CPARTITION=`df -PTh | egrep -vi "type|devtmpfs|tmpfs" |  wc -l`
PARTITION=`df -PTh | egrep -vi "type|devtmpfs|tmpfs" | awk '{printf $1" "$2" "$7" ; "}'`
NFS=`cat /proc/mounts | grep -i nfs |wc -l`
CIFS=`cat /proc/mounts | grep -i cifs |wc -l`
MEMORY=`cat /proc/meminfo  | grep MemTotal | awk '{print int($2/1048576)" GB"}'`
SWAP=`cat /proc/meminfo  | grep SwapTotal | awk '{print int($2/1048576)" GB"}'`
CPU=`cat /proc/cpuinfo |  grep "processor" | wc -l`
OS=`cat /etc/redhat-release`
KERNEL=`uname -r`
MACHINE=`dmidecode | grep -A1 "System Information"  | grep Manufacturer | awk '{print $2" "$NF}'| sed 's/,//g'`

ASM=`if service oracleasm status > /dev/null ; then /etc/init.d/oracleasm listdisks | awk '{ printf $1 " "}' ; else echo 'ASM dont exist' ; fi`
CETHERNET=`ip r | grep "link  src"| wc -l`

SERVICE=`netstat -nuatp | grep LIST | awk -F "/" '{ print $2";" }' | sort -u | awk '{printf $1" "$2 }'`

echo "ServerName,FQDN,OS-version,Kernel,NTP,Chronyd,DNS-IP,IP-address,No-NIC,Firewall,Selinux,QUALYS,FALCOM,DS-AGENT, WALINUX ,CPU ,RAM , SWAP ,NFS-Count ,CIFS-Count ,Disk-count, FS-Count ,Partition ,ASM , MACHINE SERVICE ">> server_check_list.csv

echo "$HOSTNAME ,$FHOSTNAME ,$OS ,$KERNEL , $NTP ,$CHRONYD , $DNSSERVERS ,$IPDETAILS ,$CETHERNET ,$FIREWALL , $SELINUX,$QUALYS ,$FALCOM ,$DS_AGENT ,$WALINUX ,$CPU, $MEMORY , $SWAP ,$NFS ,$CIFS ,$CDISKS ,$CPARTITION ,$PARTITION ,$ASM ,$MACHINE , $SERVICE ">>server_check_list.csv

cat server_check_list.csv

# END #

ATR Script for RHEL5
# vi inventory.sh  

#!/bin/bash
# Purpose: Collect system details
# Version: 1.0
# Created Date: 9-May-2022 
# Modified Date: 9-May-2022
# Author : Vallabh Darole
# START #

DATE=`date +"%d-%B-%Y"`

echo > server_check_list.csv
HOSTNAME=`uname -n | cut -d . -f1`
FHOSTNAME=`hostname`
IPDETAILS=`ip r | grep 'proto kernel' | awk '{print $3"="$9}' | sed ':a;N;$!ba;s/\n/ /g'`
DNSSERVERS=`grep '^nameserver' /etc/resolv.conf | awk '{print $NF}' | sed ':a;N;$!ba;s/\n/ /g'`
FIREWALL=`if  service iptables status > /dev/null ; then echo 'FIREWALL OK' ; else echo 'FIREWALL KO' ; fi`
SELINUX=`getenforce`
QUALYS=`if service qualys-cloud-agent status > /dev/null ; then echo 'QUALYS OK' ; else echo 'QUALYS KO' ; fi`
FALCOM=`if service falcon-sensor status > /dev/null ; then echo 'FALCOM OK' ; else echo 'FALCOM KO' ; fi` 
DS_AGENT=`if service ds_agent status > /dev/null ; then echo 'DS AGENT OK' ; else echo 'DS AGENT KO' ; fi` 
WALINUX=`rpm -qa | grep WALinuxAgent`
NTP=`if ntpstat > /dev/null ; then echo 'NTP OK' ; else echo 'NTP KO' ; fi`
`echo 'CHRONYD KO'`
MAIL=`if service sendmail status > /dev/null ; then echo 'SENDMAIL OK' ; else echo 'SENDMAIL KO' ; fi`
CDISKS=`fdisk -l | grep Disk | wc -l`
CPARTITION=`df -PThl | egrep -vi "type|devtmpfs|tmpfs" |  wc -l`
PARTITION=`df -PThl | egrep -vi "type|devtmpfs|tmpfs" | awk '{printf $1" "$2" "$7" ; "}'`
NFS=`cat /proc/mounts | grep -i nfs |wc -l`
CIFS=`cat /proc/mounts | grep -i cifs |wc -l`
MEMORY=`cat /proc/meminfo  | grep MemTotal | awk '{print int($2/1048576)" GB"}'`
SWAP=`cat /proc/meminfo  | grep SwapTotal | awk '{print int($2/1048576)" GB"}'`
CPU=`cat /proc/cpuinfo |  grep "processor" | wc -l`
OS=`cat /etc/redhat-release`
KERNEL=`uname -r`
MACHINE=`dmidecode | grep -A1 "System Information"  | grep Manufacturer | awk '{print $2" "$NF}'| sed 's/,//g'`
ASM=`if service oracleasm status > /dev/null ; then /etc/init.d/oracleasm listdisks | awk '{ printf $1 " "}' ; else echo 'ASM dont exist' ; fi`
CETHERNET=`ip r | grep "link  src"| wc -l`

SERVICE=`netstat -nuatp | grep LIST | awk -F "/" '{ print $2";" }' | sort -u | awk '{printf $1" "$2 }'`

echo "ServerName,FQDN,OS-version,Kernel,NTP,Chronyd,DNS-IP,IP-address,No-NIC,Firewall,Selinux,QUALYS,FALCOM,DS-AGENT, WALINUX ,CPU ,RAM , SWAP ,NFS-Count ,CIFS-Count ,Disk-count, FS-Count ,Partition ,ASM , MACHINE SERVICE ">> server_check_list.csv

echo "$HOSTNAME ,$FHOSTNAME ,$OS ,$KERNEL , $NTP ,$CHRONYD , $DNSSERVERS ,$IPDETAILS ,$CETHERNET ,$FIREWALL , $SELINUX,$QUALYS ,$FALCOM ,$DS_AGENT ,$WALINUX ,$CPU, $MEMORY , $SWAP ,$NFS ,$CIFS ,$CDISKS ,$CPARTITION ,$PARTITION ,$ASM ,$MACHINE , $SERVICE ">>server_check_list.csv

cat server_check_list.csv

# END #

ATR Script for UBUNTU
# vi inventory.sh  
#!/bin/bash
# Purpose: Collect system details
# Version: 1.0
# Created Date: 9-May-2022 
# Modified Date: 9-May-2022
# Author : Vallabh Darole
# START #

DATE=`date +"%d-%B-%Y"`

echo > server_check_list.csv
HOSTNAME=`uname -n | cut -d . -f1`
FHOSTNAME=`hostname`
IPDETAILS=`ip r | grep 'proto kernel' | awk '{print $3"="$9}' | sed ':a;N;$!ba;s/\n/ /g'`
DNSSERVERS=`grep '^nameserver' /etc/resolv.conf | awk '{print $NF}' | sed ':a;N;$!ba;s/\n/ /g'`
FIREWALL=`if systemctl status ufw > /dev/null ; then echo 'FIREWALL OK' ; else echo 'FIREWALL KO' ; fi`
SELINUX=`disabled`

QUALYS=`if service qualys-cloud-agent status > /dev/null ; then echo 'QUALYS OK' ; else echo 'QUALYS KO' ; fi`
FALCOM=`if service falcon-sensor status > /dev/null ; then echo 'FALCOM OK' ; else echo 'FALCOM KO' ; fi` 
DS_AGENT=`if service ds_agent status > /dev/null ; then echo 'DS AGENT OK' ; else echo 'DS AGENT KO' ; fi` 
WALINUX=`NO WALINUX`

NTP=`if ntpstat > /dev/null ; then echo 'NTP OK' ; else echo 'NTP KO' ; fi`
CHRONYD=`if systemctl status chronyd > /dev/null ; then echo 'CHRONYD OK' ; else echo 'CHRONYD KO' ; fi`
MAIL=`if service postfix status > /dev/null ; then echo 'MAIL OK' ; else echo 'MAIL KO' ; fi`
CDISKS=`lsblk  | grep disk | wc -l`
CPARTITION=`df -PThl | egrep -vi "type|devtmpfs|tmpfs" |  wc -l`
PARTITION=`df -PThl | egrep -vi "type|devtmpfs|tmpfs" | awk '{printf $1" "$2" "$7" ; "}'`
NFS=`cat /proc/mounts | grep -i nfs |wc -l`
CIFS=`cat /proc/mounts | grep -i cifs |wc -l`
MEMORY=`cat /proc/meminfo  | grep MemTotal | awk '{print int($2/1048576)" GB"}'`
SWAP=`cat /proc/meminfo  | grep SwapTotal | awk '{print int($2/1048576)" GB"}'`
CPU=`cat /proc/cpuinfo |  grep "processor" | wc -l`
OS=`lsb_release -d`
KERNEL=`uname -r`
MACHINE=`dmidecode | grep -A1 "System Information"  | grep Manufacturer | awk '{print $2" "$NF}'| sed 's/,//g'`
ASM=`if service oracleasm status > /dev/null ; then /etc/init.d/oracleasm listdisks | awk '{ printf $1 " "}' ; else echo 'ASM dont exist' ; fi`
CETHERNET=`ip r | grep link | wc -l`
SERVICE=`netstat -nuatp | grep LIST | awk -F "/" '{ print $2";" }' | sort -u | awk '{printf $1" "$2 }'`


echo "ServerName,FQDN,OS-version,Kernel,NTP,Chronyd,DNS-IP,IP-address,No-NIC,Firewall,Selinux,QUALYS,FALCOM,DS-AGENT, WALINUX ,CPU ,RAM , SWAP ,NFS-Count ,CIFS-Count ,Disk-count, FS-Count ,Partition ,ASM , MACHINE SERVICE ">> server_check_list.csv

echo "$HOSTNAME ,$FHOSTNAME ,$OS ,$KERNEL , $NTP ,$CHRONYD , $DNSSERVERS ,$IPDETAILS ,$CETHERNET ,$FIREWALL , $SELINUX,$QUALYS ,$FALCOM ,$DS_AGENT ,$WALINUX ,$CPU, $MEMORY , $SWAP ,$NFS ,$CIFS ,$CDISKS ,$CPARTITION ,$PARTITION ,$ASM ,$MACHINE , $SERVICE ">>server_check_list.csv


cat server_check_list.csv

# END #


No comments:

Post a Comment