Как связать экземпляры в xmlCIM?

Я использую общую информационную модель (CIM) для моделирования инфраструктуры. Модель описывает ряд классов для разных ИТ-систем. Он всеобъемлющий, так что он состоит из последовательных иерархий, а не из одной. Например, чтобы представить физическое серверное шасси, вы определяете экземпляр CIM_Chassis. Затем, чтобы представить логический сервер, который будет работать на этом оборудовании, вы определяете экземпляр CIM_ComputerSystem. Затем вы должны связать их с экземпляром CIM_SystemPackaging, чтобы заметить, что один предоставляется другим. Ни в одном классе нет свойства, где вы можете установить одно свойство другого. Это два отдельных класса, связанных третьим. Модель будет описана в XML, проверена текущей схемой XML для CIM. Я не понимаю из XSD для CIM_SystemPackaging, какой контент он должен содержать.

Этот XML демонстрирует проблему (шасси является псевдонимом для CIM_Chassis.xsd и т. Д.):

<chassis:CIM_Chassis>
  <chassis:CreationClassName>CIM_Chassis</chassis:CreationClassName>    
  <chassis:Manufacturer>Cisco</chassis:Manufacturer>
  <chassis:Model>Catalyst 6000</chassis:Model>
  <chassis:Tag>6548431</chassis:Tag>
</chassis:CIM_Chassis>

<computer:CIM_ComputerSystem>
  <computer:CreationClassName>CIM_ComputerSystem</computer:CreationClassName>
  <computer:Name>Switch1</computer:Name>
</computer:CIM_ComputerSystem>

<sp:CIM_SystemPackaging>
  <sp:Antecedent>?</sp:Antecedent>
  <sp:Dependent>?</sp:Dependent>
</sp:CIM_SystemPackaging>

Что я должен положить, где? являются? В документации по схеме ничего не сказано, и в Интернете, похоже, нет примеров XML. Это не подтверждает:

E [Xerces] cvc-complex-type.2.4.b: The content of element 'sp:Antecedent' is not complete. One of '{WC[##other:"http://schemas.dmtf.org/wbem/wscim/1/common",""]}' is expected.

В схеме Dependent и Antecedent имеют тип cimReference, который:

<xs:complexType name="cimReference">
  <xs:sequence>
    <xs:any namespace="##other" maxOccurs="unbounded" processContents="lax"/>
  </xs:sequence>
  <xs:anyAttribute namespace="##any" processContents="lax"/>
</xs:complexType>

Так что это не очень мне помогает. Я хотел бы знать, если я собираюсь встроить экземпляр в антецедент:

<sp:CIM_SystemPackaging>
  <sp:Antecedent>
    <chassis:CIM_Chassis>
      ...etc...
    </chassis:CIM_Chassis>
  </sp:Antecedent>
  <sp:Dependent>
    <computer:CIM_ComputerSystem>
      ...etc...
    </computer:CIM_ComputerSystem>
  </sp:Dependent>
</sp:CIM_SystemPackaging>

Это подтверждает ОК, но, похоже, не в масштабе. Поскольку для каждого элемента аппаратного обеспечения внутри шасси может существовать объект, и все они должны быть связаны с шасси аналогичными классами ассоциации, это быстро станет невозможным. Это также, кажется, идет вразрез со всей моделью ассоциации. Кто-нибудь достаточно знаком с CIM, чтобы объяснить, как он должен работать?

2 ответа

Решение

В конце концов я нашел ниже в DSP0230:

"Элемент xs:any в этом определении [cim:cimReference] представляет собой структуру одной транспортной ссылки, которая однозначно идентифицирует местоположение, в которое могут быть направлены сообщения для объекта, на который имеется ссылка. Эта структура может быть либо единственным элементом, который выражает полный транспортная ссылка или последовательность элементов, если транспортная ссылка требует нескольких элементов для однозначной идентификации местоположения ".

Приведенный пример:

<AssociatedComponent xmlns:wsa="http://www.w3.org/2005/08/addressing">
  <wsa:Address>. . .</wsa:Address>
</AssociatedComponent>

Учитывая, что CIM был предназначен для управления через сеть, а не для статического представления, имеет смысл, что это будет ссылка на что-то другое, а не на что-то другое. Я пришел к выводу, что могу поместить все, что захочу, и мне понадобится логика моего приложения для обработки ссылок. Поскольку большинство объектов имеют элемент InstanceID, я буду использовать его в качестве эталонной цели:

<chassis:CIM_Chassis>
  <chassis:CreationClassName>CIM_Chassis</chassis:CreationClassName>    
  <chassis:InstanceID>uniqueid1</chassis:InstanceID>
  <chassis:Manufacturer>Cisco</chassis:Manufacturer>
  <chassis:Model>Catalyst 6000</chassis:Model>
  <chassis:Tag>6548431</chassis:Tag>
</chassis:CIM_Chassis>

<computer:CIM_ComputerSystem>
  <computer:CreationClassName>CIM_ComputerSystem</computer:CreationClassName>
  <computer:InstanceID>uniqueid2</computer:InstanceID>
  <computer:Name>Switch1</computer:Name>
</computer:CIM_ComputerSystem>

<sp:CIM_SystemPackaging>
  <sp:Antecedent>
    <chassis:InstanceID>unqiueid1</chassis:InstanceID>
  </sp:Antecedent>
  <sp:Dependent>
    <computer:InstanceID>unqiueid2</computer:InstanceID>
  </sp:Dependent>
</sp:CIM_SystemPackaging>

Несмотря на то, что вы отказались от CIM, я чувствовал, что должен ответить на этот вопрос в интересах других.

(1) На ваш вопрос, какое значение поместить в ассоциацию: вы нашли правильный ответ, значение является ссылкой на экземпляр CIM, который в случае XML, определенного в DSP0230, использует WS-адресацию. Общие понятия CIM, включая ссылки, описаны в DSP0004.

(2) При использовании CIM для статического представления ИТ-элементов: CIM (модель) способна сделать это. Однако вам нужно будет присвоить значения ключей представленным экземплярам CIM (как вы это сделали). В основном вы симулировали бы то, что происходит во время выполнения, когда вы извлекаете экземпляры CIM с сервера WBEM (такого как WMI или другие).

(3) У вас есть выбор форматов представления. Вы использовали WS-CIM, описанный в DSP0230, у которого есть свойство, что его XSD зависит от модели. Это может быть хорошо или плохо для вас, в зависимости от того, что вы хотите сделать. Существует также CIM-XML (DSP0201, DSP8044), который имеет фиксированную схему XML (но, конечно, из-за этого более раздутый, чем WS-CIM). Более свежее представление JSON, описанное в DSP0211, предназначено только для протокольного представления операций WBEM, оно не поддерживает представление схемы CIM.

(4) В комментариях к вашему ответу, где вы сказали, что CIM сложен: если вы пытаетесь понять модели CIM только из их определения схемы CIM, это может иметь свои собственные трудности. Существует понятие, называемое "профили управления". Они точно определяют, как классы в схеме CIM используются для конкретных областей управления. Смотрите профили управления, опубликованные DMTF.

Энди

Другие вопросы по тегам