Source code for networkapi.plugins.F5.monitor

# -*- coding: utf-8 -*-
import logging

from networkapi.plugins import exceptions as base_exceptions
from networkapi.plugins.F5 import types
from networkapi.plugins.F5.f5base import F5Base
from networkapi.plugins.F5.util import logger
from networkapi.util import valid_regex

log = logging.getLogger(__name__)


[docs]class Monitor(F5Base):
[docs] @logger def prepare_template(self, **kwargs): templates = [] template_attributes = [] template_names = [] values = [] monitor_associations = [] monitor_associations_nodes = { 'nodes': list(), 'monitor_rules': list() } try: if kwargs.get('healthcheck'): for i, pool in enumerate(kwargs['names']): if kwargs['healthcheck'][i]: monitor_association = { 'pool_name': None, 'monitor_rule': { 'monitor_templates': [], 'type': None, 'quorum': None } } if kwargs['healthcheck'][i]['healthcheck_request'] != '' or \ kwargs['healthcheck'][i]['healthcheck_expect'] != '' or \ kwargs['healthcheck'][i]['destination'] != '*:*': name = kwargs['healthcheck'][i]['identifier'] template = { 'template_name': name, 'template_type': types.template_type(kwargs['healthcheck'][i]['healthcheck_type']) } templates.append(template) template_attributes.append({ 'parent_template': kwargs['healthcheck'][i]['healthcheck_type'].lower(), 'interval': 5, 'timeout': 16, 'dest_ipport': types.address_type(kwargs['healthcheck'][i]['destination']), 'is_read_only': 0, 'is_directly_usable': 1 }) hr = kwargs['healthcheck'][ i]['healthcheck_request'] healthcheck_expect = kwargs[ 'healthcheck'][i]['healthcheck_expect'] if kwargs['healthcheck'][i]['healthcheck_type'] in ['HTTP', 'HTTPS']: rg = '^([\" ]?)+(GET|HEAD|POST|PUT|CONNECT|DELETE|OPTIONS|TRACE|PATCH)' if not valid_regex(hr, rg): hr = 'GET ' + hr # do escape when healthcheck has simple \r\n rg = '((\\r\\n))' if valid_regex(hr, rg): log.debug('adding unicode-escape') hr = hr.encode('unicode-escape') # add HTTP/1.\\r\\n\\r\\n when plugin no receive in # healthcheck rg = 'HTTP\/1' if not valid_regex(hr, rg): log.debug('adding HTTP/1.\\r\\n\\r\\n') hr = hr + ' HTTP/1.0\\r\\n\\r\\n' # add \\r\\n\\r\\n when plugin no receive in # healthcheck rg = '(?:((\\r\\n)|(\\\\r\\\\n)){1,2}?)$' if not valid_regex(hr, rg): log.debug('adding \\r\\n\\r\\n') hr = hr + '\\r\\n\\r\\n' healthcheck_request = hr template_names.append(name) values.append({ 'type': 'STYPE_SEND', 'value': healthcheck_request }) template_names.append(name) values.append({ 'type': 'STYPE_RECEIVE', 'value': healthcheck_expect }) else: name = kwargs['healthcheck'][i][ 'healthcheck_type'].lower() monitor_association['pool_name'] = kwargs['names'][i] monitor_association['monitor_rule'][ 'monitor_templates'].append(name) monitor_association['monitor_rule'][ 'type'] = 'MONITOR_RULE_TYPE_SINGLE' monitor_association['monitor_rule']['quorum'] = 0 monitor_associations.append(monitor_association) if name == 'udp': for node in kwargs['members'][i]: monitor_association_node = { 'monitor_templates': [], 'type': None, 'quorum': None } monitor_association_node[ 'monitor_templates'].append('icmp') monitor_association_node[ 'type'] = 'MONITOR_RULE_TYPE_SINGLE' monitor_association_node['quorum'] = 0 monitor_associations_nodes['monitor_rules'].append( monitor_association_node) monitor_associations_nodes[ 'nodes'].append(node['address']) except Exception, e: log.error(e) raise base_exceptions.CommandErrorException(e) templates_extra = { 'templates': templates, 'template_attributes': template_attributes, 'template_names': template_names, 'values': values } return monitor_associations, monitor_associations_nodes, templates_extra
[docs] @logger def create_template(self, **kwargs): templates = kwargs['templates_extra']['templates'] template_attributes = kwargs['templates_extra']['template_attributes'] template_names = kwargs['templates_extra']['template_names'] values = kwargs['templates_extra']['values'] if len(templates) > 0: try: self._lb._channel.System.Session.start_transaction() self._lb._channel.LocalLB.Monitor.create_template( templates=templates, template_attributes=template_attributes ) except Exception, e: self._lb._channel.System.Session.rollback_transaction() raise base_exceptions.CommandErrorException(e) else: self._lb._channel.System.Session.submit_transaction() try: self._lb._channel.System.Session.start_transaction() self._lb._channel.LocalLB.Monitor.set_template_string_property( template_names=template_names, values=values ) except Exception, e: self._lb._channel.System.Session.rollback_transaction() raise base_exceptions.CommandErrorException(e) else: self._lb._channel.System.Session.submit_transaction()
[docs] @logger def get_template_string_property(self, **kwargs): strings = self._lb._channel.LocalLB.Monitor.get_template_string_property( template_names=kwargs['template_names'], property_types=kwargs['property_types'] ) return strings
[docs] @logger def get_template_destination(self, **kwargs): destinations = self._lb._channel.LocalLB.Monitor.get_template_destination( template_names=kwargs['template_names'] ) return destinations
[docs] @logger def delete_template(self, **kwargs): for k, v in kwargs.items(): if v == []: return self._lb._channel.System.Session.start_transaction() try: self._lb._channel.LocalLB.Monitor.delete_template( template_names=kwargs['template_names']) except Exception: self._lb._channel.System.Session.rollback_transaction() else: self._lb._channel.System.Session.submit_transaction()