3

我正在使用通用信息模型 (CIM)为基础设施建模。该模型描述了不同 IT 系统的多个类。它是全面的,因此它由一系列层次结构而不是一个层次结构组成。例如,要表示一个物理服务器机箱,您可以定义一个 CIM_Chassis 实例。然后,为了表示将在该硬件上运行的逻辑服务器,您定义了一个 CIM_ComputerSystem 实例。然后您应该将两者与 CIM_SystemPackaging 的一个实例相关联,以注意其中一个是由另一个提供的。任何一个类中都没有可以将一个设置为另一个的属性的属性。它们是两个独立的类,由第三个相关联。该模型将使用 XML 进行描述,并通过当前用于 CIM 的 XML 模式进行验证。我不了解 CIM_SystemPackaging 的 XSD,它应该包含什么内容。

此 XML 演示了该问题(chassis 是 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.

在 Schema 中,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 足够熟悉来解释它应该如何工作?

4

2 回答 2

1

我最终在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>
于 2012-11-30T13:43:58.747 回答
0

尽管您放弃了 CIM,但我觉得我应该为他人的利益回答这个问题。

(1) 关于将什么值放入关联的问题:您找到了正确答案,该值是对 CIM 实例的引用,在 DSP0230 中定义的 XML 使用 WS-Addressing 的情况下。DSP0004中描述了 CIM 的一般概念,包括参考资料。

(2) 关于使用 CIM 来静态表示 IT 元素:CIM(模型)能够做到这一点。但是,您需要将键值分配给表示的 CIM 实例(就像您所做的那样)。当您从 WBEM 服务器(例如 WMI 或其他服务器)检索 CIM 实例时,您基本上可以模拟运行时发生的情况。

(3) 您可以选择表示格式。您使用了 DSP0230 中描述的 WS-CIM,它具有其 XSD 依赖于模型的属性。这对你来说可能是好事也可能是坏事,取决于你想做什么。还有具有固定 XML 模式的 CIM-XML(DSP0201、DSP8044)(但当然比 WS-CIM 更臃肿,正因为如此)。DSP0211 中描述的最新 JSON 表示仅用于 WBEM 操作的协议表示,它不支持表示 CIM 模式。

(4) 在您对您说 CIM 很复杂的回答的评论中:如果您试图仅从 CIM 模式定义中理解 CIM 模型,那可能有其自身的困难。有一个概念叫做“管理配置文件”。它们准确定义了 CIM 模式中的类如何用于特定的管理领域。请参阅DMTF 发布的管理配置文件

安迪

于 2013-05-25T07:04:43.163 回答