Toolkit ошибки - не дает установить новый модуль?

Добрый день товарищи.
С учетом того, что я только приступил к изучению темы, внесение изменений в iTop посредством модулей и расширения, в принципе натолкнулся на следующюю ситацию, для меня не понятную. Разъясните, пожалуйста.
Вебсервер один на всех.
Установлен отдельный экземпляр iTop 3.1 для разработки, не установлено ни одного расширения, в отдельном каталоге.

  1. установил толкит крайней доступной версии
  2. Создал расширение согласно инструкции генератором с сайта.
    При предварительном рассмотрении файла выявил различия с инструкцией.
    XML файл сгенерированный имеет большее количество тегов, нежели указано в инстукции.
  3. Установил расширение.
  4. запустил toolkit. Провел “check consistency” - В Выводе 15 несоответствий только по классам. Имеются по несколько несоответствий внутри классов.
  5. Внес изменения согласно инструкции. - привел свой xml файл в точное соответствие с инструкцией.
    6)установил расширение
  6. запустил toolkit. Провел “check consistency” - Отличий от состояния в 4) нет никаких.
  7. “Check DBschema”
    Имеются ошибки “неправильные типы”
    Не сгенерирован скрипт вносящий изменения в таблицу согласно инструкции.

Собственно вопрос - процедура установки расширения не отработала по причине ошибок выявленных tookit или все таки у меня руки пахнут?

Добрый день,

2… Это нормально. Вероятно, инструкция писалась для более старых версий, в новых теги добавлялись, но инструкция при этом не редактировалась. Пустые теги на код не влияют.
4… Вроде как несоответствия в Data Model Consistency - это известная ошибка, о которой знает команда iTop и которую они пока не собираются исправлять. Можете об этом почитать здесь. Лично у меня такие же несоответствия имеются, но при этом всё работает.
7… Вот тут уже нужно больше подробностей, либо текст, либо скриншот ошибки, т.к. здесь тоже есть одна ошибка, которую можно игнорировать (инфа тут).

P.S. я, если что, сам этим занимаюсь недавно, так что на экспертное мнение не претендую, просто пытаюсь помочь чем могу)

Благодарю за отклик!
По 7)

