Introduction
In NMIS and opCharts we can add custom validations for custom fields in the nodes table.
This is a list of the steps the customer needs to follow :-
In this example we are using "device_ci" as the name of our custom field and "Device CI" as the label to be displayed in the screens.
1) Add the custom field to NMIS
/usr/local/nmis9/conf-default/Table-Nodes.nmis
{ device_ci => { header => 'Device CI', display => 'header,text',value => [""] }},
2) Modify the node_summary_field_list list attribute in /usr/local/nmis9/conf/Config.nmis
'node_summary_field_list' => 'host,uuid,customer,device_ci,businessService,serviceStatus,snmpdown,wmidown',
3) add a custom index in Config.nmis.
Config.nmis::database::
'custom_indices' => { 'nodes' => [ [ {'configuration.device_ci' => 1}, { unique => 1, partialFilterExpression => { "configuration.device_ci" => { '$exists' => true } } }] ] }
Then verify by running the following command
perl -c /usr/local/nmis9/conf/Config.nmis
4) After the addition of custom indices, please run ensure indexes to add custom index.
/usr/local/nmis9/bin/nmis-cli act=ensure_indexes debug=9
5) Add the Device CI to the admin node table schema
/usr/local/omk/lib/json/admin/table_schemas/admin_node-ip.json
{ "name": "nodes.configuration.device_ci", "label": "Device CI", "cell": "String", "editable": false, "search": "iregex" }
6) Add the Device Ci to the opCharts node table schema
/usr/local/omk/lib/json/opCharts/table_schemas/opCharts_node-list.json
{ "name": "nodes.configuration.device_ci", "label": "Device CI", "cell": "String", "editable": false, "search": "iregex" }
7) Add the Device Ci to the admin edit node fields. (admin_nodes.json file will need to be created in the "/usr/local/omk/conf/form_schemas/" directory )
vi /usr/local/omk/conf/form_schemas/admin_nodes.json
{"label": "Device Ci", "description": "Edit in conf/form_schemas/admin_nodes.json", "component": ["node_admin"], "tags": ["node"], "schema": { "configuration.device_ci": { "title": "Device CI", "type": "Text"} }}
}
8) Add the device_ci to omk/opCharts/nodes so it shows in the node info table
vi /usr/local/omk/lib/json/opCharts/table_schemas/opCharts_node-summary-table.json and add the device_ci as shown below
// VERSION=1.518.0 [ "group", "host", "host_addr", "location", "nodeVendor", "nodeModel", { "name" : "device_ci", "label": "Device 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"} ]
9) Create a directory called plugins_available @ /usr/local/nmis9/conf-default/
Copy the NodeValidation.pm from /usr/local/nmis9/conf-default/validation_plugins/NodeValidation.pm into the plugins_available directory.
Then cd into the /usr/local/nmis9/conf-default/plugins/
cd /usr/local/nmis9/conf-default/ mkdir plugins_available cp /usr/local/nmis9/conf-default/validation_plugins/NodeValidation.pm /usr/local/nmis9/conf-default/plugins_available/ cd plugins
10) Create a soft link of that file in plugins
ln -s /usr/local/nmis9/conf-default/plugins_available/NodeValidations.pm NodeValidations.pm
11) Finally restart services
sudo service nmis9d restart sudo service omkd restart