linux生成虚拟ip
如果您打算使用通用信息模型标准参与硬件管理,则您正在使用(或开发)的管理应用程序通常需要具有侦听和处理硬件级别指示的能力。 在一个完美的世界中,您已经拥有了要使用并运行的硬件系统,当然,这绝不是一个完美的世界。
那么,如果您没有方便的硬件,该怎么办? 创建虚拟硬件级别指示以测试管理应用程序的侦听器组件。 我将向您展示如何使用OpenPegasus源代码附带的提供程序在OpenPegasus CIMOM(通用信息模型对象管理器)上生成虚拟指示。
通用信息模型CIM概述
CIM(公共信息模型)是用于描述网络或企业环境中的管理信息的模型。 CIM由规范和模式组成 。 该规范定义了如何与其他管理模型集成。 模式提供了实际的模型描述。
受管对象格式(MOF)通常用于表示CIM模式,因为MOF可以直接编译为CIMOM存储库。 CIMOM是一个调解器(服务器),它使用其存储库中的已编译信息模型来指导客户端和提供者之间的请求和响应。 CIMOM位于客户端和提供者之间。
提供者位于CIMOM的后端; 它实际上负责与托管资源(例如磁盘驱动器和CPU)进行通信以访问数据。 提供者将此数据发送给CIMOM,后者再将其转发给客户端。 当CIMOM收到来自客户端的请求并且所需的数据不在其存储库中时,则CIMOM将该请求转发给适当的提供者。
客户端通常是一个管理应用程序,它向CIMOM发送请求并接收响应。 在大多数情况下,指示侦听器是客户端的一部分,它只能接收信息-它不能发送任何请求。 总体模型的简单表示如图1所示。
图1. CIMOM模型的概述
产生指示的步骤
生成指示涉及三个主要步骤:
- 编译并安装OpenPegasus源代码附带的
RT_Indication
提供程序。 - 通过向CIMOM发送请求,开发一个小型Java™程序来生成指示。
- 开发一个小型Java程序来侦听所生成的指示。
步骤1.编译并安装RT_Indication提供程序
开始通过下载和安装OpenPegasus.org本的OpenPegasus过程(见相关信息中的链接)。 对于本文,我使用了OpenPegasus源代码构建版本pegasus-2.9.0.tar.gz; 对于任何OpenPegasus版本,相同的程序应该可以正常工作。 您可以从相应的二进制发行版中安装OpenPegasus,也可以从源代码编译并安装。 源代码中包含一个文档,其中包含先决条件和编译说明。
安装OpenPegasus之后,填充基本架构存储库。
在CIMOM上安装提供程序涉及三个步骤:
- 将提供程序MOF编译到CIMOM存储库。
- 在CIMOM中注册提供商。
- 将与MOF不相关的源代码编译为CIMOM的共享库。
编译提供者MOF
将pegasus-2.9.0.tar.gz解压缩到任何目录(如果在安装OpenPegasus的过程中尚未执行此操作)。 创建一个环境变量PEGASUS_ROOT
。 将PEGASUS_ROOT
设置为提取的pegasus-2.9.0.tar.gz文件的基本目录。 导出PEGASUS_ROOT
。
基本目录应立即包含以下目录:cgi,doc,Dummy,installs,InterfaceArchive,mak,rpm,Schemas,src,test和文件Configure,Makefile等。
环境变量PEGASUS_HOME
应该设置为已经安装OpenPegasus的基本目录。 将环境变量PEGASUS_PLATFORM
设置为LINUX_IX86_GNU
。 导出PEGASUS_HOME
和PEGASUS_PLATFORM
。
启动CIM服务器,如清单1所示:
清单1.启动CIMOM
LinuxMint:/ # cimserver
假设$PEGASUS_HOME/bin
已包含在PATH
。
现在是时候将提供程序MOF编译为名称空间SDKExamples/DefaultCXX
,但是提供程序MOF是从基础CIM架构MOF派生的,因此首先编译基础CIM架构MOF, 然后再编译提供程序MOF。 严格遵守编译顺序。
转到“ /”目录(不是必需的)。 发出清单2中所示的以下命令(假设基本架构是从$PEGASUS_ROOT/Schemas/CIM217
):
清单2.将基本模式编译为SDKExamples命名空间
LinuxMint:/ # cimmof -n SDKExamples/DefaultCXX \$PEGASUS_ROOT/Schemas/CIM217/DMTF/qualifiers.mof
LinuxMint:/ # cimmof -n SDKExamples/DefaultCXX \$PEGASUS_ROOT/Schemas/CIM217/DMTF/Core/CIM_ManagedElement.mof
LinuxMint:/ # cimmof -n SDKExamples/DefaultCXX \$PEGASUS_ROOT/Schemas/CIM217/CIM_Event.mof
编译提供者MOF,如清单3所示:
清单3.将提供程序MOF编译为SDKExamples名称空间
LinuxMint:/ # cimmof -n SDKExamples/DefaultCXX \$PEGASUS_ROOT/src/SDK/samples/Providers/Load/SampleProviderSchema.mof
注册提供商
发出以下命令以在CIMOM中注册提供程序:
清单4.在CIMOM中注册提供商
LinuxMint:/ # cimmof -n root/PG_InterOp \$PEGASUS_ROOT/src/SDK/samples/Providers/Load/IndicationProviderR.mof
编译共享库
可以使用C ++编译器将共享库编译为CIMOM。 在此示例中,共享库将使用g ++和GNU make进行编译,如清单5所示。转到目录$ PEGASUS_ROOT / src / SDK / samples / Providers / DefaultC ++ / IndicationProvider,然后键入make并返回。
清单5.编译共享库
LinuxMint:/pegasus/src/SDK/samples/Providers/DefaultC++/IndicationProvider # make
g++ -c -o /cimserver/pegasus/obj/sdk/IndicationProviderMain.o -O2 -W -Wall -Wno-
unused -D_GNU_SOURCE -DTHREAD_SAFE -D_REENTRANT -fPIC -m32 -I /pegasus/src -DPEG
ASUS_PLATFORM_LINUX_IX86_GNU IndicationProviderMain.cpp
g++ -c -o /cimserver/pegasus/obj/sdk/IndicationProvider.o -O2 -W -Wall -Wno-unu
sed -D_GNU_SOURCE -DTHREAD_SAFE -D_REENTRANT -fPIC -m32 -I /pegasus/src -DPEGASU
S_PLATFORM_LINUX_IX86_GNU IndicationProvider.cpp
g++ -shared -Xlinker -rpath -Xlinker /cimserver/pegasus/lib -m32 -DPEGASUS_PLATF
ORM_LINUX_IX86_GNU -o/cimserver/pegasus/lib/sdk/libSDKIndicationProvider.so /cim
server/pegasus/obj/sdk/IndicationProviderMain.o /cimserver/pegasus/obj/sdk/Indic
ationProvider.o -ldl -lpthread -lcrypt -L/cimserver/pegasus/lib -lpegcommon -L/c
imserver/pegasus/lib -lpegprovider
make -i unlink
make[1]: Entering directory `/pegasus/src/SDK/samples/Providers/DefaultC++/Indic
ationProvider'
rm -f /cimserver/pegasus/lib/libSDKIndicationProvider.so
make[1]: Leaving directory `/pegasus/src/SDK/samples/Providers/DefaultC++/Indica
tionProvider'
ln -f -s /cimserver/pegasus/lib/sdk/libSDKIndicationProvider.so /cimserver/pegas
us/lib/libSDKIndicationProvider.so
共享库libSDKIndicationProvider.so
已添加到$ PEGASUS_HOME / lib / sdk,指向它的链接已添加到$ PEGASUS_HOME / lib。
使用cimserver -s
关闭CIMOM,然后使用cimserver
再次启动它(如清单1所示 )。 在的快照SDKExamples/DefaultCXX
命名空间,从UltimateCIM浏览器采取了(参见相关主题 ),如图2所示。
图2.从UltimateCIM拍摄的快照
步骤2.开发Java程序以生成指示
的一个实例RT_TestIndication
可以通过调用方法来生成SendTestIndication
的RT_TestIndication
上CIMOM。 SBLIM(发音为“ sublime”)CIM客户端库可用于调用该方法。 (SBLIM是一个总揽项目,用于收集系统管理工具,以在Linux®上启用基于Web的企业管理(WBEM)。)
下载SBLIM CIM客户机库(见相关信息中的链接),解压,得到JAR LIB / SBLIM-CIM-client2-2.1.1.jar,并将其包括在您的CLASSPATH
。 可以如清单6所示调用SendTestIndication
。
清单6.调用SendTestIndication的客户端代码
// Creating a CIM client instance
WBEMClient cli = WBEMClientFactory.getClient("CIM-XML");
CIMObjectPath cop = new CIMObjectPath("http", "cimomIP", "cimomPort",
"SDKExamples/DefaultCXX", null, null);
Principal principal = new UserPrincipal("username");
PasswordCredential password = new PasswordCredential("userPassword");
Subject subject = new Subject(false,Collections.singleton(principal),
Collections.singleton(password),Collections.EMPTY_SET);
cli.initialize(cop, subject, null);
CIMArgument<?>[] input = new CIMArgument[10];
CIMArgument<?>[] output = new CIMArgument[10];
// Invoking SendTestIndication on RT_TestIndication
Object obj = cli.invokeMethod(new CIMObjectPath(
"/SDKExamples/DefaultCXX:RT_TestIndication"), "SendTestIndication", input, output);
if (obj.toString().equals("0"))
{
System.out.println("Indication generated successfully...");
}
可替换地, RT_TestIndication
可以通过编译附带飞马-2.9.0.tar.gz客户端程序来生成。 可以使用g ++和GNU make编译此客户机代码,如清单7所示:
清单7.编译客户端
LinuxMint:/pegasus/src/SDK/samples/Clients/DefaultC++/SendTestIndications # make
g++ -O2 -W -Wall -Wno-unused -D_GNU_SOURCE -DTHREAD_SAFE -D_REENTRANT -fPIC -m32
-c -o /cimserver/pegasus/obj/sdk/SendTestIndications.o -I /pegasus/src -DPEGASU
S_PLATFORM_LINUX_IX86_GNU SendTestIndications.cpp
g++ -Xlinker -rpath -Xlinker /cimserver/pegasus/lib -m32 -o/cimserver/pegasus/bi
n/sdk/SendTestIndications /cimserver/pegasus/obj/sdk/SendTestIndications.o -L/ci
mserver/pegasus/lib -lpegcommon -L/cimserver/pegasus/lib -lpegclient -ldl -lpthr
ead -lcrypt
可执行文件SendTestIndications
被添加到目录$ PEGASUS_HOME / bin / sdk中。
步骤3.开发Java程序以听取指示
我在本节中介绍的指示侦听器将能够侦听RT_TestIndication
。 基本上, RT_TestIndication
是从CIM_Indication
派生的。 侦听器程序必须注册RT_TestIndication
。
创建和注册侦听器涉及三个步骤。 以下三个代码清单应作为单独线程的一部分创建,以便侦听器可以连续侦听指示:
- 创建一个CIM指示过滤器实例
- 创建一个CIM指示处理程序实例
- 创建CIM指示订阅实例
创建过滤器实例
CIM指示过滤器过滤要传递给侦听器的指示的种类。 可以通过获取CIM_IndicationFilter
类的实例,然后为其设置适当的属性来创建CIM指示过滤器。 始终可以安全地找到是否存在具有相同过滤器名称的所有过滤器。 如果过滤器名称已存在,则应删除该过滤器实例或使用新名称创建当前过滤器实例。 清单8显示了如何创建过滤器实例。
清单8.创建一个过滤器实例
// Setting property values to the filter instance
CIMProperty<?> name = new CIMProperty<String>("Name", CIMDataType.STRING_T,
"TestFilter");
CIMProperty<?> namespace = new CIMProperty<String>("SourceNamespace",
CIMDataType.STRING_T, "SDKExamples/DefaultCXX");
CIMProperty<?> query = new CIMProperty<String>("Query", CIMDataType.STRING_T,
"SELECT * FROM RT_TestIndication");
CIMProperty<?> language = new CIMProperty<String>("QueryLanguage",
CIMDataType.STRING_T, "WQL");
CIMProperty<?>[] properties = new CIMProperty[] {name, namespace, query, language};
CIMObjectPath path = new CIMObjectPath("/SDKExamples/DefaultCXX:CIM_IndicationFilter");
// Creating an instance of CIM_IndicationFilter
CIMObjectPath copFilter = cli.createInstance(new CIMInstance(path, properties));
创建处理程序实例
当CIMOM调用处理程序时,它将向其传递指示的实例和CIM_ListenerDestination
的实例。 然后,处理程序可以将此指示实例以正确的导出格式传递给Listener程序。 清单9显示了如何创建处理程序实例。
清单9.创建一个处理程序实例
WBEMListener listener = WBEMListenerFactory.getListener("CIM-XML");
int port = listener.addListener(new IndicationListener()
{
public void indicationOccured(String indicationURL, CIMInstance indication)
{ System.out.println(indication.toString()); }
}, 0, "http");
String host = "http://"+InetAddress.getLocalHost().getHostAddress()+":"+port+"/create";
CIMProperty<?> name = new CIMProperty<String>("Name", CIMDataType.STRING_T,
"TestListener");
CIMProperty<?> creationClassName = new CIMProperty<String>
("CreationClassName", CIMDataType.STRING_T, "CIM_ListenerDestinationCIMXML");
CIMProperty<?> destination = new CIMProperty<String>("Destination",
CIMDataType.STRING_T, host);
CIMProperty<?>[] properties = new CIMProperty[] { name, creationClassName,
destination };
CIMObjectPath path = new CIMObjectPath(
"/SDKExamples/DefaultCXX:CIM_ListenerDestinationCIMXML");
CIMObjectPath copHandler = cli.createInstance(new CIMInstance(path, properties));
创建订阅实例
订阅RT_TestIndication
的侦听器程序在此描述了它感兴趣的指示类型以及CIMOM将该指示传递给的处理程序。 清单10演示了订阅RT_TestIndication
。
清单10.创建订阅实例
CIMProperty<?> filter = new CIMProperty<CIMObjectPath>("Filter",
new CIMDataType("CIM_IndicationFilter"), copFilter);
CIMProperty<?> handler = new CIMProperty<CIMObjectPath>("Handler",
new CIMDataType("CIM_ListenerDestinationCIMXML"), copHandler);
CIMProperty<?>[] properties = new CIMProperty[] { filter, handler };
CIMObjectPath path = new CIMObjectPath("/root/PG_InterOp:CIM_IndicationSubscription");
CIMObjectPath copSubscription = cli.createInstance(new CIMInstance(path, properties));
用您的虚拟CIM指示测试监听器
最后,您准备好使用虚拟指示进行测试。 如果cimserver尚未运行,请启动它。 启动指示侦听器程序。 现在,使用指示生成程序生成指示。 请参阅指示侦听器控制台以获取输出。 从我们的实现中获得的输出的快照如图3所示。
图3.示例输出
而已! 您已经成功创建了虚拟硬件级指示器,并使用它们来测试CIM管理应用程序的侦听器组件。
翻译自: https://www.ibm.com/developerworks/opensource/library/l-cim-test/index.html
linux生成虚拟ip