Using nxshell to automate bulk operations
Introduction
NxShell is based on Jython and provide access to NetXMS Java API using interactive shell. NxShell is build as single jar file, which includes all required libraries.
Download: http://www.netxms.org/download/nxshell-1.2.5.jar (change 1.2.5 to required version)
Usage
Start as interactive shell:
java -jar nxshell-1.2.5.jar
Execute script "test.py":
java -jar nxshell-1.2.5.jar test.py
When NxShell is started, it tries to get server IP, login and password from command line parameters. In interactive mode, user will be asked for details, otherwise default values will be used.
Start as interactive shell, with IP and Login provided (password will be asked):
java -Dnetxms.server=127.0.0.1 -Dnetxms.login=admin -jar nxshell-1.2.5.jar
Properties
These properties should be set with JVM's "-D" option. Please make sure that all "-D" options are before "-jar".
Parameter | Default Value |
---|---|
netxms.server | 127.0.0.1 |
netxms.login | admin |
netxms.password | netxms |
Scripting
For details on API please refer to javadoc at http://www.netxms.org/documentation/javadoc/latest/.
NxShell provide user with already connected and synchronised session to simplify scripting. Most required packages are imported as well to minimize typing.
Global Variables
Variable | Type | Notes |
---|---|---|
session | org.netxms.client.NXCSession | |
s | org.netxms.client.NXCSession | Alias for "session" |
Helper Functions
Sample Scripts
Create Container and some nodes
parentId = objects.GenericObject.SERVICEROOT # Infrastructure Services root cd = NXCObjectCreationData(objects.GenericObject.OBJECT_CONTAINER, "Sample Container", parentId); containerId = session.createObject(cd) # createObject return ID of newly created object print '"Sample Container" created, id=%d' % (containerId, ) flags = NXCObjectCreationData.CF_DISABLE_ICMP | \ NXCObjectCreationData.CF_DISABLE_NXCP | \ NXCObjectCreationData.CF_DISABLE_SNMP for i in xrange(0, 5): name = "Node %d" % (i + 1, ) cd = NXCObjectCreationData(objects.GenericObject.OBJECT_NODE, name, containerId); cd.setCreationFlags(flags); cd.setPrimaryName("0.0.0.0") # Create node without IP address nodeId = session.createObject(cd) print '"%s" created, id=%d' % (name, nodeId)
Change Object comments
for name in open("nodes.txt").readlines(): node = session.findObjectByName(name.strip()) if node: comments = "New Comment" existingComments = node.getComments() # will return null if there are no comments if existingComments: comments += "\n" + existingComments session.updateObjectComments(node.getObjectId(), comments)
Manage / Unmanage interfaces based on the name
(works for any Object).
from org.netxms.client.objects import GenericObject, Node, Interface for name in open("nodes.txt").readlines(): node = session.findObjectByName(name.strip()) if node: for interface in node.getAllChilds(GenericObject.OBJECT_INTERFACE): # 3 == interface name = interface.getObjectName() if name.startswith('lo'): session.setObjectManaged(interface.getObjectId(), True) else: session.setObjectManaged(interface.getObjectId(), False)
Disable SNMP polling for node
from org.netxms.client.objects import Node for name in open("nodes.txt").readlines(): node = session.findObjectByName(name.strip()) if node: md = NXCObjectModificationData(node.getObjectId()) newFlags = node.getFlags() | Node.NF_DISABLE_SNMP md.setObjectFlags(newFlags) session.modifyObject(md)