# -*- coding:utf-8 -*-
# Licensed to the Apache Software Foundation (ASF) under one or more
# contributor license agreements. See the NOTICE file distributed with
# this work for additional information regarding copyright ownership.
# The ASF licenses this file to You 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.
from networkapiclient.GenericClient import GenericClient
from networkapiclient.exception import InvalidParameterError
from networkapiclient.utils import is_valid_int_param, get_list_map
[docs]class EnvironmentVIP(GenericClient):
def __init__(self, networkapi_url, user, password, user_ldap=None):
"""Class constructor receives parameters to connect to the networkAPI.
:param networkapi_url: URL to access the network API.
:param user: User for authentication.
:param password: Password for authentication.
"""
super(
EnvironmentVIP,
self).__init__(
networkapi_url,
user,
password,
user_ldap)
[docs] def list_all(self):
"""
List all environment vips
:return: Following dictionary:
::
{'environment_vip': [{'id': <id>,
'finalidade_txt': <finalidade_txt>,
'cliente_txt': <cliente_txt>,
'ambiente_p44_txt': <ambiente_p44_txt> } {... other environments vip ...}]}
:raise DataBaseError: Networkapi failed to access the database.
:raise XMLError: Networkapi failed to generate the XML response.
"""
url = 'environmentvip/all/'
code, xml = self.submit(None, 'GET', url)
key = 'environment_vip'
return get_list_map(self.response(code, xml, [key]), key)
[docs] def list_all_available(self, id_vlan):
"""
List all environment vips availables
:return: Following dictionary:
::
{'environment_vip': [{'id': <id>,
'finalidade_txt': <finalidade_txt>,
'cliente_txt': <cliente_txt>,
'ambiente_p44_txt': <ambiente_p44_txt> }
{... other environments vip ...}]}
:raise DataBaseError: Networkapi failed to access the database.
:raise XMLError: Networkapi failed to generate the XML response.
"""
url = 'environmentvip/search/' + str(id_vlan)
code, xml = self.submit(None, 'GET', url)
key = 'environment_vip'
return get_list_map(self.response(code, xml, [key]), key)
[docs] def add(self, finalidade_txt, cliente_txt, ambiente_p44_txt, description):
"""Inserts a new Environment VIP and returns its identifier.
:param finalidade_txt: Finality. String with a maximum of 50 characters and respect [a-zA-Z\_-]
:param cliente_txt: ID Client. String with a maximum of 50 characters and respect [a-zA-Z\_-]
:param ambiente_p44_txt: Environment P44. String with a maximum of 50 characters and respect [a-zA-Z\_-]
:return: Following dictionary:
::
{'environment_vip': {'id': < id >}}
:raise InvalidParameterError: The value of finalidade_txt, cliente_txt or ambiente_p44_txt is invalid.
:raise DataBaseError: Networkapi failed to access the database.
:raise XMLError: Networkapi failed to generate the XML response.
"""
environmentvip_map = dict()
environmentvip_map['finalidade_txt'] = finalidade_txt
environmentvip_map['cliente_txt'] = cliente_txt
environmentvip_map['ambiente_p44_txt'] = ambiente_p44_txt
environmentvip_map['description'] = description
code, xml = self.submit(
{'environment_vip': environmentvip_map}, 'POST', 'environmentvip/')
return self.response(code, xml)
[docs] def alter(
self,
id_environment_vip,
finalidade_txt,
cliente_txt,
ambiente_p44_txt,
description):
"""Change Environment VIP from by the identifier.
:param id_environment_vip: Identifier of the Environment VIP. Integer value and greater than zero.
:param finalidade_txt: Finality. String with a maximum of 50 characters and respect [a-zA-Z\_-]
:param cliente_txt: ID Client. String with a maximum of 50 characters and respect [a-zA-Z\_-]
:param ambiente_p44_txt: Environment P44. String with a maximum of 50 characters and respect [a-zA-Z\_-]
:return: None
:raise InvalidParameterError: Environment VIP identifier is null and invalid.
:raise InvalidParameterError: The value of finalidade_txt, cliente_txt or ambiente_p44_txt is invalid.
:raise EnvironmentVipNotFoundError: Environment VIP not registered.
:raise DataBaseError: Networkapi failed to access the database.
:raise XMLError: Networkapi failed to generate the XML response.
"""
if not is_valid_int_param(id_environment_vip):
raise InvalidParameterError(
u'The identifier of Environment VIP is invalid or was not informed.')
environmentvip_map = dict()
environmentvip_map['finalidade_txt'] = finalidade_txt
environmentvip_map['cliente_txt'] = cliente_txt
environmentvip_map['ambiente_p44_txt'] = ambiente_p44_txt
environmentvip_map['description'] = description
url = 'environmentvip/' + str(id_environment_vip) + '/'
code, xml = self.submit(
{'environment_vip': environmentvip_map}, 'PUT', url)
return self.response(code, xml)
[docs] def remove(self, id_environment_vip):
"""Remove Environment VIP from by the identifier.
:param id_environment_vip: Identifier of the Environment VIP. Integer value and greater than zero.
:return: None
:raise InvalidParameterError: Environment VIP identifier is null and invalid.
:raise EnvironmentVipNotFoundError: Environment VIP not registered.
:raise EnvironmentVipError: There networkIPv4 or networkIPv6 associated with environment vip.
:raise DataBaseError: Networkapi failed to access the database.
:raise XMLError: Networkapi failed to generate the XML response.
"""
if not is_valid_int_param(id_environment_vip):
raise InvalidParameterError(
u'The identifier of Environment VIP is invalid or was not informed.')
url = 'environmentvip/' + str(id_environment_vip) + '/'
code, xml = self.submit(None, 'DELETE', url)
return self.response(code, xml)
[docs] def search(
self,
id_environment_vip=None,
finalidade_txt=None,
cliente_txt=None,
ambiente_p44_txt=None):
"""Search Environment VIP from by parameters.
Case the id parameter has been passed, the same it has priority over the other parameters.
:param id_environment_vip: Identifier of the Environment VIP. Integer value and greater than zero.
:param finalidade_txt: Finality. String with a maximum of 50 characters and respect [a-zA-Z\_-]
:param cliente_txt: ID Client. String with a maximum of 50 characters and respect [a-zA-Z\_-]
:param ambiente_p44_txt: Environment P44. String with a maximum of 50 characters and respect [a-zA-Z\_-]
:return: Following dictionary:
::
{‘environment_vip’:
{‘id’: < id >,
‘finalidade_txt’: < finalidade_txt >,
‘finalidade’: < finalidade >,
‘cliente_txt’: < cliente_txt >,
‘ambiente_p44_txt’: < ambiente_p44_txt >}}
:raise InvalidParameterError: The value of id_environment_vip, finalidade_txt, cliente_txt or ambiente_p44_txt is invalid.
:raise EnvironmentVipNotFoundError: Environment VIP not registered.
:raise DataBaseError: Networkapi failed to access the database.
:raise XMLError: Networkapi failed to generate the XML response.
"""
environmentvip_map = dict()
environmentvip_map['id_environment_vip'] = id_environment_vip
environmentvip_map['finalidade_txt'] = finalidade_txt
environmentvip_map['cliente_txt'] = cliente_txt
environmentvip_map['ambiente_p44_txt'] = ambiente_p44_txt
code, xml = self.submit(
{'environment_vip': environmentvip_map}, 'POST', 'environmentvip/search/')
return self.response(code, xml)
[docs] def get_vips(self, id_environment_vip):
"""Get to list all the VIPs related to Environment VIP from by the identifier.
:param id_environment_vip: Identifier of the Environment VIP. Integer value and greater than zero.
:return: Dictionary with the following structure:
::
{‘vip_< id >’:
{‘id’: < id >,
‘validado’: < validado >,
‘finalidade’: < finalidade >,
‘cliente’: < cliente >,
‘ambiente’: < ambiente >,
‘cache’: < cache >,
‘metodo_bal’: < método_bal >,
‘persistencia’: < persistencia >,
‘healthcheck_type’: < healthcheck_type >,
‘healthcheck’: < healthcheck >,
‘timeout’: < timeout >,
‘host’: < host >,
‘maxcon’: < maxcon >,
‘dsr’: < dsr >,
‘bal_ativo’: < bal_ativo >,
‘transbordos’:{‘transbordo’:[< transbordo >]},
‘reals’:{‘real’:[{‘real_name’:< real_name >, ‘real_ip’:< real_ip >}]},
‘portas_servicos’:{‘porta’:[< porta >]},
‘vip_criado’: < vip_criado >,
‘id_ip’: < id_ip >,
‘id_ipv6’: < id_ipv6 >,
‘id_healthcheck_expect’: < id_healthcheck_expect >}}
:raise InvalidParameterError: Environment VIP identifier is null and invalid.
:raise EnvironmentVipNotFoundError: Environment VIP not registered.
:raise DataBaseError: Networkapi failed to access the database.
:raise XMLError: Networkapi failed to generate the XML response.
"""
if not is_valid_int_param(id_environment_vip):
raise InvalidParameterError(
u'The identifier of Environment VIP is invalid or was not informed.')
url = 'environmentvip/' + str(id_environment_vip) + '/vip/all'
code, xml = self.submit(None, 'GET', url)
return self.response(code, xml)
[docs] def buscar_finalidade(self):
"""Search finalidade_txt environment vip
:return: Dictionary with the following structure:
::
{‘finalidade’: ‘finalidade’: <'finalidade_txt'>}
:raise DataBaseError: Networkapi failed to access the database.
:raise XMLError: Networkapi failed to generate the XML response.
"""
url = 'environment-vip/get/finality'
code, xml = self.submit(None, 'GET', url)
return self.response(code, xml)
[docs] def buscar_cliente_por_finalidade(self, finalidade_txt):
"""Search cliente_txt environment vip
:return: Dictionary with the following structure:
::
{‘cliente_txt’:
‘finalidade’: <'finalidade_txt'>,
'cliente_txt: <'cliente_txt'>'}
:raise InvalidParameterError: finalidade_txt is null and invalid.
:raise DataBaseError: Networkapi failed to access the database.
:raise XMLError: Networkapi failed to generate the XML response.
"""
vip_map = dict()
vip_map['finalidade_txt'] = finalidade_txt
url = 'environment-vip/get/cliente_txt/'
code, xml = self.submit({'vip': vip_map}, 'POST', url)
return self.response(code, xml)
[docs] def buscar_ambientep44_por_finalidade_cliente(
self,
finalidade_txt,
cliente_txt):
"""Search ambiente_p44_txt environment vip
:return: Dictionary with the following structure:
::
{‘ambiente_p44_txt’:
'id':<'id_ambientevip'>,
‘finalidade’: <'finalidade_txt'>,
'cliente_txt: <'cliente_txt'>',
'ambiente_p44: <'ambiente_p44'>',}
:raise InvalidParameterError: finalidade_txt and cliente_txt is null and invalid.
:raise DataBaseError: Networkapi failed to access the database.
:raise XMLError: Networkapi failed to generate the XML response.
"""
vip_map = dict()
vip_map['finalidade_txt'] = finalidade_txt
vip_map['cliente_txt'] = cliente_txt
url = 'environment-vip/get/ambiente_p44_txt/'
code, xml = self.submit({'vip': vip_map}, 'POST', url)
return self.response(code, xml)