def find_node(self, nodename): """Locates a Jenkins build agent with the given name :param str nodename: name of node to locate :returns: reference to Jenkins object that manages this node's information. :rtype: :class:`~.node.Node` or None if node not found """ if nodename == "master": temp_nodename = "(master)" else: temp_nodename = nodename # TODO: Rework 'nodes' property to cache the node name for all nodes in # one query, so we can rework this implementation to simply call # self.nodes then iterate through them all to find the one # we're looking for. Then we don't have to guess the URL. new_url = self._api.url + "computer/" + temp_nodename try: retval = Node(self._api.clone(new_url)) assert retval.name == nodename return retval except RequestException: return None
def nodes(self): """gets the list of nodes (aka: agents) managed by this Jenkins master :returns: list of 0 or more Node objects managed by this Jenkins master :rtype: :class:`list` of :class:`~.node.Node` objects """ data = self._api.get_api_data(target_url=self._api.url + "computer/") nodes = data['computer'] retval = [] for cur_node in nodes: if cur_node['displayName'] == 'master': node_url = self._api.url + 'computer/(master)' else: node_url = self._api.url + 'computer/' + cur_node['displayName'] retval.append(Node(self._api.clone(node_url))) return retval