Previous section.

Systems Management: Common Information Model (CIM)
Copyright © 1998 The Open Group

Naming

Overview

Because CIM is not bound to a particular technology or implementation, it promises to facilitate sharing management information between a variety of management platforms. The CIM Naming mechanism was defined to address enterprise-wide identification of objects, as well as the sharing of management information.

CIM Naming addresses these requirements:

  1. Ability to locate and uniquely identify any object in an enterprise:

  2. Allow sharing of objects and instance data among management platforms:

  3. Facilitate move operations between object trees (including within a single management platform):

    The KEY qualifier is the CIM Metamodel mechanism used to identify the properties that uniquely identify an instance of a class (and indirectly an instance of an association). CIM Naming enhances this base capability by:

Background

CIM MOF files can contain definitions of instances, classes or both, as illustrated in Definitions of Instances and Classes .



Figure: Definitions of Instances and Classes

MOF files can be used to populate a technology that understands the semantics and structure of CIM. When a MOF file is consumed by a particular implementation, there are two operations that are actually being performed, depending on the file's content. First, a compile or definition operation is performed to establish the structure of the model. Second, an import operation is performed to insert instances into the platform or tool.

Once the compile and import are completed, the actual instances are manipulated using the native capabilities of the platform or tool. In other words, in order to manipulate an object (for example, change the value of a property), one must know the type of platform the information was imported into, the APIs or operations used to access the imported information, and the name of the platform instance that was actually imported. For example, the semantics become:

Set the Version property of the Logical Element object with Name="Cool" in the relational database named LastWeeksData to "1.4.0".

The contents of a MOF file are loaded into a namespace that provides a domain (in other words, a container), in which the instances of the classes are guaranteed to be unique per the KEY qualifier definitions. The term namespace is used to refer to an implementation that provides such a domain.

Namespaces can be used to:

Another viable operation is exporting from a particular management platform - see Exporting to MOF . Essentially, this operation creates a MOF file for all or some portion of the information content of a platform.



Figure: Exporting to MOF

For example, information is exchanged when the source system is of type Mgmt_X and its name is EastCoast. The export produces a MOF file with the circle and triangle definitions and instances 1, 3, 5 of the circle class and instances 2, 4 of the triangle class. This MOF file is then compiled and imported into the management platform of type Mgmt_ABC with the name AllCoasts. See Information Exchange .



Figure: Information Exchange

The import operation involves storing the information in a local or native format of Mgmt_ABC so its native operations can be used to manipulate the instances. The transformation to a native format is shown in Information Exchange by wrapping the five instances in hexagons. The transformation process must maintain the original keys.

Management Tool Responsibility for Export Operation
The management tool must be able to create unique key values for each distinct object it places in the MOF file.

For each instance placed in the MOF file, the management tool must maintain a mapping from the MOF file keys to the native key mechanism.

Management Tool Responsibility for Import Operation
The management tool must be able to map the unique keys found in the MOF file to a set of locally-understood keys.

Weak Associations: Supporting Key Propagation

CIM provides a mechanism to name instances within the context of other object instances. For example, if a management tool is handling a local system, then it can refer to the C drive or the D drive. However, if a management tool is handling multiple machines, it must refer to the C drive on machine X and the C drive on machine Y. In other words, the name of the drive must include the name of the hosting machine. CIM supports the notion of weak associations to specify this type of key propagation.

A weak association is defined using a qualifier. For example:

Qualifier Weak: boolean = false, Scope(reference), Flavor(DisableOverride);

The key(s) of the referenced class includes the key(s) of the other participants in the WEAK association. This situation occurs when the referenced class identity depends on the identity of other participants in the association.

Usage Rule: This qualifier can only be specified on one of the references defined for an association. The Weak referenced object is the one that depends on the other object for identity.

Example of Weak Association shows an example. There are three classes: ComputerSystem, OperatingSystem and Local User. The Operating System class is weak with respect to the Computer System class, since the runs association is marked weak. Similarly, the Local User class is weak with respect to the Operating System class, since the association is marked weak.



Figure: Example of Weak Association

In the context of a weak association definition, the Computer System class is a scoping class for the Operating System class, since its keys are propagated to the Operating System class. The Computer System and the Operating System classes are both scoping classes for the Local User class, since the Local User class gets keys from both. Finally, the Computer System is referred to as a Top Level Object (TLO) because it is not weak with respect to any other class. The fact that a particular class is a top-level object is inferred because no references to that class are marked with the WEAK qualifier. In addition, Top Level Objects must have the possibility of an enterprise-wide, unique key. An example may be a computer's IP address in a company's enterprise-wide IP network. The goal of the TLO concept is to achieve uniqueness of keys in the model path portion of the object name. In order to come as close as possible to this goal, TLO must have relevance in an enterprise context.

Objects in the scope of another object can in turn be a scope for other objects; hence, all model object instances are arranged in directed graphs with the Top Level Object's (TLO's) as peer roots. The structure of this graph - in other words, which classes are in the scope of another given class - is defined as part of CIM by means of associations qualified with the WEAK qualifier.

