2010-06-25 8 views
0

J'ai besoin de créer des requêtes TQL pour interroger des ensembles de données de l'UCMDB.
je rencontre 2 problèmes:Besoin de créer des requêtes tql

1) Comment puis-je trouver des relations qui existe entre CIs (je n'ai pas besoin de privilèges d'administration afin de le faire dans le code d'une certaine manière) Je en ai besoin pour obtenir des données nécessaires.

2) J'ai créé la requête suivante: Mais je continue d'obtenir la valeur de la propriété IP comme nulle. J'ai vérifié que l'IP avait un attribut appelé ip_address.
code:

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")); 

     } 
    } 

} 

Dans la sortie de requête ci-dessus: je reçois les noms d'hôte avec IP = null

J'ai un exemple de requête dans Jython que je suis incapable de comprendre: Son pour le code ci-dessus ne.

L'attacher pour tous ceux qui peuvent le comprendre.

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) 

Aidez-nous s'il vous plaît.

Je n'arrive pas à comprendre comment aller plus loin.

Merci.

Répondre

1

La solution la plus simple serait d'utiliser la propriété display_label de l'adresse IP CI au lieu de la propriété ip_address. Le code de référence Jython utilise display_label pour sa logique. Je voudrais être un peu préoccupé par l'utilisation de display_label puisque la logique de formatage display_label pourrait être modifiée pour ne pas afficher l'adresse IP pour les CI IP. Obtenir des données directement à partir de la propriété ip_address est un meilleur choix et devrait fonctionner si la TQL est définie pour renvoyer ces données. Vérifiez le Host IP TQL et assurez-vous qu'il est configuré pour renvoyer ip_address pour les CI IP.

Questions connexes