1+ import logging
12from django .db import transaction
23from django .utils import timezone
34from keystoneclientutils import KeystoneClientUtils
45from neutronclientutils import NeutronClientUtils
5- from ntt_tool .apps .cloud .models import Tenant , Network , Router
6+ from ntt_tool .apps .cloud .models import Tenant , Network , Subnet
67from ntt_tool .apps .cloud .serializers import TenantSerializer
78
89
10+ logger = logging .getLogger (__name__ )
11+
12+
913class TenantDiscovery (KeystoneClientUtils ):
1014
1115 def get_tenants (self ):
1216 keystone = self .get_client_instance ()
1317 return keystone .tenants .list ()
1418
1519
16- class NetworkRouterDiscovery (NeutronClientUtils ):
20+ class NetworkSubnetDiscovery (NeutronClientUtils ):
1721
18- def get_networks_and_routers (self , user , cloud_id , tenants ):
22+ def get_networks_and_subnets (self , user , cloud_id , tenants ):
1923 neutron = self .get_client_instance ()
2024
2125 discovery_result = []
2226 with transaction .atomic ():
2327 discovery_datetime = timezone .now ()
2428
25- Tenant .objects .filter (cloud_id = cloud_id ).update (is_dirty = False )
29+ Tenant .objects .filter (cloud_id = cloud_id )\
30+ .update (is_dirty = False )
31+
2632 for tenant in tenants :
2733 tenant_obj = None
2834 try :
29- tenant_obj = Tenant .objects .filter (tenant_name = tenant .name ).get ()
35+ tenant_obj = Tenant .objects .filter (tenant_id = tenant .id ).get ()
3036 except Tenant .DoesNotExist :
3137 tenant_obj = Tenant ()
3238 tenant_obj .cloud_id = cloud_id
@@ -42,6 +48,7 @@ def get_networks_and_routers(self, user, cloud_id, tenants):
4248 # Setting all records belongs to tenant as not dirty/updated
4349 Network .objects .filter (tenant__tenant_id = tenant .id )\
4450 .update (is_dirty = False )
51+
4552 networks = neutron .list_networks (tenant_id = tenant .id )
4653 for network in networks .get ("networks" , []):
4754 network_obj = None
@@ -57,51 +64,47 @@ def get_networks_and_routers(self, user, cloud_id, tenants):
5764 network_obj .network_id = network .get ("id" )
5865 network_obj .network_name = network .get ("name" )
5966 network_obj .shared = network .get ("shared" )
60- # ToDo: We are assuming that each network is having only one subnet
61- # ToDo: Need to handle the scenario if we add more than one subnet for a network
62- if network .get ("subnets" ):
63- subnet_list = neutron .list_subnets (id = network .get ("subnets" ))
64- network_obj .network_cidr = subnet_list .get ("subnets" )[0 ].get ("cidr" )
6567 network_obj .status = network .get ("status" )
6668 network_obj .is_dirty = True
6769 network_obj .creator = user
6870 network_obj .updated_on = discovery_datetime
6971 network_obj .save ()
70- # Deleting networks which are not got changed after discovery
71- Network .objects .filter (tenant__tenant_id = tenant_obj .id )\
72- .filter (is_dirty = False ).delete ()
7372
74- # Setting all records belongs to tenant as not dirty/updated
75- Router .objects .filter (tenant__tenant_id = tenant .id )\
76- .update (is_dirty = False )
77- routers = neutron .list_routers (tenant_id = tenant .id )
78- for router in routers .get ("routers" , []):
79- router_obj = None
80- try :
81- filters = {
82- "tenant__tenant_id" : tenant .id ,
83- "router_name" : router .get ("name" )
84- }
85- router_obj = Router .objects .filter (** filters ).get ()
86- except Router .DoesNotExist :
87- router_obj = Router ()
88- router_obj .created_on = discovery_datetime
89- router_obj .tenant = tenant_obj
90- router_obj .router_id = router .get ("id" )
91- router_obj .router_name = router .get ("name" )
92- router_obj .status = router .get ("status" )
93- router_obj .is_dirty = True
94- router_obj .creator = user
95- router_obj .updated_on = discovery_datetime
96- router_obj .save ()
97- # Deleting routers which are got changed after discovery
98- Router .objects .filter (tenant__tenant_id = tenant_obj .id )\
99- .filter (is_dirty = False ).delete ()
73+ # Setting all records belongs to tenant as not dirty/updated
74+ Subnet .objects .filter (network__network_id = network .get ("id" ))\
75+ .update (is_dirty = False )
76+
77+ subnets = neutron .list_subnets (network_id = network .get ("id" ))
78+ for subnet in subnets .get ("subnets" ):
79+ subnet_obj = None
80+ try :
81+ filters = {
82+ "network__network_id" : network .get ("id" ),
83+ "subnet_id" : subnet .get ("id" )
84+ }
85+ print filters
86+ subnet_obj = Subnet .objects .filter (** filters ).get ()
87+ except Subnet .DoesNotExist :
88+ subnet_obj = Subnet ()
89+ subnet_obj .subnet_id = subnet .get ("id" )
90+ subnet_obj .network_id = network_obj .id
91+ subnet_obj .subnet_name = subnet .get ("name" )
92+ subnet_obj .cidr = subnet .get ("cidr" )
93+ subnet_obj .is_dirty = True
94+ subnet_obj .save ()
10095
101- # Deleting tenants which are got changed after discovery
102- Tenant .objects .filter (cloud_id = cloud_id )\
96+ # Deleting subnets which are got changed after discovery
97+ Subnet .objects .filter (network__network_id = network .get ("id" ))\
98+ .filter (is_dirty = False ).delete ()
99+
100+ # Deleting networks which are not got changed after discovery
101+ Network .objects .filter (tenant__tenant_id = tenant_obj .id )\
103102 .filter (is_dirty = False ).delete ()
104103
105104 serializer = TenantSerializer (tenant_obj )
106105 discovery_result .append (serializer .data )
106+
107+ # Deleting tenants which are got changed after discovery
108+ Tenant .objects .filter (cloud_id = cloud_id )\
109+ .filter (is_dirty = False ).delete ()
107110 return discovery_result
0 commit comments