def delete_configs(configs_ids, env_id): """ Delete configs of environment :param configs_ids: Id of Configs of environment :param env: Id of environment """ for config_id in configs_ids: IPConfig.remove(None, env_id, config_id)
def create_configs(configs, env_id): """ Create configs of environment :param configs: Configs of environment :param env: Id of environment """ for config in configs: IPConfig.create(env_id, config)
def config_ambiente(user, hosts, ambientes): # ip_config ip_config = IPConfig() ip_config.subnet = hosts.get('REDE') ip_config.new_prefix = hosts.get('PREFIX') if hosts.get('VERSION') == 'ipv4': ip_config.type = IP_VERSION.IPv4[0] elif hosts.get('VERSION') == 'ipv6': ip_config.type = IP_VERSION.IPv6[0] tiporede = TipoRede() tipo = tiporede.get_by_name(hosts.get('TIPO')) ip_config.network_type = tipo ip_config.save() # ambiente config_environment = ConfigEnvironment() amb_log = AmbienteLogico() div = DivisaoDc() amb_log = amb_log.get_by_name(ambientes.get('LOG')) div = div.get_by_name(ambientes.get('DC')) for j in Ambiente().search(div.id, amb_log.id): if j.grupo_l3.nome == ambientes.get('L3'): config_environment.environment = j config_environment.ip_config = ip_config config_environment.save()
def config_ambiente(user, hosts, ambientes): #ip_config ip_config = IPConfig() ip_config.subnet = hosts.get("REDE") ip_config.new_prefix = hosts.get("PREFIX") if hosts.get("VERSION") == "ipv4": ip_config.type = IP_VERSION.IPv4[0] elif hosts.get("VERSION") == "ipv6": ip_config.type = IP_VERSION.IPv6[0] tiporede = TipoRede() tipo = tiporede.get_by_name(hosts.get("TIPO")) ip_config.network_type = tipo ip_config.save() #ambiente config_environment = ConfigEnvironment() amb_log = AmbienteLogico() div = DivisaoDc() amb_log = amb_log.get_by_name(ambientes.get("LOG")) div = div.get_by_name(ambientes.get("DC")) for j in Ambiente().search(div.id, amb_log.id): if j.grupo_l3.nome == ambientes.get("L3"): config_environment.environment = j config_environment.ip_config = ip_config config_environment.save()
def config_ambiente(user, hosts, ambientes): #ip_config ip_config = IPConfig() ip_config.subnet = hosts.get("REDE") ip_config.new_prefix = hosts.get("PREFIX") if hosts.get("VERSION")=="ipv4": ip_config.type = IP_VERSION.IPv4[0] elif hosts.get("VERSION")=="ipv6": ip_config.type = IP_VERSION.IPv6[0] tiporede = TipoRede() tipo = tiporede.get_by_name(hosts.get("TIPO")) ip_config.network_type = tipo ip_config.save() #ambiente config_environment = ConfigEnvironment() amb_log = AmbienteLogico() div = DivisaoDc() amb_log = amb_log.get_by_name(ambientes.get("LOG")) div = div.get_by_name(ambientes.get("DC")) for j in Ambiente().search(div.id, amb_log.id): if j.grupo_l3.nome==ambientes.get("L3"): config_environment.environment = j config_environment.ip_config = ip_config config_environment.save()
def handle_delete(self, request, user, *args, **kwargs): """Treat requests GET to Remove Prefix Configuration. URL: /environment/configuration/remove/environment_id/configuration_id/ """ try: configuration_id = kwargs.get('configuration_id') environment_id = kwargs.get('environment_id') self._validate_permission(user) self._validate_configuration_id(configuration_id) self._validate_environment_id(environment_id) ip_config = IPConfig.remove( self, user, environment_id, configuration_id) return self.response(dumps_networkapi({'ip_config': ip_config})) except PermissionError: return self.not_authorized() except IPConfigNotFoundError, e: self.log.error(u'IpCofig not registred') return self.response_error(301)
def handle_delete(self, request, user, *args, **kwargs): """Treat requests GET to Remove Prefix Configuration. URL: /environment/configuration/remove/environment_id/configuration_id/ """ try: configuration_id = kwargs.get('configuration_id') environment_id = kwargs.get('environment_id') self._validate_permission(user) self._validate_configuration_id(configuration_id) self._validate_environment_id(environment_id) ip_config = IPConfig.remove(self, user, environment_id, configuration_id) # remove from cidr table logging.debug("Remove config from cidr table.") Ambiente().delete_cidr([configuration_id]) return self.response(dumps_networkapi({'ip_config': ip_config})) except PermissionError: return self.not_authorized() except IPConfigNotFoundError, e: self.log.error(u'IpCofig not registred') return self.response_error(301)
def test_add_network_ipv4_given_no_ipv4_config_set(self): self.mock_find_vlan_by_pk(self.vlan) self.mock_find_config_environment([ConfigEnvironment(ip_config = IPConfig(type = IP_VERSION.IPv6[0]))]) self.mock_get_networks([self.network]) with self.assertRaises(ConfigEnvironmentInvalidError): network = NetworkIPv4() network.add_network_ipv4(self.user, self.vlan.id, self.network_type, self.vip_env, 24) self.assertEquals(self.vlan, network.vlan)
def _validate_configuration_id(self, id_configuration): if not is_valid_int_greater_zero_param(id_configuration): self.log.error( u'The id_configuration parameter is invalid value: %s.', id_configuration) raise InvalidValueError(None, 'id_configuration', id_configuration) """ Check if exists""" IPConfig().get_by_pk(id_configuration)
def test_add_network_ipv4_given_no_more_address_available(self): environment_config = ConfigEnvironment(ip_config=IPConfig(type=IP_VERSION.IPv4[0], subnet='10.126.1.0/24')) self.mock_find_vlan_by_pk(self.vlan) self.mock_find_config_environment([environment_config]) self.mock_get_networks([self.network]) with self.assertRaises(NetworkIPv4AddressNotAvailableError): network = NetworkIPv4() network.add_network_ipv4(self.user, self.vlan.id, self.network_type, self.vip_env, 24) self.assertEquals(self.vlan, network.vlan)
def test_add_network_ipv4_successfully(self): environment_config = ConfigEnvironment(ip_config=IPConfig(type=IP_VERSION.IPv4[0], subnet='10.126.1.0/24')) self.mock_find_vlan_by_pk(self.vlan) self.mock_find_config_environment([environment_config]) self.mock_get_networks([]) save_network_mock = self.mock_save_network() network = NetworkIPv4() vlan_map = network.add_network_ipv4(self.user, self.vlan.id, self.network_type, self.vip_env, 24) self.assertEquals(self.vlan, network.vlan) self.assertTrue(save_network_mock.called) self.assertTrue(isinstance(vlan_map, dict))
def handle_get(self, request, user, *args, **kwargs): """Treat requests GET to list all Environments. URL: /environment/configuration/list/environment_id/ """ try: environment_id = kwargs.get('environment_id') self._validate_permission(user) self._validate_environment_id(environment_id) configurations_prefix = IPConfig.get_by_environment( self, environment_id) lists_configuration = list() for configuration in configurations_prefix: configuration_dict = {} configuration_dict['id'] = configuration.id configuration_dict['subnet'] = configuration.subnet configuration_dict['new_prefix'] = configuration.new_prefix configuration_dict['type'] = configuration.type configuration_dict[ 'network_type'] = configuration.network_type.tipo_rede if configuration.network_type else None lists_configuration.append(configuration_dict) return self.response( dumps_networkapi({'lists_configuration': lists_configuration})) except PermissionError: return self.not_authorized() except InvalidValueError, e: self.log.error(u'Parameter %s is invalid. Value: %s.', e.param, e.value) return self.response_error(269, e.param, e.value)
def handle_get(self, request, user, *args, **kwargs): """Treat requests GET to list all Environments. URL: /environment/configuration/list/environment_id/ """ try: environment_id = kwargs.get('environment_id') self._validate_permission(user) self._validate_environment_id(environment_id) configurations_prefix = IPConfig.get_by_environment( self, environment_id) lists_configuration = list() for configuration in configurations_prefix: configuration_dict = {} configuration_dict['id'] = configuration.id configuration_dict['subnet'] = configuration.subnet configuration_dict['new_prefix'] = configuration.new_prefix configuration_dict['type'] = configuration.type configuration_dict[ 'network_type'] = configuration.network_type.tipo_rede if configuration.network_type else None lists_configuration.append(configuration_dict) return self.response(dumps_networkapi({'lists_configuration': lists_configuration})) except PermissionError: return self.not_authorized() except InvalidValueError, e: self.log.error( u'Parameter %s is invalid. Value: %s.', e.param, e.value) return self.response_error(269, e.param, e.value)
def handle_post(self, request, user, *args, **kwargs): """Handles POST requests associate environment to ip config URL: ipconfig/ """ try: # Commons Validations # User permission if not has_perm(user, AdminPermission.ENVIRONMENT_MANAGEMENT, AdminPermission.WRITE_OPERATION): return self.not_authorized() # Business Validations # Load XML data xml_map, attrs_map = loads(request.raw_post_data) # XML data format networkapi_map = xml_map.get('networkapi') if networkapi_map is None: return self.response_error( 3, u'Não existe valor para a tag networkapi do XML de requisição.' ) environment_map = networkapi_map.get('ambiente') if environment_map is None: return self.response_error( 3, u'Não existe valor para a tag ambiente do XML de requisição.' ) # Get XML data id_environment = environment_map.get('id_environment') id_ip_config = environment_map.get('id_ip_config') # Valid environment if not is_valid_int_greater_zero_param(id_environment): raise InvalidValueError(None, 'id_environment', id_environment) # Valid ip config if not is_valid_int_greater_zero_param(id_ip_config): raise InvalidValueError(None, 'id_ip_config', id_ip_config) # Environment must exists environment = Ambiente().get_by_pk(id_environment) # Ip config must exists ip_conf = IPConfig().get_by_pk(id_ip_config) # Makes the relationship config = ConfigEnvironment() config.ip_config = ip_conf config.environment = environment config.save() # Make return xml conf_env_map = dict() conf_env_map['id_config_do_ambiente'] = config.id return self.response( dumps_networkapi({'config_do_ambiente': conf_env_map})) except InvalidValueError, e: return self.response_error(269, e.param, e.value)
def handle_post(self, request, user, *args, **kwargs): """Treat POST requests to add new Environment Configuration Prefix URL: environment/configuration/add """ try: self._validate_permission(user) xml_map, _ = loads(request.raw_post_data) networkapi_map = xml_map.get('networkapi') self._validate_xml_networkapi(networkapi_map) network_map = networkapi_map.get('ambiente') self._validate_xml_network(network_map) # Get XML data network = network_map.get('network') id_environment = network_map.get('id_environment') ip_version = network_map.get('ip_version') network_type = network_map.get('network_type') prefix = network_map.get('prefix') self._validate_network(network, prefix) self._validate_environment_id(id_environment) self._validate_ip_version(ip_version) self._validate_network_type(network_type) self._validate_prefix_by_net_type(prefix, ip_version) environment = Ambiente().get_by_pk(id_environment) network_type = TipoRede.get_by_pk(network_type) ip_config = IPConfig() ip_config.subnet = network ip_config.new_prefix = prefix ip_config.type = ip_version ip_config.network_type = network_type ip_config.save() config_environment = ConfigEnvironment() config_environment.environment = environment config_environment.ip_config = ip_config config_environment.save() return self.response(dumps_networkapi({'network': network_map})) except PermissionError: return self.not_authorized() except AmbienteNotFoundError, e: return self.response_error(112)
def handle_post(self, request, user, *args, **kwargs): """Trata requisições POST para inserir novo Ambiente. URL: ambiente/ or ambiente/ipconfig/ """ try: if not has_perm(user, AdminPermission.ENVIRONMENT_MANAGEMENT, AdminPermission.WRITE_OPERATION): return self.not_authorized() xml_map, attrs_map = loads(request.raw_post_data) self.log.debug('XML_MAP: %s', xml_map) networkapi_map = xml_map.get('networkapi') if networkapi_map is None: return self.response_error( 3, u'Não existe valor para a tag networkapi do XML de requisição.' ) environment_map = networkapi_map.get('ambiente') if environment_map is None: return self.response_error( 3, u'Não existe valor para a tag ambiente do XML de requisição.' ) link = environment_map.get('link') if not is_valid_string_maxsize(link, 200, False): self.log.error(u'Parameter link is invalid. Value: %s', link) raise InvalidValueError(None, 'link', link) l3_group_id = environment_map.get('id_grupo_l3') if not is_valid_int_greater_zero_param(l3_group_id): self.log.error( u'The l3_group_id parameter is not a valid value: %s.', l3_group_id) raise InvalidValueError(None, 'l3_group_id', l3_group_id) else: l3_group_id = int(l3_group_id) logic_environment_id = environment_map.get('id_ambiente_logico') if not is_valid_int_greater_zero_param(logic_environment_id): self.log.error( u'The logic_environment_id parameter is not a valid value: %s.', logic_environment_id) raise InvalidValueError(None, 'logic_environment_id', logic_environment_id) else: logic_environment_id = int(logic_environment_id) dc_division_id = environment_map.get('id_divisao') if not is_valid_int_greater_zero_param(dc_division_id): self.log.error( u'The dc_division_id parameter is not a valid value: %s.', dc_division_id) raise InvalidValueError(None, 'dc_division_id', dc_division_id) else: dc_division_id = int(dc_division_id) filter_id = environment_map.get('id_filter') if filter_id is not None: if not is_valid_int_greater_zero_param(filter_id): self.log.error( u'Parameter filter_id is invalid. Value: %s.', filter_id) raise InvalidValueError(None, 'filter_id', filter_id) acl_path = environment_map.get('acl_path') if not is_valid_string_maxsize(acl_path, 250, False): self.log.error(u'Parameter acl_path is invalid. Value: %s', acl_path) raise InvalidValueError(None, 'acl_path', acl_path) ipv4_template = environment_map.get('ipv4_template') if not is_valid_string_maxsize(ipv4_template, 250, False): self.log.error( u'Parameter ipv4_template is invalid. Value: %s', ipv4_template) raise InvalidValueError(None, 'ipv4_template', ipv4_template) ipv6_template = environment_map.get('ipv6_template') if not is_valid_string_maxsize(ipv6_template, 250, False): self.log.error( u'Parameter ipv6_template is invalid. Value: %s', ipv6_template) raise InvalidValueError(None, 'ipv6_template', ipv6_template) max_num_vlan_1 = environment_map.get('max_num_vlan_1') min_num_vlan_1 = environment_map.get('min_num_vlan_1') max_num_vlan_2 = environment_map.get('max_num_vlan_2') min_num_vlan_2 = environment_map.get('min_num_vlan_2') # validate max_num_vlan_1 and min_num_vlan_1 if (max_num_vlan_1 is not None and min_num_vlan_1 is None) or ( min_num_vlan_1 is not None and max_num_vlan_1 is None): self.log.error( u'Parameters min_num_vlan_1, max_num_vlan_1 is invalid. Values: %s, %s', (min_num_vlan_1, max_num_vlan_1)) raise InvalidValueError(None, 'min_num_vlan_1, max_num_vlan_1', min_num_vlan_1 + ',' + max_num_vlan_1) if max_num_vlan_1 is not None and min_num_vlan_1 is not None: max_num_vlan_1 = int(max_num_vlan_1) min_num_vlan_1 = int(min_num_vlan_1) if max_num_vlan_1 < 1 or min_num_vlan_1 < 1: self.log.error( u'Parameters min_num_vlan_1, max_num_vlan_1 is invalid. Values: %s, %s', (min_num_vlan_1, max_num_vlan_1)) raise InvalidValueError( None, 'min_num_vlan_1, max_num_vlan_1', min_num_vlan_1 + ',' + max_num_vlan_1) if max_num_vlan_1 <= min_num_vlan_1: self.log.error( u'Parameters min_num_vlan_1, max_num_vlan_1 is invalid. Values: %s, %s', (min_num_vlan_1, max_num_vlan_1)) raise InvalidValueError( None, 'min_num_vlan_1, max_num_vlan_1', min_num_vlan_1 + ',' + max_num_vlan_1) else: max_num_vlan_1 = max_num_vlan_2 min_num_vlan_1 = min_num_vlan_2 # validate max_num_vlan_1 and min_num_vlan_1 # validate max_num_vlan_2 and min_num_vlan_2 if (max_num_vlan_2 is not None and min_num_vlan_2 is None) or ( min_num_vlan_2 is not None and max_num_vlan_2 is None): self.log.error( u'Parameters min_num_vlan_2, max_num_vlan_2 is invalid. Values: %s, %s', (min_num_vlan_2, max_num_vlan_2)) raise InvalidValueError(None, 'min_num_vlan_2, max_num_vlan_2', min_num_vlan_2 + ',' + max_num_vlan_1) if max_num_vlan_2 is not None and min_num_vlan_2 is not None: max_num_vlan_2 = int(max_num_vlan_2) min_num_vlan_2 = int(min_num_vlan_2) max_num_vlan_1 = int(max_num_vlan_1) min_num_vlan_1 = int(min_num_vlan_1) if max_num_vlan_2 < 1 or min_num_vlan_2 < 1: self.log.error( u'Parameters min_num_vlan_2, max_num_vlan_2 is invalid. Values: %s, %s', (min_num_vlan_2, max_num_vlan_2)) raise InvalidValueError( None, 'min_num_vlan_2, max_num_vlan_2', min_num_vlan_2 + ',' + max_num_vlan_1) if max_num_vlan_2 <= min_num_vlan_2: self.log.error( u'Parameters min_num_vlan_2, max_num_vlan_2 is invalid. Values: %s, %s', (min_num_vlan_2, max_num_vlan_2)) raise InvalidValueError( None, 'min_num_vlan_2, max_num_vlan_2', min_num_vlan_2 + ',' + max_num_vlan_1) else: max_num_vlan_2 = max_num_vlan_1 min_num_vlan_2 = min_num_vlan_1 # validate max_num_vlan_2 and min_num_vlan_2 vrf = environment_map.get('vrf') if not is_valid_string_maxsize(vrf, 100, False): self.log.error(u'Parameter vrf is invalid. Value: %s', vrf) raise InvalidValueError(None, 'link', vrf) environment = Ambiente() environment.grupo_l3 = GrupoL3() environment.ambiente_logico = AmbienteLogico() environment.divisao_dc = DivisaoDc() environment.grupo_l3.id = l3_group_id environment.ambiente_logico.id = logic_environment_id environment.divisao_dc.id = dc_division_id environment.acl_path = fix_acl_path(acl_path) environment.ipv4_template = ipv4_template environment.ipv6_template = ipv6_template environment.max_num_vlan_1 = max_num_vlan_1 environment.min_num_vlan_1 = min_num_vlan_1 environment.max_num_vlan_2 = max_num_vlan_2 environment.min_num_vlan_2 = min_num_vlan_2 environment.vrf = vrf if filter_id is not None: environment.filter = Filter() environment.filter.id = filter_id environment.link = link environment.create(user) # IP Config ip_config = kwargs.get('ip_config') # If ip config is set if ip_config: # Add this to environment id_ip_config = environment_map.get('id_ip_config') # Valid ip config if not is_valid_int_greater_zero_param(id_ip_config): raise InvalidValueError(None, 'id_ip_config', id_ip_config) # Ip config must exists ip_conf = IPConfig().get_by_pk(id_ip_config) # Makes the relationship config = ConfigEnvironment() config.environment = environment config.ip_config = ip_conf config.save() environment_map = dict() environment_map['id'] = environment.id return self.response( dumps_networkapi({'ambiente': environment_map})) except GrupoError: return self.response_error(1) except XMLError, x: self.log.error(u'Erro ao ler o XML da requisicao.') return self.response_error(3, x)