filtered-gcp-network.res 48 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643
  1. cloudbridge.test.test_network_service.CloudNetworkServiceTestCase
  2. Test output
  3. ........
  4. ----------------------------------------------------------------------
  5. Ran 8 tests in 487.584s
  6. OK
  7. Wrote profile results to run_single.py.lprof
  8. Timer unit: 1e-06 s
  9. Total time: 108.333 s
  10. Function: delete at line 861
  11. Line # Hits Time Per Hit % Time Line Contents
  12. ==============================================================
  13. 861 @dispatch(event="provider.networking.networks.delete",
  14. 862 priority=BaseNetworkService.STANDARD_EVENT_PRIORITY)
  15. 863 @profile
  16. 864 def delete(self, network):
  17. 865 # Accepts network object
  18. 866 4 10.0 2.5 0.0 if isinstance(network, GCPNetwork):
  19. 867 4 13.0 3.2 0.0 name = network.name
  20. 868 # Accepts both name and ID
  21. 869 elif 'googleapis' in network:
  22. 870 name = network.split('/')[-1]
  23. 871 else:
  24. 872 name = network
  25. 873 4 20552.0 5138.0 0.0 response = (self.provider
  26. 874 .gcp_compute
  27. 875 .networks()
  28. 876 4 13.0 3.2 0.0 .delete(project=self.provider.project_name,
  29. 877 4 2847073.0 711768.2 2.6 network=name)
  30. 878 .execute())
  31. 879 4 72369673.0 18092418.2 66.8 self.provider.wait_for_operation(response)
  32. 880 # Remove label
  33. 881 4 19.0 4.8 0.0 tag_name = "_".join(["network", name, "label"])
  34. 882 4 33095185.0 8273796.2 30.5 if not helpers.remove_metadata_item(self.provider, tag_name):
  35. 883 log.warning('No label was found associated with this network '
  36. 884 '"{}" when deleted.'.format(network))
  37. 885 4 11.0 2.8 0.0 return True
  38. Total time: 80.9144 s
  39. Function: create at line 824
  40. Line # Hits Time Per Hit % Time Line Contents
  41. ==============================================================
  42. 824 @dispatch(event="provider.networking.networks.create",
  43. 825 priority=BaseNetworkService.STANDARD_EVENT_PRIORITY)
  44. 826 @profile
  45. 827 def create(self, label, cidr_block):
  46. 828 """
  47. 829 Creates an auto mode VPC network with default subnets. It is possible
  48. 830 to add additional subnets later.
  49. 831 """
  50. 832 14 146.0 10.4 0.0 GCPNetwork.assert_valid_resource_label(label)
  51. 833 4 153.0 38.2 0.0 name = GCPNetwork._generate_name_from_label(label, 'cbnet')
  52. 834 4 6.0 1.5 0.0 body = {'name': name}
  53. 835 # This results in a custom mode network
  54. 836 4 3.0 0.8 0.0 body['autoCreateSubnetworks'] = False
  55. 837 4 842523.0 210630.8 1.0 response = (self.provider
  56. 838 .gcp_compute
  57. 839 .networks()
  58. 840 4 19.0 4.8 0.0 .insert(project=self.provider.project_name,
  59. 841 4 4887307.0 1221826.8 6.0 body=body)
  60. 842 .execute())
  61. 843 4 48797931.0 12199482.8 60.3 self.provider.wait_for_operation(response)
  62. 844 4 1224180.0 306045.0 1.5 cb_net = self.get(name)
  63. 845 4 25162135.0 6290533.8 31.1 cb_net.label = label
  64. 846 4 10.0 2.5 0.0 return cb_net
  65. Total time: 65.0219 s
  66. Function: create at line 1032
  67. Line # Hits Time Per Hit % Time Line Contents
  68. ==============================================================
  69. 1032 @dispatch(event="provider.networking.subnets.create",
  70. 1033 priority=BaseSubnetService.STANDARD_EVENT_PRIORITY)
  71. 1034 @profile
  72. 1035 def create(self, label, network, cidr_block, zone):
  73. 1036 """
  74. 1037 GCP subnets are regional. The region is inferred from the zone;
  75. 1038 otherwise, the default region, as set in the
  76. 1039 provider, is used.
  77. 1040
  78. 1041 If a subnet with overlapping IP range exists already, we return that
  79. 1042 instead of creating a new subnet. In this case, other parameters, i.e.
  80. 1043 the name and the zone, are ignored.
  81. 1044 """
  82. 1045 13 193.0 14.8 0.0 GCPSubnet.assert_valid_resource_label(label)
  83. 1046 3 150.0 50.0 0.0 name = GCPSubnet._generate_name_from_label(label, 'cbsubnet')
  84. 1047 3 22.0 7.3 0.0 region_name = self._zone_to_region(zone)
  85. 1048 # for subnet in self.iter(network=network):
  86. 1049 # if BaseNetwork.cidr_blocks_overlap(subnet.cidr_block, cidr_block):
  87. 1050 # if subnet.region_name != region_name:
  88. 1051 # log.error('Failed to create subnetwork in region %s: '
  89. 1052 # 'the given IP range %s overlaps with a '
  90. 1053 # 'subnetwork in a different region %s',
  91. 1054 # region_name, cidr_block, subnet.region_name)
  92. 1055 # return None
  93. 1056 # return subnet
  94. 1057 # if subnet.label == label and subnet.region_name == region_name:
  95. 1058 # return subnet
  96. 1059
  97. 1060 3 1.0 0.3 0.0 body = {'ipCidrRange': cidr_block,
  98. 1061 3 2.0 0.7 0.0 'name': name,
  99. 1062 3 9.0 3.0 0.0 'network': network.resource_url,
  100. 1063 3 3.0 1.0 0.0 'region': region_name
  101. 1064 }
  102. 1065 3 36027.0 12009.0 0.1 response = (self.provider
  103. 1066 .gcp_compute
  104. 1067 .subnetworks()
  105. 1068 3 8.0 2.7 0.0 .insert(project=self.provider.project_name,
  106. 1069 3 3.0 1.0 0.0 region=region_name,
  107. 1070 3 3172088.0 1057362.7 4.9 body=body)
  108. 1071 .execute())
  109. 1072 3 38914855.0 12971618.3 59.8 self.provider.wait_for_operation(response, region=region_name)
  110. 1073 3 1197484.0 399161.3 1.8 cb_subnet = self.get(name)
  111. 1074 3 21701015.0 7233671.7 33.4 cb_subnet.label = label
  112. 1075 3 6.0 2.0 0.0 return cb_subnet
  113. Total time: 60.4918 s
  114. Function: delete at line 1077
  115. Line # Hits Time Per Hit % Time Line Contents
  116. ==============================================================
  117. 1077 @dispatch(event="provider.networking.subnets.delete",
  118. 1078 priority=BaseSubnetService.STANDARD_EVENT_PRIORITY)
  119. 1079 @profile
  120. 1080 def delete(self, subnet):
  121. 1081 3 8.0 2.7 0.0 sn = subnet if isinstance(subnet, GCPSubnet) else self.get(subnet)
  122. 1082 3 4.0 1.3 0.0 if not sn:
  123. 1083 return
  124. 1084 3 25835.0 8611.7 0.0 response = (self.provider
  125. 1085 .gcp_compute
  126. 1086 .subnetworks()
  127. 1087 3 8.0 2.7 0.0 .delete(project=self.provider.project_name,
  128. 1088 3 1183.0 394.3 0.0 region=sn.region_name,
  129. 1089 3 2920313.0 973437.7 4.8 subnetwork=sn.name)
  130. 1090 .execute())
  131. 1091 3 36864675.0 12288225.0 60.9 self.provider.wait_for_operation(response, region=sn.region_name)
  132. 1092 # Remove label
  133. 1093 3 24.0 8.0 0.0 tag_name = "_".join(["subnet", sn.name, "label"])
  134. 1094 3 20679703.0 6893234.3 34.2 if not helpers.remove_metadata_item(self._provider, tag_name):
  135. 1095 log.warning('No label was found associated with this subnet '
  136. 1096 '"{}" when deleted.'.format(sn.name))
  137. Total time: 49.5131 s
  138. Function: label at line 1305
  139. Line # Hits Time Per Hit % Time Line Contents
  140. ==============================================================
  141. 1305 @label.setter
  142. 1306 @profile
  143. 1307 def label(self, value):
  144. 1308 15 243.0 16.2 0.0 self.assert_valid_resource_label(value)
  145. 1309 7 36.0 5.1 0.0 tag_name = "_".join(["network", self.name, "label"])
  146. 1310 7 49512783.0 7073254.7 100.0 helpers.modify_or_add_metadata_item(self._provider, tag_name, value)
  147. Total time: 47.1401 s
  148. Function: label at line 1565
  149. Line # Hits Time Per Hit % Time Line Contents
  150. ==============================================================
  151. 1565 @label.setter
  152. 1566 @profile
  153. 1567 def label(self, value):
  154. 1568 14 228.0 16.3 0.0 self.assert_valid_resource_label(value)
  155. 1569 6 30.0 5.0 0.0 tag_name = "_".join(["subnet", self.name, "label"])
  156. 1570 6 47139872.0 7856645.3 100.0 helpers.modify_or_add_metadata_item(self._provider, tag_name, value)
  157. Total time: 30.0907 s
  158. Function: label at line 1445
  159. Line # Hits Time Per Hit % Time Line Contents
  160. ==============================================================
  161. 1445 @label.setter
  162. 1446 @profile
  163. 1447 def label(self, value):
  164. 1448 12 156.0 13.0 0.0 self.assert_valid_resource_label(value)
  165. 1449 4 19.0 4.8 0.0 tag_name = "_".join(["router", self.name, "label"])
  166. 1450 4 30090572.0 7522643.0 100.0 helpers.modify_or_add_metadata_item(self._provider, tag_name, value)
  167. Total time: 14.1927 s
  168. Function: find at line 308
  169. Line # Hits Time Per Hit % Time Line Contents
  170. ==============================================================
  171. 308 @dispatch(event="provider.networking.subnets.find",
  172. 309 priority=BaseCloudService.STANDARD_EVENT_PRIORITY)
  173. 310 @profile
  174. 311 def find(self, network=None, **kwargs):
  175. 312 6 9.0 1.5 0.0 if not network:
  176. 313 6 3.0 0.5 0.0 obj_list = self
  177. 314 else:
  178. 315 obj_list = network.subnets
  179. 316 6 5.0 0.8 0.0 filters = ['label']
  180. 317 6 14192347.0 2365391.2 100.0 matches = cb_helpers.generic_find(filters, kwargs, obj_list)
  181. 318 5 297.0 59.4 0.0 return ClientPagedResultList(self._provider, list(matches))
  182. Total time: 12.6716 s
  183. Function: create at line 935
  184. Line # Hits Time Per Hit % Time Line Contents
  185. ==============================================================
  186. 935 @dispatch(event="provider.networking.routers.create",
  187. 936 priority=BaseRouterService.STANDARD_EVENT_PRIORITY)
  188. 937 @profile
  189. 938 def create(self, label, network):
  190. 939 1 3.0 3.0 0.0 log.debug("Creating GCP Router Service with params "
  191. 940 1 11.0 11.0 0.0 "[label: %s network: %s]", label, network)
  192. 941 1 10.0 10.0 0.0 GCPRouter.assert_valid_resource_label(label)
  193. 942 1 45.0 45.0 0.0 name = GCPRouter._generate_name_from_label(label, 'cb-router')
  194. 943
  195. 944 1 1.0 1.0 0.0 if not isinstance(network, GCPNetwork):
  196. 945 network = self.provider.networking.networks.get(network)
  197. 946 1 3.0 3.0 0.0 network_url = network.resource_url
  198. 947 1 4.0 4.0 0.0 region_name = self.provider.region_name
  199. 948 1 11099.0 11099.0 0.1 response = (self.provider
  200. 949 .gcp_compute
  201. 950 .routers()
  202. 951 1 2.0 2.0 0.0 .insert(project=self.provider.project_name,
  203. 952 1 1.0 1.0 0.0 region=region_name,
  204. 953 1 1.0 1.0 0.0 body={'name': name,
  205. 954 1 995952.0 995952.0 7.9 'network': network_url})
  206. 955 .execute())
  207. 956 1 2047968.0 2047968.0 16.2 self.provider.wait_for_operation(response, region=region_name)
  208. 957 1 409513.0 409513.0 3.2 cb_router = self.get(name)
  209. 958 1 9206957.0 9206957.0 72.7 cb_router.label = label
  210. 959 1 2.0 2.0 0.0 return cb_router
  211. Total time: 10.1332 s
  212. Function: get_or_create_default at line 1098
  213. Line # Hits Time Per Hit % Time Line Contents
  214. ==============================================================
  215. 1098 @profile
  216. 1099 def get_or_create_default(self, zone):
  217. 1100 """
  218. 1101 Return an existing or create a new subnet for the supplied zone.
  219. 1102
  220. 1103 In GCP, subnets are a regional resource so a single subnet can services
  221. 1104 an entire region. The supplied zone parameter is used to derive the
  222. 1105 parent region under which the default subnet then exists.
  223. 1106 """
  224. 1107 # In case the supplied zone param is `None`, resort to the default one
  225. 1108 3 8.0 2.7 0.0 region = self._zone_to_region(zone or self.provider.default_zone,
  226. 1109 3 2048593.0 682864.3 20.2 return_name_only=False)
  227. 1110 # Check if a default subnet already exists for the given region/zone
  228. 1111 3 8084553.0 2694851.0 79.8 for sn in self.find(label=GCPSubnet.CB_DEFAULT_SUBNET_LABEL):
  229. 1112 3 25.0 8.3 0.0 if sn.region == region.id:
  230. 1113 3 9.0 3.0 0.0 return sn
  231. 1114 # No default subnet in the supplied zone. Look for a default network,
  232. 1115 # then create a subnet whose address space does not overlap with any
  233. 1116 # other existing subnets. If there are existing subnets, this process
  234. 1117 # largely assumes the subnet address spaces are contiguous when it
  235. 1118 # does the calculations (e.g., 10.0.0.0/24, 10.0.1.0/24).
  236. 1119 cidr_block = GCPSubnet.CB_DEFAULT_SUBNET_IPV4RANGE
  237. 1120 net = self.provider.networking.networks.get_or_create_default()
  238. 1121 if net.subnets:
  239. 1122 max_sn = net.subnets[0]
  240. 1123 # Find the maximum address subnet address space within the network
  241. 1124 for esn in net.subnets:
  242. 1125 if (ipaddress.ip_network(esn.cidr_block) >
  243. 1126 ipaddress.ip_network(max_sn.cidr_block)):
  244. 1127 max_sn = esn
  245. 1128 max_sn_ipa = ipaddress.ip_network(max_sn.cidr_block)
  246. 1129 # Find the next available subnet after the max one, based on the
  247. 1130 # max subnet size
  248. 1131 next_sn_address = (
  249. 1132 next(max_sn_ipa.hosts()) + max_sn_ipa.num_addresses - 1)
  250. 1133 cidr_block = "{}/{}".format(next_sn_address, max_sn_ipa.prefixlen)
  251. 1134 sn = self.provider.networking.subnets.create(
  252. 1135 label=GCPSubnet.CB_DEFAULT_SUBNET_LABEL,
  253. 1136 cidr_block=cidr_block, network=net, zone=zone)
  254. 1137 router = self.provider.networking.routers.get_or_create_default(net)
  255. 1138 router.attach_subnet(sn)
  256. 1139 gateway = net.gateways.get_or_create()
  257. 1140 router.attach_gateway(gateway)
  258. 1141 return sn
  259. Total time: 9.41386 s
  260. Function: list at line 1645
  261. Line # Hits Time Per Hit % Time Line Contents
  262. ==============================================================
  263. 1645 @dispatch(event="provider.networking.floating_ips.list",
  264. 1646 priority=BaseFloatingIPService.STANDARD_EVENT_PRIORITY)
  265. 1647 @profile
  266. 1648 def list(self, gateway, limit=None, marker=None):
  267. 1649 7 14.0 2.0 0.0 max_result = limit if limit is not None and limit < 500 else 500
  268. 1650 7 26539.0 3791.3 0.3 response = (self.provider
  269. 1651 .gcp_compute
  270. 1652 .addresses()
  271. 1653 7 23.0 3.3 0.0 .list(project=self.provider.project_name,
  272. 1654 7 10.0 1.4 0.0 region=self.provider.region_name,
  273. 1655 7 6.0 0.9 0.0 maxResults=max_result,
  274. 1656 7 3276430.0 468061.4 34.8 pageToken=marker)
  275. 1657 .execute())
  276. 1658 7 28.0 4.0 0.0 ips = [GCPFloatingIP(self.provider, ip)
  277. 1659 7 6110673.0 872953.3 64.9 for ip in response.get('items', [])]
  278. 1660 7 25.0 3.6 0.0 if len(ips) > max_result:
  279. 1661 log.warning('Expected at most %d results; got %d',
  280. 1662 max_result, len(ips))
  281. 1663 7 11.0 1.6 0.0 return ServerPagedResultList('nextPageToken' in response,
  282. 1664 7 14.0 2.0 0.0 response.get('nextPageToken'),
  283. 1665 7 83.0 11.9 0.0 False, data=ips)
  284. Total time: 8.18624 s
  285. Function: delete at line 1683
  286. Line # Hits Time Per Hit % Time Line Contents
  287. ==============================================================
  288. 1683 @dispatch(event="provider.networking.floating_ips.delete",
  289. 1684 priority=BaseFloatingIPService.STANDARD_EVENT_PRIORITY)
  290. 1685 @profile
  291. 1686 def delete(self, gateway, fip):
  292. 1687 2 5.0 2.5 0.0 fip = (fip if isinstance(fip, GCPFloatingIP)
  293. 1688 2 813054.0 406527.0 9.9 else self.get(gateway, fip))
  294. 1689 2 5.0 2.5 0.0 project_name = self.provider.project_name
  295. 1690 # First, delete the forwarding rule, if there is any.
  296. 1691 # pylint:disable=protected-access
  297. 1692 2 2.0 1.0 0.0 if fip._rule:
  298. 1693 response = (self.provider
  299. 1694 .gcp_compute
  300. 1695 .forwardingRules()
  301. 1696 .delete(project=project_name,
  302. 1697 region=fip.region_name,
  303. 1698 forwardingRule=fip._rule['name'])
  304. 1699 .execute())
  305. 1700 self.provider.wait_for_operation(response,
  306. 1701 region=fip.region_name)
  307. 1702
  308. 1703 # Release the address.
  309. 1704 2 8428.0 4214.0 0.1 response = (self.provider
  310. 1705 .gcp_compute
  311. 1706 .addresses()
  312. 1707 2 3.0 1.5 0.0 .delete(project=project_name,
  313. 1708 2 820.0 410.0 0.0 region=fip.region_name,
  314. 1709 2 1470548.0 735274.0 18.0 address=fip._ip['name'])
  315. 1710 .execute())
  316. 1711 2 15.0 7.5 0.0 self.provider.wait_for_operation(response,
  317. 1712 2 5893359.0 2946679.5 72.0 region=fip.region_name)
  318. Total time: 8.02079 s
  319. Function: delete at line 961
  320. Line # Hits Time Per Hit % Time Line Contents
  321. ==============================================================
  322. 961 @dispatch(event="provider.networking.routers.delete",
  323. 962 priority=BaseRouterService.STANDARD_EVENT_PRIORITY)
  324. 963 @profile
  325. 964 def delete(self, router):
  326. 965 1 2.0 2.0 0.0 r = router if isinstance(router, GCPRouter) else self.get(router)
  327. 966 1 1.0 1.0 0.0 if r:
  328. 967 1 7279.0 7279.0 0.1 (self.provider
  329. 968 .gcp_compute
  330. 969 .routers()
  331. 970 1 3.0 3.0 0.0 .delete(project=self.provider.project_name,
  332. 971 1 322.0 322.0 0.0 region=r.region_name,
  333. 972 1 724805.0 724805.0 9.0 router=r.name)
  334. 973 .execute())
  335. 974 # Remove label
  336. 975 1 8.0 8.0 0.0 tag_name = "_".join(["router", r.name, "label"])
  337. 976 1 7288365.0 7288365.0 90.9 if not helpers.remove_metadata_item(self.provider, tag_name):
  338. 977 log.warning('No label was found associated with this router '
  339. 978 '"{}" when deleted.'.format(r.name))
  340. Total time: 7.44141 s
  341. Function: find at line 793
  342. Line # Hits Time Per Hit % Time Line Contents
  343. ==============================================================
  344. 793 @dispatch(event="provider.networking.networks.find",
  345. 794 priority=BaseNetworkService.STANDARD_EVENT_PRIORITY)
  346. 795 @profile
  347. 796 def find(self, limit=None, marker=None, **kwargs):
  348. 797 """
  349. 798 GCP networks are global. There is at most one network with a given
  350. 799 name.
  351. 800 """
  352. 801 3 6.0 2.0 0.0 obj_list = self
  353. 802 3 4.0 1.3 0.0 filters = ['name', 'label']
  354. 803 3 7441293.0 2480431.0 100.0 matches = cb_helpers.generic_find(filters, kwargs, obj_list)
  355. 804 2 9.0 4.5 0.0 return ClientPagedResultList(self._provider, list(matches),
  356. 805 2 99.0 49.5 0.0 limit=limit, marker=marker)
  357. Total time: 7.33389 s
  358. Function: create at line 1667
  359. Line # Hits Time Per Hit % Time Line Contents
  360. ==============================================================
  361. 1667 @dispatch(event="provider.networking.floating_ips.create",
  362. 1668 priority=BaseFloatingIPService.STANDARD_EVENT_PRIORITY)
  363. 1669 @profile
  364. 1670 def create(self, gateway):
  365. 1671 2 6.0 3.0 0.0 region_name = self.provider.region_name
  366. 1672 2 84.0 42.0 0.0 ip_name = 'ip-{0}'.format(uuid.uuid4())
  367. 1673 2 9381.0 4690.5 0.1 response = (self.provider
  368. 1674 .gcp_compute
  369. 1675 .addresses()
  370. 1676 2 6.0 3.0 0.0 .insert(project=self.provider.project_name,
  371. 1677 2 2.0 1.0 0.0 region=region_name,
  372. 1678 2 1808463.0 904231.5 24.7 body={'name': ip_name})
  373. 1679 .execute())
  374. 1680 2 4779544.0 2389772.0 65.2 self.provider.wait_for_operation(response, region=region_name)
  375. 1681 2 736407.0 368203.5 10.0 return self.get(gateway, ip_name)
  376. Total time: 5.11899 s
  377. Function: get at line 786
  378. Line # Hits Time Per Hit % Time Line Contents
  379. ==============================================================
  380. 786 @dispatch(event="provider.networking.networks.get",
  381. 787 priority=BaseNetworkService.STANDARD_EVENT_PRIORITY)
  382. 788 @profile
  383. 789 def get(self, network_id):
  384. 790 18 5118527.0 284362.6 100.0 network = self.provider.get_resource('networks', network_id)
  385. 791 18 463.0 25.7 0.0 return GCPNetwork(self.provider, network) if network else None
  386. Total time: 4.15656 s
  387. Function: list at line 1003
  388. Line # Hits Time Per Hit % Time Line Contents
  389. ==============================================================
  390. 1003 @dispatch(event="provider.networking.subnets.list",
  391. 1004 priority=BaseSubnetService.STANDARD_EVENT_PRIORITY)
  392. 1005 @profile
  393. 1006 def list(self, network=None, zone=None, limit=None, marker=None):
  394. 1007 """
  395. 1008 If the zone is not given, we list all subnets in the default region.
  396. 1009 """
  397. 1010 17 28.0 1.6 0.0 filter = None
  398. 1011 17 20.0 1.2 0.0 if network is not None:
  399. 1012 6 11.0 1.8 0.0 network = (network if isinstance(network, GCPNetwork)
  400. 1013 else self.provider.networking.networks.get(network))
  401. 1014 6 32.0 5.3 0.0 filter = 'network eq %s' % network.resource_url
  402. 1015 17 17.0 1.0 0.0 if zone:
  403. 1016 region_name = self._zone_to_region(zone)
  404. 1017 else:
  405. 1018 17 41.0 2.4 0.0 region_name = self.provider.region_name
  406. 1019 17 14.0 0.8 0.0 subnets = []
  407. 1020 17 160142.0 9420.1 3.9 response = (self.provider
  408. 1021 .gcp_compute
  409. 1022 .subnetworks()
  410. 1023 17 53.0 3.1 0.0 .list(project=self.provider.project_name,
  411. 1024 17 13.0 0.8 0.0 region=region_name,
  412. 1025 17 3994482.0 234969.5 96.1 filter=filter)
  413. 1026 .execute())
  414. 1027 104 169.0 1.6 0.0 for subnet in response.get('items', []):
  415. 1028 87 684.0 7.9 0.0 subnets.append(GCPSubnet(self.provider, subnet))
  416. 1029 17 39.0 2.3 0.0 return ClientPagedResultList(self.provider, subnets,
  417. 1030 17 819.0 48.2 0.0 limit=limit, marker=marker)
  418. Total time: 3.60639 s
  419. Function: get at line 996
  420. Line # Hits Time Per Hit % Time Line Contents
  421. ==============================================================
  422. 996 @dispatch(event="provider.networking.subnets.get",
  423. 997 priority=BaseSubnetService.STANDARD_EVENT_PRIORITY)
  424. 998 @profile
  425. 999 def get(self, subnet_id):
  426. 1000 9 3606281.0 400697.9 100.0 subnet = self.provider.get_resource('subnetworks', subnet_id)
  427. 1001 9 113.0 12.6 0.0 return GCPSubnet(self.provider, subnet) if subnet else None
  428. Total time: 2.69905 s
  429. Function: find at line 375
  430. Line # Hits Time Per Hit % Time Line Contents
  431. ==============================================================
  432. 375 @dispatch(event="provider.networking.floating_ips.find",
  433. 376 priority=BaseCloudService.STANDARD_EVENT_PRIORITY)
  434. 377 @profile
  435. 378 def find(self, gateway, **kwargs):
  436. 379 3 9.0 3.0 0.0 obj_list = gateway.floating_ips
  437. 380 3 3.0 1.0 0.0 filters = ['name', 'public_ip']
  438. 381 3 2698959.0 899653.0 100.0 matches = cb_helpers.generic_find(filters, kwargs, obj_list)
  439. 382 2 76.0 38.0 0.0 return ClientPagedResultList(self._provider, list(matches))
  440. Total time: 2.2592 s
  441. Function: get at line 1637
  442. Line # Hits Time Per Hit % Time Line Contents
  443. ==============================================================
  444. 1637 @dispatch(event="provider.networking.floating_ips.get",
  445. 1638 priority=BaseFloatingIPService.STANDARD_EVENT_PRIORITY)
  446. 1639 @profile
  447. 1640 def get(self, gateway, floating_ip_id):
  448. 1641 6 2259067.0 376511.2 100.0 fip = self.provider.get_resource('addresses', floating_ip_id)
  449. 1642 return (GCPFloatingIP(self.provider, fip)
  450. 1643 6 135.0 22.5 0.0 if fip else None)
  451. Total time: 2.17036 s
  452. Function: list at line 807
  453. Line # Hits Time Per Hit % Time Line Contents
  454. ==============================================================
  455. 807 @dispatch(event="provider.networking.networks.list",
  456. 808 priority=BaseNetworkService.STANDARD_EVENT_PRIORITY)
  457. 809 @profile
  458. 810 def list(self, limit=None, marker=None, filter=None):
  459. 811 # TODO: Decide whether we keep filter in 'list'
  460. 812 8 11.0 1.4 0.0 networks = []
  461. 813 8 44096.0 5512.0 2.0 response = (self.provider
  462. 814 .gcp_compute
  463. 815 .networks()
  464. 816 8 25.0 3.1 0.0 .list(project=self.provider.project_name,
  465. 817 8 2124440.0 265555.0 97.9 filter=filter)
  466. 818 .execute())
  467. 819 86 117.0 1.4 0.0 for network in response.get('items', []):
  468. 820 78 1260.0 16.2 0.1 networks.append(GCPNetwork(self.provider, network))
  469. 821 8 16.0 2.0 0.0 return ClientPagedResultList(self.provider, networks,
  470. 822 8 399.0 49.9 0.0 limit=limit, marker=marker)
  471. Total time: 1.97249 s
  472. Function: get at line 382
  473. Line # Hits Time Per Hit % Time Line Contents
  474. ==============================================================
  475. 382 @dispatch(event="provider.compute.regions.get",
  476. 383 priority=BaseRegionService.STANDARD_EVENT_PRIORITY)
  477. 384 @profile
  478. 385 def get(self, region_id):
  479. 386 3 8.0 2.7 0.0 region = self.provider.get_resource('regions', region_id,
  480. 387 3 1972413.0 657471.0 100.0 region=region_id)
  481. 388 3 73.0 24.3 0.0 return GCPRegion(self.provider, region) if region else None
  482. Total time: 1.71609 s
  483. Function: refresh at line 1603
  484. Line # Hits Time Per Hit % Time Line Contents
  485. ==============================================================
  486. 1603 @profile
  487. 1604 def refresh(self):
  488. 1605 4 1716073.0 429018.2 100.0 subnet = self._provider.networking.subnets.get(self.id)
  489. 1606 4 4.0 1.0 0.0 if subnet:
  490. 1607 # pylint:disable=protected-access
  491. 1608 1 4.0 4.0 0.0 self._subnet = subnet._subnet
  492. 1609 else:
  493. 1610 # subnet no longer exists
  494. 1611 3 8.0 2.7 0.0 self._subnet['status'] = SubnetState.UNKNOWN
  495. Total time: 1.3876 s
  496. Function: get at line 893
  497. Line # Hits Time Per Hit % Time Line Contents
  498. ==============================================================
  499. 893 @dispatch(event="provider.networking.routers.get",
  500. 894 priority=BaseRouterService.STANDARD_EVENT_PRIORITY)
  501. 895 @profile
  502. 896 def get(self, router_id):
  503. 897 4 8.0 2.0 0.0 router = self.provider.get_resource(
  504. 898 4 1387531.0 346882.8 100.0 'routers', router_id, region=self.provider.region_name)
  505. 899 4 63.0 15.8 0.0 return GCPRouter(self.provider, router) if router else None
  506. Total time: 1.36571 s
  507. Function: list at line 911
  508. Line # Hits Time Per Hit % Time Line Contents
  509. ==============================================================
  510. 911 @dispatch(event="provider.networking.routers.list",
  511. 912 priority=BaseRouterService.STANDARD_EVENT_PRIORITY)
  512. 913 @profile
  513. 914 def list(self, limit=None, marker=None):
  514. 915 6 21.0 3.5 0.0 region = self.provider.region_name
  515. 916 6 8.0 1.3 0.0 max_result = limit if limit is not None and limit < 500 else 500
  516. 917 6 48768.0 8128.0 3.6 response = (self.provider
  517. 918 .gcp_compute
  518. 919 .routers()
  519. 920 6 17.0 2.8 0.0 .list(project=self.provider.project_name,
  520. 921 6 4.0 0.7 0.0 region=region,
  521. 922 6 4.0 0.7 0.0 maxResults=max_result,
  522. 923 6 1316670.0 219445.0 96.4 pageToken=marker)
  523. 924 .execute())
  524. 925 6 18.0 3.0 0.0 routers = []
  525. 926 11 20.0 1.8 0.0 for router in response.get('items', []):
  526. 927 5 88.0 17.6 0.0 routers.append(GCPRouter(self.provider, router))
  527. 928 6 10.0 1.7 0.0 if len(routers) > max_result:
  528. 929 log.warning('Expected at most %d results; go %d',
  529. 930 max_result, len(routers))
  530. 931 6 10.0 1.7 0.0 return ServerPagedResultList('nextPageToken' in response,
  531. 932 6 10.0 1.7 0.0 response.get('nextPageToken'),
  532. 933 6 64.0 10.7 0.0 False, data=routers)
  533. Total time: 1.34887 s
  534. Function: refresh at line 1340
  535. Line # Hits Time Per Hit % Time Line Contents
  536. ==============================================================
  537. 1340 @profile
  538. 1341 def refresh(self):
  539. 1342 5 1348850.0 269770.0 100.0 net = self._provider.networking.networks.get(self.id)
  540. 1343 5 5.0 1.0 0.0 if net:
  541. 1344 # pylint:disable=protected-access
  542. 1345 1 3.0 3.0 0.0 self._network = net._network
  543. 1346 else:
  544. 1347 # network no longer exists
  545. 1348 4 12.0 3.0 0.0 self._network['status'] = NetworkState.UNKNOWN
  546. Total time: 1.33483 s
  547. Function: find at line 901
  548. Line # Hits Time Per Hit % Time Line Contents
  549. ==============================================================
  550. 901 @dispatch(event="provider.networking.routers.find",
  551. 902 priority=BaseRouterService.STANDARD_EVENT_PRIORITY)
  552. 903 @profile
  553. 904 def find(self, limit=None, marker=None, **kwargs):
  554. 905 3 7.0 2.3 0.0 obj_list = self
  555. 906 3 4.0 1.3 0.0 filters = ['name', 'label']
  556. 907 3 1334720.0 444906.7 100.0 matches = cb_helpers.generic_find(filters, kwargs, obj_list)
  557. 908 2 9.0 4.5 0.0 return ClientPagedResultList(self._provider, list(matches),
  558. 909 2 91.0 45.5 0.0 limit=limit, marker=marker)
  559. Total time: 0.267038 s
  560. Function: refresh at line 1457
  561. Line # Hits Time Per Hit % Time Line Contents
  562. ==============================================================
  563. 1457 @profile
  564. 1458 def refresh(self):
  565. 1459 1 267033.0 267033.0 100.0 router = self._provider.networking.routers.get(self.id)
  566. 1460 1 2.0 2.0 0.0 if router:
  567. 1461 # pylint:disable=protected-access
  568. 1462 1 3.0 3.0 0.0 self._router = router._router
  569. 1463 else:
  570. 1464 # router no longer exists
  571. 1465 self._router['status'] = RouterState.UNKNOWN
  572. Total time: 5e-06 s
  573. Function: get_or_create at line 1610
  574. Line # Hits Time Per Hit % Time Line Contents
  575. ==============================================================
  576. 1610 @dispatch(event="provider.networking.gateways.get_or_create",
  577. 1611 priority=BaseGatewayService.STANDARD_EVENT_PRIORITY)
  578. 1612 @profile
  579. 1613 def get_or_create(self, network):
  580. 1614 3 5.0 1.7 100.0 return self._default_internet_gateway