Script file
port_admin_state_monitor.1.0.py
#-*- coding: utf-8 -*-
#
#Copyright (c) 2017 Hewlett Packard Enterprise Development LP
#
#Licensed under the Apache License, Version 2.0 (the "License");
#you may not use this file except in compliance with the License.
#You may obtain a copy of the License at
#
#http://www.apache.org/licenses/LICENSE-2.0
#
#Unless required by applicable law or agreed to in writing,
#software distributed under the License is distributed on an
#"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
#KIND, either express or implied. See the License for the
#specific language governing permissions and limitations
#under the License.
Manifest = {
'Name': 'port_admin_state_monitor',
'Description': 'Port Admin Status Monitoring Agent',
'Version': '1.0',
'Author': 'Aruba Networks'
}
ParameterDefinitions = {
'port_id': {
'Name': 'Port Id',
'Description': 'Port to be monitored',
'Type': 'string',
'Default': '1/1/1'
}
}
class Policy(NAE):
def __init__(self):
#Port status
uri1 = '/rest/v1/system/ports/{}?attributes=admin'
self.m1 = Monitor(
uri1,
'Port admin status',
[self.params['port_id']])
self.r1 = Rule('Port disabled administratively')
self.r1.condition('transition {} from "up" to "down"', [self.m1])
self.r1.action(self.action_port_down)
#Reset policy status when port is up
self.r2 = Rule('Port enabled administratively')
self.r2.condition('transition {} from "down" to "up"', [self.m1])
self.r2.action(self.action_port_up)
def action_port_down(self, event):
ActionSyslog(
'Port {} is disabled administratively',
[self.params['port_id']])
ActionCLI("show lldp configuration {}", [self.params['port_id']])
ActionCLI("show interface {} extended", [self.params['port_id']])
if self.get_alert_level() != AlertLevel.CRITICAL:
self.set_alert_level(AlertLevel.CRITICAL)
self.logger.debug("### Critical Callback executed")
def action_port_up(self, event):
self.logger.info("Current alert level: " + str(self.get_alert_level()))
if self.get_alert_level() is not None:
ActionSyslog(
'Port {} is enabled administratively',
[self.params['port_id']])
self.remove_alert_level()
self.logger.debug('Unset the previous status')
self.logger.debug('### Normal Callback executed')
Script in base64 encoded format
Iy0qLSBjb2Rpbmc6IHV0Zi04IC0qLQ0KIw0KI0NvcHlyaWdodCAoYykgMjAxNyBIZXdsZXR0IFBhY2thcmQgRW50ZXJwcmlzZSBEZXZlbG9wbWVudCBMUA0KIw0KI0xpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOw0KI3lvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4NCiNZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQNCiMNCiNodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjANCiMNCiNVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsDQojc29mdHdhcmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4NCiMiQVMgSVMiIEJBU0lTLCBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkNCiNLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZQ0KI3NwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQgbGltaXRhdGlvbnMNCiN1bmRlciB0aGUgTGljZW5zZS4NCg0KTWFuaWZlc3QgPSB7DQogICAgJ05hbWUnOiAncG9ydF9hZG1pbl9zdGF0ZV9tb25pdG9yJywNCiAgICAnRGVzY3JpcHRpb24nOiAnUG9ydCBBZG1pbiBTdGF0dXMgTW9uaXRvcmluZyBBZ2VudCcsDQogICAgJ1ZlcnNpb24nOiAnMS4wJywNCiAgICAnQXV0aG9yJzogJ0FydWJhIE5ldHdvcmtzJw0KfQ0KDQpQYXJhbWV0ZXJEZWZpbml0aW9ucyA9IHsNCiAgICAncG9ydF9pZCc6IHsNCiAgICAgICAgJ05hbWUnOiAnUG9ydCBJZCcsDQogICAgICAgICdEZXNjcmlwdGlvbic6ICdQb3J0IHRvIGJlIG1vbml0b3JlZCcsDQogICAgICAgICdUeXBlJzogJ3N0cmluZycsDQogICAgICAgICdEZWZhdWx0JzogJzEvMS8xJw0KICAgIH0NCn0NCg0KY2xhc3MgUG9saWN5KE5BRSk6DQoNCiAgICBkZWYgX19pbml0X18oc2VsZik6DQoNCiNQb3J0IHN0YXR1cw0KICAgICAgICB1cmkxID0gJy9yZXN0L3YxL3N5c3RlbS9wb3J0cy97fT9hdHRyaWJ1dGVzPWFkbWluJw0KICAgICAgICBzZWxmLm0xID0gTW9uaXRvcigNCiAgICAgICAgICAgIHVyaTEsDQogICAgICAgICAgICAnUG9ydCBhZG1pbiBzdGF0dXMnLA0KICAgICAgICAgICAgW3NlbGYucGFyYW1zWydwb3J0X2lkJ11dKQ0KICAgICAgICBzZWxmLnIxID0gUnVsZSgnUG9ydCBkaXNhYmxlZCBhZG1pbmlzdHJhdGl2ZWx5JykNCiAgICAgICAgc2VsZi5yMS5jb25kaXRpb24oJ3RyYW5zaXRpb24ge30gZnJvbSAidXAiIHRvICJkb3duIicsIFtzZWxmLm0xXSkNCiAgICAgICAgc2VsZi5yMS5hY3Rpb24oc2VsZi5hY3Rpb25fcG9ydF9kb3duKQ0KDQojUmVzZXQgcG9saWN5IHN0YXR1cyB3aGVuIHBvcnQgaXMgdXANCiAgICAgICAgc2VsZi5yMiA9IFJ1bGUoJ1BvcnQgZW5hYmxlZCBhZG1pbmlzdHJhdGl2ZWx5JykNCiAgICAgICAgc2VsZi5yMi5jb25kaXRpb24oJ3RyYW5zaXRpb24ge30gZnJvbSAiZG93biIgdG8gInVwIicsIFtzZWxmLm0xXSkNCiAgICAgICAgc2VsZi5yMi5hY3Rpb24oc2VsZi5hY3Rpb25fcG9ydF91cCkNCg0KICAgIGRlZiBhY3Rpb25fcG9ydF9kb3duKHNlbGYsIGV2ZW50KToNCiAgICAgICAgQWN0aW9uU3lzbG9nKA0KICAgICAgICAgICAgJ1BvcnQge30gaXMgZGlzYWJsZWQgYWRtaW5pc3RyYXRpdmVseScsDQogICAgICAgICAgICBbc2VsZi5wYXJhbXNbJ3BvcnRfaWQnXV0pDQogICAgICAgIEFjdGlvbkNMSSgic2hvdyBsbGRwIGNvbmZpZ3VyYXRpb24ge30iLCBbc2VsZi5wYXJhbXNbJ3BvcnRfaWQnXV0pDQogICAgICAgIEFjdGlvbkNMSSgic2hvdyBpbnRlcmZhY2Uge30gZXh0ZW5kZWQiLCBbc2VsZi5wYXJhbXNbJ3BvcnRfaWQnXV0pDQogICAgICAgIGlmIHNlbGYuZ2V0X2FsZXJ0X2xldmVsKCkgIT0gQWxlcnRMZXZlbC5DUklUSUNBTDoNCiAgICAgICAgICAgIHNlbGYuc2V0X2FsZXJ0X2xldmVsKEFsZXJ0TGV2ZWwuQ1JJVElDQUwpDQogICAgICAgIHNlbGYubG9nZ2VyLmRlYnVnKCIjIyMgQ3JpdGljYWwgQ2FsbGJhY2sgZXhlY3V0ZWQiKQ0KDQogICAgZGVmIGFjdGlvbl9wb3J0X3VwKHNlbGYsIGV2ZW50KToNCiAgICAgICAgc2VsZi5sb2dnZXIuaW5mbygiQ3VycmVudCBhbGVydCBsZXZlbDogIiArIHN0cihzZWxmLmdldF9hbGVydF9sZXZlbCgpKSkNCiAgICAgICAgaWYgc2VsZi5nZXRfYWxlcnRfbGV2ZWwoKSBpcyBub3QgTm9uZToNCiAgICAgICAgICAgIEFjdGlvblN5c2xvZygNCiAgICAgICAgICAgICAgICAnUG9ydCB7fSBpcyBlbmFibGVkIGFkbWluaXN0cmF0aXZlbHknLA0KICAgICAgICAgICAgICAgIFtzZWxmLnBhcmFtc1sncG9ydF9pZCddXSkNCiAgICAgICAgICAgIHNlbGYucmVtb3ZlX2FsZXJ0X2xldmVsKCkNCiAgICAgICAgICAgIHNlbGYubG9nZ2VyLmRlYnVnKCdVbnNldCB0aGUgcHJldmlvdXMgc3RhdHVzJykNCg0KICAgICAgICBzZWxmLmxvZ2dlci5kZWJ1ZygnIyMjIE5vcm1hbCBDYWxsYmFjayBleGVjdXRlZCcp