Как сгенерировать список групп хостов Nagios из хостов с помощью Notepad++/RegEx или другого

Я использую Notepad++ и хотел бы попросить помощи в достижении следующего.

У меня есть некоторая (несколько 1000 строк) конфигурация Nagios/Icinga, которая выглядит так:

define host {
    use         generic-host
    host_name   FakeNameA-748-SomeNameA
    alias       FakeNameA-748-SomeNameA
    address     10.1.1.97
    }
define host {
    use         generic-host
    host_name   H548-AP02
    alias       H548-AP02
    address     172.19.115.190
    }
define host {
    use         generic-host
    host_name   FakeNameB-302-SomeNameB
    alias       FakeNameB-302-SomeNameB
    address     192.168.149.1
    }
define host {
    use         generic-host
    host_name   FakeNameC-902-Acronym
    alias       FakeNameC-902-Acronym
    address     192.168.48.1
    }
define host {
    use         generic-host
    host_name   H902-AP01
    alias       H902-AP01
    address     192.168.48.190
    }

Мне нужно создать несколько хост-групп, содержащих все имена хостов, но в двух группах.

Как это:

define hostgroup {
    hostgroup_name    GroupA
    alias    GroupA
    members FakeNameA-748-SomeNameA,FakeNameB-302-SomeNameB,FakeNameC-902-Acronym
    }

define hostgroup {
    hostgroup_name    GroupB
    alias    GroupB
    members H548-AP02,H902-AP01
    }

Как видите, если «host_name» содержит «AP», он должен попасть в группу B, а все остальное — в группу A (обратите внимание, что они должны быть разделены запятыми).

Кто-нибудь знает, как я могу это автоматизировать?

Спасибо за ваше время :)


person Brandur    schedule 05.03.2014    source источник


Ответы (2)


Если ваши имена хостов соответствуют схеме в вашем примере, вы можете сделать это динамически с помощью сопоставления регулярных выражений, которое поставляется с Nagios:

nagios.cfg:

use_regexp_matching=1

.

define hostgroup {
    hostgroup_name  GroupA
    members         ^[^-]+-[0-9]+-[^-]$ 
}

define hostgroup {
    hostgroup_name  GroupB
    members         ^[^-]+-AP[0-9]+$
}

К сожалению, используемый движок регулярных выражений не поддерживает просмотр назад/упреждение, иначе это можно было бы сделать проще и надежнее. Как бы то ни было, вам нужно найти выражения, которые соответствуют одной группе, но не соответствуют другой для обеих рассматриваемых групп.

Кстати, почему вы беспокоитесь об установке псевдонимов, которые совпадают с именами хостов?

person Adrian Frühwirth    schedule 05.03.2014
comment
Спасибо за ответ. Я унаследовал эту настройку. Поэтому я не устанавливал эту настройку :) Я мог бы жить только с однократно сгенерированным списком, потому что он поддерживается вручную. Он будет обновлен когда-нибудь в будущем. Но не сейчас. - person Brandur; 05.03.2014

Я решил это (с некоторой помощью;)).

Я использовал программу под названием LINQPad со следующим кодом:

void Main()

 {
    List<string> lines= GetLines();
    List<string> hostNames = new List<string>();
    string members = "10.0.1.191,10.0.1.193,10.0.107.190";
    foreach(string member in members.Split(','))
    {
        var index = lines.FindIndex((s) =>            s.Contains(member));
        string aliasLine = lines[index + 1];
        int count = aliasLine.IndexOf("\t\t");
        string hostName = aliasLine.Remove(0, count + 2);
        hostNames.Add(hostName);
    }

    string.Join(",",hostNames).Dump();

 }

List<string> GetLines()
 {
    List<string> lines = new List<string>();
    using (var sr = new StreamReader("c:\\temp\\Nagios_Host_List.txt")) {
        while (!sr.EndOfStream)
        {
            lines.Add( sr.ReadLine());
        }
    }
    return lines;

 }

Поскольку у меня уже был список участников со всеми IP-адресами в одной строке, разделенной запятыми, я просто вставил это, кроме «string members = ...", и txt-файл содержал все записи хоста. Результатом стала одна строка с именами хостов, разделенными запятыми. Как раз то, что мне было нужно.

Это решило мою конкретную проблему на данный момент. Но когда мы будем обновляться с Nagios до Icinga в будущем. Я приму во внимание то, что опубликовал Адриан Фрювирт. Таким образом, мы могли бы автоматизировать его больше.

Надеюсь, кто-то может использовать эту информацию в своих интересах :)

Счастливый день.

person Brandur    schedule 06.03.2014