Referencing Weak Objects
A reference to an instance of an association includes the propagated keys. The properties must be qualified by the scoping class name when the property name is not unique. This implies the following for the association in the previous example:
instance of Acme_has
{
  anOS = "ComputerSystem.Name=UnixHost,OperatingSystem.Name=acmeunit";
  aUser = "ComputerSystem.Name=UnixHost,OperatingSystem.Name=acmeunit,uid=33";
};


Naming CIM Objects

Since CIM allows for multiple implementations, it is not sufficient to think of the name of an object as just the combination of properties that have the KEY qualifier. The name must also identify the implementation that actually hosts the objects. The object name consists of the Namespace Path, which provides access to a CIM implementation, plus the Model Path, which provides full navigation within the CIM schema. The namespace path is used to locate a particular name space. The details of the namespace path are dependent on a particular implementation. The model path is the concatenation of the properties of a class that are qualified with the KEY qualifier. When the class is weak with respect to another class, the model path includes all key properties from the scoping objects.

Namespace Path

A Namespace path references a namespace within an implementation that is capable of hosting CIM objects.

A Namespace path resolves to a namespace hosted by a CIM-Capable implementation (in other words, a CIM Object Manager). Unlike the Model Path, the details of the Namespace path are implementation-specific. Therefore, the Namespace path provides two pieces of information: it identifies the type of implementation or namespace type, and it provides a handle that references a particular implementation or namespace handle.

Namespace Type
The namespace type classifies or identifies the type of implementation. The provider of such an implementation is responsible for describing the access protocol for that implementation. This is analogous to specifying http or ftp in a browser.

Fundamentally, a namespace type implies an access protocol or API set that can be used to manipulate objects. These APIs would typically support:

A particular management platform may have a variety of ways to access management information. Each of these ways must have a namespace type definition. Given this type, there would be an assumed set of mechanisms for exporting, importing and updating instances.

Namespace Handle
The Namespace handle identifies a particular instance of the type of implementation. This handle must resolve to a namespace within an implementation.

The details of the handle are implementation-specific. It might be a simple string for an implementation that supports one namespace, or it might be a hierarchical structure if an implementation supports multiple namespaces. Either way, it resolves to a namespace.

It is important to note that some implementations can support multiple namespaces. In this case, the implementation-specific reference must resolve to a particular namespace within that implementation.



Figure: Namespaces

There are two important observations to make:

  1. Namespaces can overlap with respect to their contents.

  2. An object in one name space, which has the same model path as an object in another name, space does not guarantee that the objects are representing the same reality.

Model Path

The object name constructed as a scoping path through the CIM schema is referred to as a Model Path. It is solely described by CIM elements and is absolutely implementation-independent. It is used to describe the path to a particular object or to identify a particular object within a namespace. The name of any object is a concatenation of named key property values, including all key values of its scoping objects.

Specifying Object Names in MOF Files

The object name can be used as the value for object references and for object queries.

Synchronizing Namespaces

When a MOF is loaded into a system that is able to access and manipulate the source implementation, a higher level of integration is possible between two CIM-based implementations. In particular, the receiving implementation can synchronize changes with the sending implementation. This situation is shown in Namespace Path , and requires a way to record information about the namespace path of the source in the MOF. The arrow labeled "Dynamic Access to Loaded Information" implies that Mgmt_ABC has the capability to access information about an instance of Mgmt_X because it understands Mgmt_X's access protocol. All it must know is the handle (namespace path) for the source.



Figure: Namespace Path

The namespace path can be provided in one of two ways:

The value for the pragma and the qualifier is exactly the same:

Source(<namespacetype>: \<namespace_handle>)

When the information is provided as a pragma, it is assumed to be the same for all instances in the MOF file. This pragma is shown in Pragma Example for the circle and triangle example.


#pragma source("Mgmt_X:\EastCoast")

class Figs_Circle {
[key] uint32 Name;
string Color;
};

class Figs_Triangle {
[key] uint32 Label;
string Color;
uint32 Area;
};

[Association]
class Figs_CircleToTriangle {
Figs_Circle REF ACicrle;
Figs_Triangle REF ATriangle;
};

[Association]
class Figs_Covers {
Figs_Triangle REF Over;
Figs_Triangle REF Under;
};

instance of Figs_Triangle {Label=2;Color="Blue";Area=12};
instance of Figs_Triangle {Label=4;Color="Blue";Area=12};
instance of Figs_Circle {Name=1;Color="Blue"};
instance of Figs_Circle {Name=3;Color="Blue"};
instance of Figs_Circle {Name=5;Color="Blue"};

instance of Figs_CircleToTriangle {
ACircle="Circle.Name=1";
ATriangle="Triangle.Label=2";
};

instance of Figs_CircleToTriangle {
ACircle="Circle.Name=5";
ATriangle="Triangle.Label=2";
};

instance of Figs_CircleToTriangle {
ACircle="Circle.Name=5";
ATriangle="Triangle.Label=4";
};

