Source code for networkapiclient.Ambiente

# -*- 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, is_valid_ip
import urllib


[docs]class Ambiente(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( Ambiente, self).__init__( networkapi_url, user, password, user_ldap)
[docs] def list_all(self): """ List all environments in DB :return: Following dictionary: :: {'ambiente': [{ 'id': <id_environment>, 'grupo_l3': <id_group_l3>, 'grupo_l3_name': <name_group_l3>, 'ambiente_logico': <id_logical_environment>, 'ambiente_logico_name': <name_ambiente_logico>, 'divisao_dc': <id_dc_division>, 'divisao_dc_name': <name_divisao_dc>, 'filter': <id_filter>, 'filter_name': <filter_name>, 'link': <link> }, ... ]} :raise DataBaseError: Falha na networkapi ao acessar o banco de dados. """ url = "ambiente/list/" code, xml = self.submit(None, 'GET', url) key = 'ambiente' return get_list_map(self.response(code, xml, [key]), key)
[docs] def listar(self, id_divisao=None, id_ambiente_logico=None): """Lista os ambientes filtrados conforme parâmetros informados. Se os dois parâmetros têm o valor None então retorna todos os ambientes. Se o id_divisao é diferente de None então retorna os ambientes filtrados pelo valor de id_divisao. Se o id_divisao e id_ambiente_logico são diferentes de None então retorna os ambientes filtrados por id_divisao e id_ambiente_logico. :param id_divisao: Identificador da divisão de data center. :param id_ambiente_logico: Identificador do ambiente lógico. :return: Dicionário com a seguinte estrutura: :: {'ambiente': [{'id': < id_ambiente >, 'link': < link >, 'id_divisao': < id_divisao >, 'nome_divisao': < nome_divisao >, 'id_ambiente_logico': < id_ambiente_logico >, 'nome_ambiente_logico': < nome_ambiente_logico >, 'id_grupo_l3': < id_grupo_l3 >, 'nome_grupo_l3': < nome_grupo_l3 >, 'id_filter': < id_filter >, 'filter_name': < filter_name >, 'ambiente_rede': < ambiente_rede >}, ... demais ambientes ... ]} :raise DataBaseError: Falha na networkapi ao acessar o banco de dados. :raise XMLError: Falha na networkapi ao gerar o XML de resposta. """ url = 'ambiente/' if is_valid_int_param(id_divisao) and not is_valid_int_param( id_ambiente_logico): url = 'ambiente/divisao_dc/' + str(id_divisao) + '/' elif is_valid_int_param(id_divisao) and is_valid_int_param(id_ambiente_logico): url = 'ambiente/divisao_dc/' + \ str(id_divisao) + '/ambiente_logico/' + str(id_ambiente_logico) + '/' code, xml = self.submit(None, 'GET', url) key = 'ambiente' return get_list_map(self.response(code, xml, [key]), key)
[docs] def buscar_por_equipamento(self, nome_equipamento, ip_equipamento): """Obtém um ambiente a partir do ip e nome de um equipamento. :param nome_equipamento: Nome do equipamento. :param ip_equipamento: IP do equipamento no formato XXX.XXX.XXX.XXX. :return: Dicionário com a seguinte estrutura: :: {'ambiente': {'id': < id_ambiente >, 'link': < link >, 'id_divisao': < id_divisao >, 'nome_divisao': < nome_divisao >, 'id_ambiente_logico': < id_ambiente_logico >, 'nome_ambiente_logico': < nome_ambiente_logico >, 'id_grupo_l3': < id_grupo_l3 >, 'nome_grupo_l3': < nome_grupo_l3 >, 'id_filter': < id_filter >, 'filter_name': < filter_name >, 'ambiente_rede': < ambiente_rede >}} :raise IpError: IP não cadastrado para o equipamento. :raise InvalidParameterError: O nome e/ou o IP do equipamento são vazios ou nulos, ou o IP é inválido. :raise EquipamentoNaoExisteError: Equipamento não cadastrado. :raise DataBaseError: Falha na networkapi ao acessar o banco de dados. :raise XMLError: Falha na networkapi ao gerar o XML de resposta. """ if nome_equipamento == '' or nome_equipamento is None: raise InvalidParameterError( u'O nome do equipamento não foi informado.') if not is_valid_ip(ip_equipamento): raise InvalidParameterError( u'O IP do equipamento é inválido ou não foi informado.') url = 'ambiente/equipamento/' + \ urllib.quote(nome_equipamento) + '/ip/' + str(ip_equipamento) + '/' code, xml = self.submit(None, 'GET', url) return self.response(code, xml)
[docs] def buscar_por_id(self, id_ambiente): """Obtém um ambiente a partir da chave primária (identificador). :param id_ambiente: Identificador do ambiente. :return: Dicionário com a seguinte estrutura: :: {'ambiente': {'id': < id_ambiente >, 'link': < link >, 'id_divisao': < id_divisao >, 'nome_divisao': < nome_divisao >, 'id_ambiente_logico': < id_ambiente_logico >, 'nome_ambiente_logico': < nome_ambiente_logico >, 'id_grupo_l3': < id_grupo_l3 >, 'nome_grupo_l3': < nome_grupo_l3 >, 'id_filter': < id_filter >, 'filter_name': < filter_name >, 'acl_path': < acl_path >, 'ipv4_template': < ipv4_template >, 'ipv6_template': < ipv6_template >, 'ambiente_rede': < ambiente_rede >}} :raise AmbienteNaoExisteError: Ambiente não cadastrado. :raise InvalidParameterError: Identificador do ambiente é nulo ou inválido. :raise DataBaseError: Falha na networkapi ao acessar o banco de dados. :raise XMLError: Falha na networkapi ao gerar o XML de resposta. """ if not is_valid_int_param(id_ambiente): raise InvalidParameterError( u'O identificador do ambiente é inválido ou não foi informado.') url = 'environment/id/' + str(id_ambiente) + '/' code, xml = self.submit(None, 'GET', url) return self.response(code, xml)
[docs] def buscar_healthcheck_por_id(self, id_healthcheck): """Get HealthCheck by id. :param id_healthcheck: HealthCheck ID. :return: Following dictionary: :: {'healthcheck_expect': {'match_list': < match_list >, 'expect_string': < expect_string >, 'id': < id >, 'ambiente': < ambiente >}} :raise HealthCheckNaoExisteError: HealthCheck not registered. :raise InvalidParameterError: HealthCheck identifier is null and invalid. :raise DataBaseError: Can't connect to networkapi database. :raise XMLError: Failed to generate the XML response. """ if not is_valid_int_param(id_healthcheck): raise InvalidParameterError( u'O identificador do healthcheck é inválido ou não foi informado.') url = 'healthcheckexpect/get/' + str(id_healthcheck) + '/' code, xml = self.submit(None, 'GET', url) return self.response(code, xml)
[docs] def listar_por_equip(self, equip_id): """Lista todos os ambientes por equipamento especifico. :return: Dicionário com a seguinte estrutura: :: {'ambiente': {'id': < id_ambiente >, 'link': < link >, 'id_divisao': < id_divisao >, 'nome_divisao': < nome_divisao >, 'id_ambiente_logico': < id_ambiente_logico >, 'nome_ambiente_logico': < nome_ambiente_logico >, 'id_grupo_l3': < id_grupo_l3 >, 'nome_grupo_l3': < nome_grupo_l3 >, 'id_filter': < id_filter >, 'filter_name': < filter_name >, 'ambiente_rede': < ambiente_rede >}} :raise DataBaseError: Falha na networkapi ao acessar o banco de dados. :raise XMLError: Falha na networkapi ao gerar o XML de resposta. """ if equip_id is None: raise InvalidParameterError( u'O id do equipamento não foi informado.') url = 'ambiente/equip/' + str(equip_id) + '/' code, xml = self.submit(None, 'GET', url) return self.response(code, xml)
[docs] def listar_healthcheck_expect(self, id_ambiente): """Lista os healthcheck_expect´s de um ambiente. :param id_ambiente: Identificador do ambiente. :return: Dicionário com a seguinte estrutura: :: {'healthcheck_expect': [{'id': < id_healthcheck_expect >, 'expect_string': < expect_string >, 'match_list': < match_list >, 'id_ambiente': < id_ambiente >}, ... demais healthcheck_expects ...]} :raise InvalidParameterError: O identificador do ambiente é nulo ou inválido. :raise DataBaseError: Falha na networkapi ao acessar o banco de dados. :raise XMLError: Falha na networkapi ao gerar o XML de resposta. """ if not is_valid_int_param(id_ambiente): raise InvalidParameterError( u'O identificador do ambiente é inválido ou não foi informado.') url = 'healthcheckexpect/ambiente/' + str(id_ambiente) + '/' code, xml = self.submit(None, 'GET', url) key = 'healthcheck_expect' return get_list_map(self.response(code, xml, [key]), key)
[docs] def add_healthcheck_expect(self, id_ambiente, expect_string, match_list): """Insere um novo healthckeck_expect e retorna o seu identificador. :param expect_string: expect_string. :param id_ambiente: Identificador do ambiente lógico. :param match_list: match list. :return: Dicionário com a seguinte estrutura: {'healthcheck_expect': {'id': < id >}} :raise InvalidParameterError: O identificador do ambiente, match_lis,expect_string, são inválidos ou nulo. :raise HealthCheckExpectJaCadastradoError: Já existe um healthcheck_expect com os mesmos dados cadastrados. :raise DataBaseError: Falha na networkapi ao acessar o banco de dados. :raise XMLError: Falha na networkapi ao ler o XML de requisição ou gerar o XML de resposta. """ healthcheck_map = dict() healthcheck_map['id_ambiente'] = id_ambiente healthcheck_map['expect_string'] = expect_string healthcheck_map['match_list'] = match_list url = 'healthcheckexpect/add/' code, xml = self.submit({'healthcheck': healthcheck_map}, 'POST', url) return self.response(code, xml)
[docs] def inserir( self, id_grupo_l3, id_ambiente_logico, id_divisao, link, id_filter=None, acl_path=None, ipv4_template=None, ipv6_template=None, min_num_vlan_1=None, max_num_vlan_1=None, min_num_vlan_2=None, max_num_vlan_2=None, vrf=None): """Insere um novo ambiente e retorna o seu identificador. :param id_grupo_l3: Identificador do grupo layer 3. :param id_ambiente_logico: Identificador do ambiente lógico. :param id_divisao: Identificador da divisão data center. :param id_filter: Filter identifier. :param link: Link :param acl_path: Path where the ACL will be stored :param ipv4_template: Template that will be used in Ipv6 :param ipv6_template: Template that will be used in Ipv4 :param min_num_vlan_1: Min 1 num vlan valid for this environment :param max_num_vlan_1: Max 1 num vlan valid for this environment :param min_num_vlan_2: Min 2 num vlan valid for this environment :param max_num_vlan_2: Max 2 num vlan valid for this environment :return: Dicionário com a seguinte estrutura: {'ambiente': {'id': < id >}} :raise InvalidParameterError: O identificador do grupo l3, o identificador do ambiente lógico, e/ou o identificador da divisão de data center são nulos ou inválidos. :raise GrupoL3NaoExisteError: Grupo layer 3 não cadastrado. :raise AmbienteLogicoNaoExisteError: Ambiente lógico não cadastrado. :raise DivisaoDcNaoExisteError: Divisão datacenter não cadastrada. :raise AmbienteDuplicadoError: Ambiente com o mesmo id_grupo_l3, id_ambiente_logico e id_divisao já cadastrado. :raise DataBaseError: Falha na networkapi ao acessar o banco de dados. :raise XMLError: Falha na networkapi ao ler o XML de requisição ou gerar o XML de resposta. """ ambiente_map = dict() ambiente_map['id_grupo_l3'] = id_grupo_l3 ambiente_map['id_ambiente_logico'] = id_ambiente_logico ambiente_map['id_divisao'] = id_divisao ambiente_map['id_filter'] = id_filter ambiente_map['link'] = link ambiente_map['acl_path'] = acl_path ambiente_map['ipv4_template'] = ipv4_template ambiente_map['ipv6_template'] = ipv6_template ambiente_map['min_num_vlan_1'] = min_num_vlan_1 ambiente_map['max_num_vlan_1'] = max_num_vlan_1 ambiente_map['min_num_vlan_2'] = min_num_vlan_2 ambiente_map['max_num_vlan_2'] = max_num_vlan_2 ambiente_map['vrf'] = vrf code, xml = self.submit( {'ambiente': ambiente_map}, 'POST', 'ambiente/') return self.response(code, xml)
[docs] def insert_with_ip_range( self, id_l3_group, id_logical_environment, id_division, id_ip_config, link, id_filter=None): """Insert new environment with ip config and returns your id. :param id_l3_group: Layer 3 Group ID. :param id_logical_environment: Logical Environment ID. :param id_division: Data Center Division ID. :param id_filter: Filter identifier. :param id_ip_config: IP Configuration ID. :param link: Link. :return: Following dictionary: {'ambiente': {'id': < id >}} :raise ConfigEnvironmentDuplicateError: Error saving duplicate Environment Configuration. :raise InvalidParameterError: Some parameter was invalid. :raise GrupoL3NaoExisteError: Layer 3 Group not found. :raise AmbienteLogicoNaoExisteError: Logical Environment not found. :raise DivisaoDcNaoExisteError: Data Center Division not found. :raise AmbienteDuplicadoError: Environment with this parameters already exists. :raise DataBaseError: Networkapi failed to access the database. :raise XMLError: Networkapi failed to generate the XML response. """ environment_map = dict() environment_map['id_grupo_l3'] = id_l3_group environment_map['id_ambiente_logico'] = id_logical_environment environment_map['id_divisao'] = id_division environment_map['id_filter'] = id_filter environment_map['id_ip_config'] = id_ip_config environment_map['link'] = link code, xml = self.submit( {'ambiente': environment_map}, 'POST', 'ambiente/ipconfig/') return self.response(code, xml)
[docs] def add_ip_range(self, id_environment, id_ip_config): """Makes relationship of environment with ip config and returns your id. :param id_environment: Environment ID. :param id_ip_config: IP Configuration ID. :return: Following dictionary: {'config_do_ambiente': {'id_config_do_ambiente': < id_config_do_ambiente >}} :raise InvalidParameterError: Some parameter was invalid. :raise ConfigEnvironmentDuplicateError: Error saving duplicate Environment Configuration. :raise DataBaseError: Networkapi failed to access the database. :raise XMLError: Networkapi failed to generate the XML response. """ environment_map = dict() environment_map['id_environment'] = id_environment environment_map['id_ip_config'] = id_ip_config code, xml = self.submit( {'ambiente': environment_map}, 'POST', 'ipconfig/') return self.response(code, xml)
[docs] def alterar( self, id_ambiente, id_grupo_l3, id_ambiente_logico, id_divisao, link, id_filter=None, acl_path=None, ipv4_template=None, ipv6_template=None, min_num_vlan_1=None, max_num_vlan_1=None, min_num_vlan_2=None, max_num_vlan_2=None, vrf=None): """Altera os dados de um ambiente a partir do seu identificador. :param id_ambiente: Identificador do ambiente. :param id_grupo_l3: Identificador do grupo layer 3. :param id_ambiente_logico: Identificador do ambiente lógico. :param id_divisao: Identificador da divisão data center. :param id_filter: Filter identifier. :param link: Link :param acl_path: Path where the ACL will be stored :param ipv4_template: Template that will be used in Ipv6 :param ipv6_template: Template that will be used in Ipv4 :param min_num_vlan_1: Min 1 num vlan valid for this environment :param max_num_vlan_1: Max 1 num vlan valid for this environment :param min_num_vlan_2: Min 2 num vlan valid for this environment :param max_num_vlan_2: Max 2 num vlan valid for this environment :return: None :raise InvalidParameterError: O identificador do ambiente, o identificador do grupo l3, o identificador do ambiente lógico, e/ou o identificador da divisão de data center são nulos ou inválidos. :raise GrupoL3NaoExisteError: Grupo layer 3 não cadastrado. :raise AmbienteLogicoNaoExisteError: Ambiente lógico não cadastrado. :raise DivisaoDcNaoExisteError: Divisão data center não cadastrada. :raise AmbienteDuplicadoError: Ambiente com o mesmo id_grupo_l3, id_ambiente_logico e id_divisao já cadastrado. :raise AmbienteNaoExisteError: Ambiente não cadastrado. :raise DataBaseError: Falha na networkapi ao acessar o banco de dados. :raise XMLError: Falha na networkapi ao ler o XML de requisição ou gerar o XML de resposta. """ if not is_valid_int_param(id_ambiente): raise InvalidParameterError( u'O identificador do ambiente é inválido ou não foi informado.') url = 'ambiente/' + str(id_ambiente) + '/' ambiente_map = dict() ambiente_map['id_grupo_l3'] = id_grupo_l3 ambiente_map['id_ambiente_logico'] = id_ambiente_logico ambiente_map['id_divisao'] = id_divisao ambiente_map['id_filter'] = id_filter ambiente_map['link'] = link ambiente_map['vrf'] = vrf ambiente_map['acl_path'] = acl_path ambiente_map['ipv4_template'] = ipv4_template ambiente_map['ipv6_template'] = ipv6_template ambiente_map['min_num_vlan_1'] = min_num_vlan_1 ambiente_map['max_num_vlan_1'] = max_num_vlan_1 ambiente_map['min_num_vlan_2'] = min_num_vlan_2 ambiente_map['max_num_vlan_2'] = max_num_vlan_2 code, xml = self.submit({'ambiente': ambiente_map}, 'PUT', url) return self.response(code, xml)
[docs] def remover(self, id_ambiente): """Remove um ambiente a partir de seu identificador. :param id_ambiente: Identificador do ambiente. :return: None :raise AmbienteNaoExisteError: Ambiente não cadastrado. :raise AmbienteError: Ambiente está associado a um equipamento e/ou a uma VLAN. :raise InvalidParameterError: O identificador do ambiente é nulo ou inválido. :raise DataBaseError: Falha na networkapi ao acessar o banco de dados. :raise XMLError: Falha na networkapi ao gerar o XML de resposta. """ if not is_valid_int_param(id_ambiente): raise InvalidParameterError( u'O identificador do ambiente é inválido ou não foi informado.') url = 'ambiente/' + str(id_ambiente) + '/' code, xml = self.submit(None, 'DELETE', url) return self.response(code, xml)
[docs] def add_expect_string_healthcheck(self, expect_string): """Inserts a new healthckeck_expect with only expect_string. :param expect_string: expect_string. :return: Dictionary with the following structure: :: {'healthcheck_expect': {'id': < id >}} :raise InvalidParameterError: The value of expect_string is invalid. :raise HealthCheckExpectJaCadastradoError: There is already a healthcheck_expect registered with the same data. :raise HealthCheckExpectNaoExisteError: Healthcheck_expect not registered. :raise DataBaseError: Networkapi failed to access the database. :raise XMLError: Networkapi failed to generate the XML response. """ healthcheck_map = dict() healthcheck_map['expect_string'] = expect_string url = 'healthcheckexpect/add/expect_string/' code, xml = self.submit({'healthcheck': healthcheck_map}, 'POST', url) return self.response(code, xml)
[docs] def listar_healtchcheck_expect_distinct(self): """Get all expect_string. :return: Dictionary with the following structure: :: {'healthcheck_expect': [ 'expect_string': < expect_string >, ... demais healthcheck_expects ...]} :raise InvalidParameterError: Identifier is null and invalid. :raise DataBaseError: Networkapi failed to access the database. :raise XMLError: Networkapi failed to generate the XML response. """ url = 'healthcheckexpect/distinct/busca/' code, xml = self.submit(None, 'GET', url) return self.response(code, xml)
[docs] def list_acl_path(self): """Get all distinct acl paths. :return: Dictionary with the following structure: :: {'acl_paths': [ < acl_path >, ... ]} :raise DataBaseError: Networkapi failed to access the database. :raise XMLError: Networkapi failed to generate the XML response. """ url = 'environment/acl_path/' code, xml = self.submit(None, 'GET', url) return self.response(code, xml)
[docs] def set_template(self, id_environment, name, network): """Set template value. If id_environment = 0, set '' to all environments related with the template name. :param id_environment: Environment Identifier. :param name: Template Name. :param network: IPv4 or IPv6. :return: None :raise InvalidParameterError: Invalid param. :raise AmbienteNaoExisteError: Ambiente não cadastrado. :raise DataBaseError: Falha na networkapi ao acessar o banco de dados. :raise XMLError: Falha na networkapi ao ler o XML de requisição ou gerar o XML de resposta. """ url = 'environment/set_template/' + str(id_environment) + '/' environment_map = dict() environment_map['name'] = name environment_map['network'] = network code, xml = self.submit({'environment': environment_map}, 'POST', url) return self.response(code, xml)
[docs] def get_environment_template(self, name, network): """Get environments by template name :param name: Template name. :param network: IPv4 or IPv6. :return: Following dictionary: :: {'ambiente': [divisao_dc - ambiente_logico - grupo_l3, other envs...] } :raise InvalidParameterError: Invalid param. :raise DataBaseError: Falha na networkapi ao acessar o banco de dados. :raise XMLError: Falha na networkapi ao ler o XML de requisição ou gerar o XML de resposta. """ url = 'environment/get_env_template/' map_dict = dict() map_dict['name'] = name map_dict['network'] = network code, xml = self.submit({'map': map_dict}, 'PUT', url) return self.response(code, xml)
[docs] def save_blocks(self, id_env, blocks): """ Save blocks from environment :param id_env: Environment id :param blocks: Lists of blocks in order. Ex: ['content one', 'content two', ...] :return: None :raise AmbienteNaoExisteError: Ambiente não cadastrado. :raise InvalidValueError: Invalid parameter. :raise UserNotAuthorizedError: Permissão negada. :raise DataBaseError: Falha na networkapi ao acessar o banco de dados. :raise XMLError: Falha na networkapi ao ler o XML de requisição ou gerar o XML de resposta. """ url = 'environment/save_blocks/' map_dict = dict() map_dict['id_env'] = id_env map_dict['blocks'] = blocks code, xml = self.submit({'map': map_dict}, 'POST', url) return self.response(code, xml)
[docs] def update_blocks(self, id_env, blocks): """ Update blocks from environment :param id_env: Environment id :param blocks: Lists of blocks in order. Ex: ['content one', 'content two', ...] :return: None :raise AmbienteNaoExisteError: Ambiente não cadastrado. :raise InvalidValueError: Invalid parameter. :raise UserNotAuthorizedError: Permissão negada. :raise DataBaseError: Falha na networkapi ao acessar o banco de dados. :raise XMLError: Falha na networkapi ao ler o XML de requisição ou gerar o XML de resposta. """ url = 'environment/update_blocks/' map_dict = dict() map_dict['id_env'] = id_env map_dict['blocks'] = blocks code, xml = self.submit({'map': map_dict}, 'PUT', url) return self.response(code, xml)
[docs] def get_blocks(self, id_env): """ Get blocks by environment :param id_env: Environment id :return: Following dictionary: :: {'blocks': [{'id' : <id>, 'content' : <content>},...] } :raise UserNotAuthorizedError: Permissão negada. :raise DataBaseError: Falha na networkapi ao acessar o banco de dados. :raise XMLError: Falha na networkapi ao ler o XML de requisição ou gerar o XML de resposta. """ url = 'environment/get_blocks/' + str(id_env) code, xml = self.submit(None, 'GET', url) return self.response(code, xml, ['blocks'])
[docs] def list_no_blocks(self): """ List all environments in DB without blocks :return: Following dictionary: :: {'ambiente': [{'id': <id_environment>, 'grupo_l3': <id_group_l3>, 'grupo_l3_name': <name_group_l3> 'ambiente_logico': <id_logical_environment>, 'ambiente_logico_name': <name_ambiente_logico> 'divisao_dc': <id_dc_division>, 'divisao_dc_name': <name_divisao_dc>, 'filter': <id_filter>, 'filter_name': <filter_name>, 'link': <link> }, ... ]} :raise DataBaseError: Falha na networkapi ao acessar o banco de dados. """ url = "environment/list_no_blocks/" code, xml = self.submit(None, 'PUT', url) key = 'ambiente' return get_list_map(self.response(code, xml, [key]), key)
[docs] def get_rule_by_pk(self, id_rule): """ Get a rule by its identifier :param id_rule: Rule identifier. :return: Seguinte estrutura :: { 'rule': {'id': < id >, 'environment': < Environment Object >, 'content': < content >, 'name': < name >, 'custom': < custom > }} :raise AmbienteNaoExisteError: Ambiente não cadastrado. :raise InvalidValueError: Invalid parameter. :raise UserNotAuthorizedError: Permissão negada. :raise DataBaseError: Falha na networkapi ao acessar o banco de dados. :raise XMLError: Falha na networkapi ao ler o XML de requisição ou gerar o XML de resposta. """ url = 'rule/get_by_id/' + str(id_rule) code, xml = self.submit(None, 'GET', url) return self.response(code, xml)
[docs] def save_rule(self, name, id_env, contents, blocks_id): """ Save an environment rule :param name: Name of the rule :param id_env: Environment id :param contents: Lists of contents in order. Ex: ['content one', 'content two', ...] :param blocks_id: Lists of blocks id or 0 if is as custom content. Ex: ['0', '5', '0' ...] :return: None :raise AmbienteNaoExisteError: Ambiente não cadastrado. :raise InvalidValueError: Invalid parameter. :raise UserNotAuthorizedError: Permissão negada. :raise DataBaseError: Falha na networkapi ao acessar o banco de dados. :raise XMLError: Falha na networkapi ao ler o XML de requisição ou gerar o XML de resposta. """ url = 'rule/save/' map_dict = dict() map_dict['name'] = name map_dict['id_env'] = id_env map_dict['contents'] = contents map_dict['blocks_id'] = blocks_id code, xml = self.submit({'map': map_dict}, 'POST', url) return self.response(code, xml)
[docs] def update_rule(self, name, id_env, contents, blocks_id, id_rule): """ Save an environment rule :param name: Name of the rule :param id_env: Environment id :param contents: Lists of contents in order. Ex: ['content one', 'content two', ...] :param blocks_id: Lists of blocks id or 0 if is as custom content. Ex: ['0', '5', '0' ...] :param id_rule: Rule id :return: None :raise AmbienteNaoExisteError: Ambiente não cadastrado. :raise InvalidValueError: Invalid parameter. :raise UserNotAuthorizedError: Permissão negada. :raise DataBaseError: Falha na networkapi ao acessar o banco de dados. :raise XMLError: Falha na networkapi ao ler o XML de requisição ou gerar o XML de resposta. """ url = 'rule/update/' map_dict = dict() map_dict['name'] = name map_dict['id_env'] = id_env map_dict['contents'] = contents map_dict['blocks_id'] = blocks_id map_dict['id_rule'] = id_rule try: code, xml = self.submit({'map': map_dict}, 'PUT', url) except Exception as e: raise e return self.response(code, xml)
[docs] def delete_rule(self, id_rule): """ Removes an environment rule :param id_rule: Rule id :return: None :raise AmbienteNaoExisteError: Ambiente não cadastrado. :raise InvalidValueError: Invalid parameter. :raise UserNotAuthorizedError: Permissão negada. :raise DataBaseError: Falha na networkapi ao acessar o banco de dados. :raise XMLError: Falha na networkapi ao ler o XML de requisição ou gerar o XML de resposta. """ url = 'rule/delete/%s/' % str(id_rule) code, xml = self.submit(None, 'DELETE', url) return self.response(code, xml)
[docs] def get_all_rules(self, id_env): """Save an environment rule :param id_env: Environment id :return: Estrutura: :: { 'rules': [{'id': < id >, 'environment': < Environment Object >, 'content': < content >, 'name': < name >, 'custom': < custom > },... ]} :raise AmbienteNaoExisteError: Ambiente não cadastrado. :raise UserNotAuthorizedError: Permissão negada. :raise DataBaseError: Falha na networkapi ao acessar o banco de dados. :raise XMLError: Falha na networkapi ao ler o XML de requisição ou gerar o XML de resposta. """ url = 'rule/all/' + str(id_env) code, xml = self.submit(None, 'GET', url) return self.response(code, xml, ['rules'])
[docs] def configuration_save( self, id_environment, network, prefix, ip_version, network_type): """ Add new prefix configuration :param id_environment: Identifier of the Environment. Integer value and greater than zero. :param network: Network Ipv4 or Ipv6. :param prefix: Prefix 0-32 to Ipv4 or 0-128 to Ipv6. :param ip_version: v4 to IPv4 or v6 to IPv6 :param network_type: type network :return: Following dictionary: :: {'network':{'id_environment': <id_environment>, 'id_vlan': <id_vlan>, 'network_type': <network_type>, 'network': <network>, 'prefix': <prefix>} } :raise ConfigEnvironmentInvalidError: Invalid Environment Configuration or not registered. :raise InvalidValueError: Invalid Id for environment or network or network_type or prefix. :raise AmbienteNotFoundError: Environment not registered. :raise DataBaseError: Failed into networkapi access data base. :raise XMLError: Networkapi failed to generate the XML response. """ network_map = dict() network_map['id_environment'] = id_environment network_map['network'] = network network_map['prefix'] = prefix network_map['ip_version'] = ip_version network_map['network_type'] = network_type code, xml = self.submit( {'ambiente': network_map}, 'POST', 'environment/configuration/save/') return self.response(code, xml)
[docs] def configuration_list_all(self, environment_id): """ List all prefix configurations by environment in DB :return: Following dictionary: :: {'lists_configuration': [{ 'id': <id_ipconfig>, 'subnet': <subnet>, 'type': <type>, 'new_prefix': <new_prefix>, }, ... ]} :raise InvalidValueError: Invalid ID for Environment. :raise AmbienteNotFoundError: Environment not registered. :raise DataBaseError: Failed into networkapi access data base. :raise XMLError: Networkapi failed to generate the XML response. """ data = dict() data["environment_id"] = environment_id url = ("environment/configuration/list/%(environment_id)s/" % data) code, xml = self.submit(None, 'GET', url) return self.response(code, xml, force_list=['lists_configuration'])
[docs] def configuration_remove(self, environment_id, configuration_id): """ Remove Prefix Configuration :return: None :raise InvalidValueError: Invalid Id for Environment or IpConfig. :raise IPConfigNotFoundError: Ipconfig not resgistred. :raise AmbienteNotFoundError: Environment not registered. :raise DataBaseError: Failed into networkapi access data base. :raise XMLError: Networkapi failed to generate the XML response. """ data = dict() data["configuration_id"] = configuration_id data["environment_id"] = environment_id url = ( "environment/configuration/remove/%(environment_id)s/%(configuration_id)s/" % data) code, xml = self.submit(None, 'DELETE', url) return self.response(code, xml)
[docs] def associate(self, environment_id, environment_vip_id): """Associate a news Environment on Environment VIP and returns its identifier. :param environment_id: Identifier of the Environment. Integer value and greater than zero. :param environment_vip_id: Identifier of the Environment VIP. Integer value and greater than zero. :return: Following dictionary: :: {'environment_environment_vip': {'id': < id >}} :raise InvalidParameterError: The value of environment_id or environment_vip_id is invalid. :raise DataBaseError: Networkapi failed to access the database. :raise XMLError: Networkapi failed to generate the XML response. """ if not is_valid_int_param(environment_id): raise InvalidParameterError( u'The identifier of Environment VIP is invalid or was not informed.') if not is_valid_int_param(environment_vip_id): raise InvalidParameterError( u'The identifier of Environment is invalid or was not informed.') environment_environment_vip_map = dict() environment_environment_vip_map['environment_id'] = environment_id environment_environment_vip_map['environment_vip_id'] = environment_vip_id url = 'environment/{}/environmentvip/{}/'.format(environment_id, environment_vip_id) code, xml = self.submit(None, 'PUT', url) return self.response(code, xml)
[docs] def disassociate(self, environment_id, environment_vip_id): """Remove a relationship of Environment with EnvironmentVip. :param environment_id: Identifier of the Environment. Integer value and greater than zero. :param environment_vip_id: Identifier of the Environment VIP. Integer value and greater than zero. :return: Nothing :raise InvalidParameterError: Environment/Environment VIP identifier is null and/or invalid. :raise EnvironmentNotFoundError: Environment not registered. :raise EnvironmentVipNotFoundError: Environment VIP not registered. :raise EnvironmentError: Option vip is not associated with the environment vip :raise UserNotAuthorizedError: User does not have authorization to make this association. :raise DataBaseError: Networkapi failed to access the database. :raise XMLError: Networkapi failed to generate the XML response. """ if not is_valid_int_param(environment_id): raise InvalidParameterError( u'The identifier of Environment VIP is invalid or was not informed.') if not is_valid_int_param(environment_vip_id): raise InvalidParameterError( u'The identifier of Environment is invalid or was not informed.') environment_environment_vip_map = dict() environment_environment_vip_map['environment_id'] = environment_id environment_environment_vip_map['environment_vip_id'] = environment_vip_id url = 'environment/{}/environmentvip/{}/'.format(environment_id, environment_vip_id) code, xml = self.submit(None, 'DELETE', url) return self.response(code, xml)