Удаление неиспользуемых типов КЕ

Продолжение обсуждения из Изменение полей описания тикета:

@alex4561
Нода в данном контексте - узел XML структуры.
Например, чтобы удалить класс UserRequest, нужно в datamodel.my-module.xml внутри <classes> указать:

<class id="UserRequest" _delta="delete">
</class>

Аналогично с другими классами КЕ.

Спасибо. Я так и подумал, но решил уточнить сей вопрос=)

ToolKit при запуске дает вот такое сообщение. Что за каталог он пытается создать?Все перерыл… система CentOS 7

Error: Failed to create directory ‘’, please check the rights of the web server

проверь права на корневую папку itop, он в ней создаст несколько папок и в conf

Привет.
Что-то у меня не получается удалить класс Phone, Выставил _delta=“delete”

<class id="Phone" _delta="delete">
      <parent>TelephonyCI</parent>
      <properties>
        <category>bizmodel,searchable</category>
        <abstract>false</abstract>
        <key_type>autoincrement</key_type>
        <db_table>phone</db_table>
        <db_key_field>id</db_key_field>
        <db_final_class_field/>

в toolkit выдается ошибка загрузки модуля

Dumping target doc - looking for 'Phone'

An error occured while processing the PHP files of the data model:

Error loading module "itop-endusers-devices": could not find node for class(id:Phone) - Loaded modules: authent-external,authent-local,itop-attachments,itop-bridge-virtualization-storage,itop-config-mgmt,itop-datacenter-mgmt,itop-endusers-devices

Check the PHP files describing the data model before running the toolkit again !
    <naming>

Где еще нужно, что то сделать? мне нужно удалить типы принтер, планшет, телефон, моб.тел.
Подскажите пожалуйста

В каком файле выставлен <class id="Phone" _delta="delete">?
Полагаю, что в itop/datamodels/2.x/itop-endusers-devices/datamodel.itop-enduser-devices.xml.
Если внимательно посмотрите сообщение №2, то увидите, что удалять классы нужно в datamodel.my-module.xml. То есть сначала нужно создать свой модуль, а затем в него добавить:

<class id="Phone" _delta="delete">
</class>

Логика такая: сначала iTop собирает стандартную модель данных из itop/datamodels/2.x/, а затем применяет к ней изменения из itop/extensions/. Сейчас же вы просите iTop удалить класс, который он ещё не создал, и он на это вполне законно ругается.

Тема про собственные модули тут.

Я правильно понимаю, что интерфейса для управления Типами KE (создание, удаление, изменение) нет?
По аналогии как Организациями, Контактами и надо всё делать вручную?

@DenRassk изменения модели данных (новые типы КЕ, связи, удаление и добавление полей) делаются через собственные модули. Добавление и удаление контактов не является изменением модели данных.
Вот тема по модулям: Собственные модули

Решил удалить класс IP-телефон.
С помощью формы на странице https://wiki.openitop.org/doku.php?id=2_1_0:customization:start#creating_a_module создал модуль "Delet_KE"
По пути c:\inetpub\wwwroot\datamodels\2.x\itop-endusers-devices\ нашёл файл datamodel.itop-enduser-devices.xml и в нём описание класса IPPhone, скопировал его целиком в файл c:\inetpub\wwwroot\extensions\delet_ke\datamodel.delet_ke.xml в секцию .
Пробежался ToolKitом, проблем нет, проапгрейдил им же модель - в общем всё нормально.
Снял галку “только для чтения” с файла c:\inetpub\wwwroot\conf\production\config-itop.php и запустил http://itop/setup … в самом конце добрался до своего модуля, выбрал его? нажал Install и … словил ошибку “Error loading module “Delet_KE”: could not find node for class(id:IPPhone) - Loaded modules: Delet_KE”.
Что за "node " он не может найти в классе IPPhone?

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

vladimir
24 фев

В каком файле выставлен ?
Полагаю, что в itop/datamodels/2.x/itop-endusers-devices/datamodel.itop-enduser-devices.xml.
Если внимательно посмотрите сообщение №2, то увидите, что удалять классы нужно в datamodel.my-module.xml. То есть сначала нужно создать свой модуль, а затем в него добавить:

