Официальная возможность получить лицензионный софт бесплатно.
Giveaway of the Day
Это не реклама!

Щелкните для получения прогноза по Биробиджану


четверг, 13 ноября 2014 г.

OCS-NG Inventory 2.x: продолжаем миграцию. Параметры подсетей.

Посредством лома и какой-то матери перенес данные из таблиц версии 1.х в таблицы версии 2.х. После удаления созданной по шаблону accountinfo_config, нормально отработала конверсия старых данных accountinfo в новый формат (вот и пригодится рассмотренный чуть ранее view).
Пошел проверять настройки подсетей, вроде всё выглядит гладко:



Однако... Однако при проверке вылезло:


вот те раз! А где ж ID 120000, который прекрасно виден в предыдущей таблице? А нету!


Смотрим таблицу subnet:

select netid,name,id from subnet;
+----------------+---------------------------------------------------+--------+
| netid          | name                                              | id     |
+----------------+---------------------------------------------------+--------+
| 172.21.120.0   | Управление: dynDHCP (256)-1                       | 120000 |

В ней есть. Так в чем же дело? Дело в том, что теперь поле id вставляется, уж не знаю, с какого перепуга, из таблицы config, и если в ней такого id-а нет, то и в настройках подсети он не появится - выбрать можно только из тех, что прописаны в конфиге.
Да и фиг с вами! Давайте импортировать?

Вбил пару id-ов вручную, чтобы узнать формат.
select * from config where name rlike 'id_ipdiscover';
+-----------------+--------+--------+----------+
| NAME            | IVALUE | TVALUE | COMMENTS |
+-----------------+--------+--------+----------+
| ID_IPDISCOVER_1 |      1 | 101    | NULL     |
| ID_IPDISCOVER_2 |      2 | 107    | NULL     |
+-----------------+--------+--------+----------+

Всё ясно. Опять поля нумеруются последовательно. Будем писать хитровыделанный скрипт, который добавит существующие id-ы из subnet в config.
Весь процесс подготовки расписывать не буду, вот конечный результат:

-- счетчик: начинаем отсчет с последнего известного ИД-а
-- по умолчанию считаем, что хотя бы один мы уже занесли
set @currid:=(select max(config.ivalue) from ocsweb.config where config.name rlike 'id_ipdiscover');
-- выбираем псевдостолбцы из псевдотаблицы
insert into config select confnewNAME,confnewid,NetID,'' from
(
SELECT 
    id as NetID,
-- чтобы не делать кучу селектов для следуюших проверок, запоминаем в переменной
    @ival:=(select 
            ivalue
        from
            config
        where
            config.name rlike 'id_ipdiscover'
                and config.tvalue = id) as 'confID',
-- если ИДа для такой сети нет, то увеличиваем счетчик
    (ifnull(@ival, @currid:=@currid + 1)) as confNewID,
-- снова: если ИДа нет, то формируем новое значение параметра
-- счетчик уже увеличен на предыдущем шаге
    (if(not isnull(@ival),
        NULL,
        (concat('ID_IPDISCOVER_', @currid)))) as confNewNAME
FROM
    ocsweb.subnet) as lookforer
-- выбираем только те, которых еще нет в конфиге 
where not isnull(confnewNAME);

Комментариев нет:

Отправить комментарий

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