def get_agent(self, query_param): """ Searches for an agent by the ip address or the node_id """ if is_ip(query_param): query_for_where = "IP" elif isinstance(query_param, int): query_for_where = "NodeId" else: query_for_where = "Name" swql_agent = """SELECT AgentID, Uri FROM Orion.AgentManagement.Agent WHERE {}=@query_on""".format(query_for_where) kargs = {'query_on': query_param} data_agent = self.query(swql_agent, **kargs) # Since there might not always be an agent we # will not raise if the results do not return anything if 'results' not in data_agent or len(data_agent['results']) == 0: msg = "No Orion Agent found: {}".format(data_agent) self.logger.info(msg) return None if len(data_agent['results']) >= 2: self.logger.debug("Muliple Agents match '{}' Caption: {}".format( query_param, data_agent)) raise ValueError( "Muliple Agents match '{}' Caption".format(query_param)) return data_agent['results'][0]
def get_node(self, node): """ Get an OrionNode object """ orion_node = OrionNode() if is_ip(node): query_for_where = "IPAddress" else: query_for_where = "Caption" swql = """SELECT NodeID, Uri, IPAddress, Caption FROM Orion.Nodes WHERE {}=@query_on""".format(query_for_where) kargs = {'query_on': node} data = self.query(swql, **kargs) if 'results' not in data: msg = "No results from Orion: {}".format(data) self.logger.info(msg) raise Exception(msg) if len(data['results']) == 1: try: orion_node.npm_id = data['results'][0]['NodeID'] orion_node.uri = data['results'][0]['Uri'] orion_node.ip_address = data['results'][0]['IPAddress'] orion_node.caption = data['results'][0]['Caption'] except IndexError: pass elif len(data['results']) >= 2: self.logger.debug( "Muliple Nodes match '{}' Caption: {}".format( node, data)) raise ValueError("Muliple Nodes match '{}' Caption".format( node)) if orion_node.npm: swql = """SELECT NodeID FROM Cirrus.Nodes WHERE CoreNodeID=@CoreNodeID""" kargs = {'CoreNodeID': orion_node.npm_id} data = self.query(swql, **kargs) # Don't raise an exception if this fails. # The platform may not haev NCM installed. if 'results' not in data: msg = "No results from Orion NCM: {}".format(data) self.logger.info(msg) elif len(data['results']) == 1: try: orion_node.ncm_id = data['results'][0]['NodeID'] except IndexError: pass return orion_node
def test_run_is_ip_v4(self): self.assertTrue(is_ip("172.16.0.1")) self.assertTrue(is_ip("1762:0:0:0:0:B03:1:AF18")) self.assertFalse(is_ip("172.16.0.300")) self.assertFalse(is_ip("1762:%:0:0:0:B03:1:AF18")) self.assertFalse(is_ip("server.example.com")) self.assertFalse(is_ip("router1")) self.assertFalse(is_ip("router:8080"))
def get_node(self, node): """ Get an OrionNode object """ orion_node = OrionNode() if is_ip(node): query_for_where = "IPAddress" else: query_for_where = "Caption" swql = """SELECT NodeID, Uri, IPAddress, Caption FROM Orion.Nodes WHERE {}=@query_on""".format(query_for_where) kargs = {'query_on': node} data = self.query(swql, **kargs) if 'results' not in data: msg = "No results from Orion: {}".format(data) self.logger.info(msg) raise Exception(msg) if len(data['results']) == 1: try: orion_node.npm_id = data['results'][0]['NodeID'] orion_node.uri = data['results'][0]['Uri'] orion_node.ip_address = data['results'][0]['IPAddress'] orion_node.caption = data['results'][0]['Caption'] except IndexError: pass elif len(data['results']) >= 2: self.logger.debug("Muliple Nodes match '{}' Caption: {}".format( node, data)) raise ValueError("Muliple Nodes match '{}' Caption".format(node)) if orion_node.npm: swql_ncm = """SELECT NodeID FROM Cirrus.Nodes WHERE CoreNodeID=@CoreNodeID""" kargs = {'CoreNodeID': orion_node.npm_id} try: data_ncm = self.query(swql_ncm, **kargs) except requests.exceptions.HTTPError: # Create an empty dict to allow remaining code to fail gracefully data_ncm = {} self.logger.info("Connection to NCM failed. NCM not installed") # Don't raise an exception if this fails. # The platform may not have NCM installed. if 'results' not in data_ncm: msg = "No results from Orion NCM: {}".format(data_ncm) self.logger.info(msg) elif len(data_ncm['results']) == 1: try: orion_node.ncm_id = data_ncm['results'][0]['NodeID'] except IndexError: pass data_agent = self.get_agent(orion_node.npm_id) if data_agent: try: orion_node.agent_id = data_agent['AgentID'] orion_node.agent_uri = data_agent['Uri'] except IndexError: pass return orion_node
def ip_address(self, ip_address): if is_ip(ip_address): self._ip_address = ip_address else: raise ValueError("Not an IP address")