Логика такая: сначала iTop собирает стандартную модель данных из itop/datamodels/2.x/, а затем применяет к ней изменения из itop/extensions/. Сейчас же вы просите iTop удалить класс, который он ещё не создал, и он на это вполне законно ругается.

Во-первых, сначала устанавливаем пустой модуль через itop/setup, потом начинаем в нем что-то править. До этого твоего модуля нет в конфигурации iTop, toolkit его не видит, следовательно и изменения в нем не применяет.

Во-вторых, чтобы удалить ноду (узел XML структуры, class, field, properties и т.д.), не нужно копировать всё её содержимое в свой модуль. Достаточно указать сам узел, id и delta.

<class id="IPPhone" _delta="delete">
</class>

По class и id iTop однозначно определит, что ему нужно удалить.

Ещё раз, чтобы что-то удалить, модель данных модуля должна содержать такой код:

<?xml version="1.0" encoding="UTF-8"?>
<itop_design xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" version="1.0">
  <classes>
    <class id="IPPhone" _delta="delete">
    </class>
  </classes>
<menus>
</menus>
</itop_design>

Естественно, модель данных iTop к моменту удаления должна содержать удаляемый класс. В данном случае должен быть установлен модуль End User Devices. Кроме этого, в разделе dependencies твоего модуля нужно указать зависимости itop-config-mgmt/2.0.0,itop-endusers-devices/2.0.0. Это даст iTop’у понять, что твой модуль нужно собирать после указанных зависимостей.

igsao10
Я прочитал сообщение № 2 и все действия провожу в созданном мною новом модуле datamodel.delet_ke.xml, который лежт по пути :\inetpub\wwwroot\extensions\delet_ke\ (о чём собственно и написал в своём сообщении).

vladimir
Я ведь хочу удалить уже имеющийся в iTop класс IPPhone… что значит его ещё нет в iTop? Если можно - пошагово - с самого начала что и как делать.
Большое спасибо

Противоречишь сам себе))
Ещё раз.

  1. Есть стандартная модель данных модуля в itop\datamodels.
  2. Есть модель данных твоего модуля в itop\extensions.
  3. А есть рабочая модель данных в itop\env-production.

Рабочая модель получается путем применения твоей модели к стандартной. Происходит это именно в таком порядке. Для того, чтобы этот порядок соблюдался, в своем модуле нужно указать, от каких стандартных моделей он зависит. Если ты хочешь сделать _delta="delete" на какой-то ноде, то эта нода должна быть предварительно создана через _delta="define", а происходит это создание в стандартной модели (обычно).

Пошагово:

  1. создаем пустой модуль, в dependencies указываем itop-config-mgmt/2.0.0,itop-endusers-devices/2.0.0;
  2. устанавливаем модуль через setup;
  3. вставляем в datamodel.some-module.xml код из сообщения 12 этой темы;
  4. патчим через toolkit.

Описываю процедуру удаления ненужного типа КЕ шаг-шагом:

  1. создаём (генерим) пустой модуль на странице https://wiki.openitop.org/doku.php?id=2_1_0:customization:start#creating_a_module (у меня он называется “Delet_KE”)

  2. Распаковываем архив полученный в п.1 в папку c:\inetpub\wwwroot\extensions\

  3. В раздел dependencies файла module.delet_ke.php всталяем, между скобок и в одинарных апострафах, текст ‘itop-config-mgmt/2.0.0,itop-endusers-devices/2.0.0’

  4. Запускаем http://itop/setup и нажимаем Далее пока не увидим свой модуль и ставим на нём галку тем самым устанавливаем модуль свой модуль “Delet_KE”

  5. В файле файл datamodel.itop-enduser-devices.xml (лежит в папке c:\inetpub\wwwroot\datamodels\2.x\itop-endusers-devices\ ) находим описание не нужного мне типа КЕ - IPPone, выделяем и копируем из него код:

     <class id="Phone" _delta="define">
    

