首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >需要创建tql查询

需要创建tql查询
EN

Stack Overflow用户
提问于 2010-06-25 18:30:22
回答 1查看 2.3K关注 0票数 0

我需要创建TQL查询,以查询来自UCMDB的数据集。

我有两个问题:

1)如何找到在CIs之间存在的关系(我没有管理权限,因此需要在代码中这样做),我需要这样做才能获得所需的数据。

2)我创建了以下查询:但我一直将IP属性值作为null。我检查了IP有一个名为ip_address的属性。

代码:

代码语言:javascript
复制
import com.hp.ucmdb.api.types.TopologyRelation;

public class Main {

    public static void main(String[] args)throws Exception {
     final String HOST_NAME = "192.168.159.132";
     final int PORT = 8080; 

     UcmdbServiceProvider provider = UcmdbServiceFactory.getServiceProvider(HOST_NAME, PORT);

     final String USERNAME = "username";

     final String PASSWORD = "password";

     Credentials credentials = provider.createCredentials(USERNAME, PASSWORD);

     ClientContext clientContext = provider.createClientContext("Test");
     UcmdbService ucmdbService = provider.connect(credentials, clientContext);

     TopologyQueryService queryService = ucmdbService.getTopologyQueryService();

     Topology topology = queryService.executeNamedQuery("Host IP");

     Collection<TopologyCI> hosts = topology.getAllCIs(); 

     for (TopologyCI host : hosts) { 


      for (TopologyRelation relation : host.getOutgoingRelations()) { 
       System.out.print("Host " + host.getPropertyValue("display_label")); 
       System.out.println (" has IP " + relation.getEnd2CI().getPropertyValue("ip_address")); 

      } 
     }

}

在上面的查询输出中:我得到带有IP = null的主机名

我在JYthon中有一个示例查询,我无法找出:它只适用于上面的代码。

任何能理解它的人都会把它附上去。

代码语言:javascript
复制
import sys

UCMDB_API="c:/ucmdb/api/ucmdb-api.jar"

sys.path.append(UCMDB_API)

from com.hp.ucmdb.api import *

# 0) Connection settings
HOST_NAME="192.168.159.132"
PORT=8080

USERNAME="username"
PASSWORD="password"

# 1) Get a Service Provider from the UcmdbServiceFactory
provider = UcmdbServiceFactory.getServiceProvider(HOST_NAME, PORT)

# 2) Setup credentials to log in
credentials = provider.createCredentials(USERNAME, PASSWORD)

# 3) Create a client context
clientContext = provider.createClientContext("TESTING")

# 4) Connect and retrieve a UcmdbService object
ucmdbService = provider.connect(credentials, clientContext)

# 5) Get the TopologyQueryService from the UcmdbService
queryService = ucmdbService.getTopologyQueryService()

# ======= Everything After this is specific to the query =======

# 6) Execute a Named Query and get the Topology
topology = queryService.executeNamedQuery('Host IP')

# 7) Get the hosts
hosts = topology.getAllCIs()

# 8) Print the hosts and IPs
host_ip = {}

for host in hosts:
    host_name = host.getPropertyValue("display_label")
    if host_name in host_ip.keys():
        ips = host_ip[host_name]
    else:
        ips = {} 
        host_ip[host_name] = ips
    for relation in host.getOutgoingRelations():
        ip_address = relation.getEnd2CI().getPropertyValue("display_label")
        if ip_address in ips.keys():
            pass
        else:
            ips[ip_address] = ''
            print "%s , %s" % (host_name, ip_address)

请帮帮忙。

我无法理解如何进一步解决这一问题。

谢谢。

EN

回答 1

Stack Overflow用户

发布于 2011-12-24 19:20:53

最简单的修复方法是使用IP地址CI中的display_label属性,而不是ip_address属性。Jython参考代码使用display_label作为其逻辑。

我有点担心使用display_label,因为display_label格式逻辑可以更改为不显示IP CIs的IP地址。直接从ip_address属性获取数据是一个更好的选择,如果定义了TQL返回该数据,则应该可以工作。检查Host并确保它被配置为返回IP CIs的ip_address。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/3120475

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档