Необходимо создать TQL-запросы - PullRequest
0 голосов
/ 25 июня 2010

Мне нужно создать TQL-запросы для запроса наборов данных из UCMDB.
У меня 2 проблемы:

1) Как я могу найти отношения, которые существуют между CI (у меня нет административных привилегий, поэтому нужно как-то делать это в коде) Мне нужно это, чтобы получить необходимые данные.

2) Я создал следующий запрос: Но я продолжаю получать значение свойства IP как нулевое. Я проверил, что у 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

У меня есть пример запроса в JYthon, который я не могу понять: он предназначен только для приведенного выше кода.

Прикрепление для всех, кто может это понять.

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 Ответ

1 голос
/ 24 декабря 2011

Самым простым решением было бы использование свойства display_label из IP-адреса CI вместо свойства ip_address.Ссылочный код Jython использует display_label для своей логики.

Я бы немного обеспокоился использованием display_label, поскольку логику форматирования display_label можно было изменить, чтобы не отображать IP-адрес для IP-элементов конфигурации.Получение данных напрямую из свойства ip_address - лучший выбор, и он должен работать, если определен TQL для возврата этих данных.Проверьте TQL Host IP и убедитесь, что он настроен для возврата ip_address для IP-элементов конфигурации.

...