Class TriggerOnObject

  • field ‘target_class’ in table ‘priv_trigger_onobject’ has a wrong type: found varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci DEFAULT 'ApplicationSolution' while expecting VARCHAR(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci DEFAULT 'FAQ'

ALTER TABLE priv_trigger_onobject CHANGE target_class target_class VARCHAR(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci DEFAULT ‘FAQ’

Class SynchroDataSource

  • field ‘scope_class’ in table ‘priv_sync_datasource’ has a wrong type: found varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci DEFAULT 'lnkTriggerAction' while expecting VARCHAR(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci DEFAULT 'AuditDomain'

ALTER TABLE priv_sync_datasource CHANGE scope_class scope_class VARCHAR(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci DEFAULT ‘AuditDomain’

Class SynchroAttLinkSet

  • field ‘attribute_qualifier’ in table ‘priv_sync_att_linkset’ has a wrong type: found varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci DEFAULT '\'\'' while expecting VARCHAR(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci DEFAULT '\''

ALTER TABLE priv_sync_att_linkset CHANGE attribute_qualifier attribute_qualifier VARCHAR(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci DEFAULT ‘’'Этот текст будет скрыт

Судя по ссылке - на эту Class SynchroAttLinkSet - не влияет на развертывание модулей.

Пояснение/Уточнение
Не сгенерирован скрипт вносящий изменения в таблицу согласно инструкции.
Соответственно не появляется поле NOTE в таблице Server

А вы зависимости указали при создании расширения генератором с сайта? Потому что без определения зависимотсей ваш XML код не будет отрабатывать.

Как ни печально признавать - Но руки пахнут((.
Указал, вот в такой форме
// Setup
//
‘dependencies’ => array(
‘itop-config-mgmt/2.x’
),
Исправил на
// Setup
//
‘dependencies’ => array(
‘itop-config/2.x’
),

и все заработало.

Огромное спасибо за пинки в правильном направлении!

а почему так?

  1. First search the tags you want to alter or graft onto, in the modules under <my-itop>/datamodels/2.x/ . Your module will be dependent on those found modules.

  2. Then retrieve for the modules you depends on: name and version in the file module.xxxx.php . For modules which are part if iTop Community, the module version follows the major iTop version[quote="

Кстати - вообще помог ваш совет в другой ветке

По поводу названия модулей - itop-config-mgmt - не сработало.
Изменив на itop-config - сработало.

По поводу /2x нашел на каком -то форуме англоязычном. Не сработало, но и не мешало. По этой причине и оставил.

Есть рекомендации?

В dependencies нужно указать модули, модель даных которых изменяется в текущем модуле. Пример: хотите добавить новый статус в WokrOrder, ищите модуль, в котором класс WorkOrder объявляется изначально (_delta=“define”), и его указываете в зависимостях.

Если ставится пустой модуль, никакие зависимости ему не нужны.

itop-config-mgmt и itop-config это разные модули. Первый это процесс Управления конфигурациями и CMDB, а второй – редактор конфига самого айтопа.

Спасибо, за разъяснения! Вроде очевидно, но пока строил в голове картинку этот момент упустил.
Да, дошло до меня, что отработало и как.
Так как раздумья и эксперименты продолжаются. тему хотел бы оставить не закрытой.
Возможно?

**Казалось бы нащупал тропинку и можно двигаться дальше… **
Но нет))… в первой версии модуля в списке создаваемых КЕ отражался новый класс.
Из-за многочисленных экспериментов с XML структурой запутался. испортил. и по новой.

В толките ошибок нет. все ровненько ложится в itop. Но в списках КЕ нового класса hosting нет хоть тресни.
Включил уровень логирования трейс в надежде поймать разницу. Не показывает ошибок.
Никак не могу взять в толк почему не отражается в списках.
Прошу подсказки в каком направлении копать.

< Что-то код никак нормально не выложу… - не понимаю ((( устал что ле

А вот и сам код...
<?xml version="1.0" encoding="UTF-8"?>
<itop_design xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" version="1.0">
  <constants>
  </constants>
  <classes>
    <class id="Hosting" _delta="define">
      <parent>FunctionalCI</parent>
      <properties>
        <category>bizmodel,searchable</category>
        <abstract>true</abstract>
        <key_type>autoincrement</key_type>
        <db_table>hosting</db_table>
        <db_key_field>id</db_key_field>
        <db_final_class_field/>
        <naming>
          <attributes>
            <attribute id="name"/>
          </attributes>
          <complementary_attributes>
            <attribute id="organization_name"></attribute>
          </complementary_attributes>
        </naming>
        <fields_semantic>
          <state_attribute>status</state_attribute>
        </fields_semantic>
        <style>
          <icon>../../images/icons/icons8-software-instance.svg</icon>
        </style>
        <reconciliation>
          <attributes>
            <attribute id="name"/>
            <attribute id="org_id"/>
            <attribute id="organization_name"/>
            <attribute id="finalclass"/>
          </attributes>
        </reconciliation>
        <obsolescence>
          <condition><![CDATA[status = 'inactive']]></condition>
        </obsolescence>
      </properties>
      <fields>
        <field id="cpu" xsi:type="AttributeString">
          <sql>cpu</sql>
          <default_value/>
          <is_null_allowed>true</is_null_allowed>
        </field>
        <field id="ram" xsi:type="AttributeString">
          <sql>ram</sql>
          <default_value/>
          <is_null_allowed>true</is_null_allowed>
        </field>
        <field id="software_id" xsi:type="AttributeExternalKey">
          <filter><![CDATA[SELECT Software WHERE type = :this->finalclass]]></filter>
          <sql>software_id</sql>
          <target_class>Software</target_class>
          <is_null_allowed>true</is_null_allowed>
          <on_target_delete>DEL_MANUAL</on_target_delete>
        </field>
        <field id="software_name" xsi:type="AttributeExternalField">
          <extkey_attcode>software_id</extkey_attcode>
          <target_attcode>name</target_attcode>
        </field>
        <field id="location_id" xsi:type="AttributeExternalKey">
          <filter><![CDATA[SELECT l FROM Location AS l JOIN Organization AS root ON l.org_id=root.id JOIN Organization AS child ON child.parent_id BELOW root.id WHERE child.id= :this->org_id]]></filter>
          <dependencies>
            <attribute id="org_id"/>
          </dependencies>
          <sql>location_id</sql>
          <target_class>Location</target_class>
          <is_null_allowed>true</is_null_allowed>
          <on_target_delete>DEL_MANUAL</on_target_delete>
          <allow_target_creation>false</allow_target_creation>
        </field>
        <field id="location_name" xsi:type="AttributeExternalField">
          <extkey_attcode>location_id</extkey_attcode>
          <target_attcode>name</target_attcode>
        </field>
        <field id="path" xsi:type="AttributeString">
          <sql>path</sql>
          <default_value/>
          <is_null_allowed>true</is_null_allowed>
        </field>
        <field id="status" xsi:type="AttributeEnum">
          <values>
            <value id="active">
              <code>active</code>
              <style>
              </style>
            </value>
            <value id="inactive">
              <code>inactive</code>
              <style>
              </style>
            </value>
          </values>
          <sql>status</sql>
          <default_value/>
          <is_null_allowed>true</is_null_allowed>
          <display_style>list</display_style>
        </field>
      </fields>
      <presentation>
        <details>
          <items>
            <item id="name">
              <rank>10</rank>
            </item>
            <item id="org_id">
              <rank>20</rank>
            </item>
            <item id="status">
              <rank>30</rank>
            </item>
            <item id="business_criticity">
              <rank>40</rank>
            </item>
            <item id="software_id">
              <rank>60</rank>
            </item>
            <item id="path">
              <rank>80</rank>
            </item>
            <item id="move2production">
              <rank>90</rank>
            </item>
            <item id="description">
              <rank>100</rank>
            </item>
            <item id="contacts_list">
              <rank>110</rank>
            </item>
            <item id="documents_list">
              <rank>120</rank>
            </item>
            <item id="applicationsolution_list">
              <rank>130</rank>
            </item>
          </items>
        </details>
        <default_search>
          <items>
            <item id="friendlyname">
              <rank>10</rank>
            </item>
            <item id="org_id">
              <rank>30</rank>
            </item>
          </items>
        </default_search>
        <search>
          <items>
            <item id="name">
              <rank>10</rank>
            </item>
            <item id="org_id">
              <rank>20</rank>
            </item>
            <item id="business_criticity">
              <rank>30</rank>
            </item>
            <item id="move2production">
              <rank>40</rank>
            </item>
          </items>
        </search>
        <list>
          <items>
            <item id="finalclass">
              <rank>10</rank>
            </item>
            <item id="org_id">
              <rank>20</rank>
            </item>
            <item id="business_criticity">
              <rank>30</rank>
            </item>
            <item id="software_id">
              <rank>50</rank>
            </item>
          </items>
        </list>
      </presentation>
      <methods/>
    </class>
  </classes>
<menus>
</menus>
</itop_design>

Да, по такому коду понять что-то очень сложно))

Честно пионерское раз 6 пытался нормализовать - не вышло(

ну не знаю, пустую строку сверху добавил, выделил код, нажал кнопку </> и всё.