3636from networkapi .api_rack import serializers as rack_serializers
3737from networkapi .api_rack import exceptions
3838from networkapi .api_rack import provision
39+ from networkapi .api_rack import autoprovision
3940from networkapi .system import exceptions as var_exceptions
4041from networkapi .system .facade import get_value as get_variable
4142from networkapi .api_rest .exceptions import ValidationAPIException , ObjectDoesNotExistException , \
@@ -407,7 +408,7 @@ def gerar_arquivo_config(ids):
407408
408409 auto = provision .Provision (rack .id )
409410 auto .spine_provision (rack , equips )
410- auto .oob_provision (rack , equips )
411+ auto .oob_provision (equips )
411412
412413 return True
413414
@@ -420,16 +421,14 @@ def _create_spnlfenv(user, rack):
420421 ambiente_logico__nome = "SPINES" )
421422 log .debug ("SPN environments" + str (envfathers ))
422423
423- environment_spn_lf = None
424424 environment_spn_lf_list = list ()
425425 spines = int (rack .dcroom .spines )
426- fabric = rack .dcroom .name
427426
428427 try :
429- id_grupo_l3 = models_env .GrupoL3 ().get_by_name (fabric ).id
428+ id_grupo_l3 = models_env .GrupoL3 ().get_by_name (rack . nome ).id
430429 except :
431430 grupo_l3_dict = models_env .GrupoL3 ()
432- grupo_l3_dict .nome = fabric
431+ grupo_l3_dict .nome = rack . nome
433432 grupo_l3_dict .save ()
434433 id_grupo_l3 = grupo_l3_dict .id
435434 pass
@@ -483,6 +482,7 @@ def _create_spnlfenv(user, rack):
483482 'configs' : config ,
484483 'fabric_id' : rack .dcroom .id
485484 }
485+ # obj_env = facade_env.create_environment(obj)
486486
487487 return environment_spn_lf_list
488488
@@ -510,15 +510,24 @@ def _create_spnlfvlans(rack, user):
510510 pass
511511 for env in spn_lf_envs :
512512 env_id = env .id
513+ try :
514+ base_rack = int (rack .dcroom .racks )
515+ spn = int (env .ambiente_logico .nome [6 ])
516+ except :
517+ spn = 1
518+ base_rack = 1
513519 vlan_base = env .min_num_vlan_1
514- vlan_number = int (vlan_base ) + int (rack_number )
520+ vlan_number = int (vlan_base ) + int (rack_number ) + ( spn - 1 ) * base_rack
515521 vlan_name = "VLAN_" + env .divisao_dc .nome + "_" + env .ambiente_logico .nome + "_" + rack .nome
516522
517523 for net in env .configs :
518524 prefix = int (net .subnet_mask )
525+ block = list (IPNetwork (net .network ).subnet (int (net .subnet_mask )))
519526 network = {
520- 'prefix' : prefix , # str(list(cidr.subnet(prefix))[rack_number]),
521- 'network_type' : id_network_type
527+ 'network' : str (block [rack_number ]),
528+ 'prefix' : prefix ,
529+ 'network_type' : id_network_type ,
530+ 'ip_version' : str (net .ip_version )
522531 }
523532 if str (net .ip_version )[- 1 ] is "4" :
524533 create_networkv4 = network
@@ -592,14 +601,13 @@ def _create_prod_envs(rack, user):
592601 subnet_list = list (cidr .subnet (int (prefix )))
593602 try :
594603 bloco = subnet_list [int (rack .numero )]
595- except IndexError as err :
604+ except IndexError :
596605 msg = "Rack number %d is greater than the maximum number of " \
597606 "subnets available with prefix %d from %s subnet" % \
598607 (rack .numero , prefix , cidr )
599608 raise Exception (msg )
600609
601610 if isinstance (details , list ) and len (details ) > 0 :
602-
603611 if details [0 ].get (str (net .ip_version )):
604612 new_prefix = details [0 ].get (str (net .ip_version )).get ("new_prefix" )
605613 else :
@@ -761,6 +769,56 @@ def _create_prod_vlans(rack, user):
761769 return environment
762770
763771
772+ def _create_lflf_envs (rack ):
773+ log .debug ("_create_lflf_envs" )
774+ env_lf = models_env .Ambiente .objects .filter (dcroom = int (rack .dcroom .id ),
775+ grupo_l3__nome = str (rack .dcroom .name ),
776+ ambiente_logico__nome = "LEAF-LEAF" )
777+ log .debug ("Leaf-leaf environments: " + str (env_lf ))
778+
779+ try :
780+ id_l3 = models_env .GrupoL3 ().get_by_name (rack .nome ).id
781+ except :
782+ l3_dict = models_env .GrupoL3 ()
783+ l3_dict .nome = rack .nome
784+ l3_dict .save ()
785+ id_l3 = l3_dict .id
786+ pass
787+
788+ for env in env_lf :
789+ config_subnet = []
790+ for net in env .configs :
791+ cidr = list (IPNetwork (net .network ).subnet (int (net .subnet_mask )))[rack .numero ]
792+ network = {
793+ 'network' : str (cidr ),
794+ 'ip_version' : str (net .ip_version ),
795+ 'network_type' : int (net .id_network_type .id ),
796+ 'subnet_mask' : int (net .subnet_mask )
797+ }
798+ config_subnet .append (network )
799+
800+ obj = {
801+ 'grupo_l3' : id_l3 ,
802+ 'ambiente_logico' : env .ambiente_logico .id ,
803+ 'divisao_dc' : env .divisao_dc .id ,
804+ 'acl_path' : env .acl_path ,
805+ 'ipv4_template' : env .ipv4_template ,
806+ 'ipv6_template' : env .ipv6_template ,
807+ 'link' : env .link ,
808+ 'min_num_vlan_2' : env .min_num_vlan_1 ,
809+ 'max_num_vlan_2' : env .max_num_vlan_1 ,
810+ 'min_num_vlan_1' : env .min_num_vlan_1 ,
811+ 'max_num_vlan_1' : env .max_num_vlan_1 ,
812+ 'vrf' : env .vrf ,
813+ 'father_environment' : env .id ,
814+ 'default_vrf' : env .default_vrf .id ,
815+ 'configs' : config_subnet ,
816+ 'fabric_id' : rack .dcroom .id
817+ }
818+ environment = facade_env .create_environment (obj )
819+ log .debug ("Environment object: %s" % str (environment ))
820+
821+
764822def _create_lflf_vlans (rack , user ):
765823 log .debug ("_create_lflf_vlans" )
766824
@@ -789,15 +847,15 @@ def _create_lflf_vlans(rack, user):
789847 except :
790848 log .debug ("debug lfxlf" )
791849 for net in env .configs :
792- bloco = net .ip_config . subnet
850+ bloco = net .network
793851 prefix = bloco .split ('/' )[- 1 ]
794852 network = {
795853 'prefix' : prefix ,
796854 'network_type' : id_network_type
797855 }
798- if str (net .ip_config . type )[- 1 ] is "4" :
856+ if str (net .ip_version )[- 1 ] is "4" :
799857 create_networkv4 = network
800- elif str (net .ip_config . type )[- 1 ] is "6" :
858+ elif str (net .ip_version )[- 1 ] is "6" :
801859 create_networkv6 = network
802860 obj = {
803861 'name' : vlan_name ,
@@ -871,6 +929,7 @@ def rack_environments_vlans(rack_id, user):
871929
872930 # leaf x leaf
873931 _create_lflf_vlans (rack , user )
932+ _create_lflf_envs (rack )
874933
875934 # producao/cloud
876935 _create_prod_envs (rack , user )
@@ -898,6 +957,7 @@ def allocate_env_vlan(user, rack_id):
898957
899958 # leaf x leaf
900959 rack_env .leaf_leaf_vlans_save ()
960+ rack_env .leaf_leaf_envs_save ()
901961
902962 # producao/cloud
903963 rack_env .prod_environment_save ()
0 commit comments