8 Replies Latest reply on Feb 2, 2017 4:12 PM by tdanner

    Python Add Node Error

    eel-ali

      I'm getting an error message when I run the following node:

       

      ===============================================================================================

      #!/usr/bin/python

      from __future__ import print_function

      import re

      import requests

      from orionsdk import SwisClient

       

      def main():

          npm_server = 'SOLARWINDSHOSTNAMEFRONTEND'

          username = 'MYUSERNAME'

          password = 'MYPASSWORD'

       

          swis = SwisClient(npm_server, username, password)

          print("Add an SNMP v3c node:")

       

          # fill these in for the node you want to add!

          ip_address = 'IPADRESSOFTHENEWNODE'

       

          # set up property bag for the new node

          props = {

              'IPAddress': ip_address,

              'EngineID': 2,

              'ObjectSubType': 'SNMP',

              'SNMPVersion': 3,

              'Caption': 'HOSTNAMEOFTHENEWNODE',

              'SNMPV3AuthKey': 'SNMPPASSWORD',

              'SNMPv3AuthKeyIsPwd': True,

              'SNMPv3AuthMethod': 'MD5',

              'SNMPv3PrivKey': 'SNMPPASSWORD',

              'SNMPv3PrivKeyIsPwd': True,

              'SNMPv3PrivMethod': 'DES56',

              'SNMPV3Username': 'SNMPUSER'

          }

       

          print("Adding node {}... ".format(props['IPAddress']), end="")

          results = swis.create('Orion.Nodes', **props)

          print("DONE!")

       

          # extract the nodeID from the result

          nodeid = re.search('(\d+)$', results).group(0)

          print(nodeid)

       

          pollers_enabled = {

              'N.Status.ICMP.Native': True,

              'N.Status.SNMP.Native': False,

              'N.ResponseTime.ICMP.Native': True,

              'N.ResponseTime.SNMP.Native': False,

              'N.Details.SNMP.Generic': True,

              'N.Uptime.SNMP.Generic': True,

              'N.Cpu.SNMP.HrProcessorLoad': True,

              'N.Memory.SNMP.NetSnmpReal': True,

              'N.AssetInventory.Snmp.Generic': True,

              'N.Topology_Layer3.SNMP.ipNetToMedia': False,

              'N.Routing.SNMP.Ipv4CidrRoutingTable': False

          }

       

          pollers = []

          for k in pollers_enabled:

              pollers.append(

                  {

                      'PollerType': k,

                      'NetObject': 'N:' + nodeid,

                      'NetObjectType': 'N',

                      'NetObjectID': nodeid,

                      'Enabled': pollers_enabled[k]

                  }

              )

       

          for poller in pollers:

              print("  Adding poller type: {} with status {}... ".format(poller['PollerType'], poller['Enabled']), end="")

              response = swis.create('Orion.Pollers', **poller)

              print("DONE!")

       

          print("Discover and add interfaces:")

          results = swis.invoke('Orion.NPM.Interfaces', 'DiscoverInterfacesOnNode', nodeid)

       

          # use the results['DiscoveredInterfaces'] for all interfaces

          # or get a subset of interfaces using a comprehension like below

          eth_only = [

                  x for x

                  in results['DiscoveredInterfaces']

                  if x['Caption'].startswith('VLAN')]

       

          print(eth_only)

       

          results2 = swis.invoke(

                  'Orion.NPM.Interfaces',

                  'AddInterfacesOnNode',

                  nodeid,

                  eth_only,

                  'AddDefaultPollers')

       

          print(results2)

       

      requests.packages.urllib3.disable_warnings()

       

      if __name__ == '__main__':

          main()

      ===============================================================================================

       

      The error is:

       

      ===============================================================================================

      Add an SNMP v3c node:

      Adding node IPOFTHEBOX... Traceback (most recent call last):

        File "./prom_add_node2.py", line 112, in <module>

          main()

        File "./prom_add_node2.py", line 39, in main

          results = swis.create('Orion.Nodes', **props)

        File "/usr/lib/python2.7/site-packages/orionsdk/swisclient.py", line 34, in create

          "Create/" + entity, properties).json()

        File "/usr/lib/python2.7/site-packages/orionsdk/swisclient.py", line 59, in _req

          resp.raise_for_status()

        File "/usr/lib/python2.7/site-packages/requests/models.py", line 844, in raise_for_status

          raise HTTPError(http_error_msg, response=self)

      requests.exceptions.HTTPError: 400 Client Error: Object reference not set to an instance of an object. for url: https://NAMEOFTHESOLARWINDSSERVER:17778/SolarWinds/InformationService/v3/Json/Create/Orion.Nodes

      ----------------------------------------------------------------------------------------------------------------------------------------

      {"Message":"Invalid SWIS uri at character 18: Incomplete uri. Parser did not finish in End state, but instead was left in Scheme state\u000d\u000aParameter name: uri","ExceptionType":"System.ArgumentException","FullException":"System.ArgumentException: Invalid SWIS uri at character 18: Incomplete uri. Parser did not finish in End state, but instead was left in Scheme state\u000d\u000aParameter name: uri\u000d\u000a at SolarWinds.Data.Utility.SwisUriParser.ParsingError(String message)\u000d\u000a at SolarWinds.Data.Utility.SwisUriParser.ParseInternal()\u000d\u000a at SolarWinds.InformationService.Core.InformationService.Read(String uri)"}

      ===============================================================================================

       

       

      Any thoughts?