In NMIS and opCharts we can add custom validations for custom fields in the nodes table.

In this example we are using "ci" as the name of our custom field and "CI" as the label to be displayed in the screens.

The steps below are how to accomplish the validation and integration.

Add the custom field to NMIS 

This is done by adding a code block similar to the below in /usr/local/nmis9/conf/Table-Nodes.nmis.

NOTE: If this configuration file does not currently exist in the /usr/local/nmis9/conf/ directory, it will need to be copied from /usr/local/nmis9/conf-default.

{ ci => { header => 'CI', display => 'header,text',value => [""] }}, 

Modify the node_summary_field_list list attribute

To include the new custom field (ci), this is done by updating 'node_summary_field_list' in /usr/local/nmis9/conf/Config.nmis to the below.

'node_summary_field_list' => 'host,uuid,customer,ci,businessService,serviceStatus,snmpdown,wmidown',

Adding custom index

In /usr/local/nmis9/conf/Config.nmis add the following code block under the 'database' section of the configuration.

'custom_indices' => {
      'nodes' => [
          [ {'' => 1}, { unique => 1, partialFilterExpression => { "" => { '$exists' => true } }  }] 

The end result will look similar to the below.

Once the above has been completed, then save the file. You can also verify that the code is valid by executing the below command.

perl -c /usr/local/nmis9/conf/Config.nmis
perl -c /usr/local/nmis9/conf/Config.nmis

If it returns something other than /usr/local/nmis9/conf/Config.nmis syntax OK, you will need to verify that the configurations have been added correctly.

After the addition of custom indices, you will also need to run the below command.

/usr/local/nmis9/bin/nmis-cli act=ensure_indexes debug=9
/usr/local/nmis9/bin/nmis-cli act=ensure_indexes debug=9

Add the Device CI to opCharts and Node Admin Schemas

Node Admin:
Copy /usr/local/omk/lib/json/admin/table_schemas/admin_node-ip.json to /usr/local/omk/conf/table_schemas/ and add in the below:

   "name": "",
   "label": "CI",
   "cell": "String",
   "editable": false,
   "search": "iregex"

Copy /usr/local/omk/lib/json/opCharts/table_schemas/opCharts_node-list.json to /usr/local/omk/conf/table_schemas and add in the below:

   "name": "",
   "label": "CI",
   "cell": "String",
   "editable": false,
   "search": "iregex"

Node Admin Edit Node Fields:

Create /usr/local/omk/conf/form_schemas/admin_nodes.json and add in the below:

{"label": "Ci",
 "description": "Edit in conf/form_schemas/admin_nodes.json",
 "component": ["node_admin"],
 "tags": ["node"],
 "schema": {
         "": {
                 "title": "CI",
                 "type": "Text"}

opCharts Node Summary Table:

Copy /usr/local/omk/lib/json/opCharts/table_schemas/opCharts_node-summary-table.json to /usr/local/omk/conf/table_schemas/ and add the device_ci as shown below:

// VERSION=1.518.0
  { "name" : "ci", "label": "CI", "cell": "String"},
  { "name" : "sysDescr", "label": "sysDescr", "cell": "Tooltip", "formatter": "ShortenedString", "maxLength" : 48},
  { "name" : "lastUpdateSec", "label" : "Last Updated", "cell" : "String", "formatter" : "UnixTime"},
  { "name" : "sysUpTimeSec", "label" : "Uptime", "cell" : "String", "formatter" : "UpTime"},
  { "name" : "remote", "label" : "Managed by"}

Final Steps

Create a directory named plugins_available in /usr/local/nmis9/conf-default/:

cd /usr/local/nmis9/conf-default/
mkdir plugins_available

Copy the from /usr/local/nmis9/conf-default/validation_plugins/ into the plugins_available directory.

Then change directory into the /usr/local/nmis9/conf-default/plugins/

cp /usr/local/nmis9/conf-default/validation_plugins/  /usr/local/nmis9/conf-default/plugins_available/
cd plugins

Create a soft link:

ln -s /usr/local/nmis9/conf-default/plugins_available/

Once the above has been completed, then restart nmis9d and omkd services.

sudo service nmis9d restart
sudo service omkd restart

  • No labels