Esempio n. 1
0
    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]
Esempio n. 2
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
Esempio n. 3
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"))
Esempio n. 5
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_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
Esempio n. 6
0
 def ip_address(self, ip_address):
     if is_ip(ip_address):
         self._ip_address = ip_address
     else:
         raise ValueError("Not an IP address")