instance of Figs_Covers {
Over="Triangle.Label=2";
Under="Triangle.Label=4";
};

Figure: Pragma Example

The import operation must preserve namespace path information so if either this platform or another platform understands how to manipulate an implementation of type <namespacetype> and has access to the <namespace_handle>, it can manipulate one or more of the instances in the source.

The namespace path can also be specified using the instance-based Source qualifier. This qualifier marks a particular object or an association. This is illustrated in Namespace Path Example . Note that when a pragma is specified and a qualifier is also specified, the qualifier overrides the pragma.


class Figs_Circle {
[key] uint32 Name;
string Color;
};

class Figs_Triangle {
[key] uint32 Label;
string Color;
uint32 Area;
};

[Association]
class Figs_CircleToTriangle {
Figs_Circle REF ACicrle;
Figs_Triangle REF ATriangle;
};

[Association]
class Figs_Covers {
Figs_Triangle REF Over;
Figs_Triangle REF Under;
};

[source("Mgmt_X:\EastCoast")]
instance of Figs_Triangle {Label=2;Color="Blue";Area=12};

[source("Mgmt_X:\EastCoast")]
instance of Figs_Triangle {Label=4;Color="Blue";Area=12};

[source("Mgmt_X:\EastCoast")]
instance of Figs_Circle {Name=1;Color="Blue"};

[source("Mgmt_X:\EastCoast")]
instance of Figs_Circle {Name=3;Color="Blue"};

[source("Mgmt_X:\EastCoast")]
instance of Figs_Circle {Name=5;Color="Blue"};

[source("Mgmt_X:\EastCoast")]
instance of Figs_CircleToTriangle {
ACircle="Circle.Name=1";
ATriangle="Triangle.Label=2";
};

[source("Mgmt_X:\EastCoast")]
instance of Figs_CircleToTriangle {
ACircle="Circle.Name=5";
ATriangle="Triangle.Label=2";
};

[source("Mgmt_X:\EastCoast")]
instance of Figs_CircleToTriangle {
ACircle="Circle.Name=5";
ATriangle="Triangle.Label=4";
};

[source("Mgmt_X:\EastCoast")]
instance of Figs_Covers {
[nonlocal("Mgmt_X:\EastCoast")]
Over="Triangle.Label=2";
Under="Triangle.Label=4";
};

Figure: Namespace Path Example


Building References Between Management Systems

The Nonlocal instance qualifier for references allows a targeted management system to selectively import instances in a MOF file. This is used when a targeted management system knows how to access a source management platform (in other words, it has verified, using the source pragma or qualifier, that it knows how to access the source platform) and it does not want to store some class instances locally. Using the circle and triangle MOF as an example, the target management system, Mgmt_ABC, only wants to store circle information locally. When a Mgmt_ABC user requests information about a triangle, the Mgmt_ABC implementation contacts the source platform Mgmt_X to get the instance information. This is illustrated in References Between Management Systems .



Figure: References Between Management Systems

The Nonlocal qualifier is similar to the Source qualifier since its value is a string:

<namespacetype>:\<namespacehandle>

The content of Mgmt_ABC after importing only circle information looks like the example in Example of Nonlocal Qualifier .

In particular, the two instances of triangle are not imported, and the references to triangle in the associations are also marked with the nonlocal qualifier.

The above schema also allows intelligent import operations to avoid importing all the objects if there are associations between the objects.



class Figs_Circle {
[key] uint32 Name;
string Color;
};

class Figs_Triangle {
[key] uint32 Label;
string Color;
uint32 Area;
};

[Association]
class Figs_CircleToTriangle {
Figs_Circle REF ACicrle;
Figs_Triangle REF ATriangle;
};

[Association]
class Figs_Covers {
Figs_Triangle REF Over;
Figs_Triangle REF Under;
};

instance of Figs_Circle {Name=1; Color="Blue"};
instance of Figs_Circle {Name=3; Color="Blue"};
instance of Figs_Circle {Name=5; Color="Blue"};

instance of Figs_CircleToTriangle {
ACircle="Circle.Name=1";
[nonlocal("Mgmt_X:\EastCoast")]
ATriangle="Triangle.Label=2";
};

instance of Figs_CircleToTriangle {
ACircle="Circle.Name=5";
[nonlocal("Mgmt_X:\EastCoast")]
ATriangle="Triangle.Label=2";
};

instance of Figs_CircleToTriangle {
ACircle="Circle.Name=5";
[nonlocal("Mgmt_X:\EastCoast")]
ATriangle="Triangle.Label=4";
};

instance of Figs_Covers {
[nonlocal("Mgmt_X:\EastCoast")]
Over="Triangle.Label=2";
[nonlocal("Mgmt_X:\EastCoast")]
Under="Triangle.Label=4";
};

Figure: Example of Nonlocal Qualifier

Why not acquire a nicely bound hard copy?
Click here to return to the publication details or order a copy of this publication.

Contents Next section Index