From fe8f31a32ddac3723597f4ce3f18ecaeb7115778 Mon Sep 17 00:00:00 2001 From: Raj Reddy Date: Wed, 30 Mar 2016 18:14:42 -0700 Subject: [PATCH] Adding prouter connectivity alarm to check if the prouter is appropriately connected to vrouter-agent Closes-Bug: #1550888 (cherry picked from commit 71ba1ed70fe93f60ff26018ae3ca2d111e890ca9) Conflicts: src/opserver/SConscript Change-Id: Ia76d8687484b6d141786c9f36ac4554d499461a8 --- src/opserver/SConscript | 2 + .../alarm_prouter_connectivity/SConscript | 44 +++++++++++++++++ .../alarm_prouter_connectivity/__init__.py | 0 .../alarm_prouter_connectivity/main.py | 49 +++++++++++++++++++ .../alarm_prouter_connectivity/setup.py | 18 +++++++ src/opserver/test-requirements.txt | 1 + 6 files changed, 114 insertions(+) create mode 100644 src/opserver/plugins/alarm_prouter_connectivity/SConscript create mode 100644 src/opserver/plugins/alarm_prouter_connectivity/__init__.py create mode 100644 src/opserver/plugins/alarm_prouter_connectivity/main.py create mode 100644 src/opserver/plugins/alarm_prouter_connectivity/setup.py diff --git a/src/opserver/SConscript b/src/opserver/SConscript index 523da3ff60a..f57b5b23565 100644 --- a/src/opserver/SConscript +++ b/src/opserver/SConscript @@ -111,6 +111,7 @@ OpEnv.SConscript('plugins/alarm_config_incorrect/SConscript', exports='OpEnv', d OpEnv.SConscript('plugins/alarm_address_mismatch/SConscript', exports='OpEnv', duplicate = 0) OpEnv.SConscript('plugins/alarm_storage/SConscript', exports='OpEnv', duplicate = 0) OpEnv.SConscript('plugins/alarm_disk_usage/SConscript', exports='OpEnv', duplicate = 0) +OpEnv.SConscript('plugins/alarm_prouter_connectivity/SConscript', exports='OpEnv', duplicate = 0) OpEnv.SConscript('docs/SConscript', exports='OpEnv', duplicate = 0) OpEnv.Default(sdist_gen) @@ -249,6 +250,7 @@ test_depends = [ '/opserver/plugins/alarm_address_mismatch/dist/alarm_address_mismatch-0.1dev.tar.gz', '/opserver/plugins/alarm_storage/dist/alarm_storage-0.1dev.tar.gz', '/opserver/plugins/alarm_disk_usage/dist/alarm_disk_usage-0.1dev.tar.gz', + '/opserver/plugins/alarm_prouter_connectivity/dist/alarm_prouter_connectivity-0.1dev.tar.gz', ] if OpEnv['OPT'] == 'coverage': diff --git a/src/opserver/plugins/alarm_prouter_connectivity/SConscript b/src/opserver/plugins/alarm_prouter_connectivity/SConscript new file mode 100644 index 00000000000..43dbd5d2a45 --- /dev/null +++ b/src/opserver/plugins/alarm_prouter_connectivity/SConscript @@ -0,0 +1,44 @@ +# -*- mode: python; -*- + +# +# Copyright (c) 2016 Juniper Networks, Inc. All rights reserved. +# + +import sys +Import('OpEnv') + +env = OpEnv.Clone() + +setup_sources = [ + 'setup.py', + ] + +setup_sources_rules = [] +for file in setup_sources: + setup_sources_rules.append(env.Install(".", + "#/controller/src/opserver/plugins/alarm_prouter_connectivity/" + file)) + +local_sources = [ + '__init__.py', + 'main.py', +] +local_sources_rules = [] +for file in local_sources: + local_sources_rules.append(env.Install(Dir("alarm_prouter_connectivity"), file)) + +sdist_depends = [setup_sources_rules, local_sources_rules] +cd_cmd = 'cd ' + Dir('.').path + ' && ' +sdist_gen = env.Command('dist/alarm_prouter_connectivity-0.1dev.tar.gz', 'setup.py', + cd_cmd + 'python setup.py sdist') +env.Depends(sdist_gen, sdist_depends) +env.Default(sdist_gen) +OpEnv['ALARM_PROUTER_CONNNECTIVITY_PKG'] = sdist_gen + +if 'install' in BUILD_TARGETS: + install_cmd = env.Command(None, + 'setup.py', + cd_cmd + 'python setup.py install %s' % + env['PYTHON_INSTALL_OPT']) + env.Depends(install_cmd, sdist_depends) + env.Alias('install', install_cmd) + diff --git a/src/opserver/plugins/alarm_prouter_connectivity/__init__.py b/src/opserver/plugins/alarm_prouter_connectivity/__init__.py new file mode 100644 index 00000000000..e69de29bb2d diff --git a/src/opserver/plugins/alarm_prouter_connectivity/main.py b/src/opserver/plugins/alarm_prouter_connectivity/main.py new file mode 100644 index 00000000000..d6610e1bd20 --- /dev/null +++ b/src/opserver/plugins/alarm_prouter_connectivity/main.py @@ -0,0 +1,49 @@ +# +# Copyright (c) 2016 Juniper Networks, Inc. All rights reserved. +# + +from opserver.plugins.alarm_base import * +from opserver.sandesh.alarmgen_ctrl.sandesh_alarm_base.ttypes import * +import json + +class ProuterConnectivity(AlarmBase): + """Prouter connectivity to controlling tor agent does not exist + we look for non-empty value for connected_agent_list""" + + def __init__(self): + AlarmBase.__init__(self, AlarmBase.SYS_ERR) + + def __call__(self, uve_key, uve_data): + #check to see if prouter is configured to be managed by vrouter-agent + contrail_config = uve_data.get("ContrailConfig", None) + if not contrail_config or\ + not "elements" in contrail_config: + return None + uattr = contrail_config["elements"] + if isinstance(uattr,list): + uattr = uattr[0][0] + if not "virtual_router_refs" in uattr: + return None + + or_list = [] + v2 = None + v1 = uve_data.get("ProuterData",None) + if v1 is not None: + v2 = v1.get("connected_agent_list",None) + if v2 is None: + or_list.append(AllOf(all_of=[AlarmElement(\ + rule=AlarmTemplate(oper="==", + operand1=Operand1(keys=["ProuterData","connected_agent_list"]), + operand2=Operand2(json_value="null")), + json_operand1_value="null")])) + return or_list + + if not (len(v2) == 1): + or_list.append(AllOf(all_of=[AlarmElement(\ + rule=AlarmTemplate(oper="size!=", + operand1=Operand1(keys=["ProuterData","connected_agent_list"]), + operand2=Operand2(json_value=json.dumps(1))), + json_operand1_value=json.dumps(v2))])) + return or_list + + return None diff --git a/src/opserver/plugins/alarm_prouter_connectivity/setup.py b/src/opserver/plugins/alarm_prouter_connectivity/setup.py new file mode 100644 index 00000000000..8d765ca01be --- /dev/null +++ b/src/opserver/plugins/alarm_prouter_connectivity/setup.py @@ -0,0 +1,18 @@ +# +# Copyright (c) 2016 Juniper Networks, Inc. All rights reserved. +# + +from setuptools import setup, find_packages + +setup( + name='alarm_prouter_connectivity', + version='0.1dev', + packages=find_packages(), + entry_points = { + 'contrail.analytics.alarms': [ + 'ObjectPRouter = alarm_prouter_connectivity.main:ProuterConnectivity', + ], + }, + zip_safe=False, + long_description="ProuterConnectivity alarm" +) diff --git a/src/opserver/test-requirements.txt b/src/opserver/test-requirements.txt index 0f0fc205026..199a55b61da 100644 --- a/src/opserver/test-requirements.txt +++ b/src/opserver/test-requirements.txt @@ -31,3 +31,4 @@ cassandra-driver ../opserver/plugins/alarm_vrouter_interface/dist/alarm_vrouter_interface-0.1dev.tar.gz ../opserver/plugins/alarm_xmpp_connectivity/dist/alarm_xmpp_connectivity-0.1dev.tar.gz ../opserver/plugins/alarm_storage/dist/alarm_storage-0.1dev.tar.gz +../opserver/plugins/alarm_prouter_connectivity/dist/alarm_prouter_connectivity-0.1dev.tar.gz