Quantcast
Channel: THWACK: All Content - Orion SDK
Viewing all articles
Browse latest Browse all 2677

Python SDK - Unmanage/Remanage a node

$
0
0

Hi everyone,

 

We have a process for deploying code to web servers.  When we put the web server into 'maintenance' mode to do the code deploy, we'd also like to unmanage the node in SolarWinds as well.  I'm not sure if I've run into a bug or if I'm simply doing something wrong.  Anyway I hope some of the great folks on the formus can see what's going on.

 

I'm using v1.10 of the SDK and Python 2.7.something

 

As you'll see in the end, the error I'm getting is, "TypeError: unbound method _json_serial() must be called with SwisClient instance as first argument (got datetime instance instead)".

 

 

Here's the very basic script, it's mainly from the SwisClient.py example

import requests

import json

from getpass import getpass

from datetime import datetime, timedelta

import SwisClient

 

npm_server = "myOrionServer.local"

username = raw_input("Username: ")

password = getpass("Password: ")

swis = SwisClient(npm_server,username,password)

node = 'myNode.local'

results = swis.query("SELECT NodeID from Orion.Nodes WHERE NodeName='" + node + "'")

interfaceId = results["results"][0]["NodeID"]

netObjectId = "N:{}".format(interfaceId)

now = datetime.utcnow()

tomorrow = now + timedelta(days=1)

swis.invoke("Orion.Nodes", "Unmanage", netObjectId, now, tomorrow, False)

 

Here's the obvsucated values for results, interfaceId, netObjectId, now, tomorrow:

 

In [261]: results

Out[261]: {u'results': [{u'NodeID': 4526}]}

 

In [262]: interfaceId

Out[262]: 4526

 

In [263]: netObjectId

Out[263]: 'N:4526'

 

In [265]: now

Out[265]: datetime.datetime(2015, 6, 10, 20, 34, 46, 345759)

 

In [266]: tomorrow

Out[266]: datetime.datetime(2015, 6, 11, 20, 34, 46, 345759)

 

-=-=-=-=-=-  So everything looks good so far -=-=-=-=-=-

 

Here's where I get an error

In [267]: swis.invoke("Orion.Nodes", "Unmanage", netObjectId, now, tomorrow, False)

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

TypeError                                 Traceback (most recent call last)

<ipython-input-267-70d4084b09c9> in <module>()

----> 1 swis.invoke("Orion.Nodes", "Unmanage", netObjectId, now, tomorrow, False)

 

<ipython-input-5-0266593e63b0> in invoke(self, entity, verb, *args)

      8

      9     def invoke(self, entity, verb, *args):

---> 10         return self._req("POST", "Invoke/%s/%s" % (entity, verb), args).json()

     11

     12     def create(self, entity, **properties):

 

<ipython-input-5-0266593e63b0> in _req(self, method, frag, data)

     31     def _req(self, method, frag, data=None):

     32         return requests.request(method, self.url + frag,

---> 33             data=json.dumps(data, default=SwisClient._json_serial),

     34             verify=False,

     35             auth=self.credentials,

 

/usr/lib/python2.7/json/__init__.pyc in dumps(obj, skipkeys, ensure_ascii, check_circular, allow_nan, cls, indent, separators, encoding, default, sort_keys, **kw)

    248         check_circular=check_circular, allow_nan=allow_nan, indent=indent,

    249         separators=separators, encoding=encoding, default=default,

--> 250         sort_keys=sort_keys, **kw).encode(obj)

    251

    252

 

/usr/lib/python2.7/json/encoder.pyc in encode(self, o)

    205         # exceptions aren't as detailed.  The list call should be roughly

    206         # equivalent to the PySequence_Fast that ''.join() would do.

--> 207         chunks = self.iterencode(o, _one_shot=True)

    208         if not isinstance(chunks, (list, tuple)):

    209             chunks = list(chunks)

 

/usr/lib/python2.7/json/encoder.pyc in iterencode(self, o, _one_shot)

    268                 self.key_separator, self.item_separator, self.sort_keys,

    269                 self.skipkeys, _one_shot)

--> 270         return _iterencode(o, 0)

    271

    272 def _make_iterencode(markers, _default, _encoder, _indent, _floatstr,

 

TypeError: unbound method _json_serial() must be called with SwisClient instance as first argument (got datetime instance instead)

 

 

 

Sooooo, I'm not awesome at Python, but it seems like I maybe should have the Node's Uri in there somewhere?  I don't know, this is my first time writing for SolarWinds in Python, I'd much prefer to use PowerShell, but the 'calling server' is Linux. 

 

 

-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=

On a side note, a dictionary containing a list of dictionaries.. that's just plain evil.. I still can't wrap my head around the 'pythonic' way to get at the key, values pairs for the dictionary contained in the list.

 

 

 

 

Thanks,

Jim


Viewing all articles
Browse latest Browse all 2677

Trending Articles



<script src="https://jsc.adskeeper.com/r/s/rssing.com.1596347.js" async> </script>