2010-06-25 16 views
0

UCMDB에서 데이터 집합을 쿼리하기 위해 TQL 쿼리를 만들어야합니다.tql 쿼리를 생성해야합니다.

1) 어떻게 내가 필요한 데이터를 얻기 위해이 필요 (내가 관리 권한 그래서 어떻게 든 코드에서 할 필요가 없습니다) CI를 사이에 존재하는 관계를 찾을 수 있습니다
나는이 문제가 발생하고있다.

2) 다음 쿼리를 생성했습니다. 그러나 IP 속성 값이 null로 계속 나타납니다. IP에 ip_address이라는 속성이 있는지 확인했습니다.
코드 : 위의 질의 출력에서 ​​

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

으로 호스트 이름을 가져가 내가 알아낼 수 없습니까 자이 썬에서 샘플 쿼리가 있습니다.

그것을 이해할 수있는 사람을 위해 첨부하십시오.

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) 

도와주세요.

이 문제에 대해 더 이상 이해할 수 없습니다.

감사합니다.

답변

1

가장 쉬운 해결 방법은 ip_address 속성 대신 IP 주소 CI의 display_label 속성을 사용하는 것입니다. Jython 레퍼런스 코드는 로직에 display_label을 사용합니다.

display_label 형식 지정 논리를 IP CI의 IP 주소를 표시하지 않음으로 변경할 수 있으므로 display_label을 사용하는 것에 대해 조금 걱정할 것입니다. ip_address 속성에서 직접 데이터를 가져 오는 것이 더 나은 선택이며 TQL이 해당 데이터를 반환하도록 정의 된 경우 작동해야합니다. 호스트 IP TQL을 확인하고 IP CI에 대해 ip_address를 반환하도록 구성되었는지 확인하십시오.