вставить хосты в проверку через цикл - PullRequest
0 голосов
/ 31 марта 2020

следующая проблема:

у нас есть файл с именем file.conf

192.168.30.1|192.168.30.1|os
_gateway|192.168.30.2|Linux 2.6.18 - 2.6.22
...

первый - имя хоста второй - ipv4

теперь у нас есть скрипт где он должен автоматически вставить хосты и IP-адреса с помощью автоматического пользователя из checkMK

#!/bin/bash

FILE=filename
source $FILE

for i in ${FILE}
do

HOSTNAME=$(cat $i | cut -d '|' -f1)
IP=$(cat $i | cut -d '|' -f2)

curl "http://checkmkadress/check_mk/host&user" -d 'request={"hostname":"'"$HOSTNAME"'","folder":"ansible","attributes":{"ipaddress":"'"$IP"'","site":"sitename","tag_agent":"cmk-agent"}}'


done


, но если мы сделаем так, мы получим следующую ошибку, потому что он попытается вставить каждый хост в хост и каждый ip в ip не проходя все строки

{"result": "Check_MK exception: Failed to parse JSON request: '{\"hostname\":\"allhostnames":{\"ipaddress\":all_ips\",\"site\":\"sitename\",\"tag_agent\":\"cmk-agent\"}}': Invalid control character at: line 1 column 26 (char 25)", "result_code": 1}

как мы можем сделать скрипт curl go через каждую строку, чтобы получить host и ip индивидуально

1 Ответ

0 голосов
/ 31 марта 2020

Используя то, что вы уже сделали, попробуйте таким образом.

FILE="filename"
source $FILE

while read line
do

    HOSTNAME=$(echo $line | cut -d '|' -f1)
    IP=$(echo $line | cut -d '|' -f2)

    #your curl command here

done <$FILE 

ИЛИ, что я предпочитаю

while IFS='|' read -r host ip description
do 
   #your curl command here
   echo "$host : $ip : $description"
done <$FILE
...