+ if isinstance(query, dict):
+ if constants.CONFD_REQQ_IP in query:
+ instances_list = [query[constants.CONFD_REQQ_IP]]
+ mode = constants.CONFD_REQQ_IP
+ elif constants.CONFD_REQQ_IPLIST in query:
+ instances_list = query[constants.CONFD_REQQ_IPLIST]
+ mode = constants.CONFD_REQQ_IPLIST
+ else:
+ logging.debug("missing IP or IPLIST in query dict")
+ return QUERY_ARGUMENT_ERROR
+
+ if constants.CONFD_REQQ_LINK in query:
+ network_link = query[constants.CONFD_REQQ_LINK]
+ else:
+ network_link = None # default will be used
+ elif isinstance(query, basestring):
+ # 2.1 beta1 and beta2 mode, to be deprecated for 2.2
+ instances_list = [query]
+ network_link = None
+ mode = constants.CONFD_REQQ_IP
+ else:
+ logging.debug("Invalid query argument type for: %s", query)
+ return QUERY_ARGUMENT_ERROR
+
+ pnodes_list = []
+
+ for instance_ip in instances_list:
+ if not isinstance(instance_ip, basestring):
+ logging.debug("Invalid IP type for: %s", instance_ip)
+ return QUERY_ARGUMENT_ERROR
+
+ instance = self.reader.GetInstanceByLinkIp(instance_ip, network_link)
+ if not instance:
+ logging.debug("Unknown instance IP: %s", instance_ip)
+ pnodes_list.append(QUERY_UNKNOWN_ENTRY_ERROR)
+ continue
+
+ pnode = self.reader.GetInstancePrimaryNode(instance)
+ if not pnode:
+ logging.error("Instance '%s' doesn't have an associated primary"
+ " node", instance)
+ pnodes_list.append(QUERY_INTERNAL_ERROR)
+ continue
+
+ pnode_primary_ip = self.reader.GetNodePrimaryIp(pnode)
+ if not pnode_primary_ip:
+ logging.error("Primary node '%s' doesn't have an associated"
+ " primary IP", pnode)
+ pnodes_list.append(QUERY_INTERNAL_ERROR)
+ continue