и вставляем его в мой файл datamodel.delet_ke.xml (лежит в папке c:\inetpub\wwwroot\extensions\delet_ke\ ) между , после чего меняем define на delete и в конце дописываем</class>.
Должно получиться:

 <classes> <class id="IPPhone" _delta="delete"> </class>  </classes>
  1. Запускаем http://itop/toolkit , переходим на вторую страницу iTop update и нажимаем Refresh + Update iTop Code
  2. УРА! У меня больше нет IP-телефона!

Есть три вопроса:

  1. Я правильно понимаю, что я могу вписать сразу все не нужные мне типы КЕ последовательно указав их между classes?
  2. Где хранятся IDшники остальных типов КЕ (у меня в файле их только 8, а в iTop показывает 30)?
  3. Можно ли при создании новых типов брать как шаблон имеющиеся?

Ответы на вопросы:

  1. Да.
  2. В моделях данных остальных модулей.
  3. Да.

Владимир, спасибо за ответы.
Перед тем как удалять устройства, решил свести их в табличку вида:
Название типа КЕ (из меню) - class_id (из модуля)
и… опять у меня затык…

(IP-телефона нет, так как мы его удалили выше парой сообщений).
Делал очень просто - выписал все class_id из всех datamodel.itop-ИМЯ_МОДУЛЯ-mgmt.xml и пошёл смотреть перевод в соответствующем ru.dict.itop-ИМЯ_МОДУЛЯ-mgmt.php
Вспоткнулся на первом же datamodel.itop-enduser-devices.xml … у него нет перевода… то есть он не должен попадать в список так как в списке типов КЕ нет ни одного на английском языке.
Однако я ведь удалил из списка IP-телефон - IPPhone и он был в списке на русском языке… а нашёл я его в ru.dict.itop-config-mgmt.php… особенности руссификации или так и должно быть?
Дальше был class_id=TelephonyCI, перевод которого в ru.dict.itop-config-mgmt.php звучит как “Телефония” … блин, но такого нет в списке (см. выше)
И как оказалось позже таких class_id, которых нет в списке типов КЕ показываемом в iTop достаточно много.

Собственно вопрос - где определяется какие типы КЕ попадают в этот список?
Зачем мне это надо? Да вот думаю, что вместо удаления ненужных типов КЕ можно их просто прятать (не показывать в меню типов КЕ) и всё.
Можно так сделать?

Пока отвечают… пишу дальше… в datamodel.itop-config-mgmt.xml отыскал секцию <field id="type" xsi:type="AttributeEnum"> <values> <value id="NetworkDevice">NetworkDevice</value> <value id="Server">Server</value> <value id="SANSwitch">SANSwitch</value> <value id="StorageSystem">StorageSystem</value> <value id="Rack">Rack</value> <value id="Enclosure">Enclosure</value> <value id="PC">PC</value> <value id="Tablet">Tablet</value> <value id="Phone">Phone</value> <value id="MobilePhone">MobilePhone</value> <value id="Printer">Printer</value> <value id="DiskArray">DiskArray</value> <value id="NAS">NAS</value> <value id="TapeLibrary">TapeLibrary</value> <value id="IPPhone">IPPhone</value> <value id="Peripheral">Peripheral</value> <value id="PowerSource">PowerSource</value> <value id="PDU">PDU</value> </values>
и всё в ней хорошо, да только не все типы КЕ присутствуют :frowning:
“Будем искать дальше” (Цитата из фильма “Бриллиантовая рука” :wink: )

Зачем так сложно? Таблицы, классы, переводы… голову сломаешь. Идешь в Инструменты админа → Модель данных, и вот перед тобой все классы и их id.

Если обратишь внимание, файл английского языка тоже пустой.

Язык не при чем. У любой сущности в системе есть системное название (id), которое при отображении просто заменяется на значение из словаря нужного языка.

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

Нельзя. Можно просто не обращать на них внимания, делать вид, будто их не существует. Это будет самое верное решение (на мой взгляд, конечно). Добавлять новые единицы обычно требуется не так часто, чтобы уделять такое внимание созданию специального удаляющего модуля. Лучше настрой дашборды так, чтобы там были только нужные КЕ, а затем сделай эти настройки дашборда настройками по умолчанию.

Отыскал ты её о в объявлении класса Модель. Не трогай ничего) Всех типов КЕ там и и не должно быть, а только те, у которых есть поле выбора модели.