almahmoud 7 лет назад
Родитель
Сommit
bfa6c2ec9f

+ 0 - 0
test/test_base_helpers.py → cloudbridge/test/test_base_helpers.py


+ 0 - 0
test/test_middleware_system.py → cloudbridge/test/test_middleware_system.py


+ 0 - 728
metaresults/filtered.txt

@@ -1,728 +0,0 @@
-Test suite: results/object_life_cycle.res
-Total time: 31.2022 s
-Function: create_empty_disk at line 507
-
-Line #      Hits         Time  Per Hit   % Time  Line Contents
-==============================================================
-   507                                               @profile
-   508                                               def create_empty_disk(self, disk_name, params):
-   509         1       7886.0   7886.0      0.0          return self.compute_client.disks.create_or_update(
-   510         1         15.0     15.0      0.0              self.resource_group,
-   511         1          1.0      1.0      0.0              disk_name,
-   512         1   31194332.0 31194332.0    100.0              params
-   513                                                   ).result()
-
-Test suite: results/object_life_cycle.res
-Total time: 30.591 s
-Function: delete_disk at line 535
-
-Line #      Hits         Time  Per Hit   % Time  Line Contents
-==============================================================
-   535                                               @profile
-   536                                               def delete_disk(self, disk_id):
-   537         1          3.0      3.0      0.0          url_params = azure_helpers.parse_url(VOLUME_RESOURCE_ID,
-   538         1         27.0     27.0      0.0                                               disk_id)
-   539         1          1.0      1.0      0.0          disk_name = url_params.get(VOLUME_NAME)
-   540         1   30590981.0 30590981.0    100.0          self.compute_client.disks.delete(self.resource_group, disk_name).wait()
-
-Test suite: results/block_store.res
-Total time: 154.785 s
-Function: create_empty_disk at line 507
-
-Line #      Hits         Time  Per Hit   % Time  Line Contents
-==============================================================
-   507                                               @profile
-   508                                               def create_empty_disk(self, disk_name, params):
-   509         5      22114.0   4422.8      0.0          return self.compute_client.disks.create_or_update(
-   510         5         42.0      8.4      0.0              self.resource_group,
-   511         5          4.0      0.8      0.0              disk_name,
-   512         5  154763184.0 30952636.8    100.0              params
-   513                                                   ).result()
-
-Test suite: results/block_store.res
-Total time: 61.8265 s
-Function: create_snapshot_disk at line 515
-
-Line #      Hits         Time  Per Hit   % Time  Line Contents
-==============================================================
-   515                                               @profile
-   516                                               def create_snapshot_disk(self, disk_name, params):
-   517         2        937.0    468.5      0.0          return self.compute_client.disks.create_or_update(
-   518         2         16.0      8.0      0.0              self.resource_group,
-   519         2          0.0      0.0      0.0              disk_name,
-   520         2   61825555.0 30912777.5    100.0              params
-   521                                                   ).result()
-
-Test suite: results/block_store.res
-Total time: 275.18 s
-Function: delete_disk at line 535
-
-Line #      Hits         Time  Per Hit   % Time  Line Contents
-==============================================================
-   535                                               @profile
-   536                                               def delete_disk(self, disk_id):
-   537         9         33.0      3.7      0.0          url_params = azure_helpers.parse_url(VOLUME_RESOURCE_ID,
-   538         9        272.0     30.2      0.0                                               disk_id)
-   539         9         11.0      1.2      0.0          disk_name = url_params.get(VOLUME_NAME)
-   540         9  275180033.0 30575559.2    100.0          self.compute_client.disks.delete(self.resource_group, disk_name).wait()
-
-Test suite: results/block_store.res
-Total time: 93.2656 s
-Function: create_snapshot at line 567
-
-Line #      Hits         Time  Per Hit   % Time  Line Contents
-==============================================================
-   567                                               @profile
-   568                                               def create_snapshot(self, snapshot_name, params):
-   569         3       1486.0    495.3      0.0          return self.compute_client.snapshots.create_or_update(
-   570         3         25.0      8.3      0.0              self.resource_group,
-   571         3          1.0      0.3      0.0              snapshot_name,
-   572         3   93264095.0 31088031.7    100.0              params
-   573                                                   ).result()
-
-Test suite: results/block_store.res
-Total time: 91.916 s
-Function: delete_snapshot at line 575
-
-Line #      Hits         Time  Per Hit   % Time  Line Contents
-==============================================================
-   575                                               @profile
-   576                                               def delete_snapshot(self, snapshot_id):
-   577         3         11.0      3.7      0.0          url_params = azure_helpers.parse_url(SNAPSHOT_RESOURCE_ID,
-   578         3         99.0     33.0      0.0                                               snapshot_id)
-   579         3          6.0      2.0      0.0          snapshot_name = url_params.get(SNAPSHOT_NAME)
-   580         3       1506.0    502.0      0.0          self.compute_client.snapshots.delete(self.resource_group,
-   581         3   91914390.0 30638130.0    100.0                                               snapshot_name).wait()
-
-Test suite: results/block_store.res
-Total time: 81.5978 s
-Function: delete_vm at line 816
-
-Line #      Hits         Time  Per Hit   % Time  Line Contents
-==============================================================
-   816                                               @profile
-   817                                               def delete_vm(self, vm_id):
-   818         2          6.0      3.0      0.0          url_params = azure_helpers.parse_url(VM_RESOURCE_ID,
-   819         2         56.0     28.0      0.0                                               vm_id)
-   820         2          3.0      1.5      0.0          vm_name = url_params.get(VM_NAME)
-   821         2        930.0    465.0      0.0          return self.compute_client.virtual_machines.delete(
-   822         2   81596835.0 40798417.5    100.0              self.resource_group, vm_name).wait()
-
-Test suite: results/block_store.res
-Total time: 252.683 s
-Function: create_vm at line 835
-
-Line #      Hits         Time  Per Hit   % Time  Line Contents
-==============================================================
-   835                                               @profile
-   836                                               def create_vm(self, vm_name, params):
-   837         2      15216.0   7608.0      0.0          return self.compute_client.virtual_machines. \
-   838         2         16.0      8.0      0.0              create_or_update(self.resource_group,
-   839         2  252667585.0 126333792.5    100.0                               vm_name, params).result()
-
-Test suite: results/block_store.res
-Total time: 215.106 s
-Function: deallocate_vm at line 850
-
-Line #      Hits         Time  Per Hit   % Time  Line Contents
-==============================================================
-   850                                               @profile
-   851                                               def deallocate_vm(self, vm_id):
-   852         2          6.0      3.0      0.0          url_params = azure_helpers.parse_url(VM_RESOURCE_ID,
-   853         2         59.0     29.5      0.0                                               vm_id)
-   854         2          2.0      1.0      0.0          vm_name = url_params.get(VM_NAME)
-   855         2       1006.0    503.0      0.0          self.compute_client. \
-   856         2         33.0     16.5      0.0              virtual_machines.deallocate(self.resource_group,
-   857         2  215104764.0 107552382.0    100.0                                          vm_name).wait()
-
-Test suite: results/block_store.res
-Total time: 21.1995 s
-Function: delete_nic at line 885
-
-Line #      Hits         Time  Per Hit   % Time  Line Contents
-==============================================================
-   885                                               @profile
-   886                                               def delete_nic(self, nic_id):
-   887         2          5.0      2.5      0.0          nic_params = azure_helpers.\
-   888         2         53.0     26.5      0.0              parse_url(NETWORK_INTERFACE_RESOURCE_ID, nic_id)
-   889         2          3.0      1.5      0.0          nic_name = nic_params.get(NETWORK_INTERFACE_NAME)
-   890         2       1409.0    704.5      0.0          self.network_management_client. \
-   891         2         16.0      8.0      0.0              network_interfaces.delete(self.resource_group,
-   892         2   21198019.0 10599009.5    100.0                                        nic_name).wait()
-
-Test suite: results/block_store.res
-Total time: 62.265 s
-Function: create_nic at line 916
-
-Line #      Hits         Time  Per Hit   % Time  Line Contents
-==============================================================
-   916                                               @profile
-   917                                               def create_nic(self, nic_name, params):
-   918         2       1463.0    731.5      0.0          return self.network_management_client. \
-   919                                                       network_interfaces.create_or_update(
-   920         2         16.0      8.0      0.0                  self.resource_group,
-   921         2          2.0      1.0      0.0                  nic_name,
-   922         2   62263484.0 31131742.0    100.0                  params
-   923                                                       ).result()
-
-Test suite: results/compute.res
-Total time: 22.4962 s
-Function: create_vm_firewall at line 387
-
-Line #      Hits         Time  Per Hit   % Time  Line Contents
-==============================================================
-   387                                               @profile
-   388                                               def create_vm_firewall(self, name, parameters):
-   389         2       1602.0    801.0      0.0          return self.network_management_client.network_security_groups. \
-   390         2         23.0     11.5      0.0              create_or_update(self.resource_group, name,
-   391         2   22494593.0 11247296.5    100.0                               parameters).result()
-
-Test suite: results/compute.res
-Total time: 21.5193 s
-Function: delete_vm_firewall at line 411
-
-Line #      Hits         Time  Per Hit   % Time  Line Contents
-==============================================================
-   411                                               @profile
-   412                                               def delete_vm_firewall(self, fw_id):
-   413         2          8.0      4.0      0.0          url_params = azure_helpers.parse_url(VM_FIREWALL_RESOURCE_ID,
-   414         2         72.0     36.0      0.0                                               fw_id)
-   415         2          2.0      1.0      0.0          name = url_params.get(VM_FIREWALL_NAME)
-   416         2       2120.0   1060.0      0.0          self.network_management_client \
-   417         2   21517148.0 10758574.0    100.0              .network_security_groups.delete(self.resource_group, name).wait()
-
-Test suite: results/compute.res
-Total time: 154.991 s
-Function: create_vm_firewall_rule at line 419
-
-Line #      Hits         Time  Per Hit   % Time  Line Contents
-==============================================================
-   419                                               @profile
-   420                                               def create_vm_firewall_rule(self, fw_id,
-   421                                                                           rule_name, parameters):
-   422        14         35.0      2.5      0.0          url_params = azure_helpers.parse_url(VM_FIREWALL_RESOURCE_ID,
-   423        14        396.0     28.3      0.0                                               fw_id)
-   424        14         22.0      1.6      0.0          vm_firewall_name = url_params.get(VM_FIREWALL_NAME)
-   425        14      10489.0    749.2      0.0          return self.network_management_client.security_rules. \
-   426        14        128.0      9.1      0.0              create_or_update(self.resource_group, vm_firewall_name,
-   427        14  154979521.0 11069965.8    100.0                               rule_name, parameters).result()
-
-Test suite: results/compute.res
-Total time: 30.9193 s
-Function: create_empty_disk at line 507
-
-Line #      Hits         Time  Per Hit   % Time  Line Contents
-==============================================================
-   507                                               @profile
-   508                                               def create_empty_disk(self, disk_name, params):
-   509         1       7639.0   7639.0      0.0          return self.compute_client.disks.create_or_update(
-   510         1         18.0     18.0      0.0              self.resource_group,
-   511         1          0.0      0.0      0.0              disk_name,
-   512         1   30911676.0 30911676.0    100.0              params
-   513                                                   ).result()
-
-Test suite: results/compute.res
-Total time: 30.8045 s
-Function: create_snapshot_disk at line 515
-
-Line #      Hits         Time  Per Hit   % Time  Line Contents
-==============================================================
-   515                                               @profile
-   516                                               def create_snapshot_disk(self, disk_name, params):
-   517         1        405.0    405.0      0.0          return self.compute_client.disks.create_or_update(
-   518         1          7.0      7.0      0.0              self.resource_group,
-   519         1          0.0      0.0      0.0              disk_name,
-   520         1   30804040.0 30804040.0    100.0              params
-   521                                                   ).result()
-
-Test suite: results/compute.res
-Total time: 214.353 s
-Function: delete_disk at line 535
-
-Line #      Hits         Time  Per Hit   % Time  Line Contents
-==============================================================
-   535                                               @profile
-   536                                               def delete_disk(self, disk_id):
-   537         8         25.0      3.1      0.0          url_params = azure_helpers.parse_url(VOLUME_RESOURCE_ID,
-   538         8        257.0     32.1      0.0                                               disk_id)
-   539         8         12.0      1.5      0.0          disk_name = url_params.get(VOLUME_NAME)
-   540         8  214352959.0 26794119.9    100.0          self.compute_client.disks.delete(self.resource_group, disk_name).wait()
-
-Test suite: results/compute.res
-Total time: 31.0976 s
-Function: create_snapshot at line 567
-
-Line #      Hits         Time  Per Hit   % Time  Line Contents
-==============================================================
-   567                                               @profile
-   568                                               def create_snapshot(self, snapshot_name, params):
-   569         1        451.0    451.0      0.0          return self.compute_client.snapshots.create_or_update(
-   570         1          9.0      9.0      0.0              self.resource_group,
-   571         1          1.0      1.0      0.0              snapshot_name,
-   572         1   31097107.0 31097107.0    100.0              params
-   573                                                   ).result()
-
-Test suite: results/compute.res
-Total time: 30.6236 s
-Function: delete_snapshot at line 575
-
-Line #      Hits         Time  Per Hit   % Time  Line Contents
-==============================================================
-   575                                               @profile
-   576                                               def delete_snapshot(self, snapshot_id):
-   577         1          4.0      4.0      0.0          url_params = azure_helpers.parse_url(SNAPSHOT_RESOURCE_ID,
-   578         1         29.0     29.0      0.0                                               snapshot_id)
-   579         1          1.0      1.0      0.0          snapshot_name = url_params.get(SNAPSHOT_NAME)
-   580         1        457.0    457.0      0.0          self.compute_client.snapshots.delete(self.resource_group,
-   581         1   30623148.0 30623148.0    100.0                                               snapshot_name).wait()
-
-Test suite: results/compute.res
-Total time: 31.0639 s
-Function: update_network_tags at line 686
-
-Line #      Hits         Time  Per Hit   % Time  Line Contents
-==============================================================
-   686                                               @profile
-   687                                               def update_network_tags(self, network_id, tags):
-   688         1         24.0     24.0      0.0          url_params = azure_helpers.parse_url(NETWORK_RESOURCE_ID, network_id)
-   689         1          1.0      1.0      0.0          network_name = url_params.get(NETWORK_NAME)
-   690         1        683.0    683.0      0.0          return self.network_management_client.virtual_networks. \
-   691         1          7.0      7.0      0.0              create_or_update(self.resource_group,
-   692         1   31063174.0 31063174.0    100.0                               network_name, tags).result()
-
-Test suite: results/compute.res
-Total time: 30.4549 s
-Function: restart_vm at line 808
-
-Line #      Hits         Time  Per Hit   % Time  Line Contents
-==============================================================
-   808                                               @profile
-   809                                               def restart_vm(self, vm_id):
-   810         1          2.0      2.0      0.0          url_params = azure_helpers.parse_url(VM_RESOURCE_ID,
-   811         1         23.0     23.0      0.0                                               vm_id)
-   812         1          1.0      1.0      0.0          vm_name = url_params.get(VM_NAME)
-   813         1        412.0    412.0      0.0          return self.compute_client.virtual_machines.restart(
-   814         1   30454435.0 30454435.0    100.0              self.resource_group, vm_name).wait()
-
-Test suite: results/compute.res
-Total time: 133.21 s
-Function: delete_vm at line 816
-
-Line #      Hits         Time  Per Hit   % Time  Line Contents
-==============================================================
-   816                                               @profile
-   817                                               def delete_vm(self, vm_id):
-   818         4         10.0      2.5      0.0          url_params = azure_helpers.parse_url(VM_RESOURCE_ID,
-   819         4        216.0     54.0      0.0                                               vm_id)
-   820         4          8.0      2.0      0.0          vm_name = url_params.get(VM_NAME)
-   821         4       2221.0    555.2      0.0          return self.compute_client.virtual_machines.delete(
-   822         4  133207787.0 33301946.8    100.0              self.resource_group, vm_name).wait()
-
-Test suite: results/compute.res
-Total time: 74.9466 s
-Function: get_vm at line 824
-
-Line #      Hits         Time  Per Hit   % Time  Line Contents
-==============================================================
-   824                                               @profile
-   825                                               def get_vm(self, vm_id):
-   826        22         79.0      3.6      0.0          url_params = azure_helpers.parse_url(VM_RESOURCE_ID,
-   827        22        799.0     36.3      0.0                                               vm_id)
-   828        22         41.0      1.9      0.0          vm_name = url_params.get(VM_NAME)
-   829        22      12404.0    563.8      0.0          return self.compute_client.virtual_machines.get(
-   830        22        226.0     10.3      0.0              self.resource_group,
-   831        22         15.0      0.7      0.0              vm_name,
-   832        22   74933044.0 3406047.5    100.0              expand='instanceView'
-   833                                                   )
-
-Test suite: results/compute.res
-Total time: 515.531 s
-Function: create_vm at line 835
-
-Line #      Hits         Time  Per Hit   % Time  Line Contents
-==============================================================
-   835                                               @profile
-   836                                               def create_vm(self, vm_name, params):
-   837         4      23151.0   5787.8      0.0          return self.compute_client.virtual_machines. \
-   838         4         39.0      9.8      0.0              create_or_update(self.resource_group,
-   839         4  515507537.0 128876884.2    100.0                               vm_name, params).result()
-
-Test suite: results/compute.res
-Total time: 284.987 s
-Function: deallocate_vm at line 850
-
-Line #      Hits         Time  Per Hit   % Time  Line Contents
-==============================================================
-   850                                               @profile
-   851                                               def deallocate_vm(self, vm_id):
-   852         4         12.0      3.0      0.0          url_params = azure_helpers.parse_url(VM_RESOURCE_ID,
-   853         4        117.0     29.2      0.0                                               vm_id)
-   854         4          7.0      1.8      0.0          vm_name = url_params.get(VM_NAME)
-   855         4       1979.0    494.8      0.0          self.compute_client. \
-   856         4         37.0      9.2      0.0              virtual_machines.deallocate(self.resource_group,
-   857         4  284985322.0 71246330.5    100.0                                          vm_name).wait()
-
-Test suite: results/compute.res
-Total time: 93.3852 s
-Function: update_vm_tags at line 876
-
-Line #      Hits         Time  Per Hit   % Time  Line Contents
-==============================================================
-   876                                               @profile
-   877                                               def update_vm_tags(self, vm_id, tags):
-   878         3          8.0      2.7      0.0          url_params = azure_helpers.parse_url(VM_RESOURCE_ID,
-   879         3         77.0     25.7      0.0                                               vm_id)
-   880         3          4.0      1.3      0.0          vm_name = url_params.get(VM_NAME)
-   881         3       1314.0    438.0      0.0          self.compute_client.virtual_machines. \
-   882         3         30.0     10.0      0.0              create_or_update(self.resource_group,
-   883         3   93383730.0 31127910.0    100.0                               vm_name, tags).result()
-
-Test suite: results/compute.res
-Total time: 42.7808 s
-Function: delete_nic at line 885
-
-Line #      Hits         Time  Per Hit   % Time  Line Contents
-==============================================================
-   885                                               @profile
-   886                                               def delete_nic(self, nic_id):
-   887         4          8.0      2.0      0.0          nic_params = azure_helpers.\
-   888         4         97.0     24.2      0.0              parse_url(NETWORK_INTERFACE_RESOURCE_ID, nic_id)
-   889         4          5.0      1.2      0.0          nic_name = nic_params.get(NETWORK_INTERFACE_NAME)
-   890         4       2754.0    688.5      0.0          self.network_management_client. \
-   891         4         30.0      7.5      0.0              network_interfaces.delete(self.resource_group,
-   892         4   42777872.0 10694468.0    100.0                                        nic_name).wait()
-
-Test suite: results/compute.res
-Total time: 115.781 s
-Function: update_nic at line 902
-
-Line #      Hits         Time  Per Hit   % Time  Line Contents
-==============================================================
-   902                                               @profile
-   903                                               def update_nic(self, nic_id, params):
-   904         4          8.0      2.0      0.0          nic_params = azure_helpers.\
-   905         4        100.0     25.0      0.0              parse_url(NETWORK_INTERFACE_RESOURCE_ID, nic_id)
-   906         4          5.0      1.2      0.0          nic_name = nic_params.get(NETWORK_INTERFACE_NAME)
-   907         4       3058.0    764.5      0.0          async_nic_creation = self.network_management_client. \
-   908                                                       network_interfaces.create_or_update(
-   909         4         39.0      9.8      0.0                  self.resource_group,
-   910         4          2.0      0.5      0.0                  nic_name,
-   911         4    1249938.0 312484.5      1.1                  params
-   912                                                       )
-   913         4  114528003.0 28632000.8     98.9          nic_info = async_nic_creation.result()
-   914         4          8.0      2.0      0.0          return nic_info
-
-Test suite: results/compute.res
-Total time: 125.141 s
-Function: create_nic at line 916
-
-Line #      Hits         Time  Per Hit   % Time  Line Contents
-==============================================================
-   916                                               @profile
-   917                                               def create_nic(self, nic_name, params):
-   918         4       3231.0    807.8      0.0          return self.network_management_client. \
-   919                                                       network_interfaces.create_or_update(
-   920         4         44.0     11.0      0.0                  self.resource_group,
-   921         4          3.0      0.8      0.0                  nic_name,
-   922         4  125137817.0 31284454.2    100.0                  params
-   923                                                       ).result()
-
-Test suite: results/image.res
-Total time: 61.3306 s
-Function: delete_disk at line 535
-
-Line #      Hits         Time  Per Hit   % Time  Line Contents
-==============================================================
-   535                                               @profile
-   536                                               def delete_disk(self, disk_id):
-   537         2          6.0      3.0      0.0          url_params = azure_helpers.parse_url(VOLUME_RESOURCE_ID,
-   538         2         61.0     30.5      0.0                                               disk_id)
-   539         2          3.0      1.5      0.0          disk_name = url_params.get(VOLUME_NAME)
-   540         2   61330574.0 30665287.0    100.0          self.compute_client.disks.delete(self.resource_group, disk_name).wait()
-
-Test suite: results/image.res
-Total time: 31.1668 s
-Function: create_image at line 602
-
-Line #      Hits         Time  Per Hit   % Time  Line Contents
-==============================================================
-   602                                               @profile
-   603                                               def create_image(self, name, params):
-   604         1        512.0    512.0      0.0          return self.compute_client.images. \
-   605         1          9.0      9.0      0.0              create_or_update(self.resource_group, name,
-   606         1   31166320.0 31166320.0    100.0                               params).result()
-
-Test suite: results/image.res
-Total time: 30.729 s
-Function: delete_image at line 608
-
-Line #      Hits         Time  Per Hit   % Time  Line Contents
-==============================================================
-   608                                               @profile
-   609                                               def delete_image(self, image_id):
-   610         1          3.0      3.0      0.0          url_params = azure_helpers.parse_url(IMAGE_RESOURCE_ID,
-   611         1         28.0     28.0      0.0                                               image_id)
-   612         1         28.0     28.0      0.0          if not self.is_gallery_image(image_id):
-   613         1          1.0      1.0      0.0              name = url_params.get(IMAGE_NAME)
-   614         1   30728980.0 30728980.0    100.0              self.compute_client.images.delete(self.resource_group, name).wait()
-
-Test suite: results/image.res
-Total time: 92.9118 s
-Function: update_image_tags at line 639
-
-Line #      Hits         Time  Per Hit   % Time  Line Contents
-==============================================================
-   639                                               @profile
-   640                                               def update_image_tags(self, image_id, tags):
-   641         3          7.0      2.3      0.0          url_params = azure_helpers.parse_url(IMAGE_RESOURCE_ID,
-   642         3         80.0     26.7      0.0                                               image_id)
-   643         3         83.0     27.7      0.0          if self.is_gallery_image(image_id):
-   644                                                       return True
-   645                                                   else:
-   646         3          3.0      1.0      0.0              name = url_params.get(IMAGE_NAME)
-   647         3       1395.0    465.0      0.0              return self.compute_client.images. \
-   648         3         23.0      7.7      0.0                  create_or_update(self.resource_group, name,
-   649                                                                            {
-   650         3          2.0      0.7      0.0                                       'tags': tags,
-   651         3   92910234.0 30970078.0    100.0                                       'location': self.region_name
-   652                                                                            }).result()
-
-Test suite: results/image.res
-Total time: 81.5368 s
-Function: delete_vm at line 816
-
-Line #      Hits         Time  Per Hit   % Time  Line Contents
-==============================================================
-   816                                               @profile
-   817                                               def delete_vm(self, vm_id):
-   818         2          6.0      3.0      0.0          url_params = azure_helpers.parse_url(VM_RESOURCE_ID,
-   819         2         57.0     28.5      0.0                                               vm_id)
-   820         2          2.0      1.0      0.0          vm_name = url_params.get(VM_NAME)
-   821         2        929.0    464.5      0.0          return self.compute_client.virtual_machines.delete(
-   822         2   81535764.0 40767882.0    100.0              self.resource_group, vm_name).wait()
-
-Test suite: results/image.res
-Total time: 220.739 s
-Function: create_vm at line 835
-
-Line #      Hits         Time  Per Hit   % Time  Line Contents
-==============================================================
-   835                                               @profile
-   836                                               def create_vm(self, vm_name, params):
-   837         2       7168.0   3584.0      0.0          return self.compute_client.virtual_machines. \
-   838         2         16.0      8.0      0.0              create_or_update(self.resource_group,
-   839         2  220731539.0 110365769.5    100.0                               vm_name, params).result()
-
-Test suite: results/image.res
-Total time: 135.517 s
-Function: deallocate_vm at line 850
-
-Line #      Hits         Time  Per Hit   % Time  Line Contents
-==============================================================
-   850                                               @profile
-   851                                               def deallocate_vm(self, vm_id):
-   852         3          7.0      2.3      0.0          url_params = azure_helpers.parse_url(VM_RESOURCE_ID,
-   853         3         73.0     24.3      0.0                                               vm_id)
-   854         3          4.0      1.3      0.0          vm_name = url_params.get(VM_NAME)
-   855         3       1297.0    432.3      0.0          self.compute_client. \
-   856         3         21.0      7.0      0.0              virtual_machines.deallocate(self.resource_group,
-   857         3  135515592.0 45171864.0    100.0                                          vm_name).wait()
-
-Test suite: results/image.res
-Total time: 21.3373 s
-Function: delete_nic at line 885
-
-Line #      Hits         Time  Per Hit   % Time  Line Contents
-==============================================================
-   885                                               @profile
-   886                                               def delete_nic(self, nic_id):
-   887         2          6.0      3.0      0.0          nic_params = azure_helpers.\
-   888         2         50.0     25.0      0.0              parse_url(NETWORK_INTERFACE_RESOURCE_ID, nic_id)
-   889         2          2.0      1.0      0.0          nic_name = nic_params.get(NETWORK_INTERFACE_NAME)
-   890         2       1434.0    717.0      0.0          self.network_management_client. \
-   891         2         16.0      8.0      0.0              network_interfaces.delete(self.resource_group,
-   892         2   21335790.0 10667895.0    100.0                                        nic_name).wait()
-
-Test suite: results/image.res
-Total time: 61.8844 s
-Function: create_nic at line 916
-
-Line #      Hits         Time  Per Hit   % Time  Line Contents
-==============================================================
-   916                                               @profile
-   917                                               def create_nic(self, nic_name, params):
-   918         2       1446.0    723.0      0.0          return self.network_management_client. \
-   919                                                       network_interfaces.create_or_update(
-   920         2         41.0     20.5      0.0                  self.resource_group,
-   921         2          2.0      1.0      0.0                  nic_name,
-   922         2   61882952.0 30941476.0    100.0                  params
-   923                                                       ).result()
-
-Test suite: results/security.res
-Total time: 68.5755 s
-Function: create_vm_firewall at line 387
-
-Line #      Hits         Time  Per Hit   % Time  Line Contents
-==============================================================
-   387                                               @profile
-   388                                               def create_vm_firewall(self, name, parameters):
-   389         6       4447.0    741.2      0.0          return self.network_management_client.network_security_groups. \
-   390         6         51.0      8.5      0.0              create_or_update(self.resource_group, name,
-   391         6   68570982.0 11428497.0    100.0                               parameters).result()
-
-Test suite: results/security.res
-Total time: 72.8747 s
-Function: update_vm_firewall_tags at line 393
-
-Line #      Hits         Time  Per Hit   % Time  Line Contents
-==============================================================
-   393                                               @profile
-   394                                               def update_vm_firewall_tags(self, fw_id, tags):
-   395         3          8.0      2.7      0.0          url_params = azure_helpers.parse_url(VM_FIREWALL_RESOURCE_ID,
-   396         3         73.0     24.3      0.0                                               fw_id)
-   397         3          3.0      1.0      0.0          name = url_params.get(VM_FIREWALL_NAME)
-   398         3       2084.0    694.7      0.0          return self.network_management_client.network_security_groups. \
-   399         3         23.0      7.7      0.0              create_or_update(self.resource_group, name,
-   400         3          2.0      0.7      0.0                               {'tags': tags,
-   401         3   72872468.0 24290822.7    100.0                                'location': self.region_name}).result()
-
-Test suite: results/security.res
-Total time: 64.2852 s
-Function: delete_vm_firewall at line 411
-
-Line #      Hits         Time  Per Hit   % Time  Line Contents
-==============================================================
-   411                                               @profile
-   412                                               def delete_vm_firewall(self, fw_id):
-   413         6         16.0      2.7      0.0          url_params = azure_helpers.parse_url(VM_FIREWALL_RESOURCE_ID,
-   414         6        154.0     25.7      0.0                                               fw_id)
-   415         6          6.0      1.0      0.0          name = url_params.get(VM_FIREWALL_NAME)
-   416         6       4320.0    720.0      0.0          self.network_management_client \
-   417         6   64280695.0 10713449.2    100.0              .network_security_groups.delete(self.resource_group, name).wait()
-
-Test suite: results/security.res
-Total time: 528.549 s
-Function: create_vm_firewall_rule at line 419
-
-Line #      Hits         Time  Per Hit   % Time  Line Contents
-==============================================================
-   419                                               @profile
-   420                                               def create_vm_firewall_rule(self, fw_id,
-   421                                                                           rule_name, parameters):
-   422        47        123.0      2.6      0.0          url_params = azure_helpers.parse_url(VM_FIREWALL_RESOURCE_ID,
-   423        47       1298.0     27.6      0.0                                               fw_id)
-   424        47         71.0      1.5      0.0          vm_firewall_name = url_params.get(VM_FIREWALL_NAME)
-   425        47      35143.0    747.7      0.0          return self.network_management_client.security_rules. \
-   426        47        457.0      9.7      0.0              create_or_update(self.resource_group, vm_firewall_name,
-   427        47  528511698.0 11244929.7    100.0                               rule_name, parameters).result()
-
-Test suite: results/security.res
-Total time: 32.4044 s
-Function: delete_vm_firewall_rule at line 429
-
-Line #      Hits         Time  Per Hit   % Time  Line Contents
-==============================================================
-   429                                               @profile
-   430                                               def delete_vm_firewall_rule(self, fw_rule_id, vm_firewall):
-   431         3          8.0      2.7      0.0          url_params = azure_helpers.parse_url(VM_FIREWALL_RULE_RESOURCE_ID,
-   432         3         92.0     30.7      0.0                                               fw_rule_id)
-   433         3          5.0      1.7      0.0          name = url_params.get(VM_FIREWALL_RULE_NAME)
-   434         3       2354.0    784.7      0.0          return self.network_management_client.security_rules. \
-   435         3   32401986.0 10800662.0    100.0              delete(self.resource_group, vm_firewall, name).result()
-
-Test suite: results/network.res
-Total time: 43.0886 s
-Function: create_network at line 672
-
-Line #      Hits         Time  Per Hit   % Time  Line Contents
-==============================================================
-   672                                               @profile
-   673                                               def create_network(self, name, params):
-   674         3      23255.0   7751.7      0.1          return self.network_management_client.virtual_networks. \
-   675         3         27.0      9.0      0.0              create_or_update(self.resource_group,
-   676         3          1.0      0.3      0.0                               name,
-   677         3   43065283.0 14355094.3     99.9                               parameters=params).result()
-
-Test suite: results/network.res
-Total time: 31.9886 s
-Function: delete_network at line 679
-
-Line #      Hits         Time  Per Hit   % Time  Line Contents
-==============================================================
-   679                                               @profile
-   680                                               def delete_network(self, network_id):
-   681         3        100.0     33.3      0.0          url_params = azure_helpers.parse_url(NETWORK_RESOURCE_ID, network_id)
-   682         3          5.0      1.7      0.0          network_name = url_params.get(NETWORK_NAME)
-   683         3       2606.0    868.7      0.0          return self.network_management_client.virtual_networks. \
-   684         3   31985926.0 10661975.3    100.0              delete(self.resource_group, network_name).wait()
-
-Test suite: results/network.res
-Total time: 278.504 s
-Function: update_network_tags at line 686
-
-Line #      Hits         Time  Per Hit   % Time  Line Contents
-==============================================================
-   686                                               @profile
-   687                                               def update_network_tags(self, network_id, tags):
-   688         9        267.0     29.7      0.0          url_params = azure_helpers.parse_url(NETWORK_RESOURCE_ID, network_id)
-   689         9         13.0      1.4      0.0          network_name = url_params.get(NETWORK_NAME)
-   690         9       7020.0    780.0      0.0          return self.network_management_client.virtual_networks. \
-   691         9         77.0      8.6      0.0              create_or_update(self.resource_group,
-   692         9  278496853.0 30944094.8    100.0                               network_name, tags).result()
-
-Test suite: results/network.res
-Total time: 32.2194 s
-Function: delete_subnet at line 741
-
-Line #      Hits         Time  Per Hit   % Time  Line Contents
-==============================================================
-   741                                               @tenacity.retry(stop=tenacity.stop_after_attempt(5),
-   742                                                               retry=tenacity.retry_if_exception(__if_subnet_in_use),
-   743                                                               wait=tenacity.wait_fixed(5),
-   744                                                               reraise=True)
-   745                                               @profile
-   746                                               def delete_subnet(self, subnet_id):
-   747         3          7.0      2.3      0.0          url_params = azure_helpers.parse_url(SUBNET_RESOURCE_ID,
-   748         3         83.0     27.7      0.0                                               subnet_id)
-   749         3          3.0      1.0      0.0          network_name = url_params.get(NETWORK_NAME)
-   750         3          3.0      1.0      0.0          subnet_name = url_params.get(SUBNET_NAME)
-   751                                           
-   752         3          1.0      0.3      0.0          try:
-   753         3       2586.0    862.0      0.0              result_delete = self.network_management_client \
-   754                                                           .subnets.delete(
-   755         3         34.0     11.3      0.0                      self.resource_group,
-   756         3          2.0      0.7      0.0                      network_name,
-   757         3    1488381.0 496127.0      4.6                      subnet_name
-   758                                                           )
-   759         3   30728309.0 10242769.7     95.4              result_delete.wait()
-   760                                                   except CloudError as cloud_error:
-   761                                                       log.exception(cloud_error.message)
-   762                                                       raise cloud_error
-
-Test suite: results/network.res
-Total time: 41.8774 s
-Function: delete_floating_ip at line 779
-
-Line #      Hits         Time  Per Hit   % Time  Line Contents
-==============================================================
-   779                                               @profile
-   780                                               def delete_floating_ip(self, public_ip_id):
-   781         2          6.0      3.0      0.0          url_params = azure_helpers.parse_url(PUBLIC_IP_RESOURCE_ID,
-   782         2         58.0     29.0      0.0                                               public_ip_id)
-   783         2          2.0      1.0      0.0          public_ip_name = url_params.get(PUBLIC_IP_NAME)
-   784         2       1594.0    797.0      0.0          self.network_management_client. \
-   785         2         17.0      8.5      0.0              public_ip_addresses.delete(self.resource_group,
-   786         2   41875687.0 20937843.5    100.0                                         public_ip_name).wait()
-
-Test suite: results/network.res
-Total time: 93.1682 s
-Function: update_route_table_tags at line 1031
-
-Line #      Hits         Time  Per Hit   % Time  Line Contents
-==============================================================
-  1031                                               @profile
-  1032                                               def update_route_table_tags(self, route_table_name, tags):
-  1033         3       2496.0    832.0      0.0          self.network_management_client.route_tables. \
-  1034         3         28.0      9.3      0.0              create_or_update(self.resource_group,
-  1035         3   93165711.0 31055237.0    100.0                               route_table_name, tags).result()
-

+ 0 - 51
metaresults/summary.csv

@@ -1,51 +0,0 @@
-Test File,CB functon,Total Time (in s),Azure Operation,Time per hit
-object_life_cycle,"create_empty_disk",31.2022,"return self.compute_client.disks.create_or_update(self.resource_group,disk_name,params",31.194332
-object_life_cycle,"delete_disk",30.591,"self.compute_client.disks.delete(self.resource_group, disk_name).wait()",30.590981
-block_store,"create_empty_disk",154.785,"return self.compute_client.disks.create_or_update(self.resource_group,disk_name,params",30.9526368
-block_store,"create_snapshot_disk",61.8265,"return self.compute_client.disks.create_or_update(self.resource_group,disk_name,params",30.9127775
-block_store,"delete_disk",275.18,"self.compute_client.disks.delete(self.resource_group, disk_name).wait()",30.5755592
-block_store,"create_snapshot",93.2656,"return self.compute_client.snapshots.create_or_update(self.resource_group,snapshot_name,params",31.0880317
-block_store,"delete_snapshot",91.916,"self.compute_client.snapshots.delete(self.resource_group,snapshot_name).wait()",30.63813
-block_store,"delete_vm",81.5978,"return self.compute_client.virtual_machines.delete(self.resource_group, vm_name).wait()",40.7984175
-block_store,"create_vm",252.683,"return self.compute_client.virtual_machines.create_or_update(self.resource_group,vm_name, params).result()",126.3337925
-block_store,"deallocate_vm",215.106,"self.compute_client.virtual_machines.deallocate(self.resource_group,vm_name).wait()",107.552382
-block_store,"delete_nic",21.1995,"self.network_management_client.network_interfaces.delete(self.resource_group,nic_name).wait()",10.5990095
-block_store,"create_nic",62.265,"return self.network_management_client.network_interfaces.create_or_update(self.resource_group,nic_name,params",31.131742
-compute,"create_vm_firewall",22.4962,"return self.network_management_client.network_security_groups.create_or_update(self.resource_group, name,parameters).result()",11.2472965
-compute,"delete_vm_firewall",21.5193,"self.network_management_client.network_security_groups.delete(self.resource_group, name).wait()",10.758574
-compute,"create_vm_firewall_rule",154.991,"return self.network_management_client.security_rules.create_or_update(self.resource_group, vm_firewall_name,rule_name, parameters).result()",11.0699658
-compute,"create_empty_disk",30.9193,"return self.compute_client.disks.create_or_update(self.resource_group,disk_name,params",30.911676
-compute,"create_snapshot_disk",30.8045,"return self.compute_client.disks.create_or_update(self.resource_group,disk_name,params",30.80404
-compute,"delete_disk",214.353,"self.compute_client.disks.delete(self.resource_group, disk_name).wait()",26.7941199
-compute,"create_snapshot",31.0976,"return self.compute_client.snapshots.create_or_update(self.resource_group,snapshot_name,params",31.097107
-compute,"delete_snapshot",30.6236,"self.compute_client.snapshots.delete(self.resource_group,snapshot_name).wait()",30.623148
-compute,"update_network_tags",31.0639,"return self.network_management_client.virtual_networks.create_or_update(self.resource_group,network_name, tags).result()",31.063174
-compute,"restart_vm",30.4549,"return self.compute_client.virtual_machines.restart(self.resource_group, vm_name).wait()",30.454435
-compute,"delete_vm",133.21,"return self.compute_client.virtual_machines.delete(self.resource_group, vm_name).wait()",33.3019468
-compute,"get_vm",74.9466,"return self.compute_client.virtual_machines.get(self.resource_group,vm_name,expand='instanceView'",3.4060475
-compute,"create_vm",515.531,"return self.compute_client.virtual_machines.create_or_update(self.resource_group,vm_name, params).result()",128.8768842
-compute,"deallocate_vm",284.987,"self.compute_client.virtual_machines.deallocate(self.resource_group,vm_name).wait()",71.2463305
-compute,"update_vm_tags",93.3852,"self.compute_client.virtual_machines.create_or_update(self.resource_group,vm_name, tags).result()",31.12791
-compute,"delete_nic",42.7808,"self.network_management_client.network_interfaces.delete(self.resource_group,nic_name).wait()",10.694468
-compute,"update_nic",115.781,"nic_info = async_nic_creation.result()",28.6320008
-compute,"create_nic",125.141,"return self.network_management_client.network_interfaces.create_or_update(self.resource_group,nic_name,params",31.2844542
-image,"delete_disk",61.3306,"self.compute_client.disks.delete(self.resource_group, disk_name).wait()",30.665287
-image,"create_image",31.1668,"return self.compute_client.images.create_or_update(self.resource_group, name,params).result()",31.16632
-image,"delete_image",30.729,"self.compute_client.images.delete(self.resource_group, name).wait()",30.72898
-image,"update_image_tags",92.9118,"return self.compute_client.images.create_or_update(self.resource_group, name,{'tags': tags,'location': self.region_name",30.970078
-image,"delete_vm",81.5368,"return self.compute_client.virtual_machines.delete(self.resource_group, vm_name).wait()",40.767882
-image,"create_vm",220.739,"return self.compute_client.virtual_machines.create_or_update(self.resource_group,vm_name, params).result()",110.3657695
-image,"deallocate_vm",135.517,"self.compute_client.virtual_machines.deallocate(self.resource_group,vm_name).wait()",45.171864
-image,"delete_nic",21.3373,"self.network_management_client.network_interfaces.delete(self.resource_group,nic_name).wait()",10.667895
-image,"create_nic",61.8844,"return self.network_management_client.network_interfaces.create_or_update(self.resource_group,nic_name,params",30.941476
-security,"create_vm_firewall",68.5755,"return self.network_management_client.network_security_groups.create_or_update(self.resource_group, name,parameters).result()",11.428497
-security,"update_vm_firewall_tags",72.8747,"return self.network_management_client.network_security_groups.create_or_update(self.resource_group, name,{'tags': tags,'location': self.region_name}).result()",24.2908227
-security,"delete_vm_firewall",64.2852,"self.network_management_client.network_security_groups.delete(self.resource_group, name).wait()",10.7134492
-security,"create_vm_firewall_rule",528.549,"return self.network_management_client.security_rules.create_or_update(self.resource_group, vm_firewall_name,rule_name, parameters).result()",11.2449297
-security,"delete_vm_firewall_rule",32.4044,"return self.network_management_client.security_rules.delete(self.resource_group, vm_firewall, name).result()",10.800662
-network,"create_network",43.0886,"return self.network_management_client.virtual_networks.create_or_update(self.resource_group,name,parameters=params).result()",14.355094300000001
-network,"delete_network",31.9886,"return self.network_management_client.virtual_networks.delete(self.resource_group, network_name).wait()",10.6619753
-network,"update_network_tags",278.504,"return self.network_management_client.virtual_networks.create_or_update(self.resource_group,network_name, tags).result()",30.944094800000002
-network,"delete_subnet",32.2194,"result_delete.wait()",10.242769699999998
-network,"delete_floating_ip",41.8774,"self.network_management_client.public_ip_addresses.delete(self.resource_group,public_ip_name).wait()",20.9378435
-network,"update_route_table_tags",93.1682,"self.network_management_client.route_tables.create_or_update(self.resource_group,route_table_name, tags).result()",31.055237

+ 83 - 0
profiling-scripts/filter-summarize.py

@@ -0,0 +1,83 @@
+## This script will extract the results of the line profiler
+## for the CB Azure Client specifically, filters all long functions
+## with given cutoffs, outputing a filtered results file containing
+## only profiling of functions fitting the cut-offs, and a csv summary
+## file containing information about the longest functions and associated
+## lines
+
+from re import search
+from os import path, walk
+
+time_cutoff = 5 # seconds
+perc_cutoff = 33 # % of total functino time spent on this line
+
+
+results = '../results/'
+metaresults = '../metaresults/'
+print("Results directory used: {}".format(results))
+
+files = []
+for (dirpath, dirnames, filenames) in walk(results):
+    for each_file in filenames:
+        if ".res" in each_file:
+            files.append(path.join(dirpath, each_file))
+
+print("Collected list: {}".format(files))
+
+summary = "{},{},{},{},{}\n".format("Test File", "CB functon", "Total Time (in s)", "Azure Operation", "Time per hit")
+
+inside = False
+capturing = False
+purge_line = True
+
+for each_file in files:
+    print("Processing: {}\n".format(each_file))
+    with open(metaresults + "filtered-" + each_file.split('/')[-1], 'w+') as \
+            fil_file:
+        with open(each_file, 'r') as current:
+            filtered = ""
+            for line in current:
+                match = search(r'^Total time: ([\.e\-0-9]+) s', line)
+                if match:
+                    inside = False
+                    capturing = False
+                    total_time = float(match.group(1))
+                    if total_time > time_cutoff:
+                        inside = True
+                        filtered += "Test suite: {}\n".format(each_file)
+                        filtered += line
+                elif inside:
+                    match = search(r'^Function: (.+) at line ([0-9]+)', line)
+                    if match:
+                        func_name = match.group(1)
+                        line_num = int(match.group(2))
+                        capturing = True
+                        filtered += line
+                    elif capturing:
+                        if purge_line:
+                            complete_contents = ""
+                            paran_num = 0
+                        filtered += line
+                        match = search(r'^\s+([0-9]+)\s+[0-9]+\s+([\.0-9]+)\s+([\.0-9]+)\s+([\.0-9]+)\s+([^\n]+)', line)
+                        if match:
+                            percentage = float(match.group(4))
+                            line_contents = match.group(5)
+                            complete_contents += line_contents.replace(" \\", "")
+                            paran_num += line_contents.count("(") - line_contents.count(")")
+                            purge_line = " \\" not in line_contents and paran_num == 0
+                            if percentage > perc_cutoff:
+                                line_num = int(match.group(1))
+                                line_time = float(match.group(2))/1000000
+                                hit_time = float(match.group(3))/1000000
+                                summary += "{},\"{}\",{},\"{}\",{}\n".format(each_file.split('/')[-1].replace(".res", ""), func_name, total_time, complete_contents, hit_time)
+                        else:
+                            match = search(r'^\s+([0-9]+)\s+([^\n]+)', line)
+                            if match:
+                                line_contents = match.group(2)
+                                complete_contents += line_contents.replace(" \\", "")
+                                paran_num += line_contents.count("(") - line_contents.count(")")
+                                purge_line = " \\" not in line_contents and paran_num == 0
+        fil_file.write(filtered)
+
+with open(metaresults+"summary.csv", 'w+') as sum_file:
+    sum_file.write(summary)

+ 0 - 33
profiling-scripts/run-all.sh

@@ -1,33 +0,0 @@
-#!/bin/bash
-#
-###############
-# Pre-reqs:
-###############
-# Add @profile decorator in all cloudbridge methods to profile
-# `pip install .`
-#                in the modified cloudbridge directory (with tests as part of the library)
-# `pip install line-profiler`
-###############
-# Usage:
-###############
-# sh run-all.sh
-###############
-# Behavior:
-###############
-# Will run the line-by-line profiler (https://github.com/rkern/line_profiler) on each test,
-# and generate a result file containing the test results and the line-by-line runtime for
-# each profiled function
-
-export CB_TEST_PROVIDER=azure
-
-kernprof -l -v run_single.py block_store > ../results/block_store.res
-kernprof -l -v run_single.py cloud_factory > ../results/cloud_factory.res
-kernprof -l -v run_single.py cloud_helpers > ../results/cloud_helpers.res
-kernprof -l -v run_single.py compute > ../results/compute.res
-kernprof -l -v run_single.py image > ../results/image.res
-kernprof -l -v run_single.py network > ../results/network.res
-kernprof -l -v run_single.py object_life_cycle > ../results/object_life_cycle.res
-kernprof -l -v run_single.py object_store > ../results/object_store.res
-kernprof -l -v run_single.py region > ../results/region.res
-kernprof -l -v run_single.py security > ../results/security.res
-kernprof -l -v run_single.py vm_types > ../results/vm_types.res

+ 33 - 0
profiling-scripts/run-provider.sh

@@ -0,0 +1,33 @@
+#!/bin/bash
+#
+###############
+# Pre-reqs:
+###############
+# Add @profile decorator in all cloudbridge methods to profile
+# `pip install .`
+#                in the modified cloudbridge directory (with tests as part of the library)
+# `pip install line-profiler`
+###############
+# Usage:
+###############
+# sh run-all.sh
+###############
+# Behavior:
+###############
+# Will run the line-by-line profiler (https://github.com/rkern/line_profiler) on each test,
+# and generate a result file containing the test results and the line-by-line runtime for
+# each profiled function
+
+export CB_TEST_PROVIDER=$1
+
+kernprof -l -v run_single.py block_store > ../results/${CB_TEST_PROVIDER}-block_store.res
+kernprof -l -v run_single.py cloud_factory > ../results/${CB_TEST_PROVIDER}-cloud_factory.res
+kernprof -l -v run_single.py cloud_helpers > ../results/${CB_TEST_PROVIDER}-cloud_helpers.res
+kernprof -l -v run_single.py compute > ../results/${CB_TEST_PROVIDER}-compute.res
+kernprof -l -v run_single.py image > ../results/${CB_TEST_PROVIDER}-image.res
+kernprof -l -v run_single.py network > ../results/${CB_TEST_PROVIDER}-network.res
+kernprof -l -v run_single.py object_life_cycle > ../results/${CB_TEST_PROVIDER}-object_life_cycle.res
+kernprof -l -v run_single.py object_store > ../results/${CB_TEST_PROVIDER}-object_store.res
+kernprof -l -v run_single.py region > ../results/${CB_TEST_PROVIDER}-region.res
+kernprof -l -v run_single.py security > ../results/${CB_TEST_PROVIDER}-security.res
+kernprof -l -v run_single.py vm_types > ../results/${CB_TEST_PROVIDER}-vm_types.res

+ 0 - 87
rc-extract.py

@@ -1,87 +0,0 @@
-## This script will extract the results of the line profiler
-## for the CB Azure Client specifically, filters all long functions
-## with given cutoffs, outputing a filtered results file containing
-## only profiling of functions fitting the cut-offs, and a csv summary
-## file containing information about the longest functions and associated
-## lines
-
-from re import search
-from os import path, walk
-
-time_cutoff = 20 # seconds
-perc_cutoff = 75 # % of total functino time spent on this line
-
-
-results = 'results/'
-metaresults = 'metaresults/'
-print("Results directory used: {}".format(results))
-
-files = []
-for (dirpath, dirnames, filenames) in walk(results):
-    for each_file in filenames:
-        if ".res" in each_file:
-            files.append(path.join(dirpath, each_file))
-
-print("Collected list: {}".format(files))
-
-summary = "{},{},{},{},{}\n".format("Test File", "CB functon", "Total Time (in s)", "Azure Operation", "Time per hit")
-
-filtered = ""
-
-inside = False
-capturing = False
-purge_line = True
-
-for each_file in files:
-    print("Processing: {}\n".format(each_file))
-    with open(each_file, 'r') as current:
-        for line in current:
-            match = search(r'^Total time: ([\.e\-0-9]+) s', line)
-            if match:
-                inside = False
-                capturing = False
-                total_time = float(match.group(1))
-                if total_time > time_cutoff:
-                    inside = True
-                    filtered += "Test suite: {}\n".format(each_file)
-                    filtered += line
-            elif inside:
-                match = search(r'^Function: (.+) at line ([0-9]+)', line)
-                if match:
-                    func_name = match.group(1)
-                    line_num = int(match.group(2))
-                    capturing = True
-                    filtered += line
-                elif capturing:
-                    if purge_line:
-                        complete_contents = ""
-                        paran_num = 0
-                    filtered += line
-                    match = search(r'^\s+([0-9]+)\s+[0-9]+\s+([\.0-9]+)\s+([\.0-9]+)\s+([\.0-9]+)\s+([^\n]+)', line)
-                    if match:
-                        percentage = float(match.group(4))
-                        line_contents = match.group(5)
-                        complete_contents += line_contents.replace(" \\", "")
-                        paran_num += line_contents.count("(") - line_contents.count(")")
-                        purge_line = " \\" not in line_contents and paran_num == 0
-                        if percentage > perc_cutoff:
-                            line_num = int(match.group(1))
-                            line_time = float(match.group(2))/1000000
-                            hit_time = float(match.group(3))/1000000
-                            summary += "{},\"{}\",{},\"{}\",{}\n".format(each_file.split('/')[-1].replace(".res", ""), func_name, total_time, complete_contents, hit_time)
-                    else:
-                        match = search(r'^\s+([0-9]+)\s+([^\n]+)', line)
-                        if match:
-                            line_contents = match.group(2)
-                            complete_contents += line_contents.replace(" \\", "")
-                            paran_num += line_contents.count("(") - line_contents.count(")")
-                            purge_line = " \\" not in line_contents and paran_num == 0
-                    
-
-
-
-with open(metaresults+"summary.csv", 'w+') as sum_file:
-    sum_file.write(summary)
-
-with open(metaresults+"filtered.txt", 'w+') as fil_file:
-    fil_file.write(filtered)

+ 0 - 1467
results/block_store.res

@@ -1,1467 +0,0 @@
-Test output
- .....
-----------------------------------------------------------------------
-Ran 5 tests in 1397.596s
-
-OK
-
-Wrote profile results to run_tests.py.lprof
-Timer unit: 1e-06 s
-
-Total time: 1.4167 s
-File: /Users/alex/Desktop/work/cb-profiled/cloudbridge/cloudbridge/cloud/providers/azure/azure_client.py
-Function: __init__ at line 160
-
-Line #      Hits         Time  Per Hit   % Time  Line Contents
-==============================================================
-   160                                               @profile
-   161                                               def __init__(self, config):
-   162         5         17.0      3.4      0.0          self._config = config
-   163         5         14.0      2.8      0.0          self.subscription_id = str(config.get('azure_subscription_id'))
-   164         5          3.0      0.6      0.0          self._credentials = ServicePrincipalCredentials(
-   165         5          4.0      0.8      0.0              client_id=config.get('azure_client_id'),
-   166         5          4.0      0.8      0.0              secret=config.get('azure_secret'),
-   167         5    1416552.0 283310.4    100.0              tenant=config.get('azure_tenant')
-   168                                                   )
-   169                                           
-   170         5         16.0      3.2      0.0          self._access_token = config.get('azure_access_token')
-   171         5          6.0      1.2      0.0          self._resource_client = None
-   172         5          5.0      1.0      0.0          self._storage_client = None
-   173         5          4.0      0.8      0.0          self._network_management_client = None
-   174         5          6.0      1.2      0.0          self._subscription_client = None
-   175         5          6.0      1.2      0.0          self._compute_client = None
-   176         5          5.0      1.0      0.0          self._access_key_result = None
-   177         5          6.0      1.2      0.0          self._block_blob_service = None
-   178         5          4.0      0.8      0.0          self._table_service = None
-   179         5          5.0      1.0      0.0          self._storage_account = None
-   180                                           
-   181         5         41.0      8.2      0.0          log.debug("azure subscription : %s", self.subscription_id)
-
-Total time: 0.999881 s
-File: /Users/alex/Desktop/work/cb-profiled/cloudbridge/cloudbridge/cloud/providers/azure/azure_client.py
-Function: access_key_result at line 183
-
-Line #      Hits         Time  Per Hit   % Time  Line Contents
-==============================================================
-   183                                               @property
-   184                                               @tenacity.retry(stop=tenacity.stop_after_attempt(5), reraise=True)
-   185                                               @profile
-   186                                               def access_key_result(self):
-   187         2          2.0      1.0      0.0          if not self._access_key_result:
-   188         2          7.0      3.5      0.0              storage_account = self.storage_account
-   189                                           
-   190         2     497806.0 248903.0     49.8              if self.get_storage_account(storage_account).\
-   191         2          2.0      1.0      0.0                      provisioning_state.value != 'Succeeded':
-   192                                                           log.debug(
-   193                                                               "Storage account %s is not in Succeeded state yet. ",
-   194                                                               storage_account)
-   195                                                           raise WaitStateException(
-   196                                                               "Waited too long for storage account: {0} to "
-   197                                                               "become ready.".format(
-   198                                                                   storage_account,
-   199                                                                   self.get_storage_account(storage_account).
-   200                                                                   provisioning_state))
-   201                                           
-   202         2        463.0    231.5      0.0              self._access_key_result = self.storage_client.storage_accounts. \
-   203         2     501597.0 250798.5     50.2                  list_keys(self.resource_group, storage_account)
-   204         2          4.0      2.0      0.0          return self._access_key_result
-
-Total time: 0.00028 s
-File: /Users/alex/Desktop/work/cb-profiled/cloudbridge/cloudbridge/cloud/providers/azure/azure_client.py
-Function: resource_group at line 206
-
-Line #      Hits         Time  Per Hit   % Time  Line Contents
-==============================================================
-   206                                               @property
-   207                                               @profile
-   208                                               def resource_group(self):
-   209       158        280.0      1.8    100.0          return self._config.get('azure_resource_group')
-
-Total time: 7e-06 s
-File: /Users/alex/Desktop/work/cb-profiled/cloudbridge/cloudbridge/cloud/providers/azure/azure_client.py
-Function: storage_account at line 211
-
-Line #      Hits         Time  Per Hit   % Time  Line Contents
-==============================================================
-   211                                               @property
-   212                                               @profile
-   213                                               def storage_account(self):
-   214         6          7.0      1.2    100.0          return self._config.get('azure_storage_account')
-
-Total time: 9e-06 s
-File: /Users/alex/Desktop/work/cb-profiled/cloudbridge/cloudbridge/cloud/providers/azure/azure_client.py
-Function: region_name at line 216
-
-Line #      Hits         Time  Per Hit   % Time  Line Contents
-==============================================================
-   216                                               @property
-   217                                               @profile
-   218                                               def region_name(self):
-   219         3          9.0      3.0    100.0          return self._config.get('azure_region_name')
-
-Total time: 3.3e-05 s
-File: /Users/alex/Desktop/work/cb-profiled/cloudbridge/cloudbridge/cloud/providers/azure/azure_client.py
-Function: public_key_storage_table_name at line 221
-
-Line #      Hits         Time  Per Hit   % Time  Line Contents
-==============================================================
-   221                                               @property
-   222                                               @profile
-   223                                               def public_key_storage_table_name(self):
-   224        17         33.0      1.9    100.0          return self._config.get('azure_public_key_storage_table_name')
-
-Total time: 0.013736 s
-File: /Users/alex/Desktop/work/cb-profiled/cloudbridge/cloudbridge/cloud/providers/azure/azure_client.py
-Function: storage_client at line 226
-
-Line #      Hits         Time  Per Hit   % Time  Line Contents
-==============================================================
-   226                                               @property
-   227                                               @profile
-   228                                               def storage_client(self):
-   229         6          6.0      1.0      0.0          if not self._storage_client:
-   230                                                       self._storage_client = \
-   231         2          2.0      1.0      0.0                  StorageManagementClient(self._credentials,
-   232         2      13724.0   6862.0     99.9                                          self.subscription_id)
-   233         6          4.0      0.7      0.0          return self._storage_client
-
-Total time: 0.012467 s
-File: /Users/alex/Desktop/work/cb-profiled/cloudbridge/cloudbridge/cloud/providers/azure/azure_client.py
-Function: subscription_client at line 235
-
-Line #      Hits         Time  Per Hit   % Time  Line Contents
-==============================================================
-   235                                               @property
-   236                                               @profile
-   237                                               def subscription_client(self):
-   238         2          2.0      1.0      0.0          if not self._subscription_client:
-   239         2      12463.0   6231.5    100.0              self._subscription_client = SubscriptionClient(self._credentials)
-   240         2          2.0      1.0      0.0          return self._subscription_client
-
-Total time: 0.045807 s
-File: /Users/alex/Desktop/work/cb-profiled/cloudbridge/cloudbridge/cloud/providers/azure/azure_client.py
-Function: resource_client at line 242
-
-Line #      Hits         Time  Per Hit   % Time  Line Contents
-==============================================================
-   242                                               @property
-   243                                               @profile
-   244                                               def resource_client(self):
-   245         5          5.0      1.0      0.0          if not self._resource_client:
-   246                                                       self._resource_client = \
-   247         5          3.0      0.6      0.0                  ResourceManagementClient(self._credentials,
-   248         5      45789.0   9157.8    100.0                                           self.subscription_id)
-   249         5         10.0      2.0      0.0          return self._resource_client
-
-Total time: 0.034362 s
-File: /Users/alex/Desktop/work/cb-profiled/cloudbridge/cloudbridge/cloud/providers/azure/azure_client.py
-Function: compute_client at line 251
-
-Line #      Hits         Time  Per Hit   % Time  Line Contents
-==============================================================
-   251                                               @property
-   252                                               @profile
-   253                                               def compute_client(self):
-   254       136        319.0      2.3      0.9          if not self._compute_client:
-   255                                                       self._compute_client = \
-   256         5          9.0      1.8      0.0                  ComputeManagementClient(self._credentials,
-   257         5      33902.0   6780.4     98.7                                          self.subscription_id)
-   258       136        132.0      1.0      0.4          return self._compute_client
-
-Total time: 0.014786 s
-File: /Users/alex/Desktop/work/cb-profiled/cloudbridge/cloudbridge/cloud/providers/azure/azure_client.py
-Function: network_management_client at line 260
-
-Line #      Hits         Time  Per Hit   % Time  Line Contents
-==============================================================
-   260                                               @property
-   261                                               @profile
-   262                                               def network_management_client(self):
-   263        16         17.0      1.1      0.1          if not self._network_management_client:
-   264         2          5.0      2.5      0.0              self._network_management_client = NetworkManagementClient(
-   265         2      14756.0   7378.0     99.8                  self._credentials, self.subscription_id)
-   266        16          8.0      0.5      0.1          return self._network_management_client
-
-Total time: 0 s
-File: /Users/alex/Desktop/work/cb-profiled/cloudbridge/cloudbridge/cloud/providers/azure/azure_client.py
-Function: blob_service at line 268
-
-Line #      Hits         Time  Per Hit   % Time  Line Contents
-==============================================================
-   268                                               @property
-   269                                               @profile
-   270                                               def blob_service(self):
-   271                                                   self._get_or_create_storage_account()
-   272                                                   if not self._block_blob_service:
-   273                                                       if self._access_token:
-   274                                                           token_credential = TokenCredential(self._access_token)
-   275                                                           self._block_blob_service = BlockBlobService(
-   276                                                               account_name=self.storage_account,
-   277                                                               token_credential=token_credential)
-   278                                                       else:
-   279                                                           self._block_blob_service = BlockBlobService(
-   280                                                               account_name=self.storage_account,
-   281                                                               account_key=self.access_key_result.keys[0].value)
-   282                                                   return self._block_blob_service
-
-Total time: 2.45904 s
-File: /Users/alex/Desktop/work/cb-profiled/cloudbridge/cloudbridge/cloud/providers/azure/azure_client.py
-Function: table_service at line 284
-
-Line #      Hits         Time  Per Hit   % Time  Line Contents
-==============================================================
-   284                                               @property
-   285                                               @profile
-   286                                               def table_service(self):
-   287         8     620455.0  77556.9     25.2          self._get_or_create_storage_account()
-   288         8         15.0      1.9      0.0          if not self._table_service:
-   289         2          5.0      2.5      0.0              self._table_service = TableService(
-   290         2         16.0      8.0      0.0                  self.storage_account,
-   291         2    1000721.0 500360.5     40.7                  self.access_key_result.keys[0].value)
-   292         8         20.0      2.5      0.0          if not self._table_service. \
-   293         8     776819.0  97102.4     31.6                  exists(table_name=self.public_key_storage_table_name):
-   294         1          4.0      4.0      0.0              self._table_service.create_table(
-   295         1      60955.0  60955.0      2.5                  self.public_key_storage_table_name)
-   296         8         31.0      3.9      0.0          return self._table_service
-
-Total time: 1.0522 s
-File: /Users/alex/Desktop/work/cb-profiled/cloudbridge/cloudbridge/cloud/providers/azure/azure_client.py
-Function: get_resource_group at line 298
-
-Line #      Hits         Time  Per Hit   % Time  Line Contents
-==============================================================
-   298                                               @profile
-   299                                               def get_resource_group(self, name):
-   300         5    1052198.0 210439.6    100.0          return self.resource_client.resource_groups.get(name)
-
-Total time: 0 s
-File: /Users/alex/Desktop/work/cb-profiled/cloudbridge/cloudbridge/cloud/providers/azure/azure_client.py
-Function: create_resource_group at line 302
-
-Line #      Hits         Time  Per Hit   % Time  Line Contents
-==============================================================
-   302                                               @profile
-   303                                               def create_resource_group(self, name, parameters):
-   304                                                   return self.resource_client.resource_groups. \
-   305                                                       create_or_update(name, parameters)
-
-Total time: 1.11697 s
-File: /Users/alex/Desktop/work/cb-profiled/cloudbridge/cloudbridge/cloud/providers/azure/azure_client.py
-Function: get_storage_account at line 307
-
-Line #      Hits         Time  Per Hit   % Time  Line Contents
-==============================================================
-   307                                               @profile
-   308                                               def get_storage_account(self, storage_account):
-   309         4      67334.0  16833.5      6.0          return self.storage_client.storage_accounts. \
-   310         4    1049640.0 262410.0     94.0              get_properties(self.resource_group, storage_account)
-
-Total time: 0 s
-File: /Users/alex/Desktop/work/cb-profiled/cloudbridge/cloudbridge/cloud/providers/azure/azure_client.py
-Function: create_storage_account at line 312
-
-Line #      Hits         Time  Per Hit   % Time  Line Contents
-==============================================================
-   312                                               @profile
-   313                                               def create_storage_account(self, name, params):
-   314                                                   return self.storage_client.storage_accounts. \
-   315                                                       create(self.resource_group, name.lower(), params).result()
-
-Total time: 0.619268 s
-File: /Users/alex/Desktop/work/cb-profiled/cloudbridge/cloudbridge/cloud/providers/azure/azure_client.py
-Function: _get_or_create_storage_account at line 319
-
-Line #      Hits         Time  Per Hit   % Time  Line Contents
-==============================================================
-   319                                               @tenacity.retry(stop=tenacity.stop_after_attempt(2),
-   320                                                               retry=tenacity.retry_if_exception_type(CloudError),
-   321                                                               reraise=True)
-   322                                               @profile
-   323                                               def _get_or_create_storage_account(self):
-   324         8         12.0      1.5      0.0          if self._storage_account:
-   325         6          5.0      0.8      0.0              return self._storage_account
-   326                                                   else:
-   327         2          2.0      1.0      0.0              try:
-   328                                                           self._storage_account = \
-   329         2     619249.0 309624.5    100.0                      self.get_storage_account(self.storage_account)
-   330                                                       except CloudError as cloud_error:
-   331                                                           if cloud_error.error.error == "ResourceNotFound":
-   332                                                               storage_account_params = {
-   333                                                                   'sku': {
-   334                                                                       'name': 'Standard_LRS'
-   335                                                                   },
-   336                                                                   'kind': 'storage',
-   337                                                                   'location': self.region_name,
-   338                                                               }
-   339                                                               try:
-   340                                                                   self._storage_account = \
-   341                                                                       self.create_storage_account(self.storage_account,
-   342                                                                                                   storage_account_params)
-   343                                                               except CloudError as cloud_error2:  # pragma: no cover
-   344                                                                   if cloud_error2.error.error == "AuthorizationFailed":
-   345                                                                       mess = 'The following error was returned by ' \
-   346                                                                              'Azure:\n%s\n\nThis is likely because the' \
-   347                                                                              ' Role associated with the provided ' \
-   348                                                                              'credentials does not allow for Storage ' \
-   349                                                                              'Account creation.\nA Storage Account is ' \
-   350                                                                              'necessary in order to perform the ' \
-   351                                                                              'desired operation. You must either ' \
-   352                                                                              'provide an existing Storage Account name' \
-   353                                                                              ' as part of the configuration, or ' \
-   354                                                                              'elevate the associated Role.\nFor more ' \
-   355                                                                              'information on roles, see: https://docs.' \
-   356                                                                              'microsoft.com/en-us/azure/role-based-' \
-   357                                                                              'access-control/overview\n' % cloud_error2
-   358                                                                       raise ProviderConnectionException(mess)
-   359                                           
-   360                                                                   elif cloud_error2.error.error == \
-   361                                                                           "StorageAccountAlreadyTaken":
-   362                                                                       mess = 'The following error was ' \
-   363                                                                              'returned by Azure:\n%s\n\n' \
-   364                                                                              'Note that Storage Account names must be ' \
-   365                                                                              'unique across Azure (not just in your ' \
-   366                                                                              'subscription).\nFor more information ' \
-   367                                                                              'see https://docs.microsoft.com/en-us/' \
-   368                                                                              'azure/azure-resource-manager/resource-' \
-   369                                                                              'manager-storage-account-name-errors\n' \
-   370                                                                              % cloud_error2
-   371                                                                       raise InvalidLabelException(mess)
-   372                                                                   else:
-   373                                                                       raise cloud_error2
-   374                                                           else:
-   375                                                               raise cloud_error
-
-Total time: 0.039382 s
-File: /Users/alex/Desktop/work/cb-profiled/cloudbridge/cloudbridge/cloud/providers/azure/azure_client.py
-Function: list_locations at line 377
-
-Line #      Hits         Time  Per Hit   % Time  Line Contents
-==============================================================
-   377                                               @profile
-   378                                               def list_locations(self):
-   379         2      39332.0  19666.0     99.9          return self.subscription_client.subscriptions. \
-   380         2         50.0     25.0      0.1              list_locations(self.subscription_id)
-
-Total time: 0 s
-File: /Users/alex/Desktop/work/cb-profiled/cloudbridge/cloudbridge/cloud/providers/azure/azure_client.py
-Function: list_vm_firewall at line 382
-
-Line #      Hits         Time  Per Hit   % Time  Line Contents
-==============================================================
-   382                                               @profile
-   383                                               def list_vm_firewall(self):
-   384                                                   return self.network_management_client.network_security_groups. \
-   385                                                       list(self.resource_group)
-
-Total time: 0 s
-File: /Users/alex/Desktop/work/cb-profiled/cloudbridge/cloudbridge/cloud/providers/azure/azure_client.py
-Function: create_vm_firewall at line 387
-
-Line #      Hits         Time  Per Hit   % Time  Line Contents
-==============================================================
-   387                                               @profile
-   388                                               def create_vm_firewall(self, name, parameters):
-   389                                                   return self.network_management_client.network_security_groups. \
-   390                                                       create_or_update(self.resource_group, name,
-   391                                                                        parameters).result()
-
-Total time: 0 s
-File: /Users/alex/Desktop/work/cb-profiled/cloudbridge/cloudbridge/cloud/providers/azure/azure_client.py
-Function: update_vm_firewall_tags at line 393
-
-Line #      Hits         Time  Per Hit   % Time  Line Contents
-==============================================================
-   393                                               @profile
-   394                                               def update_vm_firewall_tags(self, fw_id, tags):
-   395                                                   url_params = azure_helpers.parse_url(VM_FIREWALL_RESOURCE_ID,
-   396                                                                                        fw_id)
-   397                                                   name = url_params.get(VM_FIREWALL_NAME)
-   398                                                   return self.network_management_client.network_security_groups. \
-   399                                                       create_or_update(self.resource_group, name,
-   400                                                                        {'tags': tags,
-   401                                                                         'location': self.region_name}).result()
-
-Total time: 0 s
-File: /Users/alex/Desktop/work/cb-profiled/cloudbridge/cloudbridge/cloud/providers/azure/azure_client.py
-Function: get_vm_firewall at line 403
-
-Line #      Hits         Time  Per Hit   % Time  Line Contents
-==============================================================
-   403                                               @profile
-   404                                               def get_vm_firewall(self, fw_id):
-   405                                                   url_params = azure_helpers.parse_url(VM_FIREWALL_RESOURCE_ID,
-   406                                                                                        fw_id)
-   407                                                   fw_name = url_params.get(VM_FIREWALL_NAME)
-   408                                                   return self.network_management_client.network_security_groups. \
-   409                                                       get(self.resource_group, fw_name)
-
-Total time: 0 s
-File: /Users/alex/Desktop/work/cb-profiled/cloudbridge/cloudbridge/cloud/providers/azure/azure_client.py
-Function: delete_vm_firewall at line 411
-
-Line #      Hits         Time  Per Hit   % Time  Line Contents
-==============================================================
-   411                                               @profile
-   412                                               def delete_vm_firewall(self, fw_id):
-   413                                                   url_params = azure_helpers.parse_url(VM_FIREWALL_RESOURCE_ID,
-   414                                                                                        fw_id)
-   415                                                   name = url_params.get(VM_FIREWALL_NAME)
-   416                                                   self.network_management_client \
-   417                                                       .network_security_groups.delete(self.resource_group, name).wait()
-
-Total time: 0 s
-File: /Users/alex/Desktop/work/cb-profiled/cloudbridge/cloudbridge/cloud/providers/azure/azure_client.py
-Function: create_vm_firewall_rule at line 419
-
-Line #      Hits         Time  Per Hit   % Time  Line Contents
-==============================================================
-   419                                               @profile
-   420                                               def create_vm_firewall_rule(self, fw_id,
-   421                                                                           rule_name, parameters):
-   422                                                   url_params = azure_helpers.parse_url(VM_FIREWALL_RESOURCE_ID,
-   423                                                                                        fw_id)
-   424                                                   vm_firewall_name = url_params.get(VM_FIREWALL_NAME)
-   425                                                   return self.network_management_client.security_rules. \
-   426                                                       create_or_update(self.resource_group, vm_firewall_name,
-   427                                                                        rule_name, parameters).result()
-
-Total time: 0 s
-File: /Users/alex/Desktop/work/cb-profiled/cloudbridge/cloudbridge/cloud/providers/azure/azure_client.py
-Function: delete_vm_firewall_rule at line 429
-
-Line #      Hits         Time  Per Hit   % Time  Line Contents
-==============================================================
-   429                                               @profile
-   430                                               def delete_vm_firewall_rule(self, fw_rule_id, vm_firewall):
-   431                                                   url_params = azure_helpers.parse_url(VM_FIREWALL_RULE_RESOURCE_ID,
-   432                                                                                        fw_rule_id)
-   433                                                   name = url_params.get(VM_FIREWALL_RULE_NAME)
-   434                                                   return self.network_management_client.security_rules. \
-   435                                                       delete(self.resource_group, vm_firewall, name).result()
-
-Total time: 0 s
-File: /Users/alex/Desktop/work/cb-profiled/cloudbridge/cloudbridge/cloud/providers/azure/azure_client.py
-Function: list_containers at line 437
-
-Line #      Hits         Time  Per Hit   % Time  Line Contents
-==============================================================
-   437                                               @profile
-   438                                               def list_containers(self, prefix=None, limit=None, marker=None):
-   439                                                   results = self.blob_service.list_containers(prefix=prefix,
-   440                                                                                               num_results=limit,
-   441                                                                                               marker=marker)
-   442                                                   return (results.items, results.next_marker)
-
-Total time: 0 s
-File: /Users/alex/Desktop/work/cb-profiled/cloudbridge/cloudbridge/cloud/providers/azure/azure_client.py
-Function: create_container at line 444
-
-Line #      Hits         Time  Per Hit   % Time  Line Contents
-==============================================================
-   444                                               @profile
-   445                                               def create_container(self, container_name):
-   446                                                   try:
-   447                                                       self.blob_service.create_container(container_name,
-   448                                                                                          fail_on_exist=True)
-   449                                                   except AzureConflictHttpError as cloud_error:
-   450                                                       if cloud_error.error_code == "ContainerAlreadyExists":
-   451                                                           msg = "The given Bucket name '%s' already exists. Please " \
-   452                                                                 "use the `get` or `find` method to get a reference to " \
-   453                                                                 "an existing Bucket, or specify a new Bucket name to " \
-   454                                                                 "create.\nNote that in Azure, Buckets are contained " \
-   455                                                                 "in Storage Accounts." % container_name
-   456                                                           raise DuplicateResourceException(msg)
-   457                                           
-   458                                                   return self.blob_service.get_container_properties(container_name)
-
-Total time: 0 s
-File: /Users/alex/Desktop/work/cb-profiled/cloudbridge/cloudbridge/cloud/providers/azure/azure_client.py
-Function: get_container at line 460
-
-Line #      Hits         Time  Per Hit   % Time  Line Contents
-==============================================================
-   460                                               @profile
-   461                                               def get_container(self, container_name):
-   462                                                   return self.blob_service.get_container_properties(container_name)
-
-Total time: 0 s
-File: /Users/alex/Desktop/work/cb-profiled/cloudbridge/cloudbridge/cloud/providers/azure/azure_client.py
-Function: delete_container at line 464
-
-Line #      Hits         Time  Per Hit   % Time  Line Contents
-==============================================================
-   464                                               @profile
-   465                                               def delete_container(self, container_name):
-   466                                                   self.blob_service.delete_container(container_name)
-
-Total time: 0 s
-File: /Users/alex/Desktop/work/cb-profiled/cloudbridge/cloudbridge/cloud/providers/azure/azure_client.py
-Function: list_blobs at line 468
-
-Line #      Hits         Time  Per Hit   % Time  Line Contents
-==============================================================
-   468                                               @profile
-   469                                               def list_blobs(self, container_name, prefix=None):
-   470                                                   return self.blob_service.list_blobs(container_name, prefix=prefix)
-
-Total time: 0 s
-File: /Users/alex/Desktop/work/cb-profiled/cloudbridge/cloudbridge/cloud/providers/azure/azure_client.py
-Function: get_blob at line 472
-
-Line #      Hits         Time  Per Hit   % Time  Line Contents
-==============================================================
-   472                                               @profile
-   473                                               def get_blob(self, container_name, blob_name):
-   474                                                   return self.blob_service.get_blob_properties(container_name, blob_name)
-
-Total time: 0 s
-File: /Users/alex/Desktop/work/cb-profiled/cloudbridge/cloudbridge/cloud/providers/azure/azure_client.py
-Function: create_blob_from_text at line 476
-
-Line #      Hits         Time  Per Hit   % Time  Line Contents
-==============================================================
-   476                                               @profile
-   477                                               def create_blob_from_text(self, container_name, blob_name, text):
-   478                                                   self.blob_service.create_blob_from_text(container_name,
-   479                                                                                           blob_name, text)
-
-Total time: 0 s
-File: /Users/alex/Desktop/work/cb-profiled/cloudbridge/cloudbridge/cloud/providers/azure/azure_client.py
-Function: create_blob_from_file at line 481
-
-Line #      Hits         Time  Per Hit   % Time  Line Contents
-==============================================================
-   481                                               @profile
-   482                                               def create_blob_from_file(self, container_name, blob_name, file_path):
-   483                                                   self.blob_service.create_blob_from_path(container_name,
-   484                                                                                           blob_name, file_path)
-
-Total time: 0 s
-File: /Users/alex/Desktop/work/cb-profiled/cloudbridge/cloudbridge/cloud/providers/azure/azure_client.py
-Function: delete_blob at line 486
-
-Line #      Hits         Time  Per Hit   % Time  Line Contents
-==============================================================
-   486                                               @profile
-   487                                               def delete_blob(self, container_name, blob_name):
-   488                                                   self.blob_service.delete_blob(container_name, blob_name)
-
-Total time: 0 s
-File: /Users/alex/Desktop/work/cb-profiled/cloudbridge/cloudbridge/cloud/providers/azure/azure_client.py
-Function: get_blob_url at line 490
-
-Line #      Hits         Time  Per Hit   % Time  Line Contents
-==============================================================
-   490                                               @profile
-   491                                               def get_blob_url(self, container_name, blob_name, expiry_time):
-   492                                                   expiry_date = datetime.datetime.utcnow() + datetime.timedelta(
-   493                                                       seconds=expiry_time)
-   494                                                   sas = self.blob_service.generate_blob_shared_access_signature(
-   495                                                       container_name, blob_name, permission=BlobPermissions.READ,
-   496                                                       expiry=expiry_date)
-   497                                                   return self.blob_service.make_blob_url(container_name, blob_name,
-   498                                                                                          sas_token=sas)
-
-Total time: 0 s
-File: /Users/alex/Desktop/work/cb-profiled/cloudbridge/cloudbridge/cloud/providers/azure/azure_client.py
-Function: get_blob_content at line 500
-
-Line #      Hits         Time  Per Hit   % Time  Line Contents
-==============================================================
-   500                                               @profile
-   501                                               def get_blob_content(self, container_name, blob_name):
-   502                                                   out_stream = BytesIO()
-   503                                                   self.blob_service.get_blob_to_stream(container_name,
-   504                                                                                        blob_name, out_stream)
-   505                                                   return out_stream
-
-Total time: 154.785 s
-File: /Users/alex/Desktop/work/cb-profiled/cloudbridge/cloudbridge/cloud/providers/azure/azure_client.py
-Function: create_empty_disk at line 507
-
-Line #      Hits         Time  Per Hit   % Time  Line Contents
-==============================================================
-   507                                               @profile
-   508                                               def create_empty_disk(self, disk_name, params):
-   509         5      22114.0   4422.8      0.0          return self.compute_client.disks.create_or_update(
-   510         5         42.0      8.4      0.0              self.resource_group,
-   511         5          4.0      0.8      0.0              disk_name,
-   512         5  154763184.0 30952636.8    100.0              params
-   513                                                   ).result()
-
-Total time: 61.8265 s
-File: /Users/alex/Desktop/work/cb-profiled/cloudbridge/cloudbridge/cloud/providers/azure/azure_client.py
-Function: create_snapshot_disk at line 515
-
-Line #      Hits         Time  Per Hit   % Time  Line Contents
-==============================================================
-   515                                               @profile
-   516                                               def create_snapshot_disk(self, disk_name, params):
-   517         2        937.0    468.5      0.0          return self.compute_client.disks.create_or_update(
-   518         2         16.0      8.0      0.0              self.resource_group,
-   519         2          0.0      0.0      0.0              disk_name,
-   520         2   61825555.0 30912777.5    100.0              params
-   521                                                   ).result()
-
-Total time: 13.0483 s
-File: /Users/alex/Desktop/work/cb-profiled/cloudbridge/cloudbridge/cloud/providers/azure/azure_client.py
-Function: get_disk at line 523
-
-Line #      Hits         Time  Per Hit   % Time  Line Contents
-==============================================================
-   523                                               @profile
-   524                                               def get_disk(self, disk_id):
-   525        54        331.0      6.1      0.0          url_params = azure_helpers.parse_url(VOLUME_RESOURCE_ID,
-   526        54       2974.0     55.1      0.0                                               disk_id)
-   527        54        192.0      3.6      0.0          disk_name = url_params.get(VOLUME_NAME)
-   528        54   13044845.0 241571.2    100.0          return self.compute_client.disks.get(self.resource_group, disk_name)
-
-Total time: 0.003016 s
-File: /Users/alex/Desktop/work/cb-profiled/cloudbridge/cloudbridge/cloud/providers/azure/azure_client.py
-Function: list_disks at line 530
-
-Line #      Hits         Time  Per Hit   % Time  Line Contents
-==============================================================
-   530                                               @profile
-   531                                               def list_disks(self):
-   532         6       2752.0    458.7     91.2          return self.compute_client.disks. \
-   533         6        264.0     44.0      8.8              list_by_resource_group(self.resource_group)
-
-Total time: 275.18 s
-File: /Users/alex/Desktop/work/cb-profiled/cloudbridge/cloudbridge/cloud/providers/azure/azure_client.py
-Function: delete_disk at line 535
-
-Line #      Hits         Time  Per Hit   % Time  Line Contents
-==============================================================
-   535                                               @profile
-   536                                               def delete_disk(self, disk_id):
-   537         9         33.0      3.7      0.0          url_params = azure_helpers.parse_url(VOLUME_RESOURCE_ID,
-   538         9        272.0     30.2      0.0                                               disk_id)
-   539         9         11.0      1.2      0.0          disk_name = url_params.get(VOLUME_NAME)
-   540         9  275180033.0 30575559.2    100.0          self.compute_client.disks.delete(self.resource_group, disk_name).wait()
-
-Total time: 1.28909 s
-File: /Users/alex/Desktop/work/cb-profiled/cloudbridge/cloudbridge/cloud/providers/azure/azure_client.py
-Function: update_disk_tags at line 542
-
-Line #      Hits         Time  Per Hit   % Time  Line Contents
-==============================================================
-   542                                               @profile
-   543                                               def update_disk_tags(self, disk_id, tags):
-   544         4         13.0      3.2      0.0          url_params = azure_helpers.parse_url(VOLUME_RESOURCE_ID,
-   545         4        117.0     29.2      0.0                                               disk_id)
-   546         4          7.0      1.8      0.0          disk_name = url_params.get(VOLUME_NAME)
-   547         4       1914.0    478.5      0.1          return self.compute_client.disks.update(
-   548         4         30.0      7.5      0.0              self.resource_group,
-   549         4          1.0      0.2      0.0              disk_name,
-   550         4          3.0      0.8      0.0              {'tags': tags},
-   551         4    1287000.0 321750.0     99.8              raw=True
-   552                                                   )
-
-Total time: 0.006221 s
-File: /Users/alex/Desktop/work/cb-profiled/cloudbridge/cloudbridge/cloud/providers/azure/azure_client.py
-Function: list_snapshots at line 554
-
-Line #      Hits         Time  Per Hit   % Time  Line Contents
-==============================================================
-   554                                               @profile
-   555                                               def list_snapshots(self):
-   556        12       5710.0    475.8     91.8          return self.compute_client.snapshots. \
-   557        12        511.0     42.6      8.2              list_by_resource_group(self.resource_group)
-
-Total time: 2.48516 s
-File: /Users/alex/Desktop/work/cb-profiled/cloudbridge/cloudbridge/cloud/providers/azure/azure_client.py
-Function: get_snapshot at line 559
-
-Line #      Hits         Time  Per Hit   % Time  Line Contents
-==============================================================
-   559                                               @profile
-   560                                               def get_snapshot(self, snapshot_id):
-   561        12         53.0      4.4      0.0          url_params = azure_helpers.parse_url(SNAPSHOT_RESOURCE_ID,
-   562        12        622.0     51.8      0.0                                               snapshot_id)
-   563        12         30.0      2.5      0.0          snapshot_name = url_params.get(SNAPSHOT_NAME)
-   564        12       7012.0    584.3      0.3          return self.compute_client.snapshots.get(self.resource_group,
-   565        12    2477439.0 206453.2     99.7                                                   snapshot_name)
-
-Total time: 93.2656 s
-File: /Users/alex/Desktop/work/cb-profiled/cloudbridge/cloudbridge/cloud/providers/azure/azure_client.py
-Function: create_snapshot at line 567
-
-Line #      Hits         Time  Per Hit   % Time  Line Contents
-==============================================================
-   567                                               @profile
-   568                                               def create_snapshot(self, snapshot_name, params):
-   569         3       1486.0    495.3      0.0          return self.compute_client.snapshots.create_or_update(
-   570         3         25.0      8.3      0.0              self.resource_group,
-   571         3          1.0      0.3      0.0              snapshot_name,
-   572         3   93264095.0 31088031.7    100.0              params
-   573                                                   ).result()
-
-Total time: 91.916 s
-File: /Users/alex/Desktop/work/cb-profiled/cloudbridge/cloudbridge/cloud/providers/azure/azure_client.py
-Function: delete_snapshot at line 575
-
-Line #      Hits         Time  Per Hit   % Time  Line Contents
-==============================================================
-   575                                               @profile
-   576                                               def delete_snapshot(self, snapshot_id):
-   577         3         11.0      3.7      0.0          url_params = azure_helpers.parse_url(SNAPSHOT_RESOURCE_ID,
-   578         3         99.0     33.0      0.0                                               snapshot_id)
-   579         3          6.0      2.0      0.0          snapshot_name = url_params.get(SNAPSHOT_NAME)
-   580         3       1506.0    502.0      0.0          self.compute_client.snapshots.delete(self.resource_group,
-   581         3   91914390.0 30638130.0    100.0                                               snapshot_name).wait()
-
-Total time: 3.81265 s
-File: /Users/alex/Desktop/work/cb-profiled/cloudbridge/cloudbridge/cloud/providers/azure/azure_client.py
-Function: update_snapshot_tags at line 583
-
-Line #      Hits         Time  Per Hit   % Time  Line Contents
-==============================================================
-   583                                               @profile
-   584                                               def update_snapshot_tags(self, snapshot_id, tags):
-   585         8         24.0      3.0      0.0          url_params = azure_helpers.parse_url(SNAPSHOT_RESOURCE_ID,
-   586         8        242.0     30.2      0.0                                               snapshot_id)
-   587         8          9.0      1.1      0.0          snapshot_name = url_params.get(SNAPSHOT_NAME)
-   588         8       3725.0    465.6      0.1          return self.compute_client.snapshots.update(
-   589         8         66.0      8.2      0.0              self.resource_group,
-   590         8          5.0      0.6      0.0              snapshot_name,
-   591         8          7.0      0.9      0.0              {'tags': tags},
-   592         8    3808572.0 476071.5     99.9              raw=True
-   593                                                   )
-
-Total time: 5e-05 s
-File: /Users/alex/Desktop/work/cb-profiled/cloudbridge/cloudbridge/cloud/providers/azure/azure_client.py
-Function: is_gallery_image at line 595
-
-Line #      Hits         Time  Per Hit   % Time  Line Contents
-==============================================================
-   595                                               @profile
-   596                                               def is_gallery_image(self, image_id):
-   597         2          2.0      1.0      4.0          url_params = azure_helpers.parse_url(IMAGE_RESOURCE_ID,
-   598         2         46.0     23.0     92.0                                               image_id)
-   599                                                   # If it is a gallery image, it will always have an offer
-   600         2          2.0      1.0      4.0          return 'offer' in url_params
-
-Total time: 0 s
-File: /Users/alex/Desktop/work/cb-profiled/cloudbridge/cloudbridge/cloud/providers/azure/azure_client.py
-Function: create_image at line 602
-
-Line #      Hits         Time  Per Hit   % Time  Line Contents
-==============================================================
-   602                                               @profile
-   603                                               def create_image(self, name, params):
-   604                                                   return self.compute_client.images. \
-   605                                                       create_or_update(self.resource_group, name,
-   606                                                                        params).result()
-
-Total time: 0 s
-File: /Users/alex/Desktop/work/cb-profiled/cloudbridge/cloudbridge/cloud/providers/azure/azure_client.py
-Function: delete_image at line 608
-
-Line #      Hits         Time  Per Hit   % Time  Line Contents
-==============================================================
-   608                                               @profile
-   609                                               def delete_image(self, image_id):
-   610                                                   url_params = azure_helpers.parse_url(IMAGE_RESOURCE_ID,
-   611                                                                                        image_id)
-   612                                                   if not self.is_gallery_image(image_id):
-   613                                                       name = url_params.get(IMAGE_NAME)
-   614                                                       self.compute_client.images.delete(self.resource_group, name).wait()
-
-Total time: 0 s
-File: /Users/alex/Desktop/work/cb-profiled/cloudbridge/cloudbridge/cloud/providers/azure/azure_client.py
-Function: list_images at line 616
-
-Line #      Hits         Time  Per Hit   % Time  Line Contents
-==============================================================
-   616                                               @profile
-   617                                               def list_images(self):
-   618                                                   azure_images = list(self.compute_client.images.
-   619                                                                       list_by_resource_group(self.resource_group))
-   620                                                   return azure_images
-
-Total time: 0 s
-File: /Users/alex/Desktop/work/cb-profiled/cloudbridge/cloudbridge/cloud/providers/azure/azure_client.py
-Function: list_gallery_refs at line 622
-
-Line #      Hits         Time  Per Hit   % Time  Line Contents
-==============================================================
-   622                                               @profile
-   623                                               def list_gallery_refs(self):
-   624                                                   return gallery_image_references
-
-Total time: 0.000207 s
-File: /Users/alex/Desktop/work/cb-profiled/cloudbridge/cloudbridge/cloud/providers/azure/azure_client.py
-Function: get_image at line 626
-
-Line #      Hits         Time  Per Hit   % Time  Line Contents
-==============================================================
-   626                                               @profile
-   627                                               def get_image(self, image_id):
-   628         2          6.0      3.0      2.9          url_params = azure_helpers.parse_url(IMAGE_RESOURCE_ID,
-   629         2         70.0     35.0     33.8                                               image_id)
-   630         2         74.0     37.0     35.7          if self.is_gallery_image(image_id):
-   631         2          2.0      1.0      1.0              return GalleryImageReference(publisher=url_params['publisher'],
-   632         2          2.0      1.0      1.0                                           offer=url_params['offer'],
-   633         2          1.0      0.5      0.5                                           sku=url_params['sku'],
-   634         2         52.0     26.0     25.1                                           version=url_params['version'])
-   635                                                   else:
-   636                                                       name = url_params.get(IMAGE_NAME)
-   637                                                       return self.compute_client.images.get(self.resource_group, name)
-
-Total time: 0 s
-File: /Users/alex/Desktop/work/cb-profiled/cloudbridge/cloudbridge/cloud/providers/azure/azure_client.py
-Function: update_image_tags at line 639
-
-Line #      Hits         Time  Per Hit   % Time  Line Contents
-==============================================================
-   639                                               @profile
-   640                                               def update_image_tags(self, image_id, tags):
-   641                                                   url_params = azure_helpers.parse_url(IMAGE_RESOURCE_ID,
-   642                                                                                        image_id)
-   643                                                   if self.is_gallery_image(image_id):
-   644                                                       return True
-   645                                                   else:
-   646                                                       name = url_params.get(IMAGE_NAME)
-   647                                                       return self.compute_client.images. \
-   648                                                           create_or_update(self.resource_group, name,
-   649                                                                            {
-   650                                                                                'tags': tags,
-   651                                                                                'location': self.region_name
-   652                                                                            }).result()
-
-Total time: 0 s
-File: /Users/alex/Desktop/work/cb-profiled/cloudbridge/cloudbridge/cloud/providers/azure/azure_client.py
-Function: list_vm_types at line 654
-
-Line #      Hits         Time  Per Hit   % Time  Line Contents
-==============================================================
-   654                                               @profile
-   655                                               def list_vm_types(self):
-   656                                                   return self.compute_client.virtual_machine_sizes. \
-   657                                                       list(self.region_name)
-
-Total time: 0.016803 s
-File: /Users/alex/Desktop/work/cb-profiled/cloudbridge/cloudbridge/cloud/providers/azure/azure_client.py
-Function: list_networks at line 659
-
-Line #      Hits         Time  Per Hit   % Time  Line Contents
-==============================================================
-   659                                               @profile
-   660                                               def list_networks(self):
-   661         2      16665.0   8332.5     99.2          return self.network_management_client.virtual_networks.list(
-   662         2        138.0     69.0      0.8              self.resource_group)
-
-Total time: 1.48537 s
-File: /Users/alex/Desktop/work/cb-profiled/cloudbridge/cloudbridge/cloud/providers/azure/azure_client.py
-Function: get_network at line 664
-
-Line #      Hits         Time  Per Hit   % Time  Line Contents
-==============================================================
-   664                                               @profile
-   665                                               def get_network(self, network_id):
-   666         6          6.0      1.0      0.0          url_params = azure_helpers.parse_url(NETWORK_RESOURCE_ID,
-   667         6        132.0     22.0      0.0                                               network_id)
-   668         6          8.0      1.3      0.0          network_name = url_params.get(NETWORK_NAME)
-   669         6       4650.0    775.0      0.3          return self.network_management_client.virtual_networks.get(
-   670         6    1480579.0 246763.2     99.7              self.resource_group, network_name)
-
-Total time: 0 s
-File: /Users/alex/Desktop/work/cb-profiled/cloudbridge/cloudbridge/cloud/providers/azure/azure_client.py
-Function: create_network at line 672
-
-Line #      Hits         Time  Per Hit   % Time  Line Contents
-==============================================================
-   672                                               @profile
-   673                                               def create_network(self, name, params):
-   674                                                   return self.network_management_client.virtual_networks. \
-   675                                                       create_or_update(self.resource_group,
-   676                                                                        name,
-   677                                                                        parameters=params).result()
-
-Total time: 0 s
-File: /Users/alex/Desktop/work/cb-profiled/cloudbridge/cloudbridge/cloud/providers/azure/azure_client.py
-Function: delete_network at line 679
-
-Line #      Hits         Time  Per Hit   % Time  Line Contents
-==============================================================
-   679                                               @profile
-   680                                               def delete_network(self, network_id):
-   681                                                   url_params = azure_helpers.parse_url(NETWORK_RESOURCE_ID, network_id)
-   682                                                   network_name = url_params.get(NETWORK_NAME)
-   683                                                   return self.network_management_client.virtual_networks. \
-   684                                                       delete(self.resource_group, network_name).wait()
-
-Total time: 0 s
-File: /Users/alex/Desktop/work/cb-profiled/cloudbridge/cloudbridge/cloud/providers/azure/azure_client.py
-Function: update_network_tags at line 686
-
-Line #      Hits         Time  Per Hit   % Time  Line Contents
-==============================================================
-   686                                               @profile
-   687                                               def update_network_tags(self, network_id, tags):
-   688                                                   url_params = azure_helpers.parse_url(NETWORK_RESOURCE_ID, network_id)
-   689                                                   network_name = url_params.get(NETWORK_NAME)
-   690                                                   return self.network_management_client.virtual_networks. \
-   691                                                       create_or_update(self.resource_group,
-   692                                                                        network_name, tags).result()
-
-Total time: 0.000282 s
-File: /Users/alex/Desktop/work/cb-profiled/cloudbridge/cloudbridge/cloud/providers/azure/azure_client.py
-Function: get_network_id_for_subnet at line 694
-
-Line #      Hits         Time  Per Hit   % Time  Line Contents
-==============================================================
-   694                                               @profile
-   695                                               def get_network_id_for_subnet(self, subnet_id):
-   696         6        193.0     32.2     68.4          url_params = azure_helpers.parse_url(SUBNET_RESOURCE_ID, subnet_id)
-   697         6          9.0      1.5      3.2          network_id = NETWORK_RESOURCE_ID[0]
-   698        30         27.0      0.9      9.6          for key, val in url_params.items():
-   699        24         48.0      2.0     17.0              network_id = network_id.replace("{" + key + "}", val)
-   700         6          5.0      0.8      1.8          return network_id
-
-Total time: 0.001802 s
-File: /Users/alex/Desktop/work/cb-profiled/cloudbridge/cloudbridge/cloud/providers/azure/azure_client.py
-Function: list_subnets at line 702
-
-Line #      Hits         Time  Per Hit   % Time  Line Contents
-==============================================================
-   702                                               @profile
-   703                                               def list_subnets(self, network_id):
-   704         2         78.0     39.0      4.3          url_params = azure_helpers.parse_url(NETWORK_RESOURCE_ID, network_id)
-   705         2          3.0      1.5      0.2          network_name = url_params.get(NETWORK_NAME)
-   706         2       1599.0    799.5     88.7          return self.network_management_client.subnets. \
-   707         2        122.0     61.0      6.8              list(self.resource_group, network_name)
-
-Total time: 0 s
-File: /Users/alex/Desktop/work/cb-profiled/cloudbridge/cloudbridge/cloud/providers/azure/azure_client.py
-Function: get_subnet at line 709
-
-Line #      Hits         Time  Per Hit   % Time  Line Contents
-==============================================================
-   709                                               @profile
-   710                                               def get_subnet(self, subnet_id):
-   711                                                   url_params = azure_helpers.parse_url(SUBNET_RESOURCE_ID,
-   712                                                                                        subnet_id)
-   713                                                   network_name = url_params.get(NETWORK_NAME)
-   714                                                   subnet_name = url_params.get(SUBNET_NAME)
-   715                                                   return self.network_management_client.subnets. \
-   716                                                       get(self.resource_group, network_name, subnet_name)
-
-Total time: 0 s
-File: /Users/alex/Desktop/work/cb-profiled/cloudbridge/cloudbridge/cloud/providers/azure/azure_client.py
-Function: create_subnet at line 718
-
-Line #      Hits         Time  Per Hit   % Time  Line Contents
-==============================================================
-   718                                               @profile
-   719                                               def create_subnet(self, network_id, subnet_name, params):
-   720                                                   url_params = azure_helpers.parse_url(NETWORK_RESOURCE_ID, network_id)
-   721                                                   network_name = url_params.get(NETWORK_NAME)
-   722                                                   result_create = self.network_management_client \
-   723                                                       .subnets.create_or_update(
-   724                                                           self.resource_group,
-   725                                                           network_name,
-   726                                                           subnet_name,
-   727                                                           params
-   728                                                       )
-   729                                                   subnet_info = result_create.result()
-   730                                           
-   731                                                   return subnet_info
-
-Total time: 0 s
-File: /Users/alex/Desktop/work/cb-profiled/cloudbridge/cloudbridge/cloud/providers/azure/azure_client.py
-Function: __if_subnet_in_use at line 733
-
-Line #      Hits         Time  Per Hit   % Time  Line Contents
-==============================================================
-   733                                               @profile
-   734                                               def __if_subnet_in_use(e):
-   735                                                   # return True if the CloudError exception is due to subnet being in use
-   736                                                   if isinstance(e, CloudError):
-   737                                                       if e.error.error == "InUseSubnetCannotBeDeleted":
-   738                                                           return True
-   739                                                   return False
-
-Total time: 0 s
-File: /Users/alex/Desktop/work/cb-profiled/cloudbridge/cloudbridge/cloud/providers/azure/azure_client.py
-Function: delete_subnet at line 741
-
-Line #      Hits         Time  Per Hit   % Time  Line Contents
-==============================================================
-   741                                               @tenacity.retry(stop=tenacity.stop_after_attempt(5),
-   742                                                               retry=tenacity.retry_if_exception(__if_subnet_in_use),
-   743                                                               wait=tenacity.wait_fixed(5),
-   744                                                               reraise=True)
-   745                                               @profile
-   746                                               def delete_subnet(self, subnet_id):
-   747                                                   url_params = azure_helpers.parse_url(SUBNET_RESOURCE_ID,
-   748                                                                                        subnet_id)
-   749                                                   network_name = url_params.get(NETWORK_NAME)
-   750                                                   subnet_name = url_params.get(SUBNET_NAME)
-   751                                           
-   752                                                   try:
-   753                                                       result_delete = self.network_management_client \
-   754                                                           .subnets.delete(
-   755                                                               self.resource_group,
-   756                                                               network_name,
-   757                                                               subnet_name
-   758                                                           )
-   759                                                       result_delete.wait()
-   760                                                   except CloudError as cloud_error:
-   761                                                       log.exception(cloud_error.message)
-   762                                                       raise cloud_error
-
-Total time: 0 s
-File: /Users/alex/Desktop/work/cb-profiled/cloudbridge/cloudbridge/cloud/providers/azure/azure_client.py
-Function: create_floating_ip at line 764
-
-Line #      Hits         Time  Per Hit   % Time  Line Contents
-==============================================================
-   764                                               @profile
-   765                                               def create_floating_ip(self, public_ip_name, public_ip_parameters):
-   766                                                   return self.network_management_client.public_ip_addresses. \
-   767                                                       create_or_update(self.resource_group,
-   768                                                                        public_ip_name,
-   769                                                                        public_ip_parameters).result()
-
-Total time: 0 s
-File: /Users/alex/Desktop/work/cb-profiled/cloudbridge/cloudbridge/cloud/providers/azure/azure_client.py
-Function: get_floating_ip at line 771
-
-Line #      Hits         Time  Per Hit   % Time  Line Contents
-==============================================================
-   771                                               @profile
-   772                                               def get_floating_ip(self, public_ip_id):
-   773                                                   url_params = azure_helpers.parse_url(PUBLIC_IP_RESOURCE_ID,
-   774                                                                                        public_ip_id)
-   775                                                   public_ip_name = url_params.get(PUBLIC_IP_NAME)
-   776                                                   return self.network_management_client. \
-   777                                                       public_ip_addresses.get(self.resource_group, public_ip_name)
-
-Total time: 0 s
-File: /Users/alex/Desktop/work/cb-profiled/cloudbridge/cloudbridge/cloud/providers/azure/azure_client.py
-Function: delete_floating_ip at line 779
-
-Line #      Hits         Time  Per Hit   % Time  Line Contents
-==============================================================
-   779                                               @profile
-   780                                               def delete_floating_ip(self, public_ip_id):
-   781                                                   url_params = azure_helpers.parse_url(PUBLIC_IP_RESOURCE_ID,
-   782                                                                                        public_ip_id)
-   783                                                   public_ip_name = url_params.get(PUBLIC_IP_NAME)
-   784                                                   self.network_management_client. \
-   785                                                       public_ip_addresses.delete(self.resource_group,
-   786                                                                                  public_ip_name).wait()
-
-Total time: 0 s
-File: /Users/alex/Desktop/work/cb-profiled/cloudbridge/cloudbridge/cloud/providers/azure/azure_client.py
-Function: update_fip_tags at line 788
-
-Line #      Hits         Time  Per Hit   % Time  Line Contents
-==============================================================
-   788                                               @profile
-   789                                               def update_fip_tags(self, fip_id, tags):
-   790                                                   url_params = azure_helpers.parse_url(PUBLIC_IP_RESOURCE_ID,
-   791                                                                                        fip_id)
-   792                                                   fip_name = url_params.get(PUBLIC_IP_NAME)
-   793                                                   self.network_management_client.public_ip_addresses. \
-   794                                                       create_or_update(self.resource_group,
-   795                                                                        fip_name, tags).result()
-
-Total time: 0 s
-File: /Users/alex/Desktop/work/cb-profiled/cloudbridge/cloudbridge/cloud/providers/azure/azure_client.py
-Function: list_floating_ips at line 797
-
-Line #      Hits         Time  Per Hit   % Time  Line Contents
-==============================================================
-   797                                               @profile
-   798                                               def list_floating_ips(self):
-   799                                                   return self.network_management_client.public_ip_addresses.list(
-   800                                                       self.resource_group)
-
-Total time: 0.001097 s
-File: /Users/alex/Desktop/work/cb-profiled/cloudbridge/cloudbridge/cloud/providers/azure/azure_client.py
-Function: list_vm at line 802
-
-Line #      Hits         Time  Per Hit   % Time  Line Contents
-==============================================================
-   802                                               @profile
-   803                                               def list_vm(self):
-   804         2        968.0    484.0     88.2          return self.compute_client.virtual_machines.list(
-   805         2        129.0     64.5     11.8              self.resource_group
-   806                                                   )
-
-Total time: 0 s
-File: /Users/alex/Desktop/work/cb-profiled/cloudbridge/cloudbridge/cloud/providers/azure/azure_client.py
-Function: restart_vm at line 808
-
-Line #      Hits         Time  Per Hit   % Time  Line Contents
-==============================================================
-   808                                               @profile
-   809                                               def restart_vm(self, vm_id):
-   810                                                   url_params = azure_helpers.parse_url(VM_RESOURCE_ID,
-   811                                                                                        vm_id)
-   812                                                   vm_name = url_params.get(VM_NAME)
-   813                                                   return self.compute_client.virtual_machines.restart(
-   814                                                       self.resource_group, vm_name).wait()
-
-Total time: 81.5978 s
-File: /Users/alex/Desktop/work/cb-profiled/cloudbridge/cloudbridge/cloud/providers/azure/azure_client.py
-Function: delete_vm at line 816
-
-Line #      Hits         Time  Per Hit   % Time  Line Contents
-==============================================================
-   816                                               @profile
-   817                                               def delete_vm(self, vm_id):
-   818         2          6.0      3.0      0.0          url_params = azure_helpers.parse_url(VM_RESOURCE_ID,
-   819         2         56.0     28.0      0.0                                               vm_id)
-   820         2          3.0      1.5      0.0          vm_name = url_params.get(VM_NAME)
-   821         2        930.0    465.0      0.0          return self.compute_client.virtual_machines.delete(
-   822         2   81596835.0 40798417.5    100.0              self.resource_group, vm_name).wait()
-
-Total time: 1.73237 s
-File: /Users/alex/Desktop/work/cb-profiled/cloudbridge/cloudbridge/cloud/providers/azure/azure_client.py
-Function: get_vm at line 824
-
-Line #      Hits         Time  Per Hit   % Time  Line Contents
-==============================================================
-   824                                               @profile
-   825                                               def get_vm(self, vm_id):
-   826         6         29.0      4.8      0.0          url_params = azure_helpers.parse_url(VM_RESOURCE_ID,
-   827         6        367.0     61.2      0.0                                               vm_id)
-   828         6         13.0      2.2      0.0          vm_name = url_params.get(VM_NAME)
-   829         6       3885.0    647.5      0.2          return self.compute_client.virtual_machines.get(
-   830         6         62.0     10.3      0.0              self.resource_group,
-   831         6          4.0      0.7      0.0              vm_name,
-   832         6    1728012.0 288002.0     99.7              expand='instanceView'
-   833                                                   )
-
-Total time: 252.683 s
-File: /Users/alex/Desktop/work/cb-profiled/cloudbridge/cloudbridge/cloud/providers/azure/azure_client.py
-Function: create_vm at line 835
-
-Line #      Hits         Time  Per Hit   % Time  Line Contents
-==============================================================
-   835                                               @profile
-   836                                               def create_vm(self, vm_name, params):
-   837         2      15216.0   7608.0      0.0          return self.compute_client.virtual_machines. \
-   838         2         16.0      8.0      0.0              create_or_update(self.resource_group,
-   839         2  252667585.0 126333792.5    100.0                               vm_name, params).result()
-
-Total time: 2.57777 s
-File: /Users/alex/Desktop/work/cb-profiled/cloudbridge/cloudbridge/cloud/providers/azure/azure_client.py
-Function: update_vm at line 841
-
-Line #      Hits         Time  Per Hit   % Time  Line Contents
-==============================================================
-   841                                               @profile
-   842                                               def update_vm(self, vm_id, params):
-   843         4         13.0      3.2      0.0          url_params = azure_helpers.parse_url(VM_RESOURCE_ID,
-   844         4        103.0     25.8      0.0                                               vm_id)
-   845         4          6.0      1.5      0.0          vm_name = url_params.get(VM_NAME)
-   846         4       1852.0    463.0      0.1          return self.compute_client.virtual_machines. \
-   847         4         35.0      8.8      0.0              create_or_update(self.resource_group,
-   848         4    2575761.0 643940.2     99.9                               vm_name, params, raw=True)
-
-Total time: 215.106 s
-File: /Users/alex/Desktop/work/cb-profiled/cloudbridge/cloudbridge/cloud/providers/azure/azure_client.py
-Function: deallocate_vm at line 850
-
-Line #      Hits         Time  Per Hit   % Time  Line Contents
-==============================================================
-   850                                               @profile
-   851                                               def deallocate_vm(self, vm_id):
-   852         2          6.0      3.0      0.0          url_params = azure_helpers.parse_url(VM_RESOURCE_ID,
-   853         2         59.0     29.5      0.0                                               vm_id)
-   854         2          2.0      1.0      0.0          vm_name = url_params.get(VM_NAME)
-   855         2       1006.0    503.0      0.0          self.compute_client. \
-   856         2         33.0     16.5      0.0              virtual_machines.deallocate(self.resource_group,
-   857         2  215104764.0 107552382.0    100.0                                          vm_name).wait()
-
-Total time: 0 s
-File: /Users/alex/Desktop/work/cb-profiled/cloudbridge/cloudbridge/cloud/providers/azure/azure_client.py
-Function: generalize_vm at line 859
-
-Line #      Hits         Time  Per Hit   % Time  Line Contents
-==============================================================
-   859                                               @profile
-   860                                               def generalize_vm(self, vm_id):
-   861                                                   url_params = azure_helpers.parse_url(VM_RESOURCE_ID,
-   862                                                                                        vm_id)
-   863                                                   vm_name = url_params.get(VM_NAME)
-   864                                                   self.compute_client.virtual_machines. \
-   865                                                       generalize(self.resource_group, vm_name)
-
-Total time: 0 s
-File: /Users/alex/Desktop/work/cb-profiled/cloudbridge/cloudbridge/cloud/providers/azure/azure_client.py
-Function: start_vm at line 867
-
-Line #      Hits         Time  Per Hit   % Time  Line Contents
-==============================================================
-   867                                               @profile
-   868                                               def start_vm(self, vm_id):
-   869                                                   url_params = azure_helpers.parse_url(VM_RESOURCE_ID,
-   870                                                                                        vm_id)
-   871                                                   vm_name = url_params.get(VM_NAME)
-   872                                                   self.compute_client.virtual_machines. \
-   873                                                       start(self.resource_group,
-   874                                                             vm_name).wait()
-
-Total time: 0 s
-File: /Users/alex/Desktop/work/cb-profiled/cloudbridge/cloudbridge/cloud/providers/azure/azure_client.py
-Function: update_vm_tags at line 876
-
-Line #      Hits         Time  Per Hit   % Time  Line Contents
-==============================================================
-   876                                               @profile
-   877                                               def update_vm_tags(self, vm_id, tags):
-   878                                                   url_params = azure_helpers.parse_url(VM_RESOURCE_ID,
-   879                                                                                        vm_id)
-   880                                                   vm_name = url_params.get(VM_NAME)
-   881                                                   self.compute_client.virtual_machines. \
-   882                                                       create_or_update(self.resource_group,
-   883                                                                        vm_name, tags).result()
-
-Total time: 21.1995 s
-File: /Users/alex/Desktop/work/cb-profiled/cloudbridge/cloudbridge/cloud/providers/azure/azure_client.py
-Function: delete_nic at line 885
-
-Line #      Hits         Time  Per Hit   % Time  Line Contents
-==============================================================
-   885                                               @profile
-   886                                               def delete_nic(self, nic_id):
-   887         2          5.0      2.5      0.0          nic_params = azure_helpers.\
-   888         2         53.0     26.5      0.0              parse_url(NETWORK_INTERFACE_RESOURCE_ID, nic_id)
-   889         2          3.0      1.5      0.0          nic_name = nic_params.get(NETWORK_INTERFACE_NAME)
-   890         2       1409.0    704.5      0.0          self.network_management_client. \
-   891         2         16.0      8.0      0.0              network_interfaces.delete(self.resource_group,
-   892         2   21198019.0 10599009.5    100.0                                        nic_name).wait()
-
-Total time: 0.33701 s
-File: /Users/alex/Desktop/work/cb-profiled/cloudbridge/cloudbridge/cloud/providers/azure/azure_client.py
-Function: get_nic at line 894
-
-Line #      Hits         Time  Per Hit   % Time  Line Contents
-==============================================================
-   894                                               @profile
-   895                                               def get_nic(self, nic_id):
-   896         2          5.0      2.5      0.0          nic_params = azure_helpers.\
-   897         2         64.0     32.0      0.0              parse_url(NETWORK_INTERFACE_RESOURCE_ID, nic_id)
-   898         2          3.0      1.5      0.0          nic_name = nic_params.get(NETWORK_INTERFACE_NAME)
-   899         2       1771.0    885.5      0.5          return self.network_management_client. \
-   900         2     335167.0 167583.5     99.5              network_interfaces.get(self.resource_group, nic_name)
-
-Total time: 0 s
-File: /Users/alex/Desktop/work/cb-profiled/cloudbridge/cloudbridge/cloud/providers/azure/azure_client.py
-Function: update_nic at line 902
-
-Line #      Hits         Time  Per Hit   % Time  Line Contents
-==============================================================
-   902                                               @profile
-   903                                               def update_nic(self, nic_id, params):
-   904                                                   nic_params = azure_helpers.\
-   905                                                       parse_url(NETWORK_INTERFACE_RESOURCE_ID, nic_id)
-   906                                                   nic_name = nic_params.get(NETWORK_INTERFACE_NAME)
-   907                                                   async_nic_creation = self.network_management_client. \
-   908                                                       network_interfaces.create_or_update(
-   909                                                           self.resource_group,
-   910                                                           nic_name,
-   911                                                           params
-   912                                                       )
-   913                                                   nic_info = async_nic_creation.result()
-   914                                                   return nic_info
-
-Total time: 62.265 s
-File: /Users/alex/Desktop/work/cb-profiled/cloudbridge/cloudbridge/cloud/providers/azure/azure_client.py
-Function: create_nic at line 916
-
-Line #      Hits         Time  Per Hit   % Time  Line Contents
-==============================================================
-   916                                               @profile
-   917                                               def create_nic(self, nic_name, params):
-   918         2       1463.0    731.5      0.0          return self.network_management_client. \
-   919                                                       network_interfaces.create_or_update(
-   920         2         16.0      8.0      0.0                  self.resource_group,
-   921         2          2.0      1.0      0.0                  nic_name,
-   922         2   62263484.0 31131742.0    100.0                  params
-   923                                                       ).result()
-
-Total time: 0.11157 s
-File: /Users/alex/Desktop/work/cb-profiled/cloudbridge/cloudbridge/cloud/providers/azure/azure_client.py
-Function: create_public_key at line 925
-
-Line #      Hits         Time  Per Hit   % Time  Line Contents
-==============================================================
-   925                                               @profile
-   926                                               def create_public_key(self, entity):
-   927         2      50381.0  25190.5     45.2          return self.table_service. \
-   928         2         24.0     12.0      0.0              insert_or_replace_entity(self.public_key_storage_table_name,
-   929         2      61165.0  30582.5     54.8                                       entity)
-
-Total time: 2.3086 s
-File: /Users/alex/Desktop/work/cb-profiled/cloudbridge/cloudbridge/cloud/providers/azure/azure_client.py
-Function: get_public_key at line 931
-
-Line #      Hits         Time  Per Hit   % Time  Line Contents
-==============================================================
-   931                                               @profile
-   932                                               def get_public_key(self, name):
-   933         4    2143534.0 535883.5     92.9          entities = self.table_service. \
-   934         4         43.0     10.8      0.0              query_entities(self.public_key_storage_table_name,
-   935         4     165008.0  41252.0      7.1                             "Name eq '{0}'".format(name), num_results=1)
-   936                                           
-   937         4         11.0      2.8      0.0          return entities.items[0] if len(entities.items) > 0 else None
-
-Total time: 0.398418 s
-File: /Users/alex/Desktop/work/cb-profiled/cloudbridge/cloudbridge/cloud/providers/azure/azure_client.py
-Function: delete_public_key at line 939
-
-Line #      Hits         Time  Per Hit   % Time  Line Contents
-==============================================================
-   939                                               @profile
-   940                                               def delete_public_key(self, entity):
-   941         2     265317.0 132658.5     66.6          self.table_service.delete_entity(self.public_key_storage_table_name,
-   942         2     133101.0  66550.5     33.4                                           entity.PartitionKey, entity.RowKey)
-
-Total time: 0 s
-File: /Users/alex/Desktop/work/cb-profiled/cloudbridge/cloudbridge/cloud/providers/azure/azure_client.py
-Function: list_public_keys at line 944
-
-Line #      Hits         Time  Per Hit   % Time  Line Contents
-==============================================================
-   944                                               @profile
-   945                                               def list_public_keys(self, partition_key, limit=None, marker=None):
-   946                                                   entities = self.table_service. \
-   947                                                       query_entities(self.public_key_storage_table_name,
-   948                                                                      "PartitionKey eq '{0}'".format(partition_key),
-   949                                                                      marker=marker, num_results=limit)
-   950                                                   return (entities.items, entities.next_marker)
-
-Total time: 0 s
-File: /Users/alex/Desktop/work/cb-profiled/cloudbridge/cloudbridge/cloud/providers/azure/azure_client.py
-Function: delete_route_table at line 952
-
-Line #      Hits         Time  Per Hit   % Time  Line Contents
-==============================================================
-   952                                               @profile
-   953                                               def delete_route_table(self, route_table_name):
-   954                                                   self.network_management_client. \
-   955                                                       route_tables.delete(self.resource_group, route_table_name
-   956                                                                           ).wait()
-
-Total time: 0 s
-File: /Users/alex/Desktop/work/cb-profiled/cloudbridge/cloudbridge/cloud/providers/azure/azure_client.py
-Function: attach_subnet_to_route_table at line 958
-
-Line #      Hits         Time  Per Hit   % Time  Line Contents
-==============================================================
-   958                                               @profile
-   959                                               def attach_subnet_to_route_table(self, subnet_id, route_table_id):
-   960                                                   url_params = azure_helpers.parse_url(SUBNET_RESOURCE_ID,
-   961                                                                                        subnet_id)
-   962                                                   network_name = url_params.get(NETWORK_NAME)
-   963                                                   subnet_name = url_params.get(SUBNET_NAME)
-   964                                           
-   965                                                   subnet_info = self.network_management_client.subnets.get(
-   966                                                       self.resource_group,
-   967                                                       network_name,
-   968                                                       subnet_name
-   969                                                   )
-   970                                                   if subnet_info:
-   971                                                       subnet_info.route_table = {
-   972                                                           'id': route_table_id
-   973                                                       }
-   974                                           
-   975                                                       result_create = self.network_management_client. \
-   976                                                           subnets.create_or_update(
-   977                                                            self.resource_group,
-   978                                                            network_name,
-   979                                                            subnet_name,
-   980                                                            subnet_info)
-   981                                                       subnet_info = result_create.result()
-   982                                           
-   983                                                   return subnet_info
-
-Total time: 0 s
-File: /Users/alex/Desktop/work/cb-profiled/cloudbridge/cloudbridge/cloud/providers/azure/azure_client.py
-Function: detach_subnet_to_route_table at line 985
-
-Line #      Hits         Time  Per Hit   % Time  Line Contents
-==============================================================
-   985                                               @profile
-   986                                               def detach_subnet_to_route_table(self, subnet_id, route_table_id):
-   987                                                   url_params = azure_helpers.parse_url(SUBNET_RESOURCE_ID,
-   988                                                                                        subnet_id)
-   989                                                   network_name = url_params.get(NETWORK_NAME)
-   990                                                   subnet_name = url_params.get(SUBNET_NAME)
-   991                                           
-   992                                                   subnet_info = self.network_management_client.subnets.get(
-   993                                                       self.resource_group,
-   994                                                       network_name,
-   995                                                       subnet_name
-   996                                                   )
-   997                                           
-   998                                                   if subnet_info and subnet_info.route_table.id == route_table_id:
-   999                                                       subnet_info.route_table = None
-  1000                                           
-  1001                                                       result_create = self.network_management_client. \
-  1002                                                           subnets.create_or_update(
-  1003                                                            self.resource_group,
-  1004                                                            network_name,
-  1005                                                            subnet_name,
-  1006                                                            subnet_info)
-  1007                                                       subnet_info = result_create.result()
-  1008                                           
-  1009                                                   return subnet_info
-
-Total time: 0 s
-File: /Users/alex/Desktop/work/cb-profiled/cloudbridge/cloudbridge/cloud/providers/azure/azure_client.py
-Function: list_route_tables at line 1011
-
-Line #      Hits         Time  Per Hit   % Time  Line Contents
-==============================================================
-  1011                                               @profile
-  1012                                               def list_route_tables(self):
-  1013                                                   return self.network_management_client. \
-  1014                                                       route_tables.list(self.resource_group)
-
-Total time: 0 s
-File: /Users/alex/Desktop/work/cb-profiled/cloudbridge/cloudbridge/cloud/providers/azure/azure_client.py
-Function: get_route_table at line 1016
-
-Line #      Hits         Time  Per Hit   % Time  Line Contents
-==============================================================
-  1016                                               @profile
-  1017                                               def get_route_table(self, router_id):
-  1018                                                   url_params = azure_helpers.parse_url(ROUTER_RESOURCE_ID,
-  1019                                                                                        router_id)
-  1020                                                   router_name = url_params.get(ROUTER_NAME)
-  1021                                                   return self.network_management_client. \
-  1022                                                       route_tables.get(self.resource_group, router_name)
-
-Total time: 0 s
-File: /Users/alex/Desktop/work/cb-profiled/cloudbridge/cloudbridge/cloud/providers/azure/azure_client.py
-Function: create_route_table at line 1024
-
-Line #      Hits         Time  Per Hit   % Time  Line Contents
-==============================================================
-  1024                                               @profile
-  1025                                               def create_route_table(self, route_table_name, params):
-  1026                                                   return self.network_management_client. \
-  1027                                                       route_tables.create_or_update(
-  1028                                                        self.resource_group,
-  1029                                                        route_table_name, params).result()
-
-Total time: 0 s
-File: /Users/alex/Desktop/work/cb-profiled/cloudbridge/cloudbridge/cloud/providers/azure/azure_client.py
-Function: update_route_table_tags at line 1031
-
-Line #      Hits         Time  Per Hit   % Time  Line Contents
-==============================================================
-  1031                                               @profile
-  1032                                               def update_route_table_tags(self, route_table_name, tags):
-  1033                                                   self.network_management_client.route_tables. \
-  1034                                                       create_or_update(self.resource_group,
-  1035                                                                        route_table_name, tags).result()
-

+ 0 - 1470
results/cloud_factory.res

@@ -1,1470 +0,0 @@
-cloudbridge.test.test_cloud_factory.CloudFactoryTestCase
-
-
-Test output
- .........
-----------------------------------------------------------------------
-Ran 9 tests in 2.038s
-
-OK
-
-Wrote profile results to run_single.py.lprof
-Timer unit: 1e-06 s
-
-Total time: 0 s
-File: /Users/alex/Desktop/work/cb-profiled/profilenv/lib/python3.6/site-packages/cloudbridge/cloud/providers/azure/azure_client.py
-Function: __init__ at line 160
-
-Line #      Hits         Time  Per Hit   % Time  Line Contents
-==============================================================
-   160                                               @profile
-   161                                               def __init__(self, config):
-   162                                                   self._config = config
-   163                                                   self.subscription_id = str(config.get('azure_subscription_id'))
-   164                                                   self._credentials = ServicePrincipalCredentials(
-   165                                                       client_id=config.get('azure_client_id'),
-   166                                                       secret=config.get('azure_secret'),
-   167                                                       tenant=config.get('azure_tenant')
-   168                                                   )
-   169                                           
-   170                                                   self._access_token = config.get('azure_access_token')
-   171                                                   self._resource_client = None
-   172                                                   self._storage_client = None
-   173                                                   self._network_management_client = None
-   174                                                   self._subscription_client = None
-   175                                                   self._compute_client = None
-   176                                                   self._access_key_result = None
-   177                                                   self._block_blob_service = None
-   178                                                   self._table_service = None
-   179                                                   self._storage_account = None
-   180                                           
-   181                                                   log.debug("azure subscription : %s", self.subscription_id)
-
-Total time: 0 s
-File: /Users/alex/Desktop/work/cb-profiled/profilenv/lib/python3.6/site-packages/cloudbridge/cloud/providers/azure/azure_client.py
-Function: access_key_result at line 183
-
-Line #      Hits         Time  Per Hit   % Time  Line Contents
-==============================================================
-   183                                               @property
-   184                                               @tenacity.retry(stop=tenacity.stop_after_attempt(5), reraise=True)
-   185                                               @profile
-   186                                               def access_key_result(self):
-   187                                                   if not self._access_key_result:
-   188                                                       storage_account = self.storage_account
-   189                                           
-   190                                                       if self.get_storage_account(storage_account).\
-   191                                                               provisioning_state.value != 'Succeeded':
-   192                                                           log.debug(
-   193                                                               "Storage account %s is not in Succeeded state yet. ",
-   194                                                               storage_account)
-   195                                                           raise WaitStateException(
-   196                                                               "Waited too long for storage account: {0} to "
-   197                                                               "become ready.".format(
-   198                                                                   storage_account,
-   199                                                                   self.get_storage_account(storage_account).
-   200                                                                   provisioning_state))
-   201                                           
-   202                                                       self._access_key_result = self.storage_client.storage_accounts. \
-   203                                                           list_keys(self.resource_group, storage_account)
-   204                                                   return self._access_key_result
-
-Total time: 0 s
-File: /Users/alex/Desktop/work/cb-profiled/profilenv/lib/python3.6/site-packages/cloudbridge/cloud/providers/azure/azure_client.py
-Function: resource_group at line 206
-
-Line #      Hits         Time  Per Hit   % Time  Line Contents
-==============================================================
-   206                                               @property
-   207                                               @profile
-   208                                               def resource_group(self):
-   209                                                   return self._config.get('azure_resource_group')
-
-Total time: 0 s
-File: /Users/alex/Desktop/work/cb-profiled/profilenv/lib/python3.6/site-packages/cloudbridge/cloud/providers/azure/azure_client.py
-Function: storage_account at line 211
-
-Line #      Hits         Time  Per Hit   % Time  Line Contents
-==============================================================
-   211                                               @property
-   212                                               @profile
-   213                                               def storage_account(self):
-   214                                                   return self._config.get('azure_storage_account')
-
-Total time: 0 s
-File: /Users/alex/Desktop/work/cb-profiled/profilenv/lib/python3.6/site-packages/cloudbridge/cloud/providers/azure/azure_client.py
-Function: region_name at line 216
-
-Line #      Hits         Time  Per Hit   % Time  Line Contents
-==============================================================
-   216                                               @property
-   217                                               @profile
-   218                                               def region_name(self):
-   219                                                   return self._config.get('azure_region_name')
-
-Total time: 0 s
-File: /Users/alex/Desktop/work/cb-profiled/profilenv/lib/python3.6/site-packages/cloudbridge/cloud/providers/azure/azure_client.py
-Function: public_key_storage_table_name at line 221
-
-Line #      Hits         Time  Per Hit   % Time  Line Contents
-==============================================================
-   221                                               @property
-   222                                               @profile
-   223                                               def public_key_storage_table_name(self):
-   224                                                   return self._config.get('azure_public_key_storage_table_name')
-
-Total time: 0 s
-File: /Users/alex/Desktop/work/cb-profiled/profilenv/lib/python3.6/site-packages/cloudbridge/cloud/providers/azure/azure_client.py
-Function: storage_client at line 226
-
-Line #      Hits         Time  Per Hit   % Time  Line Contents
-==============================================================
-   226                                               @property
-   227                                               @profile
-   228                                               def storage_client(self):
-   229                                                   if not self._storage_client:
-   230                                                       self._storage_client = \
-   231                                                           StorageManagementClient(self._credentials,
-   232                                                                                   self.subscription_id)
-   233                                                   return self._storage_client
-
-Total time: 0 s
-File: /Users/alex/Desktop/work/cb-profiled/profilenv/lib/python3.6/site-packages/cloudbridge/cloud/providers/azure/azure_client.py
-Function: subscription_client at line 235
-
-Line #      Hits         Time  Per Hit   % Time  Line Contents
-==============================================================
-   235                                               @property
-   236                                               @profile
-   237                                               def subscription_client(self):
-   238                                                   if not self._subscription_client:
-   239                                                       self._subscription_client = SubscriptionClient(self._credentials)
-   240                                                   return self._subscription_client
-
-Total time: 0 s
-File: /Users/alex/Desktop/work/cb-profiled/profilenv/lib/python3.6/site-packages/cloudbridge/cloud/providers/azure/azure_client.py
-Function: resource_client at line 242
-
-Line #      Hits         Time  Per Hit   % Time  Line Contents
-==============================================================
-   242                                               @property
-   243                                               @profile
-   244                                               def resource_client(self):
-   245                                                   if not self._resource_client:
-   246                                                       self._resource_client = \
-   247                                                           ResourceManagementClient(self._credentials,
-   248                                                                                    self.subscription_id)
-   249                                                   return self._resource_client
-
-Total time: 0 s
-File: /Users/alex/Desktop/work/cb-profiled/profilenv/lib/python3.6/site-packages/cloudbridge/cloud/providers/azure/azure_client.py
-Function: compute_client at line 251
-
-Line #      Hits         Time  Per Hit   % Time  Line Contents
-==============================================================
-   251                                               @property
-   252                                               @profile
-   253                                               def compute_client(self):
-   254                                                   if not self._compute_client:
-   255                                                       self._compute_client = \
-   256                                                           ComputeManagementClient(self._credentials,
-   257                                                                                   self.subscription_id)
-   258                                                   return self._compute_client
-
-Total time: 0 s
-File: /Users/alex/Desktop/work/cb-profiled/profilenv/lib/python3.6/site-packages/cloudbridge/cloud/providers/azure/azure_client.py
-Function: network_management_client at line 260
-
-Line #      Hits         Time  Per Hit   % Time  Line Contents
-==============================================================
-   260                                               @property
-   261                                               @profile
-   262                                               def network_management_client(self):
-   263                                                   if not self._network_management_client:
-   264                                                       self._network_management_client = NetworkManagementClient(
-   265                                                           self._credentials, self.subscription_id)
-   266                                                   return self._network_management_client
-
-Total time: 0 s
-File: /Users/alex/Desktop/work/cb-profiled/profilenv/lib/python3.6/site-packages/cloudbridge/cloud/providers/azure/azure_client.py
-Function: blob_service at line 268
-
-Line #      Hits         Time  Per Hit   % Time  Line Contents
-==============================================================
-   268                                               @property
-   269                                               @profile
-   270                                               def blob_service(self):
-   271                                                   self._get_or_create_storage_account()
-   272                                                   if not self._block_blob_service:
-   273                                                       if self._access_token:
-   274                                                           token_credential = TokenCredential(self._access_token)
-   275                                                           self._block_blob_service = BlockBlobService(
-   276                                                               account_name=self.storage_account,
-   277                                                               token_credential=token_credential)
-   278                                                       else:
-   279                                                           self._block_blob_service = BlockBlobService(
-   280                                                               account_name=self.storage_account,
-   281                                                               account_key=self.access_key_result.keys[0].value)
-   282                                                   return self._block_blob_service
-
-Total time: 0 s
-File: /Users/alex/Desktop/work/cb-profiled/profilenv/lib/python3.6/site-packages/cloudbridge/cloud/providers/azure/azure_client.py
-Function: table_service at line 284
-
-Line #      Hits         Time  Per Hit   % Time  Line Contents
-==============================================================
-   284                                               @property
-   285                                               @profile
-   286                                               def table_service(self):
-   287                                                   self._get_or_create_storage_account()
-   288                                                   if not self._table_service:
-   289                                                       self._table_service = TableService(
-   290                                                           self.storage_account,
-   291                                                           self.access_key_result.keys[0].value)
-   292                                                   if not self._table_service. \
-   293                                                           exists(table_name=self.public_key_storage_table_name):
-   294                                                       self._table_service.create_table(
-   295                                                           self.public_key_storage_table_name)
-   296                                                   return self._table_service
-
-Total time: 0 s
-File: /Users/alex/Desktop/work/cb-profiled/profilenv/lib/python3.6/site-packages/cloudbridge/cloud/providers/azure/azure_client.py
-Function: get_resource_group at line 298
-
-Line #      Hits         Time  Per Hit   % Time  Line Contents
-==============================================================
-   298                                               @profile
-   299                                               def get_resource_group(self, name):
-   300                                                   return self.resource_client.resource_groups.get(name)
-
-Total time: 0 s
-File: /Users/alex/Desktop/work/cb-profiled/profilenv/lib/python3.6/site-packages/cloudbridge/cloud/providers/azure/azure_client.py
-Function: create_resource_group at line 302
-
-Line #      Hits         Time  Per Hit   % Time  Line Contents
-==============================================================
-   302                                               @profile
-   303                                               def create_resource_group(self, name, parameters):
-   304                                                   return self.resource_client.resource_groups. \
-   305                                                       create_or_update(name, parameters)
-
-Total time: 0 s
-File: /Users/alex/Desktop/work/cb-profiled/profilenv/lib/python3.6/site-packages/cloudbridge/cloud/providers/azure/azure_client.py
-Function: get_storage_account at line 307
-
-Line #      Hits         Time  Per Hit   % Time  Line Contents
-==============================================================
-   307                                               @profile
-   308                                               def get_storage_account(self, storage_account):
-   309                                                   return self.storage_client.storage_accounts. \
-   310                                                       get_properties(self.resource_group, storage_account)
-
-Total time: 0 s
-File: /Users/alex/Desktop/work/cb-profiled/profilenv/lib/python3.6/site-packages/cloudbridge/cloud/providers/azure/azure_client.py
-Function: create_storage_account at line 312
-
-Line #      Hits         Time  Per Hit   % Time  Line Contents
-==============================================================
-   312                                               @profile
-   313                                               def create_storage_account(self, name, params):
-   314                                                   return self.storage_client.storage_accounts. \
-   315                                                       create(self.resource_group, name.lower(), params).result()
-
-Total time: 0 s
-File: /Users/alex/Desktop/work/cb-profiled/profilenv/lib/python3.6/site-packages/cloudbridge/cloud/providers/azure/azure_client.py
-Function: _get_or_create_storage_account at line 319
-
-Line #      Hits         Time  Per Hit   % Time  Line Contents
-==============================================================
-   319                                               @tenacity.retry(stop=tenacity.stop_after_attempt(2),
-   320                                                               retry=tenacity.retry_if_exception_type(CloudError),
-   321                                                               reraise=True)
-   322                                               @profile
-   323                                               def _get_or_create_storage_account(self):
-   324                                                   if self._storage_account:
-   325                                                       return self._storage_account
-   326                                                   else:
-   327                                                       try:
-   328                                                           self._storage_account = \
-   329                                                               self.get_storage_account(self.storage_account)
-   330                                                       except CloudError as cloud_error:
-   331                                                           if cloud_error.error.error == "ResourceNotFound":
-   332                                                               storage_account_params = {
-   333                                                                   'sku': {
-   334                                                                       'name': 'Standard_LRS'
-   335                                                                   },
-   336                                                                   'kind': 'storage',
-   337                                                                   'location': self.region_name,
-   338                                                               }
-   339                                                               try:
-   340                                                                   self._storage_account = \
-   341                                                                       self.create_storage_account(self.storage_account,
-   342                                                                                                   storage_account_params)
-   343                                                               except CloudError as cloud_error2:  # pragma: no cover
-   344                                                                   if cloud_error2.error.error == "AuthorizationFailed":
-   345                                                                       mess = 'The following error was returned by ' \
-   346                                                                              'Azure:\n%s\n\nThis is likely because the' \
-   347                                                                              ' Role associated with the provided ' \
-   348                                                                              'credentials does not allow for Storage ' \
-   349                                                                              'Account creation.\nA Storage Account is ' \
-   350                                                                              'necessary in order to perform the ' \
-   351                                                                              'desired operation. You must either ' \
-   352                                                                              'provide an existing Storage Account name' \
-   353                                                                              ' as part of the configuration, or ' \
-   354                                                                              'elevate the associated Role.\nFor more ' \
-   355                                                                              'information on roles, see: https://docs.' \
-   356                                                                              'microsoft.com/en-us/azure/role-based-' \
-   357                                                                              'access-control/overview\n' % cloud_error2
-   358                                                                       raise ProviderConnectionException(mess)
-   359                                           
-   360                                                                   elif cloud_error2.error.error == \
-   361                                                                           "StorageAccountAlreadyTaken":
-   362                                                                       mess = 'The following error was ' \
-   363                                                                              'returned by Azure:\n%s\n\n' \
-   364                                                                              'Note that Storage Account names must be ' \
-   365                                                                              'unique across Azure (not just in your ' \
-   366                                                                              'subscription).\nFor more information ' \
-   367                                                                              'see https://docs.microsoft.com/en-us/' \
-   368                                                                              'azure/azure-resource-manager/resource-' \
-   369                                                                              'manager-storage-account-name-errors\n' \
-   370                                                                              % cloud_error2
-   371                                                                       raise InvalidLabelException(mess)
-   372                                                                   else:
-   373                                                                       raise cloud_error2
-   374                                                           else:
-   375                                                               raise cloud_error
-
-Total time: 0 s
-File: /Users/alex/Desktop/work/cb-profiled/profilenv/lib/python3.6/site-packages/cloudbridge/cloud/providers/azure/azure_client.py
-Function: list_locations at line 377
-
-Line #      Hits         Time  Per Hit   % Time  Line Contents
-==============================================================
-   377                                               @profile
-   378                                               def list_locations(self):
-   379                                                   return self.subscription_client.subscriptions. \
-   380                                                       list_locations(self.subscription_id)
-
-Total time: 0 s
-File: /Users/alex/Desktop/work/cb-profiled/profilenv/lib/python3.6/site-packages/cloudbridge/cloud/providers/azure/azure_client.py
-Function: list_vm_firewall at line 382
-
-Line #      Hits         Time  Per Hit   % Time  Line Contents
-==============================================================
-   382                                               @profile
-   383                                               def list_vm_firewall(self):
-   384                                                   return self.network_management_client.network_security_groups. \
-   385                                                       list(self.resource_group)
-
-Total time: 0 s
-File: /Users/alex/Desktop/work/cb-profiled/profilenv/lib/python3.6/site-packages/cloudbridge/cloud/providers/azure/azure_client.py
-Function: create_vm_firewall at line 387
-
-Line #      Hits         Time  Per Hit   % Time  Line Contents
-==============================================================
-   387                                               @profile
-   388                                               def create_vm_firewall(self, name, parameters):
-   389                                                   return self.network_management_client.network_security_groups. \
-   390                                                       create_or_update(self.resource_group, name,
-   391                                                                        parameters).result()
-
-Total time: 0 s
-File: /Users/alex/Desktop/work/cb-profiled/profilenv/lib/python3.6/site-packages/cloudbridge/cloud/providers/azure/azure_client.py
-Function: update_vm_firewall_tags at line 393
-
-Line #      Hits         Time  Per Hit   % Time  Line Contents
-==============================================================
-   393                                               @profile
-   394                                               def update_vm_firewall_tags(self, fw_id, tags):
-   395                                                   url_params = azure_helpers.parse_url(VM_FIREWALL_RESOURCE_ID,
-   396                                                                                        fw_id)
-   397                                                   name = url_params.get(VM_FIREWALL_NAME)
-   398                                                   return self.network_management_client.network_security_groups. \
-   399                                                       create_or_update(self.resource_group, name,
-   400                                                                        {'tags': tags,
-   401                                                                         'location': self.region_name}).result()
-
-Total time: 0 s
-File: /Users/alex/Desktop/work/cb-profiled/profilenv/lib/python3.6/site-packages/cloudbridge/cloud/providers/azure/azure_client.py
-Function: get_vm_firewall at line 403
-
-Line #      Hits         Time  Per Hit   % Time  Line Contents
-==============================================================
-   403                                               @profile
-   404                                               def get_vm_firewall(self, fw_id):
-   405                                                   url_params = azure_helpers.parse_url(VM_FIREWALL_RESOURCE_ID,
-   406                                                                                        fw_id)
-   407                                                   fw_name = url_params.get(VM_FIREWALL_NAME)
-   408                                                   return self.network_management_client.network_security_groups. \
-   409                                                       get(self.resource_group, fw_name)
-
-Total time: 0 s
-File: /Users/alex/Desktop/work/cb-profiled/profilenv/lib/python3.6/site-packages/cloudbridge/cloud/providers/azure/azure_client.py
-Function: delete_vm_firewall at line 411
-
-Line #      Hits         Time  Per Hit   % Time  Line Contents
-==============================================================
-   411                                               @profile
-   412                                               def delete_vm_firewall(self, fw_id):
-   413                                                   url_params = azure_helpers.parse_url(VM_FIREWALL_RESOURCE_ID,
-   414                                                                                        fw_id)
-   415                                                   name = url_params.get(VM_FIREWALL_NAME)
-   416                                                   self.network_management_client \
-   417                                                       .network_security_groups.delete(self.resource_group, name).wait()
-
-Total time: 0 s
-File: /Users/alex/Desktop/work/cb-profiled/profilenv/lib/python3.6/site-packages/cloudbridge/cloud/providers/azure/azure_client.py
-Function: create_vm_firewall_rule at line 419
-
-Line #      Hits         Time  Per Hit   % Time  Line Contents
-==============================================================
-   419                                               @profile
-   420                                               def create_vm_firewall_rule(self, fw_id,
-   421                                                                           rule_name, parameters):
-   422                                                   url_params = azure_helpers.parse_url(VM_FIREWALL_RESOURCE_ID,
-   423                                                                                        fw_id)
-   424                                                   vm_firewall_name = url_params.get(VM_FIREWALL_NAME)
-   425                                                   return self.network_management_client.security_rules. \
-   426                                                       create_or_update(self.resource_group, vm_firewall_name,
-   427                                                                        rule_name, parameters).result()
-
-Total time: 0 s
-File: /Users/alex/Desktop/work/cb-profiled/profilenv/lib/python3.6/site-packages/cloudbridge/cloud/providers/azure/azure_client.py
-Function: delete_vm_firewall_rule at line 429
-
-Line #      Hits         Time  Per Hit   % Time  Line Contents
-==============================================================
-   429                                               @profile
-   430                                               def delete_vm_firewall_rule(self, fw_rule_id, vm_firewall):
-   431                                                   url_params = azure_helpers.parse_url(VM_FIREWALL_RULE_RESOURCE_ID,
-   432                                                                                        fw_rule_id)
-   433                                                   name = url_params.get(VM_FIREWALL_RULE_NAME)
-   434                                                   return self.network_management_client.security_rules. \
-   435                                                       delete(self.resource_group, vm_firewall, name).result()
-
-Total time: 0 s
-File: /Users/alex/Desktop/work/cb-profiled/profilenv/lib/python3.6/site-packages/cloudbridge/cloud/providers/azure/azure_client.py
-Function: list_containers at line 437
-
-Line #      Hits         Time  Per Hit   % Time  Line Contents
-==============================================================
-   437                                               @profile
-   438                                               def list_containers(self, prefix=None, limit=None, marker=None):
-   439                                                   results = self.blob_service.list_containers(prefix=prefix,
-   440                                                                                               num_results=limit,
-   441                                                                                               marker=marker)
-   442                                                   return (results.items, results.next_marker)
-
-Total time: 0 s
-File: /Users/alex/Desktop/work/cb-profiled/profilenv/lib/python3.6/site-packages/cloudbridge/cloud/providers/azure/azure_client.py
-Function: create_container at line 444
-
-Line #      Hits         Time  Per Hit   % Time  Line Contents
-==============================================================
-   444                                               @profile
-   445                                               def create_container(self, container_name):
-   446                                                   try:
-   447                                                       self.blob_service.create_container(container_name,
-   448                                                                                          fail_on_exist=True)
-   449                                                   except AzureConflictHttpError as cloud_error:
-   450                                                       if cloud_error.error_code == "ContainerAlreadyExists":
-   451                                                           msg = "The given Bucket name '%s' already exists. Please " \
-   452                                                                 "use the `get` or `find` method to get a reference to " \
-   453                                                                 "an existing Bucket, or specify a new Bucket name to " \
-   454                                                                 "create.\nNote that in Azure, Buckets are contained " \
-   455                                                                 "in Storage Accounts." % container_name
-   456                                                           raise DuplicateResourceException(msg)
-   457                                           
-   458                                                   return self.blob_service.get_container_properties(container_name)
-
-Total time: 0 s
-File: /Users/alex/Desktop/work/cb-profiled/profilenv/lib/python3.6/site-packages/cloudbridge/cloud/providers/azure/azure_client.py
-Function: get_container at line 460
-
-Line #      Hits         Time  Per Hit   % Time  Line Contents
-==============================================================
-   460                                               @profile
-   461                                               def get_container(self, container_name):
-   462                                                   return self.blob_service.get_container_properties(container_name)
-
-Total time: 0 s
-File: /Users/alex/Desktop/work/cb-profiled/profilenv/lib/python3.6/site-packages/cloudbridge/cloud/providers/azure/azure_client.py
-Function: delete_container at line 464
-
-Line #      Hits         Time  Per Hit   % Time  Line Contents
-==============================================================
-   464                                               @profile
-   465                                               def delete_container(self, container_name):
-   466                                                   self.blob_service.delete_container(container_name)
-
-Total time: 0 s
-File: /Users/alex/Desktop/work/cb-profiled/profilenv/lib/python3.6/site-packages/cloudbridge/cloud/providers/azure/azure_client.py
-Function: list_blobs at line 468
-
-Line #      Hits         Time  Per Hit   % Time  Line Contents
-==============================================================
-   468                                               @profile
-   469                                               def list_blobs(self, container_name, prefix=None):
-   470                                                   return self.blob_service.list_blobs(container_name, prefix=prefix)
-
-Total time: 0 s
-File: /Users/alex/Desktop/work/cb-profiled/profilenv/lib/python3.6/site-packages/cloudbridge/cloud/providers/azure/azure_client.py
-Function: get_blob at line 472
-
-Line #      Hits         Time  Per Hit   % Time  Line Contents
-==============================================================
-   472                                               @profile
-   473                                               def get_blob(self, container_name, blob_name):
-   474                                                   return self.blob_service.get_blob_properties(container_name, blob_name)
-
-Total time: 0 s
-File: /Users/alex/Desktop/work/cb-profiled/profilenv/lib/python3.6/site-packages/cloudbridge/cloud/providers/azure/azure_client.py
-Function: create_blob_from_text at line 476
-
-Line #      Hits         Time  Per Hit   % Time  Line Contents
-==============================================================
-   476                                               @profile
-   477                                               def create_blob_from_text(self, container_name, blob_name, text):
-   478                                                   self.blob_service.create_blob_from_text(container_name,
-   479                                                                                           blob_name, text)
-
-Total time: 0 s
-File: /Users/alex/Desktop/work/cb-profiled/profilenv/lib/python3.6/site-packages/cloudbridge/cloud/providers/azure/azure_client.py
-Function: create_blob_from_file at line 481
-
-Line #      Hits         Time  Per Hit   % Time  Line Contents
-==============================================================
-   481                                               @profile
-   482                                               def create_blob_from_file(self, container_name, blob_name, file_path):
-   483                                                   self.blob_service.create_blob_from_path(container_name,
-   484                                                                                           blob_name, file_path)
-
-Total time: 0 s
-File: /Users/alex/Desktop/work/cb-profiled/profilenv/lib/python3.6/site-packages/cloudbridge/cloud/providers/azure/azure_client.py
-Function: delete_blob at line 486
-
-Line #      Hits         Time  Per Hit   % Time  Line Contents
-==============================================================
-   486                                               @profile
-   487                                               def delete_blob(self, container_name, blob_name):
-   488                                                   self.blob_service.delete_blob(container_name, blob_name)
-
-Total time: 0 s
-File: /Users/alex/Desktop/work/cb-profiled/profilenv/lib/python3.6/site-packages/cloudbridge/cloud/providers/azure/azure_client.py
-Function: get_blob_url at line 490
-
-Line #      Hits         Time  Per Hit   % Time  Line Contents
-==============================================================
-   490                                               @profile
-   491                                               def get_blob_url(self, container_name, blob_name, expiry_time):
-   492                                                   expiry_date = datetime.datetime.utcnow() + datetime.timedelta(
-   493                                                       seconds=expiry_time)
-   494                                                   sas = self.blob_service.generate_blob_shared_access_signature(
-   495                                                       container_name, blob_name, permission=BlobPermissions.READ,
-   496                                                       expiry=expiry_date)
-   497                                                   return self.blob_service.make_blob_url(container_name, blob_name,
-   498                                                                                          sas_token=sas)
-
-Total time: 0 s
-File: /Users/alex/Desktop/work/cb-profiled/profilenv/lib/python3.6/site-packages/cloudbridge/cloud/providers/azure/azure_client.py
-Function: get_blob_content at line 500
-
-Line #      Hits         Time  Per Hit   % Time  Line Contents
-==============================================================
-   500                                               @profile
-   501                                               def get_blob_content(self, container_name, blob_name):
-   502                                                   out_stream = BytesIO()
-   503                                                   self.blob_service.get_blob_to_stream(container_name,
-   504                                                                                        blob_name, out_stream)
-   505                                                   return out_stream
-
-Total time: 0 s
-File: /Users/alex/Desktop/work/cb-profiled/profilenv/lib/python3.6/site-packages/cloudbridge/cloud/providers/azure/azure_client.py
-Function: create_empty_disk at line 507
-
-Line #      Hits         Time  Per Hit   % Time  Line Contents
-==============================================================
-   507                                               @profile
-   508                                               def create_empty_disk(self, disk_name, params):
-   509                                                   return self.compute_client.disks.create_or_update(
-   510                                                       self.resource_group,
-   511                                                       disk_name,
-   512                                                       params
-   513                                                   ).result()
-
-Total time: 0 s
-File: /Users/alex/Desktop/work/cb-profiled/profilenv/lib/python3.6/site-packages/cloudbridge/cloud/providers/azure/azure_client.py
-Function: create_snapshot_disk at line 515
-
-Line #      Hits         Time  Per Hit   % Time  Line Contents
-==============================================================
-   515                                               @profile
-   516                                               def create_snapshot_disk(self, disk_name, params):
-   517                                                   return self.compute_client.disks.create_or_update(
-   518                                                       self.resource_group,
-   519                                                       disk_name,
-   520                                                       params
-   521                                                   ).result()
-
-Total time: 0 s
-File: /Users/alex/Desktop/work/cb-profiled/profilenv/lib/python3.6/site-packages/cloudbridge/cloud/providers/azure/azure_client.py
-Function: get_disk at line 523
-
-Line #      Hits         Time  Per Hit   % Time  Line Contents
-==============================================================
-   523                                               @profile
-   524                                               def get_disk(self, disk_id):
-   525                                                   url_params = azure_helpers.parse_url(VOLUME_RESOURCE_ID,
-   526                                                                                        disk_id)
-   527                                                   disk_name = url_params.get(VOLUME_NAME)
-   528                                                   return self.compute_client.disks.get(self.resource_group, disk_name)
-
-Total time: 0 s
-File: /Users/alex/Desktop/work/cb-profiled/profilenv/lib/python3.6/site-packages/cloudbridge/cloud/providers/azure/azure_client.py
-Function: list_disks at line 530
-
-Line #      Hits         Time  Per Hit   % Time  Line Contents
-==============================================================
-   530                                               @profile
-   531                                               def list_disks(self):
-   532                                                   return self.compute_client.disks. \
-   533                                                       list_by_resource_group(self.resource_group)
-
-Total time: 0 s
-File: /Users/alex/Desktop/work/cb-profiled/profilenv/lib/python3.6/site-packages/cloudbridge/cloud/providers/azure/azure_client.py
-Function: delete_disk at line 535
-
-Line #      Hits         Time  Per Hit   % Time  Line Contents
-==============================================================
-   535                                               @profile
-   536                                               def delete_disk(self, disk_id):
-   537                                                   url_params = azure_helpers.parse_url(VOLUME_RESOURCE_ID,
-   538                                                                                        disk_id)
-   539                                                   disk_name = url_params.get(VOLUME_NAME)
-   540                                                   self.compute_client.disks.delete(self.resource_group, disk_name).wait()
-
-Total time: 0 s
-File: /Users/alex/Desktop/work/cb-profiled/profilenv/lib/python3.6/site-packages/cloudbridge/cloud/providers/azure/azure_client.py
-Function: update_disk_tags at line 542
-
-Line #      Hits         Time  Per Hit   % Time  Line Contents
-==============================================================
-   542                                               @profile
-   543                                               def update_disk_tags(self, disk_id, tags):
-   544                                                   url_params = azure_helpers.parse_url(VOLUME_RESOURCE_ID,
-   545                                                                                        disk_id)
-   546                                                   disk_name = url_params.get(VOLUME_NAME)
-   547                                                   return self.compute_client.disks.update(
-   548                                                       self.resource_group,
-   549                                                       disk_name,
-   550                                                       {'tags': tags},
-   551                                                       raw=True
-   552                                                   )
-
-Total time: 0 s
-File: /Users/alex/Desktop/work/cb-profiled/profilenv/lib/python3.6/site-packages/cloudbridge/cloud/providers/azure/azure_client.py
-Function: list_snapshots at line 554
-
-Line #      Hits         Time  Per Hit   % Time  Line Contents
-==============================================================
-   554                                               @profile
-   555                                               def list_snapshots(self):
-   556                                                   return self.compute_client.snapshots. \
-   557                                                       list_by_resource_group(self.resource_group)
-
-Total time: 0 s
-File: /Users/alex/Desktop/work/cb-profiled/profilenv/lib/python3.6/site-packages/cloudbridge/cloud/providers/azure/azure_client.py
-Function: get_snapshot at line 559
-
-Line #      Hits         Time  Per Hit   % Time  Line Contents
-==============================================================
-   559                                               @profile
-   560                                               def get_snapshot(self, snapshot_id):
-   561                                                   url_params = azure_helpers.parse_url(SNAPSHOT_RESOURCE_ID,
-   562                                                                                        snapshot_id)
-   563                                                   snapshot_name = url_params.get(SNAPSHOT_NAME)
-   564                                                   return self.compute_client.snapshots.get(self.resource_group,
-   565                                                                                            snapshot_name)
-
-Total time: 0 s
-File: /Users/alex/Desktop/work/cb-profiled/profilenv/lib/python3.6/site-packages/cloudbridge/cloud/providers/azure/azure_client.py
-Function: create_snapshot at line 567
-
-Line #      Hits         Time  Per Hit   % Time  Line Contents
-==============================================================
-   567                                               @profile
-   568                                               def create_snapshot(self, snapshot_name, params):
-   569                                                   return self.compute_client.snapshots.create_or_update(
-   570                                                       self.resource_group,
-   571                                                       snapshot_name,
-   572                                                       params
-   573                                                   ).result()
-
-Total time: 0 s
-File: /Users/alex/Desktop/work/cb-profiled/profilenv/lib/python3.6/site-packages/cloudbridge/cloud/providers/azure/azure_client.py
-Function: delete_snapshot at line 575
-
-Line #      Hits         Time  Per Hit   % Time  Line Contents
-==============================================================
-   575                                               @profile
-   576                                               def delete_snapshot(self, snapshot_id):
-   577                                                   url_params = azure_helpers.parse_url(SNAPSHOT_RESOURCE_ID,
-   578                                                                                        snapshot_id)
-   579                                                   snapshot_name = url_params.get(SNAPSHOT_NAME)
-   580                                                   self.compute_client.snapshots.delete(self.resource_group,
-   581                                                                                        snapshot_name).wait()
-
-Total time: 0 s
-File: /Users/alex/Desktop/work/cb-profiled/profilenv/lib/python3.6/site-packages/cloudbridge/cloud/providers/azure/azure_client.py
-Function: update_snapshot_tags at line 583
-
-Line #      Hits         Time  Per Hit   % Time  Line Contents
-==============================================================
-   583                                               @profile
-   584                                               def update_snapshot_tags(self, snapshot_id, tags):
-   585                                                   url_params = azure_helpers.parse_url(SNAPSHOT_RESOURCE_ID,
-   586                                                                                        snapshot_id)
-   587                                                   snapshot_name = url_params.get(SNAPSHOT_NAME)
-   588                                                   return self.compute_client.snapshots.update(
-   589                                                       self.resource_group,
-   590                                                       snapshot_name,
-   591                                                       {'tags': tags},
-   592                                                       raw=True
-   593                                                   )
-
-Total time: 0 s
-File: /Users/alex/Desktop/work/cb-profiled/profilenv/lib/python3.6/site-packages/cloudbridge/cloud/providers/azure/azure_client.py
-Function: is_gallery_image at line 595
-
-Line #      Hits         Time  Per Hit   % Time  Line Contents
-==============================================================
-   595                                               @profile
-   596                                               def is_gallery_image(self, image_id):
-   597                                                   url_params = azure_helpers.parse_url(IMAGE_RESOURCE_ID,
-   598                                                                                        image_id)
-   599                                                   # If it is a gallery image, it will always have an offer
-   600                                                   return 'offer' in url_params
-
-Total time: 0 s
-File: /Users/alex/Desktop/work/cb-profiled/profilenv/lib/python3.6/site-packages/cloudbridge/cloud/providers/azure/azure_client.py
-Function: create_image at line 602
-
-Line #      Hits         Time  Per Hit   % Time  Line Contents
-==============================================================
-   602                                               @profile
-   603                                               def create_image(self, name, params):
-   604                                                   return self.compute_client.images. \
-   605                                                       create_or_update(self.resource_group, name,
-   606                                                                        params).result()
-
-Total time: 0 s
-File: /Users/alex/Desktop/work/cb-profiled/profilenv/lib/python3.6/site-packages/cloudbridge/cloud/providers/azure/azure_client.py
-Function: delete_image at line 608
-
-Line #      Hits         Time  Per Hit   % Time  Line Contents
-==============================================================
-   608                                               @profile
-   609                                               def delete_image(self, image_id):
-   610                                                   url_params = azure_helpers.parse_url(IMAGE_RESOURCE_ID,
-   611                                                                                        image_id)
-   612                                                   if not self.is_gallery_image(image_id):
-   613                                                       name = url_params.get(IMAGE_NAME)
-   614                                                       self.compute_client.images.delete(self.resource_group, name).wait()
-
-Total time: 0 s
-File: /Users/alex/Desktop/work/cb-profiled/profilenv/lib/python3.6/site-packages/cloudbridge/cloud/providers/azure/azure_client.py
-Function: list_images at line 616
-
-Line #      Hits         Time  Per Hit   % Time  Line Contents
-==============================================================
-   616                                               @profile
-   617                                               def list_images(self):
-   618                                                   azure_images = list(self.compute_client.images.
-   619                                                                       list_by_resource_group(self.resource_group))
-   620                                                   return azure_images
-
-Total time: 0 s
-File: /Users/alex/Desktop/work/cb-profiled/profilenv/lib/python3.6/site-packages/cloudbridge/cloud/providers/azure/azure_client.py
-Function: list_gallery_refs at line 622
-
-Line #      Hits         Time  Per Hit   % Time  Line Contents
-==============================================================
-   622                                               @profile
-   623                                               def list_gallery_refs(self):
-   624                                                   return gallery_image_references
-
-Total time: 0 s
-File: /Users/alex/Desktop/work/cb-profiled/profilenv/lib/python3.6/site-packages/cloudbridge/cloud/providers/azure/azure_client.py
-Function: get_image at line 626
-
-Line #      Hits         Time  Per Hit   % Time  Line Contents
-==============================================================
-   626                                               @profile
-   627                                               def get_image(self, image_id):
-   628                                                   url_params = azure_helpers.parse_url(IMAGE_RESOURCE_ID,
-   629                                                                                        image_id)
-   630                                                   if self.is_gallery_image(image_id):
-   631                                                       return GalleryImageReference(publisher=url_params['publisher'],
-   632                                                                                    offer=url_params['offer'],
-   633                                                                                    sku=url_params['sku'],
-   634                                                                                    version=url_params['version'])
-   635                                                   else:
-   636                                                       name = url_params.get(IMAGE_NAME)
-   637                                                       return self.compute_client.images.get(self.resource_group, name)
-
-Total time: 0 s
-File: /Users/alex/Desktop/work/cb-profiled/profilenv/lib/python3.6/site-packages/cloudbridge/cloud/providers/azure/azure_client.py
-Function: update_image_tags at line 639
-
-Line #      Hits         Time  Per Hit   % Time  Line Contents
-==============================================================
-   639                                               @profile
-   640                                               def update_image_tags(self, image_id, tags):
-   641                                                   url_params = azure_helpers.parse_url(IMAGE_RESOURCE_ID,
-   642                                                                                        image_id)
-   643                                                   if self.is_gallery_image(image_id):
-   644                                                       return True
-   645                                                   else:
-   646                                                       name = url_params.get(IMAGE_NAME)
-   647                                                       return self.compute_client.images. \
-   648                                                           create_or_update(self.resource_group, name,
-   649                                                                            {
-   650                                                                                'tags': tags,
-   651                                                                                'location': self.region_name
-   652                                                                            }).result()
-
-Total time: 0 s
-File: /Users/alex/Desktop/work/cb-profiled/profilenv/lib/python3.6/site-packages/cloudbridge/cloud/providers/azure/azure_client.py
-Function: list_vm_types at line 654
-
-Line #      Hits         Time  Per Hit   % Time  Line Contents
-==============================================================
-   654                                               @profile
-   655                                               def list_vm_types(self):
-   656                                                   return self.compute_client.virtual_machine_sizes. \
-   657                                                       list(self.region_name)
-
-Total time: 0 s
-File: /Users/alex/Desktop/work/cb-profiled/profilenv/lib/python3.6/site-packages/cloudbridge/cloud/providers/azure/azure_client.py
-Function: list_networks at line 659
-
-Line #      Hits         Time  Per Hit   % Time  Line Contents
-==============================================================
-   659                                               @profile
-   660                                               def list_networks(self):
-   661                                                   return self.network_management_client.virtual_networks.list(
-   662                                                       self.resource_group)
-
-Total time: 0 s
-File: /Users/alex/Desktop/work/cb-profiled/profilenv/lib/python3.6/site-packages/cloudbridge/cloud/providers/azure/azure_client.py
-Function: get_network at line 664
-
-Line #      Hits         Time  Per Hit   % Time  Line Contents
-==============================================================
-   664                                               @profile
-   665                                               def get_network(self, network_id):
-   666                                                   url_params = azure_helpers.parse_url(NETWORK_RESOURCE_ID,
-   667                                                                                        network_id)
-   668                                                   network_name = url_params.get(NETWORK_NAME)
-   669                                                   return self.network_management_client.virtual_networks.get(
-   670                                                       self.resource_group, network_name)
-
-Total time: 0 s
-File: /Users/alex/Desktop/work/cb-profiled/profilenv/lib/python3.6/site-packages/cloudbridge/cloud/providers/azure/azure_client.py
-Function: create_network at line 672
-
-Line #      Hits         Time  Per Hit   % Time  Line Contents
-==============================================================
-   672                                               @profile
-   673                                               def create_network(self, name, params):
-   674                                                   return self.network_management_client.virtual_networks. \
-   675                                                       create_or_update(self.resource_group,
-   676                                                                        name,
-   677                                                                        parameters=params).result()
-
-Total time: 0 s
-File: /Users/alex/Desktop/work/cb-profiled/profilenv/lib/python3.6/site-packages/cloudbridge/cloud/providers/azure/azure_client.py
-Function: delete_network at line 679
-
-Line #      Hits         Time  Per Hit   % Time  Line Contents
-==============================================================
-   679                                               @profile
-   680                                               def delete_network(self, network_id):
-   681                                                   url_params = azure_helpers.parse_url(NETWORK_RESOURCE_ID, network_id)
-   682                                                   network_name = url_params.get(NETWORK_NAME)
-   683                                                   return self.network_management_client.virtual_networks. \
-   684                                                       delete(self.resource_group, network_name).wait()
-
-Total time: 0 s
-File: /Users/alex/Desktop/work/cb-profiled/profilenv/lib/python3.6/site-packages/cloudbridge/cloud/providers/azure/azure_client.py
-Function: update_network_tags at line 686
-
-Line #      Hits         Time  Per Hit   % Time  Line Contents
-==============================================================
-   686                                               @profile
-   687                                               def update_network_tags(self, network_id, tags):
-   688                                                   url_params = azure_helpers.parse_url(NETWORK_RESOURCE_ID, network_id)
-   689                                                   network_name = url_params.get(NETWORK_NAME)
-   690                                                   return self.network_management_client.virtual_networks. \
-   691                                                       create_or_update(self.resource_group,
-   692                                                                        network_name, tags).result()
-
-Total time: 0 s
-File: /Users/alex/Desktop/work/cb-profiled/profilenv/lib/python3.6/site-packages/cloudbridge/cloud/providers/azure/azure_client.py
-Function: get_network_id_for_subnet at line 694
-
-Line #      Hits         Time  Per Hit   % Time  Line Contents
-==============================================================
-   694                                               @profile
-   695                                               def get_network_id_for_subnet(self, subnet_id):
-   696                                                   url_params = azure_helpers.parse_url(SUBNET_RESOURCE_ID, subnet_id)
-   697                                                   network_id = NETWORK_RESOURCE_ID[0]
-   698                                                   for key, val in url_params.items():
-   699                                                       network_id = network_id.replace("{" + key + "}", val)
-   700                                                   return network_id
-
-Total time: 0 s
-File: /Users/alex/Desktop/work/cb-profiled/profilenv/lib/python3.6/site-packages/cloudbridge/cloud/providers/azure/azure_client.py
-Function: list_subnets at line 702
-
-Line #      Hits         Time  Per Hit   % Time  Line Contents
-==============================================================
-   702                                               @profile
-   703                                               def list_subnets(self, network_id):
-   704                                                   url_params = azure_helpers.parse_url(NETWORK_RESOURCE_ID, network_id)
-   705                                                   network_name = url_params.get(NETWORK_NAME)
-   706                                                   return self.network_management_client.subnets. \
-   707                                                       list(self.resource_group, network_name)
-
-Total time: 0 s
-File: /Users/alex/Desktop/work/cb-profiled/profilenv/lib/python3.6/site-packages/cloudbridge/cloud/providers/azure/azure_client.py
-Function: get_subnet at line 709
-
-Line #      Hits         Time  Per Hit   % Time  Line Contents
-==============================================================
-   709                                               @profile
-   710                                               def get_subnet(self, subnet_id):
-   711                                                   url_params = azure_helpers.parse_url(SUBNET_RESOURCE_ID,
-   712                                                                                        subnet_id)
-   713                                                   network_name = url_params.get(NETWORK_NAME)
-   714                                                   subnet_name = url_params.get(SUBNET_NAME)
-   715                                                   return self.network_management_client.subnets. \
-   716                                                       get(self.resource_group, network_name, subnet_name)
-
-Total time: 0 s
-File: /Users/alex/Desktop/work/cb-profiled/profilenv/lib/python3.6/site-packages/cloudbridge/cloud/providers/azure/azure_client.py
-Function: create_subnet at line 718
-
-Line #      Hits         Time  Per Hit   % Time  Line Contents
-==============================================================
-   718                                               @profile
-   719                                               def create_subnet(self, network_id, subnet_name, params):
-   720                                                   url_params = azure_helpers.parse_url(NETWORK_RESOURCE_ID, network_id)
-   721                                                   network_name = url_params.get(NETWORK_NAME)
-   722                                                   result_create = self.network_management_client \
-   723                                                       .subnets.create_or_update(
-   724                                                           self.resource_group,
-   725                                                           network_name,
-   726                                                           subnet_name,
-   727                                                           params
-   728                                                       )
-   729                                                   subnet_info = result_create.result()
-   730                                           
-   731                                                   return subnet_info
-
-Total time: 0 s
-File: /Users/alex/Desktop/work/cb-profiled/profilenv/lib/python3.6/site-packages/cloudbridge/cloud/providers/azure/azure_client.py
-Function: __if_subnet_in_use at line 733
-
-Line #      Hits         Time  Per Hit   % Time  Line Contents
-==============================================================
-   733                                               @profile
-   734                                               def __if_subnet_in_use(e):
-   735                                                   # return True if the CloudError exception is due to subnet being in use
-   736                                                   if isinstance(e, CloudError):
-   737                                                       if e.error.error == "InUseSubnetCannotBeDeleted":
-   738                                                           return True
-   739                                                   return False
-
-Total time: 0 s
-File: /Users/alex/Desktop/work/cb-profiled/profilenv/lib/python3.6/site-packages/cloudbridge/cloud/providers/azure/azure_client.py
-Function: delete_subnet at line 741
-
-Line #      Hits         Time  Per Hit   % Time  Line Contents
-==============================================================
-   741                                               @tenacity.retry(stop=tenacity.stop_after_attempt(5),
-   742                                                               retry=tenacity.retry_if_exception(__if_subnet_in_use),
-   743                                                               wait=tenacity.wait_fixed(5),
-   744                                                               reraise=True)
-   745                                               @profile
-   746                                               def delete_subnet(self, subnet_id):
-   747                                                   url_params = azure_helpers.parse_url(SUBNET_RESOURCE_ID,
-   748                                                                                        subnet_id)
-   749                                                   network_name = url_params.get(NETWORK_NAME)
-   750                                                   subnet_name = url_params.get(SUBNET_NAME)
-   751                                           
-   752                                                   try:
-   753                                                       result_delete = self.network_management_client \
-   754                                                           .subnets.delete(
-   755                                                               self.resource_group,
-   756                                                               network_name,
-   757                                                               subnet_name
-   758                                                           )
-   759                                                       result_delete.wait()
-   760                                                   except CloudError as cloud_error:
-   761                                                       log.exception(cloud_error.message)
-   762                                                       raise cloud_error
-
-Total time: 0 s
-File: /Users/alex/Desktop/work/cb-profiled/profilenv/lib/python3.6/site-packages/cloudbridge/cloud/providers/azure/azure_client.py
-Function: create_floating_ip at line 764
-
-Line #      Hits         Time  Per Hit   % Time  Line Contents
-==============================================================
-   764                                               @profile
-   765                                               def create_floating_ip(self, public_ip_name, public_ip_parameters):
-   766                                                   return self.network_management_client.public_ip_addresses. \
-   767                                                       create_or_update(self.resource_group,
-   768                                                                        public_ip_name,
-   769                                                                        public_ip_parameters).result()
-
-Total time: 0 s
-File: /Users/alex/Desktop/work/cb-profiled/profilenv/lib/python3.6/site-packages/cloudbridge/cloud/providers/azure/azure_client.py
-Function: get_floating_ip at line 771
-
-Line #      Hits         Time  Per Hit   % Time  Line Contents
-==============================================================
-   771                                               @profile
-   772                                               def get_floating_ip(self, public_ip_id):
-   773                                                   url_params = azure_helpers.parse_url(PUBLIC_IP_RESOURCE_ID,
-   774                                                                                        public_ip_id)
-   775                                                   public_ip_name = url_params.get(PUBLIC_IP_NAME)
-   776                                                   return self.network_management_client. \
-   777                                                       public_ip_addresses.get(self.resource_group, public_ip_name)
-
-Total time: 0 s
-File: /Users/alex/Desktop/work/cb-profiled/profilenv/lib/python3.6/site-packages/cloudbridge/cloud/providers/azure/azure_client.py
-Function: delete_floating_ip at line 779
-
-Line #      Hits         Time  Per Hit   % Time  Line Contents
-==============================================================
-   779                                               @profile
-   780                                               def delete_floating_ip(self, public_ip_id):
-   781                                                   url_params = azure_helpers.parse_url(PUBLIC_IP_RESOURCE_ID,
-   782                                                                                        public_ip_id)
-   783                                                   public_ip_name = url_params.get(PUBLIC_IP_NAME)
-   784                                                   self.network_management_client. \
-   785                                                       public_ip_addresses.delete(self.resource_group,
-   786                                                                                  public_ip_name).wait()
-
-Total time: 0 s
-File: /Users/alex/Desktop/work/cb-profiled/profilenv/lib/python3.6/site-packages/cloudbridge/cloud/providers/azure/azure_client.py
-Function: update_fip_tags at line 788
-
-Line #      Hits         Time  Per Hit   % Time  Line Contents
-==============================================================
-   788                                               @profile
-   789                                               def update_fip_tags(self, fip_id, tags):
-   790                                                   url_params = azure_helpers.parse_url(PUBLIC_IP_RESOURCE_ID,
-   791                                                                                        fip_id)
-   792                                                   fip_name = url_params.get(PUBLIC_IP_NAME)
-   793                                                   self.network_management_client.public_ip_addresses. \
-   794                                                       create_or_update(self.resource_group,
-   795                                                                        fip_name, tags).result()
-
-Total time: 0 s
-File: /Users/alex/Desktop/work/cb-profiled/profilenv/lib/python3.6/site-packages/cloudbridge/cloud/providers/azure/azure_client.py
-Function: list_floating_ips at line 797
-
-Line #      Hits         Time  Per Hit   % Time  Line Contents
-==============================================================
-   797                                               @profile
-   798                                               def list_floating_ips(self):
-   799                                                   return self.network_management_client.public_ip_addresses.list(
-   800                                                       self.resource_group)
-
-Total time: 0 s
-File: /Users/alex/Desktop/work/cb-profiled/profilenv/lib/python3.6/site-packages/cloudbridge/cloud/providers/azure/azure_client.py
-Function: list_vm at line 802
-
-Line #      Hits         Time  Per Hit   % Time  Line Contents
-==============================================================
-   802                                               @profile
-   803                                               def list_vm(self):
-   804                                                   return self.compute_client.virtual_machines.list(
-   805                                                       self.resource_group
-   806                                                   )
-
-Total time: 0 s
-File: /Users/alex/Desktop/work/cb-profiled/profilenv/lib/python3.6/site-packages/cloudbridge/cloud/providers/azure/azure_client.py
-Function: restart_vm at line 808
-
-Line #      Hits         Time  Per Hit   % Time  Line Contents
-==============================================================
-   808                                               @profile
-   809                                               def restart_vm(self, vm_id):
-   810                                                   url_params = azure_helpers.parse_url(VM_RESOURCE_ID,
-   811                                                                                        vm_id)
-   812                                                   vm_name = url_params.get(VM_NAME)
-   813                                                   return self.compute_client.virtual_machines.restart(
-   814                                                       self.resource_group, vm_name).wait()
-
-Total time: 0 s
-File: /Users/alex/Desktop/work/cb-profiled/profilenv/lib/python3.6/site-packages/cloudbridge/cloud/providers/azure/azure_client.py
-Function: delete_vm at line 816
-
-Line #      Hits         Time  Per Hit   % Time  Line Contents
-==============================================================
-   816                                               @profile
-   817                                               def delete_vm(self, vm_id):
-   818                                                   url_params = azure_helpers.parse_url(VM_RESOURCE_ID,
-   819                                                                                        vm_id)
-   820                                                   vm_name = url_params.get(VM_NAME)
-   821                                                   return self.compute_client.virtual_machines.delete(
-   822                                                       self.resource_group, vm_name).wait()
-
-Total time: 0 s
-File: /Users/alex/Desktop/work/cb-profiled/profilenv/lib/python3.6/site-packages/cloudbridge/cloud/providers/azure/azure_client.py
-Function: get_vm at line 824
-
-Line #      Hits         Time  Per Hit   % Time  Line Contents
-==============================================================
-   824                                               @profile
-   825                                               def get_vm(self, vm_id):
-   826                                                   url_params = azure_helpers.parse_url(VM_RESOURCE_ID,
-   827                                                                                        vm_id)
-   828                                                   vm_name = url_params.get(VM_NAME)
-   829                                                   return self.compute_client.virtual_machines.get(
-   830                                                       self.resource_group,
-   831                                                       vm_name,
-   832                                                       expand='instanceView'
-   833                                                   )
-
-Total time: 0 s
-File: /Users/alex/Desktop/work/cb-profiled/profilenv/lib/python3.6/site-packages/cloudbridge/cloud/providers/azure/azure_client.py
-Function: create_vm at line 835
-
-Line #      Hits         Time  Per Hit   % Time  Line Contents
-==============================================================
-   835                                               @profile
-   836                                               def create_vm(self, vm_name, params):
-   837                                                   return self.compute_client.virtual_machines. \
-   838                                                       create_or_update(self.resource_group,
-   839                                                                        vm_name, params).result()
-
-Total time: 0 s
-File: /Users/alex/Desktop/work/cb-profiled/profilenv/lib/python3.6/site-packages/cloudbridge/cloud/providers/azure/azure_client.py
-Function: update_vm at line 841
-
-Line #      Hits         Time  Per Hit   % Time  Line Contents
-==============================================================
-   841                                               @profile
-   842                                               def update_vm(self, vm_id, params):
-   843                                                   url_params = azure_helpers.parse_url(VM_RESOURCE_ID,
-   844                                                                                        vm_id)
-   845                                                   vm_name = url_params.get(VM_NAME)
-   846                                                   return self.compute_client.virtual_machines. \
-   847                                                       create_or_update(self.resource_group,
-   848                                                                        vm_name, params, raw=True)
-
-Total time: 0 s
-File: /Users/alex/Desktop/work/cb-profiled/profilenv/lib/python3.6/site-packages/cloudbridge/cloud/providers/azure/azure_client.py
-Function: deallocate_vm at line 850
-
-Line #      Hits         Time  Per Hit   % Time  Line Contents
-==============================================================
-   850                                               @profile
-   851                                               def deallocate_vm(self, vm_id):
-   852                                                   url_params = azure_helpers.parse_url(VM_RESOURCE_ID,
-   853                                                                                        vm_id)
-   854                                                   vm_name = url_params.get(VM_NAME)
-   855                                                   self.compute_client. \
-   856                                                       virtual_machines.deallocate(self.resource_group,
-   857                                                                                   vm_name).wait()
-
-Total time: 0 s
-File: /Users/alex/Desktop/work/cb-profiled/profilenv/lib/python3.6/site-packages/cloudbridge/cloud/providers/azure/azure_client.py
-Function: generalize_vm at line 859
-
-Line #      Hits         Time  Per Hit   % Time  Line Contents
-==============================================================
-   859                                               @profile
-   860                                               def generalize_vm(self, vm_id):
-   861                                                   url_params = azure_helpers.parse_url(VM_RESOURCE_ID,
-   862                                                                                        vm_id)
-   863                                                   vm_name = url_params.get(VM_NAME)
-   864                                                   self.compute_client.virtual_machines. \
-   865                                                       generalize(self.resource_group, vm_name)
-
-Total time: 0 s
-File: /Users/alex/Desktop/work/cb-profiled/profilenv/lib/python3.6/site-packages/cloudbridge/cloud/providers/azure/azure_client.py
-Function: start_vm at line 867
-
-Line #      Hits         Time  Per Hit   % Time  Line Contents
-==============================================================
-   867                                               @profile
-   868                                               def start_vm(self, vm_id):
-   869                                                   url_params = azure_helpers.parse_url(VM_RESOURCE_ID,
-   870                                                                                        vm_id)
-   871                                                   vm_name = url_params.get(VM_NAME)
-   872                                                   self.compute_client.virtual_machines. \
-   873                                                       start(self.resource_group,
-   874                                                             vm_name).wait()
-
-Total time: 0 s
-File: /Users/alex/Desktop/work/cb-profiled/profilenv/lib/python3.6/site-packages/cloudbridge/cloud/providers/azure/azure_client.py
-Function: update_vm_tags at line 876
-
-Line #      Hits         Time  Per Hit   % Time  Line Contents
-==============================================================
-   876                                               @profile
-   877                                               def update_vm_tags(self, vm_id, tags):
-   878                                                   url_params = azure_helpers.parse_url(VM_RESOURCE_ID,
-   879                                                                                        vm_id)
-   880                                                   vm_name = url_params.get(VM_NAME)
-   881                                                   self.compute_client.virtual_machines. \
-   882                                                       create_or_update(self.resource_group,
-   883                                                                        vm_name, tags).result()
-
-Total time: 0 s
-File: /Users/alex/Desktop/work/cb-profiled/profilenv/lib/python3.6/site-packages/cloudbridge/cloud/providers/azure/azure_client.py
-Function: delete_nic at line 885
-
-Line #      Hits         Time  Per Hit   % Time  Line Contents
-==============================================================
-   885                                               @profile
-   886                                               def delete_nic(self, nic_id):
-   887                                                   nic_params = azure_helpers.\
-   888                                                       parse_url(NETWORK_INTERFACE_RESOURCE_ID, nic_id)
-   889                                                   nic_name = nic_params.get(NETWORK_INTERFACE_NAME)
-   890                                                   self.network_management_client. \
-   891                                                       network_interfaces.delete(self.resource_group,
-   892                                                                                 nic_name).wait()
-
-Total time: 0 s
-File: /Users/alex/Desktop/work/cb-profiled/profilenv/lib/python3.6/site-packages/cloudbridge/cloud/providers/azure/azure_client.py
-Function: get_nic at line 894
-
-Line #      Hits         Time  Per Hit   % Time  Line Contents
-==============================================================
-   894                                               @profile
-   895                                               def get_nic(self, nic_id):
-   896                                                   nic_params = azure_helpers.\
-   897                                                       parse_url(NETWORK_INTERFACE_RESOURCE_ID, nic_id)
-   898                                                   nic_name = nic_params.get(NETWORK_INTERFACE_NAME)
-   899                                                   return self.network_management_client. \
-   900                                                       network_interfaces.get(self.resource_group, nic_name)
-
-Total time: 0 s
-File: /Users/alex/Desktop/work/cb-profiled/profilenv/lib/python3.6/site-packages/cloudbridge/cloud/providers/azure/azure_client.py
-Function: update_nic at line 902
-
-Line #      Hits         Time  Per Hit   % Time  Line Contents
-==============================================================
-   902                                               @profile
-   903                                               def update_nic(self, nic_id, params):
-   904                                                   nic_params = azure_helpers.\
-   905                                                       parse_url(NETWORK_INTERFACE_RESOURCE_ID, nic_id)
-   906                                                   nic_name = nic_params.get(NETWORK_INTERFACE_NAME)
-   907                                                   async_nic_creation = self.network_management_client. \
-   908                                                       network_interfaces.create_or_update(
-   909                                                           self.resource_group,
-   910                                                           nic_name,
-   911                                                           params
-   912                                                       )
-   913                                                   nic_info = async_nic_creation.result()
-   914                                                   return nic_info
-
-Total time: 0 s
-File: /Users/alex/Desktop/work/cb-profiled/profilenv/lib/python3.6/site-packages/cloudbridge/cloud/providers/azure/azure_client.py
-Function: create_nic at line 916
-
-Line #      Hits         Time  Per Hit   % Time  Line Contents
-==============================================================
-   916                                               @profile
-   917                                               def create_nic(self, nic_name, params):
-   918                                                   return self.network_management_client. \
-   919                                                       network_interfaces.create_or_update(
-   920                                                           self.resource_group,
-   921                                                           nic_name,
-   922                                                           params
-   923                                                       ).result()
-
-Total time: 0 s
-File: /Users/alex/Desktop/work/cb-profiled/profilenv/lib/python3.6/site-packages/cloudbridge/cloud/providers/azure/azure_client.py
-Function: create_public_key at line 925
-
-Line #      Hits         Time  Per Hit   % Time  Line Contents
-==============================================================
-   925                                               @profile
-   926                                               def create_public_key(self, entity):
-   927                                                   return self.table_service. \
-   928                                                       insert_or_replace_entity(self.public_key_storage_table_name,
-   929                                                                                entity)
-
-Total time: 0 s
-File: /Users/alex/Desktop/work/cb-profiled/profilenv/lib/python3.6/site-packages/cloudbridge/cloud/providers/azure/azure_client.py
-Function: get_public_key at line 931
-
-Line #      Hits         Time  Per Hit   % Time  Line Contents
-==============================================================
-   931                                               @profile
-   932                                               def get_public_key(self, name):
-   933                                                   entities = self.table_service. \
-   934                                                       query_entities(self.public_key_storage_table_name,
-   935                                                                      "Name eq '{0}'".format(name), num_results=1)
-   936                                           
-   937                                                   return entities.items[0] if len(entities.items) > 0 else None
-
-Total time: 0 s
-File: /Users/alex/Desktop/work/cb-profiled/profilenv/lib/python3.6/site-packages/cloudbridge/cloud/providers/azure/azure_client.py
-Function: delete_public_key at line 939
-
-Line #      Hits         Time  Per Hit   % Time  Line Contents
-==============================================================
-   939                                               @profile
-   940                                               def delete_public_key(self, entity):
-   941                                                   self.table_service.delete_entity(self.public_key_storage_table_name,
-   942                                                                                    entity.PartitionKey, entity.RowKey)
-
-Total time: 0 s
-File: /Users/alex/Desktop/work/cb-profiled/profilenv/lib/python3.6/site-packages/cloudbridge/cloud/providers/azure/azure_client.py
-Function: list_public_keys at line 944
-
-Line #      Hits         Time  Per Hit   % Time  Line Contents
-==============================================================
-   944                                               @profile
-   945                                               def list_public_keys(self, partition_key, limit=None, marker=None):
-   946                                                   entities = self.table_service. \
-   947                                                       query_entities(self.public_key_storage_table_name,
-   948                                                                      "PartitionKey eq '{0}'".format(partition_key),
-   949                                                                      marker=marker, num_results=limit)
-   950                                                   return (entities.items, entities.next_marker)
-
-Total time: 0 s
-File: /Users/alex/Desktop/work/cb-profiled/profilenv/lib/python3.6/site-packages/cloudbridge/cloud/providers/azure/azure_client.py
-Function: delete_route_table at line 952
-
-Line #      Hits         Time  Per Hit   % Time  Line Contents
-==============================================================
-   952                                               @profile
-   953                                               def delete_route_table(self, route_table_name):
-   954                                                   self.network_management_client. \
-   955                                                       route_tables.delete(self.resource_group, route_table_name
-   956                                                                           ).wait()
-
-Total time: 0 s
-File: /Users/alex/Desktop/work/cb-profiled/profilenv/lib/python3.6/site-packages/cloudbridge/cloud/providers/azure/azure_client.py
-Function: attach_subnet_to_route_table at line 958
-
-Line #      Hits         Time  Per Hit   % Time  Line Contents
-==============================================================
-   958                                               @profile
-   959                                               def attach_subnet_to_route_table(self, subnet_id, route_table_id):
-   960                                                   url_params = azure_helpers.parse_url(SUBNET_RESOURCE_ID,
-   961                                                                                        subnet_id)
-   962                                                   network_name = url_params.get(NETWORK_NAME)
-   963                                                   subnet_name = url_params.get(SUBNET_NAME)
-   964                                           
-   965                                                   subnet_info = self.network_management_client.subnets.get(
-   966                                                       self.resource_group,
-   967                                                       network_name,
-   968                                                       subnet_name
-   969                                                   )
-   970                                                   if subnet_info:
-   971                                                       subnet_info.route_table = {
-   972                                                           'id': route_table_id
-   973                                                       }
-   974                                           
-   975                                                       result_create = self.network_management_client. \
-   976                                                           subnets.create_or_update(
-   977                                                            self.resource_group,
-   978                                                            network_name,
-   979                                                            subnet_name,
-   980                                                            subnet_info)
-   981                                                       subnet_info = result_create.result()
-   982                                           
-   983                                                   return subnet_info
-
-Total time: 0 s
-File: /Users/alex/Desktop/work/cb-profiled/profilenv/lib/python3.6/site-packages/cloudbridge/cloud/providers/azure/azure_client.py
-Function: detach_subnet_to_route_table at line 985
-
-Line #      Hits         Time  Per Hit   % Time  Line Contents
-==============================================================
-   985                                               @profile
-   986                                               def detach_subnet_to_route_table(self, subnet_id, route_table_id):
-   987                                                   url_params = azure_helpers.parse_url(SUBNET_RESOURCE_ID,
-   988                                                                                        subnet_id)
-   989                                                   network_name = url_params.get(NETWORK_NAME)
-   990                                                   subnet_name = url_params.get(SUBNET_NAME)
-   991                                           
-   992                                                   subnet_info = self.network_management_client.subnets.get(
-   993                                                       self.resource_group,
-   994                                                       network_name,
-   995                                                       subnet_name
-   996                                                   )
-   997                                           
-   998                                                   if subnet_info and subnet_info.route_table.id == route_table_id:
-   999                                                       subnet_info.route_table = None
-  1000                                           
-  1001                                                       result_create = self.network_management_client. \
-  1002                                                           subnets.create_or_update(
-  1003                                                            self.resource_group,
-  1004                                                            network_name,
-  1005                                                            subnet_name,
-  1006                                                            subnet_info)
-  1007                                                       subnet_info = result_create.result()
-  1008                                           
-  1009                                                   return subnet_info
-
-Total time: 0 s
-File: /Users/alex/Desktop/work/cb-profiled/profilenv/lib/python3.6/site-packages/cloudbridge/cloud/providers/azure/azure_client.py
-Function: list_route_tables at line 1011
-
-Line #      Hits         Time  Per Hit   % Time  Line Contents
-==============================================================
-  1011                                               @profile
-  1012                                               def list_route_tables(self):
-  1013                                                   return self.network_management_client. \
-  1014                                                       route_tables.list(self.resource_group)
-
-Total time: 0 s
-File: /Users/alex/Desktop/work/cb-profiled/profilenv/lib/python3.6/site-packages/cloudbridge/cloud/providers/azure/azure_client.py
-Function: get_route_table at line 1016
-
-Line #      Hits         Time  Per Hit   % Time  Line Contents
-==============================================================
-  1016                                               @profile
-  1017                                               def get_route_table(self, router_id):
-  1018                                                   url_params = azure_helpers.parse_url(ROUTER_RESOURCE_ID,
-  1019                                                                                        router_id)
-  1020                                                   router_name = url_params.get(ROUTER_NAME)
-  1021                                                   return self.network_management_client. \
-  1022                                                       route_tables.get(self.resource_group, router_name)
-
-Total time: 0 s
-File: /Users/alex/Desktop/work/cb-profiled/profilenv/lib/python3.6/site-packages/cloudbridge/cloud/providers/azure/azure_client.py
-Function: create_route_table at line 1024
-
-Line #      Hits         Time  Per Hit   % Time  Line Contents
-==============================================================
-  1024                                               @profile
-  1025                                               def create_route_table(self, route_table_name, params):
-  1026                                                   return self.network_management_client. \
-  1027                                                       route_tables.create_or_update(
-  1028                                                        self.resource_group,
-  1029                                                        route_table_name, params).result()
-
-Total time: 0 s
-File: /Users/alex/Desktop/work/cb-profiled/profilenv/lib/python3.6/site-packages/cloudbridge/cloud/providers/azure/azure_client.py
-Function: update_route_table_tags at line 1031
-
-Line #      Hits         Time  Per Hit   % Time  Line Contents
-==============================================================
-  1031                                               @profile
-  1032                                               def update_route_table_tags(self, route_table_name, tags):
-  1033                                                   self.network_management_client.route_tables. \
-  1034                                                       create_or_update(self.resource_group,
-  1035                                                                        route_table_name, tags).result()
-

+ 0 - 1478
results/cloud_helpers.res

@@ -1,1478 +0,0 @@
-cloudbridge.test.test_cloud_helpers.CloudHelpersTestCase
-
-
-Test output
- ..F
-======================================================================
-FAIL: test_type_validation (cloudbridge.test.test_cloud_helpers.CloudHelpersTestCase)
-----------------------------------------------------------------------
-Traceback (most recent call last):
-  File "/Users/alex/Desktop/work/cb-profiled/profilenv/lib/python3.6/site-packages/cloudbridge/test/test_cloud_helpers.py", line 92, in test_type_validation
-    self.assertIsInstance(env_value, six.string_types)
-AssertionError: None is not an instance of (<class 'str'>,)
-
-----------------------------------------------------------------------
-Ran 3 tests in 1.333s
-
-FAILED (failures=1)
-
-Wrote profile results to run_single.py.lprof
-Timer unit: 1e-06 s
-
-Total time: 0 s
-File: /Users/alex/Desktop/work/cb-profiled/profilenv/lib/python3.6/site-packages/cloudbridge/cloud/providers/azure/azure_client.py
-Function: __init__ at line 160
-
-Line #      Hits         Time  Per Hit   % Time  Line Contents
-==============================================================
-   160                                               @profile
-   161                                               def __init__(self, config):
-   162                                                   self._config = config
-   163                                                   self.subscription_id = str(config.get('azure_subscription_id'))
-   164                                                   self._credentials = ServicePrincipalCredentials(
-   165                                                       client_id=config.get('azure_client_id'),
-   166                                                       secret=config.get('azure_secret'),
-   167                                                       tenant=config.get('azure_tenant')
-   168                                                   )
-   169                                           
-   170                                                   self._access_token = config.get('azure_access_token')
-   171                                                   self._resource_client = None
-   172                                                   self._storage_client = None
-   173                                                   self._network_management_client = None
-   174                                                   self._subscription_client = None
-   175                                                   self._compute_client = None
-   176                                                   self._access_key_result = None
-   177                                                   self._block_blob_service = None
-   178                                                   self._table_service = None
-   179                                                   self._storage_account = None
-   180                                           
-   181                                                   log.debug("azure subscription : %s", self.subscription_id)
-
-Total time: 0 s
-File: /Users/alex/Desktop/work/cb-profiled/profilenv/lib/python3.6/site-packages/cloudbridge/cloud/providers/azure/azure_client.py
-Function: access_key_result at line 183
-
-Line #      Hits         Time  Per Hit   % Time  Line Contents
-==============================================================
-   183                                               @property
-   184                                               @tenacity.retry(stop=tenacity.stop_after_attempt(5), reraise=True)
-   185                                               @profile
-   186                                               def access_key_result(self):
-   187                                                   if not self._access_key_result:
-   188                                                       storage_account = self.storage_account
-   189                                           
-   190                                                       if self.get_storage_account(storage_account).\
-   191                                                               provisioning_state.value != 'Succeeded':
-   192                                                           log.debug(
-   193                                                               "Storage account %s is not in Succeeded state yet. ",
-   194                                                               storage_account)
-   195                                                           raise WaitStateException(
-   196                                                               "Waited too long for storage account: {0} to "
-   197                                                               "become ready.".format(
-   198                                                                   storage_account,
-   199                                                                   self.get_storage_account(storage_account).
-   200                                                                   provisioning_state))
-   201                                           
-   202                                                       self._access_key_result = self.storage_client.storage_accounts. \
-   203                                                           list_keys(self.resource_group, storage_account)
-   204                                                   return self._access_key_result
-
-Total time: 0 s
-File: /Users/alex/Desktop/work/cb-profiled/profilenv/lib/python3.6/site-packages/cloudbridge/cloud/providers/azure/azure_client.py
-Function: resource_group at line 206
-
-Line #      Hits         Time  Per Hit   % Time  Line Contents
-==============================================================
-   206                                               @property
-   207                                               @profile
-   208                                               def resource_group(self):
-   209                                                   return self._config.get('azure_resource_group')
-
-Total time: 0 s
-File: /Users/alex/Desktop/work/cb-profiled/profilenv/lib/python3.6/site-packages/cloudbridge/cloud/providers/azure/azure_client.py
-Function: storage_account at line 211
-
-Line #      Hits         Time  Per Hit   % Time  Line Contents
-==============================================================
-   211                                               @property
-   212                                               @profile
-   213                                               def storage_account(self):
-   214                                                   return self._config.get('azure_storage_account')
-
-Total time: 0 s
-File: /Users/alex/Desktop/work/cb-profiled/profilenv/lib/python3.6/site-packages/cloudbridge/cloud/providers/azure/azure_client.py
-Function: region_name at line 216
-
-Line #      Hits         Time  Per Hit   % Time  Line Contents
-==============================================================
-   216                                               @property
-   217                                               @profile
-   218                                               def region_name(self):
-   219                                                   return self._config.get('azure_region_name')
-
-Total time: 0 s
-File: /Users/alex/Desktop/work/cb-profiled/profilenv/lib/python3.6/site-packages/cloudbridge/cloud/providers/azure/azure_client.py
-Function: public_key_storage_table_name at line 221
-
-Line #      Hits         Time  Per Hit   % Time  Line Contents
-==============================================================
-   221                                               @property
-   222                                               @profile
-   223                                               def public_key_storage_table_name(self):
-   224                                                   return self._config.get('azure_public_key_storage_table_name')
-
-Total time: 0 s
-File: /Users/alex/Desktop/work/cb-profiled/profilenv/lib/python3.6/site-packages/cloudbridge/cloud/providers/azure/azure_client.py
-Function: storage_client at line 226
-
-Line #      Hits         Time  Per Hit   % Time  Line Contents
-==============================================================
-   226                                               @property
-   227                                               @profile
-   228                                               def storage_client(self):
-   229                                                   if not self._storage_client:
-   230                                                       self._storage_client = \
-   231                                                           StorageManagementClient(self._credentials,
-   232                                                                                   self.subscription_id)
-   233                                                   return self._storage_client
-
-Total time: 0 s
-File: /Users/alex/Desktop/work/cb-profiled/profilenv/lib/python3.6/site-packages/cloudbridge/cloud/providers/azure/azure_client.py
-Function: subscription_client at line 235
-
-Line #      Hits         Time  Per Hit   % Time  Line Contents
-==============================================================
-   235                                               @property
-   236                                               @profile
-   237                                               def subscription_client(self):
-   238                                                   if not self._subscription_client:
-   239                                                       self._subscription_client = SubscriptionClient(self._credentials)
-   240                                                   return self._subscription_client
-
-Total time: 0 s
-File: /Users/alex/Desktop/work/cb-profiled/profilenv/lib/python3.6/site-packages/cloudbridge/cloud/providers/azure/azure_client.py
-Function: resource_client at line 242
-
-Line #      Hits         Time  Per Hit   % Time  Line Contents
-==============================================================
-   242                                               @property
-   243                                               @profile
-   244                                               def resource_client(self):
-   245                                                   if not self._resource_client:
-   246                                                       self._resource_client = \
-   247                                                           ResourceManagementClient(self._credentials,
-   248                                                                                    self.subscription_id)
-   249                                                   return self._resource_client
-
-Total time: 0 s
-File: /Users/alex/Desktop/work/cb-profiled/profilenv/lib/python3.6/site-packages/cloudbridge/cloud/providers/azure/azure_client.py
-Function: compute_client at line 251
-
-Line #      Hits         Time  Per Hit   % Time  Line Contents
-==============================================================
-   251                                               @property
-   252                                               @profile
-   253                                               def compute_client(self):
-   254                                                   if not self._compute_client:
-   255                                                       self._compute_client = \
-   256                                                           ComputeManagementClient(self._credentials,
-   257                                                                                   self.subscription_id)
-   258                                                   return self._compute_client
-
-Total time: 0 s
-File: /Users/alex/Desktop/work/cb-profiled/profilenv/lib/python3.6/site-packages/cloudbridge/cloud/providers/azure/azure_client.py
-Function: network_management_client at line 260
-
-Line #      Hits         Time  Per Hit   % Time  Line Contents
-==============================================================
-   260                                               @property
-   261                                               @profile
-   262                                               def network_management_client(self):
-   263                                                   if not self._network_management_client:
-   264                                                       self._network_management_client = NetworkManagementClient(
-   265                                                           self._credentials, self.subscription_id)
-   266                                                   return self._network_management_client
-
-Total time: 0 s
-File: /Users/alex/Desktop/work/cb-profiled/profilenv/lib/python3.6/site-packages/cloudbridge/cloud/providers/azure/azure_client.py
-Function: blob_service at line 268
-
-Line #      Hits         Time  Per Hit   % Time  Line Contents
-==============================================================
-   268                                               @property
-   269                                               @profile
-   270                                               def blob_service(self):
-   271                                                   self._get_or_create_storage_account()
-   272                                                   if not self._block_blob_service:
-   273                                                       if self._access_token:
-   274                                                           token_credential = TokenCredential(self._access_token)
-   275                                                           self._block_blob_service = BlockBlobService(
-   276                                                               account_name=self.storage_account,
-   277                                                               token_credential=token_credential)
-   278                                                       else:
-   279                                                           self._block_blob_service = BlockBlobService(
-   280                                                               account_name=self.storage_account,
-   281                                                               account_key=self.access_key_result.keys[0].value)
-   282                                                   return self._block_blob_service
-
-Total time: 0 s
-File: /Users/alex/Desktop/work/cb-profiled/profilenv/lib/python3.6/site-packages/cloudbridge/cloud/providers/azure/azure_client.py
-Function: table_service at line 284
-
-Line #      Hits         Time  Per Hit   % Time  Line Contents
-==============================================================
-   284                                               @property
-   285                                               @profile
-   286                                               def table_service(self):
-   287                                                   self._get_or_create_storage_account()
-   288                                                   if not self._table_service:
-   289                                                       self._table_service = TableService(
-   290                                                           self.storage_account,
-   291                                                           self.access_key_result.keys[0].value)
-   292                                                   if not self._table_service. \
-   293                                                           exists(table_name=self.public_key_storage_table_name):
-   294                                                       self._table_service.create_table(
-   295                                                           self.public_key_storage_table_name)
-   296                                                   return self._table_service
-
-Total time: 0 s
-File: /Users/alex/Desktop/work/cb-profiled/profilenv/lib/python3.6/site-packages/cloudbridge/cloud/providers/azure/azure_client.py
-Function: get_resource_group at line 298
-
-Line #      Hits         Time  Per Hit   % Time  Line Contents
-==============================================================
-   298                                               @profile
-   299                                               def get_resource_group(self, name):
-   300                                                   return self.resource_client.resource_groups.get(name)
-
-Total time: 0 s
-File: /Users/alex/Desktop/work/cb-profiled/profilenv/lib/python3.6/site-packages/cloudbridge/cloud/providers/azure/azure_client.py
-Function: create_resource_group at line 302
-
-Line #      Hits         Time  Per Hit   % Time  Line Contents
-==============================================================
-   302                                               @profile
-   303                                               def create_resource_group(self, name, parameters):
-   304                                                   return self.resource_client.resource_groups. \
-   305                                                       create_or_update(name, parameters)
-
-Total time: 0 s
-File: /Users/alex/Desktop/work/cb-profiled/profilenv/lib/python3.6/site-packages/cloudbridge/cloud/providers/azure/azure_client.py
-Function: get_storage_account at line 307
-
-Line #      Hits         Time  Per Hit   % Time  Line Contents
-==============================================================
-   307                                               @profile
-   308                                               def get_storage_account(self, storage_account):
-   309                                                   return self.storage_client.storage_accounts. \
-   310                                                       get_properties(self.resource_group, storage_account)
-
-Total time: 0 s
-File: /Users/alex/Desktop/work/cb-profiled/profilenv/lib/python3.6/site-packages/cloudbridge/cloud/providers/azure/azure_client.py
-Function: create_storage_account at line 312
-
-Line #      Hits         Time  Per Hit   % Time  Line Contents
-==============================================================
-   312                                               @profile
-   313                                               def create_storage_account(self, name, params):
-   314                                                   return self.storage_client.storage_accounts. \
-   315                                                       create(self.resource_group, name.lower(), params).result()
-
-Total time: 0 s
-File: /Users/alex/Desktop/work/cb-profiled/profilenv/lib/python3.6/site-packages/cloudbridge/cloud/providers/azure/azure_client.py
-Function: _get_or_create_storage_account at line 319
-
-Line #      Hits         Time  Per Hit   % Time  Line Contents
-==============================================================
-   319                                               @tenacity.retry(stop=tenacity.stop_after_attempt(2),
-   320                                                               retry=tenacity.retry_if_exception_type(CloudError),
-   321                                                               reraise=True)
-   322                                               @profile
-   323                                               def _get_or_create_storage_account(self):
-   324                                                   if self._storage_account:
-   325                                                       return self._storage_account
-   326                                                   else:
-   327                                                       try:
-   328                                                           self._storage_account = \
-   329                                                               self.get_storage_account(self.storage_account)
-   330                                                       except CloudError as cloud_error:
-   331                                                           if cloud_error.error.error == "ResourceNotFound":
-   332                                                               storage_account_params = {
-   333                                                                   'sku': {
-   334                                                                       'name': 'Standard_LRS'
-   335                                                                   },
-   336                                                                   'kind': 'storage',
-   337                                                                   'location': self.region_name,
-   338                                                               }
-   339                                                               try:
-   340                                                                   self._storage_account = \
-   341                                                                       self.create_storage_account(self.storage_account,
-   342                                                                                                   storage_account_params)
-   343                                                               except CloudError as cloud_error2:  # pragma: no cover
-   344                                                                   if cloud_error2.error.error == "AuthorizationFailed":
-   345                                                                       mess = 'The following error was returned by ' \
-   346                                                                              'Azure:\n%s\n\nThis is likely because the' \
-   347                                                                              ' Role associated with the provided ' \
-   348                                                                              'credentials does not allow for Storage ' \
-   349                                                                              'Account creation.\nA Storage Account is ' \
-   350                                                                              'necessary in order to perform the ' \
-   351                                                                              'desired operation. You must either ' \
-   352                                                                              'provide an existing Storage Account name' \
-   353                                                                              ' as part of the configuration, or ' \
-   354                                                                              'elevate the associated Role.\nFor more ' \
-   355                                                                              'information on roles, see: https://docs.' \
-   356                                                                              'microsoft.com/en-us/azure/role-based-' \
-   357                                                                              'access-control/overview\n' % cloud_error2
-   358                                                                       raise ProviderConnectionException(mess)
-   359                                           
-   360                                                                   elif cloud_error2.error.error == \
-   361                                                                           "StorageAccountAlreadyTaken":
-   362                                                                       mess = 'The following error was ' \
-   363                                                                              'returned by Azure:\n%s\n\n' \
-   364                                                                              'Note that Storage Account names must be ' \
-   365                                                                              'unique across Azure (not just in your ' \
-   366                                                                              'subscription).\nFor more information ' \
-   367                                                                              'see https://docs.microsoft.com/en-us/' \
-   368                                                                              'azure/azure-resource-manager/resource-' \
-   369                                                                              'manager-storage-account-name-errors\n' \
-   370                                                                              % cloud_error2
-   371                                                                       raise InvalidLabelException(mess)
-   372                                                                   else:
-   373                                                                       raise cloud_error2
-   374                                                           else:
-   375                                                               raise cloud_error
-
-Total time: 0 s
-File: /Users/alex/Desktop/work/cb-profiled/profilenv/lib/python3.6/site-packages/cloudbridge/cloud/providers/azure/azure_client.py
-Function: list_locations at line 377
-
-Line #      Hits         Time  Per Hit   % Time  Line Contents
-==============================================================
-   377                                               @profile
-   378                                               def list_locations(self):
-   379                                                   return self.subscription_client.subscriptions. \
-   380                                                       list_locations(self.subscription_id)
-
-Total time: 0 s
-File: /Users/alex/Desktop/work/cb-profiled/profilenv/lib/python3.6/site-packages/cloudbridge/cloud/providers/azure/azure_client.py
-Function: list_vm_firewall at line 382
-
-Line #      Hits         Time  Per Hit   % Time  Line Contents
-==============================================================
-   382                                               @profile
-   383                                               def list_vm_firewall(self):
-   384                                                   return self.network_management_client.network_security_groups. \
-   385                                                       list(self.resource_group)
-
-Total time: 0 s
-File: /Users/alex/Desktop/work/cb-profiled/profilenv/lib/python3.6/site-packages/cloudbridge/cloud/providers/azure/azure_client.py
-Function: create_vm_firewall at line 387
-
-Line #      Hits         Time  Per Hit   % Time  Line Contents
-==============================================================
-   387                                               @profile
-   388                                               def create_vm_firewall(self, name, parameters):
-   389                                                   return self.network_management_client.network_security_groups. \
-   390                                                       create_or_update(self.resource_group, name,
-   391                                                                        parameters).result()
-
-Total time: 0 s
-File: /Users/alex/Desktop/work/cb-profiled/profilenv/lib/python3.6/site-packages/cloudbridge/cloud/providers/azure/azure_client.py
-Function: update_vm_firewall_tags at line 393
-
-Line #      Hits         Time  Per Hit   % Time  Line Contents
-==============================================================
-   393                                               @profile
-   394                                               def update_vm_firewall_tags(self, fw_id, tags):
-   395                                                   url_params = azure_helpers.parse_url(VM_FIREWALL_RESOURCE_ID,
-   396                                                                                        fw_id)
-   397                                                   name = url_params.get(VM_FIREWALL_NAME)
-   398                                                   return self.network_management_client.network_security_groups. \
-   399                                                       create_or_update(self.resource_group, name,
-   400                                                                        {'tags': tags,
-   401                                                                         'location': self.region_name}).result()
-
-Total time: 0 s
-File: /Users/alex/Desktop/work/cb-profiled/profilenv/lib/python3.6/site-packages/cloudbridge/cloud/providers/azure/azure_client.py
-Function: get_vm_firewall at line 403
-
-Line #      Hits         Time  Per Hit   % Time  Line Contents
-==============================================================
-   403                                               @profile
-   404                                               def get_vm_firewall(self, fw_id):
-   405                                                   url_params = azure_helpers.parse_url(VM_FIREWALL_RESOURCE_ID,
-   406                                                                                        fw_id)
-   407                                                   fw_name = url_params.get(VM_FIREWALL_NAME)
-   408                                                   return self.network_management_client.network_security_groups. \
-   409                                                       get(self.resource_group, fw_name)
-
-Total time: 0 s
-File: /Users/alex/Desktop/work/cb-profiled/profilenv/lib/python3.6/site-packages/cloudbridge/cloud/providers/azure/azure_client.py
-Function: delete_vm_firewall at line 411
-
-Line #      Hits         Time  Per Hit   % Time  Line Contents
-==============================================================
-   411                                               @profile
-   412                                               def delete_vm_firewall(self, fw_id):
-   413                                                   url_params = azure_helpers.parse_url(VM_FIREWALL_RESOURCE_ID,
-   414                                                                                        fw_id)
-   415                                                   name = url_params.get(VM_FIREWALL_NAME)
-   416                                                   self.network_management_client \
-   417                                                       .network_security_groups.delete(self.resource_group, name).wait()
-
-Total time: 0 s
-File: /Users/alex/Desktop/work/cb-profiled/profilenv/lib/python3.6/site-packages/cloudbridge/cloud/providers/azure/azure_client.py
-Function: create_vm_firewall_rule at line 419
-
-Line #      Hits         Time  Per Hit   % Time  Line Contents
-==============================================================
-   419                                               @profile
-   420                                               def create_vm_firewall_rule(self, fw_id,
-   421                                                                           rule_name, parameters):
-   422                                                   url_params = azure_helpers.parse_url(VM_FIREWALL_RESOURCE_ID,
-   423                                                                                        fw_id)
-   424                                                   vm_firewall_name = url_params.get(VM_FIREWALL_NAME)
-   425                                                   return self.network_management_client.security_rules. \
-   426                                                       create_or_update(self.resource_group, vm_firewall_name,
-   427                                                                        rule_name, parameters).result()
-
-Total time: 0 s
-File: /Users/alex/Desktop/work/cb-profiled/profilenv/lib/python3.6/site-packages/cloudbridge/cloud/providers/azure/azure_client.py
-Function: delete_vm_firewall_rule at line 429
-
-Line #      Hits         Time  Per Hit   % Time  Line Contents
-==============================================================
-   429                                               @profile
-   430                                               def delete_vm_firewall_rule(self, fw_rule_id, vm_firewall):
-   431                                                   url_params = azure_helpers.parse_url(VM_FIREWALL_RULE_RESOURCE_ID,
-   432                                                                                        fw_rule_id)
-   433                                                   name = url_params.get(VM_FIREWALL_RULE_NAME)
-   434                                                   return self.network_management_client.security_rules. \
-   435                                                       delete(self.resource_group, vm_firewall, name).result()
-
-Total time: 0 s
-File: /Users/alex/Desktop/work/cb-profiled/profilenv/lib/python3.6/site-packages/cloudbridge/cloud/providers/azure/azure_client.py
-Function: list_containers at line 437
-
-Line #      Hits         Time  Per Hit   % Time  Line Contents
-==============================================================
-   437                                               @profile
-   438                                               def list_containers(self, prefix=None, limit=None, marker=None):
-   439                                                   results = self.blob_service.list_containers(prefix=prefix,
-   440                                                                                               num_results=limit,
-   441                                                                                               marker=marker)
-   442                                                   return (results.items, results.next_marker)
-
-Total time: 0 s
-File: /Users/alex/Desktop/work/cb-profiled/profilenv/lib/python3.6/site-packages/cloudbridge/cloud/providers/azure/azure_client.py
-Function: create_container at line 444
-
-Line #      Hits         Time  Per Hit   % Time  Line Contents
-==============================================================
-   444                                               @profile
-   445                                               def create_container(self, container_name):
-   446                                                   try:
-   447                                                       self.blob_service.create_container(container_name,
-   448                                                                                          fail_on_exist=True)
-   449                                                   except AzureConflictHttpError as cloud_error:
-   450                                                       if cloud_error.error_code == "ContainerAlreadyExists":
-   451                                                           msg = "The given Bucket name '%s' already exists. Please " \
-   452                                                                 "use the `get` or `find` method to get a reference to " \
-   453                                                                 "an existing Bucket, or specify a new Bucket name to " \
-   454                                                                 "create.\nNote that in Azure, Buckets are contained " \
-   455                                                                 "in Storage Accounts." % container_name
-   456                                                           raise DuplicateResourceException(msg)
-   457                                           
-   458                                                   return self.blob_service.get_container_properties(container_name)
-
-Total time: 0 s
-File: /Users/alex/Desktop/work/cb-profiled/profilenv/lib/python3.6/site-packages/cloudbridge/cloud/providers/azure/azure_client.py
-Function: get_container at line 460
-
-Line #      Hits         Time  Per Hit   % Time  Line Contents
-==============================================================
-   460                                               @profile
-   461                                               def get_container(self, container_name):
-   462                                                   return self.blob_service.get_container_properties(container_name)
-
-Total time: 0 s
-File: /Users/alex/Desktop/work/cb-profiled/profilenv/lib/python3.6/site-packages/cloudbridge/cloud/providers/azure/azure_client.py
-Function: delete_container at line 464
-
-Line #      Hits         Time  Per Hit   % Time  Line Contents
-==============================================================
-   464                                               @profile
-   465                                               def delete_container(self, container_name):
-   466                                                   self.blob_service.delete_container(container_name)
-
-Total time: 0 s
-File: /Users/alex/Desktop/work/cb-profiled/profilenv/lib/python3.6/site-packages/cloudbridge/cloud/providers/azure/azure_client.py
-Function: list_blobs at line 468
-
-Line #      Hits         Time  Per Hit   % Time  Line Contents
-==============================================================
-   468                                               @profile
-   469                                               def list_blobs(self, container_name, prefix=None):
-   470                                                   return self.blob_service.list_blobs(container_name, prefix=prefix)
-
-Total time: 0 s
-File: /Users/alex/Desktop/work/cb-profiled/profilenv/lib/python3.6/site-packages/cloudbridge/cloud/providers/azure/azure_client.py
-Function: get_blob at line 472
-
-Line #      Hits         Time  Per Hit   % Time  Line Contents
-==============================================================
-   472                                               @profile
-   473                                               def get_blob(self, container_name, blob_name):
-   474                                                   return self.blob_service.get_blob_properties(container_name, blob_name)
-
-Total time: 0 s
-File: /Users/alex/Desktop/work/cb-profiled/profilenv/lib/python3.6/site-packages/cloudbridge/cloud/providers/azure/azure_client.py
-Function: create_blob_from_text at line 476
-
-Line #      Hits         Time  Per Hit   % Time  Line Contents
-==============================================================
-   476                                               @profile
-   477                                               def create_blob_from_text(self, container_name, blob_name, text):
-   478                                                   self.blob_service.create_blob_from_text(container_name,
-   479                                                                                           blob_name, text)
-
-Total time: 0 s
-File: /Users/alex/Desktop/work/cb-profiled/profilenv/lib/python3.6/site-packages/cloudbridge/cloud/providers/azure/azure_client.py
-Function: create_blob_from_file at line 481
-
-Line #      Hits         Time  Per Hit   % Time  Line Contents
-==============================================================
-   481                                               @profile
-   482                                               def create_blob_from_file(self, container_name, blob_name, file_path):
-   483                                                   self.blob_service.create_blob_from_path(container_name,
-   484                                                                                           blob_name, file_path)
-
-Total time: 0 s
-File: /Users/alex/Desktop/work/cb-profiled/profilenv/lib/python3.6/site-packages/cloudbridge/cloud/providers/azure/azure_client.py
-Function: delete_blob at line 486
-
-Line #      Hits         Time  Per Hit   % Time  Line Contents
-==============================================================
-   486                                               @profile
-   487                                               def delete_blob(self, container_name, blob_name):
-   488                                                   self.blob_service.delete_blob(container_name, blob_name)
-
-Total time: 0 s
-File: /Users/alex/Desktop/work/cb-profiled/profilenv/lib/python3.6/site-packages/cloudbridge/cloud/providers/azure/azure_client.py
-Function: get_blob_url at line 490
-
-Line #      Hits         Time  Per Hit   % Time  Line Contents
-==============================================================
-   490                                               @profile
-   491                                               def get_blob_url(self, container_name, blob_name, expiry_time):
-   492                                                   expiry_date = datetime.datetime.utcnow() + datetime.timedelta(
-   493                                                       seconds=expiry_time)
-   494                                                   sas = self.blob_service.generate_blob_shared_access_signature(
-   495                                                       container_name, blob_name, permission=BlobPermissions.READ,
-   496                                                       expiry=expiry_date)
-   497                                                   return self.blob_service.make_blob_url(container_name, blob_name,
-   498                                                                                          sas_token=sas)
-
-Total time: 0 s
-File: /Users/alex/Desktop/work/cb-profiled/profilenv/lib/python3.6/site-packages/cloudbridge/cloud/providers/azure/azure_client.py
-Function: get_blob_content at line 500
-
-Line #      Hits         Time  Per Hit   % Time  Line Contents
-==============================================================
-   500                                               @profile
-   501                                               def get_blob_content(self, container_name, blob_name):
-   502                                                   out_stream = BytesIO()
-   503                                                   self.blob_service.get_blob_to_stream(container_name,
-   504                                                                                        blob_name, out_stream)
-   505                                                   return out_stream
-
-Total time: 0 s
-File: /Users/alex/Desktop/work/cb-profiled/profilenv/lib/python3.6/site-packages/cloudbridge/cloud/providers/azure/azure_client.py
-Function: create_empty_disk at line 507
-
-Line #      Hits         Time  Per Hit   % Time  Line Contents
-==============================================================
-   507                                               @profile
-   508                                               def create_empty_disk(self, disk_name, params):
-   509                                                   return self.compute_client.disks.create_or_update(
-   510                                                       self.resource_group,
-   511                                                       disk_name,
-   512                                                       params
-   513                                                   ).result()
-
-Total time: 0 s
-File: /Users/alex/Desktop/work/cb-profiled/profilenv/lib/python3.6/site-packages/cloudbridge/cloud/providers/azure/azure_client.py
-Function: create_snapshot_disk at line 515
-
-Line #      Hits         Time  Per Hit   % Time  Line Contents
-==============================================================
-   515                                               @profile
-   516                                               def create_snapshot_disk(self, disk_name, params):
-   517                                                   return self.compute_client.disks.create_or_update(
-   518                                                       self.resource_group,
-   519                                                       disk_name,
-   520                                                       params
-   521                                                   ).result()
-
-Total time: 0 s
-File: /Users/alex/Desktop/work/cb-profiled/profilenv/lib/python3.6/site-packages/cloudbridge/cloud/providers/azure/azure_client.py
-Function: get_disk at line 523
-
-Line #      Hits         Time  Per Hit   % Time  Line Contents
-==============================================================
-   523                                               @profile
-   524                                               def get_disk(self, disk_id):
-   525                                                   url_params = azure_helpers.parse_url(VOLUME_RESOURCE_ID,
-   526                                                                                        disk_id)
-   527                                                   disk_name = url_params.get(VOLUME_NAME)
-   528                                                   return self.compute_client.disks.get(self.resource_group, disk_name)
-
-Total time: 0 s
-File: /Users/alex/Desktop/work/cb-profiled/profilenv/lib/python3.6/site-packages/cloudbridge/cloud/providers/azure/azure_client.py
-Function: list_disks at line 530
-
-Line #      Hits         Time  Per Hit   % Time  Line Contents
-==============================================================
-   530                                               @profile
-   531                                               def list_disks(self):
-   532                                                   return self.compute_client.disks. \
-   533                                                       list_by_resource_group(self.resource_group)
-
-Total time: 0 s
-File: /Users/alex/Desktop/work/cb-profiled/profilenv/lib/python3.6/site-packages/cloudbridge/cloud/providers/azure/azure_client.py
-Function: delete_disk at line 535
-
-Line #      Hits         Time  Per Hit   % Time  Line Contents
-==============================================================
-   535                                               @profile
-   536                                               def delete_disk(self, disk_id):
-   537                                                   url_params = azure_helpers.parse_url(VOLUME_RESOURCE_ID,
-   538                                                                                        disk_id)
-   539                                                   disk_name = url_params.get(VOLUME_NAME)
-   540                                                   self.compute_client.disks.delete(self.resource_group, disk_name).wait()
-
-Total time: 0 s
-File: /Users/alex/Desktop/work/cb-profiled/profilenv/lib/python3.6/site-packages/cloudbridge/cloud/providers/azure/azure_client.py
-Function: update_disk_tags at line 542
-
-Line #      Hits         Time  Per Hit   % Time  Line Contents
-==============================================================
-   542                                               @profile
-   543                                               def update_disk_tags(self, disk_id, tags):
-   544                                                   url_params = azure_helpers.parse_url(VOLUME_RESOURCE_ID,
-   545                                                                                        disk_id)
-   546                                                   disk_name = url_params.get(VOLUME_NAME)
-   547                                                   return self.compute_client.disks.update(
-   548                                                       self.resource_group,
-   549                                                       disk_name,
-   550                                                       {'tags': tags},
-   551                                                       raw=True
-   552                                                   )
-
-Total time: 0 s
-File: /Users/alex/Desktop/work/cb-profiled/profilenv/lib/python3.6/site-packages/cloudbridge/cloud/providers/azure/azure_client.py
-Function: list_snapshots at line 554
-
-Line #      Hits         Time  Per Hit   % Time  Line Contents
-==============================================================
-   554                                               @profile
-   555                                               def list_snapshots(self):
-   556                                                   return self.compute_client.snapshots. \
-   557                                                       list_by_resource_group(self.resource_group)
-
-Total time: 0 s
-File: /Users/alex/Desktop/work/cb-profiled/profilenv/lib/python3.6/site-packages/cloudbridge/cloud/providers/azure/azure_client.py
-Function: get_snapshot at line 559
-
-Line #      Hits         Time  Per Hit   % Time  Line Contents
-==============================================================
-   559                                               @profile
-   560                                               def get_snapshot(self, snapshot_id):
-   561                                                   url_params = azure_helpers.parse_url(SNAPSHOT_RESOURCE_ID,
-   562                                                                                        snapshot_id)
-   563                                                   snapshot_name = url_params.get(SNAPSHOT_NAME)
-   564                                                   return self.compute_client.snapshots.get(self.resource_group,
-   565                                                                                            snapshot_name)
-
-Total time: 0 s
-File: /Users/alex/Desktop/work/cb-profiled/profilenv/lib/python3.6/site-packages/cloudbridge/cloud/providers/azure/azure_client.py
-Function: create_snapshot at line 567
-
-Line #      Hits         Time  Per Hit   % Time  Line Contents
-==============================================================
-   567                                               @profile
-   568                                               def create_snapshot(self, snapshot_name, params):
-   569                                                   return self.compute_client.snapshots.create_or_update(
-   570                                                       self.resource_group,
-   571                                                       snapshot_name,
-   572                                                       params
-   573                                                   ).result()
-
-Total time: 0 s
-File: /Users/alex/Desktop/work/cb-profiled/profilenv/lib/python3.6/site-packages/cloudbridge/cloud/providers/azure/azure_client.py
-Function: delete_snapshot at line 575
-
-Line #      Hits         Time  Per Hit   % Time  Line Contents
-==============================================================
-   575                                               @profile
-   576                                               def delete_snapshot(self, snapshot_id):
-   577                                                   url_params = azure_helpers.parse_url(SNAPSHOT_RESOURCE_ID,
-   578                                                                                        snapshot_id)
-   579                                                   snapshot_name = url_params.get(SNAPSHOT_NAME)
-   580                                                   self.compute_client.snapshots.delete(self.resource_group,
-   581                                                                                        snapshot_name).wait()
-
-Total time: 0 s
-File: /Users/alex/Desktop/work/cb-profiled/profilenv/lib/python3.6/site-packages/cloudbridge/cloud/providers/azure/azure_client.py
-Function: update_snapshot_tags at line 583
-
-Line #      Hits         Time  Per Hit   % Time  Line Contents
-==============================================================
-   583                                               @profile
-   584                                               def update_snapshot_tags(self, snapshot_id, tags):
-   585                                                   url_params = azure_helpers.parse_url(SNAPSHOT_RESOURCE_ID,
-   586                                                                                        snapshot_id)
-   587                                                   snapshot_name = url_params.get(SNAPSHOT_NAME)
-   588                                                   return self.compute_client.snapshots.update(
-   589                                                       self.resource_group,
-   590                                                       snapshot_name,
-   591                                                       {'tags': tags},
-   592                                                       raw=True
-   593                                                   )
-
-Total time: 0 s
-File: /Users/alex/Desktop/work/cb-profiled/profilenv/lib/python3.6/site-packages/cloudbridge/cloud/providers/azure/azure_client.py
-Function: is_gallery_image at line 595
-
-Line #      Hits         Time  Per Hit   % Time  Line Contents
-==============================================================
-   595                                               @profile
-   596                                               def is_gallery_image(self, image_id):
-   597                                                   url_params = azure_helpers.parse_url(IMAGE_RESOURCE_ID,
-   598                                                                                        image_id)
-   599                                                   # If it is a gallery image, it will always have an offer
-   600                                                   return 'offer' in url_params
-
-Total time: 0 s
-File: /Users/alex/Desktop/work/cb-profiled/profilenv/lib/python3.6/site-packages/cloudbridge/cloud/providers/azure/azure_client.py
-Function: create_image at line 602
-
-Line #      Hits         Time  Per Hit   % Time  Line Contents
-==============================================================
-   602                                               @profile
-   603                                               def create_image(self, name, params):
-   604                                                   return self.compute_client.images. \
-   605                                                       create_or_update(self.resource_group, name,
-   606                                                                        params).result()
-
-Total time: 0 s
-File: /Users/alex/Desktop/work/cb-profiled/profilenv/lib/python3.6/site-packages/cloudbridge/cloud/providers/azure/azure_client.py
-Function: delete_image at line 608
-
-Line #      Hits         Time  Per Hit   % Time  Line Contents
-==============================================================
-   608                                               @profile
-   609                                               def delete_image(self, image_id):
-   610                                                   url_params = azure_helpers.parse_url(IMAGE_RESOURCE_ID,
-   611                                                                                        image_id)
-   612                                                   if not self.is_gallery_image(image_id):
-   613                                                       name = url_params.get(IMAGE_NAME)
-   614                                                       self.compute_client.images.delete(self.resource_group, name).wait()
-
-Total time: 0 s
-File: /Users/alex/Desktop/work/cb-profiled/profilenv/lib/python3.6/site-packages/cloudbridge/cloud/providers/azure/azure_client.py
-Function: list_images at line 616
-
-Line #      Hits         Time  Per Hit   % Time  Line Contents
-==============================================================
-   616                                               @profile
-   617                                               def list_images(self):
-   618                                                   azure_images = list(self.compute_client.images.
-   619                                                                       list_by_resource_group(self.resource_group))
-   620                                                   return azure_images
-
-Total time: 0 s
-File: /Users/alex/Desktop/work/cb-profiled/profilenv/lib/python3.6/site-packages/cloudbridge/cloud/providers/azure/azure_client.py
-Function: list_gallery_refs at line 622
-
-Line #      Hits         Time  Per Hit   % Time  Line Contents
-==============================================================
-   622                                               @profile
-   623                                               def list_gallery_refs(self):
-   624                                                   return gallery_image_references
-
-Total time: 0 s
-File: /Users/alex/Desktop/work/cb-profiled/profilenv/lib/python3.6/site-packages/cloudbridge/cloud/providers/azure/azure_client.py
-Function: get_image at line 626
-
-Line #      Hits         Time  Per Hit   % Time  Line Contents
-==============================================================
-   626                                               @profile
-   627                                               def get_image(self, image_id):
-   628                                                   url_params = azure_helpers.parse_url(IMAGE_RESOURCE_ID,
-   629                                                                                        image_id)
-   630                                                   if self.is_gallery_image(image_id):
-   631                                                       return GalleryImageReference(publisher=url_params['publisher'],
-   632                                                                                    offer=url_params['offer'],
-   633                                                                                    sku=url_params['sku'],
-   634                                                                                    version=url_params['version'])
-   635                                                   else:
-   636                                                       name = url_params.get(IMAGE_NAME)
-   637                                                       return self.compute_client.images.get(self.resource_group, name)
-
-Total time: 0 s
-File: /Users/alex/Desktop/work/cb-profiled/profilenv/lib/python3.6/site-packages/cloudbridge/cloud/providers/azure/azure_client.py
-Function: update_image_tags at line 639
-
-Line #      Hits         Time  Per Hit   % Time  Line Contents
-==============================================================
-   639                                               @profile
-   640                                               def update_image_tags(self, image_id, tags):
-   641                                                   url_params = azure_helpers.parse_url(IMAGE_RESOURCE_ID,
-   642                                                                                        image_id)
-   643                                                   if self.is_gallery_image(image_id):
-   644                                                       return True
-   645                                                   else:
-   646                                                       name = url_params.get(IMAGE_NAME)
-   647                                                       return self.compute_client.images. \
-   648                                                           create_or_update(self.resource_group, name,
-   649                                                                            {
-   650                                                                                'tags': tags,
-   651                                                                                'location': self.region_name
-   652                                                                            }).result()
-
-Total time: 0 s
-File: /Users/alex/Desktop/work/cb-profiled/profilenv/lib/python3.6/site-packages/cloudbridge/cloud/providers/azure/azure_client.py
-Function: list_vm_types at line 654
-
-Line #      Hits         Time  Per Hit   % Time  Line Contents
-==============================================================
-   654                                               @profile
-   655                                               def list_vm_types(self):
-   656                                                   return self.compute_client.virtual_machine_sizes. \
-   657                                                       list(self.region_name)
-
-Total time: 0 s
-File: /Users/alex/Desktop/work/cb-profiled/profilenv/lib/python3.6/site-packages/cloudbridge/cloud/providers/azure/azure_client.py
-Function: list_networks at line 659
-
-Line #      Hits         Time  Per Hit   % Time  Line Contents
-==============================================================
-   659                                               @profile
-   660                                               def list_networks(self):
-   661                                                   return self.network_management_client.virtual_networks.list(
-   662                                                       self.resource_group)
-
-Total time: 0 s
-File: /Users/alex/Desktop/work/cb-profiled/profilenv/lib/python3.6/site-packages/cloudbridge/cloud/providers/azure/azure_client.py
-Function: get_network at line 664
-
-Line #      Hits         Time  Per Hit   % Time  Line Contents
-==============================================================
-   664                                               @profile
-   665                                               def get_network(self, network_id):
-   666                                                   url_params = azure_helpers.parse_url(NETWORK_RESOURCE_ID,
-   667                                                                                        network_id)
-   668                                                   network_name = url_params.get(NETWORK_NAME)
-   669                                                   return self.network_management_client.virtual_networks.get(
-   670                                                       self.resource_group, network_name)
-
-Total time: 0 s
-File: /Users/alex/Desktop/work/cb-profiled/profilenv/lib/python3.6/site-packages/cloudbridge/cloud/providers/azure/azure_client.py
-Function: create_network at line 672
-
-Line #      Hits         Time  Per Hit   % Time  Line Contents
-==============================================================
-   672                                               @profile
-   673                                               def create_network(self, name, params):
-   674                                                   return self.network_management_client.virtual_networks. \
-   675                                                       create_or_update(self.resource_group,
-   676                                                                        name,
-   677                                                                        parameters=params).result()
-
-Total time: 0 s
-File: /Users/alex/Desktop/work/cb-profiled/profilenv/lib/python3.6/site-packages/cloudbridge/cloud/providers/azure/azure_client.py
-Function: delete_network at line 679
-
-Line #      Hits         Time  Per Hit   % Time  Line Contents
-==============================================================
-   679                                               @profile
-   680                                               def delete_network(self, network_id):
-   681                                                   url_params = azure_helpers.parse_url(NETWORK_RESOURCE_ID, network_id)
-   682                                                   network_name = url_params.get(NETWORK_NAME)
-   683                                                   return self.network_management_client.virtual_networks. \
-   684                                                       delete(self.resource_group, network_name).wait()
-
-Total time: 0 s
-File: /Users/alex/Desktop/work/cb-profiled/profilenv/lib/python3.6/site-packages/cloudbridge/cloud/providers/azure/azure_client.py
-Function: update_network_tags at line 686
-
-Line #      Hits         Time  Per Hit   % Time  Line Contents
-==============================================================
-   686                                               @profile
-   687                                               def update_network_tags(self, network_id, tags):
-   688                                                   url_params = azure_helpers.parse_url(NETWORK_RESOURCE_ID, network_id)
-   689                                                   network_name = url_params.get(NETWORK_NAME)
-   690                                                   return self.network_management_client.virtual_networks. \
-   691                                                       create_or_update(self.resource_group,
-   692                                                                        network_name, tags).result()
-
-Total time: 0 s
-File: /Users/alex/Desktop/work/cb-profiled/profilenv/lib/python3.6/site-packages/cloudbridge/cloud/providers/azure/azure_client.py
-Function: get_network_id_for_subnet at line 694
-
-Line #      Hits         Time  Per Hit   % Time  Line Contents
-==============================================================
-   694                                               @profile
-   695                                               def get_network_id_for_subnet(self, subnet_id):
-   696                                                   url_params = azure_helpers.parse_url(SUBNET_RESOURCE_ID, subnet_id)
-   697                                                   network_id = NETWORK_RESOURCE_ID[0]
-   698                                                   for key, val in url_params.items():
-   699                                                       network_id = network_id.replace("{" + key + "}", val)
-   700                                                   return network_id
-
-Total time: 0 s
-File: /Users/alex/Desktop/work/cb-profiled/profilenv/lib/python3.6/site-packages/cloudbridge/cloud/providers/azure/azure_client.py
-Function: list_subnets at line 702
-
-Line #      Hits         Time  Per Hit   % Time  Line Contents
-==============================================================
-   702                                               @profile
-   703                                               def list_subnets(self, network_id):
-   704                                                   url_params = azure_helpers.parse_url(NETWORK_RESOURCE_ID, network_id)
-   705                                                   network_name = url_params.get(NETWORK_NAME)
-   706                                                   return self.network_management_client.subnets. \
-   707                                                       list(self.resource_group, network_name)
-
-Total time: 0 s
-File: /Users/alex/Desktop/work/cb-profiled/profilenv/lib/python3.6/site-packages/cloudbridge/cloud/providers/azure/azure_client.py
-Function: get_subnet at line 709
-
-Line #      Hits         Time  Per Hit   % Time  Line Contents
-==============================================================
-   709                                               @profile
-   710                                               def get_subnet(self, subnet_id):
-   711                                                   url_params = azure_helpers.parse_url(SUBNET_RESOURCE_ID,
-   712                                                                                        subnet_id)
-   713                                                   network_name = url_params.get(NETWORK_NAME)
-   714                                                   subnet_name = url_params.get(SUBNET_NAME)
-   715                                                   return self.network_management_client.subnets. \
-   716                                                       get(self.resource_group, network_name, subnet_name)
-
-Total time: 0 s
-File: /Users/alex/Desktop/work/cb-profiled/profilenv/lib/python3.6/site-packages/cloudbridge/cloud/providers/azure/azure_client.py
-Function: create_subnet at line 718
-
-Line #      Hits         Time  Per Hit   % Time  Line Contents
-==============================================================
-   718                                               @profile
-   719                                               def create_subnet(self, network_id, subnet_name, params):
-   720                                                   url_params = azure_helpers.parse_url(NETWORK_RESOURCE_ID, network_id)
-   721                                                   network_name = url_params.get(NETWORK_NAME)
-   722                                                   result_create = self.network_management_client \
-   723                                                       .subnets.create_or_update(
-   724                                                           self.resource_group,
-   725                                                           network_name,
-   726                                                           subnet_name,
-   727                                                           params
-   728                                                       )
-   729                                                   subnet_info = result_create.result()
-   730                                           
-   731                                                   return subnet_info
-
-Total time: 0 s
-File: /Users/alex/Desktop/work/cb-profiled/profilenv/lib/python3.6/site-packages/cloudbridge/cloud/providers/azure/azure_client.py
-Function: __if_subnet_in_use at line 733
-
-Line #      Hits         Time  Per Hit   % Time  Line Contents
-==============================================================
-   733                                               @profile
-   734                                               def __if_subnet_in_use(e):
-   735                                                   # return True if the CloudError exception is due to subnet being in use
-   736                                                   if isinstance(e, CloudError):
-   737                                                       if e.error.error == "InUseSubnetCannotBeDeleted":
-   738                                                           return True
-   739                                                   return False
-
-Total time: 0 s
-File: /Users/alex/Desktop/work/cb-profiled/profilenv/lib/python3.6/site-packages/cloudbridge/cloud/providers/azure/azure_client.py
-Function: delete_subnet at line 741
-
-Line #      Hits         Time  Per Hit   % Time  Line Contents
-==============================================================
-   741                                               @tenacity.retry(stop=tenacity.stop_after_attempt(5),
-   742                                                               retry=tenacity.retry_if_exception(__if_subnet_in_use),
-   743                                                               wait=tenacity.wait_fixed(5),
-   744                                                               reraise=True)
-   745                                               @profile
-   746                                               def delete_subnet(self, subnet_id):
-   747                                                   url_params = azure_helpers.parse_url(SUBNET_RESOURCE_ID,
-   748                                                                                        subnet_id)
-   749                                                   network_name = url_params.get(NETWORK_NAME)
-   750                                                   subnet_name = url_params.get(SUBNET_NAME)
-   751                                           
-   752                                                   try:
-   753                                                       result_delete = self.network_management_client \
-   754                                                           .subnets.delete(
-   755                                                               self.resource_group,
-   756                                                               network_name,
-   757                                                               subnet_name
-   758                                                           )
-   759                                                       result_delete.wait()
-   760                                                   except CloudError as cloud_error:
-   761                                                       log.exception(cloud_error.message)
-   762                                                       raise cloud_error
-
-Total time: 0 s
-File: /Users/alex/Desktop/work/cb-profiled/profilenv/lib/python3.6/site-packages/cloudbridge/cloud/providers/azure/azure_client.py
-Function: create_floating_ip at line 764
-
-Line #      Hits         Time  Per Hit   % Time  Line Contents
-==============================================================
-   764                                               @profile
-   765                                               def create_floating_ip(self, public_ip_name, public_ip_parameters):
-   766                                                   return self.network_management_client.public_ip_addresses. \
-   767                                                       create_or_update(self.resource_group,
-   768                                                                        public_ip_name,
-   769                                                                        public_ip_parameters).result()
-
-Total time: 0 s
-File: /Users/alex/Desktop/work/cb-profiled/profilenv/lib/python3.6/site-packages/cloudbridge/cloud/providers/azure/azure_client.py
-Function: get_floating_ip at line 771
-
-Line #      Hits         Time  Per Hit   % Time  Line Contents
-==============================================================
-   771                                               @profile
-   772                                               def get_floating_ip(self, public_ip_id):
-   773                                                   url_params = azure_helpers.parse_url(PUBLIC_IP_RESOURCE_ID,
-   774                                                                                        public_ip_id)
-   775                                                   public_ip_name = url_params.get(PUBLIC_IP_NAME)
-   776                                                   return self.network_management_client. \
-   777                                                       public_ip_addresses.get(self.resource_group, public_ip_name)
-
-Total time: 0 s
-File: /Users/alex/Desktop/work/cb-profiled/profilenv/lib/python3.6/site-packages/cloudbridge/cloud/providers/azure/azure_client.py
-Function: delete_floating_ip at line 779
-
-Line #      Hits         Time  Per Hit   % Time  Line Contents
-==============================================================
-   779                                               @profile
-   780                                               def delete_floating_ip(self, public_ip_id):
-   781                                                   url_params = azure_helpers.parse_url(PUBLIC_IP_RESOURCE_ID,
-   782                                                                                        public_ip_id)
-   783                                                   public_ip_name = url_params.get(PUBLIC_IP_NAME)
-   784                                                   self.network_management_client. \
-   785                                                       public_ip_addresses.delete(self.resource_group,
-   786                                                                                  public_ip_name).wait()
-
-Total time: 0 s
-File: /Users/alex/Desktop/work/cb-profiled/profilenv/lib/python3.6/site-packages/cloudbridge/cloud/providers/azure/azure_client.py
-Function: update_fip_tags at line 788
-
-Line #      Hits         Time  Per Hit   % Time  Line Contents
-==============================================================
-   788                                               @profile
-   789                                               def update_fip_tags(self, fip_id, tags):
-   790                                                   url_params = azure_helpers.parse_url(PUBLIC_IP_RESOURCE_ID,
-   791                                                                                        fip_id)
-   792                                                   fip_name = url_params.get(PUBLIC_IP_NAME)
-   793                                                   self.network_management_client.public_ip_addresses. \
-   794                                                       create_or_update(self.resource_group,
-   795                                                                        fip_name, tags).result()
-
-Total time: 0 s
-File: /Users/alex/Desktop/work/cb-profiled/profilenv/lib/python3.6/site-packages/cloudbridge/cloud/providers/azure/azure_client.py
-Function: list_floating_ips at line 797
-
-Line #      Hits         Time  Per Hit   % Time  Line Contents
-==============================================================
-   797                                               @profile
-   798                                               def list_floating_ips(self):
-   799                                                   return self.network_management_client.public_ip_addresses.list(
-   800                                                       self.resource_group)
-
-Total time: 0 s
-File: /Users/alex/Desktop/work/cb-profiled/profilenv/lib/python3.6/site-packages/cloudbridge/cloud/providers/azure/azure_client.py
-Function: list_vm at line 802
-
-Line #      Hits         Time  Per Hit   % Time  Line Contents
-==============================================================
-   802                                               @profile
-   803                                               def list_vm(self):
-   804                                                   return self.compute_client.virtual_machines.list(
-   805                                                       self.resource_group
-   806                                                   )
-
-Total time: 0 s
-File: /Users/alex/Desktop/work/cb-profiled/profilenv/lib/python3.6/site-packages/cloudbridge/cloud/providers/azure/azure_client.py
-Function: restart_vm at line 808
-
-Line #      Hits         Time  Per Hit   % Time  Line Contents
-==============================================================
-   808                                               @profile
-   809                                               def restart_vm(self, vm_id):
-   810                                                   url_params = azure_helpers.parse_url(VM_RESOURCE_ID,
-   811                                                                                        vm_id)
-   812                                                   vm_name = url_params.get(VM_NAME)
-   813                                                   return self.compute_client.virtual_machines.restart(
-   814                                                       self.resource_group, vm_name).wait()
-
-Total time: 0 s
-File: /Users/alex/Desktop/work/cb-profiled/profilenv/lib/python3.6/site-packages/cloudbridge/cloud/providers/azure/azure_client.py
-Function: delete_vm at line 816
-
-Line #      Hits         Time  Per Hit   % Time  Line Contents
-==============================================================
-   816                                               @profile
-   817                                               def delete_vm(self, vm_id):
-   818                                                   url_params = azure_helpers.parse_url(VM_RESOURCE_ID,
-   819                                                                                        vm_id)
-   820                                                   vm_name = url_params.get(VM_NAME)
-   821                                                   return self.compute_client.virtual_machines.delete(
-   822                                                       self.resource_group, vm_name).wait()
-
-Total time: 0 s
-File: /Users/alex/Desktop/work/cb-profiled/profilenv/lib/python3.6/site-packages/cloudbridge/cloud/providers/azure/azure_client.py
-Function: get_vm at line 824
-
-Line #      Hits         Time  Per Hit   % Time  Line Contents
-==============================================================
-   824                                               @profile
-   825                                               def get_vm(self, vm_id):
-   826                                                   url_params = azure_helpers.parse_url(VM_RESOURCE_ID,
-   827                                                                                        vm_id)
-   828                                                   vm_name = url_params.get(VM_NAME)
-   829                                                   return self.compute_client.virtual_machines.get(
-   830                                                       self.resource_group,
-   831                                                       vm_name,
-   832                                                       expand='instanceView'
-   833                                                   )
-
-Total time: 0 s
-File: /Users/alex/Desktop/work/cb-profiled/profilenv/lib/python3.6/site-packages/cloudbridge/cloud/providers/azure/azure_client.py
-Function: create_vm at line 835
-
-Line #      Hits         Time  Per Hit   % Time  Line Contents
-==============================================================
-   835                                               @profile
-   836                                               def create_vm(self, vm_name, params):
-   837                                                   return self.compute_client.virtual_machines. \
-   838                                                       create_or_update(self.resource_group,
-   839                                                                        vm_name, params).result()
-
-Total time: 0 s
-File: /Users/alex/Desktop/work/cb-profiled/profilenv/lib/python3.6/site-packages/cloudbridge/cloud/providers/azure/azure_client.py
-Function: update_vm at line 841
-
-Line #      Hits         Time  Per Hit   % Time  Line Contents
-==============================================================
-   841                                               @profile
-   842                                               def update_vm(self, vm_id, params):
-   843                                                   url_params = azure_helpers.parse_url(VM_RESOURCE_ID,
-   844                                                                                        vm_id)
-   845                                                   vm_name = url_params.get(VM_NAME)
-   846                                                   return self.compute_client.virtual_machines. \
-   847                                                       create_or_update(self.resource_group,
-   848                                                                        vm_name, params, raw=True)
-
-Total time: 0 s
-File: /Users/alex/Desktop/work/cb-profiled/profilenv/lib/python3.6/site-packages/cloudbridge/cloud/providers/azure/azure_client.py
-Function: deallocate_vm at line 850
-
-Line #      Hits         Time  Per Hit   % Time  Line Contents
-==============================================================
-   850                                               @profile
-   851                                               def deallocate_vm(self, vm_id):
-   852                                                   url_params = azure_helpers.parse_url(VM_RESOURCE_ID,
-   853                                                                                        vm_id)
-   854                                                   vm_name = url_params.get(VM_NAME)
-   855                                                   self.compute_client. \
-   856                                                       virtual_machines.deallocate(self.resource_group,
-   857                                                                                   vm_name).wait()
-
-Total time: 0 s
-File: /Users/alex/Desktop/work/cb-profiled/profilenv/lib/python3.6/site-packages/cloudbridge/cloud/providers/azure/azure_client.py
-Function: generalize_vm at line 859
-
-Line #      Hits         Time  Per Hit   % Time  Line Contents
-==============================================================
-   859                                               @profile
-   860                                               def generalize_vm(self, vm_id):
-   861                                                   url_params = azure_helpers.parse_url(VM_RESOURCE_ID,
-   862                                                                                        vm_id)
-   863                                                   vm_name = url_params.get(VM_NAME)
-   864                                                   self.compute_client.virtual_machines. \
-   865                                                       generalize(self.resource_group, vm_name)
-
-Total time: 0 s
-File: /Users/alex/Desktop/work/cb-profiled/profilenv/lib/python3.6/site-packages/cloudbridge/cloud/providers/azure/azure_client.py
-Function: start_vm at line 867
-
-Line #      Hits         Time  Per Hit   % Time  Line Contents
-==============================================================
-   867                                               @profile
-   868                                               def start_vm(self, vm_id):
-   869                                                   url_params = azure_helpers.parse_url(VM_RESOURCE_ID,
-   870                                                                                        vm_id)
-   871                                                   vm_name = url_params.get(VM_NAME)
-   872                                                   self.compute_client.virtual_machines. \
-   873                                                       start(self.resource_group,
-   874                                                             vm_name).wait()
-
-Total time: 0 s
-File: /Users/alex/Desktop/work/cb-profiled/profilenv/lib/python3.6/site-packages/cloudbridge/cloud/providers/azure/azure_client.py
-Function: update_vm_tags at line 876
-
-Line #      Hits         Time  Per Hit   % Time  Line Contents
-==============================================================
-   876                                               @profile
-   877                                               def update_vm_tags(self, vm_id, tags):
-   878                                                   url_params = azure_helpers.parse_url(VM_RESOURCE_ID,
-   879                                                                                        vm_id)
-   880                                                   vm_name = url_params.get(VM_NAME)
-   881                                                   self.compute_client.virtual_machines. \
-   882                                                       create_or_update(self.resource_group,
-   883                                                                        vm_name, tags).result()
-
-Total time: 0 s
-File: /Users/alex/Desktop/work/cb-profiled/profilenv/lib/python3.6/site-packages/cloudbridge/cloud/providers/azure/azure_client.py
-Function: delete_nic at line 885
-
-Line #      Hits         Time  Per Hit   % Time  Line Contents
-==============================================================
-   885                                               @profile
-   886                                               def delete_nic(self, nic_id):
-   887                                                   nic_params = azure_helpers.\
-   888                                                       parse_url(NETWORK_INTERFACE_RESOURCE_ID, nic_id)
-   889                                                   nic_name = nic_params.get(NETWORK_INTERFACE_NAME)
-   890                                                   self.network_management_client. \
-   891                                                       network_interfaces.delete(self.resource_group,
-   892                                                                                 nic_name).wait()
-
-Total time: 0 s
-File: /Users/alex/Desktop/work/cb-profiled/profilenv/lib/python3.6/site-packages/cloudbridge/cloud/providers/azure/azure_client.py
-Function: get_nic at line 894
-
-Line #      Hits         Time  Per Hit   % Time  Line Contents
-==============================================================
-   894                                               @profile
-   895                                               def get_nic(self, nic_id):
-   896                                                   nic_params = azure_helpers.\
-   897                                                       parse_url(NETWORK_INTERFACE_RESOURCE_ID, nic_id)
-   898                                                   nic_name = nic_params.get(NETWORK_INTERFACE_NAME)
-   899                                                   return self.network_management_client. \
-   900                                                       network_interfaces.get(self.resource_group, nic_name)
-
-Total time: 0 s
-File: /Users/alex/Desktop/work/cb-profiled/profilenv/lib/python3.6/site-packages/cloudbridge/cloud/providers/azure/azure_client.py
-Function: update_nic at line 902
-
-Line #      Hits         Time  Per Hit   % Time  Line Contents
-==============================================================
-   902                                               @profile
-   903                                               def update_nic(self, nic_id, params):
-   904                                                   nic_params = azure_helpers.\
-   905                                                       parse_url(NETWORK_INTERFACE_RESOURCE_ID, nic_id)
-   906                                                   nic_name = nic_params.get(NETWORK_INTERFACE_NAME)
-   907                                                   async_nic_creation = self.network_management_client. \
-   908                                                       network_interfaces.create_or_update(
-   909                                                           self.resource_group,
-   910                                                           nic_name,
-   911                                                           params
-   912                                                       )
-   913                                                   nic_info = async_nic_creation.result()
-   914                                                   return nic_info
-
-Total time: 0 s
-File: /Users/alex/Desktop/work/cb-profiled/profilenv/lib/python3.6/site-packages/cloudbridge/cloud/providers/azure/azure_client.py
-Function: create_nic at line 916
-
-Line #      Hits         Time  Per Hit   % Time  Line Contents
-==============================================================
-   916                                               @profile
-   917                                               def create_nic(self, nic_name, params):
-   918                                                   return self.network_management_client. \
-   919                                                       network_interfaces.create_or_update(
-   920                                                           self.resource_group,
-   921                                                           nic_name,
-   922                                                           params
-   923                                                       ).result()
-
-Total time: 0 s
-File: /Users/alex/Desktop/work/cb-profiled/profilenv/lib/python3.6/site-packages/cloudbridge/cloud/providers/azure/azure_client.py
-Function: create_public_key at line 925
-
-Line #      Hits         Time  Per Hit   % Time  Line Contents
-==============================================================
-   925                                               @profile
-   926                                               def create_public_key(self, entity):
-   927                                                   return self.table_service. \
-   928                                                       insert_or_replace_entity(self.public_key_storage_table_name,
-   929                                                                                entity)
-
-Total time: 0 s
-File: /Users/alex/Desktop/work/cb-profiled/profilenv/lib/python3.6/site-packages/cloudbridge/cloud/providers/azure/azure_client.py
-Function: get_public_key at line 931
-
-Line #      Hits         Time  Per Hit   % Time  Line Contents
-==============================================================
-   931                                               @profile
-   932                                               def get_public_key(self, name):
-   933                                                   entities = self.table_service. \
-   934                                                       query_entities(self.public_key_storage_table_name,
-   935                                                                      "Name eq '{0}'".format(name), num_results=1)
-   936                                           
-   937                                                   return entities.items[0] if len(entities.items) > 0 else None
-
-Total time: 0 s
-File: /Users/alex/Desktop/work/cb-profiled/profilenv/lib/python3.6/site-packages/cloudbridge/cloud/providers/azure/azure_client.py
-Function: delete_public_key at line 939
-
-Line #      Hits         Time  Per Hit   % Time  Line Contents
-==============================================================
-   939                                               @profile
-   940                                               def delete_public_key(self, entity):
-   941                                                   self.table_service.delete_entity(self.public_key_storage_table_name,
-   942                                                                                    entity.PartitionKey, entity.RowKey)
-
-Total time: 0 s
-File: /Users/alex/Desktop/work/cb-profiled/profilenv/lib/python3.6/site-packages/cloudbridge/cloud/providers/azure/azure_client.py
-Function: list_public_keys at line 944
-
-Line #      Hits         Time  Per Hit   % Time  Line Contents
-==============================================================
-   944                                               @profile
-   945                                               def list_public_keys(self, partition_key, limit=None, marker=None):
-   946                                                   entities = self.table_service. \
-   947                                                       query_entities(self.public_key_storage_table_name,
-   948                                                                      "PartitionKey eq '{0}'".format(partition_key),
-   949                                                                      marker=marker, num_results=limit)
-   950                                                   return (entities.items, entities.next_marker)
-
-Total time: 0 s
-File: /Users/alex/Desktop/work/cb-profiled/profilenv/lib/python3.6/site-packages/cloudbridge/cloud/providers/azure/azure_client.py
-Function: delete_route_table at line 952
-
-Line #      Hits         Time  Per Hit   % Time  Line Contents
-==============================================================
-   952                                               @profile
-   953                                               def delete_route_table(self, route_table_name):
-   954                                                   self.network_management_client. \
-   955                                                       route_tables.delete(self.resource_group, route_table_name
-   956                                                                           ).wait()
-
-Total time: 0 s
-File: /Users/alex/Desktop/work/cb-profiled/profilenv/lib/python3.6/site-packages/cloudbridge/cloud/providers/azure/azure_client.py
-Function: attach_subnet_to_route_table at line 958
-
-Line #      Hits         Time  Per Hit   % Time  Line Contents
-==============================================================
-   958                                               @profile
-   959                                               def attach_subnet_to_route_table(self, subnet_id, route_table_id):
-   960                                                   url_params = azure_helpers.parse_url(SUBNET_RESOURCE_ID,
-   961                                                                                        subnet_id)
-   962                                                   network_name = url_params.get(NETWORK_NAME)
-   963                                                   subnet_name = url_params.get(SUBNET_NAME)
-   964                                           
-   965                                                   subnet_info = self.network_management_client.subnets.get(
-   966                                                       self.resource_group,
-   967                                                       network_name,
-   968                                                       subnet_name
-   969                                                   )
-   970                                                   if subnet_info:
-   971                                                       subnet_info.route_table = {
-   972                                                           'id': route_table_id
-   973                                                       }
-   974                                           
-   975                                                       result_create = self.network_management_client. \
-   976                                                           subnets.create_or_update(
-   977                                                            self.resource_group,
-   978                                                            network_name,
-   979                                                            subnet_name,
-   980                                                            subnet_info)
-   981                                                       subnet_info = result_create.result()
-   982                                           
-   983                                                   return subnet_info
-
-Total time: 0 s
-File: /Users/alex/Desktop/work/cb-profiled/profilenv/lib/python3.6/site-packages/cloudbridge/cloud/providers/azure/azure_client.py
-Function: detach_subnet_to_route_table at line 985
-
-Line #      Hits         Time  Per Hit   % Time  Line Contents
-==============================================================
-   985                                               @profile
-   986                                               def detach_subnet_to_route_table(self, subnet_id, route_table_id):
-   987                                                   url_params = azure_helpers.parse_url(SUBNET_RESOURCE_ID,
-   988                                                                                        subnet_id)
-   989                                                   network_name = url_params.get(NETWORK_NAME)
-   990                                                   subnet_name = url_params.get(SUBNET_NAME)
-   991                                           
-   992                                                   subnet_info = self.network_management_client.subnets.get(
-   993                                                       self.resource_group,
-   994                                                       network_name,
-   995                                                       subnet_name
-   996                                                   )
-   997                                           
-   998                                                   if subnet_info and subnet_info.route_table.id == route_table_id:
-   999                                                       subnet_info.route_table = None
-  1000                                           
-  1001                                                       result_create = self.network_management_client. \
-  1002                                                           subnets.create_or_update(
-  1003                                                            self.resource_group,
-  1004                                                            network_name,
-  1005                                                            subnet_name,
-  1006                                                            subnet_info)
-  1007                                                       subnet_info = result_create.result()
-  1008                                           
-  1009                                                   return subnet_info
-
-Total time: 0 s
-File: /Users/alex/Desktop/work/cb-profiled/profilenv/lib/python3.6/site-packages/cloudbridge/cloud/providers/azure/azure_client.py
-Function: list_route_tables at line 1011
-
-Line #      Hits         Time  Per Hit   % Time  Line Contents
-==============================================================
-  1011                                               @profile
-  1012                                               def list_route_tables(self):
-  1013                                                   return self.network_management_client. \
-  1014                                                       route_tables.list(self.resource_group)
-
-Total time: 0 s
-File: /Users/alex/Desktop/work/cb-profiled/profilenv/lib/python3.6/site-packages/cloudbridge/cloud/providers/azure/azure_client.py
-Function: get_route_table at line 1016
-
-Line #      Hits         Time  Per Hit   % Time  Line Contents
-==============================================================
-  1016                                               @profile
-  1017                                               def get_route_table(self, router_id):
-  1018                                                   url_params = azure_helpers.parse_url(ROUTER_RESOURCE_ID,
-  1019                                                                                        router_id)
-  1020                                                   router_name = url_params.get(ROUTER_NAME)
-  1021                                                   return self.network_management_client. \
-  1022                                                       route_tables.get(self.resource_group, router_name)
-
-Total time: 0 s
-File: /Users/alex/Desktop/work/cb-profiled/profilenv/lib/python3.6/site-packages/cloudbridge/cloud/providers/azure/azure_client.py
-Function: create_route_table at line 1024
-
-Line #      Hits         Time  Per Hit   % Time  Line Contents
-==============================================================
-  1024                                               @profile
-  1025                                               def create_route_table(self, route_table_name, params):
-  1026                                                   return self.network_management_client. \
-  1027                                                       route_tables.create_or_update(
-  1028                                                        self.resource_group,
-  1029                                                        route_table_name, params).result()
-
-Total time: 0 s
-File: /Users/alex/Desktop/work/cb-profiled/profilenv/lib/python3.6/site-packages/cloudbridge/cloud/providers/azure/azure_client.py
-Function: update_route_table_tags at line 1031
-
-Line #      Hits         Time  Per Hit   % Time  Line Contents
-==============================================================
-  1031                                               @profile
-  1032                                               def update_route_table_tags(self, route_table_name, tags):
-  1033                                                   self.network_management_client.route_tables. \
-  1034                                                       create_or_update(self.resource_group,
-  1035                                                                        route_table_name, tags).result()
-

+ 0 - 1467
results/compute.res

@@ -1,1467 +0,0 @@
-Test output
- .....
-----------------------------------------------------------------------
-Ran 5 tests in 2106.786s
-
-OK
-
-Wrote profile results to run_tests.py.lprof
-Timer unit: 1e-06 s
-
-Total time: 1.62089 s
-File: /Users/alex/Desktop/work/cb-profiled/cloudbridge/cloudbridge/cloud/providers/azure/azure_client.py
-Function: __init__ at line 160
-
-Line #      Hits         Time  Per Hit   % Time  Line Contents
-==============================================================
-   160                                               @profile
-   161                                               def __init__(self, config):
-   162         5         41.0      8.2      0.0          self._config = config
-   163         5         14.0      2.8      0.0          self.subscription_id = str(config.get('azure_subscription_id'))
-   164         5          3.0      0.6      0.0          self._credentials = ServicePrincipalCredentials(
-   165         5          5.0      1.0      0.0              client_id=config.get('azure_client_id'),
-   166         5          5.0      1.0      0.0              secret=config.get('azure_secret'),
-   167         5    1620737.0 324147.4    100.0              tenant=config.get('azure_tenant')
-   168                                                   )
-   169                                           
-   170         5         13.0      2.6      0.0          self._access_token = config.get('azure_access_token')
-   171         5          5.0      1.0      0.0          self._resource_client = None
-   172         5          4.0      0.8      0.0          self._storage_client = None
-   173         5          5.0      1.0      0.0          self._network_management_client = None
-   174         5          5.0      1.0      0.0          self._subscription_client = None
-   175         5          3.0      0.6      0.0          self._compute_client = None
-   176         5          4.0      0.8      0.0          self._access_key_result = None
-   177         5          5.0      1.0      0.0          self._block_blob_service = None
-   178         5          6.0      1.2      0.0          self._table_service = None
-   179         5          3.0      0.6      0.0          self._storage_account = None
-   180                                           
-   181         5         35.0      7.0      0.0          log.debug("azure subscription : %s", self.subscription_id)
-
-Total time: 1.959 s
-File: /Users/alex/Desktop/work/cb-profiled/cloudbridge/cloudbridge/cloud/providers/azure/azure_client.py
-Function: access_key_result at line 183
-
-Line #      Hits         Time  Per Hit   % Time  Line Contents
-==============================================================
-   183                                               @property
-   184                                               @tenacity.retry(stop=tenacity.stop_after_attempt(5), reraise=True)
-   185                                               @profile
-   186                                               def access_key_result(self):
-   187         4          6.0      1.5      0.0          if not self._access_key_result:
-   188         4         22.0      5.5      0.0              storage_account = self.storage_account
-   189                                           
-   190         4    1087621.0 271905.2     55.5              if self.get_storage_account(storage_account).\
-   191         4          6.0      1.5      0.0                      provisioning_state.value != 'Succeeded':
-   192                                                           log.debug(
-   193                                                               "Storage account %s is not in Succeeded state yet. ",
-   194                                                               storage_account)
-   195                                                           raise WaitStateException(
-   196                                                               "Waited too long for storage account: {0} to "
-   197                                                               "become ready.".format(
-   198                                                                   storage_account,
-   199                                                                   self.get_storage_account(storage_account).
-   200                                                                   provisioning_state))
-   201                                           
-   202         4        915.0    228.8      0.0              self._access_key_result = self.storage_client.storage_accounts. \
-   203         4     870421.0 217605.2     44.4                  list_keys(self.resource_group, storage_account)
-   204         4         10.0      2.5      0.0          return self._access_key_result
-
-Total time: 0.000332 s
-File: /Users/alex/Desktop/work/cb-profiled/cloudbridge/cloudbridge/cloud/providers/azure/azure_client.py
-Function: resource_group at line 206
-
-Line #      Hits         Time  Per Hit   % Time  Line Contents
-==============================================================
-   206                                               @property
-   207                                               @profile
-   208                                               def resource_group(self):
-   209       185        332.0      1.8    100.0          return self._config.get('azure_resource_group')
-
-Total time: 1.6e-05 s
-File: /Users/alex/Desktop/work/cb-profiled/cloudbridge/cloudbridge/cloud/providers/azure/azure_client.py
-Function: storage_account at line 211
-
-Line #      Hits         Time  Per Hit   % Time  Line Contents
-==============================================================
-   211                                               @property
-   212                                               @profile
-   213                                               def storage_account(self):
-   214        12         16.0      1.3    100.0          return self._config.get('azure_storage_account')
-
-Total time: 2e-05 s
-File: /Users/alex/Desktop/work/cb-profiled/cloudbridge/cloudbridge/cloud/providers/azure/azure_client.py
-Function: region_name at line 216
-
-Line #      Hits         Time  Per Hit   % Time  Line Contents
-==============================================================
-   216                                               @property
-   217                                               @profile
-   218                                               def region_name(self):
-   219        10         20.0      2.0    100.0          return self._config.get('azure_region_name')
-
-Total time: 5.5e-05 s
-File: /Users/alex/Desktop/work/cb-profiled/cloudbridge/cloudbridge/cloud/providers/azure/azure_client.py
-Function: public_key_storage_table_name at line 221
-
-Line #      Hits         Time  Per Hit   % Time  Line Contents
-==============================================================
-   221                                               @property
-   222                                               @profile
-   223                                               def public_key_storage_table_name(self):
-   224        32         55.0      1.7    100.0          return self._config.get('azure_public_key_storage_table_name')
-
-Total time: 0.028107 s
-File: /Users/alex/Desktop/work/cb-profiled/cloudbridge/cloudbridge/cloud/providers/azure/azure_client.py
-Function: storage_client at line 226
-
-Line #      Hits         Time  Per Hit   % Time  Line Contents
-==============================================================
-   226                                               @property
-   227                                               @profile
-   228                                               def storage_client(self):
-   229        12         15.0      1.2      0.1          if not self._storage_client:
-   230                                                       self._storage_client = \
-   231         4          7.0      1.8      0.0                  StorageManagementClient(self._credentials,
-   232         4      28078.0   7019.5     99.9                                          self.subscription_id)
-   233        12          7.0      0.6      0.0          return self._storage_client
-
-Total time: 0.027975 s
-File: /Users/alex/Desktop/work/cb-profiled/cloudbridge/cloudbridge/cloud/providers/azure/azure_client.py
-Function: subscription_client at line 235
-
-Line #      Hits         Time  Per Hit   % Time  Line Contents
-==============================================================
-   235                                               @property
-   236                                               @profile
-   237                                               def subscription_client(self):
-   238         5          7.0      1.4      0.0          if not self._subscription_client:
-   239         4      27961.0   6990.2     99.9              self._subscription_client = SubscriptionClient(self._credentials)
-   240         5          7.0      1.4      0.0          return self._subscription_client
-
-Total time: 0.053718 s
-File: /Users/alex/Desktop/work/cb-profiled/cloudbridge/cloudbridge/cloud/providers/azure/azure_client.py
-Function: resource_client at line 242
-
-Line #      Hits         Time  Per Hit   % Time  Line Contents
-==============================================================
-   242                                               @property
-   243                                               @profile
-   244                                               def resource_client(self):
-   245         5          5.0      1.0      0.0          if not self._resource_client:
-   246                                                       self._resource_client = \
-   247         5          2.0      0.4      0.0                  ResourceManagementClient(self._credentials,
-   248         5      53700.0  10740.0    100.0                                           self.subscription_id)
-   249         5         11.0      2.2      0.0          return self._resource_client
-
-Total time: 0.0351 s
-File: /Users/alex/Desktop/work/cb-profiled/cloudbridge/cloudbridge/cloud/providers/azure/azure_client.py
-Function: compute_client at line 251
-
-Line #      Hits         Time  Per Hit   % Time  Line Contents
-==============================================================
-   251                                               @property
-   252                                               @profile
-   253                                               def compute_client(self):
-   254        64         84.0      1.3      0.2          if not self._compute_client:
-   255                                                       self._compute_client = \
-   256         5          8.0      1.6      0.0                  ComputeManagementClient(self._credentials,
-   257         5      34967.0   6993.4     99.6                                          self.subscription_id)
-   258        64         41.0      0.6      0.1          return self._compute_client
-
-Total time: 0.027097 s
-File: /Users/alex/Desktop/work/cb-profiled/cloudbridge/cloudbridge/cloud/providers/azure/azure_client.py
-Function: network_management_client at line 260
-
-Line #      Hits         Time  Per Hit   % Time  Line Contents
-==============================================================
-   260                                               @property
-   261                                               @profile
-   262                                               def network_management_client(self):
-   263       115        122.0      1.1      0.5          if not self._network_management_client:
-   264         4          4.0      1.0      0.0              self._network_management_client = NetworkManagementClient(
-   265         4      26895.0   6723.8     99.3                  self._credentials, self.subscription_id)
-   266       115         76.0      0.7      0.3          return self._network_management_client
-
-Total time: 0 s
-File: /Users/alex/Desktop/work/cb-profiled/cloudbridge/cloudbridge/cloud/providers/azure/azure_client.py
-Function: blob_service at line 268
-
-Line #      Hits         Time  Per Hit   % Time  Line Contents
-==============================================================
-   268                                               @property
-   269                                               @profile
-   270                                               def blob_service(self):
-   271                                                   self._get_or_create_storage_account()
-   272                                                   if not self._block_blob_service:
-   273                                                       if self._access_token:
-   274                                                           token_credential = TokenCredential(self._access_token)
-   275                                                           self._block_blob_service = BlockBlobService(
-   276                                                               account_name=self.storage_account,
-   277                                                               token_credential=token_credential)
-   278                                                       else:
-   279                                                           self._block_blob_service = BlockBlobService(
-   280                                                               account_name=self.storage_account,
-   281                                                               account_key=self.access_key_result.keys[0].value)
-   282                                                   return self._block_blob_service
-
-Total time: 4.47112 s
-File: /Users/alex/Desktop/work/cb-profiled/cloudbridge/cloudbridge/cloud/providers/azure/azure_client.py
-Function: table_service at line 284
-
-Line #      Hits         Time  Per Hit   % Time  Line Contents
-==============================================================
-   284                                               @property
-   285                                               @profile
-   286                                               def table_service(self):
-   287        16    1016653.0  63540.8     22.7          self._get_or_create_storage_account()
-   288        16         22.0      1.4      0.0          if not self._table_service:
-   289         4          5.0      1.2      0.0              self._table_service = TableService(
-   290         4         38.0      9.5      0.0                  self.storage_account,
-   291         4    1960453.0 490113.2     43.8                  self.access_key_result.keys[0].value)
-   292        16         17.0      1.1      0.0          if not self._table_service. \
-   293        16    1493881.0  93367.6     33.4                  exists(table_name=self.public_key_storage_table_name):
-   294                                                       self._table_service.create_table(
-   295                                                           self.public_key_storage_table_name)
-   296        16         54.0      3.4      0.0          return self._table_service
-
-Total time: 1.11388 s
-File: /Users/alex/Desktop/work/cb-profiled/cloudbridge/cloudbridge/cloud/providers/azure/azure_client.py
-Function: get_resource_group at line 298
-
-Line #      Hits         Time  Per Hit   % Time  Line Contents
-==============================================================
-   298                                               @profile
-   299                                               def get_resource_group(self, name):
-   300         5    1113880.0 222776.0    100.0          return self.resource_client.resource_groups.get(name)
-
-Total time: 0 s
-File: /Users/alex/Desktop/work/cb-profiled/cloudbridge/cloudbridge/cloud/providers/azure/azure_client.py
-Function: create_resource_group at line 302
-
-Line #      Hits         Time  Per Hit   % Time  Line Contents
-==============================================================
-   302                                               @profile
-   303                                               def create_resource_group(self, name, parameters):
-   304                                                   return self.resource_client.resource_groups. \
-   305                                                       create_or_update(name, parameters)
-
-Total time: 2.10199 s
-File: /Users/alex/Desktop/work/cb-profiled/cloudbridge/cloudbridge/cloud/providers/azure/azure_client.py
-Function: get_storage_account at line 307
-
-Line #      Hits         Time  Per Hit   % Time  Line Contents
-==============================================================
-   307                                               @profile
-   308                                               def get_storage_account(self, storage_account):
-   309         8     108683.0  13585.4      5.2          return self.storage_client.storage_accounts. \
-   310         8    1993304.0 249163.0     94.8              get_properties(self.resource_group, storage_account)
-
-Total time: 0 s
-File: /Users/alex/Desktop/work/cb-profiled/cloudbridge/cloudbridge/cloud/providers/azure/azure_client.py
-Function: create_storage_account at line 312
-
-Line #      Hits         Time  Per Hit   % Time  Line Contents
-==============================================================
-   312                                               @profile
-   313                                               def create_storage_account(self, name, params):
-   314                                                   return self.storage_client.storage_accounts. \
-   315                                                       create(self.resource_group, name.lower(), params).result()
-
-Total time: 1.01459 s
-File: /Users/alex/Desktop/work/cb-profiled/cloudbridge/cloudbridge/cloud/providers/azure/azure_client.py
-Function: _get_or_create_storage_account at line 319
-
-Line #      Hits         Time  Per Hit   % Time  Line Contents
-==============================================================
-   319                                               @tenacity.retry(stop=tenacity.stop_after_attempt(2),
-   320                                                               retry=tenacity.retry_if_exception_type(CloudError),
-   321                                                               reraise=True)
-   322                                               @profile
-   323                                               def _get_or_create_storage_account(self):
-   324        16         23.0      1.4      0.0          if self._storage_account:
-   325        12         11.0      0.9      0.0              return self._storage_account
-   326                                                   else:
-   327         4          3.0      0.8      0.0              try:
-   328                                                           self._storage_account = \
-   329         4    1014556.0 253639.0    100.0                      self.get_storage_account(self.storage_account)
-   330                                                       except CloudError as cloud_error:
-   331                                                           if cloud_error.error.error == "ResourceNotFound":
-   332                                                               storage_account_params = {
-   333                                                                   'sku': {
-   334                                                                       'name': 'Standard_LRS'
-   335                                                                   },
-   336                                                                   'kind': 'storage',
-   337                                                                   'location': self.region_name,
-   338                                                               }
-   339                                                               try:
-   340                                                                   self._storage_account = \
-   341                                                                       self.create_storage_account(self.storage_account,
-   342                                                                                                   storage_account_params)
-   343                                                               except CloudError as cloud_error2:  # pragma: no cover
-   344                                                                   if cloud_error2.error.error == "AuthorizationFailed":
-   345                                                                       mess = 'The following error was returned by ' \
-   346                                                                              'Azure:\n%s\n\nThis is likely because the' \
-   347                                                                              ' Role associated with the provided ' \
-   348                                                                              'credentials does not allow for Storage ' \
-   349                                                                              'Account creation.\nA Storage Account is ' \
-   350                                                                              'necessary in order to perform the ' \
-   351                                                                              'desired operation. You must either ' \
-   352                                                                              'provide an existing Storage Account name' \
-   353                                                                              ' as part of the configuration, or ' \
-   354                                                                              'elevate the associated Role.\nFor more ' \
-   355                                                                              'information on roles, see: https://docs.' \
-   356                                                                              'microsoft.com/en-us/azure/role-based-' \
-   357                                                                              'access-control/overview\n' % cloud_error2
-   358                                                                       raise ProviderConnectionException(mess)
-   359                                           
-   360                                                                   elif cloud_error2.error.error == \
-   361                                                                           "StorageAccountAlreadyTaken":
-   362                                                                       mess = 'The following error was ' \
-   363                                                                              'returned by Azure:\n%s\n\n' \
-   364                                                                              'Note that Storage Account names must be ' \
-   365                                                                              'unique across Azure (not just in your ' \
-   366                                                                              'subscription).\nFor more information ' \
-   367                                                                              'see https://docs.microsoft.com/en-us/' \
-   368                                                                              'azure/azure-resource-manager/resource-' \
-   369                                                                              'manager-storage-account-name-errors\n' \
-   370                                                                              % cloud_error2
-   371                                                                       raise InvalidLabelException(mess)
-   372                                                                   else:
-   373                                                                       raise cloud_error2
-   374                                                           else:
-   375                                                               raise cloud_error
-
-Total time: 0.052927 s
-File: /Users/alex/Desktop/work/cb-profiled/cloudbridge/cloudbridge/cloud/providers/azure/azure_client.py
-Function: list_locations at line 377
-
-Line #      Hits         Time  Per Hit   % Time  Line Contents
-==============================================================
-   377                                               @profile
-   378                                               def list_locations(self):
-   379         5      52784.0  10556.8     99.7          return self.subscription_client.subscriptions. \
-   380         5        143.0     28.6      0.3              list_locations(self.subscription_id)
-
-Total time: 0 s
-File: /Users/alex/Desktop/work/cb-profiled/cloudbridge/cloudbridge/cloud/providers/azure/azure_client.py
-Function: list_vm_firewall at line 382
-
-Line #      Hits         Time  Per Hit   % Time  Line Contents
-==============================================================
-   382                                               @profile
-   383                                               def list_vm_firewall(self):
-   384                                                   return self.network_management_client.network_security_groups. \
-   385                                                       list(self.resource_group)
-
-Total time: 22.4962 s
-File: /Users/alex/Desktop/work/cb-profiled/cloudbridge/cloudbridge/cloud/providers/azure/azure_client.py
-Function: create_vm_firewall at line 387
-
-Line #      Hits         Time  Per Hit   % Time  Line Contents
-==============================================================
-   387                                               @profile
-   388                                               def create_vm_firewall(self, name, parameters):
-   389         2       1602.0    801.0      0.0          return self.network_management_client.network_security_groups. \
-   390         2         23.0     11.5      0.0              create_or_update(self.resource_group, name,
-   391         2   22494593.0 11247296.5    100.0                               parameters).result()
-
-Total time: 0 s
-File: /Users/alex/Desktop/work/cb-profiled/cloudbridge/cloudbridge/cloud/providers/azure/azure_client.py
-Function: update_vm_firewall_tags at line 393
-
-Line #      Hits         Time  Per Hit   % Time  Line Contents
-==============================================================
-   393                                               @profile
-   394                                               def update_vm_firewall_tags(self, fw_id, tags):
-   395                                                   url_params = azure_helpers.parse_url(VM_FIREWALL_RESOURCE_ID,
-   396                                                                                        fw_id)
-   397                                                   name = url_params.get(VM_FIREWALL_NAME)
-   398                                                   return self.network_management_client.network_security_groups. \
-   399                                                       create_or_update(self.resource_group, name,
-   400                                                                        {'tags': tags,
-   401                                                                         'location': self.region_name}).result()
-
-Total time: 0.776911 s
-File: /Users/alex/Desktop/work/cb-profiled/cloudbridge/cloudbridge/cloud/providers/azure/azure_client.py
-Function: get_vm_firewall at line 403
-
-Line #      Hits         Time  Per Hit   % Time  Line Contents
-==============================================================
-   403                                               @profile
-   404                                               def get_vm_firewall(self, fw_id):
-   405         4          8.0      2.0      0.0          url_params = azure_helpers.parse_url(VM_FIREWALL_RESOURCE_ID,
-   406         4        100.0     25.0      0.0                                               fw_id)
-   407         4          5.0      1.2      0.0          fw_name = url_params.get(VM_FIREWALL_NAME)
-   408         4       2975.0    743.8      0.4          return self.network_management_client.network_security_groups. \
-   409         4     773823.0 193455.8     99.6              get(self.resource_group, fw_name)
-
-Total time: 21.5193 s
-File: /Users/alex/Desktop/work/cb-profiled/cloudbridge/cloudbridge/cloud/providers/azure/azure_client.py
-Function: delete_vm_firewall at line 411
-
-Line #      Hits         Time  Per Hit   % Time  Line Contents
-==============================================================
-   411                                               @profile
-   412                                               def delete_vm_firewall(self, fw_id):
-   413         2          8.0      4.0      0.0          url_params = azure_helpers.parse_url(VM_FIREWALL_RESOURCE_ID,
-   414         2         72.0     36.0      0.0                                               fw_id)
-   415         2          2.0      1.0      0.0          name = url_params.get(VM_FIREWALL_NAME)
-   416         2       2120.0   1060.0      0.0          self.network_management_client \
-   417         2   21517148.0 10758574.0    100.0              .network_security_groups.delete(self.resource_group, name).wait()
-
-Total time: 154.991 s
-File: /Users/alex/Desktop/work/cb-profiled/cloudbridge/cloudbridge/cloud/providers/azure/azure_client.py
-Function: create_vm_firewall_rule at line 419
-
-Line #      Hits         Time  Per Hit   % Time  Line Contents
-==============================================================
-   419                                               @profile
-   420                                               def create_vm_firewall_rule(self, fw_id,
-   421                                                                           rule_name, parameters):
-   422        14         35.0      2.5      0.0          url_params = azure_helpers.parse_url(VM_FIREWALL_RESOURCE_ID,
-   423        14        396.0     28.3      0.0                                               fw_id)
-   424        14         22.0      1.6      0.0          vm_firewall_name = url_params.get(VM_FIREWALL_NAME)
-   425        14      10489.0    749.2      0.0          return self.network_management_client.security_rules. \
-   426        14        128.0      9.1      0.0              create_or_update(self.resource_group, vm_firewall_name,
-   427        14  154979521.0 11069965.8    100.0                               rule_name, parameters).result()
-
-Total time: 0 s
-File: /Users/alex/Desktop/work/cb-profiled/cloudbridge/cloudbridge/cloud/providers/azure/azure_client.py
-Function: delete_vm_firewall_rule at line 429
-
-Line #      Hits         Time  Per Hit   % Time  Line Contents
-==============================================================
-   429                                               @profile
-   430                                               def delete_vm_firewall_rule(self, fw_rule_id, vm_firewall):
-   431                                                   url_params = azure_helpers.parse_url(VM_FIREWALL_RULE_RESOURCE_ID,
-   432                                                                                        fw_rule_id)
-   433                                                   name = url_params.get(VM_FIREWALL_RULE_NAME)
-   434                                                   return self.network_management_client.security_rules. \
-   435                                                       delete(self.resource_group, vm_firewall, name).result()
-
-Total time: 0 s
-File: /Users/alex/Desktop/work/cb-profiled/cloudbridge/cloudbridge/cloud/providers/azure/azure_client.py
-Function: list_containers at line 437
-
-Line #      Hits         Time  Per Hit   % Time  Line Contents
-==============================================================
-   437                                               @profile
-   438                                               def list_containers(self, prefix=None, limit=None, marker=None):
-   439                                                   results = self.blob_service.list_containers(prefix=prefix,
-   440                                                                                               num_results=limit,
-   441                                                                                               marker=marker)
-   442                                                   return (results.items, results.next_marker)
-
-Total time: 0 s
-File: /Users/alex/Desktop/work/cb-profiled/cloudbridge/cloudbridge/cloud/providers/azure/azure_client.py
-Function: create_container at line 444
-
-Line #      Hits         Time  Per Hit   % Time  Line Contents
-==============================================================
-   444                                               @profile
-   445                                               def create_container(self, container_name):
-   446                                                   try:
-   447                                                       self.blob_service.create_container(container_name,
-   448                                                                                          fail_on_exist=True)
-   449                                                   except AzureConflictHttpError as cloud_error:
-   450                                                       if cloud_error.error_code == "ContainerAlreadyExists":
-   451                                                           msg = "The given Bucket name '%s' already exists. Please " \
-   452                                                                 "use the `get` or `find` method to get a reference to " \
-   453                                                                 "an existing Bucket, or specify a new Bucket name to " \
-   454                                                                 "create.\nNote that in Azure, Buckets are contained " \
-   455                                                                 "in Storage Accounts." % container_name
-   456                                                           raise DuplicateResourceException(msg)
-   457                                           
-   458                                                   return self.blob_service.get_container_properties(container_name)
-
-Total time: 0 s
-File: /Users/alex/Desktop/work/cb-profiled/cloudbridge/cloudbridge/cloud/providers/azure/azure_client.py
-Function: get_container at line 460
-
-Line #      Hits         Time  Per Hit   % Time  Line Contents
-==============================================================
-   460                                               @profile
-   461                                               def get_container(self, container_name):
-   462                                                   return self.blob_service.get_container_properties(container_name)
-
-Total time: 0 s
-File: /Users/alex/Desktop/work/cb-profiled/cloudbridge/cloudbridge/cloud/providers/azure/azure_client.py
-Function: delete_container at line 464
-
-Line #      Hits         Time  Per Hit   % Time  Line Contents
-==============================================================
-   464                                               @profile
-   465                                               def delete_container(self, container_name):
-   466                                                   self.blob_service.delete_container(container_name)
-
-Total time: 0 s
-File: /Users/alex/Desktop/work/cb-profiled/cloudbridge/cloudbridge/cloud/providers/azure/azure_client.py
-Function: list_blobs at line 468
-
-Line #      Hits         Time  Per Hit   % Time  Line Contents
-==============================================================
-   468                                               @profile
-   469                                               def list_blobs(self, container_name, prefix=None):
-   470                                                   return self.blob_service.list_blobs(container_name, prefix=prefix)
-
-Total time: 0 s
-File: /Users/alex/Desktop/work/cb-profiled/cloudbridge/cloudbridge/cloud/providers/azure/azure_client.py
-Function: get_blob at line 472
-
-Line #      Hits         Time  Per Hit   % Time  Line Contents
-==============================================================
-   472                                               @profile
-   473                                               def get_blob(self, container_name, blob_name):
-   474                                                   return self.blob_service.get_blob_properties(container_name, blob_name)
-
-Total time: 0 s
-File: /Users/alex/Desktop/work/cb-profiled/cloudbridge/cloudbridge/cloud/providers/azure/azure_client.py
-Function: create_blob_from_text at line 476
-
-Line #      Hits         Time  Per Hit   % Time  Line Contents
-==============================================================
-   476                                               @profile
-   477                                               def create_blob_from_text(self, container_name, blob_name, text):
-   478                                                   self.blob_service.create_blob_from_text(container_name,
-   479                                                                                           blob_name, text)
-
-Total time: 0 s
-File: /Users/alex/Desktop/work/cb-profiled/cloudbridge/cloudbridge/cloud/providers/azure/azure_client.py
-Function: create_blob_from_file at line 481
-
-Line #      Hits         Time  Per Hit   % Time  Line Contents
-==============================================================
-   481                                               @profile
-   482                                               def create_blob_from_file(self, container_name, blob_name, file_path):
-   483                                                   self.blob_service.create_blob_from_path(container_name,
-   484                                                                                           blob_name, file_path)
-
-Total time: 0 s
-File: /Users/alex/Desktop/work/cb-profiled/cloudbridge/cloudbridge/cloud/providers/azure/azure_client.py
-Function: delete_blob at line 486
-
-Line #      Hits         Time  Per Hit   % Time  Line Contents
-==============================================================
-   486                                               @profile
-   487                                               def delete_blob(self, container_name, blob_name):
-   488                                                   self.blob_service.delete_blob(container_name, blob_name)
-
-Total time: 0 s
-File: /Users/alex/Desktop/work/cb-profiled/cloudbridge/cloudbridge/cloud/providers/azure/azure_client.py
-Function: get_blob_url at line 490
-
-Line #      Hits         Time  Per Hit   % Time  Line Contents
-==============================================================
-   490                                               @profile
-   491                                               def get_blob_url(self, container_name, blob_name, expiry_time):
-   492                                                   expiry_date = datetime.datetime.utcnow() + datetime.timedelta(
-   493                                                       seconds=expiry_time)
-   494                                                   sas = self.blob_service.generate_blob_shared_access_signature(
-   495                                                       container_name, blob_name, permission=BlobPermissions.READ,
-   496                                                       expiry=expiry_date)
-   497                                                   return self.blob_service.make_blob_url(container_name, blob_name,
-   498                                                                                          sas_token=sas)
-
-Total time: 0 s
-File: /Users/alex/Desktop/work/cb-profiled/cloudbridge/cloudbridge/cloud/providers/azure/azure_client.py
-Function: get_blob_content at line 500
-
-Line #      Hits         Time  Per Hit   % Time  Line Contents
-==============================================================
-   500                                               @profile
-   501                                               def get_blob_content(self, container_name, blob_name):
-   502                                                   out_stream = BytesIO()
-   503                                                   self.blob_service.get_blob_to_stream(container_name,
-   504                                                                                        blob_name, out_stream)
-   505                                                   return out_stream
-
-Total time: 30.9193 s
-File: /Users/alex/Desktop/work/cb-profiled/cloudbridge/cloudbridge/cloud/providers/azure/azure_client.py
-Function: create_empty_disk at line 507
-
-Line #      Hits         Time  Per Hit   % Time  Line Contents
-==============================================================
-   507                                               @profile
-   508                                               def create_empty_disk(self, disk_name, params):
-   509         1       7639.0   7639.0      0.0          return self.compute_client.disks.create_or_update(
-   510         1         18.0     18.0      0.0              self.resource_group,
-   511         1          0.0      0.0      0.0              disk_name,
-   512         1   30911676.0 30911676.0    100.0              params
-   513                                                   ).result()
-
-Total time: 30.8045 s
-File: /Users/alex/Desktop/work/cb-profiled/cloudbridge/cloudbridge/cloud/providers/azure/azure_client.py
-Function: create_snapshot_disk at line 515
-
-Line #      Hits         Time  Per Hit   % Time  Line Contents
-==============================================================
-   515                                               @profile
-   516                                               def create_snapshot_disk(self, disk_name, params):
-   517         1        405.0    405.0      0.0          return self.compute_client.disks.create_or_update(
-   518         1          7.0      7.0      0.0              self.resource_group,
-   519         1          0.0      0.0      0.0              disk_name,
-   520         1   30804040.0 30804040.0    100.0              params
-   521                                                   ).result()
-
-Total time: 0.415075 s
-File: /Users/alex/Desktop/work/cb-profiled/cloudbridge/cloudbridge/cloud/providers/azure/azure_client.py
-Function: get_disk at line 523
-
-Line #      Hits         Time  Per Hit   % Time  Line Contents
-==============================================================
-   523                                               @profile
-   524                                               def get_disk(self, disk_id):
-   525         2         12.0      6.0      0.0          url_params = azure_helpers.parse_url(VOLUME_RESOURCE_ID,
-   526         2         65.0     32.5      0.0                                               disk_id)
-   527         2          2.0      1.0      0.0          disk_name = url_params.get(VOLUME_NAME)
-   528         2     414996.0 207498.0    100.0          return self.compute_client.disks.get(self.resource_group, disk_name)
-
-Total time: 0 s
-File: /Users/alex/Desktop/work/cb-profiled/cloudbridge/cloudbridge/cloud/providers/azure/azure_client.py
-Function: list_disks at line 530
-
-Line #      Hits         Time  Per Hit   % Time  Line Contents
-==============================================================
-   530                                               @profile
-   531                                               def list_disks(self):
-   532                                                   return self.compute_client.disks. \
-   533                                                       list_by_resource_group(self.resource_group)
-
-Total time: 214.353 s
-File: /Users/alex/Desktop/work/cb-profiled/cloudbridge/cloudbridge/cloud/providers/azure/azure_client.py
-Function: delete_disk at line 535
-
-Line #      Hits         Time  Per Hit   % Time  Line Contents
-==============================================================
-   535                                               @profile
-   536                                               def delete_disk(self, disk_id):
-   537         8         25.0      3.1      0.0          url_params = azure_helpers.parse_url(VOLUME_RESOURCE_ID,
-   538         8        257.0     32.1      0.0                                               disk_id)
-   539         8         12.0      1.5      0.0          disk_name = url_params.get(VOLUME_NAME)
-   540         8  214352959.0 26794119.9    100.0          self.compute_client.disks.delete(self.resource_group, disk_name).wait()
-
-Total time: 0 s
-File: /Users/alex/Desktop/work/cb-profiled/cloudbridge/cloudbridge/cloud/providers/azure/azure_client.py
-Function: update_disk_tags at line 542
-
-Line #      Hits         Time  Per Hit   % Time  Line Contents
-==============================================================
-   542                                               @profile
-   543                                               def update_disk_tags(self, disk_id, tags):
-   544                                                   url_params = azure_helpers.parse_url(VOLUME_RESOURCE_ID,
-   545                                                                                        disk_id)
-   546                                                   disk_name = url_params.get(VOLUME_NAME)
-   547                                                   return self.compute_client.disks.update(
-   548                                                       self.resource_group,
-   549                                                       disk_name,
-   550                                                       {'tags': tags},
-   551                                                       raw=True
-   552                                                   )
-
-Total time: 0 s
-File: /Users/alex/Desktop/work/cb-profiled/cloudbridge/cloudbridge/cloud/providers/azure/azure_client.py
-Function: list_snapshots at line 554
-
-Line #      Hits         Time  Per Hit   % Time  Line Contents
-==============================================================
-   554                                               @profile
-   555                                               def list_snapshots(self):
-   556                                                   return self.compute_client.snapshots. \
-   557                                                       list_by_resource_group(self.resource_group)
-
-Total time: 0.191226 s
-File: /Users/alex/Desktop/work/cb-profiled/cloudbridge/cloudbridge/cloud/providers/azure/azure_client.py
-Function: get_snapshot at line 559
-
-Line #      Hits         Time  Per Hit   % Time  Line Contents
-==============================================================
-   559                                               @profile
-   560                                               def get_snapshot(self, snapshot_id):
-   561         1          5.0      5.0      0.0          url_params = azure_helpers.parse_url(SNAPSHOT_RESOURCE_ID,
-   562         1         48.0     48.0      0.0                                               snapshot_id)
-   563         1          2.0      2.0      0.0          snapshot_name = url_params.get(SNAPSHOT_NAME)
-   564         1        594.0    594.0      0.3          return self.compute_client.snapshots.get(self.resource_group,
-   565         1     190577.0 190577.0     99.7                                                   snapshot_name)
-
-Total time: 31.0976 s
-File: /Users/alex/Desktop/work/cb-profiled/cloudbridge/cloudbridge/cloud/providers/azure/azure_client.py
-Function: create_snapshot at line 567
-
-Line #      Hits         Time  Per Hit   % Time  Line Contents
-==============================================================
-   567                                               @profile
-   568                                               def create_snapshot(self, snapshot_name, params):
-   569         1        451.0    451.0      0.0          return self.compute_client.snapshots.create_or_update(
-   570         1          9.0      9.0      0.0              self.resource_group,
-   571         1          1.0      1.0      0.0              snapshot_name,
-   572         1   31097107.0 31097107.0    100.0              params
-   573                                                   ).result()
-
-Total time: 30.6236 s
-File: /Users/alex/Desktop/work/cb-profiled/cloudbridge/cloudbridge/cloud/providers/azure/azure_client.py
-Function: delete_snapshot at line 575
-
-Line #      Hits         Time  Per Hit   % Time  Line Contents
-==============================================================
-   575                                               @profile
-   576                                               def delete_snapshot(self, snapshot_id):
-   577         1          4.0      4.0      0.0          url_params = azure_helpers.parse_url(SNAPSHOT_RESOURCE_ID,
-   578         1         29.0     29.0      0.0                                               snapshot_id)
-   579         1          1.0      1.0      0.0          snapshot_name = url_params.get(SNAPSHOT_NAME)
-   580         1        457.0    457.0      0.0          self.compute_client.snapshots.delete(self.resource_group,
-   581         1   30623148.0 30623148.0    100.0                                               snapshot_name).wait()
-
-Total time: 0 s
-File: /Users/alex/Desktop/work/cb-profiled/cloudbridge/cloudbridge/cloud/providers/azure/azure_client.py
-Function: update_snapshot_tags at line 583
-
-Line #      Hits         Time  Per Hit   % Time  Line Contents
-==============================================================
-   583                                               @profile
-   584                                               def update_snapshot_tags(self, snapshot_id, tags):
-   585                                                   url_params = azure_helpers.parse_url(SNAPSHOT_RESOURCE_ID,
-   586                                                                                        snapshot_id)
-   587                                                   snapshot_name = url_params.get(SNAPSHOT_NAME)
-   588                                                   return self.compute_client.snapshots.update(
-   589                                                       self.resource_group,
-   590                                                       snapshot_name,
-   591                                                       {'tags': tags},
-   592                                                       raw=True
-   593                                                   )
-
-Total time: 0.000136 s
-File: /Users/alex/Desktop/work/cb-profiled/cloudbridge/cloudbridge/cloud/providers/azure/azure_client.py
-Function: is_gallery_image at line 595
-
-Line #      Hits         Time  Per Hit   % Time  Line Contents
-==============================================================
-   595                                               @profile
-   596                                               def is_gallery_image(self, image_id):
-   597         6          5.0      0.8      3.7          url_params = azure_helpers.parse_url(IMAGE_RESOURCE_ID,
-   598         6        125.0     20.8     91.9                                               image_id)
-   599                                                   # If it is a gallery image, it will always have an offer
-   600         6          6.0      1.0      4.4          return 'offer' in url_params
-
-Total time: 0 s
-File: /Users/alex/Desktop/work/cb-profiled/cloudbridge/cloudbridge/cloud/providers/azure/azure_client.py
-Function: create_image at line 602
-
-Line #      Hits         Time  Per Hit   % Time  Line Contents
-==============================================================
-   602                                               @profile
-   603                                               def create_image(self, name, params):
-   604                                                   return self.compute_client.images. \
-   605                                                       create_or_update(self.resource_group, name,
-   606                                                                        params).result()
-
-Total time: 0 s
-File: /Users/alex/Desktop/work/cb-profiled/cloudbridge/cloudbridge/cloud/providers/azure/azure_client.py
-Function: delete_image at line 608
-
-Line #      Hits         Time  Per Hit   % Time  Line Contents
-==============================================================
-   608                                               @profile
-   609                                               def delete_image(self, image_id):
-   610                                                   url_params = azure_helpers.parse_url(IMAGE_RESOURCE_ID,
-   611                                                                                        image_id)
-   612                                                   if not self.is_gallery_image(image_id):
-   613                                                       name = url_params.get(IMAGE_NAME)
-   614                                                       self.compute_client.images.delete(self.resource_group, name).wait()
-
-Total time: 0 s
-File: /Users/alex/Desktop/work/cb-profiled/cloudbridge/cloudbridge/cloud/providers/azure/azure_client.py
-Function: list_images at line 616
-
-Line #      Hits         Time  Per Hit   % Time  Line Contents
-==============================================================
-   616                                               @profile
-   617                                               def list_images(self):
-   618                                                   azure_images = list(self.compute_client.images.
-   619                                                                       list_by_resource_group(self.resource_group))
-   620                                                   return azure_images
-
-Total time: 0 s
-File: /Users/alex/Desktop/work/cb-profiled/cloudbridge/cloudbridge/cloud/providers/azure/azure_client.py
-Function: list_gallery_refs at line 622
-
-Line #      Hits         Time  Per Hit   % Time  Line Contents
-==============================================================
-   622                                               @profile
-   623                                               def list_gallery_refs(self):
-   624                                                   return gallery_image_references
-
-Total time: 0.000521 s
-File: /Users/alex/Desktop/work/cb-profiled/cloudbridge/cloudbridge/cloud/providers/azure/azure_client.py
-Function: get_image at line 626
-
-Line #      Hits         Time  Per Hit   % Time  Line Contents
-==============================================================
-   626                                               @profile
-   627                                               def get_image(self, image_id):
-   628         6         19.0      3.2      3.6          url_params = azure_helpers.parse_url(IMAGE_RESOURCE_ID,
-   629         6        182.0     30.3     34.9                                               image_id)
-   630         6        186.0     31.0     35.7          if self.is_gallery_image(image_id):
-   631         6          7.0      1.2      1.3              return GalleryImageReference(publisher=url_params['publisher'],
-   632         6          4.0      0.7      0.8                                           offer=url_params['offer'],
-   633         6          4.0      0.7      0.8                                           sku=url_params['sku'],
-   634         6        119.0     19.8     22.8                                           version=url_params['version'])
-   635                                                   else:
-   636                                                       name = url_params.get(IMAGE_NAME)
-   637                                                       return self.compute_client.images.get(self.resource_group, name)
-
-Total time: 0 s
-File: /Users/alex/Desktop/work/cb-profiled/cloudbridge/cloudbridge/cloud/providers/azure/azure_client.py
-Function: update_image_tags at line 639
-
-Line #      Hits         Time  Per Hit   % Time  Line Contents
-==============================================================
-   639                                               @profile
-   640                                               def update_image_tags(self, image_id, tags):
-   641                                                   url_params = azure_helpers.parse_url(IMAGE_RESOURCE_ID,
-   642                                                                                        image_id)
-   643                                                   if self.is_gallery_image(image_id):
-   644                                                       return True
-   645                                                   else:
-   646                                                       name = url_params.get(IMAGE_NAME)
-   647                                                       return self.compute_client.images. \
-   648                                                           create_or_update(self.resource_group, name,
-   649                                                                            {
-   650                                                                                'tags': tags,
-   651                                                                                'location': self.region_name
-   652                                                                            }).result()
-
-Total time: 0.009859 s
-File: /Users/alex/Desktop/work/cb-profiled/cloudbridge/cloudbridge/cloud/providers/azure/azure_client.py
-Function: list_vm_types at line 654
-
-Line #      Hits         Time  Per Hit   % Time  Line Contents
-==============================================================
-   654                                               @profile
-   655                                               def list_vm_types(self):
-   656         6       9568.0   1594.7     97.0          return self.compute_client.virtual_machine_sizes. \
-   657         6        291.0     48.5      3.0              list(self.region_name)
-
-Total time: 0.022426 s
-File: /Users/alex/Desktop/work/cb-profiled/cloudbridge/cloudbridge/cloud/providers/azure/azure_client.py
-Function: list_networks at line 659
-
-Line #      Hits         Time  Per Hit   % Time  Line Contents
-==============================================================
-   659                                               @profile
-   660                                               def list_networks(self):
-   661         3      22266.0   7422.0     99.3          return self.network_management_client.virtual_networks.list(
-   662         3        160.0     53.3      0.7              self.resource_group)
-
-Total time: 3.19146 s
-File: /Users/alex/Desktop/work/cb-profiled/cloudbridge/cloudbridge/cloud/providers/azure/azure_client.py
-Function: get_network at line 664
-
-Line #      Hits         Time  Per Hit   % Time  Line Contents
-==============================================================
-   664                                               @profile
-   665                                               def get_network(self, network_id):
-   666        13         13.0      1.0      0.0          url_params = azure_helpers.parse_url(NETWORK_RESOURCE_ID,
-   667        13        260.0     20.0      0.0                                               network_id)
-   668        13         13.0      1.0      0.0          network_name = url_params.get(NETWORK_NAME)
-   669        13      10048.0    772.9      0.3          return self.network_management_client.virtual_networks.get(
-   670        13    3181122.0 244701.7     99.7              self.resource_group, network_name)
-
-Total time: 14.5405 s
-File: /Users/alex/Desktop/work/cb-profiled/cloudbridge/cloudbridge/cloud/providers/azure/azure_client.py
-Function: create_network at line 672
-
-Line #      Hits         Time  Per Hit   % Time  Line Contents
-==============================================================
-   672                                               @profile
-   673                                               def create_network(self, name, params):
-   674         1       7644.0   7644.0      0.1          return self.network_management_client.virtual_networks. \
-   675         1          8.0      8.0      0.0              create_or_update(self.resource_group,
-   676         1          1.0      1.0      0.0                               name,
-   677         1   14532810.0 14532810.0     99.9                               parameters=params).result()
-
-Total time: 10.9976 s
-File: /Users/alex/Desktop/work/cb-profiled/cloudbridge/cloudbridge/cloud/providers/azure/azure_client.py
-Function: delete_network at line 679
-
-Line #      Hits         Time  Per Hit   % Time  Line Contents
-==============================================================
-   679                                               @profile
-   680                                               def delete_network(self, network_id):
-   681         1         32.0     32.0      0.0          url_params = azure_helpers.parse_url(NETWORK_RESOURCE_ID, network_id)
-   682         1          2.0      2.0      0.0          network_name = url_params.get(NETWORK_NAME)
-   683         1        832.0    832.0      0.0          return self.network_management_client.virtual_networks. \
-   684         1   10996719.0 10996719.0    100.0              delete(self.resource_group, network_name).wait()
-
-Total time: 31.0639 s
-File: /Users/alex/Desktop/work/cb-profiled/cloudbridge/cloudbridge/cloud/providers/azure/azure_client.py
-Function: update_network_tags at line 686
-
-Line #      Hits         Time  Per Hit   % Time  Line Contents
-==============================================================
-   686                                               @profile
-   687                                               def update_network_tags(self, network_id, tags):
-   688         1         24.0     24.0      0.0          url_params = azure_helpers.parse_url(NETWORK_RESOURCE_ID, network_id)
-   689         1          1.0      1.0      0.0          network_name = url_params.get(NETWORK_NAME)
-   690         1        683.0    683.0      0.0          return self.network_management_client.virtual_networks. \
-   691         1          7.0      7.0      0.0              create_or_update(self.resource_group,
-   692         1   31063174.0 31063174.0    100.0                               network_name, tags).result()
-
-Total time: 0.000513 s
-File: /Users/alex/Desktop/work/cb-profiled/cloudbridge/cloudbridge/cloud/providers/azure/azure_client.py
-Function: get_network_id_for_subnet at line 694
-
-Line #      Hits         Time  Per Hit   % Time  Line Contents
-==============================================================
-   694                                               @profile
-   695                                               def get_network_id_for_subnet(self, subnet_id):
-   696        12        353.0     29.4     68.8          url_params = azure_helpers.parse_url(SUBNET_RESOURCE_ID, subnet_id)
-   697        12         18.0      1.5      3.5          network_id = NETWORK_RESOURCE_ID[0]
-   698        60         42.0      0.7      8.2          for key, val in url_params.items():
-   699        48         94.0      2.0     18.3              network_id = network_id.replace("{" + key + "}", val)
-   700        12          6.0      0.5      1.2          return network_id
-
-Total time: 0.003358 s
-File: /Users/alex/Desktop/work/cb-profiled/cloudbridge/cloudbridge/cloud/providers/azure/azure_client.py
-Function: list_subnets at line 702
-
-Line #      Hits         Time  Per Hit   % Time  Line Contents
-==============================================================
-   702                                               @profile
-   703                                               def list_subnets(self, network_id):
-   704         4        118.0     29.5      3.5          url_params = azure_helpers.parse_url(NETWORK_RESOURCE_ID, network_id)
-   705         4          7.0      1.8      0.2          network_name = url_params.get(NETWORK_NAME)
-   706         4       3012.0    753.0     89.7          return self.network_management_client.subnets. \
-   707         4        221.0     55.2      6.6              list(self.resource_group, network_name)
-
-Total time: 0 s
-File: /Users/alex/Desktop/work/cb-profiled/cloudbridge/cloudbridge/cloud/providers/azure/azure_client.py
-Function: get_subnet at line 709
-
-Line #      Hits         Time  Per Hit   % Time  Line Contents
-==============================================================
-   709                                               @profile
-   710                                               def get_subnet(self, subnet_id):
-   711                                                   url_params = azure_helpers.parse_url(SUBNET_RESOURCE_ID,
-   712                                                                                        subnet_id)
-   713                                                   network_name = url_params.get(NETWORK_NAME)
-   714                                                   subnet_name = url_params.get(SUBNET_NAME)
-   715                                                   return self.network_management_client.subnets. \
-   716                                                       get(self.resource_group, network_name, subnet_name)
-
-Total time: 4.12285 s
-File: /Users/alex/Desktop/work/cb-profiled/cloudbridge/cloudbridge/cloud/providers/azure/azure_client.py
-Function: create_subnet at line 718
-
-Line #      Hits         Time  Per Hit   % Time  Line Contents
-==============================================================
-   718                                               @profile
-   719                                               def create_subnet(self, network_id, subnet_name, params):
-   720         1         26.0     26.0      0.0          url_params = azure_helpers.parse_url(NETWORK_RESOURCE_ID, network_id)
-   721         1          1.0      1.0      0.0          network_name = url_params.get(NETWORK_NAME)
-   722         1        723.0    723.0      0.0          result_create = self.network_management_client \
-   723                                                       .subnets.create_or_update(
-   724         1          8.0      8.0      0.0                  self.resource_group,
-   725         1          0.0      0.0      0.0                  network_name,
-   726         1          1.0      1.0      0.0                  subnet_name,
-   727         1     572230.0 572230.0     13.9                  params
-   728                                                       )
-   729         1    3549857.0 3549857.0     86.1          subnet_info = result_create.result()
-   730                                           
-   731         1          2.0      2.0      0.0          return subnet_info
-
-Total time: 0 s
-File: /Users/alex/Desktop/work/cb-profiled/cloudbridge/cloudbridge/cloud/providers/azure/azure_client.py
-Function: __if_subnet_in_use at line 733
-
-Line #      Hits         Time  Per Hit   % Time  Line Contents
-==============================================================
-   733                                               @profile
-   734                                               def __if_subnet_in_use(e):
-   735                                                   # return True if the CloudError exception is due to subnet being in use
-   736                                                   if isinstance(e, CloudError):
-   737                                                       if e.error.error == "InUseSubnetCannotBeDeleted":
-   738                                                           return True
-   739                                                   return False
-
-Total time: 10.6682 s
-File: /Users/alex/Desktop/work/cb-profiled/cloudbridge/cloudbridge/cloud/providers/azure/azure_client.py
-Function: delete_subnet at line 741
-
-Line #      Hits         Time  Per Hit   % Time  Line Contents
-==============================================================
-   741                                               @tenacity.retry(stop=tenacity.stop_after_attempt(5),
-   742                                                               retry=tenacity.retry_if_exception(__if_subnet_in_use),
-   743                                                               wait=tenacity.wait_fixed(5),
-   744                                                               reraise=True)
-   745                                               @profile
-   746                                               def delete_subnet(self, subnet_id):
-   747         1          3.0      3.0      0.0          url_params = azure_helpers.parse_url(SUBNET_RESOURCE_ID,
-   748         1         32.0     32.0      0.0                                               subnet_id)
-   749         1          1.0      1.0      0.0          network_name = url_params.get(NETWORK_NAME)
-   750         1          1.0      1.0      0.0          subnet_name = url_params.get(SUBNET_NAME)
-   751                                           
-   752         1          1.0      1.0      0.0          try:
-   753         1        805.0    805.0      0.0              result_delete = self.network_management_client \
-   754                                                           .subnets.delete(
-   755         1          9.0      9.0      0.0                      self.resource_group,
-   756         1          1.0      1.0      0.0                      network_name,
-   757         1     434450.0 434450.0      4.1                      subnet_name
-   758                                                           )
-   759         1   10232911.0 10232911.0     95.9              result_delete.wait()
-   760                                                   except CloudError as cloud_error:
-   761                                                       log.exception(cloud_error.message)
-   762                                                       raise cloud_error
-
-Total time: 4.22866 s
-File: /Users/alex/Desktop/work/cb-profiled/cloudbridge/cloudbridge/cloud/providers/azure/azure_client.py
-Function: create_floating_ip at line 764
-
-Line #      Hits         Time  Per Hit   % Time  Line Contents
-==============================================================
-   764                                               @profile
-   765                                               def create_floating_ip(self, public_ip_name, public_ip_parameters):
-   766         1        803.0    803.0      0.0          return self.network_management_client.public_ip_addresses. \
-   767         1          8.0      8.0      0.0              create_or_update(self.resource_group,
-   768         1          1.0      1.0      0.0                               public_ip_name,
-   769         1    4227847.0 4227847.0    100.0                               public_ip_parameters).result()
-
-Total time: 0.204927 s
-File: /Users/alex/Desktop/work/cb-profiled/cloudbridge/cloudbridge/cloud/providers/azure/azure_client.py
-Function: get_floating_ip at line 771
-
-Line #      Hits         Time  Per Hit   % Time  Line Contents
-==============================================================
-   771                                               @profile
-   772                                               def get_floating_ip(self, public_ip_id):
-   773         1          2.0      2.0      0.0          url_params = azure_helpers.parse_url(PUBLIC_IP_RESOURCE_ID,
-   774         1         24.0     24.0      0.0                                               public_ip_id)
-   775         1          2.0      2.0      0.0          public_ip_name = url_params.get(PUBLIC_IP_NAME)
-   776         1        711.0    711.0      0.3          return self.network_management_client. \
-   777         1     204188.0 204188.0     99.6              public_ip_addresses.get(self.resource_group, public_ip_name)
-
-Total time: 10.7583 s
-File: /Users/alex/Desktop/work/cb-profiled/cloudbridge/cloudbridge/cloud/providers/azure/azure_client.py
-Function: delete_floating_ip at line 779
-
-Line #      Hits         Time  Per Hit   % Time  Line Contents
-==============================================================
-   779                                               @profile
-   780                                               def delete_floating_ip(self, public_ip_id):
-   781         1          2.0      2.0      0.0          url_params = azure_helpers.parse_url(PUBLIC_IP_RESOURCE_ID,
-   782         1         24.0     24.0      0.0                                               public_ip_id)
-   783         1          1.0      1.0      0.0          public_ip_name = url_params.get(PUBLIC_IP_NAME)
-   784         1        709.0    709.0      0.0          self.network_management_client. \
-   785         1         10.0     10.0      0.0              public_ip_addresses.delete(self.resource_group,
-   786         1   10757580.0 10757580.0    100.0                                         public_ip_name).wait()
-
-Total time: 0 s
-File: /Users/alex/Desktop/work/cb-profiled/cloudbridge/cloudbridge/cloud/providers/azure/azure_client.py
-Function: update_fip_tags at line 788
-
-Line #      Hits         Time  Per Hit   % Time  Line Contents
-==============================================================
-   788                                               @profile
-   789                                               def update_fip_tags(self, fip_id, tags):
-   790                                                   url_params = azure_helpers.parse_url(PUBLIC_IP_RESOURCE_ID,
-   791                                                                                        fip_id)
-   792                                                   fip_name = url_params.get(PUBLIC_IP_NAME)
-   793                                                   self.network_management_client.public_ip_addresses. \
-   794                                                       create_or_update(self.resource_group,
-   795                                                                        fip_name, tags).result()
-
-Total time: 0.000868 s
-File: /Users/alex/Desktop/work/cb-profiled/cloudbridge/cloudbridge/cloud/providers/azure/azure_client.py
-Function: list_floating_ips at line 797
-
-Line #      Hits         Time  Per Hit   % Time  Line Contents
-==============================================================
-   797                                               @profile
-   798                                               def list_floating_ips(self):
-   799         1        798.0    798.0     91.9          return self.network_management_client.public_ip_addresses.list(
-   800         1         70.0     70.0      8.1              self.resource_group)
-
-Total time: 0.00234 s
-File: /Users/alex/Desktop/work/cb-profiled/cloudbridge/cloudbridge/cloud/providers/azure/azure_client.py
-Function: list_vm at line 802
-
-Line #      Hits         Time  Per Hit   % Time  Line Contents
-==============================================================
-   802                                               @profile
-   803                                               def list_vm(self):
-   804         5       2132.0    426.4     91.1          return self.compute_client.virtual_machines.list(
-   805         5        208.0     41.6      8.9              self.resource_group
-   806                                                   )
-
-Total time: 30.4549 s
-File: /Users/alex/Desktop/work/cb-profiled/cloudbridge/cloudbridge/cloud/providers/azure/azure_client.py
-Function: restart_vm at line 808
-
-Line #      Hits         Time  Per Hit   % Time  Line Contents
-==============================================================
-   808                                               @profile
-   809                                               def restart_vm(self, vm_id):
-   810         1          2.0      2.0      0.0          url_params = azure_helpers.parse_url(VM_RESOURCE_ID,
-   811         1         23.0     23.0      0.0                                               vm_id)
-   812         1          1.0      1.0      0.0          vm_name = url_params.get(VM_NAME)
-   813         1        412.0    412.0      0.0          return self.compute_client.virtual_machines.restart(
-   814         1   30454435.0 30454435.0    100.0              self.resource_group, vm_name).wait()
-
-Total time: 133.21 s
-File: /Users/alex/Desktop/work/cb-profiled/cloudbridge/cloudbridge/cloud/providers/azure/azure_client.py
-Function: delete_vm at line 816
-
-Line #      Hits         Time  Per Hit   % Time  Line Contents
-==============================================================
-   816                                               @profile
-   817                                               def delete_vm(self, vm_id):
-   818         4         10.0      2.5      0.0          url_params = azure_helpers.parse_url(VM_RESOURCE_ID,
-   819         4        216.0     54.0      0.0                                               vm_id)
-   820         4          8.0      2.0      0.0          vm_name = url_params.get(VM_NAME)
-   821         4       2221.0    555.2      0.0          return self.compute_client.virtual_machines.delete(
-   822         4  133207787.0 33301946.8    100.0              self.resource_group, vm_name).wait()
-
-Total time: 74.9466 s
-File: /Users/alex/Desktop/work/cb-profiled/cloudbridge/cloudbridge/cloud/providers/azure/azure_client.py
-Function: get_vm at line 824
-
-Line #      Hits         Time  Per Hit   % Time  Line Contents
-==============================================================
-   824                                               @profile
-   825                                               def get_vm(self, vm_id):
-   826        22         79.0      3.6      0.0          url_params = azure_helpers.parse_url(VM_RESOURCE_ID,
-   827        22        799.0     36.3      0.0                                               vm_id)
-   828        22         41.0      1.9      0.0          vm_name = url_params.get(VM_NAME)
-   829        22      12404.0    563.8      0.0          return self.compute_client.virtual_machines.get(
-   830        22        226.0     10.3      0.0              self.resource_group,
-   831        22         15.0      0.7      0.0              vm_name,
-   832        22   74933044.0 3406047.5    100.0              expand='instanceView'
-   833                                                   )
-
-Total time: 515.531 s
-File: /Users/alex/Desktop/work/cb-profiled/cloudbridge/cloudbridge/cloud/providers/azure/azure_client.py
-Function: create_vm at line 835
-
-Line #      Hits         Time  Per Hit   % Time  Line Contents
-==============================================================
-   835                                               @profile
-   836                                               def create_vm(self, vm_name, params):
-   837         4      23151.0   5787.8      0.0          return self.compute_client.virtual_machines. \
-   838         4         39.0      9.8      0.0              create_or_update(self.resource_group,
-   839         4  515507537.0 128876884.2    100.0                               vm_name, params).result()
-
-Total time: 0 s
-File: /Users/alex/Desktop/work/cb-profiled/cloudbridge/cloudbridge/cloud/providers/azure/azure_client.py
-Function: update_vm at line 841
-
-Line #      Hits         Time  Per Hit   % Time  Line Contents
-==============================================================
-   841                                               @profile
-   842                                               def update_vm(self, vm_id, params):
-   843                                                   url_params = azure_helpers.parse_url(VM_RESOURCE_ID,
-   844                                                                                        vm_id)
-   845                                                   vm_name = url_params.get(VM_NAME)
-   846                                                   return self.compute_client.virtual_machines. \
-   847                                                       create_or_update(self.resource_group,
-   848                                                                        vm_name, params, raw=True)
-
-Total time: 284.987 s
-File: /Users/alex/Desktop/work/cb-profiled/cloudbridge/cloudbridge/cloud/providers/azure/azure_client.py
-Function: deallocate_vm at line 850
-
-Line #      Hits         Time  Per Hit   % Time  Line Contents
-==============================================================
-   850                                               @profile
-   851                                               def deallocate_vm(self, vm_id):
-   852         4         12.0      3.0      0.0          url_params = azure_helpers.parse_url(VM_RESOURCE_ID,
-   853         4        117.0     29.2      0.0                                               vm_id)
-   854         4          7.0      1.8      0.0          vm_name = url_params.get(VM_NAME)
-   855         4       1979.0    494.8      0.0          self.compute_client. \
-   856         4         37.0      9.2      0.0              virtual_machines.deallocate(self.resource_group,
-   857         4  284985322.0 71246330.5    100.0                                          vm_name).wait()
-
-Total time: 0 s
-File: /Users/alex/Desktop/work/cb-profiled/cloudbridge/cloudbridge/cloud/providers/azure/azure_client.py
-Function: generalize_vm at line 859
-
-Line #      Hits         Time  Per Hit   % Time  Line Contents
-==============================================================
-   859                                               @profile
-   860                                               def generalize_vm(self, vm_id):
-   861                                                   url_params = azure_helpers.parse_url(VM_RESOURCE_ID,
-   862                                                                                        vm_id)
-   863                                                   vm_name = url_params.get(VM_NAME)
-   864                                                   self.compute_client.virtual_machines. \
-   865                                                       generalize(self.resource_group, vm_name)
-
-Total time: 0 s
-File: /Users/alex/Desktop/work/cb-profiled/cloudbridge/cloudbridge/cloud/providers/azure/azure_client.py
-Function: start_vm at line 867
-
-Line #      Hits         Time  Per Hit   % Time  Line Contents
-==============================================================
-   867                                               @profile
-   868                                               def start_vm(self, vm_id):
-   869                                                   url_params = azure_helpers.parse_url(VM_RESOURCE_ID,
-   870                                                                                        vm_id)
-   871                                                   vm_name = url_params.get(VM_NAME)
-   872                                                   self.compute_client.virtual_machines. \
-   873                                                       start(self.resource_group,
-   874                                                             vm_name).wait()
-
-Total time: 93.3852 s
-File: /Users/alex/Desktop/work/cb-profiled/cloudbridge/cloudbridge/cloud/providers/azure/azure_client.py
-Function: update_vm_tags at line 876
-
-Line #      Hits         Time  Per Hit   % Time  Line Contents
-==============================================================
-   876                                               @profile
-   877                                               def update_vm_tags(self, vm_id, tags):
-   878         3          8.0      2.7      0.0          url_params = azure_helpers.parse_url(VM_RESOURCE_ID,
-   879         3         77.0     25.7      0.0                                               vm_id)
-   880         3          4.0      1.3      0.0          vm_name = url_params.get(VM_NAME)
-   881         3       1314.0    438.0      0.0          self.compute_client.virtual_machines. \
-   882         3         30.0     10.0      0.0              create_or_update(self.resource_group,
-   883         3   93383730.0 31127910.0    100.0                               vm_name, tags).result()
-
-Total time: 42.7808 s
-File: /Users/alex/Desktop/work/cb-profiled/cloudbridge/cloudbridge/cloud/providers/azure/azure_client.py
-Function: delete_nic at line 885
-
-Line #      Hits         Time  Per Hit   % Time  Line Contents
-==============================================================
-   885                                               @profile
-   886                                               def delete_nic(self, nic_id):
-   887         4          8.0      2.0      0.0          nic_params = azure_helpers.\
-   888         4         97.0     24.2      0.0              parse_url(NETWORK_INTERFACE_RESOURCE_ID, nic_id)
-   889         4          5.0      1.2      0.0          nic_name = nic_params.get(NETWORK_INTERFACE_NAME)
-   890         4       2754.0    688.5      0.0          self.network_management_client. \
-   891         4         30.0      7.5      0.0              network_interfaces.delete(self.resource_group,
-   892         4   42777872.0 10694468.0    100.0                                        nic_name).wait()
-
-Total time: 11.4969 s
-File: /Users/alex/Desktop/work/cb-profiled/cloudbridge/cloudbridge/cloud/providers/azure/azure_client.py
-Function: get_nic at line 894
-
-Line #      Hits         Time  Per Hit   % Time  Line Contents
-==============================================================
-   894                                               @profile
-   895                                               def get_nic(self, nic_id):
-   896        44        103.0      2.3      0.0          nic_params = azure_helpers.\
-   897        44       1130.0     25.7      0.0              parse_url(NETWORK_INTERFACE_RESOURCE_ID, nic_id)
-   898        44         54.0      1.2      0.0          nic_name = nic_params.get(NETWORK_INTERFACE_NAME)
-   899        44      32228.0    732.5      0.3          return self.network_management_client. \
-   900        44   11463350.0 260530.7     99.7              network_interfaces.get(self.resource_group, nic_name)
-
-Total time: 115.781 s
-File: /Users/alex/Desktop/work/cb-profiled/cloudbridge/cloudbridge/cloud/providers/azure/azure_client.py
-Function: update_nic at line 902
-
-Line #      Hits         Time  Per Hit   % Time  Line Contents
-==============================================================
-   902                                               @profile
-   903                                               def update_nic(self, nic_id, params):
-   904         4          8.0      2.0      0.0          nic_params = azure_helpers.\
-   905         4        100.0     25.0      0.0              parse_url(NETWORK_INTERFACE_RESOURCE_ID, nic_id)
-   906         4          5.0      1.2      0.0          nic_name = nic_params.get(NETWORK_INTERFACE_NAME)
-   907         4       3058.0    764.5      0.0          async_nic_creation = self.network_management_client. \
-   908                                                       network_interfaces.create_or_update(
-   909         4         39.0      9.8      0.0                  self.resource_group,
-   910         4          2.0      0.5      0.0                  nic_name,
-   911         4    1249938.0 312484.5      1.1                  params
-   912                                                       )
-   913         4  114528003.0 28632000.8     98.9          nic_info = async_nic_creation.result()
-   914         4          8.0      2.0      0.0          return nic_info
-
-Total time: 125.141 s
-File: /Users/alex/Desktop/work/cb-profiled/cloudbridge/cloudbridge/cloud/providers/azure/azure_client.py
-Function: create_nic at line 916
-
-Line #      Hits         Time  Per Hit   % Time  Line Contents
-==============================================================
-   916                                               @profile
-   917                                               def create_nic(self, nic_name, params):
-   918         4       3231.0    807.8      0.0          return self.network_management_client. \
-   919                                                       network_interfaces.create_or_update(
-   920         4         44.0     11.0      0.0                  self.resource_group,
-   921         4          3.0      0.8      0.0                  nic_name,
-   922         4  125137817.0 31284454.2    100.0                  params
-   923                                                       ).result()
-
-Total time: 0.227538 s
-File: /Users/alex/Desktop/work/cb-profiled/cloudbridge/cloudbridge/cloud/providers/azure/azure_client.py
-Function: create_public_key at line 925
-
-Line #      Hits         Time  Per Hit   % Time  Line Contents
-==============================================================
-   925                                               @profile
-   926                                               def create_public_key(self, entity):
-   927         4     114154.0  28538.5     50.2          return self.table_service. \
-   928         4         38.0      9.5      0.0              insert_or_replace_entity(self.public_key_storage_table_name,
-   929         4     113346.0  28336.5     49.8                                       entity)
-
-Total time: 4.19258 s
-File: /Users/alex/Desktop/work/cb-profiled/cloudbridge/cloudbridge/cloud/providers/azure/azure_client.py
-Function: get_public_key at line 931
-
-Line #      Hits         Time  Per Hit   % Time  Line Contents
-==============================================================
-   931                                               @profile
-   932                                               def get_public_key(self, name):
-   933         8    3836017.0 479502.1     91.5          entities = self.table_service. \
-   934         8         75.0      9.4      0.0              query_entities(self.public_key_storage_table_name,
-   935         8     356459.0  44557.4      8.5                             "Name eq '{0}'".format(name), num_results=1)
-   936                                           
-   937         8         30.0      3.8      0.0          return entities.items[0] if len(entities.items) > 0 else None
-
-Total time: 0.65627 s
-File: /Users/alex/Desktop/work/cb-profiled/cloudbridge/cloudbridge/cloud/providers/azure/azure_client.py
-Function: delete_public_key at line 939
-
-Line #      Hits         Time  Per Hit   % Time  Line Contents
-==============================================================
-   939                                               @profile
-   940                                               def delete_public_key(self, entity):
-   941         4     521314.0 130328.5     79.4          self.table_service.delete_entity(self.public_key_storage_table_name,
-   942         4     134956.0  33739.0     20.6                                           entity.PartitionKey, entity.RowKey)
-
-Total time: 0 s
-File: /Users/alex/Desktop/work/cb-profiled/cloudbridge/cloudbridge/cloud/providers/azure/azure_client.py
-Function: list_public_keys at line 944
-
-Line #      Hits         Time  Per Hit   % Time  Line Contents
-==============================================================
-   944                                               @profile
-   945                                               def list_public_keys(self, partition_key, limit=None, marker=None):
-   946                                                   entities = self.table_service. \
-   947                                                       query_entities(self.public_key_storage_table_name,
-   948                                                                      "PartitionKey eq '{0}'".format(partition_key),
-   949                                                                      marker=marker, num_results=limit)
-   950                                                   return (entities.items, entities.next_marker)
-
-Total time: 10.539 s
-File: /Users/alex/Desktop/work/cb-profiled/cloudbridge/cloudbridge/cloud/providers/azure/azure_client.py
-Function: delete_route_table at line 952
-
-Line #      Hits         Time  Per Hit   % Time  Line Contents
-==============================================================
-   952                                               @profile
-   953                                               def delete_route_table(self, route_table_name):
-   954         1        893.0    893.0      0.0          self.network_management_client. \
-   955         1   10538154.0 10538154.0    100.0              route_tables.delete(self.resource_group, route_table_name
-   956                                                                           ).wait()
-
-Total time: 3.92367 s
-File: /Users/alex/Desktop/work/cb-profiled/cloudbridge/cloudbridge/cloud/providers/azure/azure_client.py
-Function: attach_subnet_to_route_table at line 958
-
-Line #      Hits         Time  Per Hit   % Time  Line Contents
-==============================================================
-   958                                               @profile
-   959                                               def attach_subnet_to_route_table(self, subnet_id, route_table_id):
-   960         1          3.0      3.0      0.0          url_params = azure_helpers.parse_url(SUBNET_RESOURCE_ID,
-   961         1         34.0     34.0      0.0                                               subnet_id)
-   962         1          2.0      2.0      0.0          network_name = url_params.get(NETWORK_NAME)
-   963         1          1.0      1.0      0.0          subnet_name = url_params.get(SUBNET_NAME)
-   964                                           
-   965         1        821.0    821.0      0.0          subnet_info = self.network_management_client.subnets.get(
-   966         1          9.0      9.0      0.0              self.resource_group,
-   967         1          1.0      1.0      0.0              network_name,
-   968         1     165580.0 165580.0      4.2              subnet_name
-   969                                                   )
-   970         1          2.0      2.0      0.0          if subnet_info:
-   971                                                       subnet_info.route_table = {
-   972         1          1.0      1.0      0.0                  'id': route_table_id
-   973                                                       }
-   974                                           
-   975         1        722.0    722.0      0.0              result_create = self.network_management_client. \
-   976                                                           subnets.create_or_update(
-   977         1          9.0      9.0      0.0                   self.resource_group,
-   978         1          1.0      1.0      0.0                   network_name,
-   979         1          0.0      0.0      0.0                   subnet_name,
-   980         1     419970.0 419970.0     10.7                   subnet_info)
-   981         1    3336510.0 3336510.0     85.0              subnet_info = result_create.result()
-   982                                           
-   983         1          2.0      2.0      0.0          return subnet_info
-
-Total time: 4.23668 s
-File: /Users/alex/Desktop/work/cb-profiled/cloudbridge/cloudbridge/cloud/providers/azure/azure_client.py
-Function: detach_subnet_to_route_table at line 985
-
-Line #      Hits         Time  Per Hit   % Time  Line Contents
-==============================================================
-   985                                               @profile
-   986                                               def detach_subnet_to_route_table(self, subnet_id, route_table_id):
-   987         1          2.0      2.0      0.0          url_params = azure_helpers.parse_url(SUBNET_RESOURCE_ID,
-   988         1         29.0     29.0      0.0                                               subnet_id)
-   989         1          1.0      1.0      0.0          network_name = url_params.get(NETWORK_NAME)
-   990         1          1.0      1.0      0.0          subnet_name = url_params.get(SUBNET_NAME)
-   991                                           
-   992         1        726.0    726.0      0.0          subnet_info = self.network_management_client.subnets.get(
-   993         1          8.0      8.0      0.0              self.resource_group,
-   994         1          1.0      1.0      0.0              network_name,
-   995         1     263253.0 263253.0      6.2              subnet_name
-   996                                                   )
-   997                                           
-   998         1          3.0      3.0      0.0          if subnet_info and subnet_info.route_table.id == route_table_id:
-   999         1          2.0      2.0      0.0              subnet_info.route_table = None
-  1000                                           
-  1001         1        723.0    723.0      0.0              result_create = self.network_management_client. \
-  1002                                                           subnets.create_or_update(
-  1003         1          8.0      8.0      0.0                   self.resource_group,
-  1004         1          1.0      1.0      0.0                   network_name,
-  1005         1          0.0      0.0      0.0                   subnet_name,
-  1006         1     546801.0 546801.0     12.9                   subnet_info)
-  1007         1    3425118.0 3425118.0     80.8              subnet_info = result_create.result()
-  1008                                           
-  1009         1          2.0      2.0      0.0          return subnet_info
-
-Total time: 0 s
-File: /Users/alex/Desktop/work/cb-profiled/cloudbridge/cloudbridge/cloud/providers/azure/azure_client.py
-Function: list_route_tables at line 1011
-
-Line #      Hits         Time  Per Hit   % Time  Line Contents
-==============================================================
-  1011                                               @profile
-  1012                                               def list_route_tables(self):
-  1013                                                   return self.network_management_client. \
-  1014                                                       route_tables.list(self.resource_group)
-
-Total time: 0.376859 s
-File: /Users/alex/Desktop/work/cb-profiled/cloudbridge/cloudbridge/cloud/providers/azure/azure_client.py
-Function: get_route_table at line 1016
-
-Line #      Hits         Time  Per Hit   % Time  Line Contents
-==============================================================
-  1016                                               @profile
-  1017                                               def get_route_table(self, router_id):
-  1018         2          4.0      2.0      0.0          url_params = azure_helpers.parse_url(ROUTER_RESOURCE_ID,
-  1019         2         44.0     22.0      0.0                                               router_id)
-  1020         2          2.0      1.0      0.0          router_name = url_params.get(ROUTER_NAME)
-  1021         2       1586.0    793.0      0.4          return self.network_management_client. \
-  1022         2     375223.0 187611.5     99.6              route_tables.get(self.resource_group, router_name)
-
-Total time: 10.9849 s
-File: /Users/alex/Desktop/work/cb-profiled/cloudbridge/cloudbridge/cloud/providers/azure/azure_client.py
-Function: create_route_table at line 1024
-
-Line #      Hits         Time  Per Hit   % Time  Line Contents
-==============================================================
-  1024                                               @profile
-  1025                                               def create_route_table(self, route_table_name, params):
-  1026         1        727.0    727.0      0.0          return self.network_management_client. \
-  1027                                                       route_tables.create_or_update(
-  1028         1          9.0      9.0      0.0               self.resource_group,
-  1029         1   10984139.0 10984139.0    100.0               route_table_name, params).result()
-
-Total time: 0 s
-File: /Users/alex/Desktop/work/cb-profiled/cloudbridge/cloudbridge/cloud/providers/azure/azure_client.py
-Function: update_route_table_tags at line 1031
-
-Line #      Hits         Time  Per Hit   % Time  Line Contents
-==============================================================
-  1031                                               @profile
-  1032                                               def update_route_table_tags(self, route_table_name, tags):
-  1033                                                   self.network_management_client.route_tables. \
-  1034                                                       create_or_update(self.resource_group,
-  1035                                                                        route_table_name, tags).result()
-

+ 0 - 1467
results/image.res

@@ -1,1467 +0,0 @@
-Test output
- .
-----------------------------------------------------------------------
-Ran 1 test in 752.430s
-
-OK
-
-Wrote profile results to run_tests.py.lprof
-Timer unit: 1e-06 s
-
-Total time: 0.368103 s
-File: /Users/alex/Desktop/work/cb-profiled/cloudbridge/cloudbridge/cloud/providers/azure/azure_client.py
-Function: __init__ at line 160
-
-Line #      Hits         Time  Per Hit   % Time  Line Contents
-==============================================================
-   160                                               @profile
-   161                                               def __init__(self, config):
-   162         1          4.0      4.0      0.0          self._config = config
-   163         1          2.0      2.0      0.0          self.subscription_id = str(config.get('azure_subscription_id'))
-   164         1          1.0      1.0      0.0          self._credentials = ServicePrincipalCredentials(
-   165         1          0.0      0.0      0.0              client_id=config.get('azure_client_id'),
-   166         1          1.0      1.0      0.0              secret=config.get('azure_secret'),
-   167         1     368075.0 368075.0    100.0              tenant=config.get('azure_tenant')
-   168                                                   )
-   169                                           
-   170         1          3.0      3.0      0.0          self._access_token = config.get('azure_access_token')
-   171         1          1.0      1.0      0.0          self._resource_client = None
-   172         1          1.0      1.0      0.0          self._storage_client = None
-   173         1          1.0      1.0      0.0          self._network_management_client = None
-   174         1          0.0      0.0      0.0          self._subscription_client = None
-   175         1          1.0      1.0      0.0          self._compute_client = None
-   176         1          1.0      1.0      0.0          self._access_key_result = None
-   177         1          2.0      2.0      0.0          self._block_blob_service = None
-   178         1          1.0      1.0      0.0          self._table_service = None
-   179         1          1.0      1.0      0.0          self._storage_account = None
-   180                                           
-   181         1          8.0      8.0      0.0          log.debug("azure subscription : %s", self.subscription_id)
-
-Total time: 0.659054 s
-File: /Users/alex/Desktop/work/cb-profiled/cloudbridge/cloudbridge/cloud/providers/azure/azure_client.py
-Function: access_key_result at line 183
-
-Line #      Hits         Time  Per Hit   % Time  Line Contents
-==============================================================
-   183                                               @property
-   184                                               @tenacity.retry(stop=tenacity.stop_after_attempt(5), reraise=True)
-   185                                               @profile
-   186                                               def access_key_result(self):
-   187         1          1.0      1.0      0.0          if not self._access_key_result:
-   188         1          3.0      3.0      0.0              storage_account = self.storage_account
-   189                                           
-   190         1     395498.0 395498.0     60.0              if self.get_storage_account(storage_account).\
-   191         1          1.0      1.0      0.0                      provisioning_state.value != 'Succeeded':
-   192                                                           log.debug(
-   193                                                               "Storage account %s is not in Succeeded state yet. ",
-   194                                                               storage_account)
-   195                                                           raise WaitStateException(
-   196                                                               "Waited too long for storage account: {0} to "
-   197                                                               "become ready.".format(
-   198                                                                   storage_account,
-   199                                                                   self.get_storage_account(storage_account).
-   200                                                                   provisioning_state))
-   201                                           
-   202         1        213.0    213.0      0.0              self._access_key_result = self.storage_client.storage_accounts. \
-   203         1     263336.0 263336.0     40.0                  list_keys(self.resource_group, storage_account)
-   204         1          2.0      2.0      0.0          return self._access_key_result
-
-Total time: 9e-05 s
-File: /Users/alex/Desktop/work/cb-profiled/cloudbridge/cloudbridge/cloud/providers/azure/azure_client.py
-Function: resource_group at line 206
-
-Line #      Hits         Time  Per Hit   % Time  Line Contents
-==============================================================
-   206                                               @property
-   207                                               @profile
-   208                                               def resource_group(self):
-   209        50         90.0      1.8    100.0          return self._config.get('azure_resource_group')
-
-Total time: 4e-06 s
-File: /Users/alex/Desktop/work/cb-profiled/cloudbridge/cloudbridge/cloud/providers/azure/azure_client.py
-Function: storage_account at line 211
-
-Line #      Hits         Time  Per Hit   % Time  Line Contents
-==============================================================
-   211                                               @property
-   212                                               @profile
-   213                                               def storage_account(self):
-   214         3          4.0      1.3    100.0          return self._config.get('azure_storage_account')
-
-Total time: 2e-06 s
-File: /Users/alex/Desktop/work/cb-profiled/cloudbridge/cloudbridge/cloud/providers/azure/azure_client.py
-Function: region_name at line 216
-
-Line #      Hits         Time  Per Hit   % Time  Line Contents
-==============================================================
-   216                                               @property
-   217                                               @profile
-   218                                               def region_name(self):
-   219         3          2.0      0.7    100.0          return self._config.get('azure_region_name')
-
-Total time: 2.4e-05 s
-File: /Users/alex/Desktop/work/cb-profiled/cloudbridge/cloudbridge/cloud/providers/azure/azure_client.py
-Function: public_key_storage_table_name at line 221
-
-Line #      Hits         Time  Per Hit   % Time  Line Contents
-==============================================================
-   221                                               @property
-   222                                               @profile
-   223                                               def public_key_storage_table_name(self):
-   224        16         24.0      1.5    100.0          return self._config.get('azure_public_key_storage_table_name')
-
-Total time: 0.007101 s
-File: /Users/alex/Desktop/work/cb-profiled/cloudbridge/cloudbridge/cloud/providers/azure/azure_client.py
-Function: storage_client at line 226
-
-Line #      Hits         Time  Per Hit   % Time  Line Contents
-==============================================================
-   226                                               @property
-   227                                               @profile
-   228                                               def storage_client(self):
-   229         3          4.0      1.3      0.1          if not self._storage_client:
-   230                                                       self._storage_client = \
-   231         1          5.0      5.0      0.1                  StorageManagementClient(self._credentials,
-   232         1       7090.0   7090.0     99.8                                          self.subscription_id)
-   233         3          2.0      0.7      0.0          return self._storage_client
-
-Total time: 0.006426 s
-File: /Users/alex/Desktop/work/cb-profiled/cloudbridge/cloudbridge/cloud/providers/azure/azure_client.py
-Function: subscription_client at line 235
-
-Line #      Hits         Time  Per Hit   % Time  Line Contents
-==============================================================
-   235                                               @property
-   236                                               @profile
-   237                                               def subscription_client(self):
-   238         2          2.0      1.0      0.0          if not self._subscription_client:
-   239         1       6422.0   6422.0     99.9              self._subscription_client = SubscriptionClient(self._credentials)
-   240         2          2.0      1.0      0.0          return self._subscription_client
-
-Total time: 0.023096 s
-File: /Users/alex/Desktop/work/cb-profiled/cloudbridge/cloudbridge/cloud/providers/azure/azure_client.py
-Function: resource_client at line 242
-
-Line #      Hits         Time  Per Hit   % Time  Line Contents
-==============================================================
-   242                                               @property
-   243                                               @profile
-   244                                               def resource_client(self):
-   245         1          1.0      1.0      0.0          if not self._resource_client:
-   246                                                       self._resource_client = \
-   247         1          1.0      1.0      0.0                  ResourceManagementClient(self._credentials,
-   248         1      23089.0  23089.0    100.0                                           self.subscription_id)
-   249         1          5.0      5.0      0.0          return self._resource_client
-
-Total time: 0.006134 s
-File: /Users/alex/Desktop/work/cb-profiled/cloudbridge/cloudbridge/cloud/providers/azure/azure_client.py
-Function: compute_client at line 251
-
-Line #      Hits         Time  Per Hit   % Time  Line Contents
-==============================================================
-   251                                               @property
-   252                                               @profile
-   253                                               def compute_client(self):
-   254        31         56.0      1.8      0.9          if not self._compute_client:
-   255                                                       self._compute_client = \
-   256         1          1.0      1.0      0.0                  ComputeManagementClient(self._credentials,
-   257         1       6055.0   6055.0     98.7                                          self.subscription_id)
-   258        31         22.0      0.7      0.4          return self._compute_client
-
-Total time: 0.007027 s
-File: /Users/alex/Desktop/work/cb-profiled/cloudbridge/cloudbridge/cloud/providers/azure/azure_client.py
-Function: network_management_client at line 260
-
-Line #      Hits         Time  Per Hit   % Time  Line Contents
-==============================================================
-   260                                               @property
-   261                                               @profile
-   262                                               def network_management_client(self):
-   263        16         48.0      3.0      0.7          if not self._network_management_client:
-   264         1          3.0      3.0      0.0              self._network_management_client = NetworkManagementClient(
-   265         1       6966.0   6966.0     99.1                  self._credentials, self.subscription_id)
-   266        16         10.0      0.6      0.1          return self._network_management_client
-
-Total time: 0 s
-File: /Users/alex/Desktop/work/cb-profiled/cloudbridge/cloudbridge/cloud/providers/azure/azure_client.py
-Function: blob_service at line 268
-
-Line #      Hits         Time  Per Hit   % Time  Line Contents
-==============================================================
-   268                                               @property
-   269                                               @profile
-   270                                               def blob_service(self):
-   271                                                   self._get_or_create_storage_account()
-   272                                                   if not self._block_blob_service:
-   273                                                       if self._access_token:
-   274                                                           token_credential = TokenCredential(self._access_token)
-   275                                                           self._block_blob_service = BlockBlobService(
-   276                                                               account_name=self.storage_account,
-   277                                                               token_credential=token_credential)
-   278                                                       else:
-   279                                                           self._block_blob_service = BlockBlobService(
-   280                                                               account_name=self.storage_account,
-   281                                                               account_key=self.access_key_result.keys[0].value)
-   282                                                   return self._block_blob_service
-
-Total time: 1.61274 s
-File: /Users/alex/Desktop/work/cb-profiled/cloudbridge/cloudbridge/cloud/providers/azure/azure_client.py
-Function: table_service at line 284
-
-Line #      Hits         Time  Per Hit   % Time  Line Contents
-==============================================================
-   284                                               @property
-   285                                               @profile
-   286                                               def table_service(self):
-   287         8     349069.0  43633.6     21.6          self._get_or_create_storage_account()
-   288         8         11.0      1.4      0.0          if not self._table_service:
-   289         1          1.0      1.0      0.0              self._table_service = TableService(
-   290         1          7.0      7.0      0.0                  self.storage_account,
-   291         1     659474.0 659474.0     40.9                  self.access_key_result.keys[0].value)
-   292         8         13.0      1.6      0.0          if not self._table_service. \
-   293         8     604136.0  75517.0     37.5                  exists(table_name=self.public_key_storage_table_name):
-   294                                                       self._table_service.create_table(
-   295                                                           self.public_key_storage_table_name)
-   296         8         28.0      3.5      0.0          return self._table_service
-
-Total time: 0.380743 s
-File: /Users/alex/Desktop/work/cb-profiled/cloudbridge/cloudbridge/cloud/providers/azure/azure_client.py
-Function: get_resource_group at line 298
-
-Line #      Hits         Time  Per Hit   % Time  Line Contents
-==============================================================
-   298                                               @profile
-   299                                               def get_resource_group(self, name):
-   300         1     380743.0 380743.0    100.0          return self.resource_client.resource_groups.get(name)
-
-Total time: 0 s
-File: /Users/alex/Desktop/work/cb-profiled/cloudbridge/cloudbridge/cloud/providers/azure/azure_client.py
-Function: create_resource_group at line 302
-
-Line #      Hits         Time  Per Hit   % Time  Line Contents
-==============================================================
-   302                                               @profile
-   303                                               def create_resource_group(self, name, parameters):
-   304                                                   return self.resource_client.resource_groups. \
-   305                                                       create_or_update(name, parameters)
-
-Total time: 0.743545 s
-File: /Users/alex/Desktop/work/cb-profiled/cloudbridge/cloudbridge/cloud/providers/azure/azure_client.py
-Function: get_storage_account at line 307
-
-Line #      Hits         Time  Per Hit   % Time  Line Contents
-==============================================================
-   307                                               @profile
-   308                                               def get_storage_account(self, storage_account):
-   309         2      86657.0  43328.5     11.7          return self.storage_client.storage_accounts. \
-   310         2     656888.0 328444.0     88.3              get_properties(self.resource_group, storage_account)
-
-Total time: 0 s
-File: /Users/alex/Desktop/work/cb-profiled/cloudbridge/cloudbridge/cloud/providers/azure/azure_client.py
-Function: create_storage_account at line 312
-
-Line #      Hits         Time  Per Hit   % Time  Line Contents
-==============================================================
-   312                                               @profile
-   313                                               def create_storage_account(self, name, params):
-   314                                                   return self.storage_client.storage_accounts. \
-   315                                                       create(self.resource_group, name.lower(), params).result()
-
-Total time: 0.34811 s
-File: /Users/alex/Desktop/work/cb-profiled/cloudbridge/cloudbridge/cloud/providers/azure/azure_client.py
-Function: _get_or_create_storage_account at line 319
-
-Line #      Hits         Time  Per Hit   % Time  Line Contents
-==============================================================
-   319                                               @tenacity.retry(stop=tenacity.stop_after_attempt(2),
-   320                                                               retry=tenacity.retry_if_exception_type(CloudError),
-   321                                                               reraise=True)
-   322                                               @profile
-   323                                               def _get_or_create_storage_account(self):
-   324         8         15.0      1.9      0.0          if self._storage_account:
-   325         7          7.0      1.0      0.0              return self._storage_account
-   326                                                   else:
-   327         1          0.0      0.0      0.0              try:
-   328                                                           self._storage_account = \
-   329         1     348088.0 348088.0    100.0                      self.get_storage_account(self.storage_account)
-   330                                                       except CloudError as cloud_error:
-   331                                                           if cloud_error.error.error == "ResourceNotFound":
-   332                                                               storage_account_params = {
-   333                                                                   'sku': {
-   334                                                                       'name': 'Standard_LRS'
-   335                                                                   },
-   336                                                                   'kind': 'storage',
-   337                                                                   'location': self.region_name,
-   338                                                               }
-   339                                                               try:
-   340                                                                   self._storage_account = \
-   341                                                                       self.create_storage_account(self.storage_account,
-   342                                                                                                   storage_account_params)
-   343                                                               except CloudError as cloud_error2:  # pragma: no cover
-   344                                                                   if cloud_error2.error.error == "AuthorizationFailed":
-   345                                                                       mess = 'The following error was returned by ' \
-   346                                                                              'Azure:\n%s\n\nThis is likely because the' \
-   347                                                                              ' Role associated with the provided ' \
-   348                                                                              'credentials does not allow for Storage ' \
-   349                                                                              'Account creation.\nA Storage Account is ' \
-   350                                                                              'necessary in order to perform the ' \
-   351                                                                              'desired operation. You must either ' \
-   352                                                                              'provide an existing Storage Account name' \
-   353                                                                              ' as part of the configuration, or ' \
-   354                                                                              'elevate the associated Role.\nFor more ' \
-   355                                                                              'information on roles, see: https://docs.' \
-   356                                                                              'microsoft.com/en-us/azure/role-based-' \
-   357                                                                              'access-control/overview\n' % cloud_error2
-   358                                                                       raise ProviderConnectionException(mess)
-   359                                           
-   360                                                                   elif cloud_error2.error.error == \
-   361                                                                           "StorageAccountAlreadyTaken":
-   362                                                                       mess = 'The following error was ' \
-   363                                                                              'returned by Azure:\n%s\n\n' \
-   364                                                                              'Note that Storage Account names must be ' \
-   365                                                                              'unique across Azure (not just in your ' \
-   366                                                                              'subscription).\nFor more information ' \
-   367                                                                              'see https://docs.microsoft.com/en-us/' \
-   368                                                                              'azure/azure-resource-manager/resource-' \
-   369                                                                              'manager-storage-account-name-errors\n' \
-   370                                                                              % cloud_error2
-   371                                                                       raise InvalidLabelException(mess)
-   372                                                                   else:
-   373                                                                       raise cloud_error2
-   374                                                           else:
-   375                                                               raise cloud_error
-
-Total time: 0.032704 s
-File: /Users/alex/Desktop/work/cb-profiled/cloudbridge/cloudbridge/cloud/providers/azure/azure_client.py
-Function: list_locations at line 377
-
-Line #      Hits         Time  Per Hit   % Time  Line Contents
-==============================================================
-   377                                               @profile
-   378                                               def list_locations(self):
-   379         2      32639.0  16319.5     99.8          return self.subscription_client.subscriptions. \
-   380         2         65.0     32.5      0.2              list_locations(self.subscription_id)
-
-Total time: 0 s
-File: /Users/alex/Desktop/work/cb-profiled/cloudbridge/cloudbridge/cloud/providers/azure/azure_client.py
-Function: list_vm_firewall at line 382
-
-Line #      Hits         Time  Per Hit   % Time  Line Contents
-==============================================================
-   382                                               @profile
-   383                                               def list_vm_firewall(self):
-   384                                                   return self.network_management_client.network_security_groups. \
-   385                                                       list(self.resource_group)
-
-Total time: 0 s
-File: /Users/alex/Desktop/work/cb-profiled/cloudbridge/cloudbridge/cloud/providers/azure/azure_client.py
-Function: create_vm_firewall at line 387
-
-Line #      Hits         Time  Per Hit   % Time  Line Contents
-==============================================================
-   387                                               @profile
-   388                                               def create_vm_firewall(self, name, parameters):
-   389                                                   return self.network_management_client.network_security_groups. \
-   390                                                       create_or_update(self.resource_group, name,
-   391                                                                        parameters).result()
-
-Total time: 0 s
-File: /Users/alex/Desktop/work/cb-profiled/cloudbridge/cloudbridge/cloud/providers/azure/azure_client.py
-Function: update_vm_firewall_tags at line 393
-
-Line #      Hits         Time  Per Hit   % Time  Line Contents
-==============================================================
-   393                                               @profile
-   394                                               def update_vm_firewall_tags(self, fw_id, tags):
-   395                                                   url_params = azure_helpers.parse_url(VM_FIREWALL_RESOURCE_ID,
-   396                                                                                        fw_id)
-   397                                                   name = url_params.get(VM_FIREWALL_NAME)
-   398                                                   return self.network_management_client.network_security_groups. \
-   399                                                       create_or_update(self.resource_group, name,
-   400                                                                        {'tags': tags,
-   401                                                                         'location': self.region_name}).result()
-
-Total time: 0 s
-File: /Users/alex/Desktop/work/cb-profiled/cloudbridge/cloudbridge/cloud/providers/azure/azure_client.py
-Function: get_vm_firewall at line 403
-
-Line #      Hits         Time  Per Hit   % Time  Line Contents
-==============================================================
-   403                                               @profile
-   404                                               def get_vm_firewall(self, fw_id):
-   405                                                   url_params = azure_helpers.parse_url(VM_FIREWALL_RESOURCE_ID,
-   406                                                                                        fw_id)
-   407                                                   fw_name = url_params.get(VM_FIREWALL_NAME)
-   408                                                   return self.network_management_client.network_security_groups. \
-   409                                                       get(self.resource_group, fw_name)
-
-Total time: 0 s
-File: /Users/alex/Desktop/work/cb-profiled/cloudbridge/cloudbridge/cloud/providers/azure/azure_client.py
-Function: delete_vm_firewall at line 411
-
-Line #      Hits         Time  Per Hit   % Time  Line Contents
-==============================================================
-   411                                               @profile
-   412                                               def delete_vm_firewall(self, fw_id):
-   413                                                   url_params = azure_helpers.parse_url(VM_FIREWALL_RESOURCE_ID,
-   414                                                                                        fw_id)
-   415                                                   name = url_params.get(VM_FIREWALL_NAME)
-   416                                                   self.network_management_client \
-   417                                                       .network_security_groups.delete(self.resource_group, name).wait()
-
-Total time: 0 s
-File: /Users/alex/Desktop/work/cb-profiled/cloudbridge/cloudbridge/cloud/providers/azure/azure_client.py
-Function: create_vm_firewall_rule at line 419
-
-Line #      Hits         Time  Per Hit   % Time  Line Contents
-==============================================================
-   419                                               @profile
-   420                                               def create_vm_firewall_rule(self, fw_id,
-   421                                                                           rule_name, parameters):
-   422                                                   url_params = azure_helpers.parse_url(VM_FIREWALL_RESOURCE_ID,
-   423                                                                                        fw_id)
-   424                                                   vm_firewall_name = url_params.get(VM_FIREWALL_NAME)
-   425                                                   return self.network_management_client.security_rules. \
-   426                                                       create_or_update(self.resource_group, vm_firewall_name,
-   427                                                                        rule_name, parameters).result()
-
-Total time: 0 s
-File: /Users/alex/Desktop/work/cb-profiled/cloudbridge/cloudbridge/cloud/providers/azure/azure_client.py
-Function: delete_vm_firewall_rule at line 429
-
-Line #      Hits         Time  Per Hit   % Time  Line Contents
-==============================================================
-   429                                               @profile
-   430                                               def delete_vm_firewall_rule(self, fw_rule_id, vm_firewall):
-   431                                                   url_params = azure_helpers.parse_url(VM_FIREWALL_RULE_RESOURCE_ID,
-   432                                                                                        fw_rule_id)
-   433                                                   name = url_params.get(VM_FIREWALL_RULE_NAME)
-   434                                                   return self.network_management_client.security_rules. \
-   435                                                       delete(self.resource_group, vm_firewall, name).result()
-
-Total time: 0 s
-File: /Users/alex/Desktop/work/cb-profiled/cloudbridge/cloudbridge/cloud/providers/azure/azure_client.py
-Function: list_containers at line 437
-
-Line #      Hits         Time  Per Hit   % Time  Line Contents
-==============================================================
-   437                                               @profile
-   438                                               def list_containers(self, prefix=None, limit=None, marker=None):
-   439                                                   results = self.blob_service.list_containers(prefix=prefix,
-   440                                                                                               num_results=limit,
-   441                                                                                               marker=marker)
-   442                                                   return (results.items, results.next_marker)
-
-Total time: 0 s
-File: /Users/alex/Desktop/work/cb-profiled/cloudbridge/cloudbridge/cloud/providers/azure/azure_client.py
-Function: create_container at line 444
-
-Line #      Hits         Time  Per Hit   % Time  Line Contents
-==============================================================
-   444                                               @profile
-   445                                               def create_container(self, container_name):
-   446                                                   try:
-   447                                                       self.blob_service.create_container(container_name,
-   448                                                                                          fail_on_exist=True)
-   449                                                   except AzureConflictHttpError as cloud_error:
-   450                                                       if cloud_error.error_code == "ContainerAlreadyExists":
-   451                                                           msg = "The given Bucket name '%s' already exists. Please " \
-   452                                                                 "use the `get` or `find` method to get a reference to " \
-   453                                                                 "an existing Bucket, or specify a new Bucket name to " \
-   454                                                                 "create.\nNote that in Azure, Buckets are contained " \
-   455                                                                 "in Storage Accounts." % container_name
-   456                                                           raise DuplicateResourceException(msg)
-   457                                           
-   458                                                   return self.blob_service.get_container_properties(container_name)
-
-Total time: 0 s
-File: /Users/alex/Desktop/work/cb-profiled/cloudbridge/cloudbridge/cloud/providers/azure/azure_client.py
-Function: get_container at line 460
-
-Line #      Hits         Time  Per Hit   % Time  Line Contents
-==============================================================
-   460                                               @profile
-   461                                               def get_container(self, container_name):
-   462                                                   return self.blob_service.get_container_properties(container_name)
-
-Total time: 0 s
-File: /Users/alex/Desktop/work/cb-profiled/cloudbridge/cloudbridge/cloud/providers/azure/azure_client.py
-Function: delete_container at line 464
-
-Line #      Hits         Time  Per Hit   % Time  Line Contents
-==============================================================
-   464                                               @profile
-   465                                               def delete_container(self, container_name):
-   466                                                   self.blob_service.delete_container(container_name)
-
-Total time: 0 s
-File: /Users/alex/Desktop/work/cb-profiled/cloudbridge/cloudbridge/cloud/providers/azure/azure_client.py
-Function: list_blobs at line 468
-
-Line #      Hits         Time  Per Hit   % Time  Line Contents
-==============================================================
-   468                                               @profile
-   469                                               def list_blobs(self, container_name, prefix=None):
-   470                                                   return self.blob_service.list_blobs(container_name, prefix=prefix)
-
-Total time: 0 s
-File: /Users/alex/Desktop/work/cb-profiled/cloudbridge/cloudbridge/cloud/providers/azure/azure_client.py
-Function: get_blob at line 472
-
-Line #      Hits         Time  Per Hit   % Time  Line Contents
-==============================================================
-   472                                               @profile
-   473                                               def get_blob(self, container_name, blob_name):
-   474                                                   return self.blob_service.get_blob_properties(container_name, blob_name)
-
-Total time: 0 s
-File: /Users/alex/Desktop/work/cb-profiled/cloudbridge/cloudbridge/cloud/providers/azure/azure_client.py
-Function: create_blob_from_text at line 476
-
-Line #      Hits         Time  Per Hit   % Time  Line Contents
-==============================================================
-   476                                               @profile
-   477                                               def create_blob_from_text(self, container_name, blob_name, text):
-   478                                                   self.blob_service.create_blob_from_text(container_name,
-   479                                                                                           blob_name, text)
-
-Total time: 0 s
-File: /Users/alex/Desktop/work/cb-profiled/cloudbridge/cloudbridge/cloud/providers/azure/azure_client.py
-Function: create_blob_from_file at line 481
-
-Line #      Hits         Time  Per Hit   % Time  Line Contents
-==============================================================
-   481                                               @profile
-   482                                               def create_blob_from_file(self, container_name, blob_name, file_path):
-   483                                                   self.blob_service.create_blob_from_path(container_name,
-   484                                                                                           blob_name, file_path)
-
-Total time: 0 s
-File: /Users/alex/Desktop/work/cb-profiled/cloudbridge/cloudbridge/cloud/providers/azure/azure_client.py
-Function: delete_blob at line 486
-
-Line #      Hits         Time  Per Hit   % Time  Line Contents
-==============================================================
-   486                                               @profile
-   487                                               def delete_blob(self, container_name, blob_name):
-   488                                                   self.blob_service.delete_blob(container_name, blob_name)
-
-Total time: 0 s
-File: /Users/alex/Desktop/work/cb-profiled/cloudbridge/cloudbridge/cloud/providers/azure/azure_client.py
-Function: get_blob_url at line 490
-
-Line #      Hits         Time  Per Hit   % Time  Line Contents
-==============================================================
-   490                                               @profile
-   491                                               def get_blob_url(self, container_name, blob_name, expiry_time):
-   492                                                   expiry_date = datetime.datetime.utcnow() + datetime.timedelta(
-   493                                                       seconds=expiry_time)
-   494                                                   sas = self.blob_service.generate_blob_shared_access_signature(
-   495                                                       container_name, blob_name, permission=BlobPermissions.READ,
-   496                                                       expiry=expiry_date)
-   497                                                   return self.blob_service.make_blob_url(container_name, blob_name,
-   498                                                                                          sas_token=sas)
-
-Total time: 0 s
-File: /Users/alex/Desktop/work/cb-profiled/cloudbridge/cloudbridge/cloud/providers/azure/azure_client.py
-Function: get_blob_content at line 500
-
-Line #      Hits         Time  Per Hit   % Time  Line Contents
-==============================================================
-   500                                               @profile
-   501                                               def get_blob_content(self, container_name, blob_name):
-   502                                                   out_stream = BytesIO()
-   503                                                   self.blob_service.get_blob_to_stream(container_name,
-   504                                                                                        blob_name, out_stream)
-   505                                                   return out_stream
-
-Total time: 0 s
-File: /Users/alex/Desktop/work/cb-profiled/cloudbridge/cloudbridge/cloud/providers/azure/azure_client.py
-Function: create_empty_disk at line 507
-
-Line #      Hits         Time  Per Hit   % Time  Line Contents
-==============================================================
-   507                                               @profile
-   508                                               def create_empty_disk(self, disk_name, params):
-   509                                                   return self.compute_client.disks.create_or_update(
-   510                                                       self.resource_group,
-   511                                                       disk_name,
-   512                                                       params
-   513                                                   ).result()
-
-Total time: 0 s
-File: /Users/alex/Desktop/work/cb-profiled/cloudbridge/cloudbridge/cloud/providers/azure/azure_client.py
-Function: create_snapshot_disk at line 515
-
-Line #      Hits         Time  Per Hit   % Time  Line Contents
-==============================================================
-   515                                               @profile
-   516                                               def create_snapshot_disk(self, disk_name, params):
-   517                                                   return self.compute_client.disks.create_or_update(
-   518                                                       self.resource_group,
-   519                                                       disk_name,
-   520                                                       params
-   521                                                   ).result()
-
-Total time: 0 s
-File: /Users/alex/Desktop/work/cb-profiled/cloudbridge/cloudbridge/cloud/providers/azure/azure_client.py
-Function: get_disk at line 523
-
-Line #      Hits         Time  Per Hit   % Time  Line Contents
-==============================================================
-   523                                               @profile
-   524                                               def get_disk(self, disk_id):
-   525                                                   url_params = azure_helpers.parse_url(VOLUME_RESOURCE_ID,
-   526                                                                                        disk_id)
-   527                                                   disk_name = url_params.get(VOLUME_NAME)
-   528                                                   return self.compute_client.disks.get(self.resource_group, disk_name)
-
-Total time: 0 s
-File: /Users/alex/Desktop/work/cb-profiled/cloudbridge/cloudbridge/cloud/providers/azure/azure_client.py
-Function: list_disks at line 530
-
-Line #      Hits         Time  Per Hit   % Time  Line Contents
-==============================================================
-   530                                               @profile
-   531                                               def list_disks(self):
-   532                                                   return self.compute_client.disks. \
-   533                                                       list_by_resource_group(self.resource_group)
-
-Total time: 61.3306 s
-File: /Users/alex/Desktop/work/cb-profiled/cloudbridge/cloudbridge/cloud/providers/azure/azure_client.py
-Function: delete_disk at line 535
-
-Line #      Hits         Time  Per Hit   % Time  Line Contents
-==============================================================
-   535                                               @profile
-   536                                               def delete_disk(self, disk_id):
-   537         2          6.0      3.0      0.0          url_params = azure_helpers.parse_url(VOLUME_RESOURCE_ID,
-   538         2         61.0     30.5      0.0                                               disk_id)
-   539         2          3.0      1.5      0.0          disk_name = url_params.get(VOLUME_NAME)
-   540         2   61330574.0 30665287.0    100.0          self.compute_client.disks.delete(self.resource_group, disk_name).wait()
-
-Total time: 0 s
-File: /Users/alex/Desktop/work/cb-profiled/cloudbridge/cloudbridge/cloud/providers/azure/azure_client.py
-Function: update_disk_tags at line 542
-
-Line #      Hits         Time  Per Hit   % Time  Line Contents
-==============================================================
-   542                                               @profile
-   543                                               def update_disk_tags(self, disk_id, tags):
-   544                                                   url_params = azure_helpers.parse_url(VOLUME_RESOURCE_ID,
-   545                                                                                        disk_id)
-   546                                                   disk_name = url_params.get(VOLUME_NAME)
-   547                                                   return self.compute_client.disks.update(
-   548                                                       self.resource_group,
-   549                                                       disk_name,
-   550                                                       {'tags': tags},
-   551                                                       raw=True
-   552                                                   )
-
-Total time: 0 s
-File: /Users/alex/Desktop/work/cb-profiled/cloudbridge/cloudbridge/cloud/providers/azure/azure_client.py
-Function: list_snapshots at line 554
-
-Line #      Hits         Time  Per Hit   % Time  Line Contents
-==============================================================
-   554                                               @profile
-   555                                               def list_snapshots(self):
-   556                                                   return self.compute_client.snapshots. \
-   557                                                       list_by_resource_group(self.resource_group)
-
-Total time: 0 s
-File: /Users/alex/Desktop/work/cb-profiled/cloudbridge/cloudbridge/cloud/providers/azure/azure_client.py
-Function: get_snapshot at line 559
-
-Line #      Hits         Time  Per Hit   % Time  Line Contents
-==============================================================
-   559                                               @profile
-   560                                               def get_snapshot(self, snapshot_id):
-   561                                                   url_params = azure_helpers.parse_url(SNAPSHOT_RESOURCE_ID,
-   562                                                                                        snapshot_id)
-   563                                                   snapshot_name = url_params.get(SNAPSHOT_NAME)
-   564                                                   return self.compute_client.snapshots.get(self.resource_group,
-   565                                                                                            snapshot_name)
-
-Total time: 0 s
-File: /Users/alex/Desktop/work/cb-profiled/cloudbridge/cloudbridge/cloud/providers/azure/azure_client.py
-Function: create_snapshot at line 567
-
-Line #      Hits         Time  Per Hit   % Time  Line Contents
-==============================================================
-   567                                               @profile
-   568                                               def create_snapshot(self, snapshot_name, params):
-   569                                                   return self.compute_client.snapshots.create_or_update(
-   570                                                       self.resource_group,
-   571                                                       snapshot_name,
-   572                                                       params
-   573                                                   ).result()
-
-Total time: 0 s
-File: /Users/alex/Desktop/work/cb-profiled/cloudbridge/cloudbridge/cloud/providers/azure/azure_client.py
-Function: delete_snapshot at line 575
-
-Line #      Hits         Time  Per Hit   % Time  Line Contents
-==============================================================
-   575                                               @profile
-   576                                               def delete_snapshot(self, snapshot_id):
-   577                                                   url_params = azure_helpers.parse_url(SNAPSHOT_RESOURCE_ID,
-   578                                                                                        snapshot_id)
-   579                                                   snapshot_name = url_params.get(SNAPSHOT_NAME)
-   580                                                   self.compute_client.snapshots.delete(self.resource_group,
-   581                                                                                        snapshot_name).wait()
-
-Total time: 0 s
-File: /Users/alex/Desktop/work/cb-profiled/cloudbridge/cloudbridge/cloud/providers/azure/azure_client.py
-Function: update_snapshot_tags at line 583
-
-Line #      Hits         Time  Per Hit   % Time  Line Contents
-==============================================================
-   583                                               @profile
-   584                                               def update_snapshot_tags(self, snapshot_id, tags):
-   585                                                   url_params = azure_helpers.parse_url(SNAPSHOT_RESOURCE_ID,
-   586                                                                                        snapshot_id)
-   587                                                   snapshot_name = url_params.get(SNAPSHOT_NAME)
-   588                                                   return self.compute_client.snapshots.update(
-   589                                                       self.resource_group,
-   590                                                       snapshot_name,
-   591                                                       {'tags': tags},
-   592                                                       raw=True
-   593                                                   )
-
-Total time: 0.00022 s
-File: /Users/alex/Desktop/work/cb-profiled/cloudbridge/cloudbridge/cloud/providers/azure/azure_client.py
-Function: is_gallery_image at line 595
-
-Line #      Hits         Time  Per Hit   % Time  Line Contents
-==============================================================
-   595                                               @profile
-   596                                               def is_gallery_image(self, image_id):
-   597        11         10.0      0.9      4.5          url_params = azure_helpers.parse_url(IMAGE_RESOURCE_ID,
-   598        11        203.0     18.5     92.3                                               image_id)
-   599                                                   # If it is a gallery image, it will always have an offer
-   600        11          7.0      0.6      3.2          return 'offer' in url_params
-
-Total time: 31.1668 s
-File: /Users/alex/Desktop/work/cb-profiled/cloudbridge/cloudbridge/cloud/providers/azure/azure_client.py
-Function: create_image at line 602
-
-Line #      Hits         Time  Per Hit   % Time  Line Contents
-==============================================================
-   602                                               @profile
-   603                                               def create_image(self, name, params):
-   604         1        512.0    512.0      0.0          return self.compute_client.images. \
-   605         1          9.0      9.0      0.0              create_or_update(self.resource_group, name,
-   606         1   31166320.0 31166320.0    100.0                               params).result()
-
-Total time: 30.729 s
-File: /Users/alex/Desktop/work/cb-profiled/cloudbridge/cloudbridge/cloud/providers/azure/azure_client.py
-Function: delete_image at line 608
-
-Line #      Hits         Time  Per Hit   % Time  Line Contents
-==============================================================
-   608                                               @profile
-   609                                               def delete_image(self, image_id):
-   610         1          3.0      3.0      0.0          url_params = azure_helpers.parse_url(IMAGE_RESOURCE_ID,
-   611         1         28.0     28.0      0.0                                               image_id)
-   612         1         28.0     28.0      0.0          if not self.is_gallery_image(image_id):
-   613         1          1.0      1.0      0.0              name = url_params.get(IMAGE_NAME)
-   614         1   30728980.0 30728980.0    100.0              self.compute_client.images.delete(self.resource_group, name).wait()
-
-Total time: 1.06767 s
-File: /Users/alex/Desktop/work/cb-profiled/cloudbridge/cloudbridge/cloud/providers/azure/azure_client.py
-Function: list_images at line 616
-
-Line #      Hits         Time  Per Hit   % Time  Line Contents
-==============================================================
-   616                                               @profile
-   617                                               def list_images(self):
-   618         6       2521.0    420.2      0.2          azure_images = list(self.compute_client.images.
-   619         6    1065136.0 177522.7     99.8                              list_by_resource_group(self.resource_group))
-   620         6         11.0      1.8      0.0          return azure_images
-
-Total time: 0 s
-File: /Users/alex/Desktop/work/cb-profiled/cloudbridge/cloudbridge/cloud/providers/azure/azure_client.py
-Function: list_gallery_refs at line 622
-
-Line #      Hits         Time  Per Hit   % Time  Line Contents
-==============================================================
-   622                                               @profile
-   623                                               def list_gallery_refs(self):
-   624                                                   return gallery_image_references
-
-Total time: 1.5034 s
-File: /Users/alex/Desktop/work/cb-profiled/cloudbridge/cloudbridge/cloud/providers/azure/azure_client.py
-Function: get_image at line 626
-
-Line #      Hits         Time  Per Hit   % Time  Line Contents
-==============================================================
-   626                                               @profile
-   627                                               def get_image(self, image_id):
-   628         7         22.0      3.1      0.0          url_params = azure_helpers.parse_url(IMAGE_RESOURCE_ID,
-   629         7        220.0     31.4      0.0                                               image_id)
-   630         7        212.0     30.3      0.0          if self.is_gallery_image(image_id):
-   631         1          5.0      5.0      0.0              return GalleryImageReference(publisher=url_params['publisher'],
-   632         1          1.0      1.0      0.0                                           offer=url_params['offer'],
-   633         1          0.0      0.0      0.0                                           sku=url_params['sku'],
-   634         1         38.0     38.0      0.0                                           version=url_params['version'])
-   635                                                   else:
-   636         6          7.0      1.2      0.0              name = url_params.get(IMAGE_NAME)
-   637         6    1502896.0 250482.7    100.0              return self.compute_client.images.get(self.resource_group, name)
-
-Total time: 92.9118 s
-File: /Users/alex/Desktop/work/cb-profiled/cloudbridge/cloudbridge/cloud/providers/azure/azure_client.py
-Function: update_image_tags at line 639
-
-Line #      Hits         Time  Per Hit   % Time  Line Contents
-==============================================================
-   639                                               @profile
-   640                                               def update_image_tags(self, image_id, tags):
-   641         3          7.0      2.3      0.0          url_params = azure_helpers.parse_url(IMAGE_RESOURCE_ID,
-   642         3         80.0     26.7      0.0                                               image_id)
-   643         3         83.0     27.7      0.0          if self.is_gallery_image(image_id):
-   644                                                       return True
-   645                                                   else:
-   646         3          3.0      1.0      0.0              name = url_params.get(IMAGE_NAME)
-   647         3       1395.0    465.0      0.0              return self.compute_client.images. \
-   648         3         23.0      7.7      0.0                  create_or_update(self.resource_group, name,
-   649                                                                            {
-   650         3          2.0      0.7      0.0                                       'tags': tags,
-   651         3   92910234.0 30970078.0    100.0                                       'location': self.region_name
-   652                                                                            }).result()
-
-Total time: 0 s
-File: /Users/alex/Desktop/work/cb-profiled/cloudbridge/cloudbridge/cloud/providers/azure/azure_client.py
-Function: list_vm_types at line 654
-
-Line #      Hits         Time  Per Hit   % Time  Line Contents
-==============================================================
-   654                                               @profile
-   655                                               def list_vm_types(self):
-   656                                                   return self.compute_client.virtual_machine_sizes. \
-   657                                                       list(self.region_name)
-
-Total time: 0.008362 s
-File: /Users/alex/Desktop/work/cb-profiled/cloudbridge/cloudbridge/cloud/providers/azure/azure_client.py
-Function: list_networks at line 659
-
-Line #      Hits         Time  Per Hit   % Time  Line Contents
-==============================================================
-   659                                               @profile
-   660                                               def list_networks(self):
-   661         1       8273.0   8273.0     98.9          return self.network_management_client.virtual_networks.list(
-   662         1         89.0     89.0      1.1              self.resource_group)
-
-Total time: 0.988359 s
-File: /Users/alex/Desktop/work/cb-profiled/cloudbridge/cloudbridge/cloud/providers/azure/azure_client.py
-Function: get_network at line 664
-
-Line #      Hits         Time  Per Hit   % Time  Line Contents
-==============================================================
-   664                                               @profile
-   665                                               def get_network(self, network_id):
-   666         4          5.0      1.2      0.0          url_params = azure_helpers.parse_url(NETWORK_RESOURCE_ID,
-   667         4         85.0     21.2      0.0                                               network_id)
-   668         4          4.0      1.0      0.0          network_name = url_params.get(NETWORK_NAME)
-   669         4       2917.0    729.2      0.3          return self.network_management_client.virtual_networks.get(
-   670         4     985348.0 246337.0     99.7              self.resource_group, network_name)
-
-Total time: 0 s
-File: /Users/alex/Desktop/work/cb-profiled/cloudbridge/cloudbridge/cloud/providers/azure/azure_client.py
-Function: create_network at line 672
-
-Line #      Hits         Time  Per Hit   % Time  Line Contents
-==============================================================
-   672                                               @profile
-   673                                               def create_network(self, name, params):
-   674                                                   return self.network_management_client.virtual_networks. \
-   675                                                       create_or_update(self.resource_group,
-   676                                                                        name,
-   677                                                                        parameters=params).result()
-
-Total time: 0 s
-File: /Users/alex/Desktop/work/cb-profiled/cloudbridge/cloudbridge/cloud/providers/azure/azure_client.py
-Function: delete_network at line 679
-
-Line #      Hits         Time  Per Hit   % Time  Line Contents
-==============================================================
-   679                                               @profile
-   680                                               def delete_network(self, network_id):
-   681                                                   url_params = azure_helpers.parse_url(NETWORK_RESOURCE_ID, network_id)
-   682                                                   network_name = url_params.get(NETWORK_NAME)
-   683                                                   return self.network_management_client.virtual_networks. \
-   684                                                       delete(self.resource_group, network_name).wait()
-
-Total time: 0 s
-File: /Users/alex/Desktop/work/cb-profiled/cloudbridge/cloudbridge/cloud/providers/azure/azure_client.py
-Function: update_network_tags at line 686
-
-Line #      Hits         Time  Per Hit   % Time  Line Contents
-==============================================================
-   686                                               @profile
-   687                                               def update_network_tags(self, network_id, tags):
-   688                                                   url_params = azure_helpers.parse_url(NETWORK_RESOURCE_ID, network_id)
-   689                                                   network_name = url_params.get(NETWORK_NAME)
-   690                                                   return self.network_management_client.virtual_networks. \
-   691                                                       create_or_update(self.resource_group,
-   692                                                                        network_name, tags).result()
-
-Total time: 0.000219 s
-File: /Users/alex/Desktop/work/cb-profiled/cloudbridge/cloudbridge/cloud/providers/azure/azure_client.py
-Function: get_network_id_for_subnet at line 694
-
-Line #      Hits         Time  Per Hit   % Time  Line Contents
-==============================================================
-   694                                               @profile
-   695                                               def get_network_id_for_subnet(self, subnet_id):
-   696         4        122.0     30.5     55.7          url_params = azure_helpers.parse_url(SUBNET_RESOURCE_ID, subnet_id)
-   697         4          6.0      1.5      2.7          network_id = NETWORK_RESOURCE_ID[0]
-   698        20         15.0      0.8      6.8          for key, val in url_params.items():
-   699        16         74.0      4.6     33.8              network_id = network_id.replace("{" + key + "}", val)
-   700         4          2.0      0.5      0.9          return network_id
-
-Total time: 0.000922 s
-File: /Users/alex/Desktop/work/cb-profiled/cloudbridge/cloudbridge/cloud/providers/azure/azure_client.py
-Function: list_subnets at line 702
-
-Line #      Hits         Time  Per Hit   % Time  Line Contents
-==============================================================
-   702                                               @profile
-   703                                               def list_subnets(self, network_id):
-   704         1         54.0     54.0      5.9          url_params = azure_helpers.parse_url(NETWORK_RESOURCE_ID, network_id)
-   705         1          2.0      2.0      0.2          network_name = url_params.get(NETWORK_NAME)
-   706         1        800.0    800.0     86.8          return self.network_management_client.subnets. \
-   707         1         66.0     66.0      7.2              list(self.resource_group, network_name)
-
-Total time: 0 s
-File: /Users/alex/Desktop/work/cb-profiled/cloudbridge/cloudbridge/cloud/providers/azure/azure_client.py
-Function: get_subnet at line 709
-
-Line #      Hits         Time  Per Hit   % Time  Line Contents
-==============================================================
-   709                                               @profile
-   710                                               def get_subnet(self, subnet_id):
-   711                                                   url_params = azure_helpers.parse_url(SUBNET_RESOURCE_ID,
-   712                                                                                        subnet_id)
-   713                                                   network_name = url_params.get(NETWORK_NAME)
-   714                                                   subnet_name = url_params.get(SUBNET_NAME)
-   715                                                   return self.network_management_client.subnets. \
-   716                                                       get(self.resource_group, network_name, subnet_name)
-
-Total time: 0 s
-File: /Users/alex/Desktop/work/cb-profiled/cloudbridge/cloudbridge/cloud/providers/azure/azure_client.py
-Function: create_subnet at line 718
-
-Line #      Hits         Time  Per Hit   % Time  Line Contents
-==============================================================
-   718                                               @profile
-   719                                               def create_subnet(self, network_id, subnet_name, params):
-   720                                                   url_params = azure_helpers.parse_url(NETWORK_RESOURCE_ID, network_id)
-   721                                                   network_name = url_params.get(NETWORK_NAME)
-   722                                                   result_create = self.network_management_client \
-   723                                                       .subnets.create_or_update(
-   724                                                           self.resource_group,
-   725                                                           network_name,
-   726                                                           subnet_name,
-   727                                                           params
-   728                                                       )
-   729                                                   subnet_info = result_create.result()
-   730                                           
-   731                                                   return subnet_info
-
-Total time: 0 s
-File: /Users/alex/Desktop/work/cb-profiled/cloudbridge/cloudbridge/cloud/providers/azure/azure_client.py
-Function: __if_subnet_in_use at line 733
-
-Line #      Hits         Time  Per Hit   % Time  Line Contents
-==============================================================
-   733                                               @profile
-   734                                               def __if_subnet_in_use(e):
-   735                                                   # return True if the CloudError exception is due to subnet being in use
-   736                                                   if isinstance(e, CloudError):
-   737                                                       if e.error.error == "InUseSubnetCannotBeDeleted":
-   738                                                           return True
-   739                                                   return False
-
-Total time: 0 s
-File: /Users/alex/Desktop/work/cb-profiled/cloudbridge/cloudbridge/cloud/providers/azure/azure_client.py
-Function: delete_subnet at line 741
-
-Line #      Hits         Time  Per Hit   % Time  Line Contents
-==============================================================
-   741                                               @tenacity.retry(stop=tenacity.stop_after_attempt(5),
-   742                                                               retry=tenacity.retry_if_exception(__if_subnet_in_use),
-   743                                                               wait=tenacity.wait_fixed(5),
-   744                                                               reraise=True)
-   745                                               @profile
-   746                                               def delete_subnet(self, subnet_id):
-   747                                                   url_params = azure_helpers.parse_url(SUBNET_RESOURCE_ID,
-   748                                                                                        subnet_id)
-   749                                                   network_name = url_params.get(NETWORK_NAME)
-   750                                                   subnet_name = url_params.get(SUBNET_NAME)
-   751                                           
-   752                                                   try:
-   753                                                       result_delete = self.network_management_client \
-   754                                                           .subnets.delete(
-   755                                                               self.resource_group,
-   756                                                               network_name,
-   757                                                               subnet_name
-   758                                                           )
-   759                                                       result_delete.wait()
-   760                                                   except CloudError as cloud_error:
-   761                                                       log.exception(cloud_error.message)
-   762                                                       raise cloud_error
-
-Total time: 0 s
-File: /Users/alex/Desktop/work/cb-profiled/cloudbridge/cloudbridge/cloud/providers/azure/azure_client.py
-Function: create_floating_ip at line 764
-
-Line #      Hits         Time  Per Hit   % Time  Line Contents
-==============================================================
-   764                                               @profile
-   765                                               def create_floating_ip(self, public_ip_name, public_ip_parameters):
-   766                                                   return self.network_management_client.public_ip_addresses. \
-   767                                                       create_or_update(self.resource_group,
-   768                                                                        public_ip_name,
-   769                                                                        public_ip_parameters).result()
-
-Total time: 0 s
-File: /Users/alex/Desktop/work/cb-profiled/cloudbridge/cloudbridge/cloud/providers/azure/azure_client.py
-Function: get_floating_ip at line 771
-
-Line #      Hits         Time  Per Hit   % Time  Line Contents
-==============================================================
-   771                                               @profile
-   772                                               def get_floating_ip(self, public_ip_id):
-   773                                                   url_params = azure_helpers.parse_url(PUBLIC_IP_RESOURCE_ID,
-   774                                                                                        public_ip_id)
-   775                                                   public_ip_name = url_params.get(PUBLIC_IP_NAME)
-   776                                                   return self.network_management_client. \
-   777                                                       public_ip_addresses.get(self.resource_group, public_ip_name)
-
-Total time: 0 s
-File: /Users/alex/Desktop/work/cb-profiled/cloudbridge/cloudbridge/cloud/providers/azure/azure_client.py
-Function: delete_floating_ip at line 779
-
-Line #      Hits         Time  Per Hit   % Time  Line Contents
-==============================================================
-   779                                               @profile
-   780                                               def delete_floating_ip(self, public_ip_id):
-   781                                                   url_params = azure_helpers.parse_url(PUBLIC_IP_RESOURCE_ID,
-   782                                                                                        public_ip_id)
-   783                                                   public_ip_name = url_params.get(PUBLIC_IP_NAME)
-   784                                                   self.network_management_client. \
-   785                                                       public_ip_addresses.delete(self.resource_group,
-   786                                                                                  public_ip_name).wait()
-
-Total time: 0 s
-File: /Users/alex/Desktop/work/cb-profiled/cloudbridge/cloudbridge/cloud/providers/azure/azure_client.py
-Function: update_fip_tags at line 788
-
-Line #      Hits         Time  Per Hit   % Time  Line Contents
-==============================================================
-   788                                               @profile
-   789                                               def update_fip_tags(self, fip_id, tags):
-   790                                                   url_params = azure_helpers.parse_url(PUBLIC_IP_RESOURCE_ID,
-   791                                                                                        fip_id)
-   792                                                   fip_name = url_params.get(PUBLIC_IP_NAME)
-   793                                                   self.network_management_client.public_ip_addresses. \
-   794                                                       create_or_update(self.resource_group,
-   795                                                                        fip_name, tags).result()
-
-Total time: 0 s
-File: /Users/alex/Desktop/work/cb-profiled/cloudbridge/cloudbridge/cloud/providers/azure/azure_client.py
-Function: list_floating_ips at line 797
-
-Line #      Hits         Time  Per Hit   % Time  Line Contents
-==============================================================
-   797                                               @profile
-   798                                               def list_floating_ips(self):
-   799                                                   return self.network_management_client.public_ip_addresses.list(
-   800                                                       self.resource_group)
-
-Total time: 0 s
-File: /Users/alex/Desktop/work/cb-profiled/cloudbridge/cloudbridge/cloud/providers/azure/azure_client.py
-Function: list_vm at line 802
-
-Line #      Hits         Time  Per Hit   % Time  Line Contents
-==============================================================
-   802                                               @profile
-   803                                               def list_vm(self):
-   804                                                   return self.compute_client.virtual_machines.list(
-   805                                                       self.resource_group
-   806                                                   )
-
-Total time: 0 s
-File: /Users/alex/Desktop/work/cb-profiled/cloudbridge/cloudbridge/cloud/providers/azure/azure_client.py
-Function: restart_vm at line 808
-
-Line #      Hits         Time  Per Hit   % Time  Line Contents
-==============================================================
-   808                                               @profile
-   809                                               def restart_vm(self, vm_id):
-   810                                                   url_params = azure_helpers.parse_url(VM_RESOURCE_ID,
-   811                                                                                        vm_id)
-   812                                                   vm_name = url_params.get(VM_NAME)
-   813                                                   return self.compute_client.virtual_machines.restart(
-   814                                                       self.resource_group, vm_name).wait()
-
-Total time: 81.5368 s
-File: /Users/alex/Desktop/work/cb-profiled/cloudbridge/cloudbridge/cloud/providers/azure/azure_client.py
-Function: delete_vm at line 816
-
-Line #      Hits         Time  Per Hit   % Time  Line Contents
-==============================================================
-   816                                               @profile
-   817                                               def delete_vm(self, vm_id):
-   818         2          6.0      3.0      0.0          url_params = azure_helpers.parse_url(VM_RESOURCE_ID,
-   819         2         57.0     28.5      0.0                                               vm_id)
-   820         2          2.0      1.0      0.0          vm_name = url_params.get(VM_NAME)
-   821         2        929.0    464.5      0.0          return self.compute_client.virtual_machines.delete(
-   822         2   81535764.0 40767882.0    100.0              self.resource_group, vm_name).wait()
-
-Total time: 0.891989 s
-File: /Users/alex/Desktop/work/cb-profiled/cloudbridge/cloudbridge/cloud/providers/azure/azure_client.py
-Function: get_vm at line 824
-
-Line #      Hits         Time  Per Hit   % Time  Line Contents
-==============================================================
-   824                                               @profile
-   825                                               def get_vm(self, vm_id):
-   826         4         22.0      5.5      0.0          url_params = azure_helpers.parse_url(VM_RESOURCE_ID,
-   827         4        201.0     50.2      0.0                                               vm_id)
-   828         4          8.0      2.0      0.0          vm_name = url_params.get(VM_NAME)
-   829         4       2873.0    718.2      0.3          return self.compute_client.virtual_machines.get(
-   830         4         47.0     11.8      0.0              self.resource_group,
-   831         4          5.0      1.2      0.0              vm_name,
-   832         4     888833.0 222208.2     99.6              expand='instanceView'
-   833                                                   )
-
-Total time: 220.739 s
-File: /Users/alex/Desktop/work/cb-profiled/cloudbridge/cloudbridge/cloud/providers/azure/azure_client.py
-Function: create_vm at line 835
-
-Line #      Hits         Time  Per Hit   % Time  Line Contents
-==============================================================
-   835                                               @profile
-   836                                               def create_vm(self, vm_name, params):
-   837         2       7168.0   3584.0      0.0          return self.compute_client.virtual_machines. \
-   838         2         16.0      8.0      0.0              create_or_update(self.resource_group,
-   839         2  220731539.0 110365769.5    100.0                               vm_name, params).result()
-
-Total time: 0 s
-File: /Users/alex/Desktop/work/cb-profiled/cloudbridge/cloudbridge/cloud/providers/azure/azure_client.py
-Function: update_vm at line 841
-
-Line #      Hits         Time  Per Hit   % Time  Line Contents
-==============================================================
-   841                                               @profile
-   842                                               def update_vm(self, vm_id, params):
-   843                                                   url_params = azure_helpers.parse_url(VM_RESOURCE_ID,
-   844                                                                                        vm_id)
-   845                                                   vm_name = url_params.get(VM_NAME)
-   846                                                   return self.compute_client.virtual_machines. \
-   847                                                       create_or_update(self.resource_group,
-   848                                                                        vm_name, params, raw=True)
-
-Total time: 135.517 s
-File: /Users/alex/Desktop/work/cb-profiled/cloudbridge/cloudbridge/cloud/providers/azure/azure_client.py
-Function: deallocate_vm at line 850
-
-Line #      Hits         Time  Per Hit   % Time  Line Contents
-==============================================================
-   850                                               @profile
-   851                                               def deallocate_vm(self, vm_id):
-   852         3          7.0      2.3      0.0          url_params = azure_helpers.parse_url(VM_RESOURCE_ID,
-   853         3         73.0     24.3      0.0                                               vm_id)
-   854         3          4.0      1.3      0.0          vm_name = url_params.get(VM_NAME)
-   855         3       1297.0    432.3      0.0          self.compute_client. \
-   856         3         21.0      7.0      0.0              virtual_machines.deallocate(self.resource_group,
-   857         3  135515592.0 45171864.0    100.0                                          vm_name).wait()
-
-Total time: 0.282532 s
-File: /Users/alex/Desktop/work/cb-profiled/cloudbridge/cloudbridge/cloud/providers/azure/azure_client.py
-Function: generalize_vm at line 859
-
-Line #      Hits         Time  Per Hit   % Time  Line Contents
-==============================================================
-   859                                               @profile
-   860                                               def generalize_vm(self, vm_id):
-   861         1          3.0      3.0      0.0          url_params = azure_helpers.parse_url(VM_RESOURCE_ID,
-   862         1         32.0     32.0      0.0                                               vm_id)
-   863         1          2.0      2.0      0.0          vm_name = url_params.get(VM_NAME)
-   864         1        511.0    511.0      0.2          self.compute_client.virtual_machines. \
-   865         1     281984.0 281984.0     99.8              generalize(self.resource_group, vm_name)
-
-Total time: 0 s
-File: /Users/alex/Desktop/work/cb-profiled/cloudbridge/cloudbridge/cloud/providers/azure/azure_client.py
-Function: start_vm at line 867
-
-Line #      Hits         Time  Per Hit   % Time  Line Contents
-==============================================================
-   867                                               @profile
-   868                                               def start_vm(self, vm_id):
-   869                                                   url_params = azure_helpers.parse_url(VM_RESOURCE_ID,
-   870                                                                                        vm_id)
-   871                                                   vm_name = url_params.get(VM_NAME)
-   872                                                   self.compute_client.virtual_machines. \
-   873                                                       start(self.resource_group,
-   874                                                             vm_name).wait()
-
-Total time: 0 s
-File: /Users/alex/Desktop/work/cb-profiled/cloudbridge/cloudbridge/cloud/providers/azure/azure_client.py
-Function: update_vm_tags at line 876
-
-Line #      Hits         Time  Per Hit   % Time  Line Contents
-==============================================================
-   876                                               @profile
-   877                                               def update_vm_tags(self, vm_id, tags):
-   878                                                   url_params = azure_helpers.parse_url(VM_RESOURCE_ID,
-   879                                                                                        vm_id)
-   880                                                   vm_name = url_params.get(VM_NAME)
-   881                                                   self.compute_client.virtual_machines. \
-   882                                                       create_or_update(self.resource_group,
-   883                                                                        vm_name, tags).result()
-
-Total time: 21.3373 s
-File: /Users/alex/Desktop/work/cb-profiled/cloudbridge/cloudbridge/cloud/providers/azure/azure_client.py
-Function: delete_nic at line 885
-
-Line #      Hits         Time  Per Hit   % Time  Line Contents
-==============================================================
-   885                                               @profile
-   886                                               def delete_nic(self, nic_id):
-   887         2          6.0      3.0      0.0          nic_params = azure_helpers.\
-   888         2         50.0     25.0      0.0              parse_url(NETWORK_INTERFACE_RESOURCE_ID, nic_id)
-   889         2          2.0      1.0      0.0          nic_name = nic_params.get(NETWORK_INTERFACE_NAME)
-   890         2       1434.0    717.0      0.0          self.network_management_client. \
-   891         2         16.0      8.0      0.0              network_interfaces.delete(self.resource_group,
-   892         2   21335790.0 10667895.0    100.0                                        nic_name).wait()
-
-Total time: 1.76043 s
-File: /Users/alex/Desktop/work/cb-profiled/cloudbridge/cloudbridge/cloud/providers/azure/azure_client.py
-Function: get_nic at line 894
-
-Line #      Hits         Time  Per Hit   % Time  Line Contents
-==============================================================
-   894                                               @profile
-   895                                               def get_nic(self, nic_id):
-   896         6         14.0      2.3      0.0          nic_params = azure_helpers.\
-   897         6        178.0     29.7      0.0              parse_url(NETWORK_INTERFACE_RESOURCE_ID, nic_id)
-   898         6          9.0      1.5      0.0          nic_name = nic_params.get(NETWORK_INTERFACE_NAME)
-   899         6       4471.0    745.2      0.3          return self.network_management_client. \
-   900         6    1755758.0 292626.3     99.7              network_interfaces.get(self.resource_group, nic_name)
-
-Total time: 0 s
-File: /Users/alex/Desktop/work/cb-profiled/cloudbridge/cloudbridge/cloud/providers/azure/azure_client.py
-Function: update_nic at line 902
-
-Line #      Hits         Time  Per Hit   % Time  Line Contents
-==============================================================
-   902                                               @profile
-   903                                               def update_nic(self, nic_id, params):
-   904                                                   nic_params = azure_helpers.\
-   905                                                       parse_url(NETWORK_INTERFACE_RESOURCE_ID, nic_id)
-   906                                                   nic_name = nic_params.get(NETWORK_INTERFACE_NAME)
-   907                                                   async_nic_creation = self.network_management_client. \
-   908                                                       network_interfaces.create_or_update(
-   909                                                           self.resource_group,
-   910                                                           nic_name,
-   911                                                           params
-   912                                                       )
-   913                                                   nic_info = async_nic_creation.result()
-   914                                                   return nic_info
-
-Total time: 61.8844 s
-File: /Users/alex/Desktop/work/cb-profiled/cloudbridge/cloudbridge/cloud/providers/azure/azure_client.py
-Function: create_nic at line 916
-
-Line #      Hits         Time  Per Hit   % Time  Line Contents
-==============================================================
-   916                                               @profile
-   917                                               def create_nic(self, nic_name, params):
-   918         2       1446.0    723.0      0.0          return self.network_management_client. \
-   919                                                       network_interfaces.create_or_update(
-   920         2         41.0     20.5      0.0                  self.resource_group,
-   921         2          2.0      1.0      0.0                  nic_name,
-   922         2   61882952.0 30941476.0    100.0                  params
-   923                                                       ).result()
-
-Total time: 0.151782 s
-File: /Users/alex/Desktop/work/cb-profiled/cloudbridge/cloudbridge/cloud/providers/azure/azure_client.py
-Function: create_public_key at line 925
-
-Line #      Hits         Time  Per Hit   % Time  Line Contents
-==============================================================
-   925                                               @profile
-   926                                               def create_public_key(self, entity):
-   927         2      89356.0  44678.0     58.9          return self.table_service. \
-   928         2         14.0      7.0      0.0              insert_or_replace_entity(self.public_key_storage_table_name,
-   929         2      62412.0  31206.0     41.1                                       entity)
-
-Total time: 1.5317 s
-File: /Users/alex/Desktop/work/cb-profiled/cloudbridge/cloudbridge/cloud/providers/azure/azure_client.py
-Function: get_public_key at line 931
-
-Line #      Hits         Time  Per Hit   % Time  Line Contents
-==============================================================
-   931                                               @profile
-   932                                               def get_public_key(self, name):
-   933         4    1342278.0 335569.5     87.6          entities = self.table_service. \
-   934         4         38.0      9.5      0.0              query_entities(self.public_key_storage_table_name,
-   935         4     189375.0  47343.8     12.4                             "Name eq '{0}'".format(name), num_results=1)
-   936                                           
-   937         4         14.0      3.5      0.0          return entities.items[0] if len(entities.items) > 0 else None
-
-Total time: 0.253359 s
-File: /Users/alex/Desktop/work/cb-profiled/cloudbridge/cloudbridge/cloud/providers/azure/azure_client.py
-Function: delete_public_key at line 939
-
-Line #      Hits         Time  Per Hit   % Time  Line Contents
-==============================================================
-   939                                               @profile
-   940                                               def delete_public_key(self, entity):
-   941         2     181261.0  90630.5     71.5          self.table_service.delete_entity(self.public_key_storage_table_name,
-   942         2      72098.0  36049.0     28.5                                           entity.PartitionKey, entity.RowKey)
-
-Total time: 0 s
-File: /Users/alex/Desktop/work/cb-profiled/cloudbridge/cloudbridge/cloud/providers/azure/azure_client.py
-Function: list_public_keys at line 944
-
-Line #      Hits         Time  Per Hit   % Time  Line Contents
-==============================================================
-   944                                               @profile
-   945                                               def list_public_keys(self, partition_key, limit=None, marker=None):
-   946                                                   entities = self.table_service. \
-   947                                                       query_entities(self.public_key_storage_table_name,
-   948                                                                      "PartitionKey eq '{0}'".format(partition_key),
-   949                                                                      marker=marker, num_results=limit)
-   950                                                   return (entities.items, entities.next_marker)
-
-Total time: 0 s
-File: /Users/alex/Desktop/work/cb-profiled/cloudbridge/cloudbridge/cloud/providers/azure/azure_client.py
-Function: delete_route_table at line 952
-
-Line #      Hits         Time  Per Hit   % Time  Line Contents
-==============================================================
-   952                                               @profile
-   953                                               def delete_route_table(self, route_table_name):
-   954                                                   self.network_management_client. \
-   955                                                       route_tables.delete(self.resource_group, route_table_name
-   956                                                                           ).wait()
-
-Total time: 0 s
-File: /Users/alex/Desktop/work/cb-profiled/cloudbridge/cloudbridge/cloud/providers/azure/azure_client.py
-Function: attach_subnet_to_route_table at line 958
-
-Line #      Hits         Time  Per Hit   % Time  Line Contents
-==============================================================
-   958                                               @profile
-   959                                               def attach_subnet_to_route_table(self, subnet_id, route_table_id):
-   960                                                   url_params = azure_helpers.parse_url(SUBNET_RESOURCE_ID,
-   961                                                                                        subnet_id)
-   962                                                   network_name = url_params.get(NETWORK_NAME)
-   963                                                   subnet_name = url_params.get(SUBNET_NAME)
-   964                                           
-   965                                                   subnet_info = self.network_management_client.subnets.get(
-   966                                                       self.resource_group,
-   967                                                       network_name,
-   968                                                       subnet_name
-   969                                                   )
-   970                                                   if subnet_info:
-   971                                                       subnet_info.route_table = {
-   972                                                           'id': route_table_id
-   973                                                       }
-   974                                           
-   975                                                       result_create = self.network_management_client. \
-   976                                                           subnets.create_or_update(
-   977                                                            self.resource_group,
-   978                                                            network_name,
-   979                                                            subnet_name,
-   980                                                            subnet_info)
-   981                                                       subnet_info = result_create.result()
-   982                                           
-   983                                                   return subnet_info
-
-Total time: 0 s
-File: /Users/alex/Desktop/work/cb-profiled/cloudbridge/cloudbridge/cloud/providers/azure/azure_client.py
-Function: detach_subnet_to_route_table at line 985
-
-Line #      Hits         Time  Per Hit   % Time  Line Contents
-==============================================================
-   985                                               @profile
-   986                                               def detach_subnet_to_route_table(self, subnet_id, route_table_id):
-   987                                                   url_params = azure_helpers.parse_url(SUBNET_RESOURCE_ID,
-   988                                                                                        subnet_id)
-   989                                                   network_name = url_params.get(NETWORK_NAME)
-   990                                                   subnet_name = url_params.get(SUBNET_NAME)
-   991                                           
-   992                                                   subnet_info = self.network_management_client.subnets.get(
-   993                                                       self.resource_group,
-   994                                                       network_name,
-   995                                                       subnet_name
-   996                                                   )
-   997                                           
-   998                                                   if subnet_info and subnet_info.route_table.id == route_table_id:
-   999                                                       subnet_info.route_table = None
-  1000                                           
-  1001                                                       result_create = self.network_management_client. \
-  1002                                                           subnets.create_or_update(
-  1003                                                            self.resource_group,
-  1004                                                            network_name,
-  1005                                                            subnet_name,
-  1006                                                            subnet_info)
-  1007                                                       subnet_info = result_create.result()
-  1008                                           
-  1009                                                   return subnet_info
-
-Total time: 0 s
-File: /Users/alex/Desktop/work/cb-profiled/cloudbridge/cloudbridge/cloud/providers/azure/azure_client.py
-Function: list_route_tables at line 1011
-
-Line #      Hits         Time  Per Hit   % Time  Line Contents
-==============================================================
-  1011                                               @profile
-  1012                                               def list_route_tables(self):
-  1013                                                   return self.network_management_client. \
-  1014                                                       route_tables.list(self.resource_group)
-
-Total time: 0 s
-File: /Users/alex/Desktop/work/cb-profiled/cloudbridge/cloudbridge/cloud/providers/azure/azure_client.py
-Function: get_route_table at line 1016
-
-Line #      Hits         Time  Per Hit   % Time  Line Contents
-==============================================================
-  1016                                               @profile
-  1017                                               def get_route_table(self, router_id):
-  1018                                                   url_params = azure_helpers.parse_url(ROUTER_RESOURCE_ID,
-  1019                                                                                        router_id)
-  1020                                                   router_name = url_params.get(ROUTER_NAME)
-  1021                                                   return self.network_management_client. \
-  1022                                                       route_tables.get(self.resource_group, router_name)
-
-Total time: 0 s
-File: /Users/alex/Desktop/work/cb-profiled/cloudbridge/cloudbridge/cloud/providers/azure/azure_client.py
-Function: create_route_table at line 1024
-
-Line #      Hits         Time  Per Hit   % Time  Line Contents
-==============================================================
-  1024                                               @profile
-  1025                                               def create_route_table(self, route_table_name, params):
-  1026                                                   return self.network_management_client. \
-  1027                                                       route_tables.create_or_update(
-  1028                                                        self.resource_group,
-  1029                                                        route_table_name, params).result()
-
-Total time: 0 s
-File: /Users/alex/Desktop/work/cb-profiled/cloudbridge/cloudbridge/cloud/providers/azure/azure_client.py
-Function: update_route_table_tags at line 1031
-
-Line #      Hits         Time  Per Hit   % Time  Line Contents
-==============================================================
-  1031                                               @profile
-  1032                                               def update_route_table_tags(self, route_table_name, tags):
-  1033                                                   self.network_management_client.route_tables. \
-  1034                                                       create_or_update(self.resource_group,
-  1035                                                                        route_table_name, tags).result()
-

+ 0 - 1470
results/interface.res

@@ -1,1470 +0,0 @@
-cloudbridge.test.test_interface.CloudInterfaceTestCase
-
-
-Test output
- ......
-----------------------------------------------------------------------
-Ran 6 tests in 3.860s
-
-OK
-
-Wrote profile results to run_tests.py.lprof
-Timer unit: 1e-06 s
-
-Total time: 0.6384 s
-File: /Users/alex/Desktop/work/cb-profiled/cloudbridge/cloudbridge/cloud/providers/azure/azure_client.py
-Function: __init__ at line 160
-
-Line #      Hits         Time  Per Hit   % Time  Line Contents
-==============================================================
-   160                                               @profile
-   161                                               def __init__(self, config):
-   162         2          7.0      3.5      0.0          self._config = config
-   163         2          5.0      2.5      0.0          self.subscription_id = str(config.get('azure_subscription_id'))
-   164         2          1.0      0.5      0.0          self._credentials = ServicePrincipalCredentials(
-   165         2          1.0      0.5      0.0              client_id=config.get('azure_client_id'),
-   166         2          2.0      1.0      0.0              secret=config.get('azure_secret'),
-   167         2     638344.0 319172.0    100.0              tenant=config.get('azure_tenant')
-   168                                                   )
-   169                                           
-   170         2          6.0      3.0      0.0          self._access_token = config.get('azure_access_token')
-   171         2          2.0      1.0      0.0          self._resource_client = None
-   172         2          2.0      1.0      0.0          self._storage_client = None
-   173         2          2.0      1.0      0.0          self._network_management_client = None
-   174         2          2.0      1.0      0.0          self._subscription_client = None
-   175         2          2.0      1.0      0.0          self._compute_client = None
-   176         2          2.0      1.0      0.0          self._access_key_result = None
-   177         2          3.0      1.5      0.0          self._block_blob_service = None
-   178         2          1.0      0.5      0.0          self._table_service = None
-   179         2          1.0      0.5      0.0          self._storage_account = None
-   180                                           
-   181         2         17.0      8.5      0.0          log.debug("azure subscription : %s", self.subscription_id)
-
-Total time: 0.373592 s
-File: /Users/alex/Desktop/work/cb-profiled/cloudbridge/cloudbridge/cloud/providers/azure/azure_client.py
-Function: access_key_result at line 183
-
-Line #      Hits         Time  Per Hit   % Time  Line Contents
-==============================================================
-   183                                               @property
-   184                                               @tenacity.retry(stop=tenacity.stop_after_attempt(5), reraise=True)
-   185                                               @profile
-   186                                               def access_key_result(self):
-   187         1          1.0      1.0      0.0          if not self._access_key_result:
-   188         1          3.0      3.0      0.0              storage_account = self.storage_account
-   189                                           
-   190         1     153188.0 153188.0     41.0              if self.get_storage_account(storage_account).\
-   191         1          2.0      2.0      0.0                      provisioning_state.value != 'Succeeded':
-   192                                                           log.debug(
-   193                                                               "Storage account %s is not in Succeeded state yet. ",
-   194                                                               storage_account)
-   195                                                           raise WaitStateException(
-   196                                                               "Waited too long for storage account: {0} to "
-   197                                                               "become ready.".format(
-   198                                                                   storage_account,
-   199                                                                   self.get_storage_account(storage_account).
-   200                                                                   provisioning_state))
-   201                                           
-   202         1        212.0    212.0      0.1              self._access_key_result = self.storage_client.storage_accounts. \
-   203         1     220184.0 220184.0     58.9                  list_keys(self.resource_group, storage_account)
-   204         1          2.0      2.0      0.0          return self._access_key_result
-
-Total time: 4e-06 s
-File: /Users/alex/Desktop/work/cb-profiled/cloudbridge/cloudbridge/cloud/providers/azure/azure_client.py
-Function: resource_group at line 206
-
-Line #      Hits         Time  Per Hit   % Time  Line Contents
-==============================================================
-   206                                               @property
-   207                                               @profile
-   208                                               def resource_group(self):
-   209         3          4.0      1.3    100.0          return self._config.get('azure_resource_group')
-
-Total time: 4e-06 s
-File: /Users/alex/Desktop/work/cb-profiled/cloudbridge/cloudbridge/cloud/providers/azure/azure_client.py
-Function: storage_account at line 211
-
-Line #      Hits         Time  Per Hit   % Time  Line Contents
-==============================================================
-   211                                               @property
-   212                                               @profile
-   213                                               def storage_account(self):
-   214         3          4.0      1.3    100.0          return self._config.get('azure_storage_account')
-
-Total time: 0 s
-File: /Users/alex/Desktop/work/cb-profiled/cloudbridge/cloudbridge/cloud/providers/azure/azure_client.py
-Function: region_name at line 216
-
-Line #      Hits         Time  Per Hit   % Time  Line Contents
-==============================================================
-   216                                               @property
-   217                                               @profile
-   218                                               def region_name(self):
-   219                                                   return self._config.get('azure_region_name')
-
-Total time: 3e-06 s
-File: /Users/alex/Desktop/work/cb-profiled/cloudbridge/cloudbridge/cloud/providers/azure/azure_client.py
-Function: public_key_storage_table_name at line 221
-
-Line #      Hits         Time  Per Hit   % Time  Line Contents
-==============================================================
-   221                                               @property
-   222                                               @profile
-   223                                               def public_key_storage_table_name(self):
-   224         2          3.0      1.5    100.0          return self._config.get('azure_public_key_storage_table_name')
-
-Total time: 0.006364 s
-File: /Users/alex/Desktop/work/cb-profiled/cloudbridge/cloudbridge/cloud/providers/azure/azure_client.py
-Function: storage_client at line 226
-
-Line #      Hits         Time  Per Hit   % Time  Line Contents
-==============================================================
-   226                                               @property
-   227                                               @profile
-   228                                               def storage_client(self):
-   229         3          5.0      1.7      0.1          if not self._storage_client:
-   230                                                       self._storage_client = \
-   231         1          1.0      1.0      0.0                  StorageManagementClient(self._credentials,
-   232         1       6354.0   6354.0     99.8                                          self.subscription_id)
-   233         3          4.0      1.3      0.1          return self._storage_client
-
-Total time: 0 s
-File: /Users/alex/Desktop/work/cb-profiled/cloudbridge/cloudbridge/cloud/providers/azure/azure_client.py
-Function: subscription_client at line 235
-
-Line #      Hits         Time  Per Hit   % Time  Line Contents
-==============================================================
-   235                                               @property
-   236                                               @profile
-   237                                               def subscription_client(self):
-   238                                                   if not self._subscription_client:
-   239                                                       self._subscription_client = SubscriptionClient(self._credentials)
-   240                                                   return self._subscription_client
-
-Total time: 0.025636 s
-File: /Users/alex/Desktop/work/cb-profiled/cloudbridge/cloudbridge/cloud/providers/azure/azure_client.py
-Function: resource_client at line 242
-
-Line #      Hits         Time  Per Hit   % Time  Line Contents
-==============================================================
-   242                                               @property
-   243                                               @profile
-   244                                               def resource_client(self):
-   245         3          8.0      2.7      0.0          if not self._resource_client:
-   246                                                       self._resource_client = \
-   247         2          2.0      1.0      0.0                  ResourceManagementClient(self._credentials,
-   248         2      25619.0  12809.5     99.9                                           self.subscription_id)
-   249         3          7.0      2.3      0.0          return self._resource_client
-
-Total time: 0 s
-File: /Users/alex/Desktop/work/cb-profiled/cloudbridge/cloudbridge/cloud/providers/azure/azure_client.py
-Function: compute_client at line 251
-
-Line #      Hits         Time  Per Hit   % Time  Line Contents
-==============================================================
-   251                                               @property
-   252                                               @profile
-   253                                               def compute_client(self):
-   254                                                   if not self._compute_client:
-   255                                                       self._compute_client = \
-   256                                                           ComputeManagementClient(self._credentials,
-   257                                                                                   self.subscription_id)
-   258                                                   return self._compute_client
-
-Total time: 0 s
-File: /Users/alex/Desktop/work/cb-profiled/cloudbridge/cloudbridge/cloud/providers/azure/azure_client.py
-Function: network_management_client at line 260
-
-Line #      Hits         Time  Per Hit   % Time  Line Contents
-==============================================================
-   260                                               @property
-   261                                               @profile
-   262                                               def network_management_client(self):
-   263                                                   if not self._network_management_client:
-   264                                                       self._network_management_client = NetworkManagementClient(
-   265                                                           self._credentials, self.subscription_id)
-   266                                                   return self._network_management_client
-
-Total time: 0 s
-File: /Users/alex/Desktop/work/cb-profiled/cloudbridge/cloudbridge/cloud/providers/azure/azure_client.py
-Function: blob_service at line 268
-
-Line #      Hits         Time  Per Hit   % Time  Line Contents
-==============================================================
-   268                                               @property
-   269                                               @profile
-   270                                               def blob_service(self):
-   271                                                   self._get_or_create_storage_account()
-   272                                                   if not self._block_blob_service:
-   273                                                       if self._access_token:
-   274                                                           token_credential = TokenCredential(self._access_token)
-   275                                                           self._block_blob_service = BlockBlobService(
-   276                                                               account_name=self.storage_account,
-   277                                                               token_credential=token_credential)
-   278                                                       else:
-   279                                                           self._block_blob_service = BlockBlobService(
-   280                                                               account_name=self.storage_account,
-   281                                                               account_key=self.access_key_result.keys[0].value)
-   282                                                   return self._block_blob_service
-
-Total time: 1.07638 s
-File: /Users/alex/Desktop/work/cb-profiled/cloudbridge/cloudbridge/cloud/providers/azure/azure_client.py
-Function: table_service at line 284
-
-Line #      Hits         Time  Per Hit   % Time  Line Contents
-==============================================================
-   284                                               @property
-   285                                               @profile
-   286                                               def table_service(self):
-   287         1     538972.0 538972.0     50.1          self._get_or_create_storage_account()
-   288         1          1.0      1.0      0.0          if not self._table_service:
-   289         1          4.0      4.0      0.0              self._table_service = TableService(
-   290         1          7.0      7.0      0.0                  self.storage_account,
-   291         1     374051.0 374051.0     34.8                  self.access_key_result.keys[0].value)
-   292         1          1.0      1.0      0.0          if not self._table_service. \
-   293         1     163345.0 163345.0     15.2                  exists(table_name=self.public_key_storage_table_name):
-   294                                                       self._table_service.create_table(
-   295                                                           self.public_key_storage_table_name)
-   296         1          2.0      2.0      0.0          return self._table_service
-
-Total time: 0.706347 s
-File: /Users/alex/Desktop/work/cb-profiled/cloudbridge/cloudbridge/cloud/providers/azure/azure_client.py
-Function: get_resource_group at line 298
-
-Line #      Hits         Time  Per Hit   % Time  Line Contents
-==============================================================
-   298                                               @profile
-   299                                               def get_resource_group(self, name):
-   300         3     706347.0 235449.0    100.0          return self.resource_client.resource_groups.get(name)
-
-Total time: 0 s
-File: /Users/alex/Desktop/work/cb-profiled/cloudbridge/cloudbridge/cloud/providers/azure/azure_client.py
-Function: create_resource_group at line 302
-
-Line #      Hits         Time  Per Hit   % Time  Line Contents
-==============================================================
-   302                                               @profile
-   303                                               def create_resource_group(self, name, parameters):
-   304                                                   return self.resource_client.resource_groups. \
-   305                                                       create_or_update(name, parameters)
-
-Total time: 0.691958 s
-File: /Users/alex/Desktop/work/cb-profiled/cloudbridge/cloudbridge/cloud/providers/azure/azure_client.py
-Function: get_storage_account at line 307
-
-Line #      Hits         Time  Per Hit   % Time  Line Contents
-==============================================================
-   307                                               @profile
-   308                                               def get_storage_account(self, storage_account):
-   309         2     261869.0 130934.5     37.8          return self.storage_client.storage_accounts. \
-   310         2     430089.0 215044.5     62.2              get_properties(self.resource_group, storage_account)
-
-Total time: 0 s
-File: /Users/alex/Desktop/work/cb-profiled/cloudbridge/cloudbridge/cloud/providers/azure/azure_client.py
-Function: create_storage_account at line 312
-
-Line #      Hits         Time  Per Hit   % Time  Line Contents
-==============================================================
-   312                                               @profile
-   313                                               def create_storage_account(self, name, params):
-   314                                                   return self.storage_client.storage_accounts. \
-   315                                                       create(self.resource_group, name.lower(), params).result()
-
-Total time: 0.538814 s
-File: /Users/alex/Desktop/work/cb-profiled/cloudbridge/cloudbridge/cloud/providers/azure/azure_client.py
-Function: _get_or_create_storage_account at line 319
-
-Line #      Hits         Time  Per Hit   % Time  Line Contents
-==============================================================
-   319                                               @tenacity.retry(stop=tenacity.stop_after_attempt(2),
-   320                                                               retry=tenacity.retry_if_exception_type(CloudError),
-   321                                                               reraise=True)
-   322                                               @profile
-   323                                               def _get_or_create_storage_account(self):
-   324         1          1.0      1.0      0.0          if self._storage_account:
-   325                                                       return self._storage_account
-   326                                                   else:
-   327         1          1.0      1.0      0.0              try:
-   328                                                           self._storage_account = \
-   329         1     538812.0 538812.0    100.0                      self.get_storage_account(self.storage_account)
-   330                                                       except CloudError as cloud_error:
-   331                                                           if cloud_error.error.error == "ResourceNotFound":
-   332                                                               storage_account_params = {
-   333                                                                   'sku': {
-   334                                                                       'name': 'Standard_LRS'
-   335                                                                   },
-   336                                                                   'kind': 'storage',
-   337                                                                   'location': self.region_name,
-   338                                                               }
-   339                                                               try:
-   340                                                                   self._storage_account = \
-   341                                                                       self.create_storage_account(self.storage_account,
-   342                                                                                                   storage_account_params)
-   343                                                               except CloudError as cloud_error2:  # pragma: no cover
-   344                                                                   if cloud_error2.error.error == "AuthorizationFailed":
-   345                                                                       mess = 'The following error was returned by ' \
-   346                                                                              'Azure:\n%s\n\nThis is likely because the' \
-   347                                                                              ' Role associated with the provided ' \
-   348                                                                              'credentials does not allow for Storage ' \
-   349                                                                              'Account creation.\nA Storage Account is ' \
-   350                                                                              'necessary in order to perform the ' \
-   351                                                                              'desired operation. You must either ' \
-   352                                                                              'provide an existing Storage Account name' \
-   353                                                                              ' as part of the configuration, or ' \
-   354                                                                              'elevate the associated Role.\nFor more ' \
-   355                                                                              'information on roles, see: https://docs.' \
-   356                                                                              'microsoft.com/en-us/azure/role-based-' \
-   357                                                                              'access-control/overview\n' % cloud_error2
-   358                                                                       raise ProviderConnectionException(mess)
-   359                                           
-   360                                                                   elif cloud_error2.error.error == \
-   361                                                                           "StorageAccountAlreadyTaken":
-   362                                                                       mess = 'The following error was ' \
-   363                                                                              'returned by Azure:\n%s\n\n' \
-   364                                                                              'Note that Storage Account names must be ' \
-   365                                                                              'unique across Azure (not just in your ' \
-   366                                                                              'subscription).\nFor more information ' \
-   367                                                                              'see https://docs.microsoft.com/en-us/' \
-   368                                                                              'azure/azure-resource-manager/resource-' \
-   369                                                                              'manager-storage-account-name-errors\n' \
-   370                                                                              % cloud_error2
-   371                                                                       raise InvalidLabelException(mess)
-   372                                                                   else:
-   373                                                                       raise cloud_error2
-   374                                                           else:
-   375                                                               raise cloud_error
-
-Total time: 0 s
-File: /Users/alex/Desktop/work/cb-profiled/cloudbridge/cloudbridge/cloud/providers/azure/azure_client.py
-Function: list_locations at line 377
-
-Line #      Hits         Time  Per Hit   % Time  Line Contents
-==============================================================
-   377                                               @profile
-   378                                               def list_locations(self):
-   379                                                   return self.subscription_client.subscriptions. \
-   380                                                       list_locations(self.subscription_id)
-
-Total time: 0 s
-File: /Users/alex/Desktop/work/cb-profiled/cloudbridge/cloudbridge/cloud/providers/azure/azure_client.py
-Function: list_vm_firewall at line 382
-
-Line #      Hits         Time  Per Hit   % Time  Line Contents
-==============================================================
-   382                                               @profile
-   383                                               def list_vm_firewall(self):
-   384                                                   return self.network_management_client.network_security_groups. \
-   385                                                       list(self.resource_group)
-
-Total time: 0 s
-File: /Users/alex/Desktop/work/cb-profiled/cloudbridge/cloudbridge/cloud/providers/azure/azure_client.py
-Function: create_vm_firewall at line 387
-
-Line #      Hits         Time  Per Hit   % Time  Line Contents
-==============================================================
-   387                                               @profile
-   388                                               def create_vm_firewall(self, name, parameters):
-   389                                                   return self.network_management_client.network_security_groups. \
-   390                                                       create_or_update(self.resource_group, name,
-   391                                                                        parameters).result()
-
-Total time: 0 s
-File: /Users/alex/Desktop/work/cb-profiled/cloudbridge/cloudbridge/cloud/providers/azure/azure_client.py
-Function: update_vm_firewall_tags at line 393
-
-Line #      Hits         Time  Per Hit   % Time  Line Contents
-==============================================================
-   393                                               @profile
-   394                                               def update_vm_firewall_tags(self, fw_id, tags):
-   395                                                   url_params = azure_helpers.parse_url(VM_FIREWALL_RESOURCE_ID,
-   396                                                                                        fw_id)
-   397                                                   name = url_params.get(VM_FIREWALL_NAME)
-   398                                                   return self.network_management_client.network_security_groups. \
-   399                                                       create_or_update(self.resource_group, name,
-   400                                                                        {'tags': tags,
-   401                                                                         'location': self.region_name}).result()
-
-Total time: 0 s
-File: /Users/alex/Desktop/work/cb-profiled/cloudbridge/cloudbridge/cloud/providers/azure/azure_client.py
-Function: get_vm_firewall at line 403
-
-Line #      Hits         Time  Per Hit   % Time  Line Contents
-==============================================================
-   403                                               @profile
-   404                                               def get_vm_firewall(self, fw_id):
-   405                                                   url_params = azure_helpers.parse_url(VM_FIREWALL_RESOURCE_ID,
-   406                                                                                        fw_id)
-   407                                                   fw_name = url_params.get(VM_FIREWALL_NAME)
-   408                                                   return self.network_management_client.network_security_groups. \
-   409                                                       get(self.resource_group, fw_name)
-
-Total time: 0 s
-File: /Users/alex/Desktop/work/cb-profiled/cloudbridge/cloudbridge/cloud/providers/azure/azure_client.py
-Function: delete_vm_firewall at line 411
-
-Line #      Hits         Time  Per Hit   % Time  Line Contents
-==============================================================
-   411                                               @profile
-   412                                               def delete_vm_firewall(self, fw_id):
-   413                                                   url_params = azure_helpers.parse_url(VM_FIREWALL_RESOURCE_ID,
-   414                                                                                        fw_id)
-   415                                                   name = url_params.get(VM_FIREWALL_NAME)
-   416                                                   self.network_management_client \
-   417                                                       .network_security_groups.delete(self.resource_group, name).wait()
-
-Total time: 0 s
-File: /Users/alex/Desktop/work/cb-profiled/cloudbridge/cloudbridge/cloud/providers/azure/azure_client.py
-Function: create_vm_firewall_rule at line 419
-
-Line #      Hits         Time  Per Hit   % Time  Line Contents
-==============================================================
-   419                                               @profile
-   420                                               def create_vm_firewall_rule(self, fw_id,
-   421                                                                           rule_name, parameters):
-   422                                                   url_params = azure_helpers.parse_url(VM_FIREWALL_RESOURCE_ID,
-   423                                                                                        fw_id)
-   424                                                   vm_firewall_name = url_params.get(VM_FIREWALL_NAME)
-   425                                                   return self.network_management_client.security_rules. \
-   426                                                       create_or_update(self.resource_group, vm_firewall_name,
-   427                                                                        rule_name, parameters).result()
-
-Total time: 0 s
-File: /Users/alex/Desktop/work/cb-profiled/cloudbridge/cloudbridge/cloud/providers/azure/azure_client.py
-Function: delete_vm_firewall_rule at line 429
-
-Line #      Hits         Time  Per Hit   % Time  Line Contents
-==============================================================
-   429                                               @profile
-   430                                               def delete_vm_firewall_rule(self, fw_rule_id, vm_firewall):
-   431                                                   url_params = azure_helpers.parse_url(VM_FIREWALL_RULE_RESOURCE_ID,
-   432                                                                                        fw_rule_id)
-   433                                                   name = url_params.get(VM_FIREWALL_RULE_NAME)
-   434                                                   return self.network_management_client.security_rules. \
-   435                                                       delete(self.resource_group, vm_firewall, name).result()
-
-Total time: 0 s
-File: /Users/alex/Desktop/work/cb-profiled/cloudbridge/cloudbridge/cloud/providers/azure/azure_client.py
-Function: list_containers at line 437
-
-Line #      Hits         Time  Per Hit   % Time  Line Contents
-==============================================================
-   437                                               @profile
-   438                                               def list_containers(self, prefix=None, limit=None, marker=None):
-   439                                                   results = self.blob_service.list_containers(prefix=prefix,
-   440                                                                                               num_results=limit,
-   441                                                                                               marker=marker)
-   442                                                   return (results.items, results.next_marker)
-
-Total time: 0 s
-File: /Users/alex/Desktop/work/cb-profiled/cloudbridge/cloudbridge/cloud/providers/azure/azure_client.py
-Function: create_container at line 444
-
-Line #      Hits         Time  Per Hit   % Time  Line Contents
-==============================================================
-   444                                               @profile
-   445                                               def create_container(self, container_name):
-   446                                                   try:
-   447                                                       self.blob_service.create_container(container_name,
-   448                                                                                          fail_on_exist=True)
-   449                                                   except AzureConflictHttpError as cloud_error:
-   450                                                       if cloud_error.error_code == "ContainerAlreadyExists":
-   451                                                           msg = "The given Bucket name '%s' already exists. Please " \
-   452                                                                 "use the `get` or `find` method to get a reference to " \
-   453                                                                 "an existing Bucket, or specify a new Bucket name to " \
-   454                                                                 "create.\nNote that in Azure, Buckets are contained " \
-   455                                                                 "in Storage Accounts." % container_name
-   456                                                           raise DuplicateResourceException(msg)
-   457                                           
-   458                                                   return self.blob_service.get_container_properties(container_name)
-
-Total time: 0 s
-File: /Users/alex/Desktop/work/cb-profiled/cloudbridge/cloudbridge/cloud/providers/azure/azure_client.py
-Function: get_container at line 460
-
-Line #      Hits         Time  Per Hit   % Time  Line Contents
-==============================================================
-   460                                               @profile
-   461                                               def get_container(self, container_name):
-   462                                                   return self.blob_service.get_container_properties(container_name)
-
-Total time: 0 s
-File: /Users/alex/Desktop/work/cb-profiled/cloudbridge/cloudbridge/cloud/providers/azure/azure_client.py
-Function: delete_container at line 464
-
-Line #      Hits         Time  Per Hit   % Time  Line Contents
-==============================================================
-   464                                               @profile
-   465                                               def delete_container(self, container_name):
-   466                                                   self.blob_service.delete_container(container_name)
-
-Total time: 0 s
-File: /Users/alex/Desktop/work/cb-profiled/cloudbridge/cloudbridge/cloud/providers/azure/azure_client.py
-Function: list_blobs at line 468
-
-Line #      Hits         Time  Per Hit   % Time  Line Contents
-==============================================================
-   468                                               @profile
-   469                                               def list_blobs(self, container_name, prefix=None):
-   470                                                   return self.blob_service.list_blobs(container_name, prefix=prefix)
-
-Total time: 0 s
-File: /Users/alex/Desktop/work/cb-profiled/cloudbridge/cloudbridge/cloud/providers/azure/azure_client.py
-Function: get_blob at line 472
-
-Line #      Hits         Time  Per Hit   % Time  Line Contents
-==============================================================
-   472                                               @profile
-   473                                               def get_blob(self, container_name, blob_name):
-   474                                                   return self.blob_service.get_blob_properties(container_name, blob_name)
-
-Total time: 0 s
-File: /Users/alex/Desktop/work/cb-profiled/cloudbridge/cloudbridge/cloud/providers/azure/azure_client.py
-Function: create_blob_from_text at line 476
-
-Line #      Hits         Time  Per Hit   % Time  Line Contents
-==============================================================
-   476                                               @profile
-   477                                               def create_blob_from_text(self, container_name, blob_name, text):
-   478                                                   self.blob_service.create_blob_from_text(container_name,
-   479                                                                                           blob_name, text)
-
-Total time: 0 s
-File: /Users/alex/Desktop/work/cb-profiled/cloudbridge/cloudbridge/cloud/providers/azure/azure_client.py
-Function: create_blob_from_file at line 481
-
-Line #      Hits         Time  Per Hit   % Time  Line Contents
-==============================================================
-   481                                               @profile
-   482                                               def create_blob_from_file(self, container_name, blob_name, file_path):
-   483                                                   self.blob_service.create_blob_from_path(container_name,
-   484                                                                                           blob_name, file_path)
-
-Total time: 0 s
-File: /Users/alex/Desktop/work/cb-profiled/cloudbridge/cloudbridge/cloud/providers/azure/azure_client.py
-Function: delete_blob at line 486
-
-Line #      Hits         Time  Per Hit   % Time  Line Contents
-==============================================================
-   486                                               @profile
-   487                                               def delete_blob(self, container_name, blob_name):
-   488                                                   self.blob_service.delete_blob(container_name, blob_name)
-
-Total time: 0 s
-File: /Users/alex/Desktop/work/cb-profiled/cloudbridge/cloudbridge/cloud/providers/azure/azure_client.py
-Function: get_blob_url at line 490
-
-Line #      Hits         Time  Per Hit   % Time  Line Contents
-==============================================================
-   490                                               @profile
-   491                                               def get_blob_url(self, container_name, blob_name, expiry_time):
-   492                                                   expiry_date = datetime.datetime.utcnow() + datetime.timedelta(
-   493                                                       seconds=expiry_time)
-   494                                                   sas = self.blob_service.generate_blob_shared_access_signature(
-   495                                                       container_name, blob_name, permission=BlobPermissions.READ,
-   496                                                       expiry=expiry_date)
-   497                                                   return self.blob_service.make_blob_url(container_name, blob_name,
-   498                                                                                          sas_token=sas)
-
-Total time: 0 s
-File: /Users/alex/Desktop/work/cb-profiled/cloudbridge/cloudbridge/cloud/providers/azure/azure_client.py
-Function: get_blob_content at line 500
-
-Line #      Hits         Time  Per Hit   % Time  Line Contents
-==============================================================
-   500                                               @profile
-   501                                               def get_blob_content(self, container_name, blob_name):
-   502                                                   out_stream = BytesIO()
-   503                                                   self.blob_service.get_blob_to_stream(container_name,
-   504                                                                                        blob_name, out_stream)
-   505                                                   return out_stream
-
-Total time: 0 s
-File: /Users/alex/Desktop/work/cb-profiled/cloudbridge/cloudbridge/cloud/providers/azure/azure_client.py
-Function: create_empty_disk at line 507
-
-Line #      Hits         Time  Per Hit   % Time  Line Contents
-==============================================================
-   507                                               @profile
-   508                                               def create_empty_disk(self, disk_name, params):
-   509                                                   return self.compute_client.disks.create_or_update(
-   510                                                       self.resource_group,
-   511                                                       disk_name,
-   512                                                       params
-   513                                                   ).result()
-
-Total time: 0 s
-File: /Users/alex/Desktop/work/cb-profiled/cloudbridge/cloudbridge/cloud/providers/azure/azure_client.py
-Function: create_snapshot_disk at line 515
-
-Line #      Hits         Time  Per Hit   % Time  Line Contents
-==============================================================
-   515                                               @profile
-   516                                               def create_snapshot_disk(self, disk_name, params):
-   517                                                   return self.compute_client.disks.create_or_update(
-   518                                                       self.resource_group,
-   519                                                       disk_name,
-   520                                                       params
-   521                                                   ).result()
-
-Total time: 0 s
-File: /Users/alex/Desktop/work/cb-profiled/cloudbridge/cloudbridge/cloud/providers/azure/azure_client.py
-Function: get_disk at line 523
-
-Line #      Hits         Time  Per Hit   % Time  Line Contents
-==============================================================
-   523                                               @profile
-   524                                               def get_disk(self, disk_id):
-   525                                                   url_params = azure_helpers.parse_url(VOLUME_RESOURCE_ID,
-   526                                                                                        disk_id)
-   527                                                   disk_name = url_params.get(VOLUME_NAME)
-   528                                                   return self.compute_client.disks.get(self.resource_group, disk_name)
-
-Total time: 0 s
-File: /Users/alex/Desktop/work/cb-profiled/cloudbridge/cloudbridge/cloud/providers/azure/azure_client.py
-Function: list_disks at line 530
-
-Line #      Hits         Time  Per Hit   % Time  Line Contents
-==============================================================
-   530                                               @profile
-   531                                               def list_disks(self):
-   532                                                   return self.compute_client.disks. \
-   533                                                       list_by_resource_group(self.resource_group)
-
-Total time: 0 s
-File: /Users/alex/Desktop/work/cb-profiled/cloudbridge/cloudbridge/cloud/providers/azure/azure_client.py
-Function: delete_disk at line 535
-
-Line #      Hits         Time  Per Hit   % Time  Line Contents
-==============================================================
-   535                                               @profile
-   536                                               def delete_disk(self, disk_id):
-   537                                                   url_params = azure_helpers.parse_url(VOLUME_RESOURCE_ID,
-   538                                                                                        disk_id)
-   539                                                   disk_name = url_params.get(VOLUME_NAME)
-   540                                                   self.compute_client.disks.delete(self.resource_group, disk_name).wait()
-
-Total time: 0 s
-File: /Users/alex/Desktop/work/cb-profiled/cloudbridge/cloudbridge/cloud/providers/azure/azure_client.py
-Function: update_disk_tags at line 542
-
-Line #      Hits         Time  Per Hit   % Time  Line Contents
-==============================================================
-   542                                               @profile
-   543                                               def update_disk_tags(self, disk_id, tags):
-   544                                                   url_params = azure_helpers.parse_url(VOLUME_RESOURCE_ID,
-   545                                                                                        disk_id)
-   546                                                   disk_name = url_params.get(VOLUME_NAME)
-   547                                                   return self.compute_client.disks.update(
-   548                                                       self.resource_group,
-   549                                                       disk_name,
-   550                                                       {'tags': tags},
-   551                                                       raw=True
-   552                                                   )
-
-Total time: 0 s
-File: /Users/alex/Desktop/work/cb-profiled/cloudbridge/cloudbridge/cloud/providers/azure/azure_client.py
-Function: list_snapshots at line 554
-
-Line #      Hits         Time  Per Hit   % Time  Line Contents
-==============================================================
-   554                                               @profile
-   555                                               def list_snapshots(self):
-   556                                                   return self.compute_client.snapshots. \
-   557                                                       list_by_resource_group(self.resource_group)
-
-Total time: 0 s
-File: /Users/alex/Desktop/work/cb-profiled/cloudbridge/cloudbridge/cloud/providers/azure/azure_client.py
-Function: get_snapshot at line 559
-
-Line #      Hits         Time  Per Hit   % Time  Line Contents
-==============================================================
-   559                                               @profile
-   560                                               def get_snapshot(self, snapshot_id):
-   561                                                   url_params = azure_helpers.parse_url(SNAPSHOT_RESOURCE_ID,
-   562                                                                                        snapshot_id)
-   563                                                   snapshot_name = url_params.get(SNAPSHOT_NAME)
-   564                                                   return self.compute_client.snapshots.get(self.resource_group,
-   565                                                                                            snapshot_name)
-
-Total time: 0 s
-File: /Users/alex/Desktop/work/cb-profiled/cloudbridge/cloudbridge/cloud/providers/azure/azure_client.py
-Function: create_snapshot at line 567
-
-Line #      Hits         Time  Per Hit   % Time  Line Contents
-==============================================================
-   567                                               @profile
-   568                                               def create_snapshot(self, snapshot_name, params):
-   569                                                   return self.compute_client.snapshots.create_or_update(
-   570                                                       self.resource_group,
-   571                                                       snapshot_name,
-   572                                                       params
-   573                                                   ).result()
-
-Total time: 0 s
-File: /Users/alex/Desktop/work/cb-profiled/cloudbridge/cloudbridge/cloud/providers/azure/azure_client.py
-Function: delete_snapshot at line 575
-
-Line #      Hits         Time  Per Hit   % Time  Line Contents
-==============================================================
-   575                                               @profile
-   576                                               def delete_snapshot(self, snapshot_id):
-   577                                                   url_params = azure_helpers.parse_url(SNAPSHOT_RESOURCE_ID,
-   578                                                                                        snapshot_id)
-   579                                                   snapshot_name = url_params.get(SNAPSHOT_NAME)
-   580                                                   self.compute_client.snapshots.delete(self.resource_group,
-   581                                                                                        snapshot_name).wait()
-
-Total time: 0 s
-File: /Users/alex/Desktop/work/cb-profiled/cloudbridge/cloudbridge/cloud/providers/azure/azure_client.py
-Function: update_snapshot_tags at line 583
-
-Line #      Hits         Time  Per Hit   % Time  Line Contents
-==============================================================
-   583                                               @profile
-   584                                               def update_snapshot_tags(self, snapshot_id, tags):
-   585                                                   url_params = azure_helpers.parse_url(SNAPSHOT_RESOURCE_ID,
-   586                                                                                        snapshot_id)
-   587                                                   snapshot_name = url_params.get(SNAPSHOT_NAME)
-   588                                                   return self.compute_client.snapshots.update(
-   589                                                       self.resource_group,
-   590                                                       snapshot_name,
-   591                                                       {'tags': tags},
-   592                                                       raw=True
-   593                                                   )
-
-Total time: 0 s
-File: /Users/alex/Desktop/work/cb-profiled/cloudbridge/cloudbridge/cloud/providers/azure/azure_client.py
-Function: is_gallery_image at line 595
-
-Line #      Hits         Time  Per Hit   % Time  Line Contents
-==============================================================
-   595                                               @profile
-   596                                               def is_gallery_image(self, image_id):
-   597                                                   url_params = azure_helpers.parse_url(IMAGE_RESOURCE_ID,
-   598                                                                                        image_id)
-   599                                                   # If it is a gallery image, it will always have an offer
-   600                                                   return 'offer' in url_params
-
-Total time: 0 s
-File: /Users/alex/Desktop/work/cb-profiled/cloudbridge/cloudbridge/cloud/providers/azure/azure_client.py
-Function: create_image at line 602
-
-Line #      Hits         Time  Per Hit   % Time  Line Contents
-==============================================================
-   602                                               @profile
-   603                                               def create_image(self, name, params):
-   604                                                   return self.compute_client.images. \
-   605                                                       create_or_update(self.resource_group, name,
-   606                                                                        params).result()
-
-Total time: 0 s
-File: /Users/alex/Desktop/work/cb-profiled/cloudbridge/cloudbridge/cloud/providers/azure/azure_client.py
-Function: delete_image at line 608
-
-Line #      Hits         Time  Per Hit   % Time  Line Contents
-==============================================================
-   608                                               @profile
-   609                                               def delete_image(self, image_id):
-   610                                                   url_params = azure_helpers.parse_url(IMAGE_RESOURCE_ID,
-   611                                                                                        image_id)
-   612                                                   if not self.is_gallery_image(image_id):
-   613                                                       name = url_params.get(IMAGE_NAME)
-   614                                                       self.compute_client.images.delete(self.resource_group, name).wait()
-
-Total time: 0 s
-File: /Users/alex/Desktop/work/cb-profiled/cloudbridge/cloudbridge/cloud/providers/azure/azure_client.py
-Function: list_images at line 616
-
-Line #      Hits         Time  Per Hit   % Time  Line Contents
-==============================================================
-   616                                               @profile
-   617                                               def list_images(self):
-   618                                                   azure_images = list(self.compute_client.images.
-   619                                                                       list_by_resource_group(self.resource_group))
-   620                                                   return azure_images
-
-Total time: 0 s
-File: /Users/alex/Desktop/work/cb-profiled/cloudbridge/cloudbridge/cloud/providers/azure/azure_client.py
-Function: list_gallery_refs at line 622
-
-Line #      Hits         Time  Per Hit   % Time  Line Contents
-==============================================================
-   622                                               @profile
-   623                                               def list_gallery_refs(self):
-   624                                                   return gallery_image_references
-
-Total time: 0 s
-File: /Users/alex/Desktop/work/cb-profiled/cloudbridge/cloudbridge/cloud/providers/azure/azure_client.py
-Function: get_image at line 626
-
-Line #      Hits         Time  Per Hit   % Time  Line Contents
-==============================================================
-   626                                               @profile
-   627                                               def get_image(self, image_id):
-   628                                                   url_params = azure_helpers.parse_url(IMAGE_RESOURCE_ID,
-   629                                                                                        image_id)
-   630                                                   if self.is_gallery_image(image_id):
-   631                                                       return GalleryImageReference(publisher=url_params['publisher'],
-   632                                                                                    offer=url_params['offer'],
-   633                                                                                    sku=url_params['sku'],
-   634                                                                                    version=url_params['version'])
-   635                                                   else:
-   636                                                       name = url_params.get(IMAGE_NAME)
-   637                                                       return self.compute_client.images.get(self.resource_group, name)
-
-Total time: 0 s
-File: /Users/alex/Desktop/work/cb-profiled/cloudbridge/cloudbridge/cloud/providers/azure/azure_client.py
-Function: update_image_tags at line 639
-
-Line #      Hits         Time  Per Hit   % Time  Line Contents
-==============================================================
-   639                                               @profile
-   640                                               def update_image_tags(self, image_id, tags):
-   641                                                   url_params = azure_helpers.parse_url(IMAGE_RESOURCE_ID,
-   642                                                                                        image_id)
-   643                                                   if self.is_gallery_image(image_id):
-   644                                                       return True
-   645                                                   else:
-   646                                                       name = url_params.get(IMAGE_NAME)
-   647                                                       return self.compute_client.images. \
-   648                                                           create_or_update(self.resource_group, name,
-   649                                                                            {
-   650                                                                                'tags': tags,
-   651                                                                                'location': self.region_name
-   652                                                                            }).result()
-
-Total time: 0 s
-File: /Users/alex/Desktop/work/cb-profiled/cloudbridge/cloudbridge/cloud/providers/azure/azure_client.py
-Function: list_vm_types at line 654
-
-Line #      Hits         Time  Per Hit   % Time  Line Contents
-==============================================================
-   654                                               @profile
-   655                                               def list_vm_types(self):
-   656                                                   return self.compute_client.virtual_machine_sizes. \
-   657                                                       list(self.region_name)
-
-Total time: 0 s
-File: /Users/alex/Desktop/work/cb-profiled/cloudbridge/cloudbridge/cloud/providers/azure/azure_client.py
-Function: list_networks at line 659
-
-Line #      Hits         Time  Per Hit   % Time  Line Contents
-==============================================================
-   659                                               @profile
-   660                                               def list_networks(self):
-   661                                                   return self.network_management_client.virtual_networks.list(
-   662                                                       self.resource_group)
-
-Total time: 0 s
-File: /Users/alex/Desktop/work/cb-profiled/cloudbridge/cloudbridge/cloud/providers/azure/azure_client.py
-Function: get_network at line 664
-
-Line #      Hits         Time  Per Hit   % Time  Line Contents
-==============================================================
-   664                                               @profile
-   665                                               def get_network(self, network_id):
-   666                                                   url_params = azure_helpers.parse_url(NETWORK_RESOURCE_ID,
-   667                                                                                        network_id)
-   668                                                   network_name = url_params.get(NETWORK_NAME)
-   669                                                   return self.network_management_client.virtual_networks.get(
-   670                                                       self.resource_group, network_name)
-
-Total time: 0 s
-File: /Users/alex/Desktop/work/cb-profiled/cloudbridge/cloudbridge/cloud/providers/azure/azure_client.py
-Function: create_network at line 672
-
-Line #      Hits         Time  Per Hit   % Time  Line Contents
-==============================================================
-   672                                               @profile
-   673                                               def create_network(self, name, params):
-   674                                                   return self.network_management_client.virtual_networks. \
-   675                                                       create_or_update(self.resource_group,
-   676                                                                        name,
-   677                                                                        parameters=params).result()
-
-Total time: 0 s
-File: /Users/alex/Desktop/work/cb-profiled/cloudbridge/cloudbridge/cloud/providers/azure/azure_client.py
-Function: delete_network at line 679
-
-Line #      Hits         Time  Per Hit   % Time  Line Contents
-==============================================================
-   679                                               @profile
-   680                                               def delete_network(self, network_id):
-   681                                                   url_params = azure_helpers.parse_url(NETWORK_RESOURCE_ID, network_id)
-   682                                                   network_name = url_params.get(NETWORK_NAME)
-   683                                                   return self.network_management_client.virtual_networks. \
-   684                                                       delete(self.resource_group, network_name).wait()
-
-Total time: 0 s
-File: /Users/alex/Desktop/work/cb-profiled/cloudbridge/cloudbridge/cloud/providers/azure/azure_client.py
-Function: update_network_tags at line 686
-
-Line #      Hits         Time  Per Hit   % Time  Line Contents
-==============================================================
-   686                                               @profile
-   687                                               def update_network_tags(self, network_id, tags):
-   688                                                   url_params = azure_helpers.parse_url(NETWORK_RESOURCE_ID, network_id)
-   689                                                   network_name = url_params.get(NETWORK_NAME)
-   690                                                   return self.network_management_client.virtual_networks. \
-   691                                                       create_or_update(self.resource_group,
-   692                                                                        network_name, tags).result()
-
-Total time: 0 s
-File: /Users/alex/Desktop/work/cb-profiled/cloudbridge/cloudbridge/cloud/providers/azure/azure_client.py
-Function: get_network_id_for_subnet at line 694
-
-Line #      Hits         Time  Per Hit   % Time  Line Contents
-==============================================================
-   694                                               @profile
-   695                                               def get_network_id_for_subnet(self, subnet_id):
-   696                                                   url_params = azure_helpers.parse_url(SUBNET_RESOURCE_ID, subnet_id)
-   697                                                   network_id = NETWORK_RESOURCE_ID[0]
-   698                                                   for key, val in url_params.items():
-   699                                                       network_id = network_id.replace("{" + key + "}", val)
-   700                                                   return network_id
-
-Total time: 0 s
-File: /Users/alex/Desktop/work/cb-profiled/cloudbridge/cloudbridge/cloud/providers/azure/azure_client.py
-Function: list_subnets at line 702
-
-Line #      Hits         Time  Per Hit   % Time  Line Contents
-==============================================================
-   702                                               @profile
-   703                                               def list_subnets(self, network_id):
-   704                                                   url_params = azure_helpers.parse_url(NETWORK_RESOURCE_ID, network_id)
-   705                                                   network_name = url_params.get(NETWORK_NAME)
-   706                                                   return self.network_management_client.subnets. \
-   707                                                       list(self.resource_group, network_name)
-
-Total time: 0 s
-File: /Users/alex/Desktop/work/cb-profiled/cloudbridge/cloudbridge/cloud/providers/azure/azure_client.py
-Function: get_subnet at line 709
-
-Line #      Hits         Time  Per Hit   % Time  Line Contents
-==============================================================
-   709                                               @profile
-   710                                               def get_subnet(self, subnet_id):
-   711                                                   url_params = azure_helpers.parse_url(SUBNET_RESOURCE_ID,
-   712                                                                                        subnet_id)
-   713                                                   network_name = url_params.get(NETWORK_NAME)
-   714                                                   subnet_name = url_params.get(SUBNET_NAME)
-   715                                                   return self.network_management_client.subnets. \
-   716                                                       get(self.resource_group, network_name, subnet_name)
-
-Total time: 0 s
-File: /Users/alex/Desktop/work/cb-profiled/cloudbridge/cloudbridge/cloud/providers/azure/azure_client.py
-Function: create_subnet at line 718
-
-Line #      Hits         Time  Per Hit   % Time  Line Contents
-==============================================================
-   718                                               @profile
-   719                                               def create_subnet(self, network_id, subnet_name, params):
-   720                                                   url_params = azure_helpers.parse_url(NETWORK_RESOURCE_ID, network_id)
-   721                                                   network_name = url_params.get(NETWORK_NAME)
-   722                                                   result_create = self.network_management_client \
-   723                                                       .subnets.create_or_update(
-   724                                                           self.resource_group,
-   725                                                           network_name,
-   726                                                           subnet_name,
-   727                                                           params
-   728                                                       )
-   729                                                   subnet_info = result_create.result()
-   730                                           
-   731                                                   return subnet_info
-
-Total time: 0 s
-File: /Users/alex/Desktop/work/cb-profiled/cloudbridge/cloudbridge/cloud/providers/azure/azure_client.py
-Function: __if_subnet_in_use at line 733
-
-Line #      Hits         Time  Per Hit   % Time  Line Contents
-==============================================================
-   733                                               @profile
-   734                                               def __if_subnet_in_use(e):
-   735                                                   # return True if the CloudError exception is due to subnet being in use
-   736                                                   if isinstance(e, CloudError):
-   737                                                       if e.error.error == "InUseSubnetCannotBeDeleted":
-   738                                                           return True
-   739                                                   return False
-
-Total time: 0 s
-File: /Users/alex/Desktop/work/cb-profiled/cloudbridge/cloudbridge/cloud/providers/azure/azure_client.py
-Function: delete_subnet at line 741
-
-Line #      Hits         Time  Per Hit   % Time  Line Contents
-==============================================================
-   741                                               @tenacity.retry(stop=tenacity.stop_after_attempt(5),
-   742                                                               retry=tenacity.retry_if_exception(__if_subnet_in_use),
-   743                                                               wait=tenacity.wait_fixed(5),
-   744                                                               reraise=True)
-   745                                               @profile
-   746                                               def delete_subnet(self, subnet_id):
-   747                                                   url_params = azure_helpers.parse_url(SUBNET_RESOURCE_ID,
-   748                                                                                        subnet_id)
-   749                                                   network_name = url_params.get(NETWORK_NAME)
-   750                                                   subnet_name = url_params.get(SUBNET_NAME)
-   751                                           
-   752                                                   try:
-   753                                                       result_delete = self.network_management_client \
-   754                                                           .subnets.delete(
-   755                                                               self.resource_group,
-   756                                                               network_name,
-   757                                                               subnet_name
-   758                                                           )
-   759                                                       result_delete.wait()
-   760                                                   except CloudError as cloud_error:
-   761                                                       log.exception(cloud_error.message)
-   762                                                       raise cloud_error
-
-Total time: 0 s
-File: /Users/alex/Desktop/work/cb-profiled/cloudbridge/cloudbridge/cloud/providers/azure/azure_client.py
-Function: create_floating_ip at line 764
-
-Line #      Hits         Time  Per Hit   % Time  Line Contents
-==============================================================
-   764                                               @profile
-   765                                               def create_floating_ip(self, public_ip_name, public_ip_parameters):
-   766                                                   return self.network_management_client.public_ip_addresses. \
-   767                                                       create_or_update(self.resource_group,
-   768                                                                        public_ip_name,
-   769                                                                        public_ip_parameters).result()
-
-Total time: 0 s
-File: /Users/alex/Desktop/work/cb-profiled/cloudbridge/cloudbridge/cloud/providers/azure/azure_client.py
-Function: get_floating_ip at line 771
-
-Line #      Hits         Time  Per Hit   % Time  Line Contents
-==============================================================
-   771                                               @profile
-   772                                               def get_floating_ip(self, public_ip_id):
-   773                                                   url_params = azure_helpers.parse_url(PUBLIC_IP_RESOURCE_ID,
-   774                                                                                        public_ip_id)
-   775                                                   public_ip_name = url_params.get(PUBLIC_IP_NAME)
-   776                                                   return self.network_management_client. \
-   777                                                       public_ip_addresses.get(self.resource_group, public_ip_name)
-
-Total time: 0 s
-File: /Users/alex/Desktop/work/cb-profiled/cloudbridge/cloudbridge/cloud/providers/azure/azure_client.py
-Function: delete_floating_ip at line 779
-
-Line #      Hits         Time  Per Hit   % Time  Line Contents
-==============================================================
-   779                                               @profile
-   780                                               def delete_floating_ip(self, public_ip_id):
-   781                                                   url_params = azure_helpers.parse_url(PUBLIC_IP_RESOURCE_ID,
-   782                                                                                        public_ip_id)
-   783                                                   public_ip_name = url_params.get(PUBLIC_IP_NAME)
-   784                                                   self.network_management_client. \
-   785                                                       public_ip_addresses.delete(self.resource_group,
-   786                                                                                  public_ip_name).wait()
-
-Total time: 0 s
-File: /Users/alex/Desktop/work/cb-profiled/cloudbridge/cloudbridge/cloud/providers/azure/azure_client.py
-Function: update_fip_tags at line 788
-
-Line #      Hits         Time  Per Hit   % Time  Line Contents
-==============================================================
-   788                                               @profile
-   789                                               def update_fip_tags(self, fip_id, tags):
-   790                                                   url_params = azure_helpers.parse_url(PUBLIC_IP_RESOURCE_ID,
-   791                                                                                        fip_id)
-   792                                                   fip_name = url_params.get(PUBLIC_IP_NAME)
-   793                                                   self.network_management_client.public_ip_addresses. \
-   794                                                       create_or_update(self.resource_group,
-   795                                                                        fip_name, tags).result()
-
-Total time: 0 s
-File: /Users/alex/Desktop/work/cb-profiled/cloudbridge/cloudbridge/cloud/providers/azure/azure_client.py
-Function: list_floating_ips at line 797
-
-Line #      Hits         Time  Per Hit   % Time  Line Contents
-==============================================================
-   797                                               @profile
-   798                                               def list_floating_ips(self):
-   799                                                   return self.network_management_client.public_ip_addresses.list(
-   800                                                       self.resource_group)
-
-Total time: 0 s
-File: /Users/alex/Desktop/work/cb-profiled/cloudbridge/cloudbridge/cloud/providers/azure/azure_client.py
-Function: list_vm at line 802
-
-Line #      Hits         Time  Per Hit   % Time  Line Contents
-==============================================================
-   802                                               @profile
-   803                                               def list_vm(self):
-   804                                                   return self.compute_client.virtual_machines.list(
-   805                                                       self.resource_group
-   806                                                   )
-
-Total time: 0 s
-File: /Users/alex/Desktop/work/cb-profiled/cloudbridge/cloudbridge/cloud/providers/azure/azure_client.py
-Function: restart_vm at line 808
-
-Line #      Hits         Time  Per Hit   % Time  Line Contents
-==============================================================
-   808                                               @profile
-   809                                               def restart_vm(self, vm_id):
-   810                                                   url_params = azure_helpers.parse_url(VM_RESOURCE_ID,
-   811                                                                                        vm_id)
-   812                                                   vm_name = url_params.get(VM_NAME)
-   813                                                   return self.compute_client.virtual_machines.restart(
-   814                                                       self.resource_group, vm_name).wait()
-
-Total time: 0 s
-File: /Users/alex/Desktop/work/cb-profiled/cloudbridge/cloudbridge/cloud/providers/azure/azure_client.py
-Function: delete_vm at line 816
-
-Line #      Hits         Time  Per Hit   % Time  Line Contents
-==============================================================
-   816                                               @profile
-   817                                               def delete_vm(self, vm_id):
-   818                                                   url_params = azure_helpers.parse_url(VM_RESOURCE_ID,
-   819                                                                                        vm_id)
-   820                                                   vm_name = url_params.get(VM_NAME)
-   821                                                   return self.compute_client.virtual_machines.delete(
-   822                                                       self.resource_group, vm_name).wait()
-
-Total time: 0 s
-File: /Users/alex/Desktop/work/cb-profiled/cloudbridge/cloudbridge/cloud/providers/azure/azure_client.py
-Function: get_vm at line 824
-
-Line #      Hits         Time  Per Hit   % Time  Line Contents
-==============================================================
-   824                                               @profile
-   825                                               def get_vm(self, vm_id):
-   826                                                   url_params = azure_helpers.parse_url(VM_RESOURCE_ID,
-   827                                                                                        vm_id)
-   828                                                   vm_name = url_params.get(VM_NAME)
-   829                                                   return self.compute_client.virtual_machines.get(
-   830                                                       self.resource_group,
-   831                                                       vm_name,
-   832                                                       expand='instanceView'
-   833                                                   )
-
-Total time: 0 s
-File: /Users/alex/Desktop/work/cb-profiled/cloudbridge/cloudbridge/cloud/providers/azure/azure_client.py
-Function: create_vm at line 835
-
-Line #      Hits         Time  Per Hit   % Time  Line Contents
-==============================================================
-   835                                               @profile
-   836                                               def create_vm(self, vm_name, params):
-   837                                                   return self.compute_client.virtual_machines. \
-   838                                                       create_or_update(self.resource_group,
-   839                                                                        vm_name, params).result()
-
-Total time: 0 s
-File: /Users/alex/Desktop/work/cb-profiled/cloudbridge/cloudbridge/cloud/providers/azure/azure_client.py
-Function: update_vm at line 841
-
-Line #      Hits         Time  Per Hit   % Time  Line Contents
-==============================================================
-   841                                               @profile
-   842                                               def update_vm(self, vm_id, params):
-   843                                                   url_params = azure_helpers.parse_url(VM_RESOURCE_ID,
-   844                                                                                        vm_id)
-   845                                                   vm_name = url_params.get(VM_NAME)
-   846                                                   return self.compute_client.virtual_machines. \
-   847                                                       create_or_update(self.resource_group,
-   848                                                                        vm_name, params, raw=True)
-
-Total time: 0 s
-File: /Users/alex/Desktop/work/cb-profiled/cloudbridge/cloudbridge/cloud/providers/azure/azure_client.py
-Function: deallocate_vm at line 850
-
-Line #      Hits         Time  Per Hit   % Time  Line Contents
-==============================================================
-   850                                               @profile
-   851                                               def deallocate_vm(self, vm_id):
-   852                                                   url_params = azure_helpers.parse_url(VM_RESOURCE_ID,
-   853                                                                                        vm_id)
-   854                                                   vm_name = url_params.get(VM_NAME)
-   855                                                   self.compute_client. \
-   856                                                       virtual_machines.deallocate(self.resource_group,
-   857                                                                                   vm_name).wait()
-
-Total time: 0 s
-File: /Users/alex/Desktop/work/cb-profiled/cloudbridge/cloudbridge/cloud/providers/azure/azure_client.py
-Function: generalize_vm at line 859
-
-Line #      Hits         Time  Per Hit   % Time  Line Contents
-==============================================================
-   859                                               @profile
-   860                                               def generalize_vm(self, vm_id):
-   861                                                   url_params = azure_helpers.parse_url(VM_RESOURCE_ID,
-   862                                                                                        vm_id)
-   863                                                   vm_name = url_params.get(VM_NAME)
-   864                                                   self.compute_client.virtual_machines. \
-   865                                                       generalize(self.resource_group, vm_name)
-
-Total time: 0 s
-File: /Users/alex/Desktop/work/cb-profiled/cloudbridge/cloudbridge/cloud/providers/azure/azure_client.py
-Function: start_vm at line 867
-
-Line #      Hits         Time  Per Hit   % Time  Line Contents
-==============================================================
-   867                                               @profile
-   868                                               def start_vm(self, vm_id):
-   869                                                   url_params = azure_helpers.parse_url(VM_RESOURCE_ID,
-   870                                                                                        vm_id)
-   871                                                   vm_name = url_params.get(VM_NAME)
-   872                                                   self.compute_client.virtual_machines. \
-   873                                                       start(self.resource_group,
-   874                                                             vm_name).wait()
-
-Total time: 0 s
-File: /Users/alex/Desktop/work/cb-profiled/cloudbridge/cloudbridge/cloud/providers/azure/azure_client.py
-Function: update_vm_tags at line 876
-
-Line #      Hits         Time  Per Hit   % Time  Line Contents
-==============================================================
-   876                                               @profile
-   877                                               def update_vm_tags(self, vm_id, tags):
-   878                                                   url_params = azure_helpers.parse_url(VM_RESOURCE_ID,
-   879                                                                                        vm_id)
-   880                                                   vm_name = url_params.get(VM_NAME)
-   881                                                   self.compute_client.virtual_machines. \
-   882                                                       create_or_update(self.resource_group,
-   883                                                                        vm_name, tags).result()
-
-Total time: 0 s
-File: /Users/alex/Desktop/work/cb-profiled/cloudbridge/cloudbridge/cloud/providers/azure/azure_client.py
-Function: delete_nic at line 885
-
-Line #      Hits         Time  Per Hit   % Time  Line Contents
-==============================================================
-   885                                               @profile
-   886                                               def delete_nic(self, nic_id):
-   887                                                   nic_params = azure_helpers.\
-   888                                                       parse_url(NETWORK_INTERFACE_RESOURCE_ID, nic_id)
-   889                                                   nic_name = nic_params.get(NETWORK_INTERFACE_NAME)
-   890                                                   self.network_management_client. \
-   891                                                       network_interfaces.delete(self.resource_group,
-   892                                                                                 nic_name).wait()
-
-Total time: 0 s
-File: /Users/alex/Desktop/work/cb-profiled/cloudbridge/cloudbridge/cloud/providers/azure/azure_client.py
-Function: get_nic at line 894
-
-Line #      Hits         Time  Per Hit   % Time  Line Contents
-==============================================================
-   894                                               @profile
-   895                                               def get_nic(self, nic_id):
-   896                                                   nic_params = azure_helpers.\
-   897                                                       parse_url(NETWORK_INTERFACE_RESOURCE_ID, nic_id)
-   898                                                   nic_name = nic_params.get(NETWORK_INTERFACE_NAME)
-   899                                                   return self.network_management_client. \
-   900                                                       network_interfaces.get(self.resource_group, nic_name)
-
-Total time: 0 s
-File: /Users/alex/Desktop/work/cb-profiled/cloudbridge/cloudbridge/cloud/providers/azure/azure_client.py
-Function: update_nic at line 902
-
-Line #      Hits         Time  Per Hit   % Time  Line Contents
-==============================================================
-   902                                               @profile
-   903                                               def update_nic(self, nic_id, params):
-   904                                                   nic_params = azure_helpers.\
-   905                                                       parse_url(NETWORK_INTERFACE_RESOURCE_ID, nic_id)
-   906                                                   nic_name = nic_params.get(NETWORK_INTERFACE_NAME)
-   907                                                   async_nic_creation = self.network_management_client. \
-   908                                                       network_interfaces.create_or_update(
-   909                                                           self.resource_group,
-   910                                                           nic_name,
-   911                                                           params
-   912                                                       )
-   913                                                   nic_info = async_nic_creation.result()
-   914                                                   return nic_info
-
-Total time: 0 s
-File: /Users/alex/Desktop/work/cb-profiled/cloudbridge/cloudbridge/cloud/providers/azure/azure_client.py
-Function: create_nic at line 916
-
-Line #      Hits         Time  Per Hit   % Time  Line Contents
-==============================================================
-   916                                               @profile
-   917                                               def create_nic(self, nic_name, params):
-   918                                                   return self.network_management_client. \
-   919                                                       network_interfaces.create_or_update(
-   920                                                           self.resource_group,
-   921                                                           nic_name,
-   922                                                           params
-   923                                                       ).result()
-
-Total time: 0 s
-File: /Users/alex/Desktop/work/cb-profiled/cloudbridge/cloudbridge/cloud/providers/azure/azure_client.py
-Function: create_public_key at line 925
-
-Line #      Hits         Time  Per Hit   % Time  Line Contents
-==============================================================
-   925                                               @profile
-   926                                               def create_public_key(self, entity):
-   927                                                   return self.table_service. \
-   928                                                       insert_or_replace_entity(self.public_key_storage_table_name,
-   929                                                                                entity)
-
-Total time: 0 s
-File: /Users/alex/Desktop/work/cb-profiled/cloudbridge/cloudbridge/cloud/providers/azure/azure_client.py
-Function: get_public_key at line 931
-
-Line #      Hits         Time  Per Hit   % Time  Line Contents
-==============================================================
-   931                                               @profile
-   932                                               def get_public_key(self, name):
-   933                                                   entities = self.table_service. \
-   934                                                       query_entities(self.public_key_storage_table_name,
-   935                                                                      "Name eq '{0}'".format(name), num_results=1)
-   936                                           
-   937                                                   return entities.items[0] if len(entities.items) > 0 else None
-
-Total time: 0 s
-File: /Users/alex/Desktop/work/cb-profiled/cloudbridge/cloudbridge/cloud/providers/azure/azure_client.py
-Function: delete_public_key at line 939
-
-Line #      Hits         Time  Per Hit   % Time  Line Contents
-==============================================================
-   939                                               @profile
-   940                                               def delete_public_key(self, entity):
-   941                                                   self.table_service.delete_entity(self.public_key_storage_table_name,
-   942                                                                                    entity.PartitionKey, entity.RowKey)
-
-Total time: 1.13503 s
-File: /Users/alex/Desktop/work/cb-profiled/cloudbridge/cloudbridge/cloud/providers/azure/azure_client.py
-Function: list_public_keys at line 944
-
-Line #      Hits         Time  Per Hit   % Time  Line Contents
-==============================================================
-   944                                               @profile
-   945                                               def list_public_keys(self, partition_key, limit=None, marker=None):
-   946         1    1076407.0 1076407.0     94.8          entities = self.table_service. \
-   947         1          8.0      8.0      0.0              query_entities(self.public_key_storage_table_name,
-   948         1          2.0      2.0      0.0                             "PartitionKey eq '{0}'".format(partition_key),
-   949         1      58613.0  58613.0      5.2                             marker=marker, num_results=limit)
-   950         1          2.0      2.0      0.0          return (entities.items, entities.next_marker)
-
-Total time: 0 s
-File: /Users/alex/Desktop/work/cb-profiled/cloudbridge/cloudbridge/cloud/providers/azure/azure_client.py
-Function: delete_route_table at line 952
-
-Line #      Hits         Time  Per Hit   % Time  Line Contents
-==============================================================
-   952                                               @profile
-   953                                               def delete_route_table(self, route_table_name):
-   954                                                   self.network_management_client. \
-   955                                                       route_tables.delete(self.resource_group, route_table_name
-   956                                                                           ).wait()
-
-Total time: 0 s
-File: /Users/alex/Desktop/work/cb-profiled/cloudbridge/cloudbridge/cloud/providers/azure/azure_client.py
-Function: attach_subnet_to_route_table at line 958
-
-Line #      Hits         Time  Per Hit   % Time  Line Contents
-==============================================================
-   958                                               @profile
-   959                                               def attach_subnet_to_route_table(self, subnet_id, route_table_id):
-   960                                                   url_params = azure_helpers.parse_url(SUBNET_RESOURCE_ID,
-   961                                                                                        subnet_id)
-   962                                                   network_name = url_params.get(NETWORK_NAME)
-   963                                                   subnet_name = url_params.get(SUBNET_NAME)
-   964                                           
-   965                                                   subnet_info = self.network_management_client.subnets.get(
-   966                                                       self.resource_group,
-   967                                                       network_name,
-   968                                                       subnet_name
-   969                                                   )
-   970                                                   if subnet_info:
-   971                                                       subnet_info.route_table = {
-   972                                                           'id': route_table_id
-   973                                                       }
-   974                                           
-   975                                                       result_create = self.network_management_client. \
-   976                                                           subnets.create_or_update(
-   977                                                            self.resource_group,
-   978                                                            network_name,
-   979                                                            subnet_name,
-   980                                                            subnet_info)
-   981                                                       subnet_info = result_create.result()
-   982                                           
-   983                                                   return subnet_info
-
-Total time: 0 s
-File: /Users/alex/Desktop/work/cb-profiled/cloudbridge/cloudbridge/cloud/providers/azure/azure_client.py
-Function: detach_subnet_to_route_table at line 985
-
-Line #      Hits         Time  Per Hit   % Time  Line Contents
-==============================================================
-   985                                               @profile
-   986                                               def detach_subnet_to_route_table(self, subnet_id, route_table_id):
-   987                                                   url_params = azure_helpers.parse_url(SUBNET_RESOURCE_ID,
-   988                                                                                        subnet_id)
-   989                                                   network_name = url_params.get(NETWORK_NAME)
-   990                                                   subnet_name = url_params.get(SUBNET_NAME)
-   991                                           
-   992                                                   subnet_info = self.network_management_client.subnets.get(
-   993                                                       self.resource_group,
-   994                                                       network_name,
-   995                                                       subnet_name
-   996                                                   )
-   997                                           
-   998                                                   if subnet_info and subnet_info.route_table.id == route_table_id:
-   999                                                       subnet_info.route_table = None
-  1000                                           
-  1001                                                       result_create = self.network_management_client. \
-  1002                                                           subnets.create_or_update(
-  1003                                                            self.resource_group,
-  1004                                                            network_name,
-  1005                                                            subnet_name,
-  1006                                                            subnet_info)
-  1007                                                       subnet_info = result_create.result()
-  1008                                           
-  1009                                                   return subnet_info
-
-Total time: 0 s
-File: /Users/alex/Desktop/work/cb-profiled/cloudbridge/cloudbridge/cloud/providers/azure/azure_client.py
-Function: list_route_tables at line 1011
-
-Line #      Hits         Time  Per Hit   % Time  Line Contents
-==============================================================
-  1011                                               @profile
-  1012                                               def list_route_tables(self):
-  1013                                                   return self.network_management_client. \
-  1014                                                       route_tables.list(self.resource_group)
-
-Total time: 0 s
-File: /Users/alex/Desktop/work/cb-profiled/cloudbridge/cloudbridge/cloud/providers/azure/azure_client.py
-Function: get_route_table at line 1016
-
-Line #      Hits         Time  Per Hit   % Time  Line Contents
-==============================================================
-  1016                                               @profile
-  1017                                               def get_route_table(self, router_id):
-  1018                                                   url_params = azure_helpers.parse_url(ROUTER_RESOURCE_ID,
-  1019                                                                                        router_id)
-  1020                                                   router_name = url_params.get(ROUTER_NAME)
-  1021                                                   return self.network_management_client. \
-  1022                                                       route_tables.get(self.resource_group, router_name)
-
-Total time: 0 s
-File: /Users/alex/Desktop/work/cb-profiled/cloudbridge/cloudbridge/cloud/providers/azure/azure_client.py
-Function: create_route_table at line 1024
-
-Line #      Hits         Time  Per Hit   % Time  Line Contents
-==============================================================
-  1024                                               @profile
-  1025                                               def create_route_table(self, route_table_name, params):
-  1026                                                   return self.network_management_client. \
-  1027                                                       route_tables.create_or_update(
-  1028                                                        self.resource_group,
-  1029                                                        route_table_name, params).result()
-
-Total time: 0 s
-File: /Users/alex/Desktop/work/cb-profiled/cloudbridge/cloudbridge/cloud/providers/azure/azure_client.py
-Function: update_route_table_tags at line 1031
-
-Line #      Hits         Time  Per Hit   % Time  Line Contents
-==============================================================
-  1031                                               @profile
-  1032                                               def update_route_table_tags(self, route_table_name, tags):
-  1033                                                   self.network_management_client.route_tables. \
-  1034                                                       create_or_update(self.resource_group,
-  1035                                                                        route_table_name, tags).result()
-

+ 0 - 1467
results/network.res

@@ -1,1467 +0,0 @@
-Test output
- .......
-----------------------------------------------------------------------
-Ran 7 tests in 608.600s
-
-OK
-
-Wrote profile results to run_tests.py.lprof
-Timer unit: 1e-06 s
-
-Total time: 2.10756 s
-File: /Users/alex/Desktop/work/cb-profiled/cloudbridge/cloudbridge/cloud/providers/azure/azure_client.py
-Function: __init__ at line 160
-
-Line #      Hits         Time  Per Hit   % Time  Line Contents
-==============================================================
-   160                                               @profile
-   161                                               def __init__(self, config):
-   162         7         22.0      3.1      0.0          self._config = config
-   163         7         15.0      2.1      0.0          self.subscription_id = str(config.get('azure_subscription_id'))
-   164         7          6.0      0.9      0.0          self._credentials = ServicePrincipalCredentials(
-   165         7          6.0      0.9      0.0              client_id=config.get('azure_client_id'),
-   166         7          4.0      0.6      0.0              secret=config.get('azure_secret'),
-   167         7    2107374.0 301053.4    100.0              tenant=config.get('azure_tenant')
-   168                                                   )
-   169                                           
-   170         7         23.0      3.3      0.0          self._access_token = config.get('azure_access_token')
-   171         7          6.0      0.9      0.0          self._resource_client = None
-   172         7          4.0      0.6      0.0          self._storage_client = None
-   173         7          6.0      0.9      0.0          self._network_management_client = None
-   174         7          9.0      1.3      0.0          self._subscription_client = None
-   175         7          4.0      0.6      0.0          self._compute_client = None
-   176         7          7.0      1.0      0.0          self._access_key_result = None
-   177         7          4.0      0.6      0.0          self._block_blob_service = None
-   178         7          6.0      0.9      0.0          self._table_service = None
-   179         7          8.0      1.1      0.0          self._storage_account = None
-   180                                           
-   181         7         58.0      8.3      0.0          log.debug("azure subscription : %s", self.subscription_id)
-
-Total time: 0 s
-File: /Users/alex/Desktop/work/cb-profiled/cloudbridge/cloudbridge/cloud/providers/azure/azure_client.py
-Function: access_key_result at line 183
-
-Line #      Hits         Time  Per Hit   % Time  Line Contents
-==============================================================
-   183                                               @property
-   184                                               @tenacity.retry(stop=tenacity.stop_after_attempt(5), reraise=True)
-   185                                               @profile
-   186                                               def access_key_result(self):
-   187                                                   if not self._access_key_result:
-   188                                                       storage_account = self.storage_account
-   189                                           
-   190                                                       if self.get_storage_account(storage_account).\
-   191                                                               provisioning_state.value != 'Succeeded':
-   192                                                           log.debug(
-   193                                                               "Storage account %s is not in Succeeded state yet. ",
-   194                                                               storage_account)
-   195                                                           raise WaitStateException(
-   196                                                               "Waited too long for storage account: {0} to "
-   197                                                               "become ready.".format(
-   198                                                                   storage_account,
-   199                                                                   self.get_storage_account(storage_account).
-   200                                                                   provisioning_state))
-   201                                           
-   202                                                       self._access_key_result = self.storage_client.storage_accounts. \
-   203                                                           list_keys(self.resource_group, storage_account)
-   204                                                   return self._access_key_result
-
-Total time: 0.0002 s
-File: /Users/alex/Desktop/work/cb-profiled/cloudbridge/cloudbridge/cloud/providers/azure/azure_client.py
-Function: resource_group at line 206
-
-Line #      Hits         Time  Per Hit   % Time  Line Contents
-==============================================================
-   206                                               @property
-   207                                               @profile
-   208                                               def resource_group(self):
-   209       146        200.0      1.4    100.0          return self._config.get('azure_resource_group')
-
-Total time: 0 s
-File: /Users/alex/Desktop/work/cb-profiled/cloudbridge/cloudbridge/cloud/providers/azure/azure_client.py
-Function: storage_account at line 211
-
-Line #      Hits         Time  Per Hit   % Time  Line Contents
-==============================================================
-   211                                               @property
-   212                                               @profile
-   213                                               def storage_account(self):
-   214                                                   return self._config.get('azure_storage_account')
-
-Total time: 1.3e-05 s
-File: /Users/alex/Desktop/work/cb-profiled/cloudbridge/cloudbridge/cloud/providers/azure/azure_client.py
-Function: region_name at line 216
-
-Line #      Hits         Time  Per Hit   % Time  Line Contents
-==============================================================
-   216                                               @property
-   217                                               @profile
-   218                                               def region_name(self):
-   219         5         13.0      2.6    100.0          return self._config.get('azure_region_name')
-
-Total time: 0 s
-File: /Users/alex/Desktop/work/cb-profiled/cloudbridge/cloudbridge/cloud/providers/azure/azure_client.py
-Function: public_key_storage_table_name at line 221
-
-Line #      Hits         Time  Per Hit   % Time  Line Contents
-==============================================================
-   221                                               @property
-   222                                               @profile
-   223                                               def public_key_storage_table_name(self):
-   224                                                   return self._config.get('azure_public_key_storage_table_name')
-
-Total time: 0 s
-File: /Users/alex/Desktop/work/cb-profiled/cloudbridge/cloudbridge/cloud/providers/azure/azure_client.py
-Function: storage_client at line 226
-
-Line #      Hits         Time  Per Hit   % Time  Line Contents
-==============================================================
-   226                                               @property
-   227                                               @profile
-   228                                               def storage_client(self):
-   229                                                   if not self._storage_client:
-   230                                                       self._storage_client = \
-   231                                                           StorageManagementClient(self._credentials,
-   232                                                                                   self.subscription_id)
-   233                                                   return self._storage_client
-
-Total time: 0.007613 s
-File: /Users/alex/Desktop/work/cb-profiled/cloudbridge/cloudbridge/cloud/providers/azure/azure_client.py
-Function: subscription_client at line 235
-
-Line #      Hits         Time  Per Hit   % Time  Line Contents
-==============================================================
-   235                                               @property
-   236                                               @profile
-   237                                               def subscription_client(self):
-   238         1          1.0      1.0      0.0          if not self._subscription_client:
-   239         1       7610.0   7610.0    100.0              self._subscription_client = SubscriptionClient(self._credentials)
-   240         1          2.0      2.0      0.0          return self._subscription_client
-
-Total time: 0.060981 s
-File: /Users/alex/Desktop/work/cb-profiled/cloudbridge/cloudbridge/cloud/providers/azure/azure_client.py
-Function: resource_client at line 242
-
-Line #      Hits         Time  Per Hit   % Time  Line Contents
-==============================================================
-   242                                               @property
-   243                                               @profile
-   244                                               def resource_client(self):
-   245         7          5.0      0.7      0.0          if not self._resource_client:
-   246                                                       self._resource_client = \
-   247         7          6.0      0.9      0.0                  ResourceManagementClient(self._credentials,
-   248         7      60956.0   8708.0    100.0                                           self.subscription_id)
-   249         7         14.0      2.0      0.0          return self._resource_client
-
-Total time: 0 s
-File: /Users/alex/Desktop/work/cb-profiled/cloudbridge/cloudbridge/cloud/providers/azure/azure_client.py
-Function: compute_client at line 251
-
-Line #      Hits         Time  Per Hit   % Time  Line Contents
-==============================================================
-   251                                               @property
-   252                                               @profile
-   253                                               def compute_client(self):
-   254                                                   if not self._compute_client:
-   255                                                       self._compute_client = \
-   256                                                           ComputeManagementClient(self._credentials,
-   257                                                                                   self.subscription_id)
-   258                                                   return self._compute_client
-
-Total time: 0.050602 s
-File: /Users/alex/Desktop/work/cb-profiled/cloudbridge/cloudbridge/cloud/providers/azure/azure_client.py
-Function: network_management_client at line 260
-
-Line #      Hits         Time  Per Hit   % Time  Line Contents
-==============================================================
-   260                                               @property
-   261                                               @profile
-   262                                               def network_management_client(self):
-   263       146        170.0      1.2      0.3          if not self._network_management_client:
-   264         7         10.0      1.4      0.0              self._network_management_client = NetworkManagementClient(
-   265         7      50322.0   7188.9     99.4                  self._credentials, self.subscription_id)
-   266       146        100.0      0.7      0.2          return self._network_management_client
-
-Total time: 0 s
-File: /Users/alex/Desktop/work/cb-profiled/cloudbridge/cloudbridge/cloud/providers/azure/azure_client.py
-Function: blob_service at line 268
-
-Line #      Hits         Time  Per Hit   % Time  Line Contents
-==============================================================
-   268                                               @property
-   269                                               @profile
-   270                                               def blob_service(self):
-   271                                                   self._get_or_create_storage_account()
-   272                                                   if not self._block_blob_service:
-   273                                                       if self._access_token:
-   274                                                           token_credential = TokenCredential(self._access_token)
-   275                                                           self._block_blob_service = BlockBlobService(
-   276                                                               account_name=self.storage_account,
-   277                                                               token_credential=token_credential)
-   278                                                       else:
-   279                                                           self._block_blob_service = BlockBlobService(
-   280                                                               account_name=self.storage_account,
-   281                                                               account_key=self.access_key_result.keys[0].value)
-   282                                                   return self._block_blob_service
-
-Total time: 0 s
-File: /Users/alex/Desktop/work/cb-profiled/cloudbridge/cloudbridge/cloud/providers/azure/azure_client.py
-Function: table_service at line 284
-
-Line #      Hits         Time  Per Hit   % Time  Line Contents
-==============================================================
-   284                                               @property
-   285                                               @profile
-   286                                               def table_service(self):
-   287                                                   self._get_or_create_storage_account()
-   288                                                   if not self._table_service:
-   289                                                       self._table_service = TableService(
-   290                                                           self.storage_account,
-   291                                                           self.access_key_result.keys[0].value)
-   292                                                   if not self._table_service. \
-   293                                                           exists(table_name=self.public_key_storage_table_name):
-   294                                                       self._table_service.create_table(
-   295                                                           self.public_key_storage_table_name)
-   296                                                   return self._table_service
-
-Total time: 1.59586 s
-File: /Users/alex/Desktop/work/cb-profiled/cloudbridge/cloudbridge/cloud/providers/azure/azure_client.py
-Function: get_resource_group at line 298
-
-Line #      Hits         Time  Per Hit   % Time  Line Contents
-==============================================================
-   298                                               @profile
-   299                                               def get_resource_group(self, name):
-   300         7    1595863.0 227980.4    100.0          return self.resource_client.resource_groups.get(name)
-
-Total time: 0 s
-File: /Users/alex/Desktop/work/cb-profiled/cloudbridge/cloudbridge/cloud/providers/azure/azure_client.py
-Function: create_resource_group at line 302
-
-Line #      Hits         Time  Per Hit   % Time  Line Contents
-==============================================================
-   302                                               @profile
-   303                                               def create_resource_group(self, name, parameters):
-   304                                                   return self.resource_client.resource_groups. \
-   305                                                       create_or_update(name, parameters)
-
-Total time: 0 s
-File: /Users/alex/Desktop/work/cb-profiled/cloudbridge/cloudbridge/cloud/providers/azure/azure_client.py
-Function: get_storage_account at line 307
-
-Line #      Hits         Time  Per Hit   % Time  Line Contents
-==============================================================
-   307                                               @profile
-   308                                               def get_storage_account(self, storage_account):
-   309                                                   return self.storage_client.storage_accounts. \
-   310                                                       get_properties(self.resource_group, storage_account)
-
-Total time: 0 s
-File: /Users/alex/Desktop/work/cb-profiled/cloudbridge/cloudbridge/cloud/providers/azure/azure_client.py
-Function: create_storage_account at line 312
-
-Line #      Hits         Time  Per Hit   % Time  Line Contents
-==============================================================
-   312                                               @profile
-   313                                               def create_storage_account(self, name, params):
-   314                                                   return self.storage_client.storage_accounts. \
-   315                                                       create(self.resource_group, name.lower(), params).result()
-
-Total time: 0 s
-File: /Users/alex/Desktop/work/cb-profiled/cloudbridge/cloudbridge/cloud/providers/azure/azure_client.py
-Function: _get_or_create_storage_account at line 319
-
-Line #      Hits         Time  Per Hit   % Time  Line Contents
-==============================================================
-   319                                               @tenacity.retry(stop=tenacity.stop_after_attempt(2),
-   320                                                               retry=tenacity.retry_if_exception_type(CloudError),
-   321                                                               reraise=True)
-   322                                               @profile
-   323                                               def _get_or_create_storage_account(self):
-   324                                                   if self._storage_account:
-   325                                                       return self._storage_account
-   326                                                   else:
-   327                                                       try:
-   328                                                           self._storage_account = \
-   329                                                               self.get_storage_account(self.storage_account)
-   330                                                       except CloudError as cloud_error:
-   331                                                           if cloud_error.error.error == "ResourceNotFound":
-   332                                                               storage_account_params = {
-   333                                                                   'sku': {
-   334                                                                       'name': 'Standard_LRS'
-   335                                                                   },
-   336                                                                   'kind': 'storage',
-   337                                                                   'location': self.region_name,
-   338                                                               }
-   339                                                               try:
-   340                                                                   self._storage_account = \
-   341                                                                       self.create_storage_account(self.storage_account,
-   342                                                                                                   storage_account_params)
-   343                                                               except CloudError as cloud_error2:  # pragma: no cover
-   344                                                                   if cloud_error2.error.error == "AuthorizationFailed":
-   345                                                                       mess = 'The following error was returned by ' \
-   346                                                                              'Azure:\n%s\n\nThis is likely because the' \
-   347                                                                              ' Role associated with the provided ' \
-   348                                                                              'credentials does not allow for Storage ' \
-   349                                                                              'Account creation.\nA Storage Account is ' \
-   350                                                                              'necessary in order to perform the ' \
-   351                                                                              'desired operation. You must either ' \
-   352                                                                              'provide an existing Storage Account name' \
-   353                                                                              ' as part of the configuration, or ' \
-   354                                                                              'elevate the associated Role.\nFor more ' \
-   355                                                                              'information on roles, see: https://docs.' \
-   356                                                                              'microsoft.com/en-us/azure/role-based-' \
-   357                                                                              'access-control/overview\n' % cloud_error2
-   358                                                                       raise ProviderConnectionException(mess)
-   359                                           
-   360                                                                   elif cloud_error2.error.error == \
-   361                                                                           "StorageAccountAlreadyTaken":
-   362                                                                       mess = 'The following error was ' \
-   363                                                                              'returned by Azure:\n%s\n\n' \
-   364                                                                              'Note that Storage Account names must be ' \
-   365                                                                              'unique across Azure (not just in your ' \
-   366                                                                              'subscription).\nFor more information ' \
-   367                                                                              'see https://docs.microsoft.com/en-us/' \
-   368                                                                              'azure/azure-resource-manager/resource-' \
-   369                                                                              'manager-storage-account-name-errors\n' \
-   370                                                                              % cloud_error2
-   371                                                                       raise InvalidLabelException(mess)
-   372                                                                   else:
-   373                                                                       raise cloud_error2
-   374                                                           else:
-   375                                                               raise cloud_error
-
-Total time: 0.037122 s
-File: /Users/alex/Desktop/work/cb-profiled/cloudbridge/cloudbridge/cloud/providers/azure/azure_client.py
-Function: list_locations at line 377
-
-Line #      Hits         Time  Per Hit   % Time  Line Contents
-==============================================================
-   377                                               @profile
-   378                                               def list_locations(self):
-   379         1      37095.0  37095.0     99.9          return self.subscription_client.subscriptions. \
-   380         1         27.0     27.0      0.1              list_locations(self.subscription_id)
-
-Total time: 0 s
-File: /Users/alex/Desktop/work/cb-profiled/cloudbridge/cloudbridge/cloud/providers/azure/azure_client.py
-Function: list_vm_firewall at line 382
-
-Line #      Hits         Time  Per Hit   % Time  Line Contents
-==============================================================
-   382                                               @profile
-   383                                               def list_vm_firewall(self):
-   384                                                   return self.network_management_client.network_security_groups. \
-   385                                                       list(self.resource_group)
-
-Total time: 0 s
-File: /Users/alex/Desktop/work/cb-profiled/cloudbridge/cloudbridge/cloud/providers/azure/azure_client.py
-Function: create_vm_firewall at line 387
-
-Line #      Hits         Time  Per Hit   % Time  Line Contents
-==============================================================
-   387                                               @profile
-   388                                               def create_vm_firewall(self, name, parameters):
-   389                                                   return self.network_management_client.network_security_groups. \
-   390                                                       create_or_update(self.resource_group, name,
-   391                                                                        parameters).result()
-
-Total time: 0 s
-File: /Users/alex/Desktop/work/cb-profiled/cloudbridge/cloudbridge/cloud/providers/azure/azure_client.py
-Function: update_vm_firewall_tags at line 393
-
-Line #      Hits         Time  Per Hit   % Time  Line Contents
-==============================================================
-   393                                               @profile
-   394                                               def update_vm_firewall_tags(self, fw_id, tags):
-   395                                                   url_params = azure_helpers.parse_url(VM_FIREWALL_RESOURCE_ID,
-   396                                                                                        fw_id)
-   397                                                   name = url_params.get(VM_FIREWALL_NAME)
-   398                                                   return self.network_management_client.network_security_groups. \
-   399                                                       create_or_update(self.resource_group, name,
-   400                                                                        {'tags': tags,
-   401                                                                         'location': self.region_name}).result()
-
-Total time: 0 s
-File: /Users/alex/Desktop/work/cb-profiled/cloudbridge/cloudbridge/cloud/providers/azure/azure_client.py
-Function: get_vm_firewall at line 403
-
-Line #      Hits         Time  Per Hit   % Time  Line Contents
-==============================================================
-   403                                               @profile
-   404                                               def get_vm_firewall(self, fw_id):
-   405                                                   url_params = azure_helpers.parse_url(VM_FIREWALL_RESOURCE_ID,
-   406                                                                                        fw_id)
-   407                                                   fw_name = url_params.get(VM_FIREWALL_NAME)
-   408                                                   return self.network_management_client.network_security_groups. \
-   409                                                       get(self.resource_group, fw_name)
-
-Total time: 0 s
-File: /Users/alex/Desktop/work/cb-profiled/cloudbridge/cloudbridge/cloud/providers/azure/azure_client.py
-Function: delete_vm_firewall at line 411
-
-Line #      Hits         Time  Per Hit   % Time  Line Contents
-==============================================================
-   411                                               @profile
-   412                                               def delete_vm_firewall(self, fw_id):
-   413                                                   url_params = azure_helpers.parse_url(VM_FIREWALL_RESOURCE_ID,
-   414                                                                                        fw_id)
-   415                                                   name = url_params.get(VM_FIREWALL_NAME)
-   416                                                   self.network_management_client \
-   417                                                       .network_security_groups.delete(self.resource_group, name).wait()
-
-Total time: 0 s
-File: /Users/alex/Desktop/work/cb-profiled/cloudbridge/cloudbridge/cloud/providers/azure/azure_client.py
-Function: create_vm_firewall_rule at line 419
-
-Line #      Hits         Time  Per Hit   % Time  Line Contents
-==============================================================
-   419                                               @profile
-   420                                               def create_vm_firewall_rule(self, fw_id,
-   421                                                                           rule_name, parameters):
-   422                                                   url_params = azure_helpers.parse_url(VM_FIREWALL_RESOURCE_ID,
-   423                                                                                        fw_id)
-   424                                                   vm_firewall_name = url_params.get(VM_FIREWALL_NAME)
-   425                                                   return self.network_management_client.security_rules. \
-   426                                                       create_or_update(self.resource_group, vm_firewall_name,
-   427                                                                        rule_name, parameters).result()
-
-Total time: 0 s
-File: /Users/alex/Desktop/work/cb-profiled/cloudbridge/cloudbridge/cloud/providers/azure/azure_client.py
-Function: delete_vm_firewall_rule at line 429
-
-Line #      Hits         Time  Per Hit   % Time  Line Contents
-==============================================================
-   429                                               @profile
-   430                                               def delete_vm_firewall_rule(self, fw_rule_id, vm_firewall):
-   431                                                   url_params = azure_helpers.parse_url(VM_FIREWALL_RULE_RESOURCE_ID,
-   432                                                                                        fw_rule_id)
-   433                                                   name = url_params.get(VM_FIREWALL_RULE_NAME)
-   434                                                   return self.network_management_client.security_rules. \
-   435                                                       delete(self.resource_group, vm_firewall, name).result()
-
-Total time: 0 s
-File: /Users/alex/Desktop/work/cb-profiled/cloudbridge/cloudbridge/cloud/providers/azure/azure_client.py
-Function: list_containers at line 437
-
-Line #      Hits         Time  Per Hit   % Time  Line Contents
-==============================================================
-   437                                               @profile
-   438                                               def list_containers(self, prefix=None, limit=None, marker=None):
-   439                                                   results = self.blob_service.list_containers(prefix=prefix,
-   440                                                                                               num_results=limit,
-   441                                                                                               marker=marker)
-   442                                                   return (results.items, results.next_marker)
-
-Total time: 0 s
-File: /Users/alex/Desktop/work/cb-profiled/cloudbridge/cloudbridge/cloud/providers/azure/azure_client.py
-Function: create_container at line 444
-
-Line #      Hits         Time  Per Hit   % Time  Line Contents
-==============================================================
-   444                                               @profile
-   445                                               def create_container(self, container_name):
-   446                                                   try:
-   447                                                       self.blob_service.create_container(container_name,
-   448                                                                                          fail_on_exist=True)
-   449                                                   except AzureConflictHttpError as cloud_error:
-   450                                                       if cloud_error.error_code == "ContainerAlreadyExists":
-   451                                                           msg = "The given Bucket name '%s' already exists. Please " \
-   452                                                                 "use the `get` or `find` method to get a reference to " \
-   453                                                                 "an existing Bucket, or specify a new Bucket name to " \
-   454                                                                 "create.\nNote that in Azure, Buckets are contained " \
-   455                                                                 "in Storage Accounts." % container_name
-   456                                                           raise DuplicateResourceException(msg)
-   457                                           
-   458                                                   return self.blob_service.get_container_properties(container_name)
-
-Total time: 0 s
-File: /Users/alex/Desktop/work/cb-profiled/cloudbridge/cloudbridge/cloud/providers/azure/azure_client.py
-Function: get_container at line 460
-
-Line #      Hits         Time  Per Hit   % Time  Line Contents
-==============================================================
-   460                                               @profile
-   461                                               def get_container(self, container_name):
-   462                                                   return self.blob_service.get_container_properties(container_name)
-
-Total time: 0 s
-File: /Users/alex/Desktop/work/cb-profiled/cloudbridge/cloudbridge/cloud/providers/azure/azure_client.py
-Function: delete_container at line 464
-
-Line #      Hits         Time  Per Hit   % Time  Line Contents
-==============================================================
-   464                                               @profile
-   465                                               def delete_container(self, container_name):
-   466                                                   self.blob_service.delete_container(container_name)
-
-Total time: 0 s
-File: /Users/alex/Desktop/work/cb-profiled/cloudbridge/cloudbridge/cloud/providers/azure/azure_client.py
-Function: list_blobs at line 468
-
-Line #      Hits         Time  Per Hit   % Time  Line Contents
-==============================================================
-   468                                               @profile
-   469                                               def list_blobs(self, container_name, prefix=None):
-   470                                                   return self.blob_service.list_blobs(container_name, prefix=prefix)
-
-Total time: 0 s
-File: /Users/alex/Desktop/work/cb-profiled/cloudbridge/cloudbridge/cloud/providers/azure/azure_client.py
-Function: get_blob at line 472
-
-Line #      Hits         Time  Per Hit   % Time  Line Contents
-==============================================================
-   472                                               @profile
-   473                                               def get_blob(self, container_name, blob_name):
-   474                                                   return self.blob_service.get_blob_properties(container_name, blob_name)
-
-Total time: 0 s
-File: /Users/alex/Desktop/work/cb-profiled/cloudbridge/cloudbridge/cloud/providers/azure/azure_client.py
-Function: create_blob_from_text at line 476
-
-Line #      Hits         Time  Per Hit   % Time  Line Contents
-==============================================================
-   476                                               @profile
-   477                                               def create_blob_from_text(self, container_name, blob_name, text):
-   478                                                   self.blob_service.create_blob_from_text(container_name,
-   479                                                                                           blob_name, text)
-
-Total time: 0 s
-File: /Users/alex/Desktop/work/cb-profiled/cloudbridge/cloudbridge/cloud/providers/azure/azure_client.py
-Function: create_blob_from_file at line 481
-
-Line #      Hits         Time  Per Hit   % Time  Line Contents
-==============================================================
-   481                                               @profile
-   482                                               def create_blob_from_file(self, container_name, blob_name, file_path):
-   483                                                   self.blob_service.create_blob_from_path(container_name,
-   484                                                                                           blob_name, file_path)
-
-Total time: 0 s
-File: /Users/alex/Desktop/work/cb-profiled/cloudbridge/cloudbridge/cloud/providers/azure/azure_client.py
-Function: delete_blob at line 486
-
-Line #      Hits         Time  Per Hit   % Time  Line Contents
-==============================================================
-   486                                               @profile
-   487                                               def delete_blob(self, container_name, blob_name):
-   488                                                   self.blob_service.delete_blob(container_name, blob_name)
-
-Total time: 0 s
-File: /Users/alex/Desktop/work/cb-profiled/cloudbridge/cloudbridge/cloud/providers/azure/azure_client.py
-Function: get_blob_url at line 490
-
-Line #      Hits         Time  Per Hit   % Time  Line Contents
-==============================================================
-   490                                               @profile
-   491                                               def get_blob_url(self, container_name, blob_name, expiry_time):
-   492                                                   expiry_date = datetime.datetime.utcnow() + datetime.timedelta(
-   493                                                       seconds=expiry_time)
-   494                                                   sas = self.blob_service.generate_blob_shared_access_signature(
-   495                                                       container_name, blob_name, permission=BlobPermissions.READ,
-   496                                                       expiry=expiry_date)
-   497                                                   return self.blob_service.make_blob_url(container_name, blob_name,
-   498                                                                                          sas_token=sas)
-
-Total time: 0 s
-File: /Users/alex/Desktop/work/cb-profiled/cloudbridge/cloudbridge/cloud/providers/azure/azure_client.py
-Function: get_blob_content at line 500
-
-Line #      Hits         Time  Per Hit   % Time  Line Contents
-==============================================================
-   500                                               @profile
-   501                                               def get_blob_content(self, container_name, blob_name):
-   502                                                   out_stream = BytesIO()
-   503                                                   self.blob_service.get_blob_to_stream(container_name,
-   504                                                                                        blob_name, out_stream)
-   505                                                   return out_stream
-
-Total time: 0 s
-File: /Users/alex/Desktop/work/cb-profiled/cloudbridge/cloudbridge/cloud/providers/azure/azure_client.py
-Function: create_empty_disk at line 507
-
-Line #      Hits         Time  Per Hit   % Time  Line Contents
-==============================================================
-   507                                               @profile
-   508                                               def create_empty_disk(self, disk_name, params):
-   509                                                   return self.compute_client.disks.create_or_update(
-   510                                                       self.resource_group,
-   511                                                       disk_name,
-   512                                                       params
-   513                                                   ).result()
-
-Total time: 0 s
-File: /Users/alex/Desktop/work/cb-profiled/cloudbridge/cloudbridge/cloud/providers/azure/azure_client.py
-Function: create_snapshot_disk at line 515
-
-Line #      Hits         Time  Per Hit   % Time  Line Contents
-==============================================================
-   515                                               @profile
-   516                                               def create_snapshot_disk(self, disk_name, params):
-   517                                                   return self.compute_client.disks.create_or_update(
-   518                                                       self.resource_group,
-   519                                                       disk_name,
-   520                                                       params
-   521                                                   ).result()
-
-Total time: 0 s
-File: /Users/alex/Desktop/work/cb-profiled/cloudbridge/cloudbridge/cloud/providers/azure/azure_client.py
-Function: get_disk at line 523
-
-Line #      Hits         Time  Per Hit   % Time  Line Contents
-==============================================================
-   523                                               @profile
-   524                                               def get_disk(self, disk_id):
-   525                                                   url_params = azure_helpers.parse_url(VOLUME_RESOURCE_ID,
-   526                                                                                        disk_id)
-   527                                                   disk_name = url_params.get(VOLUME_NAME)
-   528                                                   return self.compute_client.disks.get(self.resource_group, disk_name)
-
-Total time: 0 s
-File: /Users/alex/Desktop/work/cb-profiled/cloudbridge/cloudbridge/cloud/providers/azure/azure_client.py
-Function: list_disks at line 530
-
-Line #      Hits         Time  Per Hit   % Time  Line Contents
-==============================================================
-   530                                               @profile
-   531                                               def list_disks(self):
-   532                                                   return self.compute_client.disks. \
-   533                                                       list_by_resource_group(self.resource_group)
-
-Total time: 0 s
-File: /Users/alex/Desktop/work/cb-profiled/cloudbridge/cloudbridge/cloud/providers/azure/azure_client.py
-Function: delete_disk at line 535
-
-Line #      Hits         Time  Per Hit   % Time  Line Contents
-==============================================================
-   535                                               @profile
-   536                                               def delete_disk(self, disk_id):
-   537                                                   url_params = azure_helpers.parse_url(VOLUME_RESOURCE_ID,
-   538                                                                                        disk_id)
-   539                                                   disk_name = url_params.get(VOLUME_NAME)
-   540                                                   self.compute_client.disks.delete(self.resource_group, disk_name).wait()
-
-Total time: 0 s
-File: /Users/alex/Desktop/work/cb-profiled/cloudbridge/cloudbridge/cloud/providers/azure/azure_client.py
-Function: update_disk_tags at line 542
-
-Line #      Hits         Time  Per Hit   % Time  Line Contents
-==============================================================
-   542                                               @profile
-   543                                               def update_disk_tags(self, disk_id, tags):
-   544                                                   url_params = azure_helpers.parse_url(VOLUME_RESOURCE_ID,
-   545                                                                                        disk_id)
-   546                                                   disk_name = url_params.get(VOLUME_NAME)
-   547                                                   return self.compute_client.disks.update(
-   548                                                       self.resource_group,
-   549                                                       disk_name,
-   550                                                       {'tags': tags},
-   551                                                       raw=True
-   552                                                   )
-
-Total time: 0 s
-File: /Users/alex/Desktop/work/cb-profiled/cloudbridge/cloudbridge/cloud/providers/azure/azure_client.py
-Function: list_snapshots at line 554
-
-Line #      Hits         Time  Per Hit   % Time  Line Contents
-==============================================================
-   554                                               @profile
-   555                                               def list_snapshots(self):
-   556                                                   return self.compute_client.snapshots. \
-   557                                                       list_by_resource_group(self.resource_group)
-
-Total time: 0 s
-File: /Users/alex/Desktop/work/cb-profiled/cloudbridge/cloudbridge/cloud/providers/azure/azure_client.py
-Function: get_snapshot at line 559
-
-Line #      Hits         Time  Per Hit   % Time  Line Contents
-==============================================================
-   559                                               @profile
-   560                                               def get_snapshot(self, snapshot_id):
-   561                                                   url_params = azure_helpers.parse_url(SNAPSHOT_RESOURCE_ID,
-   562                                                                                        snapshot_id)
-   563                                                   snapshot_name = url_params.get(SNAPSHOT_NAME)
-   564                                                   return self.compute_client.snapshots.get(self.resource_group,
-   565                                                                                            snapshot_name)
-
-Total time: 0 s
-File: /Users/alex/Desktop/work/cb-profiled/cloudbridge/cloudbridge/cloud/providers/azure/azure_client.py
-Function: create_snapshot at line 567
-
-Line #      Hits         Time  Per Hit   % Time  Line Contents
-==============================================================
-   567                                               @profile
-   568                                               def create_snapshot(self, snapshot_name, params):
-   569                                                   return self.compute_client.snapshots.create_or_update(
-   570                                                       self.resource_group,
-   571                                                       snapshot_name,
-   572                                                       params
-   573                                                   ).result()
-
-Total time: 0 s
-File: /Users/alex/Desktop/work/cb-profiled/cloudbridge/cloudbridge/cloud/providers/azure/azure_client.py
-Function: delete_snapshot at line 575
-
-Line #      Hits         Time  Per Hit   % Time  Line Contents
-==============================================================
-   575                                               @profile
-   576                                               def delete_snapshot(self, snapshot_id):
-   577                                                   url_params = azure_helpers.parse_url(SNAPSHOT_RESOURCE_ID,
-   578                                                                                        snapshot_id)
-   579                                                   snapshot_name = url_params.get(SNAPSHOT_NAME)
-   580                                                   self.compute_client.snapshots.delete(self.resource_group,
-   581                                                                                        snapshot_name).wait()
-
-Total time: 0 s
-File: /Users/alex/Desktop/work/cb-profiled/cloudbridge/cloudbridge/cloud/providers/azure/azure_client.py
-Function: update_snapshot_tags at line 583
-
-Line #      Hits         Time  Per Hit   % Time  Line Contents
-==============================================================
-   583                                               @profile
-   584                                               def update_snapshot_tags(self, snapshot_id, tags):
-   585                                                   url_params = azure_helpers.parse_url(SNAPSHOT_RESOURCE_ID,
-   586                                                                                        snapshot_id)
-   587                                                   snapshot_name = url_params.get(SNAPSHOT_NAME)
-   588                                                   return self.compute_client.snapshots.update(
-   589                                                       self.resource_group,
-   590                                                       snapshot_name,
-   591                                                       {'tags': tags},
-   592                                                       raw=True
-   593                                                   )
-
-Total time: 0 s
-File: /Users/alex/Desktop/work/cb-profiled/cloudbridge/cloudbridge/cloud/providers/azure/azure_client.py
-Function: is_gallery_image at line 595
-
-Line #      Hits         Time  Per Hit   % Time  Line Contents
-==============================================================
-   595                                               @profile
-   596                                               def is_gallery_image(self, image_id):
-   597                                                   url_params = azure_helpers.parse_url(IMAGE_RESOURCE_ID,
-   598                                                                                        image_id)
-   599                                                   # If it is a gallery image, it will always have an offer
-   600                                                   return 'offer' in url_params
-
-Total time: 0 s
-File: /Users/alex/Desktop/work/cb-profiled/cloudbridge/cloudbridge/cloud/providers/azure/azure_client.py
-Function: create_image at line 602
-
-Line #      Hits         Time  Per Hit   % Time  Line Contents
-==============================================================
-   602                                               @profile
-   603                                               def create_image(self, name, params):
-   604                                                   return self.compute_client.images. \
-   605                                                       create_or_update(self.resource_group, name,
-   606                                                                        params).result()
-
-Total time: 0 s
-File: /Users/alex/Desktop/work/cb-profiled/cloudbridge/cloudbridge/cloud/providers/azure/azure_client.py
-Function: delete_image at line 608
-
-Line #      Hits         Time  Per Hit   % Time  Line Contents
-==============================================================
-   608                                               @profile
-   609                                               def delete_image(self, image_id):
-   610                                                   url_params = azure_helpers.parse_url(IMAGE_RESOURCE_ID,
-   611                                                                                        image_id)
-   612                                                   if not self.is_gallery_image(image_id):
-   613                                                       name = url_params.get(IMAGE_NAME)
-   614                                                       self.compute_client.images.delete(self.resource_group, name).wait()
-
-Total time: 0 s
-File: /Users/alex/Desktop/work/cb-profiled/cloudbridge/cloudbridge/cloud/providers/azure/azure_client.py
-Function: list_images at line 616
-
-Line #      Hits         Time  Per Hit   % Time  Line Contents
-==============================================================
-   616                                               @profile
-   617                                               def list_images(self):
-   618                                                   azure_images = list(self.compute_client.images.
-   619                                                                       list_by_resource_group(self.resource_group))
-   620                                                   return azure_images
-
-Total time: 0 s
-File: /Users/alex/Desktop/work/cb-profiled/cloudbridge/cloudbridge/cloud/providers/azure/azure_client.py
-Function: list_gallery_refs at line 622
-
-Line #      Hits         Time  Per Hit   % Time  Line Contents
-==============================================================
-   622                                               @profile
-   623                                               def list_gallery_refs(self):
-   624                                                   return gallery_image_references
-
-Total time: 0 s
-File: /Users/alex/Desktop/work/cb-profiled/cloudbridge/cloudbridge/cloud/providers/azure/azure_client.py
-Function: get_image at line 626
-
-Line #      Hits         Time  Per Hit   % Time  Line Contents
-==============================================================
-   626                                               @profile
-   627                                               def get_image(self, image_id):
-   628                                                   url_params = azure_helpers.parse_url(IMAGE_RESOURCE_ID,
-   629                                                                                        image_id)
-   630                                                   if self.is_gallery_image(image_id):
-   631                                                       return GalleryImageReference(publisher=url_params['publisher'],
-   632                                                                                    offer=url_params['offer'],
-   633                                                                                    sku=url_params['sku'],
-   634                                                                                    version=url_params['version'])
-   635                                                   else:
-   636                                                       name = url_params.get(IMAGE_NAME)
-   637                                                       return self.compute_client.images.get(self.resource_group, name)
-
-Total time: 0 s
-File: /Users/alex/Desktop/work/cb-profiled/cloudbridge/cloudbridge/cloud/providers/azure/azure_client.py
-Function: update_image_tags at line 639
-
-Line #      Hits         Time  Per Hit   % Time  Line Contents
-==============================================================
-   639                                               @profile
-   640                                               def update_image_tags(self, image_id, tags):
-   641                                                   url_params = azure_helpers.parse_url(IMAGE_RESOURCE_ID,
-   642                                                                                        image_id)
-   643                                                   if self.is_gallery_image(image_id):
-   644                                                       return True
-   645                                                   else:
-   646                                                       name = url_params.get(IMAGE_NAME)
-   647                                                       return self.compute_client.images. \
-   648                                                           create_or_update(self.resource_group, name,
-   649                                                                            {
-   650                                                                                'tags': tags,
-   651                                                                                'location': self.region_name
-   652                                                                            }).result()
-
-Total time: 0 s
-File: /Users/alex/Desktop/work/cb-profiled/cloudbridge/cloudbridge/cloud/providers/azure/azure_client.py
-Function: list_vm_types at line 654
-
-Line #      Hits         Time  Per Hit   % Time  Line Contents
-==============================================================
-   654                                               @profile
-   655                                               def list_vm_types(self):
-   656                                                   return self.compute_client.virtual_machine_sizes. \
-   657                                                       list(self.region_name)
-
-Total time: 0.043537 s
-File: /Users/alex/Desktop/work/cb-profiled/cloudbridge/cloudbridge/cloud/providers/azure/azure_client.py
-Function: list_networks at line 659
-
-Line #      Hits         Time  Per Hit   % Time  Line Contents
-==============================================================
-   659                                               @profile
-   660                                               def list_networks(self):
-   661        17      42673.0   2510.2     98.0          return self.network_management_client.virtual_networks.list(
-   662        17        864.0     50.8      2.0              self.resource_group)
-
-Total time: 13.8214 s
-File: /Users/alex/Desktop/work/cb-profiled/cloudbridge/cloudbridge/cloud/providers/azure/azure_client.py
-Function: get_network at line 664
-
-Line #      Hits         Time  Per Hit   % Time  Line Contents
-==============================================================
-   664                                               @profile
-   665                                               def get_network(self, network_id):
-   666        51         52.0      1.0      0.0          url_params = azure_helpers.parse_url(NETWORK_RESOURCE_ID,
-   667        51       1048.0     20.5      0.0                                               network_id)
-   668        51         61.0      1.2      0.0          network_name = url_params.get(NETWORK_NAME)
-   669        51      39447.0    773.5      0.3          return self.network_management_client.virtual_networks.get(
-   670        51   13780837.0 270212.5     99.7              self.resource_group, network_name)
-
-Total time: 43.0886 s
-File: /Users/alex/Desktop/work/cb-profiled/cloudbridge/cloudbridge/cloud/providers/azure/azure_client.py
-Function: create_network at line 672
-
-Line #      Hits         Time  Per Hit   % Time  Line Contents
-==============================================================
-   672                                               @profile
-   673                                               def create_network(self, name, params):
-   674         3      23255.0   7751.7      0.1          return self.network_management_client.virtual_networks. \
-   675         3         27.0      9.0      0.0              create_or_update(self.resource_group,
-   676         3          1.0      0.3      0.0                               name,
-   677         3   43065283.0 14355094.3     99.9                               parameters=params).result()
-
-Total time: 31.9886 s
-File: /Users/alex/Desktop/work/cb-profiled/cloudbridge/cloudbridge/cloud/providers/azure/azure_client.py
-Function: delete_network at line 679
-
-Line #      Hits         Time  Per Hit   % Time  Line Contents
-==============================================================
-   679                                               @profile
-   680                                               def delete_network(self, network_id):
-   681         3        100.0     33.3      0.0          url_params = azure_helpers.parse_url(NETWORK_RESOURCE_ID, network_id)
-   682         3          5.0      1.7      0.0          network_name = url_params.get(NETWORK_NAME)
-   683         3       2606.0    868.7      0.0          return self.network_management_client.virtual_networks. \
-   684         3   31985926.0 10661975.3    100.0              delete(self.resource_group, network_name).wait()
-
-Total time: 278.504 s
-File: /Users/alex/Desktop/work/cb-profiled/cloudbridge/cloudbridge/cloud/providers/azure/azure_client.py
-Function: update_network_tags at line 686
-
-Line #      Hits         Time  Per Hit   % Time  Line Contents
-==============================================================
-   686                                               @profile
-   687                                               def update_network_tags(self, network_id, tags):
-   688         9        267.0     29.7      0.0          url_params = azure_helpers.parse_url(NETWORK_RESOURCE_ID, network_id)
-   689         9         13.0      1.4      0.0          network_name = url_params.get(NETWORK_NAME)
-   690         9       7020.0    780.0      0.0          return self.network_management_client.virtual_networks. \
-   691         9         77.0      8.6      0.0              create_or_update(self.resource_group,
-   692         9  278496853.0 30944094.8    100.0                               network_name, tags).result()
-
-Total time: 0.002848 s
-File: /Users/alex/Desktop/work/cb-profiled/cloudbridge/cloudbridge/cloud/providers/azure/azure_client.py
-Function: get_network_id_for_subnet at line 694
-
-Line #      Hits         Time  Per Hit   % Time  Line Contents
-==============================================================
-   694                                               @profile
-   695                                               def get_network_id_for_subnet(self, subnet_id):
-   696        65       2020.0     31.1     70.9          url_params = azure_helpers.parse_url(SUBNET_RESOURCE_ID, subnet_id)
-   697        65         82.0      1.3      2.9          network_id = NETWORK_RESOURCE_ID[0]
-   698       325        235.0      0.7      8.3          for key, val in url_params.items():
-   699       260        482.0      1.9     16.9              network_id = network_id.replace("{" + key + "}", val)
-   700        65         29.0      0.4      1.0          return network_id
-
-Total time: 0.01436 s
-File: /Users/alex/Desktop/work/cb-profiled/cloudbridge/cloudbridge/cloud/providers/azure/azure_client.py
-Function: list_subnets at line 702
-
-Line #      Hits         Time  Per Hit   % Time  Line Contents
-==============================================================
-   702                                               @profile
-   703                                               def list_subnets(self, network_id):
-   704        17        510.0     30.0      3.6          url_params = azure_helpers.parse_url(NETWORK_RESOURCE_ID, network_id)
-   705        17         30.0      1.8      0.2          network_name = url_params.get(NETWORK_NAME)
-   706        17      12977.0    763.4     90.4          return self.network_management_client.subnets. \
-   707        17        843.0     49.6      5.9              list(self.resource_group, network_name)
-
-Total time: 0.692427 s
-File: /Users/alex/Desktop/work/cb-profiled/cloudbridge/cloudbridge/cloud/providers/azure/azure_client.py
-Function: get_subnet at line 709
-
-Line #      Hits         Time  Per Hit   % Time  Line Contents
-==============================================================
-   709                                               @profile
-   710                                               def get_subnet(self, subnet_id):
-   711         4         11.0      2.8      0.0          url_params = azure_helpers.parse_url(SUBNET_RESOURCE_ID,
-   712         4        120.0     30.0      0.0                                               subnet_id)
-   713         3          4.0      1.3      0.0          network_name = url_params.get(NETWORK_NAME)
-   714         3          3.0      1.0      0.0          subnet_name = url_params.get(SUBNET_NAME)
-   715         3       2342.0    780.7      0.3          return self.network_management_client.subnets. \
-   716         3     689947.0 229982.3     99.6              get(self.resource_group, network_name, subnet_name)
-
-Total time: 12.6378 s
-File: /Users/alex/Desktop/work/cb-profiled/cloudbridge/cloudbridge/cloud/providers/azure/azure_client.py
-Function: create_subnet at line 718
-
-Line #      Hits         Time  Per Hit   % Time  Line Contents
-==============================================================
-   718                                               @profile
-   719                                               def create_subnet(self, network_id, subnet_name, params):
-   720         3         89.0     29.7      0.0          url_params = azure_helpers.parse_url(NETWORK_RESOURCE_ID, network_id)
-   721         3          5.0      1.7      0.0          network_name = url_params.get(NETWORK_NAME)
-   722         3       2362.0    787.3      0.0          result_create = self.network_management_client \
-   723                                                       .subnets.create_or_update(
-   724         3         25.0      8.3      0.0                  self.resource_group,
-   725         3          2.0      0.7      0.0                  network_name,
-   726         3          2.0      0.7      0.0                  subnet_name,
-   727         3    1937083.0 645694.3     15.3                  params
-   728                                                       )
-   729         3   10698204.0 3566068.0     84.7          subnet_info = result_create.result()
-   730                                           
-   731         3          6.0      2.0      0.0          return subnet_info
-
-Total time: 0 s
-File: /Users/alex/Desktop/work/cb-profiled/cloudbridge/cloudbridge/cloud/providers/azure/azure_client.py
-Function: __if_subnet_in_use at line 733
-
-Line #      Hits         Time  Per Hit   % Time  Line Contents
-==============================================================
-   733                                               @profile
-   734                                               def __if_subnet_in_use(e):
-   735                                                   # return True if the CloudError exception is due to subnet being in use
-   736                                                   if isinstance(e, CloudError):
-   737                                                       if e.error.error == "InUseSubnetCannotBeDeleted":
-   738                                                           return True
-   739                                                   return False
-
-Total time: 32.2194 s
-File: /Users/alex/Desktop/work/cb-profiled/cloudbridge/cloudbridge/cloud/providers/azure/azure_client.py
-Function: delete_subnet at line 741
-
-Line #      Hits         Time  Per Hit   % Time  Line Contents
-==============================================================
-   741                                               @tenacity.retry(stop=tenacity.stop_after_attempt(5),
-   742                                                               retry=tenacity.retry_if_exception(__if_subnet_in_use),
-   743                                                               wait=tenacity.wait_fixed(5),
-   744                                                               reraise=True)
-   745                                               @profile
-   746                                               def delete_subnet(self, subnet_id):
-   747         3          7.0      2.3      0.0          url_params = azure_helpers.parse_url(SUBNET_RESOURCE_ID,
-   748         3         83.0     27.7      0.0                                               subnet_id)
-   749         3          3.0      1.0      0.0          network_name = url_params.get(NETWORK_NAME)
-   750         3          3.0      1.0      0.0          subnet_name = url_params.get(SUBNET_NAME)
-   751                                           
-   752         3          1.0      0.3      0.0          try:
-   753         3       2586.0    862.0      0.0              result_delete = self.network_management_client \
-   754                                                           .subnets.delete(
-   755         3         34.0     11.3      0.0                      self.resource_group,
-   756         3          2.0      0.7      0.0                      network_name,
-   757         3    1488381.0 496127.0      4.6                      subnet_name
-   758                                                           )
-   759         3   30728309.0 10242769.7     95.4              result_delete.wait()
-   760                                                   except CloudError as cloud_error:
-   761                                                       log.exception(cloud_error.message)
-   762                                                       raise cloud_error
-
-Total time: 8.33538 s
-File: /Users/alex/Desktop/work/cb-profiled/cloudbridge/cloudbridge/cloud/providers/azure/azure_client.py
-Function: create_floating_ip at line 764
-
-Line #      Hits         Time  Per Hit   % Time  Line Contents
-==============================================================
-   764                                               @profile
-   765                                               def create_floating_ip(self, public_ip_name, public_ip_parameters):
-   766         2       1479.0    739.5      0.0          return self.network_management_client.public_ip_addresses. \
-   767         2         16.0      8.0      0.0              create_or_update(self.resource_group,
-   768         2          1.0      0.5      0.0                               public_ip_name,
-   769         2    8333886.0 4166943.0    100.0                               public_ip_parameters).result()
-
-Total time: 0 s
-File: /Users/alex/Desktop/work/cb-profiled/cloudbridge/cloudbridge/cloud/providers/azure/azure_client.py
-Function: get_floating_ip at line 771
-
-Line #      Hits         Time  Per Hit   % Time  Line Contents
-==============================================================
-   771                                               @profile
-   772                                               def get_floating_ip(self, public_ip_id):
-   773                                                   url_params = azure_helpers.parse_url(PUBLIC_IP_RESOURCE_ID,
-   774                                                                                        public_ip_id)
-   775                                                   public_ip_name = url_params.get(PUBLIC_IP_NAME)
-   776                                                   return self.network_management_client. \
-   777                                                       public_ip_addresses.get(self.resource_group, public_ip_name)
-
-Total time: 41.8774 s
-File: /Users/alex/Desktop/work/cb-profiled/cloudbridge/cloudbridge/cloud/providers/azure/azure_client.py
-Function: delete_floating_ip at line 779
-
-Line #      Hits         Time  Per Hit   % Time  Line Contents
-==============================================================
-   779                                               @profile
-   780                                               def delete_floating_ip(self, public_ip_id):
-   781         2          6.0      3.0      0.0          url_params = azure_helpers.parse_url(PUBLIC_IP_RESOURCE_ID,
-   782         2         58.0     29.0      0.0                                               public_ip_id)
-   783         2          2.0      1.0      0.0          public_ip_name = url_params.get(PUBLIC_IP_NAME)
-   784         2       1594.0    797.0      0.0          self.network_management_client. \
-   785         2         17.0      8.5      0.0              public_ip_addresses.delete(self.resource_group,
-   786         2   41875687.0 20937843.5    100.0                                         public_ip_name).wait()
-
-Total time: 0 s
-File: /Users/alex/Desktop/work/cb-profiled/cloudbridge/cloudbridge/cloud/providers/azure/azure_client.py
-Function: update_fip_tags at line 788
-
-Line #      Hits         Time  Per Hit   % Time  Line Contents
-==============================================================
-   788                                               @profile
-   789                                               def update_fip_tags(self, fip_id, tags):
-   790                                                   url_params = azure_helpers.parse_url(PUBLIC_IP_RESOURCE_ID,
-   791                                                                                        fip_id)
-   792                                                   fip_name = url_params.get(PUBLIC_IP_NAME)
-   793                                                   self.network_management_client.public_ip_addresses. \
-   794                                                       create_or_update(self.resource_group,
-   795                                                                        fip_name, tags).result()
-
-Total time: 0.008277 s
-File: /Users/alex/Desktop/work/cb-profiled/cloudbridge/cloudbridge/cloud/providers/azure/azure_client.py
-Function: list_floating_ips at line 797
-
-Line #      Hits         Time  Per Hit   % Time  Line Contents
-==============================================================
-   797                                               @profile
-   798                                               def list_floating_ips(self):
-   799        10       7752.0    775.2     93.7          return self.network_management_client.public_ip_addresses.list(
-   800        10        525.0     52.5      6.3              self.resource_group)
-
-Total time: 0 s
-File: /Users/alex/Desktop/work/cb-profiled/cloudbridge/cloudbridge/cloud/providers/azure/azure_client.py
-Function: list_vm at line 802
-
-Line #      Hits         Time  Per Hit   % Time  Line Contents
-==============================================================
-   802                                               @profile
-   803                                               def list_vm(self):
-   804                                                   return self.compute_client.virtual_machines.list(
-   805                                                       self.resource_group
-   806                                                   )
-
-Total time: 0 s
-File: /Users/alex/Desktop/work/cb-profiled/cloudbridge/cloudbridge/cloud/providers/azure/azure_client.py
-Function: restart_vm at line 808
-
-Line #      Hits         Time  Per Hit   % Time  Line Contents
-==============================================================
-   808                                               @profile
-   809                                               def restart_vm(self, vm_id):
-   810                                                   url_params = azure_helpers.parse_url(VM_RESOURCE_ID,
-   811                                                                                        vm_id)
-   812                                                   vm_name = url_params.get(VM_NAME)
-   813                                                   return self.compute_client.virtual_machines.restart(
-   814                                                       self.resource_group, vm_name).wait()
-
-Total time: 0 s
-File: /Users/alex/Desktop/work/cb-profiled/cloudbridge/cloudbridge/cloud/providers/azure/azure_client.py
-Function: delete_vm at line 816
-
-Line #      Hits         Time  Per Hit   % Time  Line Contents
-==============================================================
-   816                                               @profile
-   817                                               def delete_vm(self, vm_id):
-   818                                                   url_params = azure_helpers.parse_url(VM_RESOURCE_ID,
-   819                                                                                        vm_id)
-   820                                                   vm_name = url_params.get(VM_NAME)
-   821                                                   return self.compute_client.virtual_machines.delete(
-   822                                                       self.resource_group, vm_name).wait()
-
-Total time: 0 s
-File: /Users/alex/Desktop/work/cb-profiled/cloudbridge/cloudbridge/cloud/providers/azure/azure_client.py
-Function: get_vm at line 824
-
-Line #      Hits         Time  Per Hit   % Time  Line Contents
-==============================================================
-   824                                               @profile
-   825                                               def get_vm(self, vm_id):
-   826                                                   url_params = azure_helpers.parse_url(VM_RESOURCE_ID,
-   827                                                                                        vm_id)
-   828                                                   vm_name = url_params.get(VM_NAME)
-   829                                                   return self.compute_client.virtual_machines.get(
-   830                                                       self.resource_group,
-   831                                                       vm_name,
-   832                                                       expand='instanceView'
-   833                                                   )
-
-Total time: 0 s
-File: /Users/alex/Desktop/work/cb-profiled/cloudbridge/cloudbridge/cloud/providers/azure/azure_client.py
-Function: create_vm at line 835
-
-Line #      Hits         Time  Per Hit   % Time  Line Contents
-==============================================================
-   835                                               @profile
-   836                                               def create_vm(self, vm_name, params):
-   837                                                   return self.compute_client.virtual_machines. \
-   838                                                       create_or_update(self.resource_group,
-   839                                                                        vm_name, params).result()
-
-Total time: 0 s
-File: /Users/alex/Desktop/work/cb-profiled/cloudbridge/cloudbridge/cloud/providers/azure/azure_client.py
-Function: update_vm at line 841
-
-Line #      Hits         Time  Per Hit   % Time  Line Contents
-==============================================================
-   841                                               @profile
-   842                                               def update_vm(self, vm_id, params):
-   843                                                   url_params = azure_helpers.parse_url(VM_RESOURCE_ID,
-   844                                                                                        vm_id)
-   845                                                   vm_name = url_params.get(VM_NAME)
-   846                                                   return self.compute_client.virtual_machines. \
-   847                                                       create_or_update(self.resource_group,
-   848                                                                        vm_name, params, raw=True)
-
-Total time: 0 s
-File: /Users/alex/Desktop/work/cb-profiled/cloudbridge/cloudbridge/cloud/providers/azure/azure_client.py
-Function: deallocate_vm at line 850
-
-Line #      Hits         Time  Per Hit   % Time  Line Contents
-==============================================================
-   850                                               @profile
-   851                                               def deallocate_vm(self, vm_id):
-   852                                                   url_params = azure_helpers.parse_url(VM_RESOURCE_ID,
-   853                                                                                        vm_id)
-   854                                                   vm_name = url_params.get(VM_NAME)
-   855                                                   self.compute_client. \
-   856                                                       virtual_machines.deallocate(self.resource_group,
-   857                                                                                   vm_name).wait()
-
-Total time: 0 s
-File: /Users/alex/Desktop/work/cb-profiled/cloudbridge/cloudbridge/cloud/providers/azure/azure_client.py
-Function: generalize_vm at line 859
-
-Line #      Hits         Time  Per Hit   % Time  Line Contents
-==============================================================
-   859                                               @profile
-   860                                               def generalize_vm(self, vm_id):
-   861                                                   url_params = azure_helpers.parse_url(VM_RESOURCE_ID,
-   862                                                                                        vm_id)
-   863                                                   vm_name = url_params.get(VM_NAME)
-   864                                                   self.compute_client.virtual_machines. \
-   865                                                       generalize(self.resource_group, vm_name)
-
-Total time: 0 s
-File: /Users/alex/Desktop/work/cb-profiled/cloudbridge/cloudbridge/cloud/providers/azure/azure_client.py
-Function: start_vm at line 867
-
-Line #      Hits         Time  Per Hit   % Time  Line Contents
-==============================================================
-   867                                               @profile
-   868                                               def start_vm(self, vm_id):
-   869                                                   url_params = azure_helpers.parse_url(VM_RESOURCE_ID,
-   870                                                                                        vm_id)
-   871                                                   vm_name = url_params.get(VM_NAME)
-   872                                                   self.compute_client.virtual_machines. \
-   873                                                       start(self.resource_group,
-   874                                                             vm_name).wait()
-
-Total time: 0 s
-File: /Users/alex/Desktop/work/cb-profiled/cloudbridge/cloudbridge/cloud/providers/azure/azure_client.py
-Function: update_vm_tags at line 876
-
-Line #      Hits         Time  Per Hit   % Time  Line Contents
-==============================================================
-   876                                               @profile
-   877                                               def update_vm_tags(self, vm_id, tags):
-   878                                                   url_params = azure_helpers.parse_url(VM_RESOURCE_ID,
-   879                                                                                        vm_id)
-   880                                                   vm_name = url_params.get(VM_NAME)
-   881                                                   self.compute_client.virtual_machines. \
-   882                                                       create_or_update(self.resource_group,
-   883                                                                        vm_name, tags).result()
-
-Total time: 0 s
-File: /Users/alex/Desktop/work/cb-profiled/cloudbridge/cloudbridge/cloud/providers/azure/azure_client.py
-Function: delete_nic at line 885
-
-Line #      Hits         Time  Per Hit   % Time  Line Contents
-==============================================================
-   885                                               @profile
-   886                                               def delete_nic(self, nic_id):
-   887                                                   nic_params = azure_helpers.\
-   888                                                       parse_url(NETWORK_INTERFACE_RESOURCE_ID, nic_id)
-   889                                                   nic_name = nic_params.get(NETWORK_INTERFACE_NAME)
-   890                                                   self.network_management_client. \
-   891                                                       network_interfaces.delete(self.resource_group,
-   892                                                                                 nic_name).wait()
-
-Total time: 0 s
-File: /Users/alex/Desktop/work/cb-profiled/cloudbridge/cloudbridge/cloud/providers/azure/azure_client.py
-Function: get_nic at line 894
-
-Line #      Hits         Time  Per Hit   % Time  Line Contents
-==============================================================
-   894                                               @profile
-   895                                               def get_nic(self, nic_id):
-   896                                                   nic_params = azure_helpers.\
-   897                                                       parse_url(NETWORK_INTERFACE_RESOURCE_ID, nic_id)
-   898                                                   nic_name = nic_params.get(NETWORK_INTERFACE_NAME)
-   899                                                   return self.network_management_client. \
-   900                                                       network_interfaces.get(self.resource_group, nic_name)
-
-Total time: 0 s
-File: /Users/alex/Desktop/work/cb-profiled/cloudbridge/cloudbridge/cloud/providers/azure/azure_client.py
-Function: update_nic at line 902
-
-Line #      Hits         Time  Per Hit   % Time  Line Contents
-==============================================================
-   902                                               @profile
-   903                                               def update_nic(self, nic_id, params):
-   904                                                   nic_params = azure_helpers.\
-   905                                                       parse_url(NETWORK_INTERFACE_RESOURCE_ID, nic_id)
-   906                                                   nic_name = nic_params.get(NETWORK_INTERFACE_NAME)
-   907                                                   async_nic_creation = self.network_management_client. \
-   908                                                       network_interfaces.create_or_update(
-   909                                                           self.resource_group,
-   910                                                           nic_name,
-   911                                                           params
-   912                                                       )
-   913                                                   nic_info = async_nic_creation.result()
-   914                                                   return nic_info
-
-Total time: 0 s
-File: /Users/alex/Desktop/work/cb-profiled/cloudbridge/cloudbridge/cloud/providers/azure/azure_client.py
-Function: create_nic at line 916
-
-Line #      Hits         Time  Per Hit   % Time  Line Contents
-==============================================================
-   916                                               @profile
-   917                                               def create_nic(self, nic_name, params):
-   918                                                   return self.network_management_client. \
-   919                                                       network_interfaces.create_or_update(
-   920                                                           self.resource_group,
-   921                                                           nic_name,
-   922                                                           params
-   923                                                       ).result()
-
-Total time: 0 s
-File: /Users/alex/Desktop/work/cb-profiled/cloudbridge/cloudbridge/cloud/providers/azure/azure_client.py
-Function: create_public_key at line 925
-
-Line #      Hits         Time  Per Hit   % Time  Line Contents
-==============================================================
-   925                                               @profile
-   926                                               def create_public_key(self, entity):
-   927                                                   return self.table_service. \
-   928                                                       insert_or_replace_entity(self.public_key_storage_table_name,
-   929                                                                                entity)
-
-Total time: 0 s
-File: /Users/alex/Desktop/work/cb-profiled/cloudbridge/cloudbridge/cloud/providers/azure/azure_client.py
-Function: get_public_key at line 931
-
-Line #      Hits         Time  Per Hit   % Time  Line Contents
-==============================================================
-   931                                               @profile
-   932                                               def get_public_key(self, name):
-   933                                                   entities = self.table_service. \
-   934                                                       query_entities(self.public_key_storage_table_name,
-   935                                                                      "Name eq '{0}'".format(name), num_results=1)
-   936                                           
-   937                                                   return entities.items[0] if len(entities.items) > 0 else None
-
-Total time: 0 s
-File: /Users/alex/Desktop/work/cb-profiled/cloudbridge/cloudbridge/cloud/providers/azure/azure_client.py
-Function: delete_public_key at line 939
-
-Line #      Hits         Time  Per Hit   % Time  Line Contents
-==============================================================
-   939                                               @profile
-   940                                               def delete_public_key(self, entity):
-   941                                                   self.table_service.delete_entity(self.public_key_storage_table_name,
-   942                                                                                    entity.PartitionKey, entity.RowKey)
-
-Total time: 0 s
-File: /Users/alex/Desktop/work/cb-profiled/cloudbridge/cloudbridge/cloud/providers/azure/azure_client.py
-Function: list_public_keys at line 944
-
-Line #      Hits         Time  Per Hit   % Time  Line Contents
-==============================================================
-   944                                               @profile
-   945                                               def list_public_keys(self, partition_key, limit=None, marker=None):
-   946                                                   entities = self.table_service. \
-   947                                                       query_entities(self.public_key_storage_table_name,
-   948                                                                      "PartitionKey eq '{0}'".format(partition_key),
-   949                                                                      marker=marker, num_results=limit)
-   950                                                   return (entities.items, entities.next_marker)
-
-Total time: 10.7532 s
-File: /Users/alex/Desktop/work/cb-profiled/cloudbridge/cloudbridge/cloud/providers/azure/azure_client.py
-Function: delete_route_table at line 952
-
-Line #      Hits         Time  Per Hit   % Time  Line Contents
-==============================================================
-   952                                               @profile
-   953                                               def delete_route_table(self, route_table_name):
-   954         1        780.0    780.0      0.0          self.network_management_client. \
-   955         1   10752378.0 10752378.0    100.0              route_tables.delete(self.resource_group, route_table_name
-   956                                                                           ).wait()
-
-Total time: 4.17054 s
-File: /Users/alex/Desktop/work/cb-profiled/cloudbridge/cloudbridge/cloud/providers/azure/azure_client.py
-Function: attach_subnet_to_route_table at line 958
-
-Line #      Hits         Time  Per Hit   % Time  Line Contents
-==============================================================
-   958                                               @profile
-   959                                               def attach_subnet_to_route_table(self, subnet_id, route_table_id):
-   960         1          3.0      3.0      0.0          url_params = azure_helpers.parse_url(SUBNET_RESOURCE_ID,
-   961         1         29.0     29.0      0.0                                               subnet_id)
-   962         1          1.0      1.0      0.0          network_name = url_params.get(NETWORK_NAME)
-   963         1          0.0      0.0      0.0          subnet_name = url_params.get(SUBNET_NAME)
-   964                                           
-   965         1        834.0    834.0      0.0          subnet_info = self.network_management_client.subnets.get(
-   966         1          8.0      8.0      0.0              self.resource_group,
-   967         1          0.0      0.0      0.0              network_name,
-   968         1     194838.0 194838.0      4.7              subnet_name
-   969                                                   )
-   970         1          2.0      2.0      0.0          if subnet_info:
-   971                                                       subnet_info.route_table = {
-   972         1          1.0      1.0      0.0                  'id': route_table_id
-   973                                                       }
-   974                                           
-   975         1        809.0    809.0      0.0              result_create = self.network_management_client. \
-   976                                                           subnets.create_or_update(
-   977         1          9.0      9.0      0.0                   self.resource_group,
-   978         1          1.0      1.0      0.0                   network_name,
-   979         1          1.0      1.0      0.0                   subnet_name,
-   980         1     539670.0 539670.0     12.9                   subnet_info)
-   981         1    3434328.0 3434328.0     82.3              subnet_info = result_create.result()
-   982                                           
-   983         1          2.0      2.0      0.0          return subnet_info
-
-Total time: 4.59488 s
-File: /Users/alex/Desktop/work/cb-profiled/cloudbridge/cloudbridge/cloud/providers/azure/azure_client.py
-Function: detach_subnet_to_route_table at line 985
-
-Line #      Hits         Time  Per Hit   % Time  Line Contents
-==============================================================
-   985                                               @profile
-   986                                               def detach_subnet_to_route_table(self, subnet_id, route_table_id):
-   987         1          3.0      3.0      0.0          url_params = azure_helpers.parse_url(SUBNET_RESOURCE_ID,
-   988         1         22.0     22.0      0.0                                               subnet_id)
-   989         1          1.0      1.0      0.0          network_name = url_params.get(NETWORK_NAME)
-   990         1          0.0      0.0      0.0          subnet_name = url_params.get(SUBNET_NAME)
-   991                                           
-   992         1        584.0    584.0      0.0          subnet_info = self.network_management_client.subnets.get(
-   993         1          7.0      7.0      0.0              self.resource_group,
-   994         1          1.0      1.0      0.0              network_name,
-   995         1     418440.0 418440.0      9.1              subnet_name
-   996                                                   )
-   997                                           
-   998         1          2.0      2.0      0.0          if subnet_info and subnet_info.route_table.id == route_table_id:
-   999         1          1.0      1.0      0.0              subnet_info.route_table = None
-  1000                                           
-  1001         1        711.0    711.0      0.0              result_create = self.network_management_client. \
-  1002                                                           subnets.create_or_update(
-  1003         1          8.0      8.0      0.0                   self.resource_group,
-  1004         1          1.0      1.0      0.0                   network_name,
-  1005         1          1.0      1.0      0.0                   subnet_name,
-  1006         1     743687.0 743687.0     16.2                   subnet_info)
-  1007         1    3431407.0 3431407.0     74.7              subnet_info = result_create.result()
-  1008                                           
-  1009         1          2.0      2.0      0.0          return subnet_info
-
-Total time: 0.004834 s
-File: /Users/alex/Desktop/work/cb-profiled/cloudbridge/cloudbridge/cloud/providers/azure/azure_client.py
-Function: list_route_tables at line 1011
-
-Line #      Hits         Time  Per Hit   % Time  Line Contents
-==============================================================
-  1011                                               @profile
-  1012                                               def list_route_tables(self):
-  1013         6       4533.0    755.5     93.8          return self.network_management_client. \
-  1014         6        301.0     50.2      6.2              route_tables.list(self.resource_group)
-
-Total time: 2.13352 s
-File: /Users/alex/Desktop/work/cb-profiled/cloudbridge/cloudbridge/cloud/providers/azure/azure_client.py
-Function: get_route_table at line 1016
-
-Line #      Hits         Time  Per Hit   % Time  Line Contents
-==============================================================
-  1016                                               @profile
-  1017                                               def get_route_table(self, router_id):
-  1018         8         20.0      2.5      0.0          url_params = azure_helpers.parse_url(ROUTER_RESOURCE_ID,
-  1019         8        173.0     21.6      0.0                                               router_id)
-  1020         8          8.0      1.0      0.0          router_name = url_params.get(ROUTER_NAME)
-  1021         8       6325.0    790.6      0.3          return self.network_management_client. \
-  1022         8    2126996.0 265874.5     99.7              route_tables.get(self.resource_group, router_name)
-
-Total time: 11.1182 s
-File: /Users/alex/Desktop/work/cb-profiled/cloudbridge/cloudbridge/cloud/providers/azure/azure_client.py
-Function: create_route_table at line 1024
-
-Line #      Hits         Time  Per Hit   % Time  Line Contents
-==============================================================
-  1024                                               @profile
-  1025                                               def create_route_table(self, route_table_name, params):
-  1026         1        770.0    770.0      0.0          return self.network_management_client. \
-  1027                                                       route_tables.create_or_update(
-  1028         1          8.0      8.0      0.0               self.resource_group,
-  1029         1   11117413.0 11117413.0    100.0               route_table_name, params).result()
-
-Total time: 93.1682 s
-File: /Users/alex/Desktop/work/cb-profiled/cloudbridge/cloudbridge/cloud/providers/azure/azure_client.py
-Function: update_route_table_tags at line 1031
-
-Line #      Hits         Time  Per Hit   % Time  Line Contents
-==============================================================
-  1031                                               @profile
-  1032                                               def update_route_table_tags(self, route_table_name, tags):
-  1033         3       2496.0    832.0      0.0          self.network_management_client.route_tables. \
-  1034         3         28.0      9.3      0.0              create_or_update(self.resource_group,
-  1035         3   93165711.0 31055237.0    100.0                               route_table_name, tags).result()
-

+ 0 - 1470
results/object_life_cycle.res

@@ -1,1470 +0,0 @@
-cloudbridge.test.test_object_life_cycle.CloudObjectLifeCycleTestCase
-
-
-Test output
- .
-----------------------------------------------------------------------
-Ran 1 test in 64.886s
-
-OK
-
-Wrote profile results to run_tests.py.lprof
-Timer unit: 1e-06 s
-
-Total time: 0.367839 s
-File: /Users/alex/Desktop/work/cb-profiled/cloudbridge/cloudbridge/cloud/providers/azure/azure_client.py
-Function: __init__ at line 160
-
-Line #      Hits         Time  Per Hit   % Time  Line Contents
-==============================================================
-   160                                               @profile
-   161                                               def __init__(self, config):
-   162         1          5.0      5.0      0.0          self._config = config
-   163         1          2.0      2.0      0.0          self.subscription_id = str(config.get('azure_subscription_id'))
-   164         1          0.0      0.0      0.0          self._credentials = ServicePrincipalCredentials(
-   165         1          1.0      1.0      0.0              client_id=config.get('azure_client_id'),
-   166         1          1.0      1.0      0.0              secret=config.get('azure_secret'),
-   167         1     367810.0 367810.0    100.0              tenant=config.get('azure_tenant')
-   168                                                   )
-   169                                           
-   170         1          3.0      3.0      0.0          self._access_token = config.get('azure_access_token')
-   171         1          1.0      1.0      0.0          self._resource_client = None
-   172         1          2.0      2.0      0.0          self._storage_client = None
-   173         1          1.0      1.0      0.0          self._network_management_client = None
-   174         1          1.0      1.0      0.0          self._subscription_client = None
-   175         1          0.0      0.0      0.0          self._compute_client = None
-   176         1          1.0      1.0      0.0          self._access_key_result = None
-   177         1          1.0      1.0      0.0          self._block_blob_service = None
-   178         1          1.0      1.0      0.0          self._table_service = None
-   179         1          1.0      1.0      0.0          self._storage_account = None
-   180                                           
-   181         1          8.0      8.0      0.0          log.debug("azure subscription : %s", self.subscription_id)
-
-Total time: 0 s
-File: /Users/alex/Desktop/work/cb-profiled/cloudbridge/cloudbridge/cloud/providers/azure/azure_client.py
-Function: access_key_result at line 183
-
-Line #      Hits         Time  Per Hit   % Time  Line Contents
-==============================================================
-   183                                               @property
-   184                                               @tenacity.retry(stop=tenacity.stop_after_attempt(5), reraise=True)
-   185                                               @profile
-   186                                               def access_key_result(self):
-   187                                                   if not self._access_key_result:
-   188                                                       storage_account = self.storage_account
-   189                                           
-   190                                                       if self.get_storage_account(storage_account).\
-   191                                                               provisioning_state.value != 'Succeeded':
-   192                                                           log.debug(
-   193                                                               "Storage account %s is not in Succeeded state yet. ",
-   194                                                               storage_account)
-   195                                                           raise WaitStateException(
-   196                                                               "Waited too long for storage account: {0} to "
-   197                                                               "become ready.".format(
-   198                                                                   storage_account,
-   199                                                                   self.get_storage_account(storage_account).
-   200                                                                   provisioning_state))
-   201                                           
-   202                                                       self._access_key_result = self.storage_client.storage_accounts. \
-   203                                                           list_keys(self.resource_group, storage_account)
-   204                                                   return self._access_key_result
-
-Total time: 6e-06 s
-File: /Users/alex/Desktop/work/cb-profiled/cloudbridge/cloudbridge/cloud/providers/azure/azure_client.py
-Function: resource_group at line 206
-
-Line #      Hits         Time  Per Hit   % Time  Line Contents
-==============================================================
-   206                                               @property
-   207                                               @profile
-   208                                               def resource_group(self):
-   209         3          6.0      2.0    100.0          return self._config.get('azure_resource_group')
-
-Total time: 0 s
-File: /Users/alex/Desktop/work/cb-profiled/cloudbridge/cloudbridge/cloud/providers/azure/azure_client.py
-Function: storage_account at line 211
-
-Line #      Hits         Time  Per Hit   % Time  Line Contents
-==============================================================
-   211                                               @property
-   212                                               @profile
-   213                                               def storage_account(self):
-   214                                                   return self._config.get('azure_storage_account')
-
-Total time: 0 s
-File: /Users/alex/Desktop/work/cb-profiled/cloudbridge/cloudbridge/cloud/providers/azure/azure_client.py
-Function: region_name at line 216
-
-Line #      Hits         Time  Per Hit   % Time  Line Contents
-==============================================================
-   216                                               @property
-   217                                               @profile
-   218                                               def region_name(self):
-   219                                                   return self._config.get('azure_region_name')
-
-Total time: 0 s
-File: /Users/alex/Desktop/work/cb-profiled/cloudbridge/cloudbridge/cloud/providers/azure/azure_client.py
-Function: public_key_storage_table_name at line 221
-
-Line #      Hits         Time  Per Hit   % Time  Line Contents
-==============================================================
-   221                                               @property
-   222                                               @profile
-   223                                               def public_key_storage_table_name(self):
-   224                                                   return self._config.get('azure_public_key_storage_table_name')
-
-Total time: 0 s
-File: /Users/alex/Desktop/work/cb-profiled/cloudbridge/cloudbridge/cloud/providers/azure/azure_client.py
-Function: storage_client at line 226
-
-Line #      Hits         Time  Per Hit   % Time  Line Contents
-==============================================================
-   226                                               @property
-   227                                               @profile
-   228                                               def storage_client(self):
-   229                                                   if not self._storage_client:
-   230                                                       self._storage_client = \
-   231                                                           StorageManagementClient(self._credentials,
-   232                                                                                   self.subscription_id)
-   233                                                   return self._storage_client
-
-Total time: 0 s
-File: /Users/alex/Desktop/work/cb-profiled/cloudbridge/cloudbridge/cloud/providers/azure/azure_client.py
-Function: subscription_client at line 235
-
-Line #      Hits         Time  Per Hit   % Time  Line Contents
-==============================================================
-   235                                               @property
-   236                                               @profile
-   237                                               def subscription_client(self):
-   238                                                   if not self._subscription_client:
-   239                                                       self._subscription_client = SubscriptionClient(self._credentials)
-   240                                                   return self._subscription_client
-
-Total time: 0.019954 s
-File: /Users/alex/Desktop/work/cb-profiled/cloudbridge/cloudbridge/cloud/providers/azure/azure_client.py
-Function: resource_client at line 242
-
-Line #      Hits         Time  Per Hit   % Time  Line Contents
-==============================================================
-   242                                               @property
-   243                                               @profile
-   244                                               def resource_client(self):
-   245         1          1.0      1.0      0.0          if not self._resource_client:
-   246                                                       self._resource_client = \
-   247         1          1.0      1.0      0.0                  ResourceManagementClient(self._credentials,
-   248         1      19949.0  19949.0    100.0                                           self.subscription_id)
-   249         1          3.0      3.0      0.0          return self._resource_client
-
-Total time: 0.007118 s
-File: /Users/alex/Desktop/work/cb-profiled/cloudbridge/cloudbridge/cloud/providers/azure/azure_client.py
-Function: compute_client at line 251
-
-Line #      Hits         Time  Per Hit   % Time  Line Contents
-==============================================================
-   251                                               @property
-   252                                               @profile
-   253                                               def compute_client(self):
-   254         3          3.0      1.0      0.0          if not self._compute_client:
-   255                                                       self._compute_client = \
-   256         1          2.0      2.0      0.0                  ComputeManagementClient(self._credentials,
-   257         1       7109.0   7109.0     99.9                                          self.subscription_id)
-   258         3          4.0      1.3      0.1          return self._compute_client
-
-Total time: 0 s
-File: /Users/alex/Desktop/work/cb-profiled/cloudbridge/cloudbridge/cloud/providers/azure/azure_client.py
-Function: network_management_client at line 260
-
-Line #      Hits         Time  Per Hit   % Time  Line Contents
-==============================================================
-   260                                               @property
-   261                                               @profile
-   262                                               def network_management_client(self):
-   263                                                   if not self._network_management_client:
-   264                                                       self._network_management_client = NetworkManagementClient(
-   265                                                           self._credentials, self.subscription_id)
-   266                                                   return self._network_management_client
-
-Total time: 0 s
-File: /Users/alex/Desktop/work/cb-profiled/cloudbridge/cloudbridge/cloud/providers/azure/azure_client.py
-Function: blob_service at line 268
-
-Line #      Hits         Time  Per Hit   % Time  Line Contents
-==============================================================
-   268                                               @property
-   269                                               @profile
-   270                                               def blob_service(self):
-   271                                                   self._get_or_create_storage_account()
-   272                                                   if not self._block_blob_service:
-   273                                                       if self._access_token:
-   274                                                           token_credential = TokenCredential(self._access_token)
-   275                                                           self._block_blob_service = BlockBlobService(
-   276                                                               account_name=self.storage_account,
-   277                                                               token_credential=token_credential)
-   278                                                       else:
-   279                                                           self._block_blob_service = BlockBlobService(
-   280                                                               account_name=self.storage_account,
-   281                                                               account_key=self.access_key_result.keys[0].value)
-   282                                                   return self._block_blob_service
-
-Total time: 0 s
-File: /Users/alex/Desktop/work/cb-profiled/cloudbridge/cloudbridge/cloud/providers/azure/azure_client.py
-Function: table_service at line 284
-
-Line #      Hits         Time  Per Hit   % Time  Line Contents
-==============================================================
-   284                                               @property
-   285                                               @profile
-   286                                               def table_service(self):
-   287                                                   self._get_or_create_storage_account()
-   288                                                   if not self._table_service:
-   289                                                       self._table_service = TableService(
-   290                                                           self.storage_account,
-   291                                                           self.access_key_result.keys[0].value)
-   292                                                   if not self._table_service. \
-   293                                                           exists(table_name=self.public_key_storage_table_name):
-   294                                                       self._table_service.create_table(
-   295                                                           self.public_key_storage_table_name)
-   296                                                   return self._table_service
-
-Total time: 0.693881 s
-File: /Users/alex/Desktop/work/cb-profiled/cloudbridge/cloudbridge/cloud/providers/azure/azure_client.py
-Function: get_resource_group at line 298
-
-Line #      Hits         Time  Per Hit   % Time  Line Contents
-==============================================================
-   298                                               @profile
-   299                                               def get_resource_group(self, name):
-   300         1     693881.0 693881.0    100.0          return self.resource_client.resource_groups.get(name)
-
-Total time: 0 s
-File: /Users/alex/Desktop/work/cb-profiled/cloudbridge/cloudbridge/cloud/providers/azure/azure_client.py
-Function: create_resource_group at line 302
-
-Line #      Hits         Time  Per Hit   % Time  Line Contents
-==============================================================
-   302                                               @profile
-   303                                               def create_resource_group(self, name, parameters):
-   304                                                   return self.resource_client.resource_groups. \
-   305                                                       create_or_update(name, parameters)
-
-Total time: 0 s
-File: /Users/alex/Desktop/work/cb-profiled/cloudbridge/cloudbridge/cloud/providers/azure/azure_client.py
-Function: get_storage_account at line 307
-
-Line #      Hits         Time  Per Hit   % Time  Line Contents
-==============================================================
-   307                                               @profile
-   308                                               def get_storage_account(self, storage_account):
-   309                                                   return self.storage_client.storage_accounts. \
-   310                                                       get_properties(self.resource_group, storage_account)
-
-Total time: 0 s
-File: /Users/alex/Desktop/work/cb-profiled/cloudbridge/cloudbridge/cloud/providers/azure/azure_client.py
-Function: create_storage_account at line 312
-
-Line #      Hits         Time  Per Hit   % Time  Line Contents
-==============================================================
-   312                                               @profile
-   313                                               def create_storage_account(self, name, params):
-   314                                                   return self.storage_client.storage_accounts. \
-   315                                                       create(self.resource_group, name.lower(), params).result()
-
-Total time: 0 s
-File: /Users/alex/Desktop/work/cb-profiled/cloudbridge/cloudbridge/cloud/providers/azure/azure_client.py
-Function: _get_or_create_storage_account at line 319
-
-Line #      Hits         Time  Per Hit   % Time  Line Contents
-==============================================================
-   319                                               @tenacity.retry(stop=tenacity.stop_after_attempt(2),
-   320                                                               retry=tenacity.retry_if_exception_type(CloudError),
-   321                                                               reraise=True)
-   322                                               @profile
-   323                                               def _get_or_create_storage_account(self):
-   324                                                   if self._storage_account:
-   325                                                       return self._storage_account
-   326                                                   else:
-   327                                                       try:
-   328                                                           self._storage_account = \
-   329                                                               self.get_storage_account(self.storage_account)
-   330                                                       except CloudError as cloud_error:
-   331                                                           if cloud_error.error.error == "ResourceNotFound":
-   332                                                               storage_account_params = {
-   333                                                                   'sku': {
-   334                                                                       'name': 'Standard_LRS'
-   335                                                                   },
-   336                                                                   'kind': 'storage',
-   337                                                                   'location': self.region_name,
-   338                                                               }
-   339                                                               try:
-   340                                                                   self._storage_account = \
-   341                                                                       self.create_storage_account(self.storage_account,
-   342                                                                                                   storage_account_params)
-   343                                                               except CloudError as cloud_error2:  # pragma: no cover
-   344                                                                   if cloud_error2.error.error == "AuthorizationFailed":
-   345                                                                       mess = 'The following error was returned by ' \
-   346                                                                              'Azure:\n%s\n\nThis is likely because the' \
-   347                                                                              ' Role associated with the provided ' \
-   348                                                                              'credentials does not allow for Storage ' \
-   349                                                                              'Account creation.\nA Storage Account is ' \
-   350                                                                              'necessary in order to perform the ' \
-   351                                                                              'desired operation. You must either ' \
-   352                                                                              'provide an existing Storage Account name' \
-   353                                                                              ' as part of the configuration, or ' \
-   354                                                                              'elevate the associated Role.\nFor more ' \
-   355                                                                              'information on roles, see: https://docs.' \
-   356                                                                              'microsoft.com/en-us/azure/role-based-' \
-   357                                                                              'access-control/overview\n' % cloud_error2
-   358                                                                       raise ProviderConnectionException(mess)
-   359                                           
-   360                                                                   elif cloud_error2.error.error == \
-   361                                                                           "StorageAccountAlreadyTaken":
-   362                                                                       mess = 'The following error was ' \
-   363                                                                              'returned by Azure:\n%s\n\n' \
-   364                                                                              'Note that Storage Account names must be ' \
-   365                                                                              'unique across Azure (not just in your ' \
-   366                                                                              'subscription).\nFor more information ' \
-   367                                                                              'see https://docs.microsoft.com/en-us/' \
-   368                                                                              'azure/azure-resource-manager/resource-' \
-   369                                                                              'manager-storage-account-name-errors\n' \
-   370                                                                              % cloud_error2
-   371                                                                       raise InvalidLabelException(mess)
-   372                                                                   else:
-   373                                                                       raise cloud_error2
-   374                                                           else:
-   375                                                               raise cloud_error
-
-Total time: 0 s
-File: /Users/alex/Desktop/work/cb-profiled/cloudbridge/cloudbridge/cloud/providers/azure/azure_client.py
-Function: list_locations at line 377
-
-Line #      Hits         Time  Per Hit   % Time  Line Contents
-==============================================================
-   377                                               @profile
-   378                                               def list_locations(self):
-   379                                                   return self.subscription_client.subscriptions. \
-   380                                                       list_locations(self.subscription_id)
-
-Total time: 0 s
-File: /Users/alex/Desktop/work/cb-profiled/cloudbridge/cloudbridge/cloud/providers/azure/azure_client.py
-Function: list_vm_firewall at line 382
-
-Line #      Hits         Time  Per Hit   % Time  Line Contents
-==============================================================
-   382                                               @profile
-   383                                               def list_vm_firewall(self):
-   384                                                   return self.network_management_client.network_security_groups. \
-   385                                                       list(self.resource_group)
-
-Total time: 0 s
-File: /Users/alex/Desktop/work/cb-profiled/cloudbridge/cloudbridge/cloud/providers/azure/azure_client.py
-Function: create_vm_firewall at line 387
-
-Line #      Hits         Time  Per Hit   % Time  Line Contents
-==============================================================
-   387                                               @profile
-   388                                               def create_vm_firewall(self, name, parameters):
-   389                                                   return self.network_management_client.network_security_groups. \
-   390                                                       create_or_update(self.resource_group, name,
-   391                                                                        parameters).result()
-
-Total time: 0 s
-File: /Users/alex/Desktop/work/cb-profiled/cloudbridge/cloudbridge/cloud/providers/azure/azure_client.py
-Function: update_vm_firewall_tags at line 393
-
-Line #      Hits         Time  Per Hit   % Time  Line Contents
-==============================================================
-   393                                               @profile
-   394                                               def update_vm_firewall_tags(self, fw_id, tags):
-   395                                                   url_params = azure_helpers.parse_url(VM_FIREWALL_RESOURCE_ID,
-   396                                                                                        fw_id)
-   397                                                   name = url_params.get(VM_FIREWALL_NAME)
-   398                                                   return self.network_management_client.network_security_groups. \
-   399                                                       create_or_update(self.resource_group, name,
-   400                                                                        {'tags': tags,
-   401                                                                         'location': self.region_name}).result()
-
-Total time: 0 s
-File: /Users/alex/Desktop/work/cb-profiled/cloudbridge/cloudbridge/cloud/providers/azure/azure_client.py
-Function: get_vm_firewall at line 403
-
-Line #      Hits         Time  Per Hit   % Time  Line Contents
-==============================================================
-   403                                               @profile
-   404                                               def get_vm_firewall(self, fw_id):
-   405                                                   url_params = azure_helpers.parse_url(VM_FIREWALL_RESOURCE_ID,
-   406                                                                                        fw_id)
-   407                                                   fw_name = url_params.get(VM_FIREWALL_NAME)
-   408                                                   return self.network_management_client.network_security_groups. \
-   409                                                       get(self.resource_group, fw_name)
-
-Total time: 0 s
-File: /Users/alex/Desktop/work/cb-profiled/cloudbridge/cloudbridge/cloud/providers/azure/azure_client.py
-Function: delete_vm_firewall at line 411
-
-Line #      Hits         Time  Per Hit   % Time  Line Contents
-==============================================================
-   411                                               @profile
-   412                                               def delete_vm_firewall(self, fw_id):
-   413                                                   url_params = azure_helpers.parse_url(VM_FIREWALL_RESOURCE_ID,
-   414                                                                                        fw_id)
-   415                                                   name = url_params.get(VM_FIREWALL_NAME)
-   416                                                   self.network_management_client \
-   417                                                       .network_security_groups.delete(self.resource_group, name).wait()
-
-Total time: 0 s
-File: /Users/alex/Desktop/work/cb-profiled/cloudbridge/cloudbridge/cloud/providers/azure/azure_client.py
-Function: create_vm_firewall_rule at line 419
-
-Line #      Hits         Time  Per Hit   % Time  Line Contents
-==============================================================
-   419                                               @profile
-   420                                               def create_vm_firewall_rule(self, fw_id,
-   421                                                                           rule_name, parameters):
-   422                                                   url_params = azure_helpers.parse_url(VM_FIREWALL_RESOURCE_ID,
-   423                                                                                        fw_id)
-   424                                                   vm_firewall_name = url_params.get(VM_FIREWALL_NAME)
-   425                                                   return self.network_management_client.security_rules. \
-   426                                                       create_or_update(self.resource_group, vm_firewall_name,
-   427                                                                        rule_name, parameters).result()
-
-Total time: 0 s
-File: /Users/alex/Desktop/work/cb-profiled/cloudbridge/cloudbridge/cloud/providers/azure/azure_client.py
-Function: delete_vm_firewall_rule at line 429
-
-Line #      Hits         Time  Per Hit   % Time  Line Contents
-==============================================================
-   429                                               @profile
-   430                                               def delete_vm_firewall_rule(self, fw_rule_id, vm_firewall):
-   431                                                   url_params = azure_helpers.parse_url(VM_FIREWALL_RULE_RESOURCE_ID,
-   432                                                                                        fw_rule_id)
-   433                                                   name = url_params.get(VM_FIREWALL_RULE_NAME)
-   434                                                   return self.network_management_client.security_rules. \
-   435                                                       delete(self.resource_group, vm_firewall, name).result()
-
-Total time: 0 s
-File: /Users/alex/Desktop/work/cb-profiled/cloudbridge/cloudbridge/cloud/providers/azure/azure_client.py
-Function: list_containers at line 437
-
-Line #      Hits         Time  Per Hit   % Time  Line Contents
-==============================================================
-   437                                               @profile
-   438                                               def list_containers(self, prefix=None, limit=None, marker=None):
-   439                                                   results = self.blob_service.list_containers(prefix=prefix,
-   440                                                                                               num_results=limit,
-   441                                                                                               marker=marker)
-   442                                                   return (results.items, results.next_marker)
-
-Total time: 0 s
-File: /Users/alex/Desktop/work/cb-profiled/cloudbridge/cloudbridge/cloud/providers/azure/azure_client.py
-Function: create_container at line 444
-
-Line #      Hits         Time  Per Hit   % Time  Line Contents
-==============================================================
-   444                                               @profile
-   445                                               def create_container(self, container_name):
-   446                                                   try:
-   447                                                       self.blob_service.create_container(container_name,
-   448                                                                                          fail_on_exist=True)
-   449                                                   except AzureConflictHttpError as cloud_error:
-   450                                                       if cloud_error.error_code == "ContainerAlreadyExists":
-   451                                                           msg = "The given Bucket name '%s' already exists. Please " \
-   452                                                                 "use the `get` or `find` method to get a reference to " \
-   453                                                                 "an existing Bucket, or specify a new Bucket name to " \
-   454                                                                 "create.\nNote that in Azure, Buckets are contained " \
-   455                                                                 "in Storage Accounts." % container_name
-   456                                                           raise DuplicateResourceException(msg)
-   457                                           
-   458                                                   return self.blob_service.get_container_properties(container_name)
-
-Total time: 0 s
-File: /Users/alex/Desktop/work/cb-profiled/cloudbridge/cloudbridge/cloud/providers/azure/azure_client.py
-Function: get_container at line 460
-
-Line #      Hits         Time  Per Hit   % Time  Line Contents
-==============================================================
-   460                                               @profile
-   461                                               def get_container(self, container_name):
-   462                                                   return self.blob_service.get_container_properties(container_name)
-
-Total time: 0 s
-File: /Users/alex/Desktop/work/cb-profiled/cloudbridge/cloudbridge/cloud/providers/azure/azure_client.py
-Function: delete_container at line 464
-
-Line #      Hits         Time  Per Hit   % Time  Line Contents
-==============================================================
-   464                                               @profile
-   465                                               def delete_container(self, container_name):
-   466                                                   self.blob_service.delete_container(container_name)
-
-Total time: 0 s
-File: /Users/alex/Desktop/work/cb-profiled/cloudbridge/cloudbridge/cloud/providers/azure/azure_client.py
-Function: list_blobs at line 468
-
-Line #      Hits         Time  Per Hit   % Time  Line Contents
-==============================================================
-   468                                               @profile
-   469                                               def list_blobs(self, container_name, prefix=None):
-   470                                                   return self.blob_service.list_blobs(container_name, prefix=prefix)
-
-Total time: 0 s
-File: /Users/alex/Desktop/work/cb-profiled/cloudbridge/cloudbridge/cloud/providers/azure/azure_client.py
-Function: get_blob at line 472
-
-Line #      Hits         Time  Per Hit   % Time  Line Contents
-==============================================================
-   472                                               @profile
-   473                                               def get_blob(self, container_name, blob_name):
-   474                                                   return self.blob_service.get_blob_properties(container_name, blob_name)
-
-Total time: 0 s
-File: /Users/alex/Desktop/work/cb-profiled/cloudbridge/cloudbridge/cloud/providers/azure/azure_client.py
-Function: create_blob_from_text at line 476
-
-Line #      Hits         Time  Per Hit   % Time  Line Contents
-==============================================================
-   476                                               @profile
-   477                                               def create_blob_from_text(self, container_name, blob_name, text):
-   478                                                   self.blob_service.create_blob_from_text(container_name,
-   479                                                                                           blob_name, text)
-
-Total time: 0 s
-File: /Users/alex/Desktop/work/cb-profiled/cloudbridge/cloudbridge/cloud/providers/azure/azure_client.py
-Function: create_blob_from_file at line 481
-
-Line #      Hits         Time  Per Hit   % Time  Line Contents
-==============================================================
-   481                                               @profile
-   482                                               def create_blob_from_file(self, container_name, blob_name, file_path):
-   483                                                   self.blob_service.create_blob_from_path(container_name,
-   484                                                                                           blob_name, file_path)
-
-Total time: 0 s
-File: /Users/alex/Desktop/work/cb-profiled/cloudbridge/cloudbridge/cloud/providers/azure/azure_client.py
-Function: delete_blob at line 486
-
-Line #      Hits         Time  Per Hit   % Time  Line Contents
-==============================================================
-   486                                               @profile
-   487                                               def delete_blob(self, container_name, blob_name):
-   488                                                   self.blob_service.delete_blob(container_name, blob_name)
-
-Total time: 0 s
-File: /Users/alex/Desktop/work/cb-profiled/cloudbridge/cloudbridge/cloud/providers/azure/azure_client.py
-Function: get_blob_url at line 490
-
-Line #      Hits         Time  Per Hit   % Time  Line Contents
-==============================================================
-   490                                               @profile
-   491                                               def get_blob_url(self, container_name, blob_name, expiry_time):
-   492                                                   expiry_date = datetime.datetime.utcnow() + datetime.timedelta(
-   493                                                       seconds=expiry_time)
-   494                                                   sas = self.blob_service.generate_blob_shared_access_signature(
-   495                                                       container_name, blob_name, permission=BlobPermissions.READ,
-   496                                                       expiry=expiry_date)
-   497                                                   return self.blob_service.make_blob_url(container_name, blob_name,
-   498                                                                                          sas_token=sas)
-
-Total time: 0 s
-File: /Users/alex/Desktop/work/cb-profiled/cloudbridge/cloudbridge/cloud/providers/azure/azure_client.py
-Function: get_blob_content at line 500
-
-Line #      Hits         Time  Per Hit   % Time  Line Contents
-==============================================================
-   500                                               @profile
-   501                                               def get_blob_content(self, container_name, blob_name):
-   502                                                   out_stream = BytesIO()
-   503                                                   self.blob_service.get_blob_to_stream(container_name,
-   504                                                                                        blob_name, out_stream)
-   505                                                   return out_stream
-
-Total time: 31.2022 s
-File: /Users/alex/Desktop/work/cb-profiled/cloudbridge/cloudbridge/cloud/providers/azure/azure_client.py
-Function: create_empty_disk at line 507
-
-Line #      Hits         Time  Per Hit   % Time  Line Contents
-==============================================================
-   507                                               @profile
-   508                                               def create_empty_disk(self, disk_name, params):
-   509         1       7886.0   7886.0      0.0          return self.compute_client.disks.create_or_update(
-   510         1         15.0     15.0      0.0              self.resource_group,
-   511         1          1.0      1.0      0.0              disk_name,
-   512         1   31194332.0 31194332.0    100.0              params
-   513                                                   ).result()
-
-Total time: 0 s
-File: /Users/alex/Desktop/work/cb-profiled/cloudbridge/cloudbridge/cloud/providers/azure/azure_client.py
-Function: create_snapshot_disk at line 515
-
-Line #      Hits         Time  Per Hit   % Time  Line Contents
-==============================================================
-   515                                               @profile
-   516                                               def create_snapshot_disk(self, disk_name, params):
-   517                                                   return self.compute_client.disks.create_or_update(
-   518                                                       self.resource_group,
-   519                                                       disk_name,
-   520                                                       params
-   521                                                   ).result()
-
-Total time: 0.664942 s
-File: /Users/alex/Desktop/work/cb-profiled/cloudbridge/cloudbridge/cloud/providers/azure/azure_client.py
-Function: get_disk at line 523
-
-Line #      Hits         Time  Per Hit   % Time  Line Contents
-==============================================================
-   523                                               @profile
-   524                                               def get_disk(self, disk_id):
-   525         1         10.0     10.0      0.0          url_params = azure_helpers.parse_url(VOLUME_RESOURCE_ID,
-   526         1         34.0     34.0      0.0                                               disk_id)
-   527         1          2.0      2.0      0.0          disk_name = url_params.get(VOLUME_NAME)
-   528         1     664896.0 664896.0    100.0          return self.compute_client.disks.get(self.resource_group, disk_name)
-
-Total time: 0 s
-File: /Users/alex/Desktop/work/cb-profiled/cloudbridge/cloudbridge/cloud/providers/azure/azure_client.py
-Function: list_disks at line 530
-
-Line #      Hits         Time  Per Hit   % Time  Line Contents
-==============================================================
-   530                                               @profile
-   531                                               def list_disks(self):
-   532                                                   return self.compute_client.disks. \
-   533                                                       list_by_resource_group(self.resource_group)
-
-Total time: 30.591 s
-File: /Users/alex/Desktop/work/cb-profiled/cloudbridge/cloudbridge/cloud/providers/azure/azure_client.py
-Function: delete_disk at line 535
-
-Line #      Hits         Time  Per Hit   % Time  Line Contents
-==============================================================
-   535                                               @profile
-   536                                               def delete_disk(self, disk_id):
-   537         1          3.0      3.0      0.0          url_params = azure_helpers.parse_url(VOLUME_RESOURCE_ID,
-   538         1         27.0     27.0      0.0                                               disk_id)
-   539         1          1.0      1.0      0.0          disk_name = url_params.get(VOLUME_NAME)
-   540         1   30590981.0 30590981.0    100.0          self.compute_client.disks.delete(self.resource_group, disk_name).wait()
-
-Total time: 0 s
-File: /Users/alex/Desktop/work/cb-profiled/cloudbridge/cloudbridge/cloud/providers/azure/azure_client.py
-Function: update_disk_tags at line 542
-
-Line #      Hits         Time  Per Hit   % Time  Line Contents
-==============================================================
-   542                                               @profile
-   543                                               def update_disk_tags(self, disk_id, tags):
-   544                                                   url_params = azure_helpers.parse_url(VOLUME_RESOURCE_ID,
-   545                                                                                        disk_id)
-   546                                                   disk_name = url_params.get(VOLUME_NAME)
-   547                                                   return self.compute_client.disks.update(
-   548                                                       self.resource_group,
-   549                                                       disk_name,
-   550                                                       {'tags': tags},
-   551                                                       raw=True
-   552                                                   )
-
-Total time: 0 s
-File: /Users/alex/Desktop/work/cb-profiled/cloudbridge/cloudbridge/cloud/providers/azure/azure_client.py
-Function: list_snapshots at line 554
-
-Line #      Hits         Time  Per Hit   % Time  Line Contents
-==============================================================
-   554                                               @profile
-   555                                               def list_snapshots(self):
-   556                                                   return self.compute_client.snapshots. \
-   557                                                       list_by_resource_group(self.resource_group)
-
-Total time: 0 s
-File: /Users/alex/Desktop/work/cb-profiled/cloudbridge/cloudbridge/cloud/providers/azure/azure_client.py
-Function: get_snapshot at line 559
-
-Line #      Hits         Time  Per Hit   % Time  Line Contents
-==============================================================
-   559                                               @profile
-   560                                               def get_snapshot(self, snapshot_id):
-   561                                                   url_params = azure_helpers.parse_url(SNAPSHOT_RESOURCE_ID,
-   562                                                                                        snapshot_id)
-   563                                                   snapshot_name = url_params.get(SNAPSHOT_NAME)
-   564                                                   return self.compute_client.snapshots.get(self.resource_group,
-   565                                                                                            snapshot_name)
-
-Total time: 0 s
-File: /Users/alex/Desktop/work/cb-profiled/cloudbridge/cloudbridge/cloud/providers/azure/azure_client.py
-Function: create_snapshot at line 567
-
-Line #      Hits         Time  Per Hit   % Time  Line Contents
-==============================================================
-   567                                               @profile
-   568                                               def create_snapshot(self, snapshot_name, params):
-   569                                                   return self.compute_client.snapshots.create_or_update(
-   570                                                       self.resource_group,
-   571                                                       snapshot_name,
-   572                                                       params
-   573                                                   ).result()
-
-Total time: 0 s
-File: /Users/alex/Desktop/work/cb-profiled/cloudbridge/cloudbridge/cloud/providers/azure/azure_client.py
-Function: delete_snapshot at line 575
-
-Line #      Hits         Time  Per Hit   % Time  Line Contents
-==============================================================
-   575                                               @profile
-   576                                               def delete_snapshot(self, snapshot_id):
-   577                                                   url_params = azure_helpers.parse_url(SNAPSHOT_RESOURCE_ID,
-   578                                                                                        snapshot_id)
-   579                                                   snapshot_name = url_params.get(SNAPSHOT_NAME)
-   580                                                   self.compute_client.snapshots.delete(self.resource_group,
-   581                                                                                        snapshot_name).wait()
-
-Total time: 0 s
-File: /Users/alex/Desktop/work/cb-profiled/cloudbridge/cloudbridge/cloud/providers/azure/azure_client.py
-Function: update_snapshot_tags at line 583
-
-Line #      Hits         Time  Per Hit   % Time  Line Contents
-==============================================================
-   583                                               @profile
-   584                                               def update_snapshot_tags(self, snapshot_id, tags):
-   585                                                   url_params = azure_helpers.parse_url(SNAPSHOT_RESOURCE_ID,
-   586                                                                                        snapshot_id)
-   587                                                   snapshot_name = url_params.get(SNAPSHOT_NAME)
-   588                                                   return self.compute_client.snapshots.update(
-   589                                                       self.resource_group,
-   590                                                       snapshot_name,
-   591                                                       {'tags': tags},
-   592                                                       raw=True
-   593                                                   )
-
-Total time: 0 s
-File: /Users/alex/Desktop/work/cb-profiled/cloudbridge/cloudbridge/cloud/providers/azure/azure_client.py
-Function: is_gallery_image at line 595
-
-Line #      Hits         Time  Per Hit   % Time  Line Contents
-==============================================================
-   595                                               @profile
-   596                                               def is_gallery_image(self, image_id):
-   597                                                   url_params = azure_helpers.parse_url(IMAGE_RESOURCE_ID,
-   598                                                                                        image_id)
-   599                                                   # If it is a gallery image, it will always have an offer
-   600                                                   return 'offer' in url_params
-
-Total time: 0 s
-File: /Users/alex/Desktop/work/cb-profiled/cloudbridge/cloudbridge/cloud/providers/azure/azure_client.py
-Function: create_image at line 602
-
-Line #      Hits         Time  Per Hit   % Time  Line Contents
-==============================================================
-   602                                               @profile
-   603                                               def create_image(self, name, params):
-   604                                                   return self.compute_client.images. \
-   605                                                       create_or_update(self.resource_group, name,
-   606                                                                        params).result()
-
-Total time: 0 s
-File: /Users/alex/Desktop/work/cb-profiled/cloudbridge/cloudbridge/cloud/providers/azure/azure_client.py
-Function: delete_image at line 608
-
-Line #      Hits         Time  Per Hit   % Time  Line Contents
-==============================================================
-   608                                               @profile
-   609                                               def delete_image(self, image_id):
-   610                                                   url_params = azure_helpers.parse_url(IMAGE_RESOURCE_ID,
-   611                                                                                        image_id)
-   612                                                   if not self.is_gallery_image(image_id):
-   613                                                       name = url_params.get(IMAGE_NAME)
-   614                                                       self.compute_client.images.delete(self.resource_group, name).wait()
-
-Total time: 0 s
-File: /Users/alex/Desktop/work/cb-profiled/cloudbridge/cloudbridge/cloud/providers/azure/azure_client.py
-Function: list_images at line 616
-
-Line #      Hits         Time  Per Hit   % Time  Line Contents
-==============================================================
-   616                                               @profile
-   617                                               def list_images(self):
-   618                                                   azure_images = list(self.compute_client.images.
-   619                                                                       list_by_resource_group(self.resource_group))
-   620                                                   return azure_images
-
-Total time: 0 s
-File: /Users/alex/Desktop/work/cb-profiled/cloudbridge/cloudbridge/cloud/providers/azure/azure_client.py
-Function: list_gallery_refs at line 622
-
-Line #      Hits         Time  Per Hit   % Time  Line Contents
-==============================================================
-   622                                               @profile
-   623                                               def list_gallery_refs(self):
-   624                                                   return gallery_image_references
-
-Total time: 0 s
-File: /Users/alex/Desktop/work/cb-profiled/cloudbridge/cloudbridge/cloud/providers/azure/azure_client.py
-Function: get_image at line 626
-
-Line #      Hits         Time  Per Hit   % Time  Line Contents
-==============================================================
-   626                                               @profile
-   627                                               def get_image(self, image_id):
-   628                                                   url_params = azure_helpers.parse_url(IMAGE_RESOURCE_ID,
-   629                                                                                        image_id)
-   630                                                   if self.is_gallery_image(image_id):
-   631                                                       return GalleryImageReference(publisher=url_params['publisher'],
-   632                                                                                    offer=url_params['offer'],
-   633                                                                                    sku=url_params['sku'],
-   634                                                                                    version=url_params['version'])
-   635                                                   else:
-   636                                                       name = url_params.get(IMAGE_NAME)
-   637                                                       return self.compute_client.images.get(self.resource_group, name)
-
-Total time: 0 s
-File: /Users/alex/Desktop/work/cb-profiled/cloudbridge/cloudbridge/cloud/providers/azure/azure_client.py
-Function: update_image_tags at line 639
-
-Line #      Hits         Time  Per Hit   % Time  Line Contents
-==============================================================
-   639                                               @profile
-   640                                               def update_image_tags(self, image_id, tags):
-   641                                                   url_params = azure_helpers.parse_url(IMAGE_RESOURCE_ID,
-   642                                                                                        image_id)
-   643                                                   if self.is_gallery_image(image_id):
-   644                                                       return True
-   645                                                   else:
-   646                                                       name = url_params.get(IMAGE_NAME)
-   647                                                       return self.compute_client.images. \
-   648                                                           create_or_update(self.resource_group, name,
-   649                                                                            {
-   650                                                                                'tags': tags,
-   651                                                                                'location': self.region_name
-   652                                                                            }).result()
-
-Total time: 0 s
-File: /Users/alex/Desktop/work/cb-profiled/cloudbridge/cloudbridge/cloud/providers/azure/azure_client.py
-Function: list_vm_types at line 654
-
-Line #      Hits         Time  Per Hit   % Time  Line Contents
-==============================================================
-   654                                               @profile
-   655                                               def list_vm_types(self):
-   656                                                   return self.compute_client.virtual_machine_sizes. \
-   657                                                       list(self.region_name)
-
-Total time: 0 s
-File: /Users/alex/Desktop/work/cb-profiled/cloudbridge/cloudbridge/cloud/providers/azure/azure_client.py
-Function: list_networks at line 659
-
-Line #      Hits         Time  Per Hit   % Time  Line Contents
-==============================================================
-   659                                               @profile
-   660                                               def list_networks(self):
-   661                                                   return self.network_management_client.virtual_networks.list(
-   662                                                       self.resource_group)
-
-Total time: 0 s
-File: /Users/alex/Desktop/work/cb-profiled/cloudbridge/cloudbridge/cloud/providers/azure/azure_client.py
-Function: get_network at line 664
-
-Line #      Hits         Time  Per Hit   % Time  Line Contents
-==============================================================
-   664                                               @profile
-   665                                               def get_network(self, network_id):
-   666                                                   url_params = azure_helpers.parse_url(NETWORK_RESOURCE_ID,
-   667                                                                                        network_id)
-   668                                                   network_name = url_params.get(NETWORK_NAME)
-   669                                                   return self.network_management_client.virtual_networks.get(
-   670                                                       self.resource_group, network_name)
-
-Total time: 0 s
-File: /Users/alex/Desktop/work/cb-profiled/cloudbridge/cloudbridge/cloud/providers/azure/azure_client.py
-Function: create_network at line 672
-
-Line #      Hits         Time  Per Hit   % Time  Line Contents
-==============================================================
-   672                                               @profile
-   673                                               def create_network(self, name, params):
-   674                                                   return self.network_management_client.virtual_networks. \
-   675                                                       create_or_update(self.resource_group,
-   676                                                                        name,
-   677                                                                        parameters=params).result()
-
-Total time: 0 s
-File: /Users/alex/Desktop/work/cb-profiled/cloudbridge/cloudbridge/cloud/providers/azure/azure_client.py
-Function: delete_network at line 679
-
-Line #      Hits         Time  Per Hit   % Time  Line Contents
-==============================================================
-   679                                               @profile
-   680                                               def delete_network(self, network_id):
-   681                                                   url_params = azure_helpers.parse_url(NETWORK_RESOURCE_ID, network_id)
-   682                                                   network_name = url_params.get(NETWORK_NAME)
-   683                                                   return self.network_management_client.virtual_networks. \
-   684                                                       delete(self.resource_group, network_name).wait()
-
-Total time: 0 s
-File: /Users/alex/Desktop/work/cb-profiled/cloudbridge/cloudbridge/cloud/providers/azure/azure_client.py
-Function: update_network_tags at line 686
-
-Line #      Hits         Time  Per Hit   % Time  Line Contents
-==============================================================
-   686                                               @profile
-   687                                               def update_network_tags(self, network_id, tags):
-   688                                                   url_params = azure_helpers.parse_url(NETWORK_RESOURCE_ID, network_id)
-   689                                                   network_name = url_params.get(NETWORK_NAME)
-   690                                                   return self.network_management_client.virtual_networks. \
-   691                                                       create_or_update(self.resource_group,
-   692                                                                        network_name, tags).result()
-
-Total time: 0 s
-File: /Users/alex/Desktop/work/cb-profiled/cloudbridge/cloudbridge/cloud/providers/azure/azure_client.py
-Function: get_network_id_for_subnet at line 694
-
-Line #      Hits         Time  Per Hit   % Time  Line Contents
-==============================================================
-   694                                               @profile
-   695                                               def get_network_id_for_subnet(self, subnet_id):
-   696                                                   url_params = azure_helpers.parse_url(SUBNET_RESOURCE_ID, subnet_id)
-   697                                                   network_id = NETWORK_RESOURCE_ID[0]
-   698                                                   for key, val in url_params.items():
-   699                                                       network_id = network_id.replace("{" + key + "}", val)
-   700                                                   return network_id
-
-Total time: 0 s
-File: /Users/alex/Desktop/work/cb-profiled/cloudbridge/cloudbridge/cloud/providers/azure/azure_client.py
-Function: list_subnets at line 702
-
-Line #      Hits         Time  Per Hit   % Time  Line Contents
-==============================================================
-   702                                               @profile
-   703                                               def list_subnets(self, network_id):
-   704                                                   url_params = azure_helpers.parse_url(NETWORK_RESOURCE_ID, network_id)
-   705                                                   network_name = url_params.get(NETWORK_NAME)
-   706                                                   return self.network_management_client.subnets. \
-   707                                                       list(self.resource_group, network_name)
-
-Total time: 0 s
-File: /Users/alex/Desktop/work/cb-profiled/cloudbridge/cloudbridge/cloud/providers/azure/azure_client.py
-Function: get_subnet at line 709
-
-Line #      Hits         Time  Per Hit   % Time  Line Contents
-==============================================================
-   709                                               @profile
-   710                                               def get_subnet(self, subnet_id):
-   711                                                   url_params = azure_helpers.parse_url(SUBNET_RESOURCE_ID,
-   712                                                                                        subnet_id)
-   713                                                   network_name = url_params.get(NETWORK_NAME)
-   714                                                   subnet_name = url_params.get(SUBNET_NAME)
-   715                                                   return self.network_management_client.subnets. \
-   716                                                       get(self.resource_group, network_name, subnet_name)
-
-Total time: 0 s
-File: /Users/alex/Desktop/work/cb-profiled/cloudbridge/cloudbridge/cloud/providers/azure/azure_client.py
-Function: create_subnet at line 718
-
-Line #      Hits         Time  Per Hit   % Time  Line Contents
-==============================================================
-   718                                               @profile
-   719                                               def create_subnet(self, network_id, subnet_name, params):
-   720                                                   url_params = azure_helpers.parse_url(NETWORK_RESOURCE_ID, network_id)
-   721                                                   network_name = url_params.get(NETWORK_NAME)
-   722                                                   result_create = self.network_management_client \
-   723                                                       .subnets.create_or_update(
-   724                                                           self.resource_group,
-   725                                                           network_name,
-   726                                                           subnet_name,
-   727                                                           params
-   728                                                       )
-   729                                                   subnet_info = result_create.result()
-   730                                           
-   731                                                   return subnet_info
-
-Total time: 0 s
-File: /Users/alex/Desktop/work/cb-profiled/cloudbridge/cloudbridge/cloud/providers/azure/azure_client.py
-Function: __if_subnet_in_use at line 733
-
-Line #      Hits         Time  Per Hit   % Time  Line Contents
-==============================================================
-   733                                               @profile
-   734                                               def __if_subnet_in_use(e):
-   735                                                   # return True if the CloudError exception is due to subnet being in use
-   736                                                   if isinstance(e, CloudError):
-   737                                                       if e.error.error == "InUseSubnetCannotBeDeleted":
-   738                                                           return True
-   739                                                   return False
-
-Total time: 0 s
-File: /Users/alex/Desktop/work/cb-profiled/cloudbridge/cloudbridge/cloud/providers/azure/azure_client.py
-Function: delete_subnet at line 741
-
-Line #      Hits         Time  Per Hit   % Time  Line Contents
-==============================================================
-   741                                               @tenacity.retry(stop=tenacity.stop_after_attempt(5),
-   742                                                               retry=tenacity.retry_if_exception(__if_subnet_in_use),
-   743                                                               wait=tenacity.wait_fixed(5),
-   744                                                               reraise=True)
-   745                                               @profile
-   746                                               def delete_subnet(self, subnet_id):
-   747                                                   url_params = azure_helpers.parse_url(SUBNET_RESOURCE_ID,
-   748                                                                                        subnet_id)
-   749                                                   network_name = url_params.get(NETWORK_NAME)
-   750                                                   subnet_name = url_params.get(SUBNET_NAME)
-   751                                           
-   752                                                   try:
-   753                                                       result_delete = self.network_management_client \
-   754                                                           .subnets.delete(
-   755                                                               self.resource_group,
-   756                                                               network_name,
-   757                                                               subnet_name
-   758                                                           )
-   759                                                       result_delete.wait()
-   760                                                   except CloudError as cloud_error:
-   761                                                       log.exception(cloud_error.message)
-   762                                                       raise cloud_error
-
-Total time: 0 s
-File: /Users/alex/Desktop/work/cb-profiled/cloudbridge/cloudbridge/cloud/providers/azure/azure_client.py
-Function: create_floating_ip at line 764
-
-Line #      Hits         Time  Per Hit   % Time  Line Contents
-==============================================================
-   764                                               @profile
-   765                                               def create_floating_ip(self, public_ip_name, public_ip_parameters):
-   766                                                   return self.network_management_client.public_ip_addresses. \
-   767                                                       create_or_update(self.resource_group,
-   768                                                                        public_ip_name,
-   769                                                                        public_ip_parameters).result()
-
-Total time: 0 s
-File: /Users/alex/Desktop/work/cb-profiled/cloudbridge/cloudbridge/cloud/providers/azure/azure_client.py
-Function: get_floating_ip at line 771
-
-Line #      Hits         Time  Per Hit   % Time  Line Contents
-==============================================================
-   771                                               @profile
-   772                                               def get_floating_ip(self, public_ip_id):
-   773                                                   url_params = azure_helpers.parse_url(PUBLIC_IP_RESOURCE_ID,
-   774                                                                                        public_ip_id)
-   775                                                   public_ip_name = url_params.get(PUBLIC_IP_NAME)
-   776                                                   return self.network_management_client. \
-   777                                                       public_ip_addresses.get(self.resource_group, public_ip_name)
-
-Total time: 0 s
-File: /Users/alex/Desktop/work/cb-profiled/cloudbridge/cloudbridge/cloud/providers/azure/azure_client.py
-Function: delete_floating_ip at line 779
-
-Line #      Hits         Time  Per Hit   % Time  Line Contents
-==============================================================
-   779                                               @profile
-   780                                               def delete_floating_ip(self, public_ip_id):
-   781                                                   url_params = azure_helpers.parse_url(PUBLIC_IP_RESOURCE_ID,
-   782                                                                                        public_ip_id)
-   783                                                   public_ip_name = url_params.get(PUBLIC_IP_NAME)
-   784                                                   self.network_management_client. \
-   785                                                       public_ip_addresses.delete(self.resource_group,
-   786                                                                                  public_ip_name).wait()
-
-Total time: 0 s
-File: /Users/alex/Desktop/work/cb-profiled/cloudbridge/cloudbridge/cloud/providers/azure/azure_client.py
-Function: update_fip_tags at line 788
-
-Line #      Hits         Time  Per Hit   % Time  Line Contents
-==============================================================
-   788                                               @profile
-   789                                               def update_fip_tags(self, fip_id, tags):
-   790                                                   url_params = azure_helpers.parse_url(PUBLIC_IP_RESOURCE_ID,
-   791                                                                                        fip_id)
-   792                                                   fip_name = url_params.get(PUBLIC_IP_NAME)
-   793                                                   self.network_management_client.public_ip_addresses. \
-   794                                                       create_or_update(self.resource_group,
-   795                                                                        fip_name, tags).result()
-
-Total time: 0 s
-File: /Users/alex/Desktop/work/cb-profiled/cloudbridge/cloudbridge/cloud/providers/azure/azure_client.py
-Function: list_floating_ips at line 797
-
-Line #      Hits         Time  Per Hit   % Time  Line Contents
-==============================================================
-   797                                               @profile
-   798                                               def list_floating_ips(self):
-   799                                                   return self.network_management_client.public_ip_addresses.list(
-   800                                                       self.resource_group)
-
-Total time: 0 s
-File: /Users/alex/Desktop/work/cb-profiled/cloudbridge/cloudbridge/cloud/providers/azure/azure_client.py
-Function: list_vm at line 802
-
-Line #      Hits         Time  Per Hit   % Time  Line Contents
-==============================================================
-   802                                               @profile
-   803                                               def list_vm(self):
-   804                                                   return self.compute_client.virtual_machines.list(
-   805                                                       self.resource_group
-   806                                                   )
-
-Total time: 0 s
-File: /Users/alex/Desktop/work/cb-profiled/cloudbridge/cloudbridge/cloud/providers/azure/azure_client.py
-Function: restart_vm at line 808
-
-Line #      Hits         Time  Per Hit   % Time  Line Contents
-==============================================================
-   808                                               @profile
-   809                                               def restart_vm(self, vm_id):
-   810                                                   url_params = azure_helpers.parse_url(VM_RESOURCE_ID,
-   811                                                                                        vm_id)
-   812                                                   vm_name = url_params.get(VM_NAME)
-   813                                                   return self.compute_client.virtual_machines.restart(
-   814                                                       self.resource_group, vm_name).wait()
-
-Total time: 0 s
-File: /Users/alex/Desktop/work/cb-profiled/cloudbridge/cloudbridge/cloud/providers/azure/azure_client.py
-Function: delete_vm at line 816
-
-Line #      Hits         Time  Per Hit   % Time  Line Contents
-==============================================================
-   816                                               @profile
-   817                                               def delete_vm(self, vm_id):
-   818                                                   url_params = azure_helpers.parse_url(VM_RESOURCE_ID,
-   819                                                                                        vm_id)
-   820                                                   vm_name = url_params.get(VM_NAME)
-   821                                                   return self.compute_client.virtual_machines.delete(
-   822                                                       self.resource_group, vm_name).wait()
-
-Total time: 0 s
-File: /Users/alex/Desktop/work/cb-profiled/cloudbridge/cloudbridge/cloud/providers/azure/azure_client.py
-Function: get_vm at line 824
-
-Line #      Hits         Time  Per Hit   % Time  Line Contents
-==============================================================
-   824                                               @profile
-   825                                               def get_vm(self, vm_id):
-   826                                                   url_params = azure_helpers.parse_url(VM_RESOURCE_ID,
-   827                                                                                        vm_id)
-   828                                                   vm_name = url_params.get(VM_NAME)
-   829                                                   return self.compute_client.virtual_machines.get(
-   830                                                       self.resource_group,
-   831                                                       vm_name,
-   832                                                       expand='instanceView'
-   833                                                   )
-
-Total time: 0 s
-File: /Users/alex/Desktop/work/cb-profiled/cloudbridge/cloudbridge/cloud/providers/azure/azure_client.py
-Function: create_vm at line 835
-
-Line #      Hits         Time  Per Hit   % Time  Line Contents
-==============================================================
-   835                                               @profile
-   836                                               def create_vm(self, vm_name, params):
-   837                                                   return self.compute_client.virtual_machines. \
-   838                                                       create_or_update(self.resource_group,
-   839                                                                        vm_name, params).result()
-
-Total time: 0 s
-File: /Users/alex/Desktop/work/cb-profiled/cloudbridge/cloudbridge/cloud/providers/azure/azure_client.py
-Function: update_vm at line 841
-
-Line #      Hits         Time  Per Hit   % Time  Line Contents
-==============================================================
-   841                                               @profile
-   842                                               def update_vm(self, vm_id, params):
-   843                                                   url_params = azure_helpers.parse_url(VM_RESOURCE_ID,
-   844                                                                                        vm_id)
-   845                                                   vm_name = url_params.get(VM_NAME)
-   846                                                   return self.compute_client.virtual_machines. \
-   847                                                       create_or_update(self.resource_group,
-   848                                                                        vm_name, params, raw=True)
-
-Total time: 0 s
-File: /Users/alex/Desktop/work/cb-profiled/cloudbridge/cloudbridge/cloud/providers/azure/azure_client.py
-Function: deallocate_vm at line 850
-
-Line #      Hits         Time  Per Hit   % Time  Line Contents
-==============================================================
-   850                                               @profile
-   851                                               def deallocate_vm(self, vm_id):
-   852                                                   url_params = azure_helpers.parse_url(VM_RESOURCE_ID,
-   853                                                                                        vm_id)
-   854                                                   vm_name = url_params.get(VM_NAME)
-   855                                                   self.compute_client. \
-   856                                                       virtual_machines.deallocate(self.resource_group,
-   857                                                                                   vm_name).wait()
-
-Total time: 0 s
-File: /Users/alex/Desktop/work/cb-profiled/cloudbridge/cloudbridge/cloud/providers/azure/azure_client.py
-Function: generalize_vm at line 859
-
-Line #      Hits         Time  Per Hit   % Time  Line Contents
-==============================================================
-   859                                               @profile
-   860                                               def generalize_vm(self, vm_id):
-   861                                                   url_params = azure_helpers.parse_url(VM_RESOURCE_ID,
-   862                                                                                        vm_id)
-   863                                                   vm_name = url_params.get(VM_NAME)
-   864                                                   self.compute_client.virtual_machines. \
-   865                                                       generalize(self.resource_group, vm_name)
-
-Total time: 0 s
-File: /Users/alex/Desktop/work/cb-profiled/cloudbridge/cloudbridge/cloud/providers/azure/azure_client.py
-Function: start_vm at line 867
-
-Line #      Hits         Time  Per Hit   % Time  Line Contents
-==============================================================
-   867                                               @profile
-   868                                               def start_vm(self, vm_id):
-   869                                                   url_params = azure_helpers.parse_url(VM_RESOURCE_ID,
-   870                                                                                        vm_id)
-   871                                                   vm_name = url_params.get(VM_NAME)
-   872                                                   self.compute_client.virtual_machines. \
-   873                                                       start(self.resource_group,
-   874                                                             vm_name).wait()
-
-Total time: 0 s
-File: /Users/alex/Desktop/work/cb-profiled/cloudbridge/cloudbridge/cloud/providers/azure/azure_client.py
-Function: update_vm_tags at line 876
-
-Line #      Hits         Time  Per Hit   % Time  Line Contents
-==============================================================
-   876                                               @profile
-   877                                               def update_vm_tags(self, vm_id, tags):
-   878                                                   url_params = azure_helpers.parse_url(VM_RESOURCE_ID,
-   879                                                                                        vm_id)
-   880                                                   vm_name = url_params.get(VM_NAME)
-   881                                                   self.compute_client.virtual_machines. \
-   882                                                       create_or_update(self.resource_group,
-   883                                                                        vm_name, tags).result()
-
-Total time: 0 s
-File: /Users/alex/Desktop/work/cb-profiled/cloudbridge/cloudbridge/cloud/providers/azure/azure_client.py
-Function: delete_nic at line 885
-
-Line #      Hits         Time  Per Hit   % Time  Line Contents
-==============================================================
-   885                                               @profile
-   886                                               def delete_nic(self, nic_id):
-   887                                                   nic_params = azure_helpers.\
-   888                                                       parse_url(NETWORK_INTERFACE_RESOURCE_ID, nic_id)
-   889                                                   nic_name = nic_params.get(NETWORK_INTERFACE_NAME)
-   890                                                   self.network_management_client. \
-   891                                                       network_interfaces.delete(self.resource_group,
-   892                                                                                 nic_name).wait()
-
-Total time: 0 s
-File: /Users/alex/Desktop/work/cb-profiled/cloudbridge/cloudbridge/cloud/providers/azure/azure_client.py
-Function: get_nic at line 894
-
-Line #      Hits         Time  Per Hit   % Time  Line Contents
-==============================================================
-   894                                               @profile
-   895                                               def get_nic(self, nic_id):
-   896                                                   nic_params = azure_helpers.\
-   897                                                       parse_url(NETWORK_INTERFACE_RESOURCE_ID, nic_id)
-   898                                                   nic_name = nic_params.get(NETWORK_INTERFACE_NAME)
-   899                                                   return self.network_management_client. \
-   900                                                       network_interfaces.get(self.resource_group, nic_name)
-
-Total time: 0 s
-File: /Users/alex/Desktop/work/cb-profiled/cloudbridge/cloudbridge/cloud/providers/azure/azure_client.py
-Function: update_nic at line 902
-
-Line #      Hits         Time  Per Hit   % Time  Line Contents
-==============================================================
-   902                                               @profile
-   903                                               def update_nic(self, nic_id, params):
-   904                                                   nic_params = azure_helpers.\
-   905                                                       parse_url(NETWORK_INTERFACE_RESOURCE_ID, nic_id)
-   906                                                   nic_name = nic_params.get(NETWORK_INTERFACE_NAME)
-   907                                                   async_nic_creation = self.network_management_client. \
-   908                                                       network_interfaces.create_or_update(
-   909                                                           self.resource_group,
-   910                                                           nic_name,
-   911                                                           params
-   912                                                       )
-   913                                                   nic_info = async_nic_creation.result()
-   914                                                   return nic_info
-
-Total time: 0 s
-File: /Users/alex/Desktop/work/cb-profiled/cloudbridge/cloudbridge/cloud/providers/azure/azure_client.py
-Function: create_nic at line 916
-
-Line #      Hits         Time  Per Hit   % Time  Line Contents
-==============================================================
-   916                                               @profile
-   917                                               def create_nic(self, nic_name, params):
-   918                                                   return self.network_management_client. \
-   919                                                       network_interfaces.create_or_update(
-   920                                                           self.resource_group,
-   921                                                           nic_name,
-   922                                                           params
-   923                                                       ).result()
-
-Total time: 0 s
-File: /Users/alex/Desktop/work/cb-profiled/cloudbridge/cloudbridge/cloud/providers/azure/azure_client.py
-Function: create_public_key at line 925
-
-Line #      Hits         Time  Per Hit   % Time  Line Contents
-==============================================================
-   925                                               @profile
-   926                                               def create_public_key(self, entity):
-   927                                                   return self.table_service. \
-   928                                                       insert_or_replace_entity(self.public_key_storage_table_name,
-   929                                                                                entity)
-
-Total time: 0 s
-File: /Users/alex/Desktop/work/cb-profiled/cloudbridge/cloudbridge/cloud/providers/azure/azure_client.py
-Function: get_public_key at line 931
-
-Line #      Hits         Time  Per Hit   % Time  Line Contents
-==============================================================
-   931                                               @profile
-   932                                               def get_public_key(self, name):
-   933                                                   entities = self.table_service. \
-   934                                                       query_entities(self.public_key_storage_table_name,
-   935                                                                      "Name eq '{0}'".format(name), num_results=1)
-   936                                           
-   937                                                   return entities.items[0] if len(entities.items) > 0 else None
-
-Total time: 0 s
-File: /Users/alex/Desktop/work/cb-profiled/cloudbridge/cloudbridge/cloud/providers/azure/azure_client.py
-Function: delete_public_key at line 939
-
-Line #      Hits         Time  Per Hit   % Time  Line Contents
-==============================================================
-   939                                               @profile
-   940                                               def delete_public_key(self, entity):
-   941                                                   self.table_service.delete_entity(self.public_key_storage_table_name,
-   942                                                                                    entity.PartitionKey, entity.RowKey)
-
-Total time: 0 s
-File: /Users/alex/Desktop/work/cb-profiled/cloudbridge/cloudbridge/cloud/providers/azure/azure_client.py
-Function: list_public_keys at line 944
-
-Line #      Hits         Time  Per Hit   % Time  Line Contents
-==============================================================
-   944                                               @profile
-   945                                               def list_public_keys(self, partition_key, limit=None, marker=None):
-   946                                                   entities = self.table_service. \
-   947                                                       query_entities(self.public_key_storage_table_name,
-   948                                                                      "PartitionKey eq '{0}'".format(partition_key),
-   949                                                                      marker=marker, num_results=limit)
-   950                                                   return (entities.items, entities.next_marker)
-
-Total time: 0 s
-File: /Users/alex/Desktop/work/cb-profiled/cloudbridge/cloudbridge/cloud/providers/azure/azure_client.py
-Function: delete_route_table at line 952
-
-Line #      Hits         Time  Per Hit   % Time  Line Contents
-==============================================================
-   952                                               @profile
-   953                                               def delete_route_table(self, route_table_name):
-   954                                                   self.network_management_client. \
-   955                                                       route_tables.delete(self.resource_group, route_table_name
-   956                                                                           ).wait()
-
-Total time: 0 s
-File: /Users/alex/Desktop/work/cb-profiled/cloudbridge/cloudbridge/cloud/providers/azure/azure_client.py
-Function: attach_subnet_to_route_table at line 958
-
-Line #      Hits         Time  Per Hit   % Time  Line Contents
-==============================================================
-   958                                               @profile
-   959                                               def attach_subnet_to_route_table(self, subnet_id, route_table_id):
-   960                                                   url_params = azure_helpers.parse_url(SUBNET_RESOURCE_ID,
-   961                                                                                        subnet_id)
-   962                                                   network_name = url_params.get(NETWORK_NAME)
-   963                                                   subnet_name = url_params.get(SUBNET_NAME)
-   964                                           
-   965                                                   subnet_info = self.network_management_client.subnets.get(
-   966                                                       self.resource_group,
-   967                                                       network_name,
-   968                                                       subnet_name
-   969                                                   )
-   970                                                   if subnet_info:
-   971                                                       subnet_info.route_table = {
-   972                                                           'id': route_table_id
-   973                                                       }
-   974                                           
-   975                                                       result_create = self.network_management_client. \
-   976                                                           subnets.create_or_update(
-   977                                                            self.resource_group,
-   978                                                            network_name,
-   979                                                            subnet_name,
-   980                                                            subnet_info)
-   981                                                       subnet_info = result_create.result()
-   982                                           
-   983                                                   return subnet_info
-
-Total time: 0 s
-File: /Users/alex/Desktop/work/cb-profiled/cloudbridge/cloudbridge/cloud/providers/azure/azure_client.py
-Function: detach_subnet_to_route_table at line 985
-
-Line #      Hits         Time  Per Hit   % Time  Line Contents
-==============================================================
-   985                                               @profile
-   986                                               def detach_subnet_to_route_table(self, subnet_id, route_table_id):
-   987                                                   url_params = azure_helpers.parse_url(SUBNET_RESOURCE_ID,
-   988                                                                                        subnet_id)
-   989                                                   network_name = url_params.get(NETWORK_NAME)
-   990                                                   subnet_name = url_params.get(SUBNET_NAME)
-   991                                           
-   992                                                   subnet_info = self.network_management_client.subnets.get(
-   993                                                       self.resource_group,
-   994                                                       network_name,
-   995                                                       subnet_name
-   996                                                   )
-   997                                           
-   998                                                   if subnet_info and subnet_info.route_table.id == route_table_id:
-   999                                                       subnet_info.route_table = None
-  1000                                           
-  1001                                                       result_create = self.network_management_client. \
-  1002                                                           subnets.create_or_update(
-  1003                                                            self.resource_group,
-  1004                                                            network_name,
-  1005                                                            subnet_name,
-  1006                                                            subnet_info)
-  1007                                                       subnet_info = result_create.result()
-  1008                                           
-  1009                                                   return subnet_info
-
-Total time: 0 s
-File: /Users/alex/Desktop/work/cb-profiled/cloudbridge/cloudbridge/cloud/providers/azure/azure_client.py
-Function: list_route_tables at line 1011
-
-Line #      Hits         Time  Per Hit   % Time  Line Contents
-==============================================================
-  1011                                               @profile
-  1012                                               def list_route_tables(self):
-  1013                                                   return self.network_management_client. \
-  1014                                                       route_tables.list(self.resource_group)
-
-Total time: 0 s
-File: /Users/alex/Desktop/work/cb-profiled/cloudbridge/cloudbridge/cloud/providers/azure/azure_client.py
-Function: get_route_table at line 1016
-
-Line #      Hits         Time  Per Hit   % Time  Line Contents
-==============================================================
-  1016                                               @profile
-  1017                                               def get_route_table(self, router_id):
-  1018                                                   url_params = azure_helpers.parse_url(ROUTER_RESOURCE_ID,
-  1019                                                                                        router_id)
-  1020                                                   router_name = url_params.get(ROUTER_NAME)
-  1021                                                   return self.network_management_client. \
-  1022                                                       route_tables.get(self.resource_group, router_name)
-
-Total time: 0 s
-File: /Users/alex/Desktop/work/cb-profiled/cloudbridge/cloudbridge/cloud/providers/azure/azure_client.py
-Function: create_route_table at line 1024
-
-Line #      Hits         Time  Per Hit   % Time  Line Contents
-==============================================================
-  1024                                               @profile
-  1025                                               def create_route_table(self, route_table_name, params):
-  1026                                                   return self.network_management_client. \
-  1027                                                       route_tables.create_or_update(
-  1028                                                        self.resource_group,
-  1029                                                        route_table_name, params).result()
-
-Total time: 0 s
-File: /Users/alex/Desktop/work/cb-profiled/cloudbridge/cloudbridge/cloud/providers/azure/azure_client.py
-Function: update_route_table_tags at line 1031
-
-Line #      Hits         Time  Per Hit   % Time  Line Contents
-==============================================================
-  1031                                               @profile
-  1032                                               def update_route_table_tags(self, route_table_name, tags):
-  1033                                                   self.network_management_client.route_tables. \
-  1034                                                       create_or_update(self.resource_group,
-  1035                                                                        route_table_name, tags).result()
-

+ 0 - 1467
results/object_store.res

@@ -1,1467 +0,0 @@
-Test output
- ......s
-----------------------------------------------------------------------
-Ran 7 tests in 12.892s
-
-OK (skipped=1)
-
-Wrote profile results to run_tests.py.lprof
-Timer unit: 1e-06 s
-
-Total time: 2.08263 s
-File: /Users/alex/Desktop/work/cb-profiled/cloudbridge/cloudbridge/cloud/providers/azure/azure_client.py
-Function: __init__ at line 160
-
-Line #      Hits         Time  Per Hit   % Time  Line Contents
-==============================================================
-   160                                               @profile
-   161                                               def __init__(self, config):
-   162         6         19.0      3.2      0.0          self._config = config
-   163         6         17.0      2.8      0.0          self.subscription_id = str(config.get('azure_subscription_id'))
-   164         6          5.0      0.8      0.0          self._credentials = ServicePrincipalCredentials(
-   165         6          4.0      0.7      0.0              client_id=config.get('azure_client_id'),
-   166         6          5.0      0.8      0.0              secret=config.get('azure_secret'),
-   167         6    2082469.0 347078.2    100.0              tenant=config.get('azure_tenant')
-   168                                                   )
-   169                                           
-   170         6         21.0      3.5      0.0          self._access_token = config.get('azure_access_token')
-   171         6          6.0      1.0      0.0          self._resource_client = None
-   172         6          4.0      0.7      0.0          self._storage_client = None
-   173         6          7.0      1.2      0.0          self._network_management_client = None
-   174         6          5.0      0.8      0.0          self._subscription_client = None
-   175         6          5.0      0.8      0.0          self._compute_client = None
-   176         6          3.0      0.5      0.0          self._access_key_result = None
-   177         6          6.0      1.0      0.0          self._block_blob_service = None
-   178         6          5.0      0.8      0.0          self._table_service = None
-   179         6          6.0      1.0      0.0          self._storage_account = None
-   180                                           
-   181         6         41.0      6.8      0.0          log.debug("azure subscription : %s", self.subscription_id)
-
-Total time: 3.13512 s
-File: /Users/alex/Desktop/work/cb-profiled/cloudbridge/cloudbridge/cloud/providers/azure/azure_client.py
-Function: access_key_result at line 183
-
-Line #      Hits         Time  Per Hit   % Time  Line Contents
-==============================================================
-   183                                               @property
-   184                                               @tenacity.retry(stop=tenacity.stop_after_attempt(5), reraise=True)
-   185                                               @profile
-   186                                               def access_key_result(self):
-   187         6          5.0      0.8      0.0          if not self._access_key_result:
-   188         6         25.0      4.2      0.0              storage_account = self.storage_account
-   189                                           
-   190         6    1608318.0 268053.0     51.3              if self.get_storage_account(storage_account).\
-   191         6          9.0      1.5      0.0                      provisioning_state.value != 'Succeeded':
-   192                                                           log.debug(
-   193                                                               "Storage account %s is not in Succeeded state yet. ",
-   194                                                               storage_account)
-   195                                                           raise WaitStateException(
-   196                                                               "Waited too long for storage account: {0} to "
-   197                                                               "become ready.".format(
-   198                                                                   storage_account,
-   199                                                                   self.get_storage_account(storage_account).
-   200                                                                   provisioning_state))
-   201                                           
-   202         6       1660.0    276.7      0.1              self._access_key_result = self.storage_client.storage_accounts. \
-   203         6    1525091.0 254181.8     48.6                  list_keys(self.resource_group, storage_account)
-   204         6         14.0      2.3      0.0          return self._access_key_result
-
-Total time: 2.2e-05 s
-File: /Users/alex/Desktop/work/cb-profiled/cloudbridge/cloudbridge/cloud/providers/azure/azure_client.py
-Function: resource_group at line 206
-
-Line #      Hits         Time  Per Hit   % Time  Line Contents
-==============================================================
-   206                                               @property
-   207                                               @profile
-   208                                               def resource_group(self):
-   209        18         22.0      1.2    100.0          return self._config.get('azure_resource_group')
-
-Total time: 2.6e-05 s
-File: /Users/alex/Desktop/work/cb-profiled/cloudbridge/cloudbridge/cloud/providers/azure/azure_client.py
-Function: storage_account at line 211
-
-Line #      Hits         Time  Per Hit   % Time  Line Contents
-==============================================================
-   211                                               @property
-   212                                               @profile
-   213                                               def storage_account(self):
-   214        18         26.0      1.4    100.0          return self._config.get('azure_storage_account')
-
-Total time: 0 s
-File: /Users/alex/Desktop/work/cb-profiled/cloudbridge/cloudbridge/cloud/providers/azure/azure_client.py
-Function: region_name at line 216
-
-Line #      Hits         Time  Per Hit   % Time  Line Contents
-==============================================================
-   216                                               @property
-   217                                               @profile
-   218                                               def region_name(self):
-   219                                                   return self._config.get('azure_region_name')
-
-Total time: 0 s
-File: /Users/alex/Desktop/work/cb-profiled/cloudbridge/cloudbridge/cloud/providers/azure/azure_client.py
-Function: public_key_storage_table_name at line 221
-
-Line #      Hits         Time  Per Hit   % Time  Line Contents
-==============================================================
-   221                                               @property
-   222                                               @profile
-   223                                               def public_key_storage_table_name(self):
-   224                                                   return self._config.get('azure_public_key_storage_table_name')
-
-Total time: 0.043331 s
-File: /Users/alex/Desktop/work/cb-profiled/cloudbridge/cloudbridge/cloud/providers/azure/azure_client.py
-Function: storage_client at line 226
-
-Line #      Hits         Time  Per Hit   % Time  Line Contents
-==============================================================
-   226                                               @property
-   227                                               @profile
-   228                                               def storage_client(self):
-   229        18         30.0      1.7      0.1          if not self._storage_client:
-   230                                                       self._storage_client = \
-   231         6          9.0      1.5      0.0                  StorageManagementClient(self._credentials,
-   232         6      43274.0   7212.3     99.9                                          self.subscription_id)
-   233        18         18.0      1.0      0.0          return self._storage_client
-
-Total time: 0 s
-File: /Users/alex/Desktop/work/cb-profiled/cloudbridge/cloudbridge/cloud/providers/azure/azure_client.py
-Function: subscription_client at line 235
-
-Line #      Hits         Time  Per Hit   % Time  Line Contents
-==============================================================
-   235                                               @property
-   236                                               @profile
-   237                                               def subscription_client(self):
-   238                                                   if not self._subscription_client:
-   239                                                       self._subscription_client = SubscriptionClient(self._credentials)
-   240                                                   return self._subscription_client
-
-Total time: 0.057845 s
-File: /Users/alex/Desktop/work/cb-profiled/cloudbridge/cloudbridge/cloud/providers/azure/azure_client.py
-Function: resource_client at line 242
-
-Line #      Hits         Time  Per Hit   % Time  Line Contents
-==============================================================
-   242                                               @property
-   243                                               @profile
-   244                                               def resource_client(self):
-   245         6          5.0      0.8      0.0          if not self._resource_client:
-   246                                                       self._resource_client = \
-   247         6          8.0      1.3      0.0                  ResourceManagementClient(self._credentials,
-   248         6      57816.0   9636.0     99.9                                           self.subscription_id)
-   249         6         16.0      2.7      0.0          return self._resource_client
-
-Total time: 0 s
-File: /Users/alex/Desktop/work/cb-profiled/cloudbridge/cloudbridge/cloud/providers/azure/azure_client.py
-Function: compute_client at line 251
-
-Line #      Hits         Time  Per Hit   % Time  Line Contents
-==============================================================
-   251                                               @property
-   252                                               @profile
-   253                                               def compute_client(self):
-   254                                                   if not self._compute_client:
-   255                                                       self._compute_client = \
-   256                                                           ComputeManagementClient(self._credentials,
-   257                                                                                   self.subscription_id)
-   258                                                   return self._compute_client
-
-Total time: 0 s
-File: /Users/alex/Desktop/work/cb-profiled/cloudbridge/cloudbridge/cloud/providers/azure/azure_client.py
-Function: network_management_client at line 260
-
-Line #      Hits         Time  Per Hit   % Time  Line Contents
-==============================================================
-   260                                               @property
-   261                                               @profile
-   262                                               def network_management_client(self):
-   263                                                   if not self._network_management_client:
-   264                                                       self._network_management_client = NetworkManagementClient(
-   265                                                           self._credentials, self.subscription_id)
-   266                                                   return self._network_management_client
-
-Total time: 4.79624 s
-File: /Users/alex/Desktop/work/cb-profiled/cloudbridge/cloudbridge/cloud/providers/azure/azure_client.py
-Function: blob_service at line 268
-
-Line #      Hits         Time  Per Hit   % Time  Line Contents
-==============================================================
-   268                                               @property
-   269                                               @profile
-   270                                               def blob_service(self):
-   271        68    1658205.0  24385.4     34.6          self._get_or_create_storage_account()
-   272        68         95.0      1.4      0.0          if not self._block_blob_service:
-   273         6          5.0      0.8      0.0              if self._access_token:
-   274                                                           token_credential = TokenCredential(self._access_token)
-   275                                                           self._block_blob_service = BlockBlobService(
-   276                                                               account_name=self.storage_account,
-   277                                                               token_credential=token_credential)
-   278                                                       else:
-   279         6          9.0      1.5      0.0                  self._block_blob_service = BlockBlobService(
-   280         6        100.0     16.7      0.0                      account_name=self.storage_account,
-   281         6    3137787.0 522964.5     65.4                      account_key=self.access_key_result.keys[0].value)
-   282        68         42.0      0.6      0.0          return self._block_blob_service
-
-Total time: 0 s
-File: /Users/alex/Desktop/work/cb-profiled/cloudbridge/cloudbridge/cloud/providers/azure/azure_client.py
-Function: table_service at line 284
-
-Line #      Hits         Time  Per Hit   % Time  Line Contents
-==============================================================
-   284                                               @property
-   285                                               @profile
-   286                                               def table_service(self):
-   287                                                   self._get_or_create_storage_account()
-   288                                                   if not self._table_service:
-   289                                                       self._table_service = TableService(
-   290                                                           self.storage_account,
-   291                                                           self.access_key_result.keys[0].value)
-   292                                                   if not self._table_service. \
-   293                                                           exists(table_name=self.public_key_storage_table_name):
-   294                                                       self._table_service.create_table(
-   295                                                           self.public_key_storage_table_name)
-   296                                                   return self._table_service
-
-Total time: 1.54847 s
-File: /Users/alex/Desktop/work/cb-profiled/cloudbridge/cloudbridge/cloud/providers/azure/azure_client.py
-Function: get_resource_group at line 298
-
-Line #      Hits         Time  Per Hit   % Time  Line Contents
-==============================================================
-   298                                               @profile
-   299                                               def get_resource_group(self, name):
-   300         6    1548472.0 258078.7    100.0          return self.resource_client.resource_groups.get(name)
-
-Total time: 0 s
-File: /Users/alex/Desktop/work/cb-profiled/cloudbridge/cloudbridge/cloud/providers/azure/azure_client.py
-Function: create_resource_group at line 302
-
-Line #      Hits         Time  Per Hit   % Time  Line Contents
-==============================================================
-   302                                               @profile
-   303                                               def create_resource_group(self, name, parameters):
-   304                                                   return self.resource_client.resource_groups. \
-   305                                                       create_or_update(name, parameters)
-
-Total time: 3.25765 s
-File: /Users/alex/Desktop/work/cb-profiled/cloudbridge/cloudbridge/cloud/providers/azure/azure_client.py
-Function: get_storage_account at line 307
-
-Line #      Hits         Time  Per Hit   % Time  Line Contents
-==============================================================
-   307                                               @profile
-   308                                               def get_storage_account(self, storage_account):
-   309        12     115043.0   9586.9      3.5          return self.storage_client.storage_accounts. \
-   310        12    3142603.0 261883.6     96.5              get_properties(self.resource_group, storage_account)
-
-Total time: 0 s
-File: /Users/alex/Desktop/work/cb-profiled/cloudbridge/cloudbridge/cloud/providers/azure/azure_client.py
-Function: create_storage_account at line 312
-
-Line #      Hits         Time  Per Hit   % Time  Line Contents
-==============================================================
-   312                                               @profile
-   313                                               def create_storage_account(self, name, params):
-   314                                                   return self.storage_client.storage_accounts. \
-   315                                                       create(self.resource_group, name.lower(), params).result()
-
-Total time: 1.64978 s
-File: /Users/alex/Desktop/work/cb-profiled/cloudbridge/cloudbridge/cloud/providers/azure/azure_client.py
-Function: _get_or_create_storage_account at line 319
-
-Line #      Hits         Time  Per Hit   % Time  Line Contents
-==============================================================
-   319                                               @tenacity.retry(stop=tenacity.stop_after_attempt(2),
-   320                                                               retry=tenacity.retry_if_exception_type(CloudError),
-   321                                                               reraise=True)
-   322                                               @profile
-   323                                               def _get_or_create_storage_account(self):
-   324        68        125.0      1.8      0.0          if self._storage_account:
-   325        62         56.0      0.9      0.0              return self._storage_account
-   326                                                   else:
-   327         6          3.0      0.5      0.0              try:
-   328                                                           self._storage_account = \
-   329         6    1649597.0 274932.8    100.0                      self.get_storage_account(self.storage_account)
-   330                                                       except CloudError as cloud_error:
-   331                                                           if cloud_error.error.error == "ResourceNotFound":
-   332                                                               storage_account_params = {
-   333                                                                   'sku': {
-   334                                                                       'name': 'Standard_LRS'
-   335                                                                   },
-   336                                                                   'kind': 'storage',
-   337                                                                   'location': self.region_name,
-   338                                                               }
-   339                                                               try:
-   340                                                                   self._storage_account = \
-   341                                                                       self.create_storage_account(self.storage_account,
-   342                                                                                                   storage_account_params)
-   343                                                               except CloudError as cloud_error2:  # pragma: no cover
-   344                                                                   if cloud_error2.error.error == "AuthorizationFailed":
-   345                                                                       mess = 'The following error was returned by ' \
-   346                                                                              'Azure:\n%s\n\nThis is likely because the' \
-   347                                                                              ' Role associated with the provided ' \
-   348                                                                              'credentials does not allow for Storage ' \
-   349                                                                              'Account creation.\nA Storage Account is ' \
-   350                                                                              'necessary in order to perform the ' \
-   351                                                                              'desired operation. You must either ' \
-   352                                                                              'provide an existing Storage Account name' \
-   353                                                                              ' as part of the configuration, or ' \
-   354                                                                              'elevate the associated Role.\nFor more ' \
-   355                                                                              'information on roles, see: https://docs.' \
-   356                                                                              'microsoft.com/en-us/azure/role-based-' \
-   357                                                                              'access-control/overview\n' % cloud_error2
-   358                                                                       raise ProviderConnectionException(mess)
-   359                                           
-   360                                                                   elif cloud_error2.error.error == \
-   361                                                                           "StorageAccountAlreadyTaken":
-   362                                                                       mess = 'The following error was ' \
-   363                                                                              'returned by Azure:\n%s\n\n' \
-   364                                                                              'Note that Storage Account names must be ' \
-   365                                                                              'unique across Azure (not just in your ' \
-   366                                                                              'subscription).\nFor more information ' \
-   367                                                                              'see https://docs.microsoft.com/en-us/' \
-   368                                                                              'azure/azure-resource-manager/resource-' \
-   369                                                                              'manager-storage-account-name-errors\n' \
-   370                                                                              % cloud_error2
-   371                                                                       raise InvalidLabelException(mess)
-   372                                                                   else:
-   373                                                                       raise cloud_error2
-   374                                                           else:
-   375                                                               raise cloud_error
-
-Total time: 0 s
-File: /Users/alex/Desktop/work/cb-profiled/cloudbridge/cloudbridge/cloud/providers/azure/azure_client.py
-Function: list_locations at line 377
-
-Line #      Hits         Time  Per Hit   % Time  Line Contents
-==============================================================
-   377                                               @profile
-   378                                               def list_locations(self):
-   379                                                   return self.subscription_client.subscriptions. \
-   380                                                       list_locations(self.subscription_id)
-
-Total time: 0 s
-File: /Users/alex/Desktop/work/cb-profiled/cloudbridge/cloudbridge/cloud/providers/azure/azure_client.py
-Function: list_vm_firewall at line 382
-
-Line #      Hits         Time  Per Hit   % Time  Line Contents
-==============================================================
-   382                                               @profile
-   383                                               def list_vm_firewall(self):
-   384                                                   return self.network_management_client.network_security_groups. \
-   385                                                       list(self.resource_group)
-
-Total time: 0 s
-File: /Users/alex/Desktop/work/cb-profiled/cloudbridge/cloudbridge/cloud/providers/azure/azure_client.py
-Function: create_vm_firewall at line 387
-
-Line #      Hits         Time  Per Hit   % Time  Line Contents
-==============================================================
-   387                                               @profile
-   388                                               def create_vm_firewall(self, name, parameters):
-   389                                                   return self.network_management_client.network_security_groups. \
-   390                                                       create_or_update(self.resource_group, name,
-   391                                                                        parameters).result()
-
-Total time: 0 s
-File: /Users/alex/Desktop/work/cb-profiled/cloudbridge/cloudbridge/cloud/providers/azure/azure_client.py
-Function: update_vm_firewall_tags at line 393
-
-Line #      Hits         Time  Per Hit   % Time  Line Contents
-==============================================================
-   393                                               @profile
-   394                                               def update_vm_firewall_tags(self, fw_id, tags):
-   395                                                   url_params = azure_helpers.parse_url(VM_FIREWALL_RESOURCE_ID,
-   396                                                                                        fw_id)
-   397                                                   name = url_params.get(VM_FIREWALL_NAME)
-   398                                                   return self.network_management_client.network_security_groups. \
-   399                                                       create_or_update(self.resource_group, name,
-   400                                                                        {'tags': tags,
-   401                                                                         'location': self.region_name}).result()
-
-Total time: 0 s
-File: /Users/alex/Desktop/work/cb-profiled/cloudbridge/cloudbridge/cloud/providers/azure/azure_client.py
-Function: get_vm_firewall at line 403
-
-Line #      Hits         Time  Per Hit   % Time  Line Contents
-==============================================================
-   403                                               @profile
-   404                                               def get_vm_firewall(self, fw_id):
-   405                                                   url_params = azure_helpers.parse_url(VM_FIREWALL_RESOURCE_ID,
-   406                                                                                        fw_id)
-   407                                                   fw_name = url_params.get(VM_FIREWALL_NAME)
-   408                                                   return self.network_management_client.network_security_groups. \
-   409                                                       get(self.resource_group, fw_name)
-
-Total time: 0 s
-File: /Users/alex/Desktop/work/cb-profiled/cloudbridge/cloudbridge/cloud/providers/azure/azure_client.py
-Function: delete_vm_firewall at line 411
-
-Line #      Hits         Time  Per Hit   % Time  Line Contents
-==============================================================
-   411                                               @profile
-   412                                               def delete_vm_firewall(self, fw_id):
-   413                                                   url_params = azure_helpers.parse_url(VM_FIREWALL_RESOURCE_ID,
-   414                                                                                        fw_id)
-   415                                                   name = url_params.get(VM_FIREWALL_NAME)
-   416                                                   self.network_management_client \
-   417                                                       .network_security_groups.delete(self.resource_group, name).wait()
-
-Total time: 0 s
-File: /Users/alex/Desktop/work/cb-profiled/cloudbridge/cloudbridge/cloud/providers/azure/azure_client.py
-Function: create_vm_firewall_rule at line 419
-
-Line #      Hits         Time  Per Hit   % Time  Line Contents
-==============================================================
-   419                                               @profile
-   420                                               def create_vm_firewall_rule(self, fw_id,
-   421                                                                           rule_name, parameters):
-   422                                                   url_params = azure_helpers.parse_url(VM_FIREWALL_RESOURCE_ID,
-   423                                                                                        fw_id)
-   424                                                   vm_firewall_name = url_params.get(VM_FIREWALL_NAME)
-   425                                                   return self.network_management_client.security_rules. \
-   426                                                       create_or_update(self.resource_group, vm_firewall_name,
-   427                                                                        rule_name, parameters).result()
-
-Total time: 0 s
-File: /Users/alex/Desktop/work/cb-profiled/cloudbridge/cloudbridge/cloud/providers/azure/azure_client.py
-Function: delete_vm_firewall_rule at line 429
-
-Line #      Hits         Time  Per Hit   % Time  Line Contents
-==============================================================
-   429                                               @profile
-   430                                               def delete_vm_firewall_rule(self, fw_rule_id, vm_firewall):
-   431                                                   url_params = azure_helpers.parse_url(VM_FIREWALL_RULE_RESOURCE_ID,
-   432                                                                                        fw_rule_id)
-   433                                                   name = url_params.get(VM_FIREWALL_RULE_NAME)
-   434                                                   return self.network_management_client.security_rules. \
-   435                                                       delete(self.resource_group, vm_firewall, name).result()
-
-Total time: 0.177743 s
-File: /Users/alex/Desktop/work/cb-profiled/cloudbridge/cloudbridge/cloud/providers/azure/azure_client.py
-Function: list_containers at line 437
-
-Line #      Hits         Time  Per Hit   % Time  Line Contents
-==============================================================
-   437                                               @profile
-   438                                               def list_containers(self, prefix=None, limit=None, marker=None):
-   439         6        838.0    139.7      0.5          results = self.blob_service.list_containers(prefix=prefix,
-   440         6          4.0      0.7      0.0                                                      num_results=limit,
-   441         6     176888.0  29481.3     99.5                                                      marker=marker)
-   442         6         13.0      2.2      0.0          return (results.items, results.next_marker)
-
-Total time: 5.92442 s
-File: /Users/alex/Desktop/work/cb-profiled/cloudbridge/cloudbridge/cloud/providers/azure/azure_client.py
-Function: create_container at line 444
-
-Line #      Hits         Time  Per Hit   % Time  Line Contents
-==============================================================
-   444                                               @profile
-   445                                               def create_container(self, container_name):
-   446         7         11.0      1.6      0.0          try:
-   447         7    4788596.0 684085.1     80.8              self.blob_service.create_container(container_name,
-   448         7     962741.0 137534.4     16.3                                                 fail_on_exist=True)
-   449         1          4.0      4.0      0.0          except AzureConflictHttpError as cloud_error:
-   450         1          2.0      2.0      0.0              if cloud_error.error_code == "ContainerAlreadyExists":
-   451         1          6.0      6.0      0.0                  msg = "The given Bucket name '%s' already exists. Please " \
-   452                                                                 "use the `get` or `find` method to get a reference to " \
-   453                                                                 "an existing Bucket, or specify a new Bucket name to " \
-   454                                                                 "create.\nNote that in Azure, Buckets are contained " \
-   455         1          3.0      3.0      0.0                        "in Storage Accounts." % container_name
-   456         1          3.0      3.0      0.0                  raise DuplicateResourceException(msg)
-   457                                           
-   458         6     173054.0  28842.3      2.9          return self.blob_service.get_container_properties(container_name)
-
-Total time: 0.056791 s
-File: /Users/alex/Desktop/work/cb-profiled/cloudbridge/cloudbridge/cloud/providers/azure/azure_client.py
-Function: get_container at line 460
-
-Line #      Hits         Time  Per Hit   % Time  Line Contents
-==============================================================
-   460                                               @profile
-   461                                               def get_container(self, container_name):
-   462         2      56791.0  28395.5    100.0          return self.blob_service.get_container_properties(container_name)
-
-Total time: 0.244088 s
-File: /Users/alex/Desktop/work/cb-profiled/cloudbridge/cloudbridge/cloud/providers/azure/azure_client.py
-Function: delete_container at line 464
-
-Line #      Hits         Time  Per Hit   % Time  Line Contents
-==============================================================
-   464                                               @profile
-   465                                               def delete_container(self, container_name):
-   466         6     244088.0  40681.3    100.0          self.blob_service.delete_container(container_name)
-
-Total time: 0.360032 s
-File: /Users/alex/Desktop/work/cb-profiled/cloudbridge/cloudbridge/cloud/providers/azure/azure_client.py
-Function: list_blobs at line 468
-
-Line #      Hits         Time  Per Hit   % Time  Line Contents
-==============================================================
-   468                                               @profile
-   469                                               def list_blobs(self, container_name, prefix=None):
-   470        11     360032.0  32730.2    100.0          return self.blob_service.list_blobs(container_name, prefix=prefix)
-
-Total time: 0.298887 s
-File: /Users/alex/Desktop/work/cb-profiled/cloudbridge/cloudbridge/cloud/providers/azure/azure_client.py
-Function: get_blob at line 472
-
-Line #      Hits         Time  Per Hit   % Time  Line Contents
-==============================================================
-   472                                               @profile
-   473                                               def get_blob(self, container_name, blob_name):
-   474         9     298887.0  33209.7    100.0          return self.blob_service.get_blob_properties(container_name, blob_name)
-
-Total time: 0.329594 s
-File: /Users/alex/Desktop/work/cb-profiled/cloudbridge/cloudbridge/cloud/providers/azure/azure_client.py
-Function: create_blob_from_text at line 476
-
-Line #      Hits         Time  Per Hit   % Time  Line Contents
-==============================================================
-   476                                               @profile
-   477                                               def create_blob_from_text(self, container_name, blob_name, text):
-   478         9       1293.0    143.7      0.4          self.blob_service.create_blob_from_text(container_name,
-   479         9     328301.0  36477.9     99.6                                                  blob_name, text)
-
-Total time: 0.101667 s
-File: /Users/alex/Desktop/work/cb-profiled/cloudbridge/cloudbridge/cloud/providers/azure/azure_client.py
-Function: create_blob_from_file at line 481
-
-Line #      Hits         Time  Per Hit   % Time  Line Contents
-==============================================================
-   481                                               @profile
-   482                                               def create_blob_from_file(self, container_name, blob_name, file_path):
-   483         1        163.0    163.0      0.2          self.blob_service.create_blob_from_path(container_name,
-   484         1     101504.0 101504.0     99.8                                                  blob_name, file_path)
-
-Total time: 0.160735 s
-File: /Users/alex/Desktop/work/cb-profiled/cloudbridge/cloudbridge/cloud/providers/azure/azure_client.py
-Function: delete_blob at line 486
-
-Line #      Hits         Time  Per Hit   % Time  Line Contents
-==============================================================
-   486                                               @profile
-   487                                               def delete_blob(self, container_name, blob_name):
-   488         5     160735.0  32147.0    100.0          self.blob_service.delete_blob(container_name, blob_name)
-
-Total time: 0.000904 s
-File: /Users/alex/Desktop/work/cb-profiled/cloudbridge/cloudbridge/cloud/providers/azure/azure_client.py
-Function: get_blob_url at line 490
-
-Line #      Hits         Time  Per Hit   % Time  Line Contents
-==============================================================
-   490                                               @profile
-   491                                               def get_blob_url(self, container_name, blob_name, expiry_time):
-   492         1          8.0      8.0      0.9          expiry_date = datetime.datetime.utcnow() + datetime.timedelta(
-   493         1          6.0      6.0      0.7              seconds=expiry_time)
-   494         1        182.0    182.0     20.1          sas = self.blob_service.generate_blob_shared_access_signature(
-   495         1         14.0     14.0      1.5              container_name, blob_name, permission=BlobPermissions.READ,
-   496         1        503.0    503.0     55.6              expiry=expiry_date)
-   497         1        167.0    167.0     18.5          return self.blob_service.make_blob_url(container_name, blob_name,
-   498         1         24.0     24.0      2.7                                                 sas_token=sas)
-
-Total time: 0.125755 s
-File: /Users/alex/Desktop/work/cb-profiled/cloudbridge/cloudbridge/cloud/providers/azure/azure_client.py
-Function: get_blob_content at line 500
-
-Line #      Hits         Time  Per Hit   % Time  Line Contents
-==============================================================
-   500                                               @profile
-   501                                               def get_blob_content(self, container_name, blob_name):
-   502         4          5.0      1.2      0.0          out_stream = BytesIO()
-   503         4        486.0    121.5      0.4          self.blob_service.get_blob_to_stream(container_name,
-   504         4     125256.0  31314.0     99.6                                               blob_name, out_stream)
-   505         4          8.0      2.0      0.0          return out_stream
-
-Total time: 0 s
-File: /Users/alex/Desktop/work/cb-profiled/cloudbridge/cloudbridge/cloud/providers/azure/azure_client.py
-Function: create_empty_disk at line 507
-
-Line #      Hits         Time  Per Hit   % Time  Line Contents
-==============================================================
-   507                                               @profile
-   508                                               def create_empty_disk(self, disk_name, params):
-   509                                                   return self.compute_client.disks.create_or_update(
-   510                                                       self.resource_group,
-   511                                                       disk_name,
-   512                                                       params
-   513                                                   ).result()
-
-Total time: 0 s
-File: /Users/alex/Desktop/work/cb-profiled/cloudbridge/cloudbridge/cloud/providers/azure/azure_client.py
-Function: create_snapshot_disk at line 515
-
-Line #      Hits         Time  Per Hit   % Time  Line Contents
-==============================================================
-   515                                               @profile
-   516                                               def create_snapshot_disk(self, disk_name, params):
-   517                                                   return self.compute_client.disks.create_or_update(
-   518                                                       self.resource_group,
-   519                                                       disk_name,
-   520                                                       params
-   521                                                   ).result()
-
-Total time: 0 s
-File: /Users/alex/Desktop/work/cb-profiled/cloudbridge/cloudbridge/cloud/providers/azure/azure_client.py
-Function: get_disk at line 523
-
-Line #      Hits         Time  Per Hit   % Time  Line Contents
-==============================================================
-   523                                               @profile
-   524                                               def get_disk(self, disk_id):
-   525                                                   url_params = azure_helpers.parse_url(VOLUME_RESOURCE_ID,
-   526                                                                                        disk_id)
-   527                                                   disk_name = url_params.get(VOLUME_NAME)
-   528                                                   return self.compute_client.disks.get(self.resource_group, disk_name)
-
-Total time: 0 s
-File: /Users/alex/Desktop/work/cb-profiled/cloudbridge/cloudbridge/cloud/providers/azure/azure_client.py
-Function: list_disks at line 530
-
-Line #      Hits         Time  Per Hit   % Time  Line Contents
-==============================================================
-   530                                               @profile
-   531                                               def list_disks(self):
-   532                                                   return self.compute_client.disks. \
-   533                                                       list_by_resource_group(self.resource_group)
-
-Total time: 0 s
-File: /Users/alex/Desktop/work/cb-profiled/cloudbridge/cloudbridge/cloud/providers/azure/azure_client.py
-Function: delete_disk at line 535
-
-Line #      Hits         Time  Per Hit   % Time  Line Contents
-==============================================================
-   535                                               @profile
-   536                                               def delete_disk(self, disk_id):
-   537                                                   url_params = azure_helpers.parse_url(VOLUME_RESOURCE_ID,
-   538                                                                                        disk_id)
-   539                                                   disk_name = url_params.get(VOLUME_NAME)
-   540                                                   self.compute_client.disks.delete(self.resource_group, disk_name).wait()
-
-Total time: 0 s
-File: /Users/alex/Desktop/work/cb-profiled/cloudbridge/cloudbridge/cloud/providers/azure/azure_client.py
-Function: update_disk_tags at line 542
-
-Line #      Hits         Time  Per Hit   % Time  Line Contents
-==============================================================
-   542                                               @profile
-   543                                               def update_disk_tags(self, disk_id, tags):
-   544                                                   url_params = azure_helpers.parse_url(VOLUME_RESOURCE_ID,
-   545                                                                                        disk_id)
-   546                                                   disk_name = url_params.get(VOLUME_NAME)
-   547                                                   return self.compute_client.disks.update(
-   548                                                       self.resource_group,
-   549                                                       disk_name,
-   550                                                       {'tags': tags},
-   551                                                       raw=True
-   552                                                   )
-
-Total time: 0 s
-File: /Users/alex/Desktop/work/cb-profiled/cloudbridge/cloudbridge/cloud/providers/azure/azure_client.py
-Function: list_snapshots at line 554
-
-Line #      Hits         Time  Per Hit   % Time  Line Contents
-==============================================================
-   554                                               @profile
-   555                                               def list_snapshots(self):
-   556                                                   return self.compute_client.snapshots. \
-   557                                                       list_by_resource_group(self.resource_group)
-
-Total time: 0 s
-File: /Users/alex/Desktop/work/cb-profiled/cloudbridge/cloudbridge/cloud/providers/azure/azure_client.py
-Function: get_snapshot at line 559
-
-Line #      Hits         Time  Per Hit   % Time  Line Contents
-==============================================================
-   559                                               @profile
-   560                                               def get_snapshot(self, snapshot_id):
-   561                                                   url_params = azure_helpers.parse_url(SNAPSHOT_RESOURCE_ID,
-   562                                                                                        snapshot_id)
-   563                                                   snapshot_name = url_params.get(SNAPSHOT_NAME)
-   564                                                   return self.compute_client.snapshots.get(self.resource_group,
-   565                                                                                            snapshot_name)
-
-Total time: 0 s
-File: /Users/alex/Desktop/work/cb-profiled/cloudbridge/cloudbridge/cloud/providers/azure/azure_client.py
-Function: create_snapshot at line 567
-
-Line #      Hits         Time  Per Hit   % Time  Line Contents
-==============================================================
-   567                                               @profile
-   568                                               def create_snapshot(self, snapshot_name, params):
-   569                                                   return self.compute_client.snapshots.create_or_update(
-   570                                                       self.resource_group,
-   571                                                       snapshot_name,
-   572                                                       params
-   573                                                   ).result()
-
-Total time: 0 s
-File: /Users/alex/Desktop/work/cb-profiled/cloudbridge/cloudbridge/cloud/providers/azure/azure_client.py
-Function: delete_snapshot at line 575
-
-Line #      Hits         Time  Per Hit   % Time  Line Contents
-==============================================================
-   575                                               @profile
-   576                                               def delete_snapshot(self, snapshot_id):
-   577                                                   url_params = azure_helpers.parse_url(SNAPSHOT_RESOURCE_ID,
-   578                                                                                        snapshot_id)
-   579                                                   snapshot_name = url_params.get(SNAPSHOT_NAME)
-   580                                                   self.compute_client.snapshots.delete(self.resource_group,
-   581                                                                                        snapshot_name).wait()
-
-Total time: 0 s
-File: /Users/alex/Desktop/work/cb-profiled/cloudbridge/cloudbridge/cloud/providers/azure/azure_client.py
-Function: update_snapshot_tags at line 583
-
-Line #      Hits         Time  Per Hit   % Time  Line Contents
-==============================================================
-   583                                               @profile
-   584                                               def update_snapshot_tags(self, snapshot_id, tags):
-   585                                                   url_params = azure_helpers.parse_url(SNAPSHOT_RESOURCE_ID,
-   586                                                                                        snapshot_id)
-   587                                                   snapshot_name = url_params.get(SNAPSHOT_NAME)
-   588                                                   return self.compute_client.snapshots.update(
-   589                                                       self.resource_group,
-   590                                                       snapshot_name,
-   591                                                       {'tags': tags},
-   592                                                       raw=True
-   593                                                   )
-
-Total time: 0 s
-File: /Users/alex/Desktop/work/cb-profiled/cloudbridge/cloudbridge/cloud/providers/azure/azure_client.py
-Function: is_gallery_image at line 595
-
-Line #      Hits         Time  Per Hit   % Time  Line Contents
-==============================================================
-   595                                               @profile
-   596                                               def is_gallery_image(self, image_id):
-   597                                                   url_params = azure_helpers.parse_url(IMAGE_RESOURCE_ID,
-   598                                                                                        image_id)
-   599                                                   # If it is a gallery image, it will always have an offer
-   600                                                   return 'offer' in url_params
-
-Total time: 0 s
-File: /Users/alex/Desktop/work/cb-profiled/cloudbridge/cloudbridge/cloud/providers/azure/azure_client.py
-Function: create_image at line 602
-
-Line #      Hits         Time  Per Hit   % Time  Line Contents
-==============================================================
-   602                                               @profile
-   603                                               def create_image(self, name, params):
-   604                                                   return self.compute_client.images. \
-   605                                                       create_or_update(self.resource_group, name,
-   606                                                                        params).result()
-
-Total time: 0 s
-File: /Users/alex/Desktop/work/cb-profiled/cloudbridge/cloudbridge/cloud/providers/azure/azure_client.py
-Function: delete_image at line 608
-
-Line #      Hits         Time  Per Hit   % Time  Line Contents
-==============================================================
-   608                                               @profile
-   609                                               def delete_image(self, image_id):
-   610                                                   url_params = azure_helpers.parse_url(IMAGE_RESOURCE_ID,
-   611                                                                                        image_id)
-   612                                                   if not self.is_gallery_image(image_id):
-   613                                                       name = url_params.get(IMAGE_NAME)
-   614                                                       self.compute_client.images.delete(self.resource_group, name).wait()
-
-Total time: 0 s
-File: /Users/alex/Desktop/work/cb-profiled/cloudbridge/cloudbridge/cloud/providers/azure/azure_client.py
-Function: list_images at line 616
-
-Line #      Hits         Time  Per Hit   % Time  Line Contents
-==============================================================
-   616                                               @profile
-   617                                               def list_images(self):
-   618                                                   azure_images = list(self.compute_client.images.
-   619                                                                       list_by_resource_group(self.resource_group))
-   620                                                   return azure_images
-
-Total time: 0 s
-File: /Users/alex/Desktop/work/cb-profiled/cloudbridge/cloudbridge/cloud/providers/azure/azure_client.py
-Function: list_gallery_refs at line 622
-
-Line #      Hits         Time  Per Hit   % Time  Line Contents
-==============================================================
-   622                                               @profile
-   623                                               def list_gallery_refs(self):
-   624                                                   return gallery_image_references
-
-Total time: 0 s
-File: /Users/alex/Desktop/work/cb-profiled/cloudbridge/cloudbridge/cloud/providers/azure/azure_client.py
-Function: get_image at line 626
-
-Line #      Hits         Time  Per Hit   % Time  Line Contents
-==============================================================
-   626                                               @profile
-   627                                               def get_image(self, image_id):
-   628                                                   url_params = azure_helpers.parse_url(IMAGE_RESOURCE_ID,
-   629                                                                                        image_id)
-   630                                                   if self.is_gallery_image(image_id):
-   631                                                       return GalleryImageReference(publisher=url_params['publisher'],
-   632                                                                                    offer=url_params['offer'],
-   633                                                                                    sku=url_params['sku'],
-   634                                                                                    version=url_params['version'])
-   635                                                   else:
-   636                                                       name = url_params.get(IMAGE_NAME)
-   637                                                       return self.compute_client.images.get(self.resource_group, name)
-
-Total time: 0 s
-File: /Users/alex/Desktop/work/cb-profiled/cloudbridge/cloudbridge/cloud/providers/azure/azure_client.py
-Function: update_image_tags at line 639
-
-Line #      Hits         Time  Per Hit   % Time  Line Contents
-==============================================================
-   639                                               @profile
-   640                                               def update_image_tags(self, image_id, tags):
-   641                                                   url_params = azure_helpers.parse_url(IMAGE_RESOURCE_ID,
-   642                                                                                        image_id)
-   643                                                   if self.is_gallery_image(image_id):
-   644                                                       return True
-   645                                                   else:
-   646                                                       name = url_params.get(IMAGE_NAME)
-   647                                                       return self.compute_client.images. \
-   648                                                           create_or_update(self.resource_group, name,
-   649                                                                            {
-   650                                                                                'tags': tags,
-   651                                                                                'location': self.region_name
-   652                                                                            }).result()
-
-Total time: 0 s
-File: /Users/alex/Desktop/work/cb-profiled/cloudbridge/cloudbridge/cloud/providers/azure/azure_client.py
-Function: list_vm_types at line 654
-
-Line #      Hits         Time  Per Hit   % Time  Line Contents
-==============================================================
-   654                                               @profile
-   655                                               def list_vm_types(self):
-   656                                                   return self.compute_client.virtual_machine_sizes. \
-   657                                                       list(self.region_name)
-
-Total time: 0 s
-File: /Users/alex/Desktop/work/cb-profiled/cloudbridge/cloudbridge/cloud/providers/azure/azure_client.py
-Function: list_networks at line 659
-
-Line #      Hits         Time  Per Hit   % Time  Line Contents
-==============================================================
-   659                                               @profile
-   660                                               def list_networks(self):
-   661                                                   return self.network_management_client.virtual_networks.list(
-   662                                                       self.resource_group)
-
-Total time: 0 s
-File: /Users/alex/Desktop/work/cb-profiled/cloudbridge/cloudbridge/cloud/providers/azure/azure_client.py
-Function: get_network at line 664
-
-Line #      Hits         Time  Per Hit   % Time  Line Contents
-==============================================================
-   664                                               @profile
-   665                                               def get_network(self, network_id):
-   666                                                   url_params = azure_helpers.parse_url(NETWORK_RESOURCE_ID,
-   667                                                                                        network_id)
-   668                                                   network_name = url_params.get(NETWORK_NAME)
-   669                                                   return self.network_management_client.virtual_networks.get(
-   670                                                       self.resource_group, network_name)
-
-Total time: 0 s
-File: /Users/alex/Desktop/work/cb-profiled/cloudbridge/cloudbridge/cloud/providers/azure/azure_client.py
-Function: create_network at line 672
-
-Line #      Hits         Time  Per Hit   % Time  Line Contents
-==============================================================
-   672                                               @profile
-   673                                               def create_network(self, name, params):
-   674                                                   return self.network_management_client.virtual_networks. \
-   675                                                       create_or_update(self.resource_group,
-   676                                                                        name,
-   677                                                                        parameters=params).result()
-
-Total time: 0 s
-File: /Users/alex/Desktop/work/cb-profiled/cloudbridge/cloudbridge/cloud/providers/azure/azure_client.py
-Function: delete_network at line 679
-
-Line #      Hits         Time  Per Hit   % Time  Line Contents
-==============================================================
-   679                                               @profile
-   680                                               def delete_network(self, network_id):
-   681                                                   url_params = azure_helpers.parse_url(NETWORK_RESOURCE_ID, network_id)
-   682                                                   network_name = url_params.get(NETWORK_NAME)
-   683                                                   return self.network_management_client.virtual_networks. \
-   684                                                       delete(self.resource_group, network_name).wait()
-
-Total time: 0 s
-File: /Users/alex/Desktop/work/cb-profiled/cloudbridge/cloudbridge/cloud/providers/azure/azure_client.py
-Function: update_network_tags at line 686
-
-Line #      Hits         Time  Per Hit   % Time  Line Contents
-==============================================================
-   686                                               @profile
-   687                                               def update_network_tags(self, network_id, tags):
-   688                                                   url_params = azure_helpers.parse_url(NETWORK_RESOURCE_ID, network_id)
-   689                                                   network_name = url_params.get(NETWORK_NAME)
-   690                                                   return self.network_management_client.virtual_networks. \
-   691                                                       create_or_update(self.resource_group,
-   692                                                                        network_name, tags).result()
-
-Total time: 0 s
-File: /Users/alex/Desktop/work/cb-profiled/cloudbridge/cloudbridge/cloud/providers/azure/azure_client.py
-Function: get_network_id_for_subnet at line 694
-
-Line #      Hits         Time  Per Hit   % Time  Line Contents
-==============================================================
-   694                                               @profile
-   695                                               def get_network_id_for_subnet(self, subnet_id):
-   696                                                   url_params = azure_helpers.parse_url(SUBNET_RESOURCE_ID, subnet_id)
-   697                                                   network_id = NETWORK_RESOURCE_ID[0]
-   698                                                   for key, val in url_params.items():
-   699                                                       network_id = network_id.replace("{" + key + "}", val)
-   700                                                   return network_id
-
-Total time: 0 s
-File: /Users/alex/Desktop/work/cb-profiled/cloudbridge/cloudbridge/cloud/providers/azure/azure_client.py
-Function: list_subnets at line 702
-
-Line #      Hits         Time  Per Hit   % Time  Line Contents
-==============================================================
-   702                                               @profile
-   703                                               def list_subnets(self, network_id):
-   704                                                   url_params = azure_helpers.parse_url(NETWORK_RESOURCE_ID, network_id)
-   705                                                   network_name = url_params.get(NETWORK_NAME)
-   706                                                   return self.network_management_client.subnets. \
-   707                                                       list(self.resource_group, network_name)
-
-Total time: 0 s
-File: /Users/alex/Desktop/work/cb-profiled/cloudbridge/cloudbridge/cloud/providers/azure/azure_client.py
-Function: get_subnet at line 709
-
-Line #      Hits         Time  Per Hit   % Time  Line Contents
-==============================================================
-   709                                               @profile
-   710                                               def get_subnet(self, subnet_id):
-   711                                                   url_params = azure_helpers.parse_url(SUBNET_RESOURCE_ID,
-   712                                                                                        subnet_id)
-   713                                                   network_name = url_params.get(NETWORK_NAME)
-   714                                                   subnet_name = url_params.get(SUBNET_NAME)
-   715                                                   return self.network_management_client.subnets. \
-   716                                                       get(self.resource_group, network_name, subnet_name)
-
-Total time: 0 s
-File: /Users/alex/Desktop/work/cb-profiled/cloudbridge/cloudbridge/cloud/providers/azure/azure_client.py
-Function: create_subnet at line 718
-
-Line #      Hits         Time  Per Hit   % Time  Line Contents
-==============================================================
-   718                                               @profile
-   719                                               def create_subnet(self, network_id, subnet_name, params):
-   720                                                   url_params = azure_helpers.parse_url(NETWORK_RESOURCE_ID, network_id)
-   721                                                   network_name = url_params.get(NETWORK_NAME)
-   722                                                   result_create = self.network_management_client \
-   723                                                       .subnets.create_or_update(
-   724                                                           self.resource_group,
-   725                                                           network_name,
-   726                                                           subnet_name,
-   727                                                           params
-   728                                                       )
-   729                                                   subnet_info = result_create.result()
-   730                                           
-   731                                                   return subnet_info
-
-Total time: 0 s
-File: /Users/alex/Desktop/work/cb-profiled/cloudbridge/cloudbridge/cloud/providers/azure/azure_client.py
-Function: __if_subnet_in_use at line 733
-
-Line #      Hits         Time  Per Hit   % Time  Line Contents
-==============================================================
-   733                                               @profile
-   734                                               def __if_subnet_in_use(e):
-   735                                                   # return True if the CloudError exception is due to subnet being in use
-   736                                                   if isinstance(e, CloudError):
-   737                                                       if e.error.error == "InUseSubnetCannotBeDeleted":
-   738                                                           return True
-   739                                                   return False
-
-Total time: 0 s
-File: /Users/alex/Desktop/work/cb-profiled/cloudbridge/cloudbridge/cloud/providers/azure/azure_client.py
-Function: delete_subnet at line 741
-
-Line #      Hits         Time  Per Hit   % Time  Line Contents
-==============================================================
-   741                                               @tenacity.retry(stop=tenacity.stop_after_attempt(5),
-   742                                                               retry=tenacity.retry_if_exception(__if_subnet_in_use),
-   743                                                               wait=tenacity.wait_fixed(5),
-   744                                                               reraise=True)
-   745                                               @profile
-   746                                               def delete_subnet(self, subnet_id):
-   747                                                   url_params = azure_helpers.parse_url(SUBNET_RESOURCE_ID,
-   748                                                                                        subnet_id)
-   749                                                   network_name = url_params.get(NETWORK_NAME)
-   750                                                   subnet_name = url_params.get(SUBNET_NAME)
-   751                                           
-   752                                                   try:
-   753                                                       result_delete = self.network_management_client \
-   754                                                           .subnets.delete(
-   755                                                               self.resource_group,
-   756                                                               network_name,
-   757                                                               subnet_name
-   758                                                           )
-   759                                                       result_delete.wait()
-   760                                                   except CloudError as cloud_error:
-   761                                                       log.exception(cloud_error.message)
-   762                                                       raise cloud_error
-
-Total time: 0 s
-File: /Users/alex/Desktop/work/cb-profiled/cloudbridge/cloudbridge/cloud/providers/azure/azure_client.py
-Function: create_floating_ip at line 764
-
-Line #      Hits         Time  Per Hit   % Time  Line Contents
-==============================================================
-   764                                               @profile
-   765                                               def create_floating_ip(self, public_ip_name, public_ip_parameters):
-   766                                                   return self.network_management_client.public_ip_addresses. \
-   767                                                       create_or_update(self.resource_group,
-   768                                                                        public_ip_name,
-   769                                                                        public_ip_parameters).result()
-
-Total time: 0 s
-File: /Users/alex/Desktop/work/cb-profiled/cloudbridge/cloudbridge/cloud/providers/azure/azure_client.py
-Function: get_floating_ip at line 771
-
-Line #      Hits         Time  Per Hit   % Time  Line Contents
-==============================================================
-   771                                               @profile
-   772                                               def get_floating_ip(self, public_ip_id):
-   773                                                   url_params = azure_helpers.parse_url(PUBLIC_IP_RESOURCE_ID,
-   774                                                                                        public_ip_id)
-   775                                                   public_ip_name = url_params.get(PUBLIC_IP_NAME)
-   776                                                   return self.network_management_client. \
-   777                                                       public_ip_addresses.get(self.resource_group, public_ip_name)
-
-Total time: 0 s
-File: /Users/alex/Desktop/work/cb-profiled/cloudbridge/cloudbridge/cloud/providers/azure/azure_client.py
-Function: delete_floating_ip at line 779
-
-Line #      Hits         Time  Per Hit   % Time  Line Contents
-==============================================================
-   779                                               @profile
-   780                                               def delete_floating_ip(self, public_ip_id):
-   781                                                   url_params = azure_helpers.parse_url(PUBLIC_IP_RESOURCE_ID,
-   782                                                                                        public_ip_id)
-   783                                                   public_ip_name = url_params.get(PUBLIC_IP_NAME)
-   784                                                   self.network_management_client. \
-   785                                                       public_ip_addresses.delete(self.resource_group,
-   786                                                                                  public_ip_name).wait()
-
-Total time: 0 s
-File: /Users/alex/Desktop/work/cb-profiled/cloudbridge/cloudbridge/cloud/providers/azure/azure_client.py
-Function: update_fip_tags at line 788
-
-Line #      Hits         Time  Per Hit   % Time  Line Contents
-==============================================================
-   788                                               @profile
-   789                                               def update_fip_tags(self, fip_id, tags):
-   790                                                   url_params = azure_helpers.parse_url(PUBLIC_IP_RESOURCE_ID,
-   791                                                                                        fip_id)
-   792                                                   fip_name = url_params.get(PUBLIC_IP_NAME)
-   793                                                   self.network_management_client.public_ip_addresses. \
-   794                                                       create_or_update(self.resource_group,
-   795                                                                        fip_name, tags).result()
-
-Total time: 0 s
-File: /Users/alex/Desktop/work/cb-profiled/cloudbridge/cloudbridge/cloud/providers/azure/azure_client.py
-Function: list_floating_ips at line 797
-
-Line #      Hits         Time  Per Hit   % Time  Line Contents
-==============================================================
-   797                                               @profile
-   798                                               def list_floating_ips(self):
-   799                                                   return self.network_management_client.public_ip_addresses.list(
-   800                                                       self.resource_group)
-
-Total time: 0 s
-File: /Users/alex/Desktop/work/cb-profiled/cloudbridge/cloudbridge/cloud/providers/azure/azure_client.py
-Function: list_vm at line 802
-
-Line #      Hits         Time  Per Hit   % Time  Line Contents
-==============================================================
-   802                                               @profile
-   803                                               def list_vm(self):
-   804                                                   return self.compute_client.virtual_machines.list(
-   805                                                       self.resource_group
-   806                                                   )
-
-Total time: 0 s
-File: /Users/alex/Desktop/work/cb-profiled/cloudbridge/cloudbridge/cloud/providers/azure/azure_client.py
-Function: restart_vm at line 808
-
-Line #      Hits         Time  Per Hit   % Time  Line Contents
-==============================================================
-   808                                               @profile
-   809                                               def restart_vm(self, vm_id):
-   810                                                   url_params = azure_helpers.parse_url(VM_RESOURCE_ID,
-   811                                                                                        vm_id)
-   812                                                   vm_name = url_params.get(VM_NAME)
-   813                                                   return self.compute_client.virtual_machines.restart(
-   814                                                       self.resource_group, vm_name).wait()
-
-Total time: 0 s
-File: /Users/alex/Desktop/work/cb-profiled/cloudbridge/cloudbridge/cloud/providers/azure/azure_client.py
-Function: delete_vm at line 816
-
-Line #      Hits         Time  Per Hit   % Time  Line Contents
-==============================================================
-   816                                               @profile
-   817                                               def delete_vm(self, vm_id):
-   818                                                   url_params = azure_helpers.parse_url(VM_RESOURCE_ID,
-   819                                                                                        vm_id)
-   820                                                   vm_name = url_params.get(VM_NAME)
-   821                                                   return self.compute_client.virtual_machines.delete(
-   822                                                       self.resource_group, vm_name).wait()
-
-Total time: 0 s
-File: /Users/alex/Desktop/work/cb-profiled/cloudbridge/cloudbridge/cloud/providers/azure/azure_client.py
-Function: get_vm at line 824
-
-Line #      Hits         Time  Per Hit   % Time  Line Contents
-==============================================================
-   824                                               @profile
-   825                                               def get_vm(self, vm_id):
-   826                                                   url_params = azure_helpers.parse_url(VM_RESOURCE_ID,
-   827                                                                                        vm_id)
-   828                                                   vm_name = url_params.get(VM_NAME)
-   829                                                   return self.compute_client.virtual_machines.get(
-   830                                                       self.resource_group,
-   831                                                       vm_name,
-   832                                                       expand='instanceView'
-   833                                                   )
-
-Total time: 0 s
-File: /Users/alex/Desktop/work/cb-profiled/cloudbridge/cloudbridge/cloud/providers/azure/azure_client.py
-Function: create_vm at line 835
-
-Line #      Hits         Time  Per Hit   % Time  Line Contents
-==============================================================
-   835                                               @profile
-   836                                               def create_vm(self, vm_name, params):
-   837                                                   return self.compute_client.virtual_machines. \
-   838                                                       create_or_update(self.resource_group,
-   839                                                                        vm_name, params).result()
-
-Total time: 0 s
-File: /Users/alex/Desktop/work/cb-profiled/cloudbridge/cloudbridge/cloud/providers/azure/azure_client.py
-Function: update_vm at line 841
-
-Line #      Hits         Time  Per Hit   % Time  Line Contents
-==============================================================
-   841                                               @profile
-   842                                               def update_vm(self, vm_id, params):
-   843                                                   url_params = azure_helpers.parse_url(VM_RESOURCE_ID,
-   844                                                                                        vm_id)
-   845                                                   vm_name = url_params.get(VM_NAME)
-   846                                                   return self.compute_client.virtual_machines. \
-   847                                                       create_or_update(self.resource_group,
-   848                                                                        vm_name, params, raw=True)
-
-Total time: 0 s
-File: /Users/alex/Desktop/work/cb-profiled/cloudbridge/cloudbridge/cloud/providers/azure/azure_client.py
-Function: deallocate_vm at line 850
-
-Line #      Hits         Time  Per Hit   % Time  Line Contents
-==============================================================
-   850                                               @profile
-   851                                               def deallocate_vm(self, vm_id):
-   852                                                   url_params = azure_helpers.parse_url(VM_RESOURCE_ID,
-   853                                                                                        vm_id)
-   854                                                   vm_name = url_params.get(VM_NAME)
-   855                                                   self.compute_client. \
-   856                                                       virtual_machines.deallocate(self.resource_group,
-   857                                                                                   vm_name).wait()
-
-Total time: 0 s
-File: /Users/alex/Desktop/work/cb-profiled/cloudbridge/cloudbridge/cloud/providers/azure/azure_client.py
-Function: generalize_vm at line 859
-
-Line #      Hits         Time  Per Hit   % Time  Line Contents
-==============================================================
-   859                                               @profile
-   860                                               def generalize_vm(self, vm_id):
-   861                                                   url_params = azure_helpers.parse_url(VM_RESOURCE_ID,
-   862                                                                                        vm_id)
-   863                                                   vm_name = url_params.get(VM_NAME)
-   864                                                   self.compute_client.virtual_machines. \
-   865                                                       generalize(self.resource_group, vm_name)
-
-Total time: 0 s
-File: /Users/alex/Desktop/work/cb-profiled/cloudbridge/cloudbridge/cloud/providers/azure/azure_client.py
-Function: start_vm at line 867
-
-Line #      Hits         Time  Per Hit   % Time  Line Contents
-==============================================================
-   867                                               @profile
-   868                                               def start_vm(self, vm_id):
-   869                                                   url_params = azure_helpers.parse_url(VM_RESOURCE_ID,
-   870                                                                                        vm_id)
-   871                                                   vm_name = url_params.get(VM_NAME)
-   872                                                   self.compute_client.virtual_machines. \
-   873                                                       start(self.resource_group,
-   874                                                             vm_name).wait()
-
-Total time: 0 s
-File: /Users/alex/Desktop/work/cb-profiled/cloudbridge/cloudbridge/cloud/providers/azure/azure_client.py
-Function: update_vm_tags at line 876
-
-Line #      Hits         Time  Per Hit   % Time  Line Contents
-==============================================================
-   876                                               @profile
-   877                                               def update_vm_tags(self, vm_id, tags):
-   878                                                   url_params = azure_helpers.parse_url(VM_RESOURCE_ID,
-   879                                                                                        vm_id)
-   880                                                   vm_name = url_params.get(VM_NAME)
-   881                                                   self.compute_client.virtual_machines. \
-   882                                                       create_or_update(self.resource_group,
-   883                                                                        vm_name, tags).result()
-
-Total time: 0 s
-File: /Users/alex/Desktop/work/cb-profiled/cloudbridge/cloudbridge/cloud/providers/azure/azure_client.py
-Function: delete_nic at line 885
-
-Line #      Hits         Time  Per Hit   % Time  Line Contents
-==============================================================
-   885                                               @profile
-   886                                               def delete_nic(self, nic_id):
-   887                                                   nic_params = azure_helpers.\
-   888                                                       parse_url(NETWORK_INTERFACE_RESOURCE_ID, nic_id)
-   889                                                   nic_name = nic_params.get(NETWORK_INTERFACE_NAME)
-   890                                                   self.network_management_client. \
-   891                                                       network_interfaces.delete(self.resource_group,
-   892                                                                                 nic_name).wait()
-
-Total time: 0 s
-File: /Users/alex/Desktop/work/cb-profiled/cloudbridge/cloudbridge/cloud/providers/azure/azure_client.py
-Function: get_nic at line 894
-
-Line #      Hits         Time  Per Hit   % Time  Line Contents
-==============================================================
-   894                                               @profile
-   895                                               def get_nic(self, nic_id):
-   896                                                   nic_params = azure_helpers.\
-   897                                                       parse_url(NETWORK_INTERFACE_RESOURCE_ID, nic_id)
-   898                                                   nic_name = nic_params.get(NETWORK_INTERFACE_NAME)
-   899                                                   return self.network_management_client. \
-   900                                                       network_interfaces.get(self.resource_group, nic_name)
-
-Total time: 0 s
-File: /Users/alex/Desktop/work/cb-profiled/cloudbridge/cloudbridge/cloud/providers/azure/azure_client.py
-Function: update_nic at line 902
-
-Line #      Hits         Time  Per Hit   % Time  Line Contents
-==============================================================
-   902                                               @profile
-   903                                               def update_nic(self, nic_id, params):
-   904                                                   nic_params = azure_helpers.\
-   905                                                       parse_url(NETWORK_INTERFACE_RESOURCE_ID, nic_id)
-   906                                                   nic_name = nic_params.get(NETWORK_INTERFACE_NAME)
-   907                                                   async_nic_creation = self.network_management_client. \
-   908                                                       network_interfaces.create_or_update(
-   909                                                           self.resource_group,
-   910                                                           nic_name,
-   911                                                           params
-   912                                                       )
-   913                                                   nic_info = async_nic_creation.result()
-   914                                                   return nic_info
-
-Total time: 0 s
-File: /Users/alex/Desktop/work/cb-profiled/cloudbridge/cloudbridge/cloud/providers/azure/azure_client.py
-Function: create_nic at line 916
-
-Line #      Hits         Time  Per Hit   % Time  Line Contents
-==============================================================
-   916                                               @profile
-   917                                               def create_nic(self, nic_name, params):
-   918                                                   return self.network_management_client. \
-   919                                                       network_interfaces.create_or_update(
-   920                                                           self.resource_group,
-   921                                                           nic_name,
-   922                                                           params
-   923                                                       ).result()
-
-Total time: 0 s
-File: /Users/alex/Desktop/work/cb-profiled/cloudbridge/cloudbridge/cloud/providers/azure/azure_client.py
-Function: create_public_key at line 925
-
-Line #      Hits         Time  Per Hit   % Time  Line Contents
-==============================================================
-   925                                               @profile
-   926                                               def create_public_key(self, entity):
-   927                                                   return self.table_service. \
-   928                                                       insert_or_replace_entity(self.public_key_storage_table_name,
-   929                                                                                entity)
-
-Total time: 0 s
-File: /Users/alex/Desktop/work/cb-profiled/cloudbridge/cloudbridge/cloud/providers/azure/azure_client.py
-Function: get_public_key at line 931
-
-Line #      Hits         Time  Per Hit   % Time  Line Contents
-==============================================================
-   931                                               @profile
-   932                                               def get_public_key(self, name):
-   933                                                   entities = self.table_service. \
-   934                                                       query_entities(self.public_key_storage_table_name,
-   935                                                                      "Name eq '{0}'".format(name), num_results=1)
-   936                                           
-   937                                                   return entities.items[0] if len(entities.items) > 0 else None
-
-Total time: 0 s
-File: /Users/alex/Desktop/work/cb-profiled/cloudbridge/cloudbridge/cloud/providers/azure/azure_client.py
-Function: delete_public_key at line 939
-
-Line #      Hits         Time  Per Hit   % Time  Line Contents
-==============================================================
-   939                                               @profile
-   940                                               def delete_public_key(self, entity):
-   941                                                   self.table_service.delete_entity(self.public_key_storage_table_name,
-   942                                                                                    entity.PartitionKey, entity.RowKey)
-
-Total time: 0 s
-File: /Users/alex/Desktop/work/cb-profiled/cloudbridge/cloudbridge/cloud/providers/azure/azure_client.py
-Function: list_public_keys at line 944
-
-Line #      Hits         Time  Per Hit   % Time  Line Contents
-==============================================================
-   944                                               @profile
-   945                                               def list_public_keys(self, partition_key, limit=None, marker=None):
-   946                                                   entities = self.table_service. \
-   947                                                       query_entities(self.public_key_storage_table_name,
-   948                                                                      "PartitionKey eq '{0}'".format(partition_key),
-   949                                                                      marker=marker, num_results=limit)
-   950                                                   return (entities.items, entities.next_marker)
-
-Total time: 0 s
-File: /Users/alex/Desktop/work/cb-profiled/cloudbridge/cloudbridge/cloud/providers/azure/azure_client.py
-Function: delete_route_table at line 952
-
-Line #      Hits         Time  Per Hit   % Time  Line Contents
-==============================================================
-   952                                               @profile
-   953                                               def delete_route_table(self, route_table_name):
-   954                                                   self.network_management_client. \
-   955                                                       route_tables.delete(self.resource_group, route_table_name
-   956                                                                           ).wait()
-
-Total time: 0 s
-File: /Users/alex/Desktop/work/cb-profiled/cloudbridge/cloudbridge/cloud/providers/azure/azure_client.py
-Function: attach_subnet_to_route_table at line 958
-
-Line #      Hits         Time  Per Hit   % Time  Line Contents
-==============================================================
-   958                                               @profile
-   959                                               def attach_subnet_to_route_table(self, subnet_id, route_table_id):
-   960                                                   url_params = azure_helpers.parse_url(SUBNET_RESOURCE_ID,
-   961                                                                                        subnet_id)
-   962                                                   network_name = url_params.get(NETWORK_NAME)
-   963                                                   subnet_name = url_params.get(SUBNET_NAME)
-   964                                           
-   965                                                   subnet_info = self.network_management_client.subnets.get(
-   966                                                       self.resource_group,
-   967                                                       network_name,
-   968                                                       subnet_name
-   969                                                   )
-   970                                                   if subnet_info:
-   971                                                       subnet_info.route_table = {
-   972                                                           'id': route_table_id
-   973                                                       }
-   974                                           
-   975                                                       result_create = self.network_management_client. \
-   976                                                           subnets.create_or_update(
-   977                                                            self.resource_group,
-   978                                                            network_name,
-   979                                                            subnet_name,
-   980                                                            subnet_info)
-   981                                                       subnet_info = result_create.result()
-   982                                           
-   983                                                   return subnet_info
-
-Total time: 0 s
-File: /Users/alex/Desktop/work/cb-profiled/cloudbridge/cloudbridge/cloud/providers/azure/azure_client.py
-Function: detach_subnet_to_route_table at line 985
-
-Line #      Hits         Time  Per Hit   % Time  Line Contents
-==============================================================
-   985                                               @profile
-   986                                               def detach_subnet_to_route_table(self, subnet_id, route_table_id):
-   987                                                   url_params = azure_helpers.parse_url(SUBNET_RESOURCE_ID,
-   988                                                                                        subnet_id)
-   989                                                   network_name = url_params.get(NETWORK_NAME)
-   990                                                   subnet_name = url_params.get(SUBNET_NAME)
-   991                                           
-   992                                                   subnet_info = self.network_management_client.subnets.get(
-   993                                                       self.resource_group,
-   994                                                       network_name,
-   995                                                       subnet_name
-   996                                                   )
-   997                                           
-   998                                                   if subnet_info and subnet_info.route_table.id == route_table_id:
-   999                                                       subnet_info.route_table = None
-  1000                                           
-  1001                                                       result_create = self.network_management_client. \
-  1002                                                           subnets.create_or_update(
-  1003                                                            self.resource_group,
-  1004                                                            network_name,
-  1005                                                            subnet_name,
-  1006                                                            subnet_info)
-  1007                                                       subnet_info = result_create.result()
-  1008                                           
-  1009                                                   return subnet_info
-
-Total time: 0 s
-File: /Users/alex/Desktop/work/cb-profiled/cloudbridge/cloudbridge/cloud/providers/azure/azure_client.py
-Function: list_route_tables at line 1011
-
-Line #      Hits         Time  Per Hit   % Time  Line Contents
-==============================================================
-  1011                                               @profile
-  1012                                               def list_route_tables(self):
-  1013                                                   return self.network_management_client. \
-  1014                                                       route_tables.list(self.resource_group)
-
-Total time: 0 s
-File: /Users/alex/Desktop/work/cb-profiled/cloudbridge/cloudbridge/cloud/providers/azure/azure_client.py
-Function: get_route_table at line 1016
-
-Line #      Hits         Time  Per Hit   % Time  Line Contents
-==============================================================
-  1016                                               @profile
-  1017                                               def get_route_table(self, router_id):
-  1018                                                   url_params = azure_helpers.parse_url(ROUTER_RESOURCE_ID,
-  1019                                                                                        router_id)
-  1020                                                   router_name = url_params.get(ROUTER_NAME)
-  1021                                                   return self.network_management_client. \
-  1022                                                       route_tables.get(self.resource_group, router_name)
-
-Total time: 0 s
-File: /Users/alex/Desktop/work/cb-profiled/cloudbridge/cloudbridge/cloud/providers/azure/azure_client.py
-Function: create_route_table at line 1024
-
-Line #      Hits         Time  Per Hit   % Time  Line Contents
-==============================================================
-  1024                                               @profile
-  1025                                               def create_route_table(self, route_table_name, params):
-  1026                                                   return self.network_management_client. \
-  1027                                                       route_tables.create_or_update(
-  1028                                                        self.resource_group,
-  1029                                                        route_table_name, params).result()
-
-Total time: 0 s
-File: /Users/alex/Desktop/work/cb-profiled/cloudbridge/cloudbridge/cloud/providers/azure/azure_client.py
-Function: update_route_table_tags at line 1031
-
-Line #      Hits         Time  Per Hit   % Time  Line Contents
-==============================================================
-  1031                                               @profile
-  1032                                               def update_route_table_tags(self, route_table_name, tags):
-  1033                                                   self.network_management_client.route_tables. \
-  1034                                                       create_or_update(self.resource_group,
-  1035                                                                        route_table_name, tags).result()
-

+ 0 - 1467
results/region.res

@@ -1,1467 +0,0 @@
-Test output
- ....
-----------------------------------------------------------------------
-Ran 4 tests in 7.997s
-
-OK
-
-Wrote profile results to run_tests.py.lprof
-Timer unit: 1e-06 s
-
-Total time: 1.30032 s
-File: /Users/alex/Desktop/work/cb-profiled/cloudbridge/cloudbridge/cloud/providers/azure/azure_client.py
-Function: __init__ at line 160
-
-Line #      Hits         Time  Per Hit   % Time  Line Contents
-==============================================================
-   160                                               @profile
-   161                                               def __init__(self, config):
-   162         4         15.0      3.8      0.0          self._config = config
-   163         4         12.0      3.0      0.0          self.subscription_id = str(config.get('azure_subscription_id'))
-   164         4          3.0      0.8      0.0          self._credentials = ServicePrincipalCredentials(
-   165         4          5.0      1.2      0.0              client_id=config.get('azure_client_id'),
-   166         4          2.0      0.5      0.0              secret=config.get('azure_secret'),
-   167         4    1300186.0 325046.5    100.0              tenant=config.get('azure_tenant')
-   168                                                   )
-   169                                           
-   170         4         16.0      4.0      0.0          self._access_token = config.get('azure_access_token')
-   171         4          7.0      1.8      0.0          self._resource_client = None
-   172         4          4.0      1.0      0.0          self._storage_client = None
-   173         4          4.0      1.0      0.0          self._network_management_client = None
-   174         4          4.0      1.0      0.0          self._subscription_client = None
-   175         4          5.0      1.2      0.0          self._compute_client = None
-   176         4          3.0      0.8      0.0          self._access_key_result = None
-   177         4          7.0      1.8      0.0          self._block_blob_service = None
-   178         4          3.0      0.8      0.0          self._table_service = None
-   179         4          6.0      1.5      0.0          self._storage_account = None
-   180                                           
-   181         4         38.0      9.5      0.0          log.debug("azure subscription : %s", self.subscription_id)
-
-Total time: 0 s
-File: /Users/alex/Desktop/work/cb-profiled/cloudbridge/cloudbridge/cloud/providers/azure/azure_client.py
-Function: access_key_result at line 183
-
-Line #      Hits         Time  Per Hit   % Time  Line Contents
-==============================================================
-   183                                               @property
-   184                                               @tenacity.retry(stop=tenacity.stop_after_attempt(5), reraise=True)
-   185                                               @profile
-   186                                               def access_key_result(self):
-   187                                                   if not self._access_key_result:
-   188                                                       storage_account = self.storage_account
-   189                                           
-   190                                                       if self.get_storage_account(storage_account).\
-   191                                                               provisioning_state.value != 'Succeeded':
-   192                                                           log.debug(
-   193                                                               "Storage account %s is not in Succeeded state yet. ",
-   194                                                               storage_account)
-   195                                                           raise WaitStateException(
-   196                                                               "Waited too long for storage account: {0} to "
-   197                                                               "become ready.".format(
-   198                                                                   storage_account,
-   199                                                                   self.get_storage_account(storage_account).
-   200                                                                   provisioning_state))
-   201                                           
-   202                                                       self._access_key_result = self.storage_client.storage_accounts. \
-   203                                                           list_keys(self.resource_group, storage_account)
-   204                                                   return self._access_key_result
-
-Total time: 0 s
-File: /Users/alex/Desktop/work/cb-profiled/cloudbridge/cloudbridge/cloud/providers/azure/azure_client.py
-Function: resource_group at line 206
-
-Line #      Hits         Time  Per Hit   % Time  Line Contents
-==============================================================
-   206                                               @property
-   207                                               @profile
-   208                                               def resource_group(self):
-   209                                                   return self._config.get('azure_resource_group')
-
-Total time: 0 s
-File: /Users/alex/Desktop/work/cb-profiled/cloudbridge/cloudbridge/cloud/providers/azure/azure_client.py
-Function: storage_account at line 211
-
-Line #      Hits         Time  Per Hit   % Time  Line Contents
-==============================================================
-   211                                               @property
-   212                                               @profile
-   213                                               def storage_account(self):
-   214                                                   return self._config.get('azure_storage_account')
-
-Total time: 0 s
-File: /Users/alex/Desktop/work/cb-profiled/cloudbridge/cloudbridge/cloud/providers/azure/azure_client.py
-Function: region_name at line 216
-
-Line #      Hits         Time  Per Hit   % Time  Line Contents
-==============================================================
-   216                                               @property
-   217                                               @profile
-   218                                               def region_name(self):
-   219                                                   return self._config.get('azure_region_name')
-
-Total time: 0 s
-File: /Users/alex/Desktop/work/cb-profiled/cloudbridge/cloudbridge/cloud/providers/azure/azure_client.py
-Function: public_key_storage_table_name at line 221
-
-Line #      Hits         Time  Per Hit   % Time  Line Contents
-==============================================================
-   221                                               @property
-   222                                               @profile
-   223                                               def public_key_storage_table_name(self):
-   224                                                   return self._config.get('azure_public_key_storage_table_name')
-
-Total time: 0 s
-File: /Users/alex/Desktop/work/cb-profiled/cloudbridge/cloudbridge/cloud/providers/azure/azure_client.py
-Function: storage_client at line 226
-
-Line #      Hits         Time  Per Hit   % Time  Line Contents
-==============================================================
-   226                                               @property
-   227                                               @profile
-   228                                               def storage_client(self):
-   229                                                   if not self._storage_client:
-   230                                                       self._storage_client = \
-   231                                                           StorageManagementClient(self._credentials,
-   232                                                                                   self.subscription_id)
-   233                                                   return self._storage_client
-
-Total time: 0.032752 s
-File: /Users/alex/Desktop/work/cb-profiled/cloudbridge/cloudbridge/cloud/providers/azure/azure_client.py
-Function: subscription_client at line 235
-
-Line #      Hits         Time  Per Hit   % Time  Line Contents
-==============================================================
-   235                                               @property
-   236                                               @profile
-   237                                               def subscription_client(self):
-   238        17         22.0      1.3      0.1          if not self._subscription_client:
-   239         4      32709.0   8177.2     99.9              self._subscription_client = SubscriptionClient(self._credentials)
-   240        17         21.0      1.2      0.1          return self._subscription_client
-
-Total time: 0.065299 s
-File: /Users/alex/Desktop/work/cb-profiled/cloudbridge/cloudbridge/cloud/providers/azure/azure_client.py
-Function: resource_client at line 242
-
-Line #      Hits         Time  Per Hit   % Time  Line Contents
-==============================================================
-   242                                               @property
-   243                                               @profile
-   244                                               def resource_client(self):
-   245         4          4.0      1.0      0.0          if not self._resource_client:
-   246                                                       self._resource_client = \
-   247         4         11.0      2.8      0.0                  ResourceManagementClient(self._credentials,
-   248         4      65272.0  16318.0    100.0                                           self.subscription_id)
-   249         4         12.0      3.0      0.0          return self._resource_client
-
-Total time: 0 s
-File: /Users/alex/Desktop/work/cb-profiled/cloudbridge/cloudbridge/cloud/providers/azure/azure_client.py
-Function: compute_client at line 251
-
-Line #      Hits         Time  Per Hit   % Time  Line Contents
-==============================================================
-   251                                               @property
-   252                                               @profile
-   253                                               def compute_client(self):
-   254                                                   if not self._compute_client:
-   255                                                       self._compute_client = \
-   256                                                           ComputeManagementClient(self._credentials,
-   257                                                                                   self.subscription_id)
-   258                                                   return self._compute_client
-
-Total time: 0 s
-File: /Users/alex/Desktop/work/cb-profiled/cloudbridge/cloudbridge/cloud/providers/azure/azure_client.py
-Function: network_management_client at line 260
-
-Line #      Hits         Time  Per Hit   % Time  Line Contents
-==============================================================
-   260                                               @property
-   261                                               @profile
-   262                                               def network_management_client(self):
-   263                                                   if not self._network_management_client:
-   264                                                       self._network_management_client = NetworkManagementClient(
-   265                                                           self._credentials, self.subscription_id)
-   266                                                   return self._network_management_client
-
-Total time: 0 s
-File: /Users/alex/Desktop/work/cb-profiled/cloudbridge/cloudbridge/cloud/providers/azure/azure_client.py
-Function: blob_service at line 268
-
-Line #      Hits         Time  Per Hit   % Time  Line Contents
-==============================================================
-   268                                               @property
-   269                                               @profile
-   270                                               def blob_service(self):
-   271                                                   self._get_or_create_storage_account()
-   272                                                   if not self._block_blob_service:
-   273                                                       if self._access_token:
-   274                                                           token_credential = TokenCredential(self._access_token)
-   275                                                           self._block_blob_service = BlockBlobService(
-   276                                                               account_name=self.storage_account,
-   277                                                               token_credential=token_credential)
-   278                                                       else:
-   279                                                           self._block_blob_service = BlockBlobService(
-   280                                                               account_name=self.storage_account,
-   281                                                               account_key=self.access_key_result.keys[0].value)
-   282                                                   return self._block_blob_service
-
-Total time: 0 s
-File: /Users/alex/Desktop/work/cb-profiled/cloudbridge/cloudbridge/cloud/providers/azure/azure_client.py
-Function: table_service at line 284
-
-Line #      Hits         Time  Per Hit   % Time  Line Contents
-==============================================================
-   284                                               @property
-   285                                               @profile
-   286                                               def table_service(self):
-   287                                                   self._get_or_create_storage_account()
-   288                                                   if not self._table_service:
-   289                                                       self._table_service = TableService(
-   290                                                           self.storage_account,
-   291                                                           self.access_key_result.keys[0].value)
-   292                                                   if not self._table_service. \
-   293                                                           exists(table_name=self.public_key_storage_table_name):
-   294                                                       self._table_service.create_table(
-   295                                                           self.public_key_storage_table_name)
-   296                                                   return self._table_service
-
-Total time: 1.24978 s
-File: /Users/alex/Desktop/work/cb-profiled/cloudbridge/cloudbridge/cloud/providers/azure/azure_client.py
-Function: get_resource_group at line 298
-
-Line #      Hits         Time  Per Hit   % Time  Line Contents
-==============================================================
-   298                                               @profile
-   299                                               def get_resource_group(self, name):
-   300         4    1249778.0 312444.5    100.0          return self.resource_client.resource_groups.get(name)
-
-Total time: 0 s
-File: /Users/alex/Desktop/work/cb-profiled/cloudbridge/cloudbridge/cloud/providers/azure/azure_client.py
-Function: create_resource_group at line 302
-
-Line #      Hits         Time  Per Hit   % Time  Line Contents
-==============================================================
-   302                                               @profile
-   303                                               def create_resource_group(self, name, parameters):
-   304                                                   return self.resource_client.resource_groups. \
-   305                                                       create_or_update(name, parameters)
-
-Total time: 0 s
-File: /Users/alex/Desktop/work/cb-profiled/cloudbridge/cloudbridge/cloud/providers/azure/azure_client.py
-Function: get_storage_account at line 307
-
-Line #      Hits         Time  Per Hit   % Time  Line Contents
-==============================================================
-   307                                               @profile
-   308                                               def get_storage_account(self, storage_account):
-   309                                                   return self.storage_client.storage_accounts. \
-   310                                                       get_properties(self.resource_group, storage_account)
-
-Total time: 0 s
-File: /Users/alex/Desktop/work/cb-profiled/cloudbridge/cloudbridge/cloud/providers/azure/azure_client.py
-Function: create_storage_account at line 312
-
-Line #      Hits         Time  Per Hit   % Time  Line Contents
-==============================================================
-   312                                               @profile
-   313                                               def create_storage_account(self, name, params):
-   314                                                   return self.storage_client.storage_accounts. \
-   315                                                       create(self.resource_group, name.lower(), params).result()
-
-Total time: 0 s
-File: /Users/alex/Desktop/work/cb-profiled/cloudbridge/cloudbridge/cloud/providers/azure/azure_client.py
-Function: _get_or_create_storage_account at line 319
-
-Line #      Hits         Time  Per Hit   % Time  Line Contents
-==============================================================
-   319                                               @tenacity.retry(stop=tenacity.stop_after_attempt(2),
-   320                                                               retry=tenacity.retry_if_exception_type(CloudError),
-   321                                                               reraise=True)
-   322                                               @profile
-   323                                               def _get_or_create_storage_account(self):
-   324                                                   if self._storage_account:
-   325                                                       return self._storage_account
-   326                                                   else:
-   327                                                       try:
-   328                                                           self._storage_account = \
-   329                                                               self.get_storage_account(self.storage_account)
-   330                                                       except CloudError as cloud_error:
-   331                                                           if cloud_error.error.error == "ResourceNotFound":
-   332                                                               storage_account_params = {
-   333                                                                   'sku': {
-   334                                                                       'name': 'Standard_LRS'
-   335                                                                   },
-   336                                                                   'kind': 'storage',
-   337                                                                   'location': self.region_name,
-   338                                                               }
-   339                                                               try:
-   340                                                                   self._storage_account = \
-   341                                                                       self.create_storage_account(self.storage_account,
-   342                                                                                                   storage_account_params)
-   343                                                               except CloudError as cloud_error2:  # pragma: no cover
-   344                                                                   if cloud_error2.error.error == "AuthorizationFailed":
-   345                                                                       mess = 'The following error was returned by ' \
-   346                                                                              'Azure:\n%s\n\nThis is likely because the' \
-   347                                                                              ' Role associated with the provided ' \
-   348                                                                              'credentials does not allow for Storage ' \
-   349                                                                              'Account creation.\nA Storage Account is ' \
-   350                                                                              'necessary in order to perform the ' \
-   351                                                                              'desired operation. You must either ' \
-   352                                                                              'provide an existing Storage Account name' \
-   353                                                                              ' as part of the configuration, or ' \
-   354                                                                              'elevate the associated Role.\nFor more ' \
-   355                                                                              'information on roles, see: https://docs.' \
-   356                                                                              'microsoft.com/en-us/azure/role-based-' \
-   357                                                                              'access-control/overview\n' % cloud_error2
-   358                                                                       raise ProviderConnectionException(mess)
-   359                                           
-   360                                                                   elif cloud_error2.error.error == \
-   361                                                                           "StorageAccountAlreadyTaken":
-   362                                                                       mess = 'The following error was ' \
-   363                                                                              'returned by Azure:\n%s\n\n' \
-   364                                                                              'Note that Storage Account names must be ' \
-   365                                                                              'unique across Azure (not just in your ' \
-   366                                                                              'subscription).\nFor more information ' \
-   367                                                                              'see https://docs.microsoft.com/en-us/' \
-   368                                                                              'azure/azure-resource-manager/resource-' \
-   369                                                                              'manager-storage-account-name-errors\n' \
-   370                                                                              % cloud_error2
-   371                                                                       raise InvalidLabelException(mess)
-   372                                                                   else:
-   373                                                                       raise cloud_error2
-   374                                                           else:
-   375                                                               raise cloud_error
-
-Total time: 0.06917 s
-File: /Users/alex/Desktop/work/cb-profiled/cloudbridge/cloudbridge/cloud/providers/azure/azure_client.py
-Function: list_locations at line 377
-
-Line #      Hits         Time  Per Hit   % Time  Line Contents
-==============================================================
-   377                                               @profile
-   378                                               def list_locations(self):
-   379        17      68576.0   4033.9     99.1          return self.subscription_client.subscriptions. \
-   380        17        594.0     34.9      0.9              list_locations(self.subscription_id)
-
-Total time: 0 s
-File: /Users/alex/Desktop/work/cb-profiled/cloudbridge/cloudbridge/cloud/providers/azure/azure_client.py
-Function: list_vm_firewall at line 382
-
-Line #      Hits         Time  Per Hit   % Time  Line Contents
-==============================================================
-   382                                               @profile
-   383                                               def list_vm_firewall(self):
-   384                                                   return self.network_management_client.network_security_groups. \
-   385                                                       list(self.resource_group)
-
-Total time: 0 s
-File: /Users/alex/Desktop/work/cb-profiled/cloudbridge/cloudbridge/cloud/providers/azure/azure_client.py
-Function: create_vm_firewall at line 387
-
-Line #      Hits         Time  Per Hit   % Time  Line Contents
-==============================================================
-   387                                               @profile
-   388                                               def create_vm_firewall(self, name, parameters):
-   389                                                   return self.network_management_client.network_security_groups. \
-   390                                                       create_or_update(self.resource_group, name,
-   391                                                                        parameters).result()
-
-Total time: 0 s
-File: /Users/alex/Desktop/work/cb-profiled/cloudbridge/cloudbridge/cloud/providers/azure/azure_client.py
-Function: update_vm_firewall_tags at line 393
-
-Line #      Hits         Time  Per Hit   % Time  Line Contents
-==============================================================
-   393                                               @profile
-   394                                               def update_vm_firewall_tags(self, fw_id, tags):
-   395                                                   url_params = azure_helpers.parse_url(VM_FIREWALL_RESOURCE_ID,
-   396                                                                                        fw_id)
-   397                                                   name = url_params.get(VM_FIREWALL_NAME)
-   398                                                   return self.network_management_client.network_security_groups. \
-   399                                                       create_or_update(self.resource_group, name,
-   400                                                                        {'tags': tags,
-   401                                                                         'location': self.region_name}).result()
-
-Total time: 0 s
-File: /Users/alex/Desktop/work/cb-profiled/cloudbridge/cloudbridge/cloud/providers/azure/azure_client.py
-Function: get_vm_firewall at line 403
-
-Line #      Hits         Time  Per Hit   % Time  Line Contents
-==============================================================
-   403                                               @profile
-   404                                               def get_vm_firewall(self, fw_id):
-   405                                                   url_params = azure_helpers.parse_url(VM_FIREWALL_RESOURCE_ID,
-   406                                                                                        fw_id)
-   407                                                   fw_name = url_params.get(VM_FIREWALL_NAME)
-   408                                                   return self.network_management_client.network_security_groups. \
-   409                                                       get(self.resource_group, fw_name)
-
-Total time: 0 s
-File: /Users/alex/Desktop/work/cb-profiled/cloudbridge/cloudbridge/cloud/providers/azure/azure_client.py
-Function: delete_vm_firewall at line 411
-
-Line #      Hits         Time  Per Hit   % Time  Line Contents
-==============================================================
-   411                                               @profile
-   412                                               def delete_vm_firewall(self, fw_id):
-   413                                                   url_params = azure_helpers.parse_url(VM_FIREWALL_RESOURCE_ID,
-   414                                                                                        fw_id)
-   415                                                   name = url_params.get(VM_FIREWALL_NAME)
-   416                                                   self.network_management_client \
-   417                                                       .network_security_groups.delete(self.resource_group, name).wait()
-
-Total time: 0 s
-File: /Users/alex/Desktop/work/cb-profiled/cloudbridge/cloudbridge/cloud/providers/azure/azure_client.py
-Function: create_vm_firewall_rule at line 419
-
-Line #      Hits         Time  Per Hit   % Time  Line Contents
-==============================================================
-   419                                               @profile
-   420                                               def create_vm_firewall_rule(self, fw_id,
-   421                                                                           rule_name, parameters):
-   422                                                   url_params = azure_helpers.parse_url(VM_FIREWALL_RESOURCE_ID,
-   423                                                                                        fw_id)
-   424                                                   vm_firewall_name = url_params.get(VM_FIREWALL_NAME)
-   425                                                   return self.network_management_client.security_rules. \
-   426                                                       create_or_update(self.resource_group, vm_firewall_name,
-   427                                                                        rule_name, parameters).result()
-
-Total time: 0 s
-File: /Users/alex/Desktop/work/cb-profiled/cloudbridge/cloudbridge/cloud/providers/azure/azure_client.py
-Function: delete_vm_firewall_rule at line 429
-
-Line #      Hits         Time  Per Hit   % Time  Line Contents
-==============================================================
-   429                                               @profile
-   430                                               def delete_vm_firewall_rule(self, fw_rule_id, vm_firewall):
-   431                                                   url_params = azure_helpers.parse_url(VM_FIREWALL_RULE_RESOURCE_ID,
-   432                                                                                        fw_rule_id)
-   433                                                   name = url_params.get(VM_FIREWALL_RULE_NAME)
-   434                                                   return self.network_management_client.security_rules. \
-   435                                                       delete(self.resource_group, vm_firewall, name).result()
-
-Total time: 0 s
-File: /Users/alex/Desktop/work/cb-profiled/cloudbridge/cloudbridge/cloud/providers/azure/azure_client.py
-Function: list_containers at line 437
-
-Line #      Hits         Time  Per Hit   % Time  Line Contents
-==============================================================
-   437                                               @profile
-   438                                               def list_containers(self, prefix=None, limit=None, marker=None):
-   439                                                   results = self.blob_service.list_containers(prefix=prefix,
-   440                                                                                               num_results=limit,
-   441                                                                                               marker=marker)
-   442                                                   return (results.items, results.next_marker)
-
-Total time: 0 s
-File: /Users/alex/Desktop/work/cb-profiled/cloudbridge/cloudbridge/cloud/providers/azure/azure_client.py
-Function: create_container at line 444
-
-Line #      Hits         Time  Per Hit   % Time  Line Contents
-==============================================================
-   444                                               @profile
-   445                                               def create_container(self, container_name):
-   446                                                   try:
-   447                                                       self.blob_service.create_container(container_name,
-   448                                                                                          fail_on_exist=True)
-   449                                                   except AzureConflictHttpError as cloud_error:
-   450                                                       if cloud_error.error_code == "ContainerAlreadyExists":
-   451                                                           msg = "The given Bucket name '%s' already exists. Please " \
-   452                                                                 "use the `get` or `find` method to get a reference to " \
-   453                                                                 "an existing Bucket, or specify a new Bucket name to " \
-   454                                                                 "create.\nNote that in Azure, Buckets are contained " \
-   455                                                                 "in Storage Accounts." % container_name
-   456                                                           raise DuplicateResourceException(msg)
-   457                                           
-   458                                                   return self.blob_service.get_container_properties(container_name)
-
-Total time: 0 s
-File: /Users/alex/Desktop/work/cb-profiled/cloudbridge/cloudbridge/cloud/providers/azure/azure_client.py
-Function: get_container at line 460
-
-Line #      Hits         Time  Per Hit   % Time  Line Contents
-==============================================================
-   460                                               @profile
-   461                                               def get_container(self, container_name):
-   462                                                   return self.blob_service.get_container_properties(container_name)
-
-Total time: 0 s
-File: /Users/alex/Desktop/work/cb-profiled/cloudbridge/cloudbridge/cloud/providers/azure/azure_client.py
-Function: delete_container at line 464
-
-Line #      Hits         Time  Per Hit   % Time  Line Contents
-==============================================================
-   464                                               @profile
-   465                                               def delete_container(self, container_name):
-   466                                                   self.blob_service.delete_container(container_name)
-
-Total time: 0 s
-File: /Users/alex/Desktop/work/cb-profiled/cloudbridge/cloudbridge/cloud/providers/azure/azure_client.py
-Function: list_blobs at line 468
-
-Line #      Hits         Time  Per Hit   % Time  Line Contents
-==============================================================
-   468                                               @profile
-   469                                               def list_blobs(self, container_name, prefix=None):
-   470                                                   return self.blob_service.list_blobs(container_name, prefix=prefix)
-
-Total time: 0 s
-File: /Users/alex/Desktop/work/cb-profiled/cloudbridge/cloudbridge/cloud/providers/azure/azure_client.py
-Function: get_blob at line 472
-
-Line #      Hits         Time  Per Hit   % Time  Line Contents
-==============================================================
-   472                                               @profile
-   473                                               def get_blob(self, container_name, blob_name):
-   474                                                   return self.blob_service.get_blob_properties(container_name, blob_name)
-
-Total time: 0 s
-File: /Users/alex/Desktop/work/cb-profiled/cloudbridge/cloudbridge/cloud/providers/azure/azure_client.py
-Function: create_blob_from_text at line 476
-
-Line #      Hits         Time  Per Hit   % Time  Line Contents
-==============================================================
-   476                                               @profile
-   477                                               def create_blob_from_text(self, container_name, blob_name, text):
-   478                                                   self.blob_service.create_blob_from_text(container_name,
-   479                                                                                           blob_name, text)
-
-Total time: 0 s
-File: /Users/alex/Desktop/work/cb-profiled/cloudbridge/cloudbridge/cloud/providers/azure/azure_client.py
-Function: create_blob_from_file at line 481
-
-Line #      Hits         Time  Per Hit   % Time  Line Contents
-==============================================================
-   481                                               @profile
-   482                                               def create_blob_from_file(self, container_name, blob_name, file_path):
-   483                                                   self.blob_service.create_blob_from_path(container_name,
-   484                                                                                           blob_name, file_path)
-
-Total time: 0 s
-File: /Users/alex/Desktop/work/cb-profiled/cloudbridge/cloudbridge/cloud/providers/azure/azure_client.py
-Function: delete_blob at line 486
-
-Line #      Hits         Time  Per Hit   % Time  Line Contents
-==============================================================
-   486                                               @profile
-   487                                               def delete_blob(self, container_name, blob_name):
-   488                                                   self.blob_service.delete_blob(container_name, blob_name)
-
-Total time: 0 s
-File: /Users/alex/Desktop/work/cb-profiled/cloudbridge/cloudbridge/cloud/providers/azure/azure_client.py
-Function: get_blob_url at line 490
-
-Line #      Hits         Time  Per Hit   % Time  Line Contents
-==============================================================
-   490                                               @profile
-   491                                               def get_blob_url(self, container_name, blob_name, expiry_time):
-   492                                                   expiry_date = datetime.datetime.utcnow() + datetime.timedelta(
-   493                                                       seconds=expiry_time)
-   494                                                   sas = self.blob_service.generate_blob_shared_access_signature(
-   495                                                       container_name, blob_name, permission=BlobPermissions.READ,
-   496                                                       expiry=expiry_date)
-   497                                                   return self.blob_service.make_blob_url(container_name, blob_name,
-   498                                                                                          sas_token=sas)
-
-Total time: 0 s
-File: /Users/alex/Desktop/work/cb-profiled/cloudbridge/cloudbridge/cloud/providers/azure/azure_client.py
-Function: get_blob_content at line 500
-
-Line #      Hits         Time  Per Hit   % Time  Line Contents
-==============================================================
-   500                                               @profile
-   501                                               def get_blob_content(self, container_name, blob_name):
-   502                                                   out_stream = BytesIO()
-   503                                                   self.blob_service.get_blob_to_stream(container_name,
-   504                                                                                        blob_name, out_stream)
-   505                                                   return out_stream
-
-Total time: 0 s
-File: /Users/alex/Desktop/work/cb-profiled/cloudbridge/cloudbridge/cloud/providers/azure/azure_client.py
-Function: create_empty_disk at line 507
-
-Line #      Hits         Time  Per Hit   % Time  Line Contents
-==============================================================
-   507                                               @profile
-   508                                               def create_empty_disk(self, disk_name, params):
-   509                                                   return self.compute_client.disks.create_or_update(
-   510                                                       self.resource_group,
-   511                                                       disk_name,
-   512                                                       params
-   513                                                   ).result()
-
-Total time: 0 s
-File: /Users/alex/Desktop/work/cb-profiled/cloudbridge/cloudbridge/cloud/providers/azure/azure_client.py
-Function: create_snapshot_disk at line 515
-
-Line #      Hits         Time  Per Hit   % Time  Line Contents
-==============================================================
-   515                                               @profile
-   516                                               def create_snapshot_disk(self, disk_name, params):
-   517                                                   return self.compute_client.disks.create_or_update(
-   518                                                       self.resource_group,
-   519                                                       disk_name,
-   520                                                       params
-   521                                                   ).result()
-
-Total time: 0 s
-File: /Users/alex/Desktop/work/cb-profiled/cloudbridge/cloudbridge/cloud/providers/azure/azure_client.py
-Function: get_disk at line 523
-
-Line #      Hits         Time  Per Hit   % Time  Line Contents
-==============================================================
-   523                                               @profile
-   524                                               def get_disk(self, disk_id):
-   525                                                   url_params = azure_helpers.parse_url(VOLUME_RESOURCE_ID,
-   526                                                                                        disk_id)
-   527                                                   disk_name = url_params.get(VOLUME_NAME)
-   528                                                   return self.compute_client.disks.get(self.resource_group, disk_name)
-
-Total time: 0 s
-File: /Users/alex/Desktop/work/cb-profiled/cloudbridge/cloudbridge/cloud/providers/azure/azure_client.py
-Function: list_disks at line 530
-
-Line #      Hits         Time  Per Hit   % Time  Line Contents
-==============================================================
-   530                                               @profile
-   531                                               def list_disks(self):
-   532                                                   return self.compute_client.disks. \
-   533                                                       list_by_resource_group(self.resource_group)
-
-Total time: 0 s
-File: /Users/alex/Desktop/work/cb-profiled/cloudbridge/cloudbridge/cloud/providers/azure/azure_client.py
-Function: delete_disk at line 535
-
-Line #      Hits         Time  Per Hit   % Time  Line Contents
-==============================================================
-   535                                               @profile
-   536                                               def delete_disk(self, disk_id):
-   537                                                   url_params = azure_helpers.parse_url(VOLUME_RESOURCE_ID,
-   538                                                                                        disk_id)
-   539                                                   disk_name = url_params.get(VOLUME_NAME)
-   540                                                   self.compute_client.disks.delete(self.resource_group, disk_name).wait()
-
-Total time: 0 s
-File: /Users/alex/Desktop/work/cb-profiled/cloudbridge/cloudbridge/cloud/providers/azure/azure_client.py
-Function: update_disk_tags at line 542
-
-Line #      Hits         Time  Per Hit   % Time  Line Contents
-==============================================================
-   542                                               @profile
-   543                                               def update_disk_tags(self, disk_id, tags):
-   544                                                   url_params = azure_helpers.parse_url(VOLUME_RESOURCE_ID,
-   545                                                                                        disk_id)
-   546                                                   disk_name = url_params.get(VOLUME_NAME)
-   547                                                   return self.compute_client.disks.update(
-   548                                                       self.resource_group,
-   549                                                       disk_name,
-   550                                                       {'tags': tags},
-   551                                                       raw=True
-   552                                                   )
-
-Total time: 0 s
-File: /Users/alex/Desktop/work/cb-profiled/cloudbridge/cloudbridge/cloud/providers/azure/azure_client.py
-Function: list_snapshots at line 554
-
-Line #      Hits         Time  Per Hit   % Time  Line Contents
-==============================================================
-   554                                               @profile
-   555                                               def list_snapshots(self):
-   556                                                   return self.compute_client.snapshots. \
-   557                                                       list_by_resource_group(self.resource_group)
-
-Total time: 0 s
-File: /Users/alex/Desktop/work/cb-profiled/cloudbridge/cloudbridge/cloud/providers/azure/azure_client.py
-Function: get_snapshot at line 559
-
-Line #      Hits         Time  Per Hit   % Time  Line Contents
-==============================================================
-   559                                               @profile
-   560                                               def get_snapshot(self, snapshot_id):
-   561                                                   url_params = azure_helpers.parse_url(SNAPSHOT_RESOURCE_ID,
-   562                                                                                        snapshot_id)
-   563                                                   snapshot_name = url_params.get(SNAPSHOT_NAME)
-   564                                                   return self.compute_client.snapshots.get(self.resource_group,
-   565                                                                                            snapshot_name)
-
-Total time: 0 s
-File: /Users/alex/Desktop/work/cb-profiled/cloudbridge/cloudbridge/cloud/providers/azure/azure_client.py
-Function: create_snapshot at line 567
-
-Line #      Hits         Time  Per Hit   % Time  Line Contents
-==============================================================
-   567                                               @profile
-   568                                               def create_snapshot(self, snapshot_name, params):
-   569                                                   return self.compute_client.snapshots.create_or_update(
-   570                                                       self.resource_group,
-   571                                                       snapshot_name,
-   572                                                       params
-   573                                                   ).result()
-
-Total time: 0 s
-File: /Users/alex/Desktop/work/cb-profiled/cloudbridge/cloudbridge/cloud/providers/azure/azure_client.py
-Function: delete_snapshot at line 575
-
-Line #      Hits         Time  Per Hit   % Time  Line Contents
-==============================================================
-   575                                               @profile
-   576                                               def delete_snapshot(self, snapshot_id):
-   577                                                   url_params = azure_helpers.parse_url(SNAPSHOT_RESOURCE_ID,
-   578                                                                                        snapshot_id)
-   579                                                   snapshot_name = url_params.get(SNAPSHOT_NAME)
-   580                                                   self.compute_client.snapshots.delete(self.resource_group,
-   581                                                                                        snapshot_name).wait()
-
-Total time: 0 s
-File: /Users/alex/Desktop/work/cb-profiled/cloudbridge/cloudbridge/cloud/providers/azure/azure_client.py
-Function: update_snapshot_tags at line 583
-
-Line #      Hits         Time  Per Hit   % Time  Line Contents
-==============================================================
-   583                                               @profile
-   584                                               def update_snapshot_tags(self, snapshot_id, tags):
-   585                                                   url_params = azure_helpers.parse_url(SNAPSHOT_RESOURCE_ID,
-   586                                                                                        snapshot_id)
-   587                                                   snapshot_name = url_params.get(SNAPSHOT_NAME)
-   588                                                   return self.compute_client.snapshots.update(
-   589                                                       self.resource_group,
-   590                                                       snapshot_name,
-   591                                                       {'tags': tags},
-   592                                                       raw=True
-   593                                                   )
-
-Total time: 0 s
-File: /Users/alex/Desktop/work/cb-profiled/cloudbridge/cloudbridge/cloud/providers/azure/azure_client.py
-Function: is_gallery_image at line 595
-
-Line #      Hits         Time  Per Hit   % Time  Line Contents
-==============================================================
-   595                                               @profile
-   596                                               def is_gallery_image(self, image_id):
-   597                                                   url_params = azure_helpers.parse_url(IMAGE_RESOURCE_ID,
-   598                                                                                        image_id)
-   599                                                   # If it is a gallery image, it will always have an offer
-   600                                                   return 'offer' in url_params
-
-Total time: 0 s
-File: /Users/alex/Desktop/work/cb-profiled/cloudbridge/cloudbridge/cloud/providers/azure/azure_client.py
-Function: create_image at line 602
-
-Line #      Hits         Time  Per Hit   % Time  Line Contents
-==============================================================
-   602                                               @profile
-   603                                               def create_image(self, name, params):
-   604                                                   return self.compute_client.images. \
-   605                                                       create_or_update(self.resource_group, name,
-   606                                                                        params).result()
-
-Total time: 0 s
-File: /Users/alex/Desktop/work/cb-profiled/cloudbridge/cloudbridge/cloud/providers/azure/azure_client.py
-Function: delete_image at line 608
-
-Line #      Hits         Time  Per Hit   % Time  Line Contents
-==============================================================
-   608                                               @profile
-   609                                               def delete_image(self, image_id):
-   610                                                   url_params = azure_helpers.parse_url(IMAGE_RESOURCE_ID,
-   611                                                                                        image_id)
-   612                                                   if not self.is_gallery_image(image_id):
-   613                                                       name = url_params.get(IMAGE_NAME)
-   614                                                       self.compute_client.images.delete(self.resource_group, name).wait()
-
-Total time: 0 s
-File: /Users/alex/Desktop/work/cb-profiled/cloudbridge/cloudbridge/cloud/providers/azure/azure_client.py
-Function: list_images at line 616
-
-Line #      Hits         Time  Per Hit   % Time  Line Contents
-==============================================================
-   616                                               @profile
-   617                                               def list_images(self):
-   618                                                   azure_images = list(self.compute_client.images.
-   619                                                                       list_by_resource_group(self.resource_group))
-   620                                                   return azure_images
-
-Total time: 0 s
-File: /Users/alex/Desktop/work/cb-profiled/cloudbridge/cloudbridge/cloud/providers/azure/azure_client.py
-Function: list_gallery_refs at line 622
-
-Line #      Hits         Time  Per Hit   % Time  Line Contents
-==============================================================
-   622                                               @profile
-   623                                               def list_gallery_refs(self):
-   624                                                   return gallery_image_references
-
-Total time: 0 s
-File: /Users/alex/Desktop/work/cb-profiled/cloudbridge/cloudbridge/cloud/providers/azure/azure_client.py
-Function: get_image at line 626
-
-Line #      Hits         Time  Per Hit   % Time  Line Contents
-==============================================================
-   626                                               @profile
-   627                                               def get_image(self, image_id):
-   628                                                   url_params = azure_helpers.parse_url(IMAGE_RESOURCE_ID,
-   629                                                                                        image_id)
-   630                                                   if self.is_gallery_image(image_id):
-   631                                                       return GalleryImageReference(publisher=url_params['publisher'],
-   632                                                                                    offer=url_params['offer'],
-   633                                                                                    sku=url_params['sku'],
-   634                                                                                    version=url_params['version'])
-   635                                                   else:
-   636                                                       name = url_params.get(IMAGE_NAME)
-   637                                                       return self.compute_client.images.get(self.resource_group, name)
-
-Total time: 0 s
-File: /Users/alex/Desktop/work/cb-profiled/cloudbridge/cloudbridge/cloud/providers/azure/azure_client.py
-Function: update_image_tags at line 639
-
-Line #      Hits         Time  Per Hit   % Time  Line Contents
-==============================================================
-   639                                               @profile
-   640                                               def update_image_tags(self, image_id, tags):
-   641                                                   url_params = azure_helpers.parse_url(IMAGE_RESOURCE_ID,
-   642                                                                                        image_id)
-   643                                                   if self.is_gallery_image(image_id):
-   644                                                       return True
-   645                                                   else:
-   646                                                       name = url_params.get(IMAGE_NAME)
-   647                                                       return self.compute_client.images. \
-   648                                                           create_or_update(self.resource_group, name,
-   649                                                                            {
-   650                                                                                'tags': tags,
-   651                                                                                'location': self.region_name
-   652                                                                            }).result()
-
-Total time: 0 s
-File: /Users/alex/Desktop/work/cb-profiled/cloudbridge/cloudbridge/cloud/providers/azure/azure_client.py
-Function: list_vm_types at line 654
-
-Line #      Hits         Time  Per Hit   % Time  Line Contents
-==============================================================
-   654                                               @profile
-   655                                               def list_vm_types(self):
-   656                                                   return self.compute_client.virtual_machine_sizes. \
-   657                                                       list(self.region_name)
-
-Total time: 0 s
-File: /Users/alex/Desktop/work/cb-profiled/cloudbridge/cloudbridge/cloud/providers/azure/azure_client.py
-Function: list_networks at line 659
-
-Line #      Hits         Time  Per Hit   % Time  Line Contents
-==============================================================
-   659                                               @profile
-   660                                               def list_networks(self):
-   661                                                   return self.network_management_client.virtual_networks.list(
-   662                                                       self.resource_group)
-
-Total time: 0 s
-File: /Users/alex/Desktop/work/cb-profiled/cloudbridge/cloudbridge/cloud/providers/azure/azure_client.py
-Function: get_network at line 664
-
-Line #      Hits         Time  Per Hit   % Time  Line Contents
-==============================================================
-   664                                               @profile
-   665                                               def get_network(self, network_id):
-   666                                                   url_params = azure_helpers.parse_url(NETWORK_RESOURCE_ID,
-   667                                                                                        network_id)
-   668                                                   network_name = url_params.get(NETWORK_NAME)
-   669                                                   return self.network_management_client.virtual_networks.get(
-   670                                                       self.resource_group, network_name)
-
-Total time: 0 s
-File: /Users/alex/Desktop/work/cb-profiled/cloudbridge/cloudbridge/cloud/providers/azure/azure_client.py
-Function: create_network at line 672
-
-Line #      Hits         Time  Per Hit   % Time  Line Contents
-==============================================================
-   672                                               @profile
-   673                                               def create_network(self, name, params):
-   674                                                   return self.network_management_client.virtual_networks. \
-   675                                                       create_or_update(self.resource_group,
-   676                                                                        name,
-   677                                                                        parameters=params).result()
-
-Total time: 0 s
-File: /Users/alex/Desktop/work/cb-profiled/cloudbridge/cloudbridge/cloud/providers/azure/azure_client.py
-Function: delete_network at line 679
-
-Line #      Hits         Time  Per Hit   % Time  Line Contents
-==============================================================
-   679                                               @profile
-   680                                               def delete_network(self, network_id):
-   681                                                   url_params = azure_helpers.parse_url(NETWORK_RESOURCE_ID, network_id)
-   682                                                   network_name = url_params.get(NETWORK_NAME)
-   683                                                   return self.network_management_client.virtual_networks. \
-   684                                                       delete(self.resource_group, network_name).wait()
-
-Total time: 0 s
-File: /Users/alex/Desktop/work/cb-profiled/cloudbridge/cloudbridge/cloud/providers/azure/azure_client.py
-Function: update_network_tags at line 686
-
-Line #      Hits         Time  Per Hit   % Time  Line Contents
-==============================================================
-   686                                               @profile
-   687                                               def update_network_tags(self, network_id, tags):
-   688                                                   url_params = azure_helpers.parse_url(NETWORK_RESOURCE_ID, network_id)
-   689                                                   network_name = url_params.get(NETWORK_NAME)
-   690                                                   return self.network_management_client.virtual_networks. \
-   691                                                       create_or_update(self.resource_group,
-   692                                                                        network_name, tags).result()
-
-Total time: 0 s
-File: /Users/alex/Desktop/work/cb-profiled/cloudbridge/cloudbridge/cloud/providers/azure/azure_client.py
-Function: get_network_id_for_subnet at line 694
-
-Line #      Hits         Time  Per Hit   % Time  Line Contents
-==============================================================
-   694                                               @profile
-   695                                               def get_network_id_for_subnet(self, subnet_id):
-   696                                                   url_params = azure_helpers.parse_url(SUBNET_RESOURCE_ID, subnet_id)
-   697                                                   network_id = NETWORK_RESOURCE_ID[0]
-   698                                                   for key, val in url_params.items():
-   699                                                       network_id = network_id.replace("{" + key + "}", val)
-   700                                                   return network_id
-
-Total time: 0 s
-File: /Users/alex/Desktop/work/cb-profiled/cloudbridge/cloudbridge/cloud/providers/azure/azure_client.py
-Function: list_subnets at line 702
-
-Line #      Hits         Time  Per Hit   % Time  Line Contents
-==============================================================
-   702                                               @profile
-   703                                               def list_subnets(self, network_id):
-   704                                                   url_params = azure_helpers.parse_url(NETWORK_RESOURCE_ID, network_id)
-   705                                                   network_name = url_params.get(NETWORK_NAME)
-   706                                                   return self.network_management_client.subnets. \
-   707                                                       list(self.resource_group, network_name)
-
-Total time: 0 s
-File: /Users/alex/Desktop/work/cb-profiled/cloudbridge/cloudbridge/cloud/providers/azure/azure_client.py
-Function: get_subnet at line 709
-
-Line #      Hits         Time  Per Hit   % Time  Line Contents
-==============================================================
-   709                                               @profile
-   710                                               def get_subnet(self, subnet_id):
-   711                                                   url_params = azure_helpers.parse_url(SUBNET_RESOURCE_ID,
-   712                                                                                        subnet_id)
-   713                                                   network_name = url_params.get(NETWORK_NAME)
-   714                                                   subnet_name = url_params.get(SUBNET_NAME)
-   715                                                   return self.network_management_client.subnets. \
-   716                                                       get(self.resource_group, network_name, subnet_name)
-
-Total time: 0 s
-File: /Users/alex/Desktop/work/cb-profiled/cloudbridge/cloudbridge/cloud/providers/azure/azure_client.py
-Function: create_subnet at line 718
-
-Line #      Hits         Time  Per Hit   % Time  Line Contents
-==============================================================
-   718                                               @profile
-   719                                               def create_subnet(self, network_id, subnet_name, params):
-   720                                                   url_params = azure_helpers.parse_url(NETWORK_RESOURCE_ID, network_id)
-   721                                                   network_name = url_params.get(NETWORK_NAME)
-   722                                                   result_create = self.network_management_client \
-   723                                                       .subnets.create_or_update(
-   724                                                           self.resource_group,
-   725                                                           network_name,
-   726                                                           subnet_name,
-   727                                                           params
-   728                                                       )
-   729                                                   subnet_info = result_create.result()
-   730                                           
-   731                                                   return subnet_info
-
-Total time: 0 s
-File: /Users/alex/Desktop/work/cb-profiled/cloudbridge/cloudbridge/cloud/providers/azure/azure_client.py
-Function: __if_subnet_in_use at line 733
-
-Line #      Hits         Time  Per Hit   % Time  Line Contents
-==============================================================
-   733                                               @profile
-   734                                               def __if_subnet_in_use(e):
-   735                                                   # return True if the CloudError exception is due to subnet being in use
-   736                                                   if isinstance(e, CloudError):
-   737                                                       if e.error.error == "InUseSubnetCannotBeDeleted":
-   738                                                           return True
-   739                                                   return False
-
-Total time: 0 s
-File: /Users/alex/Desktop/work/cb-profiled/cloudbridge/cloudbridge/cloud/providers/azure/azure_client.py
-Function: delete_subnet at line 741
-
-Line #      Hits         Time  Per Hit   % Time  Line Contents
-==============================================================
-   741                                               @tenacity.retry(stop=tenacity.stop_after_attempt(5),
-   742                                                               retry=tenacity.retry_if_exception(__if_subnet_in_use),
-   743                                                               wait=tenacity.wait_fixed(5),
-   744                                                               reraise=True)
-   745                                               @profile
-   746                                               def delete_subnet(self, subnet_id):
-   747                                                   url_params = azure_helpers.parse_url(SUBNET_RESOURCE_ID,
-   748                                                                                        subnet_id)
-   749                                                   network_name = url_params.get(NETWORK_NAME)
-   750                                                   subnet_name = url_params.get(SUBNET_NAME)
-   751                                           
-   752                                                   try:
-   753                                                       result_delete = self.network_management_client \
-   754                                                           .subnets.delete(
-   755                                                               self.resource_group,
-   756                                                               network_name,
-   757                                                               subnet_name
-   758                                                           )
-   759                                                       result_delete.wait()
-   760                                                   except CloudError as cloud_error:
-   761                                                       log.exception(cloud_error.message)
-   762                                                       raise cloud_error
-
-Total time: 0 s
-File: /Users/alex/Desktop/work/cb-profiled/cloudbridge/cloudbridge/cloud/providers/azure/azure_client.py
-Function: create_floating_ip at line 764
-
-Line #      Hits         Time  Per Hit   % Time  Line Contents
-==============================================================
-   764                                               @profile
-   765                                               def create_floating_ip(self, public_ip_name, public_ip_parameters):
-   766                                                   return self.network_management_client.public_ip_addresses. \
-   767                                                       create_or_update(self.resource_group,
-   768                                                                        public_ip_name,
-   769                                                                        public_ip_parameters).result()
-
-Total time: 0 s
-File: /Users/alex/Desktop/work/cb-profiled/cloudbridge/cloudbridge/cloud/providers/azure/azure_client.py
-Function: get_floating_ip at line 771
-
-Line #      Hits         Time  Per Hit   % Time  Line Contents
-==============================================================
-   771                                               @profile
-   772                                               def get_floating_ip(self, public_ip_id):
-   773                                                   url_params = azure_helpers.parse_url(PUBLIC_IP_RESOURCE_ID,
-   774                                                                                        public_ip_id)
-   775                                                   public_ip_name = url_params.get(PUBLIC_IP_NAME)
-   776                                                   return self.network_management_client. \
-   777                                                       public_ip_addresses.get(self.resource_group, public_ip_name)
-
-Total time: 0 s
-File: /Users/alex/Desktop/work/cb-profiled/cloudbridge/cloudbridge/cloud/providers/azure/azure_client.py
-Function: delete_floating_ip at line 779
-
-Line #      Hits         Time  Per Hit   % Time  Line Contents
-==============================================================
-   779                                               @profile
-   780                                               def delete_floating_ip(self, public_ip_id):
-   781                                                   url_params = azure_helpers.parse_url(PUBLIC_IP_RESOURCE_ID,
-   782                                                                                        public_ip_id)
-   783                                                   public_ip_name = url_params.get(PUBLIC_IP_NAME)
-   784                                                   self.network_management_client. \
-   785                                                       public_ip_addresses.delete(self.resource_group,
-   786                                                                                  public_ip_name).wait()
-
-Total time: 0 s
-File: /Users/alex/Desktop/work/cb-profiled/cloudbridge/cloudbridge/cloud/providers/azure/azure_client.py
-Function: update_fip_tags at line 788
-
-Line #      Hits         Time  Per Hit   % Time  Line Contents
-==============================================================
-   788                                               @profile
-   789                                               def update_fip_tags(self, fip_id, tags):
-   790                                                   url_params = azure_helpers.parse_url(PUBLIC_IP_RESOURCE_ID,
-   791                                                                                        fip_id)
-   792                                                   fip_name = url_params.get(PUBLIC_IP_NAME)
-   793                                                   self.network_management_client.public_ip_addresses. \
-   794                                                       create_or_update(self.resource_group,
-   795                                                                        fip_name, tags).result()
-
-Total time: 0 s
-File: /Users/alex/Desktop/work/cb-profiled/cloudbridge/cloudbridge/cloud/providers/azure/azure_client.py
-Function: list_floating_ips at line 797
-
-Line #      Hits         Time  Per Hit   % Time  Line Contents
-==============================================================
-   797                                               @profile
-   798                                               def list_floating_ips(self):
-   799                                                   return self.network_management_client.public_ip_addresses.list(
-   800                                                       self.resource_group)
-
-Total time: 0 s
-File: /Users/alex/Desktop/work/cb-profiled/cloudbridge/cloudbridge/cloud/providers/azure/azure_client.py
-Function: list_vm at line 802
-
-Line #      Hits         Time  Per Hit   % Time  Line Contents
-==============================================================
-   802                                               @profile
-   803                                               def list_vm(self):
-   804                                                   return self.compute_client.virtual_machines.list(
-   805                                                       self.resource_group
-   806                                                   )
-
-Total time: 0 s
-File: /Users/alex/Desktop/work/cb-profiled/cloudbridge/cloudbridge/cloud/providers/azure/azure_client.py
-Function: restart_vm at line 808
-
-Line #      Hits         Time  Per Hit   % Time  Line Contents
-==============================================================
-   808                                               @profile
-   809                                               def restart_vm(self, vm_id):
-   810                                                   url_params = azure_helpers.parse_url(VM_RESOURCE_ID,
-   811                                                                                        vm_id)
-   812                                                   vm_name = url_params.get(VM_NAME)
-   813                                                   return self.compute_client.virtual_machines.restart(
-   814                                                       self.resource_group, vm_name).wait()
-
-Total time: 0 s
-File: /Users/alex/Desktop/work/cb-profiled/cloudbridge/cloudbridge/cloud/providers/azure/azure_client.py
-Function: delete_vm at line 816
-
-Line #      Hits         Time  Per Hit   % Time  Line Contents
-==============================================================
-   816                                               @profile
-   817                                               def delete_vm(self, vm_id):
-   818                                                   url_params = azure_helpers.parse_url(VM_RESOURCE_ID,
-   819                                                                                        vm_id)
-   820                                                   vm_name = url_params.get(VM_NAME)
-   821                                                   return self.compute_client.virtual_machines.delete(
-   822                                                       self.resource_group, vm_name).wait()
-
-Total time: 0 s
-File: /Users/alex/Desktop/work/cb-profiled/cloudbridge/cloudbridge/cloud/providers/azure/azure_client.py
-Function: get_vm at line 824
-
-Line #      Hits         Time  Per Hit   % Time  Line Contents
-==============================================================
-   824                                               @profile
-   825                                               def get_vm(self, vm_id):
-   826                                                   url_params = azure_helpers.parse_url(VM_RESOURCE_ID,
-   827                                                                                        vm_id)
-   828                                                   vm_name = url_params.get(VM_NAME)
-   829                                                   return self.compute_client.virtual_machines.get(
-   830                                                       self.resource_group,
-   831                                                       vm_name,
-   832                                                       expand='instanceView'
-   833                                                   )
-
-Total time: 0 s
-File: /Users/alex/Desktop/work/cb-profiled/cloudbridge/cloudbridge/cloud/providers/azure/azure_client.py
-Function: create_vm at line 835
-
-Line #      Hits         Time  Per Hit   % Time  Line Contents
-==============================================================
-   835                                               @profile
-   836                                               def create_vm(self, vm_name, params):
-   837                                                   return self.compute_client.virtual_machines. \
-   838                                                       create_or_update(self.resource_group,
-   839                                                                        vm_name, params).result()
-
-Total time: 0 s
-File: /Users/alex/Desktop/work/cb-profiled/cloudbridge/cloudbridge/cloud/providers/azure/azure_client.py
-Function: update_vm at line 841
-
-Line #      Hits         Time  Per Hit   % Time  Line Contents
-==============================================================
-   841                                               @profile
-   842                                               def update_vm(self, vm_id, params):
-   843                                                   url_params = azure_helpers.parse_url(VM_RESOURCE_ID,
-   844                                                                                        vm_id)
-   845                                                   vm_name = url_params.get(VM_NAME)
-   846                                                   return self.compute_client.virtual_machines. \
-   847                                                       create_or_update(self.resource_group,
-   848                                                                        vm_name, params, raw=True)
-
-Total time: 0 s
-File: /Users/alex/Desktop/work/cb-profiled/cloudbridge/cloudbridge/cloud/providers/azure/azure_client.py
-Function: deallocate_vm at line 850
-
-Line #      Hits         Time  Per Hit   % Time  Line Contents
-==============================================================
-   850                                               @profile
-   851                                               def deallocate_vm(self, vm_id):
-   852                                                   url_params = azure_helpers.parse_url(VM_RESOURCE_ID,
-   853                                                                                        vm_id)
-   854                                                   vm_name = url_params.get(VM_NAME)
-   855                                                   self.compute_client. \
-   856                                                       virtual_machines.deallocate(self.resource_group,
-   857                                                                                   vm_name).wait()
-
-Total time: 0 s
-File: /Users/alex/Desktop/work/cb-profiled/cloudbridge/cloudbridge/cloud/providers/azure/azure_client.py
-Function: generalize_vm at line 859
-
-Line #      Hits         Time  Per Hit   % Time  Line Contents
-==============================================================
-   859                                               @profile
-   860                                               def generalize_vm(self, vm_id):
-   861                                                   url_params = azure_helpers.parse_url(VM_RESOURCE_ID,
-   862                                                                                        vm_id)
-   863                                                   vm_name = url_params.get(VM_NAME)
-   864                                                   self.compute_client.virtual_machines. \
-   865                                                       generalize(self.resource_group, vm_name)
-
-Total time: 0 s
-File: /Users/alex/Desktop/work/cb-profiled/cloudbridge/cloudbridge/cloud/providers/azure/azure_client.py
-Function: start_vm at line 867
-
-Line #      Hits         Time  Per Hit   % Time  Line Contents
-==============================================================
-   867                                               @profile
-   868                                               def start_vm(self, vm_id):
-   869                                                   url_params = azure_helpers.parse_url(VM_RESOURCE_ID,
-   870                                                                                        vm_id)
-   871                                                   vm_name = url_params.get(VM_NAME)
-   872                                                   self.compute_client.virtual_machines. \
-   873                                                       start(self.resource_group,
-   874                                                             vm_name).wait()
-
-Total time: 0 s
-File: /Users/alex/Desktop/work/cb-profiled/cloudbridge/cloudbridge/cloud/providers/azure/azure_client.py
-Function: update_vm_tags at line 876
-
-Line #      Hits         Time  Per Hit   % Time  Line Contents
-==============================================================
-   876                                               @profile
-   877                                               def update_vm_tags(self, vm_id, tags):
-   878                                                   url_params = azure_helpers.parse_url(VM_RESOURCE_ID,
-   879                                                                                        vm_id)
-   880                                                   vm_name = url_params.get(VM_NAME)
-   881                                                   self.compute_client.virtual_machines. \
-   882                                                       create_or_update(self.resource_group,
-   883                                                                        vm_name, tags).result()
-
-Total time: 0 s
-File: /Users/alex/Desktop/work/cb-profiled/cloudbridge/cloudbridge/cloud/providers/azure/azure_client.py
-Function: delete_nic at line 885
-
-Line #      Hits         Time  Per Hit   % Time  Line Contents
-==============================================================
-   885                                               @profile
-   886                                               def delete_nic(self, nic_id):
-   887                                                   nic_params = azure_helpers.\
-   888                                                       parse_url(NETWORK_INTERFACE_RESOURCE_ID, nic_id)
-   889                                                   nic_name = nic_params.get(NETWORK_INTERFACE_NAME)
-   890                                                   self.network_management_client. \
-   891                                                       network_interfaces.delete(self.resource_group,
-   892                                                                                 nic_name).wait()
-
-Total time: 0 s
-File: /Users/alex/Desktop/work/cb-profiled/cloudbridge/cloudbridge/cloud/providers/azure/azure_client.py
-Function: get_nic at line 894
-
-Line #      Hits         Time  Per Hit   % Time  Line Contents
-==============================================================
-   894                                               @profile
-   895                                               def get_nic(self, nic_id):
-   896                                                   nic_params = azure_helpers.\
-   897                                                       parse_url(NETWORK_INTERFACE_RESOURCE_ID, nic_id)
-   898                                                   nic_name = nic_params.get(NETWORK_INTERFACE_NAME)
-   899                                                   return self.network_management_client. \
-   900                                                       network_interfaces.get(self.resource_group, nic_name)
-
-Total time: 0 s
-File: /Users/alex/Desktop/work/cb-profiled/cloudbridge/cloudbridge/cloud/providers/azure/azure_client.py
-Function: update_nic at line 902
-
-Line #      Hits         Time  Per Hit   % Time  Line Contents
-==============================================================
-   902                                               @profile
-   903                                               def update_nic(self, nic_id, params):
-   904                                                   nic_params = azure_helpers.\
-   905                                                       parse_url(NETWORK_INTERFACE_RESOURCE_ID, nic_id)
-   906                                                   nic_name = nic_params.get(NETWORK_INTERFACE_NAME)
-   907                                                   async_nic_creation = self.network_management_client. \
-   908                                                       network_interfaces.create_or_update(
-   909                                                           self.resource_group,
-   910                                                           nic_name,
-   911                                                           params
-   912                                                       )
-   913                                                   nic_info = async_nic_creation.result()
-   914                                                   return nic_info
-
-Total time: 0 s
-File: /Users/alex/Desktop/work/cb-profiled/cloudbridge/cloudbridge/cloud/providers/azure/azure_client.py
-Function: create_nic at line 916
-
-Line #      Hits         Time  Per Hit   % Time  Line Contents
-==============================================================
-   916                                               @profile
-   917                                               def create_nic(self, nic_name, params):
-   918                                                   return self.network_management_client. \
-   919                                                       network_interfaces.create_or_update(
-   920                                                           self.resource_group,
-   921                                                           nic_name,
-   922                                                           params
-   923                                                       ).result()
-
-Total time: 0 s
-File: /Users/alex/Desktop/work/cb-profiled/cloudbridge/cloudbridge/cloud/providers/azure/azure_client.py
-Function: create_public_key at line 925
-
-Line #      Hits         Time  Per Hit   % Time  Line Contents
-==============================================================
-   925                                               @profile
-   926                                               def create_public_key(self, entity):
-   927                                                   return self.table_service. \
-   928                                                       insert_or_replace_entity(self.public_key_storage_table_name,
-   929                                                                                entity)
-
-Total time: 0 s
-File: /Users/alex/Desktop/work/cb-profiled/cloudbridge/cloudbridge/cloud/providers/azure/azure_client.py
-Function: get_public_key at line 931
-
-Line #      Hits         Time  Per Hit   % Time  Line Contents
-==============================================================
-   931                                               @profile
-   932                                               def get_public_key(self, name):
-   933                                                   entities = self.table_service. \
-   934                                                       query_entities(self.public_key_storage_table_name,
-   935                                                                      "Name eq '{0}'".format(name), num_results=1)
-   936                                           
-   937                                                   return entities.items[0] if len(entities.items) > 0 else None
-
-Total time: 0 s
-File: /Users/alex/Desktop/work/cb-profiled/cloudbridge/cloudbridge/cloud/providers/azure/azure_client.py
-Function: delete_public_key at line 939
-
-Line #      Hits         Time  Per Hit   % Time  Line Contents
-==============================================================
-   939                                               @profile
-   940                                               def delete_public_key(self, entity):
-   941                                                   self.table_service.delete_entity(self.public_key_storage_table_name,
-   942                                                                                    entity.PartitionKey, entity.RowKey)
-
-Total time: 0 s
-File: /Users/alex/Desktop/work/cb-profiled/cloudbridge/cloudbridge/cloud/providers/azure/azure_client.py
-Function: list_public_keys at line 944
-
-Line #      Hits         Time  Per Hit   % Time  Line Contents
-==============================================================
-   944                                               @profile
-   945                                               def list_public_keys(self, partition_key, limit=None, marker=None):
-   946                                                   entities = self.table_service. \
-   947                                                       query_entities(self.public_key_storage_table_name,
-   948                                                                      "PartitionKey eq '{0}'".format(partition_key),
-   949                                                                      marker=marker, num_results=limit)
-   950                                                   return (entities.items, entities.next_marker)
-
-Total time: 0 s
-File: /Users/alex/Desktop/work/cb-profiled/cloudbridge/cloudbridge/cloud/providers/azure/azure_client.py
-Function: delete_route_table at line 952
-
-Line #      Hits         Time  Per Hit   % Time  Line Contents
-==============================================================
-   952                                               @profile
-   953                                               def delete_route_table(self, route_table_name):
-   954                                                   self.network_management_client. \
-   955                                                       route_tables.delete(self.resource_group, route_table_name
-   956                                                                           ).wait()
-
-Total time: 0 s
-File: /Users/alex/Desktop/work/cb-profiled/cloudbridge/cloudbridge/cloud/providers/azure/azure_client.py
-Function: attach_subnet_to_route_table at line 958
-
-Line #      Hits         Time  Per Hit   % Time  Line Contents
-==============================================================
-   958                                               @profile
-   959                                               def attach_subnet_to_route_table(self, subnet_id, route_table_id):
-   960                                                   url_params = azure_helpers.parse_url(SUBNET_RESOURCE_ID,
-   961                                                                                        subnet_id)
-   962                                                   network_name = url_params.get(NETWORK_NAME)
-   963                                                   subnet_name = url_params.get(SUBNET_NAME)
-   964                                           
-   965                                                   subnet_info = self.network_management_client.subnets.get(
-   966                                                       self.resource_group,
-   967                                                       network_name,
-   968                                                       subnet_name
-   969                                                   )
-   970                                                   if subnet_info:
-   971                                                       subnet_info.route_table = {
-   972                                                           'id': route_table_id
-   973                                                       }
-   974                                           
-   975                                                       result_create = self.network_management_client. \
-   976                                                           subnets.create_or_update(
-   977                                                            self.resource_group,
-   978                                                            network_name,
-   979                                                            subnet_name,
-   980                                                            subnet_info)
-   981                                                       subnet_info = result_create.result()
-   982                                           
-   983                                                   return subnet_info
-
-Total time: 0 s
-File: /Users/alex/Desktop/work/cb-profiled/cloudbridge/cloudbridge/cloud/providers/azure/azure_client.py
-Function: detach_subnet_to_route_table at line 985
-
-Line #      Hits         Time  Per Hit   % Time  Line Contents
-==============================================================
-   985                                               @profile
-   986                                               def detach_subnet_to_route_table(self, subnet_id, route_table_id):
-   987                                                   url_params = azure_helpers.parse_url(SUBNET_RESOURCE_ID,
-   988                                                                                        subnet_id)
-   989                                                   network_name = url_params.get(NETWORK_NAME)
-   990                                                   subnet_name = url_params.get(SUBNET_NAME)
-   991                                           
-   992                                                   subnet_info = self.network_management_client.subnets.get(
-   993                                                       self.resource_group,
-   994                                                       network_name,
-   995                                                       subnet_name
-   996                                                   )
-   997                                           
-   998                                                   if subnet_info and subnet_info.route_table.id == route_table_id:
-   999                                                       subnet_info.route_table = None
-  1000                                           
-  1001                                                       result_create = self.network_management_client. \
-  1002                                                           subnets.create_or_update(
-  1003                                                            self.resource_group,
-  1004                                                            network_name,
-  1005                                                            subnet_name,
-  1006                                                            subnet_info)
-  1007                                                       subnet_info = result_create.result()
-  1008                                           
-  1009                                                   return subnet_info
-
-Total time: 0 s
-File: /Users/alex/Desktop/work/cb-profiled/cloudbridge/cloudbridge/cloud/providers/azure/azure_client.py
-Function: list_route_tables at line 1011
-
-Line #      Hits         Time  Per Hit   % Time  Line Contents
-==============================================================
-  1011                                               @profile
-  1012                                               def list_route_tables(self):
-  1013                                                   return self.network_management_client. \
-  1014                                                       route_tables.list(self.resource_group)
-
-Total time: 0 s
-File: /Users/alex/Desktop/work/cb-profiled/cloudbridge/cloudbridge/cloud/providers/azure/azure_client.py
-Function: get_route_table at line 1016
-
-Line #      Hits         Time  Per Hit   % Time  Line Contents
-==============================================================
-  1016                                               @profile
-  1017                                               def get_route_table(self, router_id):
-  1018                                                   url_params = azure_helpers.parse_url(ROUTER_RESOURCE_ID,
-  1019                                                                                        router_id)
-  1020                                                   router_name = url_params.get(ROUTER_NAME)
-  1021                                                   return self.network_management_client. \
-  1022                                                       route_tables.get(self.resource_group, router_name)
-
-Total time: 0 s
-File: /Users/alex/Desktop/work/cb-profiled/cloudbridge/cloudbridge/cloud/providers/azure/azure_client.py
-Function: create_route_table at line 1024
-
-Line #      Hits         Time  Per Hit   % Time  Line Contents
-==============================================================
-  1024                                               @profile
-  1025                                               def create_route_table(self, route_table_name, params):
-  1026                                                   return self.network_management_client. \
-  1027                                                       route_tables.create_or_update(
-  1028                                                        self.resource_group,
-  1029                                                        route_table_name, params).result()
-
-Total time: 0 s
-File: /Users/alex/Desktop/work/cb-profiled/cloudbridge/cloudbridge/cloud/providers/azure/azure_client.py
-Function: update_route_table_tags at line 1031
-
-Line #      Hits         Time  Per Hit   % Time  Line Contents
-==============================================================
-  1031                                               @profile
-  1032                                               def update_route_table_tags(self, route_table_name, tags):
-  1033                                                   self.network_management_client.route_tables. \
-  1034                                                       create_or_update(self.resource_group,
-  1035                                                                        route_table_name, tags).result()
-

+ 0 - 1467
results/security.res

@@ -1,1467 +0,0 @@
-Test output
- .........
-----------------------------------------------------------------------
-Ran 9 tests in 788.805s
-
-OK
-
-Wrote profile results to run_tests.py.lprof
-Timer unit: 1e-06 s
-
-Total time: 3.0717 s
-File: /Users/alex/Desktop/work/cb-profiled/cloudbridge/cloudbridge/cloud/providers/azure/azure_client.py
-Function: __init__ at line 160
-
-Line #      Hits         Time  Per Hit   % Time  Line Contents
-==============================================================
-   160                                               @profile
-   161                                               def __init__(self, config):
-   162         9         28.0      3.1      0.0          self._config = config
-   163         9         21.0      2.3      0.0          self.subscription_id = str(config.get('azure_subscription_id'))
-   164         9          8.0      0.9      0.0          self._credentials = ServicePrincipalCredentials(
-   165         9          8.0      0.9      0.0              client_id=config.get('azure_client_id'),
-   166         9         11.0      1.2      0.0              secret=config.get('azure_secret'),
-   167         9    3071465.0 341273.9    100.0              tenant=config.get('azure_tenant')
-   168                                                   )
-   169                                           
-   170         9         27.0      3.0      0.0          self._access_token = config.get('azure_access_token')
-   171         9          9.0      1.0      0.0          self._resource_client = None
-   172         9          8.0      0.9      0.0          self._storage_client = None
-   173         9          6.0      0.7      0.0          self._network_management_client = None
-   174         9          9.0      1.0      0.0          self._subscription_client = None
-   175         9          6.0      0.7      0.0          self._compute_client = None
-   176         9          7.0      0.8      0.0          self._access_key_result = None
-   177         9         10.0      1.1      0.0          self._block_blob_service = None
-   178         9          7.0      0.8      0.0          self._table_service = None
-   179         9          6.0      0.7      0.0          self._storage_account = None
-   180                                           
-   181         9         62.0      6.9      0.0          log.debug("azure subscription : %s", self.subscription_id)
-
-Total time: 1.4842 s
-File: /Users/alex/Desktop/work/cb-profiled/cloudbridge/cloudbridge/cloud/providers/azure/azure_client.py
-Function: access_key_result at line 183
-
-Line #      Hits         Time  Per Hit   % Time  Line Contents
-==============================================================
-   183                                               @property
-   184                                               @tenacity.retry(stop=tenacity.stop_after_attempt(5), reraise=True)
-   185                                               @profile
-   186                                               def access_key_result(self):
-   187         3          3.0      1.0      0.0          if not self._access_key_result:
-   188         3         13.0      4.3      0.0              storage_account = self.storage_account
-   189                                           
-   190         3     696130.0 232043.3     46.9              if self.get_storage_account(storage_account).\
-   191         3          5.0      1.7      0.0                      provisioning_state.value != 'Succeeded':
-   192                                                           log.debug(
-   193                                                               "Storage account %s is not in Succeeded state yet. ",
-   194                                                               storage_account)
-   195                                                           raise WaitStateException(
-   196                                                               "Waited too long for storage account: {0} to "
-   197                                                               "become ready.".format(
-   198                                                                   storage_account,
-   199                                                                   self.get_storage_account(storage_account).
-   200                                                                   provisioning_state))
-   201                                           
-   202         3        699.0    233.0      0.0              self._access_key_result = self.storage_client.storage_accounts. \
-   203         3     787347.0 262449.0     53.0                  list_keys(self.resource_group, storage_account)
-   204         3          6.0      2.0      0.0          return self._access_key_result
-
-Total time: 0.000205 s
-File: /Users/alex/Desktop/work/cb-profiled/cloudbridge/cloudbridge/cloud/providers/azure/azure_client.py
-Function: resource_group at line 206
-
-Line #      Hits         Time  Per Hit   % Time  Line Contents
-==============================================================
-   206                                               @property
-   207                                               @profile
-   208                                               def resource_group(self):
-   209       115        205.0      1.8    100.0          return self._config.get('azure_resource_group')
-
-Total time: 1.5e-05 s
-File: /Users/alex/Desktop/work/cb-profiled/cloudbridge/cloudbridge/cloud/providers/azure/azure_client.py
-Function: storage_account at line 211
-
-Line #      Hits         Time  Per Hit   % Time  Line Contents
-==============================================================
-   211                                               @property
-   212                                               @profile
-   213                                               def storage_account(self):
-   214         9         15.0      1.7    100.0          return self._config.get('azure_storage_account')
-
-Total time: 3e-06 s
-File: /Users/alex/Desktop/work/cb-profiled/cloudbridge/cloudbridge/cloud/providers/azure/azure_client.py
-Function: region_name at line 216
-
-Line #      Hits         Time  Per Hit   % Time  Line Contents
-==============================================================
-   216                                               @property
-   217                                               @profile
-   218                                               def region_name(self):
-   219         3          3.0      1.0    100.0          return self._config.get('azure_region_name')
-
-Total time: 0.000115 s
-File: /Users/alex/Desktop/work/cb-profiled/cloudbridge/cloudbridge/cloud/providers/azure/azure_client.py
-Function: public_key_storage_table_name at line 221
-
-Line #      Hits         Time  Per Hit   % Time  Line Contents
-==============================================================
-   221                                               @property
-   222                                               @profile
-   223                                               def public_key_storage_table_name(self):
-   224        46        115.0      2.5    100.0          return self._config.get('azure_public_key_storage_table_name')
-
-Total time: 0.020725 s
-File: /Users/alex/Desktop/work/cb-profiled/cloudbridge/cloudbridge/cloud/providers/azure/azure_client.py
-Function: storage_client at line 226
-
-Line #      Hits         Time  Per Hit   % Time  Line Contents
-==============================================================
-   226                                               @property
-   227                                               @profile
-   228                                               def storage_client(self):
-   229         9         11.0      1.2      0.1          if not self._storage_client:
-   230                                                       self._storage_client = \
-   231         3          8.0      2.7      0.0                  StorageManagementClient(self._credentials,
-   232         3      20698.0   6899.3     99.9                                          self.subscription_id)
-   233         9          8.0      0.9      0.0          return self._storage_client
-
-Total time: 0 s
-File: /Users/alex/Desktop/work/cb-profiled/cloudbridge/cloudbridge/cloud/providers/azure/azure_client.py
-Function: subscription_client at line 235
-
-Line #      Hits         Time  Per Hit   % Time  Line Contents
-==============================================================
-   235                                               @property
-   236                                               @profile
-   237                                               def subscription_client(self):
-   238                                                   if not self._subscription_client:
-   239                                                       self._subscription_client = SubscriptionClient(self._credentials)
-   240                                                   return self._subscription_client
-
-Total time: 0.081115 s
-File: /Users/alex/Desktop/work/cb-profiled/cloudbridge/cloudbridge/cloud/providers/azure/azure_client.py
-Function: resource_client at line 242
-
-Line #      Hits         Time  Per Hit   % Time  Line Contents
-==============================================================
-   242                                               @property
-   243                                               @profile
-   244                                               def resource_client(self):
-   245         9          6.0      0.7      0.0          if not self._resource_client:
-   246                                                       self._resource_client = \
-   247         9          8.0      0.9      0.0                  ResourceManagementClient(self._credentials,
-   248         9      81081.0   9009.0    100.0                                           self.subscription_id)
-   249         9         20.0      2.2      0.0          return self._resource_client
-
-Total time: 0 s
-File: /Users/alex/Desktop/work/cb-profiled/cloudbridge/cloudbridge/cloud/providers/azure/azure_client.py
-Function: compute_client at line 251
-
-Line #      Hits         Time  Per Hit   % Time  Line Contents
-==============================================================
-   251                                               @property
-   252                                               @profile
-   253                                               def compute_client(self):
-   254                                                   if not self._compute_client:
-   255                                                       self._compute_client = \
-   256                                                           ComputeManagementClient(self._credentials,
-   257                                                                                   self.subscription_id)
-   258                                                   return self._compute_client
-
-Total time: 0.043287 s
-File: /Users/alex/Desktop/work/cb-profiled/cloudbridge/cloudbridge/cloud/providers/azure/azure_client.py
-Function: network_management_client at line 260
-
-Line #      Hits         Time  Per Hit   % Time  Line Contents
-==============================================================
-   260                                               @property
-   261                                               @profile
-   262                                               def network_management_client(self):
-   263       106        110.0      1.0      0.3          if not self._network_management_client:
-   264         6         10.0      1.7      0.0              self._network_management_client = NetworkManagementClient(
-   265         6      43100.0   7183.3     99.6                  self._credentials, self.subscription_id)
-   266       106         67.0      0.6      0.2          return self._network_management_client
-
-Total time: 0 s
-File: /Users/alex/Desktop/work/cb-profiled/cloudbridge/cloudbridge/cloud/providers/azure/azure_client.py
-Function: blob_service at line 268
-
-Line #      Hits         Time  Per Hit   % Time  Line Contents
-==============================================================
-   268                                               @property
-   269                                               @profile
-   270                                               def blob_service(self):
-   271                                                   self._get_or_create_storage_account()
-   272                                                   if not self._block_blob_service:
-   273                                                       if self._access_token:
-   274                                                           token_credential = TokenCredential(self._access_token)
-   275                                                           self._block_blob_service = BlockBlobService(
-   276                                                               account_name=self.storage_account,
-   277                                                               token_credential=token_credential)
-   278                                                       else:
-   279                                                           self._block_blob_service = BlockBlobService(
-   280                                                               account_name=self.storage_account,
-   281                                                               account_key=self.access_key_result.keys[0].value)
-   282                                                   return self._block_blob_service
-
-Total time: 3.8387 s
-File: /Users/alex/Desktop/work/cb-profiled/cloudbridge/cloudbridge/cloud/providers/azure/azure_client.py
-Function: table_service at line 284
-
-Line #      Hits         Time  Per Hit   % Time  Line Contents
-==============================================================
-   284                                               @property
-   285                                               @profile
-   286                                               def table_service(self):
-   287        23     990231.0  43053.5     25.8          self._get_or_create_storage_account()
-   288        23         27.0      1.2      0.0          if not self._table_service:
-   289         3          3.0      1.0      0.0              self._table_service = TableService(
-   290         3         22.0      7.3      0.0                  self.storage_account,
-   291         3    1485303.0 495101.0     38.7                  self.access_key_result.keys[0].value)
-   292        23         25.0      1.1      0.0          if not self._table_service. \
-   293        23    1363026.0  59262.0     35.5                  exists(table_name=self.public_key_storage_table_name):
-   294                                                       self._table_service.create_table(
-   295                                                           self.public_key_storage_table_name)
-   296        23         67.0      2.9      0.0          return self._table_service
-
-Total time: 1.99059 s
-File: /Users/alex/Desktop/work/cb-profiled/cloudbridge/cloudbridge/cloud/providers/azure/azure_client.py
-Function: get_resource_group at line 298
-
-Line #      Hits         Time  Per Hit   % Time  Line Contents
-==============================================================
-   298                                               @profile
-   299                                               def get_resource_group(self, name):
-   300         9    1990586.0 221176.2    100.0          return self.resource_client.resource_groups.get(name)
-
-Total time: 0 s
-File: /Users/alex/Desktop/work/cb-profiled/cloudbridge/cloudbridge/cloud/providers/azure/azure_client.py
-Function: create_resource_group at line 302
-
-Line #      Hits         Time  Per Hit   % Time  Line Contents
-==============================================================
-   302                                               @profile
-   303                                               def create_resource_group(self, name, parameters):
-   304                                                   return self.resource_client.resource_groups. \
-   305                                                       create_or_update(name, parameters)
-
-Total time: 1.68342 s
-File: /Users/alex/Desktop/work/cb-profiled/cloudbridge/cloudbridge/cloud/providers/azure/azure_client.py
-Function: get_storage_account at line 307
-
-Line #      Hits         Time  Per Hit   % Time  Line Contents
-==============================================================
-   307                                               @profile
-   308                                               def get_storage_account(self, storage_account):
-   309         6     100101.0  16683.5      5.9          return self.storage_client.storage_accounts. \
-   310         6    1583319.0 263886.5     94.1              get_properties(self.resource_group, storage_account)
-
-Total time: 0 s
-File: /Users/alex/Desktop/work/cb-profiled/cloudbridge/cloudbridge/cloud/providers/azure/azure_client.py
-Function: create_storage_account at line 312
-
-Line #      Hits         Time  Per Hit   % Time  Line Contents
-==============================================================
-   312                                               @profile
-   313                                               def create_storage_account(self, name, params):
-   314                                                   return self.storage_client.storage_accounts. \
-   315                                                       create(self.resource_group, name.lower(), params).result()
-
-Total time: 0.987488 s
-File: /Users/alex/Desktop/work/cb-profiled/cloudbridge/cloudbridge/cloud/providers/azure/azure_client.py
-Function: _get_or_create_storage_account at line 319
-
-Line #      Hits         Time  Per Hit   % Time  Line Contents
-==============================================================
-   319                                               @tenacity.retry(stop=tenacity.stop_after_attempt(2),
-   320                                                               retry=tenacity.retry_if_exception_type(CloudError),
-   321                                                               reraise=True)
-   322                                               @profile
-   323                                               def _get_or_create_storage_account(self):
-   324        23         37.0      1.6      0.0          if self._storage_account:
-   325        20         17.0      0.8      0.0              return self._storage_account
-   326                                                   else:
-   327         3          2.0      0.7      0.0              try:
-   328                                                           self._storage_account = \
-   329         3     987432.0 329144.0    100.0                      self.get_storage_account(self.storage_account)
-   330                                                       except CloudError as cloud_error:
-   331                                                           if cloud_error.error.error == "ResourceNotFound":
-   332                                                               storage_account_params = {
-   333                                                                   'sku': {
-   334                                                                       'name': 'Standard_LRS'
-   335                                                                   },
-   336                                                                   'kind': 'storage',
-   337                                                                   'location': self.region_name,
-   338                                                               }
-   339                                                               try:
-   340                                                                   self._storage_account = \
-   341                                                                       self.create_storage_account(self.storage_account,
-   342                                                                                                   storage_account_params)
-   343                                                               except CloudError as cloud_error2:  # pragma: no cover
-   344                                                                   if cloud_error2.error.error == "AuthorizationFailed":
-   345                                                                       mess = 'The following error was returned by ' \
-   346                                                                              'Azure:\n%s\n\nThis is likely because the' \
-   347                                                                              ' Role associated with the provided ' \
-   348                                                                              'credentials does not allow for Storage ' \
-   349                                                                              'Account creation.\nA Storage Account is ' \
-   350                                                                              'necessary in order to perform the ' \
-   351                                                                              'desired operation. You must either ' \
-   352                                                                              'provide an existing Storage Account name' \
-   353                                                                              ' as part of the configuration, or ' \
-   354                                                                              'elevate the associated Role.\nFor more ' \
-   355                                                                              'information on roles, see: https://docs.' \
-   356                                                                              'microsoft.com/en-us/azure/role-based-' \
-   357                                                                              'access-control/overview\n' % cloud_error2
-   358                                                                       raise ProviderConnectionException(mess)
-   359                                           
-   360                                                                   elif cloud_error2.error.error == \
-   361                                                                           "StorageAccountAlreadyTaken":
-   362                                                                       mess = 'The following error was ' \
-   363                                                                              'returned by Azure:\n%s\n\n' \
-   364                                                                              'Note that Storage Account names must be ' \
-   365                                                                              'unique across Azure (not just in your ' \
-   366                                                                              'subscription).\nFor more information ' \
-   367                                                                              'see https://docs.microsoft.com/en-us/' \
-   368                                                                              'azure/azure-resource-manager/resource-' \
-   369                                                                              'manager-storage-account-name-errors\n' \
-   370                                                                              % cloud_error2
-   371                                                                       raise InvalidLabelException(mess)
-   372                                                                   else:
-   373                                                                       raise cloud_error2
-   374                                                           else:
-   375                                                               raise cloud_error
-
-Total time: 0 s
-File: /Users/alex/Desktop/work/cb-profiled/cloudbridge/cloudbridge/cloud/providers/azure/azure_client.py
-Function: list_locations at line 377
-
-Line #      Hits         Time  Per Hit   % Time  Line Contents
-==============================================================
-   377                                               @profile
-   378                                               def list_locations(self):
-   379                                                   return self.subscription_client.subscriptions. \
-   380                                                       list_locations(self.subscription_id)
-
-Total time: 0.005836 s
-File: /Users/alex/Desktop/work/cb-profiled/cloudbridge/cloudbridge/cloud/providers/azure/azure_client.py
-Function: list_vm_firewall at line 382
-
-Line #      Hits         Time  Per Hit   % Time  Line Contents
-==============================================================
-   382                                               @profile
-   383                                               def list_vm_firewall(self):
-   384         7       5458.0    779.7     93.5          return self.network_management_client.network_security_groups. \
-   385         7        378.0     54.0      6.5              list(self.resource_group)
-
-Total time: 68.5755 s
-File: /Users/alex/Desktop/work/cb-profiled/cloudbridge/cloudbridge/cloud/providers/azure/azure_client.py
-Function: create_vm_firewall at line 387
-
-Line #      Hits         Time  Per Hit   % Time  Line Contents
-==============================================================
-   387                                               @profile
-   388                                               def create_vm_firewall(self, name, parameters):
-   389         6       4447.0    741.2      0.0          return self.network_management_client.network_security_groups. \
-   390         6         51.0      8.5      0.0              create_or_update(self.resource_group, name,
-   391         6   68570982.0 11428497.0    100.0                               parameters).result()
-
-Total time: 72.8747 s
-File: /Users/alex/Desktop/work/cb-profiled/cloudbridge/cloudbridge/cloud/providers/azure/azure_client.py
-Function: update_vm_firewall_tags at line 393
-
-Line #      Hits         Time  Per Hit   % Time  Line Contents
-==============================================================
-   393                                               @profile
-   394                                               def update_vm_firewall_tags(self, fw_id, tags):
-   395         3          8.0      2.7      0.0          url_params = azure_helpers.parse_url(VM_FIREWALL_RESOURCE_ID,
-   396         3         73.0     24.3      0.0                                               fw_id)
-   397         3          3.0      1.0      0.0          name = url_params.get(VM_FIREWALL_NAME)
-   398         3       2084.0    694.7      0.0          return self.network_management_client.network_security_groups. \
-   399         3         23.0      7.7      0.0              create_or_update(self.resource_group, name,
-   400         3          2.0      0.7      0.0                               {'tags': tags,
-   401         3   72872468.0 24290822.7    100.0                                'location': self.region_name}).result()
-
-Total time: 1.05494 s
-File: /Users/alex/Desktop/work/cb-profiled/cloudbridge/cloudbridge/cloud/providers/azure/azure_client.py
-Function: get_vm_firewall at line 403
-
-Line #      Hits         Time  Per Hit   % Time  Line Contents
-==============================================================
-   403                                               @profile
-   404                                               def get_vm_firewall(self, fw_id):
-   405         4         11.0      2.8      0.0          url_params = azure_helpers.parse_url(VM_FIREWALL_RESOURCE_ID,
-   406         4         99.0     24.8      0.0                                               fw_id)
-   407         4          4.0      1.0      0.0          fw_name = url_params.get(VM_FIREWALL_NAME)
-   408         4       2974.0    743.5      0.3          return self.network_management_client.network_security_groups. \
-   409         4    1051851.0 262962.8     99.7              get(self.resource_group, fw_name)
-
-Total time: 64.2852 s
-File: /Users/alex/Desktop/work/cb-profiled/cloudbridge/cloudbridge/cloud/providers/azure/azure_client.py
-Function: delete_vm_firewall at line 411
-
-Line #      Hits         Time  Per Hit   % Time  Line Contents
-==============================================================
-   411                                               @profile
-   412                                               def delete_vm_firewall(self, fw_id):
-   413         6         16.0      2.7      0.0          url_params = azure_helpers.parse_url(VM_FIREWALL_RESOURCE_ID,
-   414         6        154.0     25.7      0.0                                               fw_id)
-   415         6          6.0      1.0      0.0          name = url_params.get(VM_FIREWALL_NAME)
-   416         6       4320.0    720.0      0.0          self.network_management_client \
-   417         6   64280695.0 10713449.2    100.0              .network_security_groups.delete(self.resource_group, name).wait()
-
-Total time: 528.549 s
-File: /Users/alex/Desktop/work/cb-profiled/cloudbridge/cloudbridge/cloud/providers/azure/azure_client.py
-Function: create_vm_firewall_rule at line 419
-
-Line #      Hits         Time  Per Hit   % Time  Line Contents
-==============================================================
-   419                                               @profile
-   420                                               def create_vm_firewall_rule(self, fw_id,
-   421                                                                           rule_name, parameters):
-   422        47        123.0      2.6      0.0          url_params = azure_helpers.parse_url(VM_FIREWALL_RESOURCE_ID,
-   423        47       1298.0     27.6      0.0                                               fw_id)
-   424        47         71.0      1.5      0.0          vm_firewall_name = url_params.get(VM_FIREWALL_NAME)
-   425        47      35143.0    747.7      0.0          return self.network_management_client.security_rules. \
-   426        47        457.0      9.7      0.0              create_or_update(self.resource_group, vm_firewall_name,
-   427        47  528511698.0 11244929.7    100.0                               rule_name, parameters).result()
-
-Total time: 32.4044 s
-File: /Users/alex/Desktop/work/cb-profiled/cloudbridge/cloudbridge/cloud/providers/azure/azure_client.py
-Function: delete_vm_firewall_rule at line 429
-
-Line #      Hits         Time  Per Hit   % Time  Line Contents
-==============================================================
-   429                                               @profile
-   430                                               def delete_vm_firewall_rule(self, fw_rule_id, vm_firewall):
-   431         3          8.0      2.7      0.0          url_params = azure_helpers.parse_url(VM_FIREWALL_RULE_RESOURCE_ID,
-   432         3         92.0     30.7      0.0                                               fw_rule_id)
-   433         3          5.0      1.7      0.0          name = url_params.get(VM_FIREWALL_RULE_NAME)
-   434         3       2354.0    784.7      0.0          return self.network_management_client.security_rules. \
-   435         3   32401986.0 10800662.0    100.0              delete(self.resource_group, vm_firewall, name).result()
-
-Total time: 0 s
-File: /Users/alex/Desktop/work/cb-profiled/cloudbridge/cloudbridge/cloud/providers/azure/azure_client.py
-Function: list_containers at line 437
-
-Line #      Hits         Time  Per Hit   % Time  Line Contents
-==============================================================
-   437                                               @profile
-   438                                               def list_containers(self, prefix=None, limit=None, marker=None):
-   439                                                   results = self.blob_service.list_containers(prefix=prefix,
-   440                                                                                               num_results=limit,
-   441                                                                                               marker=marker)
-   442                                                   return (results.items, results.next_marker)
-
-Total time: 0 s
-File: /Users/alex/Desktop/work/cb-profiled/cloudbridge/cloudbridge/cloud/providers/azure/azure_client.py
-Function: create_container at line 444
-
-Line #      Hits         Time  Per Hit   % Time  Line Contents
-==============================================================
-   444                                               @profile
-   445                                               def create_container(self, container_name):
-   446                                                   try:
-   447                                                       self.blob_service.create_container(container_name,
-   448                                                                                          fail_on_exist=True)
-   449                                                   except AzureConflictHttpError as cloud_error:
-   450                                                       if cloud_error.error_code == "ContainerAlreadyExists":
-   451                                                           msg = "The given Bucket name '%s' already exists. Please " \
-   452                                                                 "use the `get` or `find` method to get a reference to " \
-   453                                                                 "an existing Bucket, or specify a new Bucket name to " \
-   454                                                                 "create.\nNote that in Azure, Buckets are contained " \
-   455                                                                 "in Storage Accounts." % container_name
-   456                                                           raise DuplicateResourceException(msg)
-   457                                           
-   458                                                   return self.blob_service.get_container_properties(container_name)
-
-Total time: 0 s
-File: /Users/alex/Desktop/work/cb-profiled/cloudbridge/cloudbridge/cloud/providers/azure/azure_client.py
-Function: get_container at line 460
-
-Line #      Hits         Time  Per Hit   % Time  Line Contents
-==============================================================
-   460                                               @profile
-   461                                               def get_container(self, container_name):
-   462                                                   return self.blob_service.get_container_properties(container_name)
-
-Total time: 0 s
-File: /Users/alex/Desktop/work/cb-profiled/cloudbridge/cloudbridge/cloud/providers/azure/azure_client.py
-Function: delete_container at line 464
-
-Line #      Hits         Time  Per Hit   % Time  Line Contents
-==============================================================
-   464                                               @profile
-   465                                               def delete_container(self, container_name):
-   466                                                   self.blob_service.delete_container(container_name)
-
-Total time: 0 s
-File: /Users/alex/Desktop/work/cb-profiled/cloudbridge/cloudbridge/cloud/providers/azure/azure_client.py
-Function: list_blobs at line 468
-
-Line #      Hits         Time  Per Hit   % Time  Line Contents
-==============================================================
-   468                                               @profile
-   469                                               def list_blobs(self, container_name, prefix=None):
-   470                                                   return self.blob_service.list_blobs(container_name, prefix=prefix)
-
-Total time: 0 s
-File: /Users/alex/Desktop/work/cb-profiled/cloudbridge/cloudbridge/cloud/providers/azure/azure_client.py
-Function: get_blob at line 472
-
-Line #      Hits         Time  Per Hit   % Time  Line Contents
-==============================================================
-   472                                               @profile
-   473                                               def get_blob(self, container_name, blob_name):
-   474                                                   return self.blob_service.get_blob_properties(container_name, blob_name)
-
-Total time: 0 s
-File: /Users/alex/Desktop/work/cb-profiled/cloudbridge/cloudbridge/cloud/providers/azure/azure_client.py
-Function: create_blob_from_text at line 476
-
-Line #      Hits         Time  Per Hit   % Time  Line Contents
-==============================================================
-   476                                               @profile
-   477                                               def create_blob_from_text(self, container_name, blob_name, text):
-   478                                                   self.blob_service.create_blob_from_text(container_name,
-   479                                                                                           blob_name, text)
-
-Total time: 0 s
-File: /Users/alex/Desktop/work/cb-profiled/cloudbridge/cloudbridge/cloud/providers/azure/azure_client.py
-Function: create_blob_from_file at line 481
-
-Line #      Hits         Time  Per Hit   % Time  Line Contents
-==============================================================
-   481                                               @profile
-   482                                               def create_blob_from_file(self, container_name, blob_name, file_path):
-   483                                                   self.blob_service.create_blob_from_path(container_name,
-   484                                                                                           blob_name, file_path)
-
-Total time: 0 s
-File: /Users/alex/Desktop/work/cb-profiled/cloudbridge/cloudbridge/cloud/providers/azure/azure_client.py
-Function: delete_blob at line 486
-
-Line #      Hits         Time  Per Hit   % Time  Line Contents
-==============================================================
-   486                                               @profile
-   487                                               def delete_blob(self, container_name, blob_name):
-   488                                                   self.blob_service.delete_blob(container_name, blob_name)
-
-Total time: 0 s
-File: /Users/alex/Desktop/work/cb-profiled/cloudbridge/cloudbridge/cloud/providers/azure/azure_client.py
-Function: get_blob_url at line 490
-
-Line #      Hits         Time  Per Hit   % Time  Line Contents
-==============================================================
-   490                                               @profile
-   491                                               def get_blob_url(self, container_name, blob_name, expiry_time):
-   492                                                   expiry_date = datetime.datetime.utcnow() + datetime.timedelta(
-   493                                                       seconds=expiry_time)
-   494                                                   sas = self.blob_service.generate_blob_shared_access_signature(
-   495                                                       container_name, blob_name, permission=BlobPermissions.READ,
-   496                                                       expiry=expiry_date)
-   497                                                   return self.blob_service.make_blob_url(container_name, blob_name,
-   498                                                                                          sas_token=sas)
-
-Total time: 0 s
-File: /Users/alex/Desktop/work/cb-profiled/cloudbridge/cloudbridge/cloud/providers/azure/azure_client.py
-Function: get_blob_content at line 500
-
-Line #      Hits         Time  Per Hit   % Time  Line Contents
-==============================================================
-   500                                               @profile
-   501                                               def get_blob_content(self, container_name, blob_name):
-   502                                                   out_stream = BytesIO()
-   503                                                   self.blob_service.get_blob_to_stream(container_name,
-   504                                                                                        blob_name, out_stream)
-   505                                                   return out_stream
-
-Total time: 0 s
-File: /Users/alex/Desktop/work/cb-profiled/cloudbridge/cloudbridge/cloud/providers/azure/azure_client.py
-Function: create_empty_disk at line 507
-
-Line #      Hits         Time  Per Hit   % Time  Line Contents
-==============================================================
-   507                                               @profile
-   508                                               def create_empty_disk(self, disk_name, params):
-   509                                                   return self.compute_client.disks.create_or_update(
-   510                                                       self.resource_group,
-   511                                                       disk_name,
-   512                                                       params
-   513                                                   ).result()
-
-Total time: 0 s
-File: /Users/alex/Desktop/work/cb-profiled/cloudbridge/cloudbridge/cloud/providers/azure/azure_client.py
-Function: create_snapshot_disk at line 515
-
-Line #      Hits         Time  Per Hit   % Time  Line Contents
-==============================================================
-   515                                               @profile
-   516                                               def create_snapshot_disk(self, disk_name, params):
-   517                                                   return self.compute_client.disks.create_or_update(
-   518                                                       self.resource_group,
-   519                                                       disk_name,
-   520                                                       params
-   521                                                   ).result()
-
-Total time: 0 s
-File: /Users/alex/Desktop/work/cb-profiled/cloudbridge/cloudbridge/cloud/providers/azure/azure_client.py
-Function: get_disk at line 523
-
-Line #      Hits         Time  Per Hit   % Time  Line Contents
-==============================================================
-   523                                               @profile
-   524                                               def get_disk(self, disk_id):
-   525                                                   url_params = azure_helpers.parse_url(VOLUME_RESOURCE_ID,
-   526                                                                                        disk_id)
-   527                                                   disk_name = url_params.get(VOLUME_NAME)
-   528                                                   return self.compute_client.disks.get(self.resource_group, disk_name)
-
-Total time: 0 s
-File: /Users/alex/Desktop/work/cb-profiled/cloudbridge/cloudbridge/cloud/providers/azure/azure_client.py
-Function: list_disks at line 530
-
-Line #      Hits         Time  Per Hit   % Time  Line Contents
-==============================================================
-   530                                               @profile
-   531                                               def list_disks(self):
-   532                                                   return self.compute_client.disks. \
-   533                                                       list_by_resource_group(self.resource_group)
-
-Total time: 0 s
-File: /Users/alex/Desktop/work/cb-profiled/cloudbridge/cloudbridge/cloud/providers/azure/azure_client.py
-Function: delete_disk at line 535
-
-Line #      Hits         Time  Per Hit   % Time  Line Contents
-==============================================================
-   535                                               @profile
-   536                                               def delete_disk(self, disk_id):
-   537                                                   url_params = azure_helpers.parse_url(VOLUME_RESOURCE_ID,
-   538                                                                                        disk_id)
-   539                                                   disk_name = url_params.get(VOLUME_NAME)
-   540                                                   self.compute_client.disks.delete(self.resource_group, disk_name).wait()
-
-Total time: 0 s
-File: /Users/alex/Desktop/work/cb-profiled/cloudbridge/cloudbridge/cloud/providers/azure/azure_client.py
-Function: update_disk_tags at line 542
-
-Line #      Hits         Time  Per Hit   % Time  Line Contents
-==============================================================
-   542                                               @profile
-   543                                               def update_disk_tags(self, disk_id, tags):
-   544                                                   url_params = azure_helpers.parse_url(VOLUME_RESOURCE_ID,
-   545                                                                                        disk_id)
-   546                                                   disk_name = url_params.get(VOLUME_NAME)
-   547                                                   return self.compute_client.disks.update(
-   548                                                       self.resource_group,
-   549                                                       disk_name,
-   550                                                       {'tags': tags},
-   551                                                       raw=True
-   552                                                   )
-
-Total time: 0 s
-File: /Users/alex/Desktop/work/cb-profiled/cloudbridge/cloudbridge/cloud/providers/azure/azure_client.py
-Function: list_snapshots at line 554
-
-Line #      Hits         Time  Per Hit   % Time  Line Contents
-==============================================================
-   554                                               @profile
-   555                                               def list_snapshots(self):
-   556                                                   return self.compute_client.snapshots. \
-   557                                                       list_by_resource_group(self.resource_group)
-
-Total time: 0 s
-File: /Users/alex/Desktop/work/cb-profiled/cloudbridge/cloudbridge/cloud/providers/azure/azure_client.py
-Function: get_snapshot at line 559
-
-Line #      Hits         Time  Per Hit   % Time  Line Contents
-==============================================================
-   559                                               @profile
-   560                                               def get_snapshot(self, snapshot_id):
-   561                                                   url_params = azure_helpers.parse_url(SNAPSHOT_RESOURCE_ID,
-   562                                                                                        snapshot_id)
-   563                                                   snapshot_name = url_params.get(SNAPSHOT_NAME)
-   564                                                   return self.compute_client.snapshots.get(self.resource_group,
-   565                                                                                            snapshot_name)
-
-Total time: 0 s
-File: /Users/alex/Desktop/work/cb-profiled/cloudbridge/cloudbridge/cloud/providers/azure/azure_client.py
-Function: create_snapshot at line 567
-
-Line #      Hits         Time  Per Hit   % Time  Line Contents
-==============================================================
-   567                                               @profile
-   568                                               def create_snapshot(self, snapshot_name, params):
-   569                                                   return self.compute_client.snapshots.create_or_update(
-   570                                                       self.resource_group,
-   571                                                       snapshot_name,
-   572                                                       params
-   573                                                   ).result()
-
-Total time: 0 s
-File: /Users/alex/Desktop/work/cb-profiled/cloudbridge/cloudbridge/cloud/providers/azure/azure_client.py
-Function: delete_snapshot at line 575
-
-Line #      Hits         Time  Per Hit   % Time  Line Contents
-==============================================================
-   575                                               @profile
-   576                                               def delete_snapshot(self, snapshot_id):
-   577                                                   url_params = azure_helpers.parse_url(SNAPSHOT_RESOURCE_ID,
-   578                                                                                        snapshot_id)
-   579                                                   snapshot_name = url_params.get(SNAPSHOT_NAME)
-   580                                                   self.compute_client.snapshots.delete(self.resource_group,
-   581                                                                                        snapshot_name).wait()
-
-Total time: 0 s
-File: /Users/alex/Desktop/work/cb-profiled/cloudbridge/cloudbridge/cloud/providers/azure/azure_client.py
-Function: update_snapshot_tags at line 583
-
-Line #      Hits         Time  Per Hit   % Time  Line Contents
-==============================================================
-   583                                               @profile
-   584                                               def update_snapshot_tags(self, snapshot_id, tags):
-   585                                                   url_params = azure_helpers.parse_url(SNAPSHOT_RESOURCE_ID,
-   586                                                                                        snapshot_id)
-   587                                                   snapshot_name = url_params.get(SNAPSHOT_NAME)
-   588                                                   return self.compute_client.snapshots.update(
-   589                                                       self.resource_group,
-   590                                                       snapshot_name,
-   591                                                       {'tags': tags},
-   592                                                       raw=True
-   593                                                   )
-
-Total time: 0 s
-File: /Users/alex/Desktop/work/cb-profiled/cloudbridge/cloudbridge/cloud/providers/azure/azure_client.py
-Function: is_gallery_image at line 595
-
-Line #      Hits         Time  Per Hit   % Time  Line Contents
-==============================================================
-   595                                               @profile
-   596                                               def is_gallery_image(self, image_id):
-   597                                                   url_params = azure_helpers.parse_url(IMAGE_RESOURCE_ID,
-   598                                                                                        image_id)
-   599                                                   # If it is a gallery image, it will always have an offer
-   600                                                   return 'offer' in url_params
-
-Total time: 0 s
-File: /Users/alex/Desktop/work/cb-profiled/cloudbridge/cloudbridge/cloud/providers/azure/azure_client.py
-Function: create_image at line 602
-
-Line #      Hits         Time  Per Hit   % Time  Line Contents
-==============================================================
-   602                                               @profile
-   603                                               def create_image(self, name, params):
-   604                                                   return self.compute_client.images. \
-   605                                                       create_or_update(self.resource_group, name,
-   606                                                                        params).result()
-
-Total time: 0 s
-File: /Users/alex/Desktop/work/cb-profiled/cloudbridge/cloudbridge/cloud/providers/azure/azure_client.py
-Function: delete_image at line 608
-
-Line #      Hits         Time  Per Hit   % Time  Line Contents
-==============================================================
-   608                                               @profile
-   609                                               def delete_image(self, image_id):
-   610                                                   url_params = azure_helpers.parse_url(IMAGE_RESOURCE_ID,
-   611                                                                                        image_id)
-   612                                                   if not self.is_gallery_image(image_id):
-   613                                                       name = url_params.get(IMAGE_NAME)
-   614                                                       self.compute_client.images.delete(self.resource_group, name).wait()
-
-Total time: 0 s
-File: /Users/alex/Desktop/work/cb-profiled/cloudbridge/cloudbridge/cloud/providers/azure/azure_client.py
-Function: list_images at line 616
-
-Line #      Hits         Time  Per Hit   % Time  Line Contents
-==============================================================
-   616                                               @profile
-   617                                               def list_images(self):
-   618                                                   azure_images = list(self.compute_client.images.
-   619                                                                       list_by_resource_group(self.resource_group))
-   620                                                   return azure_images
-
-Total time: 0 s
-File: /Users/alex/Desktop/work/cb-profiled/cloudbridge/cloudbridge/cloud/providers/azure/azure_client.py
-Function: list_gallery_refs at line 622
-
-Line #      Hits         Time  Per Hit   % Time  Line Contents
-==============================================================
-   622                                               @profile
-   623                                               def list_gallery_refs(self):
-   624                                                   return gallery_image_references
-
-Total time: 0 s
-File: /Users/alex/Desktop/work/cb-profiled/cloudbridge/cloudbridge/cloud/providers/azure/azure_client.py
-Function: get_image at line 626
-
-Line #      Hits         Time  Per Hit   % Time  Line Contents
-==============================================================
-   626                                               @profile
-   627                                               def get_image(self, image_id):
-   628                                                   url_params = azure_helpers.parse_url(IMAGE_RESOURCE_ID,
-   629                                                                                        image_id)
-   630                                                   if self.is_gallery_image(image_id):
-   631                                                       return GalleryImageReference(publisher=url_params['publisher'],
-   632                                                                                    offer=url_params['offer'],
-   633                                                                                    sku=url_params['sku'],
-   634                                                                                    version=url_params['version'])
-   635                                                   else:
-   636                                                       name = url_params.get(IMAGE_NAME)
-   637                                                       return self.compute_client.images.get(self.resource_group, name)
-
-Total time: 0 s
-File: /Users/alex/Desktop/work/cb-profiled/cloudbridge/cloudbridge/cloud/providers/azure/azure_client.py
-Function: update_image_tags at line 639
-
-Line #      Hits         Time  Per Hit   % Time  Line Contents
-==============================================================
-   639                                               @profile
-   640                                               def update_image_tags(self, image_id, tags):
-   641                                                   url_params = azure_helpers.parse_url(IMAGE_RESOURCE_ID,
-   642                                                                                        image_id)
-   643                                                   if self.is_gallery_image(image_id):
-   644                                                       return True
-   645                                                   else:
-   646                                                       name = url_params.get(IMAGE_NAME)
-   647                                                       return self.compute_client.images. \
-   648                                                           create_or_update(self.resource_group, name,
-   649                                                                            {
-   650                                                                                'tags': tags,
-   651                                                                                'location': self.region_name
-   652                                                                            }).result()
-
-Total time: 0 s
-File: /Users/alex/Desktop/work/cb-profiled/cloudbridge/cloudbridge/cloud/providers/azure/azure_client.py
-Function: list_vm_types at line 654
-
-Line #      Hits         Time  Per Hit   % Time  Line Contents
-==============================================================
-   654                                               @profile
-   655                                               def list_vm_types(self):
-   656                                                   return self.compute_client.virtual_machine_sizes. \
-   657                                                       list(self.region_name)
-
-Total time: 0.048469 s
-File: /Users/alex/Desktop/work/cb-profiled/cloudbridge/cloudbridge/cloud/providers/azure/azure_client.py
-Function: list_networks at line 659
-
-Line #      Hits         Time  Per Hit   % Time  Line Contents
-==============================================================
-   659                                               @profile
-   660                                               def list_networks(self):
-   661         6      48111.0   8018.5     99.3          return self.network_management_client.virtual_networks.list(
-   662         6        358.0     59.7      0.7              self.resource_group)
-
-Total time: 4.84816 s
-File: /Users/alex/Desktop/work/cb-profiled/cloudbridge/cloudbridge/cloud/providers/azure/azure_client.py
-Function: get_network at line 664
-
-Line #      Hits         Time  Per Hit   % Time  Line Contents
-==============================================================
-   664                                               @profile
-   665                                               def get_network(self, network_id):
-   666        18         16.0      0.9      0.0          url_params = azure_helpers.parse_url(NETWORK_RESOURCE_ID,
-   667        18        323.0     17.9      0.0                                               network_id)
-   668        18         18.0      1.0      0.0          network_name = url_params.get(NETWORK_NAME)
-   669        18      13505.0    750.3      0.3          return self.network_management_client.virtual_networks.get(
-   670        18    4834293.0 268571.8     99.7              self.resource_group, network_name)
-
-Total time: 0 s
-File: /Users/alex/Desktop/work/cb-profiled/cloudbridge/cloudbridge/cloud/providers/azure/azure_client.py
-Function: create_network at line 672
-
-Line #      Hits         Time  Per Hit   % Time  Line Contents
-==============================================================
-   672                                               @profile
-   673                                               def create_network(self, name, params):
-   674                                                   return self.network_management_client.virtual_networks. \
-   675                                                       create_or_update(self.resource_group,
-   676                                                                        name,
-   677                                                                        parameters=params).result()
-
-Total time: 0 s
-File: /Users/alex/Desktop/work/cb-profiled/cloudbridge/cloudbridge/cloud/providers/azure/azure_client.py
-Function: delete_network at line 679
-
-Line #      Hits         Time  Per Hit   % Time  Line Contents
-==============================================================
-   679                                               @profile
-   680                                               def delete_network(self, network_id):
-   681                                                   url_params = azure_helpers.parse_url(NETWORK_RESOURCE_ID, network_id)
-   682                                                   network_name = url_params.get(NETWORK_NAME)
-   683                                                   return self.network_management_client.virtual_networks. \
-   684                                                       delete(self.resource_group, network_name).wait()
-
-Total time: 0 s
-File: /Users/alex/Desktop/work/cb-profiled/cloudbridge/cloudbridge/cloud/providers/azure/azure_client.py
-Function: update_network_tags at line 686
-
-Line #      Hits         Time  Per Hit   % Time  Line Contents
-==============================================================
-   686                                               @profile
-   687                                               def update_network_tags(self, network_id, tags):
-   688                                                   url_params = azure_helpers.parse_url(NETWORK_RESOURCE_ID, network_id)
-   689                                                   network_name = url_params.get(NETWORK_NAME)
-   690                                                   return self.network_management_client.virtual_networks. \
-   691                                                       create_or_update(self.resource_group,
-   692                                                                        network_name, tags).result()
-
-Total time: 0.000751 s
-File: /Users/alex/Desktop/work/cb-profiled/cloudbridge/cloudbridge/cloud/providers/azure/azure_client.py
-Function: get_network_id_for_subnet at line 694
-
-Line #      Hits         Time  Per Hit   % Time  Line Contents
-==============================================================
-   694                                               @profile
-   695                                               def get_network_id_for_subnet(self, subnet_id):
-   696        18        522.0     29.0     69.5          url_params = azure_helpers.parse_url(SUBNET_RESOURCE_ID, subnet_id)
-   697        18         26.0      1.4      3.5          network_id = NETWORK_RESOURCE_ID[0]
-   698        90         63.0      0.7      8.4          for key, val in url_params.items():
-   699        72        130.0      1.8     17.3              network_id = network_id.replace("{" + key + "}", val)
-   700        18         10.0      0.6      1.3          return network_id
-
-Total time: 0.004972 s
-File: /Users/alex/Desktop/work/cb-profiled/cloudbridge/cloudbridge/cloud/providers/azure/azure_client.py
-Function: list_subnets at line 702
-
-Line #      Hits         Time  Per Hit   % Time  Line Contents
-==============================================================
-   702                                               @profile
-   703                                               def list_subnets(self, network_id):
-   704         6        180.0     30.0      3.6          url_params = azure_helpers.parse_url(NETWORK_RESOURCE_ID, network_id)
-   705         6         11.0      1.8      0.2          network_name = url_params.get(NETWORK_NAME)
-   706         6       4469.0    744.8     89.9          return self.network_management_client.subnets. \
-   707         6        312.0     52.0      6.3              list(self.resource_group, network_name)
-
-Total time: 0 s
-File: /Users/alex/Desktop/work/cb-profiled/cloudbridge/cloudbridge/cloud/providers/azure/azure_client.py
-Function: get_subnet at line 709
-
-Line #      Hits         Time  Per Hit   % Time  Line Contents
-==============================================================
-   709                                               @profile
-   710                                               def get_subnet(self, subnet_id):
-   711                                                   url_params = azure_helpers.parse_url(SUBNET_RESOURCE_ID,
-   712                                                                                        subnet_id)
-   713                                                   network_name = url_params.get(NETWORK_NAME)
-   714                                                   subnet_name = url_params.get(SUBNET_NAME)
-   715                                                   return self.network_management_client.subnets. \
-   716                                                       get(self.resource_group, network_name, subnet_name)
-
-Total time: 0 s
-File: /Users/alex/Desktop/work/cb-profiled/cloudbridge/cloudbridge/cloud/providers/azure/azure_client.py
-Function: create_subnet at line 718
-
-Line #      Hits         Time  Per Hit   % Time  Line Contents
-==============================================================
-   718                                               @profile
-   719                                               def create_subnet(self, network_id, subnet_name, params):
-   720                                                   url_params = azure_helpers.parse_url(NETWORK_RESOURCE_ID, network_id)
-   721                                                   network_name = url_params.get(NETWORK_NAME)
-   722                                                   result_create = self.network_management_client \
-   723                                                       .subnets.create_or_update(
-   724                                                           self.resource_group,
-   725                                                           network_name,
-   726                                                           subnet_name,
-   727                                                           params
-   728                                                       )
-   729                                                   subnet_info = result_create.result()
-   730                                           
-   731                                                   return subnet_info
-
-Total time: 0 s
-File: /Users/alex/Desktop/work/cb-profiled/cloudbridge/cloudbridge/cloud/providers/azure/azure_client.py
-Function: __if_subnet_in_use at line 733
-
-Line #      Hits         Time  Per Hit   % Time  Line Contents
-==============================================================
-   733                                               @profile
-   734                                               def __if_subnet_in_use(e):
-   735                                                   # return True if the CloudError exception is due to subnet being in use
-   736                                                   if isinstance(e, CloudError):
-   737                                                       if e.error.error == "InUseSubnetCannotBeDeleted":
-   738                                                           return True
-   739                                                   return False
-
-Total time: 0 s
-File: /Users/alex/Desktop/work/cb-profiled/cloudbridge/cloudbridge/cloud/providers/azure/azure_client.py
-Function: delete_subnet at line 741
-
-Line #      Hits         Time  Per Hit   % Time  Line Contents
-==============================================================
-   741                                               @tenacity.retry(stop=tenacity.stop_after_attempt(5),
-   742                                                               retry=tenacity.retry_if_exception(__if_subnet_in_use),
-   743                                                               wait=tenacity.wait_fixed(5),
-   744                                                               reraise=True)
-   745                                               @profile
-   746                                               def delete_subnet(self, subnet_id):
-   747                                                   url_params = azure_helpers.parse_url(SUBNET_RESOURCE_ID,
-   748                                                                                        subnet_id)
-   749                                                   network_name = url_params.get(NETWORK_NAME)
-   750                                                   subnet_name = url_params.get(SUBNET_NAME)
-   751                                           
-   752                                                   try:
-   753                                                       result_delete = self.network_management_client \
-   754                                                           .subnets.delete(
-   755                                                               self.resource_group,
-   756                                                               network_name,
-   757                                                               subnet_name
-   758                                                           )
-   759                                                       result_delete.wait()
-   760                                                   except CloudError as cloud_error:
-   761                                                       log.exception(cloud_error.message)
-   762                                                       raise cloud_error
-
-Total time: 0 s
-File: /Users/alex/Desktop/work/cb-profiled/cloudbridge/cloudbridge/cloud/providers/azure/azure_client.py
-Function: create_floating_ip at line 764
-
-Line #      Hits         Time  Per Hit   % Time  Line Contents
-==============================================================
-   764                                               @profile
-   765                                               def create_floating_ip(self, public_ip_name, public_ip_parameters):
-   766                                                   return self.network_management_client.public_ip_addresses. \
-   767                                                       create_or_update(self.resource_group,
-   768                                                                        public_ip_name,
-   769                                                                        public_ip_parameters).result()
-
-Total time: 0 s
-File: /Users/alex/Desktop/work/cb-profiled/cloudbridge/cloudbridge/cloud/providers/azure/azure_client.py
-Function: get_floating_ip at line 771
-
-Line #      Hits         Time  Per Hit   % Time  Line Contents
-==============================================================
-   771                                               @profile
-   772                                               def get_floating_ip(self, public_ip_id):
-   773                                                   url_params = azure_helpers.parse_url(PUBLIC_IP_RESOURCE_ID,
-   774                                                                                        public_ip_id)
-   775                                                   public_ip_name = url_params.get(PUBLIC_IP_NAME)
-   776                                                   return self.network_management_client. \
-   777                                                       public_ip_addresses.get(self.resource_group, public_ip_name)
-
-Total time: 0 s
-File: /Users/alex/Desktop/work/cb-profiled/cloudbridge/cloudbridge/cloud/providers/azure/azure_client.py
-Function: delete_floating_ip at line 779
-
-Line #      Hits         Time  Per Hit   % Time  Line Contents
-==============================================================
-   779                                               @profile
-   780                                               def delete_floating_ip(self, public_ip_id):
-   781                                                   url_params = azure_helpers.parse_url(PUBLIC_IP_RESOURCE_ID,
-   782                                                                                        public_ip_id)
-   783                                                   public_ip_name = url_params.get(PUBLIC_IP_NAME)
-   784                                                   self.network_management_client. \
-   785                                                       public_ip_addresses.delete(self.resource_group,
-   786                                                                                  public_ip_name).wait()
-
-Total time: 0 s
-File: /Users/alex/Desktop/work/cb-profiled/cloudbridge/cloudbridge/cloud/providers/azure/azure_client.py
-Function: update_fip_tags at line 788
-
-Line #      Hits         Time  Per Hit   % Time  Line Contents
-==============================================================
-   788                                               @profile
-   789                                               def update_fip_tags(self, fip_id, tags):
-   790                                                   url_params = azure_helpers.parse_url(PUBLIC_IP_RESOURCE_ID,
-   791                                                                                        fip_id)
-   792                                                   fip_name = url_params.get(PUBLIC_IP_NAME)
-   793                                                   self.network_management_client.public_ip_addresses. \
-   794                                                       create_or_update(self.resource_group,
-   795                                                                        fip_name, tags).result()
-
-Total time: 0 s
-File: /Users/alex/Desktop/work/cb-profiled/cloudbridge/cloudbridge/cloud/providers/azure/azure_client.py
-Function: list_floating_ips at line 797
-
-Line #      Hits         Time  Per Hit   % Time  Line Contents
-==============================================================
-   797                                               @profile
-   798                                               def list_floating_ips(self):
-   799                                                   return self.network_management_client.public_ip_addresses.list(
-   800                                                       self.resource_group)
-
-Total time: 0 s
-File: /Users/alex/Desktop/work/cb-profiled/cloudbridge/cloudbridge/cloud/providers/azure/azure_client.py
-Function: list_vm at line 802
-
-Line #      Hits         Time  Per Hit   % Time  Line Contents
-==============================================================
-   802                                               @profile
-   803                                               def list_vm(self):
-   804                                                   return self.compute_client.virtual_machines.list(
-   805                                                       self.resource_group
-   806                                                   )
-
-Total time: 0 s
-File: /Users/alex/Desktop/work/cb-profiled/cloudbridge/cloudbridge/cloud/providers/azure/azure_client.py
-Function: restart_vm at line 808
-
-Line #      Hits         Time  Per Hit   % Time  Line Contents
-==============================================================
-   808                                               @profile
-   809                                               def restart_vm(self, vm_id):
-   810                                                   url_params = azure_helpers.parse_url(VM_RESOURCE_ID,
-   811                                                                                        vm_id)
-   812                                                   vm_name = url_params.get(VM_NAME)
-   813                                                   return self.compute_client.virtual_machines.restart(
-   814                                                       self.resource_group, vm_name).wait()
-
-Total time: 0 s
-File: /Users/alex/Desktop/work/cb-profiled/cloudbridge/cloudbridge/cloud/providers/azure/azure_client.py
-Function: delete_vm at line 816
-
-Line #      Hits         Time  Per Hit   % Time  Line Contents
-==============================================================
-   816                                               @profile
-   817                                               def delete_vm(self, vm_id):
-   818                                                   url_params = azure_helpers.parse_url(VM_RESOURCE_ID,
-   819                                                                                        vm_id)
-   820                                                   vm_name = url_params.get(VM_NAME)
-   821                                                   return self.compute_client.virtual_machines.delete(
-   822                                                       self.resource_group, vm_name).wait()
-
-Total time: 0 s
-File: /Users/alex/Desktop/work/cb-profiled/cloudbridge/cloudbridge/cloud/providers/azure/azure_client.py
-Function: get_vm at line 824
-
-Line #      Hits         Time  Per Hit   % Time  Line Contents
-==============================================================
-   824                                               @profile
-   825                                               def get_vm(self, vm_id):
-   826                                                   url_params = azure_helpers.parse_url(VM_RESOURCE_ID,
-   827                                                                                        vm_id)
-   828                                                   vm_name = url_params.get(VM_NAME)
-   829                                                   return self.compute_client.virtual_machines.get(
-   830                                                       self.resource_group,
-   831                                                       vm_name,
-   832                                                       expand='instanceView'
-   833                                                   )
-
-Total time: 0 s
-File: /Users/alex/Desktop/work/cb-profiled/cloudbridge/cloudbridge/cloud/providers/azure/azure_client.py
-Function: create_vm at line 835
-
-Line #      Hits         Time  Per Hit   % Time  Line Contents
-==============================================================
-   835                                               @profile
-   836                                               def create_vm(self, vm_name, params):
-   837                                                   return self.compute_client.virtual_machines. \
-   838                                                       create_or_update(self.resource_group,
-   839                                                                        vm_name, params).result()
-
-Total time: 0 s
-File: /Users/alex/Desktop/work/cb-profiled/cloudbridge/cloudbridge/cloud/providers/azure/azure_client.py
-Function: update_vm at line 841
-
-Line #      Hits         Time  Per Hit   % Time  Line Contents
-==============================================================
-   841                                               @profile
-   842                                               def update_vm(self, vm_id, params):
-   843                                                   url_params = azure_helpers.parse_url(VM_RESOURCE_ID,
-   844                                                                                        vm_id)
-   845                                                   vm_name = url_params.get(VM_NAME)
-   846                                                   return self.compute_client.virtual_machines. \
-   847                                                       create_or_update(self.resource_group,
-   848                                                                        vm_name, params, raw=True)
-
-Total time: 0 s
-File: /Users/alex/Desktop/work/cb-profiled/cloudbridge/cloudbridge/cloud/providers/azure/azure_client.py
-Function: deallocate_vm at line 850
-
-Line #      Hits         Time  Per Hit   % Time  Line Contents
-==============================================================
-   850                                               @profile
-   851                                               def deallocate_vm(self, vm_id):
-   852                                                   url_params = azure_helpers.parse_url(VM_RESOURCE_ID,
-   853                                                                                        vm_id)
-   854                                                   vm_name = url_params.get(VM_NAME)
-   855                                                   self.compute_client. \
-   856                                                       virtual_machines.deallocate(self.resource_group,
-   857                                                                                   vm_name).wait()
-
-Total time: 0 s
-File: /Users/alex/Desktop/work/cb-profiled/cloudbridge/cloudbridge/cloud/providers/azure/azure_client.py
-Function: generalize_vm at line 859
-
-Line #      Hits         Time  Per Hit   % Time  Line Contents
-==============================================================
-   859                                               @profile
-   860                                               def generalize_vm(self, vm_id):
-   861                                                   url_params = azure_helpers.parse_url(VM_RESOURCE_ID,
-   862                                                                                        vm_id)
-   863                                                   vm_name = url_params.get(VM_NAME)
-   864                                                   self.compute_client.virtual_machines. \
-   865                                                       generalize(self.resource_group, vm_name)
-
-Total time: 0 s
-File: /Users/alex/Desktop/work/cb-profiled/cloudbridge/cloudbridge/cloud/providers/azure/azure_client.py
-Function: start_vm at line 867
-
-Line #      Hits         Time  Per Hit   % Time  Line Contents
-==============================================================
-   867                                               @profile
-   868                                               def start_vm(self, vm_id):
-   869                                                   url_params = azure_helpers.parse_url(VM_RESOURCE_ID,
-   870                                                                                        vm_id)
-   871                                                   vm_name = url_params.get(VM_NAME)
-   872                                                   self.compute_client.virtual_machines. \
-   873                                                       start(self.resource_group,
-   874                                                             vm_name).wait()
-
-Total time: 0 s
-File: /Users/alex/Desktop/work/cb-profiled/cloudbridge/cloudbridge/cloud/providers/azure/azure_client.py
-Function: update_vm_tags at line 876
-
-Line #      Hits         Time  Per Hit   % Time  Line Contents
-==============================================================
-   876                                               @profile
-   877                                               def update_vm_tags(self, vm_id, tags):
-   878                                                   url_params = azure_helpers.parse_url(VM_RESOURCE_ID,
-   879                                                                                        vm_id)
-   880                                                   vm_name = url_params.get(VM_NAME)
-   881                                                   self.compute_client.virtual_machines. \
-   882                                                       create_or_update(self.resource_group,
-   883                                                                        vm_name, tags).result()
-
-Total time: 0 s
-File: /Users/alex/Desktop/work/cb-profiled/cloudbridge/cloudbridge/cloud/providers/azure/azure_client.py
-Function: delete_nic at line 885
-
-Line #      Hits         Time  Per Hit   % Time  Line Contents
-==============================================================
-   885                                               @profile
-   886                                               def delete_nic(self, nic_id):
-   887                                                   nic_params = azure_helpers.\
-   888                                                       parse_url(NETWORK_INTERFACE_RESOURCE_ID, nic_id)
-   889                                                   nic_name = nic_params.get(NETWORK_INTERFACE_NAME)
-   890                                                   self.network_management_client. \
-   891                                                       network_interfaces.delete(self.resource_group,
-   892                                                                                 nic_name).wait()
-
-Total time: 0 s
-File: /Users/alex/Desktop/work/cb-profiled/cloudbridge/cloudbridge/cloud/providers/azure/azure_client.py
-Function: get_nic at line 894
-
-Line #      Hits         Time  Per Hit   % Time  Line Contents
-==============================================================
-   894                                               @profile
-   895                                               def get_nic(self, nic_id):
-   896                                                   nic_params = azure_helpers.\
-   897                                                       parse_url(NETWORK_INTERFACE_RESOURCE_ID, nic_id)
-   898                                                   nic_name = nic_params.get(NETWORK_INTERFACE_NAME)
-   899                                                   return self.network_management_client. \
-   900                                                       network_interfaces.get(self.resource_group, nic_name)
-
-Total time: 0 s
-File: /Users/alex/Desktop/work/cb-profiled/cloudbridge/cloudbridge/cloud/providers/azure/azure_client.py
-Function: update_nic at line 902
-
-Line #      Hits         Time  Per Hit   % Time  Line Contents
-==============================================================
-   902                                               @profile
-   903                                               def update_nic(self, nic_id, params):
-   904                                                   nic_params = azure_helpers.\
-   905                                                       parse_url(NETWORK_INTERFACE_RESOURCE_ID, nic_id)
-   906                                                   nic_name = nic_params.get(NETWORK_INTERFACE_NAME)
-   907                                                   async_nic_creation = self.network_management_client. \
-   908                                                       network_interfaces.create_or_update(
-   909                                                           self.resource_group,
-   910                                                           nic_name,
-   911                                                           params
-   912                                                       )
-   913                                                   nic_info = async_nic_creation.result()
-   914                                                   return nic_info
-
-Total time: 0 s
-File: /Users/alex/Desktop/work/cb-profiled/cloudbridge/cloudbridge/cloud/providers/azure/azure_client.py
-Function: create_nic at line 916
-
-Line #      Hits         Time  Per Hit   % Time  Line Contents
-==============================================================
-   916                                               @profile
-   917                                               def create_nic(self, nic_name, params):
-   918                                                   return self.network_management_client. \
-   919                                                       network_interfaces.create_or_update(
-   920                                                           self.resource_group,
-   921                                                           nic_name,
-   922                                                           params
-   923                                                       ).result()
-
-Total time: 0.295365 s
-File: /Users/alex/Desktop/work/cb-profiled/cloudbridge/cloudbridge/cloud/providers/azure/azure_client.py
-Function: create_public_key at line 925
-
-Line #      Hits         Time  Per Hit   % Time  Line Contents
-==============================================================
-   925                                               @profile
-   926                                               def create_public_key(self, entity):
-   927         3     148018.0  49339.3     50.1          return self.table_service. \
-   928         3         25.0      8.3      0.0              insert_or_replace_entity(self.public_key_storage_table_name,
-   929         3     147322.0  49107.3     49.9                                       entity)
-
-Total time: 3.71449 s
-File: /Users/alex/Desktop/work/cb-profiled/cloudbridge/cloudbridge/cloud/providers/azure/azure_client.py
-Function: get_public_key at line 931
-
-Line #      Hits         Time  Per Hit   % Time  Line Contents
-==============================================================
-   931                                               @profile
-   932                                               def get_public_key(self, name):
-   933        11    3360211.0 305473.7     90.5          entities = self.table_service. \
-   934        11         93.0      8.5      0.0              query_entities(self.public_key_storage_table_name,
-   935        11     354149.0  32195.4      9.5                             "Name eq '{0}'".format(name), num_results=1)
-   936                                           
-   937        11         37.0      3.4      0.0          return entities.items[0] if len(entities.items) > 0 else None
-
-Total time: 0.195861 s
-File: /Users/alex/Desktop/work/cb-profiled/cloudbridge/cloudbridge/cloud/providers/azure/azure_client.py
-Function: delete_public_key at line 939
-
-Line #      Hits         Time  Per Hit   % Time  Line Contents
-==============================================================
-   939                                               @profile
-   940                                               def delete_public_key(self, entity):
-   941         3     106261.0  35420.3     54.3          self.table_service.delete_entity(self.public_key_storage_table_name,
-   942         3      89600.0  29866.7     45.7                                           entity.PartitionKey, entity.RowKey)
-
-Total time: 0.458264 s
-File: /Users/alex/Desktop/work/cb-profiled/cloudbridge/cloudbridge/cloud/providers/azure/azure_client.py
-Function: list_public_keys at line 944
-
-Line #      Hits         Time  Per Hit   % Time  Line Contents
-==============================================================
-   944                                               @profile
-   945                                               def list_public_keys(self, partition_key, limit=None, marker=None):
-   946         6     224624.0  37437.3     49.0          entities = self.table_service. \
-   947         6         58.0      9.7      0.0              query_entities(self.public_key_storage_table_name,
-   948         6         11.0      1.8      0.0                             "PartitionKey eq '{0}'".format(partition_key),
-   949         6     233558.0  38926.3     51.0                             marker=marker, num_results=limit)
-   950         6         13.0      2.2      0.0          return (entities.items, entities.next_marker)
-
-Total time: 0 s
-File: /Users/alex/Desktop/work/cb-profiled/cloudbridge/cloudbridge/cloud/providers/azure/azure_client.py
-Function: delete_route_table at line 952
-
-Line #      Hits         Time  Per Hit   % Time  Line Contents
-==============================================================
-   952                                               @profile
-   953                                               def delete_route_table(self, route_table_name):
-   954                                                   self.network_management_client. \
-   955                                                       route_tables.delete(self.resource_group, route_table_name
-   956                                                                           ).wait()
-
-Total time: 0 s
-File: /Users/alex/Desktop/work/cb-profiled/cloudbridge/cloudbridge/cloud/providers/azure/azure_client.py
-Function: attach_subnet_to_route_table at line 958
-
-Line #      Hits         Time  Per Hit   % Time  Line Contents
-==============================================================
-   958                                               @profile
-   959                                               def attach_subnet_to_route_table(self, subnet_id, route_table_id):
-   960                                                   url_params = azure_helpers.parse_url(SUBNET_RESOURCE_ID,
-   961                                                                                        subnet_id)
-   962                                                   network_name = url_params.get(NETWORK_NAME)
-   963                                                   subnet_name = url_params.get(SUBNET_NAME)
-   964                                           
-   965                                                   subnet_info = self.network_management_client.subnets.get(
-   966                                                       self.resource_group,
-   967                                                       network_name,
-   968                                                       subnet_name
-   969                                                   )
-   970                                                   if subnet_info:
-   971                                                       subnet_info.route_table = {
-   972                                                           'id': route_table_id
-   973                                                       }
-   974                                           
-   975                                                       result_create = self.network_management_client. \
-   976                                                           subnets.create_or_update(
-   977                                                            self.resource_group,
-   978                                                            network_name,
-   979                                                            subnet_name,
-   980                                                            subnet_info)
-   981                                                       subnet_info = result_create.result()
-   982                                           
-   983                                                   return subnet_info
-
-Total time: 0 s
-File: /Users/alex/Desktop/work/cb-profiled/cloudbridge/cloudbridge/cloud/providers/azure/azure_client.py
-Function: detach_subnet_to_route_table at line 985
-
-Line #      Hits         Time  Per Hit   % Time  Line Contents
-==============================================================
-   985                                               @profile
-   986                                               def detach_subnet_to_route_table(self, subnet_id, route_table_id):
-   987                                                   url_params = azure_helpers.parse_url(SUBNET_RESOURCE_ID,
-   988                                                                                        subnet_id)
-   989                                                   network_name = url_params.get(NETWORK_NAME)
-   990                                                   subnet_name = url_params.get(SUBNET_NAME)
-   991                                           
-   992                                                   subnet_info = self.network_management_client.subnets.get(
-   993                                                       self.resource_group,
-   994                                                       network_name,
-   995                                                       subnet_name
-   996                                                   )
-   997                                           
-   998                                                   if subnet_info and subnet_info.route_table.id == route_table_id:
-   999                                                       subnet_info.route_table = None
-  1000                                           
-  1001                                                       result_create = self.network_management_client. \
-  1002                                                           subnets.create_or_update(
-  1003                                                            self.resource_group,
-  1004                                                            network_name,
-  1005                                                            subnet_name,
-  1006                                                            subnet_info)
-  1007                                                       subnet_info = result_create.result()
-  1008                                           
-  1009                                                   return subnet_info
-
-Total time: 0 s
-File: /Users/alex/Desktop/work/cb-profiled/cloudbridge/cloudbridge/cloud/providers/azure/azure_client.py
-Function: list_route_tables at line 1011
-
-Line #      Hits         Time  Per Hit   % Time  Line Contents
-==============================================================
-  1011                                               @profile
-  1012                                               def list_route_tables(self):
-  1013                                                   return self.network_management_client. \
-  1014                                                       route_tables.list(self.resource_group)
-
-Total time: 0 s
-File: /Users/alex/Desktop/work/cb-profiled/cloudbridge/cloudbridge/cloud/providers/azure/azure_client.py
-Function: get_route_table at line 1016
-
-Line #      Hits         Time  Per Hit   % Time  Line Contents
-==============================================================
-  1016                                               @profile
-  1017                                               def get_route_table(self, router_id):
-  1018                                                   url_params = azure_helpers.parse_url(ROUTER_RESOURCE_ID,
-  1019                                                                                        router_id)
-  1020                                                   router_name = url_params.get(ROUTER_NAME)
-  1021                                                   return self.network_management_client. \
-  1022                                                       route_tables.get(self.resource_group, router_name)
-
-Total time: 0 s
-File: /Users/alex/Desktop/work/cb-profiled/cloudbridge/cloudbridge/cloud/providers/azure/azure_client.py
-Function: create_route_table at line 1024
-
-Line #      Hits         Time  Per Hit   % Time  Line Contents
-==============================================================
-  1024                                               @profile
-  1025                                               def create_route_table(self, route_table_name, params):
-  1026                                                   return self.network_management_client. \
-  1027                                                       route_tables.create_or_update(
-  1028                                                        self.resource_group,
-  1029                                                        route_table_name, params).result()
-
-Total time: 0 s
-File: /Users/alex/Desktop/work/cb-profiled/cloudbridge/cloudbridge/cloud/providers/azure/azure_client.py
-Function: update_route_table_tags at line 1031
-
-Line #      Hits         Time  Per Hit   % Time  Line Contents
-==============================================================
-  1031                                               @profile
-  1032                                               def update_route_table_tags(self, route_table_name, tags):
-  1033                                                   self.network_management_client.route_tables. \
-  1034                                                       create_or_update(self.resource_group,
-  1035                                                                        route_table_name, tags).result()
-

+ 0 - 1470
results/vm_types.res

@@ -1,1470 +0,0 @@
-cloudbridge.test.test_vm_types_service.CloudVMTypesServiceTestCase
-
-
-Test output
- ..
-----------------------------------------------------------------------
-Ran 2 tests in 40.693s
-
-OK
-
-Wrote profile results to run_tests.py.lprof
-Timer unit: 1e-06 s
-
-Total time: 0.601946 s
-File: /Users/alex/Desktop/work/cb-profiled/cloudbridge/cloudbridge/cloud/providers/azure/azure_client.py
-Function: __init__ at line 160
-
-Line #      Hits         Time  Per Hit   % Time  Line Contents
-==============================================================
-   160                                               @profile
-   161                                               def __init__(self, config):
-   162         2         10.0      5.0      0.0          self._config = config
-   163         2          7.0      3.5      0.0          self.subscription_id = str(config.get('azure_subscription_id'))
-   164         2          2.0      1.0      0.0          self._credentials = ServicePrincipalCredentials(
-   165         2          3.0      1.5      0.0              client_id=config.get('azure_client_id'),
-   166         2          1.0      0.5      0.0              secret=config.get('azure_secret'),
-   167         2     601876.0 300938.0    100.0              tenant=config.get('azure_tenant')
-   168                                                   )
-   169                                           
-   170         2          5.0      2.5      0.0          self._access_token = config.get('azure_access_token')
-   171         2          3.0      1.5      0.0          self._resource_client = None
-   172         2          2.0      1.0      0.0          self._storage_client = None
-   173         2          2.0      1.0      0.0          self._network_management_client = None
-   174         2          2.0      1.0      0.0          self._subscription_client = None
-   175         2          2.0      1.0      0.0          self._compute_client = None
-   176         2          2.0      1.0      0.0          self._access_key_result = None
-   177         2          3.0      1.5      0.0          self._block_blob_service = None
-   178         2          2.0      1.0      0.0          self._table_service = None
-   179         2          2.0      1.0      0.0          self._storage_account = None
-   180                                           
-   181         2         22.0     11.0      0.0          log.debug("azure subscription : %s", self.subscription_id)
-
-Total time: 0 s
-File: /Users/alex/Desktop/work/cb-profiled/cloudbridge/cloudbridge/cloud/providers/azure/azure_client.py
-Function: access_key_result at line 183
-
-Line #      Hits         Time  Per Hit   % Time  Line Contents
-==============================================================
-   183                                               @property
-   184                                               @tenacity.retry(stop=tenacity.stop_after_attempt(5), reraise=True)
-   185                                               @profile
-   186                                               def access_key_result(self):
-   187                                                   if not self._access_key_result:
-   188                                                       storage_account = self.storage_account
-   189                                           
-   190                                                       if self.get_storage_account(storage_account).\
-   191                                                               provisioning_state.value != 'Succeeded':
-   192                                                           log.debug(
-   193                                                               "Storage account %s is not in Succeeded state yet. ",
-   194                                                               storage_account)
-   195                                                           raise WaitStateException(
-   196                                                               "Waited too long for storage account: {0} to "
-   197                                                               "become ready.".format(
-   198                                                                   storage_account,
-   199                                                                   self.get_storage_account(storage_account).
-   200                                                                   provisioning_state))
-   201                                           
-   202                                                       self._access_key_result = self.storage_client.storage_accounts. \
-   203                                                           list_keys(self.resource_group, storage_account)
-   204                                                   return self._access_key_result
-
-Total time: 0 s
-File: /Users/alex/Desktop/work/cb-profiled/cloudbridge/cloudbridge/cloud/providers/azure/azure_client.py
-Function: resource_group at line 206
-
-Line #      Hits         Time  Per Hit   % Time  Line Contents
-==============================================================
-   206                                               @property
-   207                                               @profile
-   208                                               def resource_group(self):
-   209                                                   return self._config.get('azure_resource_group')
-
-Total time: 0 s
-File: /Users/alex/Desktop/work/cb-profiled/cloudbridge/cloudbridge/cloud/providers/azure/azure_client.py
-Function: storage_account at line 211
-
-Line #      Hits         Time  Per Hit   % Time  Line Contents
-==============================================================
-   211                                               @property
-   212                                               @profile
-   213                                               def storage_account(self):
-   214                                                   return self._config.get('azure_storage_account')
-
-Total time: 6e-05 s
-File: /Users/alex/Desktop/work/cb-profiled/cloudbridge/cloudbridge/cloud/providers/azure/azure_client.py
-Function: region_name at line 216
-
-Line #      Hits         Time  Per Hit   % Time  Line Contents
-==============================================================
-   216                                               @property
-   217                                               @profile
-   218                                               def region_name(self):
-   219        48         60.0      1.2    100.0          return self._config.get('azure_region_name')
-
-Total time: 0 s
-File: /Users/alex/Desktop/work/cb-profiled/cloudbridge/cloudbridge/cloud/providers/azure/azure_client.py
-Function: public_key_storage_table_name at line 221
-
-Line #      Hits         Time  Per Hit   % Time  Line Contents
-==============================================================
-   221                                               @property
-   222                                               @profile
-   223                                               def public_key_storage_table_name(self):
-   224                                                   return self._config.get('azure_public_key_storage_table_name')
-
-Total time: 0 s
-File: /Users/alex/Desktop/work/cb-profiled/cloudbridge/cloudbridge/cloud/providers/azure/azure_client.py
-Function: storage_client at line 226
-
-Line #      Hits         Time  Per Hit   % Time  Line Contents
-==============================================================
-   226                                               @property
-   227                                               @profile
-   228                                               def storage_client(self):
-   229                                                   if not self._storage_client:
-   230                                                       self._storage_client = \
-   231                                                           StorageManagementClient(self._credentials,
-   232                                                                                   self.subscription_id)
-   233                                                   return self._storage_client
-
-Total time: 0 s
-File: /Users/alex/Desktop/work/cb-profiled/cloudbridge/cloudbridge/cloud/providers/azure/azure_client.py
-Function: subscription_client at line 235
-
-Line #      Hits         Time  Per Hit   % Time  Line Contents
-==============================================================
-   235                                               @property
-   236                                               @profile
-   237                                               def subscription_client(self):
-   238                                                   if not self._subscription_client:
-   239                                                       self._subscription_client = SubscriptionClient(self._credentials)
-   240                                                   return self._subscription_client
-
-Total time: 0.03009 s
-File: /Users/alex/Desktop/work/cb-profiled/cloudbridge/cloudbridge/cloud/providers/azure/azure_client.py
-Function: resource_client at line 242
-
-Line #      Hits         Time  Per Hit   % Time  Line Contents
-==============================================================
-   242                                               @property
-   243                                               @profile
-   244                                               def resource_client(self):
-   245         2          1.0      0.5      0.0          if not self._resource_client:
-   246                                                       self._resource_client = \
-   247         2          5.0      2.5      0.0                  ResourceManagementClient(self._credentials,
-   248         2      30077.0  15038.5    100.0                                           self.subscription_id)
-   249         2          7.0      3.5      0.0          return self._resource_client
-
-Total time: 0.015064 s
-File: /Users/alex/Desktop/work/cb-profiled/cloudbridge/cloudbridge/cloud/providers/azure/azure_client.py
-Function: compute_client at line 251
-
-Line #      Hits         Time  Per Hit   % Time  Line Contents
-==============================================================
-   251                                               @property
-   252                                               @profile
-   253                                               def compute_client(self):
-   254        48         44.0      0.9      0.3          if not self._compute_client:
-   255                                                       self._compute_client = \
-   256         2          2.0      1.0      0.0                  ComputeManagementClient(self._credentials,
-   257         2      14977.0   7488.5     99.4                                          self.subscription_id)
-   258        48         41.0      0.9      0.3          return self._compute_client
-
-Total time: 0 s
-File: /Users/alex/Desktop/work/cb-profiled/cloudbridge/cloudbridge/cloud/providers/azure/azure_client.py
-Function: network_management_client at line 260
-
-Line #      Hits         Time  Per Hit   % Time  Line Contents
-==============================================================
-   260                                               @property
-   261                                               @profile
-   262                                               def network_management_client(self):
-   263                                                   if not self._network_management_client:
-   264                                                       self._network_management_client = NetworkManagementClient(
-   265                                                           self._credentials, self.subscription_id)
-   266                                                   return self._network_management_client
-
-Total time: 0 s
-File: /Users/alex/Desktop/work/cb-profiled/cloudbridge/cloudbridge/cloud/providers/azure/azure_client.py
-Function: blob_service at line 268
-
-Line #      Hits         Time  Per Hit   % Time  Line Contents
-==============================================================
-   268                                               @property
-   269                                               @profile
-   270                                               def blob_service(self):
-   271                                                   self._get_or_create_storage_account()
-   272                                                   if not self._block_blob_service:
-   273                                                       if self._access_token:
-   274                                                           token_credential = TokenCredential(self._access_token)
-   275                                                           self._block_blob_service = BlockBlobService(
-   276                                                               account_name=self.storage_account,
-   277                                                               token_credential=token_credential)
-   278                                                       else:
-   279                                                           self._block_blob_service = BlockBlobService(
-   280                                                               account_name=self.storage_account,
-   281                                                               account_key=self.access_key_result.keys[0].value)
-   282                                                   return self._block_blob_service
-
-Total time: 0 s
-File: /Users/alex/Desktop/work/cb-profiled/cloudbridge/cloudbridge/cloud/providers/azure/azure_client.py
-Function: table_service at line 284
-
-Line #      Hits         Time  Per Hit   % Time  Line Contents
-==============================================================
-   284                                               @property
-   285                                               @profile
-   286                                               def table_service(self):
-   287                                                   self._get_or_create_storage_account()
-   288                                                   if not self._table_service:
-   289                                                       self._table_service = TableService(
-   290                                                           self.storage_account,
-   291                                                           self.access_key_result.keys[0].value)
-   292                                                   if not self._table_service. \
-   293                                                           exists(table_name=self.public_key_storage_table_name):
-   294                                                       self._table_service.create_table(
-   295                                                           self.public_key_storage_table_name)
-   296                                                   return self._table_service
-
-Total time: 1.61388 s
-File: /Users/alex/Desktop/work/cb-profiled/cloudbridge/cloudbridge/cloud/providers/azure/azure_client.py
-Function: get_resource_group at line 298
-
-Line #      Hits         Time  Per Hit   % Time  Line Contents
-==============================================================
-   298                                               @profile
-   299                                               def get_resource_group(self, name):
-   300         2    1613879.0 806939.5    100.0          return self.resource_client.resource_groups.get(name)
-
-Total time: 0 s
-File: /Users/alex/Desktop/work/cb-profiled/cloudbridge/cloudbridge/cloud/providers/azure/azure_client.py
-Function: create_resource_group at line 302
-
-Line #      Hits         Time  Per Hit   % Time  Line Contents
-==============================================================
-   302                                               @profile
-   303                                               def create_resource_group(self, name, parameters):
-   304                                                   return self.resource_client.resource_groups. \
-   305                                                       create_or_update(name, parameters)
-
-Total time: 0 s
-File: /Users/alex/Desktop/work/cb-profiled/cloudbridge/cloudbridge/cloud/providers/azure/azure_client.py
-Function: get_storage_account at line 307
-
-Line #      Hits         Time  Per Hit   % Time  Line Contents
-==============================================================
-   307                                               @profile
-   308                                               def get_storage_account(self, storage_account):
-   309                                                   return self.storage_client.storage_accounts. \
-   310                                                       get_properties(self.resource_group, storage_account)
-
-Total time: 0 s
-File: /Users/alex/Desktop/work/cb-profiled/cloudbridge/cloudbridge/cloud/providers/azure/azure_client.py
-Function: create_storage_account at line 312
-
-Line #      Hits         Time  Per Hit   % Time  Line Contents
-==============================================================
-   312                                               @profile
-   313                                               def create_storage_account(self, name, params):
-   314                                                   return self.storage_client.storage_accounts. \
-   315                                                       create(self.resource_group, name.lower(), params).result()
-
-Total time: 0 s
-File: /Users/alex/Desktop/work/cb-profiled/cloudbridge/cloudbridge/cloud/providers/azure/azure_client.py
-Function: _get_or_create_storage_account at line 319
-
-Line #      Hits         Time  Per Hit   % Time  Line Contents
-==============================================================
-   319                                               @tenacity.retry(stop=tenacity.stop_after_attempt(2),
-   320                                                               retry=tenacity.retry_if_exception_type(CloudError),
-   321                                                               reraise=True)
-   322                                               @profile
-   323                                               def _get_or_create_storage_account(self):
-   324                                                   if self._storage_account:
-   325                                                       return self._storage_account
-   326                                                   else:
-   327                                                       try:
-   328                                                           self._storage_account = \
-   329                                                               self.get_storage_account(self.storage_account)
-   330                                                       except CloudError as cloud_error:
-   331                                                           if cloud_error.error.error == "ResourceNotFound":
-   332                                                               storage_account_params = {
-   333                                                                   'sku': {
-   334                                                                       'name': 'Standard_LRS'
-   335                                                                   },
-   336                                                                   'kind': 'storage',
-   337                                                                   'location': self.region_name,
-   338                                                               }
-   339                                                               try:
-   340                                                                   self._storage_account = \
-   341                                                                       self.create_storage_account(self.storage_account,
-   342                                                                                                   storage_account_params)
-   343                                                               except CloudError as cloud_error2:  # pragma: no cover
-   344                                                                   if cloud_error2.error.error == "AuthorizationFailed":
-   345                                                                       mess = 'The following error was returned by ' \
-   346                                                                              'Azure:\n%s\n\nThis is likely because the' \
-   347                                                                              ' Role associated with the provided ' \
-   348                                                                              'credentials does not allow for Storage ' \
-   349                                                                              'Account creation.\nA Storage Account is ' \
-   350                                                                              'necessary in order to perform the ' \
-   351                                                                              'desired operation. You must either ' \
-   352                                                                              'provide an existing Storage Account name' \
-   353                                                                              ' as part of the configuration, or ' \
-   354                                                                              'elevate the associated Role.\nFor more ' \
-   355                                                                              'information on roles, see: https://docs.' \
-   356                                                                              'microsoft.com/en-us/azure/role-based-' \
-   357                                                                              'access-control/overview\n' % cloud_error2
-   358                                                                       raise ProviderConnectionException(mess)
-   359                                           
-   360                                                                   elif cloud_error2.error.error == \
-   361                                                                           "StorageAccountAlreadyTaken":
-   362                                                                       mess = 'The following error was ' \
-   363                                                                              'returned by Azure:\n%s\n\n' \
-   364                                                                              'Note that Storage Account names must be ' \
-   365                                                                              'unique across Azure (not just in your ' \
-   366                                                                              'subscription).\nFor more information ' \
-   367                                                                              'see https://docs.microsoft.com/en-us/' \
-   368                                                                              'azure/azure-resource-manager/resource-' \
-   369                                                                              'manager-storage-account-name-errors\n' \
-   370                                                                              % cloud_error2
-   371                                                                       raise InvalidLabelException(mess)
-   372                                                                   else:
-   373                                                                       raise cloud_error2
-   374                                                           else:
-   375                                                               raise cloud_error
-
-Total time: 0 s
-File: /Users/alex/Desktop/work/cb-profiled/cloudbridge/cloudbridge/cloud/providers/azure/azure_client.py
-Function: list_locations at line 377
-
-Line #      Hits         Time  Per Hit   % Time  Line Contents
-==============================================================
-   377                                               @profile
-   378                                               def list_locations(self):
-   379                                                   return self.subscription_client.subscriptions. \
-   380                                                       list_locations(self.subscription_id)
-
-Total time: 0 s
-File: /Users/alex/Desktop/work/cb-profiled/cloudbridge/cloudbridge/cloud/providers/azure/azure_client.py
-Function: list_vm_firewall at line 382
-
-Line #      Hits         Time  Per Hit   % Time  Line Contents
-==============================================================
-   382                                               @profile
-   383                                               def list_vm_firewall(self):
-   384                                                   return self.network_management_client.network_security_groups. \
-   385                                                       list(self.resource_group)
-
-Total time: 0 s
-File: /Users/alex/Desktop/work/cb-profiled/cloudbridge/cloudbridge/cloud/providers/azure/azure_client.py
-Function: create_vm_firewall at line 387
-
-Line #      Hits         Time  Per Hit   % Time  Line Contents
-==============================================================
-   387                                               @profile
-   388                                               def create_vm_firewall(self, name, parameters):
-   389                                                   return self.network_management_client.network_security_groups. \
-   390                                                       create_or_update(self.resource_group, name,
-   391                                                                        parameters).result()
-
-Total time: 0 s
-File: /Users/alex/Desktop/work/cb-profiled/cloudbridge/cloudbridge/cloud/providers/azure/azure_client.py
-Function: update_vm_firewall_tags at line 393
-
-Line #      Hits         Time  Per Hit   % Time  Line Contents
-==============================================================
-   393                                               @profile
-   394                                               def update_vm_firewall_tags(self, fw_id, tags):
-   395                                                   url_params = azure_helpers.parse_url(VM_FIREWALL_RESOURCE_ID,
-   396                                                                                        fw_id)
-   397                                                   name = url_params.get(VM_FIREWALL_NAME)
-   398                                                   return self.network_management_client.network_security_groups. \
-   399                                                       create_or_update(self.resource_group, name,
-   400                                                                        {'tags': tags,
-   401                                                                         'location': self.region_name}).result()
-
-Total time: 0 s
-File: /Users/alex/Desktop/work/cb-profiled/cloudbridge/cloudbridge/cloud/providers/azure/azure_client.py
-Function: get_vm_firewall at line 403
-
-Line #      Hits         Time  Per Hit   % Time  Line Contents
-==============================================================
-   403                                               @profile
-   404                                               def get_vm_firewall(self, fw_id):
-   405                                                   url_params = azure_helpers.parse_url(VM_FIREWALL_RESOURCE_ID,
-   406                                                                                        fw_id)
-   407                                                   fw_name = url_params.get(VM_FIREWALL_NAME)
-   408                                                   return self.network_management_client.network_security_groups. \
-   409                                                       get(self.resource_group, fw_name)
-
-Total time: 0 s
-File: /Users/alex/Desktop/work/cb-profiled/cloudbridge/cloudbridge/cloud/providers/azure/azure_client.py
-Function: delete_vm_firewall at line 411
-
-Line #      Hits         Time  Per Hit   % Time  Line Contents
-==============================================================
-   411                                               @profile
-   412                                               def delete_vm_firewall(self, fw_id):
-   413                                                   url_params = azure_helpers.parse_url(VM_FIREWALL_RESOURCE_ID,
-   414                                                                                        fw_id)
-   415                                                   name = url_params.get(VM_FIREWALL_NAME)
-   416                                                   self.network_management_client \
-   417                                                       .network_security_groups.delete(self.resource_group, name).wait()
-
-Total time: 0 s
-File: /Users/alex/Desktop/work/cb-profiled/cloudbridge/cloudbridge/cloud/providers/azure/azure_client.py
-Function: create_vm_firewall_rule at line 419
-
-Line #      Hits         Time  Per Hit   % Time  Line Contents
-==============================================================
-   419                                               @profile
-   420                                               def create_vm_firewall_rule(self, fw_id,
-   421                                                                           rule_name, parameters):
-   422                                                   url_params = azure_helpers.parse_url(VM_FIREWALL_RESOURCE_ID,
-   423                                                                                        fw_id)
-   424                                                   vm_firewall_name = url_params.get(VM_FIREWALL_NAME)
-   425                                                   return self.network_management_client.security_rules. \
-   426                                                       create_or_update(self.resource_group, vm_firewall_name,
-   427                                                                        rule_name, parameters).result()
-
-Total time: 0 s
-File: /Users/alex/Desktop/work/cb-profiled/cloudbridge/cloudbridge/cloud/providers/azure/azure_client.py
-Function: delete_vm_firewall_rule at line 429
-
-Line #      Hits         Time  Per Hit   % Time  Line Contents
-==============================================================
-   429                                               @profile
-   430                                               def delete_vm_firewall_rule(self, fw_rule_id, vm_firewall):
-   431                                                   url_params = azure_helpers.parse_url(VM_FIREWALL_RULE_RESOURCE_ID,
-   432                                                                                        fw_rule_id)
-   433                                                   name = url_params.get(VM_FIREWALL_RULE_NAME)
-   434                                                   return self.network_management_client.security_rules. \
-   435                                                       delete(self.resource_group, vm_firewall, name).result()
-
-Total time: 0 s
-File: /Users/alex/Desktop/work/cb-profiled/cloudbridge/cloudbridge/cloud/providers/azure/azure_client.py
-Function: list_containers at line 437
-
-Line #      Hits         Time  Per Hit   % Time  Line Contents
-==============================================================
-   437                                               @profile
-   438                                               def list_containers(self, prefix=None, limit=None, marker=None):
-   439                                                   results = self.blob_service.list_containers(prefix=prefix,
-   440                                                                                               num_results=limit,
-   441                                                                                               marker=marker)
-   442                                                   return (results.items, results.next_marker)
-
-Total time: 0 s
-File: /Users/alex/Desktop/work/cb-profiled/cloudbridge/cloudbridge/cloud/providers/azure/azure_client.py
-Function: create_container at line 444
-
-Line #      Hits         Time  Per Hit   % Time  Line Contents
-==============================================================
-   444                                               @profile
-   445                                               def create_container(self, container_name):
-   446                                                   try:
-   447                                                       self.blob_service.create_container(container_name,
-   448                                                                                          fail_on_exist=True)
-   449                                                   except AzureConflictHttpError as cloud_error:
-   450                                                       if cloud_error.error_code == "ContainerAlreadyExists":
-   451                                                           msg = "The given Bucket name '%s' already exists. Please " \
-   452                                                                 "use the `get` or `find` method to get a reference to " \
-   453                                                                 "an existing Bucket, or specify a new Bucket name to " \
-   454                                                                 "create.\nNote that in Azure, Buckets are contained " \
-   455                                                                 "in Storage Accounts." % container_name
-   456                                                           raise DuplicateResourceException(msg)
-   457                                           
-   458                                                   return self.blob_service.get_container_properties(container_name)
-
-Total time: 0 s
-File: /Users/alex/Desktop/work/cb-profiled/cloudbridge/cloudbridge/cloud/providers/azure/azure_client.py
-Function: get_container at line 460
-
-Line #      Hits         Time  Per Hit   % Time  Line Contents
-==============================================================
-   460                                               @profile
-   461                                               def get_container(self, container_name):
-   462                                                   return self.blob_service.get_container_properties(container_name)
-
-Total time: 0 s
-File: /Users/alex/Desktop/work/cb-profiled/cloudbridge/cloudbridge/cloud/providers/azure/azure_client.py
-Function: delete_container at line 464
-
-Line #      Hits         Time  Per Hit   % Time  Line Contents
-==============================================================
-   464                                               @profile
-   465                                               def delete_container(self, container_name):
-   466                                                   self.blob_service.delete_container(container_name)
-
-Total time: 0 s
-File: /Users/alex/Desktop/work/cb-profiled/cloudbridge/cloudbridge/cloud/providers/azure/azure_client.py
-Function: list_blobs at line 468
-
-Line #      Hits         Time  Per Hit   % Time  Line Contents
-==============================================================
-   468                                               @profile
-   469                                               def list_blobs(self, container_name, prefix=None):
-   470                                                   return self.blob_service.list_blobs(container_name, prefix=prefix)
-
-Total time: 0 s
-File: /Users/alex/Desktop/work/cb-profiled/cloudbridge/cloudbridge/cloud/providers/azure/azure_client.py
-Function: get_blob at line 472
-
-Line #      Hits         Time  Per Hit   % Time  Line Contents
-==============================================================
-   472                                               @profile
-   473                                               def get_blob(self, container_name, blob_name):
-   474                                                   return self.blob_service.get_blob_properties(container_name, blob_name)
-
-Total time: 0 s
-File: /Users/alex/Desktop/work/cb-profiled/cloudbridge/cloudbridge/cloud/providers/azure/azure_client.py
-Function: create_blob_from_text at line 476
-
-Line #      Hits         Time  Per Hit   % Time  Line Contents
-==============================================================
-   476                                               @profile
-   477                                               def create_blob_from_text(self, container_name, blob_name, text):
-   478                                                   self.blob_service.create_blob_from_text(container_name,
-   479                                                                                           blob_name, text)
-
-Total time: 0 s
-File: /Users/alex/Desktop/work/cb-profiled/cloudbridge/cloudbridge/cloud/providers/azure/azure_client.py
-Function: create_blob_from_file at line 481
-
-Line #      Hits         Time  Per Hit   % Time  Line Contents
-==============================================================
-   481                                               @profile
-   482                                               def create_blob_from_file(self, container_name, blob_name, file_path):
-   483                                                   self.blob_service.create_blob_from_path(container_name,
-   484                                                                                           blob_name, file_path)
-
-Total time: 0 s
-File: /Users/alex/Desktop/work/cb-profiled/cloudbridge/cloudbridge/cloud/providers/azure/azure_client.py
-Function: delete_blob at line 486
-
-Line #      Hits         Time  Per Hit   % Time  Line Contents
-==============================================================
-   486                                               @profile
-   487                                               def delete_blob(self, container_name, blob_name):
-   488                                                   self.blob_service.delete_blob(container_name, blob_name)
-
-Total time: 0 s
-File: /Users/alex/Desktop/work/cb-profiled/cloudbridge/cloudbridge/cloud/providers/azure/azure_client.py
-Function: get_blob_url at line 490
-
-Line #      Hits         Time  Per Hit   % Time  Line Contents
-==============================================================
-   490                                               @profile
-   491                                               def get_blob_url(self, container_name, blob_name, expiry_time):
-   492                                                   expiry_date = datetime.datetime.utcnow() + datetime.timedelta(
-   493                                                       seconds=expiry_time)
-   494                                                   sas = self.blob_service.generate_blob_shared_access_signature(
-   495                                                       container_name, blob_name, permission=BlobPermissions.READ,
-   496                                                       expiry=expiry_date)
-   497                                                   return self.blob_service.make_blob_url(container_name, blob_name,
-   498                                                                                          sas_token=sas)
-
-Total time: 0 s
-File: /Users/alex/Desktop/work/cb-profiled/cloudbridge/cloudbridge/cloud/providers/azure/azure_client.py
-Function: get_blob_content at line 500
-
-Line #      Hits         Time  Per Hit   % Time  Line Contents
-==============================================================
-   500                                               @profile
-   501                                               def get_blob_content(self, container_name, blob_name):
-   502                                                   out_stream = BytesIO()
-   503                                                   self.blob_service.get_blob_to_stream(container_name,
-   504                                                                                        blob_name, out_stream)
-   505                                                   return out_stream
-
-Total time: 0 s
-File: /Users/alex/Desktop/work/cb-profiled/cloudbridge/cloudbridge/cloud/providers/azure/azure_client.py
-Function: create_empty_disk at line 507
-
-Line #      Hits         Time  Per Hit   % Time  Line Contents
-==============================================================
-   507                                               @profile
-   508                                               def create_empty_disk(self, disk_name, params):
-   509                                                   return self.compute_client.disks.create_or_update(
-   510                                                       self.resource_group,
-   511                                                       disk_name,
-   512                                                       params
-   513                                                   ).result()
-
-Total time: 0 s
-File: /Users/alex/Desktop/work/cb-profiled/cloudbridge/cloudbridge/cloud/providers/azure/azure_client.py
-Function: create_snapshot_disk at line 515
-
-Line #      Hits         Time  Per Hit   % Time  Line Contents
-==============================================================
-   515                                               @profile
-   516                                               def create_snapshot_disk(self, disk_name, params):
-   517                                                   return self.compute_client.disks.create_or_update(
-   518                                                       self.resource_group,
-   519                                                       disk_name,
-   520                                                       params
-   521                                                   ).result()
-
-Total time: 0 s
-File: /Users/alex/Desktop/work/cb-profiled/cloudbridge/cloudbridge/cloud/providers/azure/azure_client.py
-Function: get_disk at line 523
-
-Line #      Hits         Time  Per Hit   % Time  Line Contents
-==============================================================
-   523                                               @profile
-   524                                               def get_disk(self, disk_id):
-   525                                                   url_params = azure_helpers.parse_url(VOLUME_RESOURCE_ID,
-   526                                                                                        disk_id)
-   527                                                   disk_name = url_params.get(VOLUME_NAME)
-   528                                                   return self.compute_client.disks.get(self.resource_group, disk_name)
-
-Total time: 0 s
-File: /Users/alex/Desktop/work/cb-profiled/cloudbridge/cloudbridge/cloud/providers/azure/azure_client.py
-Function: list_disks at line 530
-
-Line #      Hits         Time  Per Hit   % Time  Line Contents
-==============================================================
-   530                                               @profile
-   531                                               def list_disks(self):
-   532                                                   return self.compute_client.disks. \
-   533                                                       list_by_resource_group(self.resource_group)
-
-Total time: 0 s
-File: /Users/alex/Desktop/work/cb-profiled/cloudbridge/cloudbridge/cloud/providers/azure/azure_client.py
-Function: delete_disk at line 535
-
-Line #      Hits         Time  Per Hit   % Time  Line Contents
-==============================================================
-   535                                               @profile
-   536                                               def delete_disk(self, disk_id):
-   537                                                   url_params = azure_helpers.parse_url(VOLUME_RESOURCE_ID,
-   538                                                                                        disk_id)
-   539                                                   disk_name = url_params.get(VOLUME_NAME)
-   540                                                   self.compute_client.disks.delete(self.resource_group, disk_name).wait()
-
-Total time: 0 s
-File: /Users/alex/Desktop/work/cb-profiled/cloudbridge/cloudbridge/cloud/providers/azure/azure_client.py
-Function: update_disk_tags at line 542
-
-Line #      Hits         Time  Per Hit   % Time  Line Contents
-==============================================================
-   542                                               @profile
-   543                                               def update_disk_tags(self, disk_id, tags):
-   544                                                   url_params = azure_helpers.parse_url(VOLUME_RESOURCE_ID,
-   545                                                                                        disk_id)
-   546                                                   disk_name = url_params.get(VOLUME_NAME)
-   547                                                   return self.compute_client.disks.update(
-   548                                                       self.resource_group,
-   549                                                       disk_name,
-   550                                                       {'tags': tags},
-   551                                                       raw=True
-   552                                                   )
-
-Total time: 0 s
-File: /Users/alex/Desktop/work/cb-profiled/cloudbridge/cloudbridge/cloud/providers/azure/azure_client.py
-Function: list_snapshots at line 554
-
-Line #      Hits         Time  Per Hit   % Time  Line Contents
-==============================================================
-   554                                               @profile
-   555                                               def list_snapshots(self):
-   556                                                   return self.compute_client.snapshots. \
-   557                                                       list_by_resource_group(self.resource_group)
-
-Total time: 0 s
-File: /Users/alex/Desktop/work/cb-profiled/cloudbridge/cloudbridge/cloud/providers/azure/azure_client.py
-Function: get_snapshot at line 559
-
-Line #      Hits         Time  Per Hit   % Time  Line Contents
-==============================================================
-   559                                               @profile
-   560                                               def get_snapshot(self, snapshot_id):
-   561                                                   url_params = azure_helpers.parse_url(SNAPSHOT_RESOURCE_ID,
-   562                                                                                        snapshot_id)
-   563                                                   snapshot_name = url_params.get(SNAPSHOT_NAME)
-   564                                                   return self.compute_client.snapshots.get(self.resource_group,
-   565                                                                                            snapshot_name)
-
-Total time: 0 s
-File: /Users/alex/Desktop/work/cb-profiled/cloudbridge/cloudbridge/cloud/providers/azure/azure_client.py
-Function: create_snapshot at line 567
-
-Line #      Hits         Time  Per Hit   % Time  Line Contents
-==============================================================
-   567                                               @profile
-   568                                               def create_snapshot(self, snapshot_name, params):
-   569                                                   return self.compute_client.snapshots.create_or_update(
-   570                                                       self.resource_group,
-   571                                                       snapshot_name,
-   572                                                       params
-   573                                                   ).result()
-
-Total time: 0 s
-File: /Users/alex/Desktop/work/cb-profiled/cloudbridge/cloudbridge/cloud/providers/azure/azure_client.py
-Function: delete_snapshot at line 575
-
-Line #      Hits         Time  Per Hit   % Time  Line Contents
-==============================================================
-   575                                               @profile
-   576                                               def delete_snapshot(self, snapshot_id):
-   577                                                   url_params = azure_helpers.parse_url(SNAPSHOT_RESOURCE_ID,
-   578                                                                                        snapshot_id)
-   579                                                   snapshot_name = url_params.get(SNAPSHOT_NAME)
-   580                                                   self.compute_client.snapshots.delete(self.resource_group,
-   581                                                                                        snapshot_name).wait()
-
-Total time: 0 s
-File: /Users/alex/Desktop/work/cb-profiled/cloudbridge/cloudbridge/cloud/providers/azure/azure_client.py
-Function: update_snapshot_tags at line 583
-
-Line #      Hits         Time  Per Hit   % Time  Line Contents
-==============================================================
-   583                                               @profile
-   584                                               def update_snapshot_tags(self, snapshot_id, tags):
-   585                                                   url_params = azure_helpers.parse_url(SNAPSHOT_RESOURCE_ID,
-   586                                                                                        snapshot_id)
-   587                                                   snapshot_name = url_params.get(SNAPSHOT_NAME)
-   588                                                   return self.compute_client.snapshots.update(
-   589                                                       self.resource_group,
-   590                                                       snapshot_name,
-   591                                                       {'tags': tags},
-   592                                                       raw=True
-   593                                                   )
-
-Total time: 0 s
-File: /Users/alex/Desktop/work/cb-profiled/cloudbridge/cloudbridge/cloud/providers/azure/azure_client.py
-Function: is_gallery_image at line 595
-
-Line #      Hits         Time  Per Hit   % Time  Line Contents
-==============================================================
-   595                                               @profile
-   596                                               def is_gallery_image(self, image_id):
-   597                                                   url_params = azure_helpers.parse_url(IMAGE_RESOURCE_ID,
-   598                                                                                        image_id)
-   599                                                   # If it is a gallery image, it will always have an offer
-   600                                                   return 'offer' in url_params
-
-Total time: 0 s
-File: /Users/alex/Desktop/work/cb-profiled/cloudbridge/cloudbridge/cloud/providers/azure/azure_client.py
-Function: create_image at line 602
-
-Line #      Hits         Time  Per Hit   % Time  Line Contents
-==============================================================
-   602                                               @profile
-   603                                               def create_image(self, name, params):
-   604                                                   return self.compute_client.images. \
-   605                                                       create_or_update(self.resource_group, name,
-   606                                                                        params).result()
-
-Total time: 0 s
-File: /Users/alex/Desktop/work/cb-profiled/cloudbridge/cloudbridge/cloud/providers/azure/azure_client.py
-Function: delete_image at line 608
-
-Line #      Hits         Time  Per Hit   % Time  Line Contents
-==============================================================
-   608                                               @profile
-   609                                               def delete_image(self, image_id):
-   610                                                   url_params = azure_helpers.parse_url(IMAGE_RESOURCE_ID,
-   611                                                                                        image_id)
-   612                                                   if not self.is_gallery_image(image_id):
-   613                                                       name = url_params.get(IMAGE_NAME)
-   614                                                       self.compute_client.images.delete(self.resource_group, name).wait()
-
-Total time: 0 s
-File: /Users/alex/Desktop/work/cb-profiled/cloudbridge/cloudbridge/cloud/providers/azure/azure_client.py
-Function: list_images at line 616
-
-Line #      Hits         Time  Per Hit   % Time  Line Contents
-==============================================================
-   616                                               @profile
-   617                                               def list_images(self):
-   618                                                   azure_images = list(self.compute_client.images.
-   619                                                                       list_by_resource_group(self.resource_group))
-   620                                                   return azure_images
-
-Total time: 0 s
-File: /Users/alex/Desktop/work/cb-profiled/cloudbridge/cloudbridge/cloud/providers/azure/azure_client.py
-Function: list_gallery_refs at line 622
-
-Line #      Hits         Time  Per Hit   % Time  Line Contents
-==============================================================
-   622                                               @profile
-   623                                               def list_gallery_refs(self):
-   624                                                   return gallery_image_references
-
-Total time: 0 s
-File: /Users/alex/Desktop/work/cb-profiled/cloudbridge/cloudbridge/cloud/providers/azure/azure_client.py
-Function: get_image at line 626
-
-Line #      Hits         Time  Per Hit   % Time  Line Contents
-==============================================================
-   626                                               @profile
-   627                                               def get_image(self, image_id):
-   628                                                   url_params = azure_helpers.parse_url(IMAGE_RESOURCE_ID,
-   629                                                                                        image_id)
-   630                                                   if self.is_gallery_image(image_id):
-   631                                                       return GalleryImageReference(publisher=url_params['publisher'],
-   632                                                                                    offer=url_params['offer'],
-   633                                                                                    sku=url_params['sku'],
-   634                                                                                    version=url_params['version'])
-   635                                                   else:
-   636                                                       name = url_params.get(IMAGE_NAME)
-   637                                                       return self.compute_client.images.get(self.resource_group, name)
-
-Total time: 0 s
-File: /Users/alex/Desktop/work/cb-profiled/cloudbridge/cloudbridge/cloud/providers/azure/azure_client.py
-Function: update_image_tags at line 639
-
-Line #      Hits         Time  Per Hit   % Time  Line Contents
-==============================================================
-   639                                               @profile
-   640                                               def update_image_tags(self, image_id, tags):
-   641                                                   url_params = azure_helpers.parse_url(IMAGE_RESOURCE_ID,
-   642                                                                                        image_id)
-   643                                                   if self.is_gallery_image(image_id):
-   644                                                       return True
-   645                                                   else:
-   646                                                       name = url_params.get(IMAGE_NAME)
-   647                                                       return self.compute_client.images. \
-   648                                                           create_or_update(self.resource_group, name,
-   649                                                                            {
-   650                                                                                'tags': tags,
-   651                                                                                'location': self.region_name
-   652                                                                            }).result()
-
-Total time: 0.038587 s
-File: /Users/alex/Desktop/work/cb-profiled/cloudbridge/cloudbridge/cloud/providers/azure/azure_client.py
-Function: list_vm_types at line 654
-
-Line #      Hits         Time  Per Hit   % Time  Line Contents
-==============================================================
-   654                                               @profile
-   655                                               def list_vm_types(self):
-   656        48      36514.0    760.7     94.6          return self.compute_client.virtual_machine_sizes. \
-   657        48       2073.0     43.2      5.4              list(self.region_name)
-
-Total time: 0 s
-File: /Users/alex/Desktop/work/cb-profiled/cloudbridge/cloudbridge/cloud/providers/azure/azure_client.py
-Function: list_networks at line 659
-
-Line #      Hits         Time  Per Hit   % Time  Line Contents
-==============================================================
-   659                                               @profile
-   660                                               def list_networks(self):
-   661                                                   return self.network_management_client.virtual_networks.list(
-   662                                                       self.resource_group)
-
-Total time: 0 s
-File: /Users/alex/Desktop/work/cb-profiled/cloudbridge/cloudbridge/cloud/providers/azure/azure_client.py
-Function: get_network at line 664
-
-Line #      Hits         Time  Per Hit   % Time  Line Contents
-==============================================================
-   664                                               @profile
-   665                                               def get_network(self, network_id):
-   666                                                   url_params = azure_helpers.parse_url(NETWORK_RESOURCE_ID,
-   667                                                                                        network_id)
-   668                                                   network_name = url_params.get(NETWORK_NAME)
-   669                                                   return self.network_management_client.virtual_networks.get(
-   670                                                       self.resource_group, network_name)
-
-Total time: 0 s
-File: /Users/alex/Desktop/work/cb-profiled/cloudbridge/cloudbridge/cloud/providers/azure/azure_client.py
-Function: create_network at line 672
-
-Line #      Hits         Time  Per Hit   % Time  Line Contents
-==============================================================
-   672                                               @profile
-   673                                               def create_network(self, name, params):
-   674                                                   return self.network_management_client.virtual_networks. \
-   675                                                       create_or_update(self.resource_group,
-   676                                                                        name,
-   677                                                                        parameters=params).result()
-
-Total time: 0 s
-File: /Users/alex/Desktop/work/cb-profiled/cloudbridge/cloudbridge/cloud/providers/azure/azure_client.py
-Function: delete_network at line 679
-
-Line #      Hits         Time  Per Hit   % Time  Line Contents
-==============================================================
-   679                                               @profile
-   680                                               def delete_network(self, network_id):
-   681                                                   url_params = azure_helpers.parse_url(NETWORK_RESOURCE_ID, network_id)
-   682                                                   network_name = url_params.get(NETWORK_NAME)
-   683                                                   return self.network_management_client.virtual_networks. \
-   684                                                       delete(self.resource_group, network_name).wait()
-
-Total time: 0 s
-File: /Users/alex/Desktop/work/cb-profiled/cloudbridge/cloudbridge/cloud/providers/azure/azure_client.py
-Function: update_network_tags at line 686
-
-Line #      Hits         Time  Per Hit   % Time  Line Contents
-==============================================================
-   686                                               @profile
-   687                                               def update_network_tags(self, network_id, tags):
-   688                                                   url_params = azure_helpers.parse_url(NETWORK_RESOURCE_ID, network_id)
-   689                                                   network_name = url_params.get(NETWORK_NAME)
-   690                                                   return self.network_management_client.virtual_networks. \
-   691                                                       create_or_update(self.resource_group,
-   692                                                                        network_name, tags).result()
-
-Total time: 0 s
-File: /Users/alex/Desktop/work/cb-profiled/cloudbridge/cloudbridge/cloud/providers/azure/azure_client.py
-Function: get_network_id_for_subnet at line 694
-
-Line #      Hits         Time  Per Hit   % Time  Line Contents
-==============================================================
-   694                                               @profile
-   695                                               def get_network_id_for_subnet(self, subnet_id):
-   696                                                   url_params = azure_helpers.parse_url(SUBNET_RESOURCE_ID, subnet_id)
-   697                                                   network_id = NETWORK_RESOURCE_ID[0]
-   698                                                   for key, val in url_params.items():
-   699                                                       network_id = network_id.replace("{" + key + "}", val)
-   700                                                   return network_id
-
-Total time: 0 s
-File: /Users/alex/Desktop/work/cb-profiled/cloudbridge/cloudbridge/cloud/providers/azure/azure_client.py
-Function: list_subnets at line 702
-
-Line #      Hits         Time  Per Hit   % Time  Line Contents
-==============================================================
-   702                                               @profile
-   703                                               def list_subnets(self, network_id):
-   704                                                   url_params = azure_helpers.parse_url(NETWORK_RESOURCE_ID, network_id)
-   705                                                   network_name = url_params.get(NETWORK_NAME)
-   706                                                   return self.network_management_client.subnets. \
-   707                                                       list(self.resource_group, network_name)
-
-Total time: 0 s
-File: /Users/alex/Desktop/work/cb-profiled/cloudbridge/cloudbridge/cloud/providers/azure/azure_client.py
-Function: get_subnet at line 709
-
-Line #      Hits         Time  Per Hit   % Time  Line Contents
-==============================================================
-   709                                               @profile
-   710                                               def get_subnet(self, subnet_id):
-   711                                                   url_params = azure_helpers.parse_url(SUBNET_RESOURCE_ID,
-   712                                                                                        subnet_id)
-   713                                                   network_name = url_params.get(NETWORK_NAME)
-   714                                                   subnet_name = url_params.get(SUBNET_NAME)
-   715                                                   return self.network_management_client.subnets. \
-   716                                                       get(self.resource_group, network_name, subnet_name)
-
-Total time: 0 s
-File: /Users/alex/Desktop/work/cb-profiled/cloudbridge/cloudbridge/cloud/providers/azure/azure_client.py
-Function: create_subnet at line 718
-
-Line #      Hits         Time  Per Hit   % Time  Line Contents
-==============================================================
-   718                                               @profile
-   719                                               def create_subnet(self, network_id, subnet_name, params):
-   720                                                   url_params = azure_helpers.parse_url(NETWORK_RESOURCE_ID, network_id)
-   721                                                   network_name = url_params.get(NETWORK_NAME)
-   722                                                   result_create = self.network_management_client \
-   723                                                       .subnets.create_or_update(
-   724                                                           self.resource_group,
-   725                                                           network_name,
-   726                                                           subnet_name,
-   727                                                           params
-   728                                                       )
-   729                                                   subnet_info = result_create.result()
-   730                                           
-   731                                                   return subnet_info
-
-Total time: 0 s
-File: /Users/alex/Desktop/work/cb-profiled/cloudbridge/cloudbridge/cloud/providers/azure/azure_client.py
-Function: __if_subnet_in_use at line 733
-
-Line #      Hits         Time  Per Hit   % Time  Line Contents
-==============================================================
-   733                                               @profile
-   734                                               def __if_subnet_in_use(e):
-   735                                                   # return True if the CloudError exception is due to subnet being in use
-   736                                                   if isinstance(e, CloudError):
-   737                                                       if e.error.error == "InUseSubnetCannotBeDeleted":
-   738                                                           return True
-   739                                                   return False
-
-Total time: 0 s
-File: /Users/alex/Desktop/work/cb-profiled/cloudbridge/cloudbridge/cloud/providers/azure/azure_client.py
-Function: delete_subnet at line 741
-
-Line #      Hits         Time  Per Hit   % Time  Line Contents
-==============================================================
-   741                                               @tenacity.retry(stop=tenacity.stop_after_attempt(5),
-   742                                                               retry=tenacity.retry_if_exception(__if_subnet_in_use),
-   743                                                               wait=tenacity.wait_fixed(5),
-   744                                                               reraise=True)
-   745                                               @profile
-   746                                               def delete_subnet(self, subnet_id):
-   747                                                   url_params = azure_helpers.parse_url(SUBNET_RESOURCE_ID,
-   748                                                                                        subnet_id)
-   749                                                   network_name = url_params.get(NETWORK_NAME)
-   750                                                   subnet_name = url_params.get(SUBNET_NAME)
-   751                                           
-   752                                                   try:
-   753                                                       result_delete = self.network_management_client \
-   754                                                           .subnets.delete(
-   755                                                               self.resource_group,
-   756                                                               network_name,
-   757                                                               subnet_name
-   758                                                           )
-   759                                                       result_delete.wait()
-   760                                                   except CloudError as cloud_error:
-   761                                                       log.exception(cloud_error.message)
-   762                                                       raise cloud_error
-
-Total time: 0 s
-File: /Users/alex/Desktop/work/cb-profiled/cloudbridge/cloudbridge/cloud/providers/azure/azure_client.py
-Function: create_floating_ip at line 764
-
-Line #      Hits         Time  Per Hit   % Time  Line Contents
-==============================================================
-   764                                               @profile
-   765                                               def create_floating_ip(self, public_ip_name, public_ip_parameters):
-   766                                                   return self.network_management_client.public_ip_addresses. \
-   767                                                       create_or_update(self.resource_group,
-   768                                                                        public_ip_name,
-   769                                                                        public_ip_parameters).result()
-
-Total time: 0 s
-File: /Users/alex/Desktop/work/cb-profiled/cloudbridge/cloudbridge/cloud/providers/azure/azure_client.py
-Function: get_floating_ip at line 771
-
-Line #      Hits         Time  Per Hit   % Time  Line Contents
-==============================================================
-   771                                               @profile
-   772                                               def get_floating_ip(self, public_ip_id):
-   773                                                   url_params = azure_helpers.parse_url(PUBLIC_IP_RESOURCE_ID,
-   774                                                                                        public_ip_id)
-   775                                                   public_ip_name = url_params.get(PUBLIC_IP_NAME)
-   776                                                   return self.network_management_client. \
-   777                                                       public_ip_addresses.get(self.resource_group, public_ip_name)
-
-Total time: 0 s
-File: /Users/alex/Desktop/work/cb-profiled/cloudbridge/cloudbridge/cloud/providers/azure/azure_client.py
-Function: delete_floating_ip at line 779
-
-Line #      Hits         Time  Per Hit   % Time  Line Contents
-==============================================================
-   779                                               @profile
-   780                                               def delete_floating_ip(self, public_ip_id):
-   781                                                   url_params = azure_helpers.parse_url(PUBLIC_IP_RESOURCE_ID,
-   782                                                                                        public_ip_id)
-   783                                                   public_ip_name = url_params.get(PUBLIC_IP_NAME)
-   784                                                   self.network_management_client. \
-   785                                                       public_ip_addresses.delete(self.resource_group,
-   786                                                                                  public_ip_name).wait()
-
-Total time: 0 s
-File: /Users/alex/Desktop/work/cb-profiled/cloudbridge/cloudbridge/cloud/providers/azure/azure_client.py
-Function: update_fip_tags at line 788
-
-Line #      Hits         Time  Per Hit   % Time  Line Contents
-==============================================================
-   788                                               @profile
-   789                                               def update_fip_tags(self, fip_id, tags):
-   790                                                   url_params = azure_helpers.parse_url(PUBLIC_IP_RESOURCE_ID,
-   791                                                                                        fip_id)
-   792                                                   fip_name = url_params.get(PUBLIC_IP_NAME)
-   793                                                   self.network_management_client.public_ip_addresses. \
-   794                                                       create_or_update(self.resource_group,
-   795                                                                        fip_name, tags).result()
-
-Total time: 0 s
-File: /Users/alex/Desktop/work/cb-profiled/cloudbridge/cloudbridge/cloud/providers/azure/azure_client.py
-Function: list_floating_ips at line 797
-
-Line #      Hits         Time  Per Hit   % Time  Line Contents
-==============================================================
-   797                                               @profile
-   798                                               def list_floating_ips(self):
-   799                                                   return self.network_management_client.public_ip_addresses.list(
-   800                                                       self.resource_group)
-
-Total time: 0 s
-File: /Users/alex/Desktop/work/cb-profiled/cloudbridge/cloudbridge/cloud/providers/azure/azure_client.py
-Function: list_vm at line 802
-
-Line #      Hits         Time  Per Hit   % Time  Line Contents
-==============================================================
-   802                                               @profile
-   803                                               def list_vm(self):
-   804                                                   return self.compute_client.virtual_machines.list(
-   805                                                       self.resource_group
-   806                                                   )
-
-Total time: 0 s
-File: /Users/alex/Desktop/work/cb-profiled/cloudbridge/cloudbridge/cloud/providers/azure/azure_client.py
-Function: restart_vm at line 808
-
-Line #      Hits         Time  Per Hit   % Time  Line Contents
-==============================================================
-   808                                               @profile
-   809                                               def restart_vm(self, vm_id):
-   810                                                   url_params = azure_helpers.parse_url(VM_RESOURCE_ID,
-   811                                                                                        vm_id)
-   812                                                   vm_name = url_params.get(VM_NAME)
-   813                                                   return self.compute_client.virtual_machines.restart(
-   814                                                       self.resource_group, vm_name).wait()
-
-Total time: 0 s
-File: /Users/alex/Desktop/work/cb-profiled/cloudbridge/cloudbridge/cloud/providers/azure/azure_client.py
-Function: delete_vm at line 816
-
-Line #      Hits         Time  Per Hit   % Time  Line Contents
-==============================================================
-   816                                               @profile
-   817                                               def delete_vm(self, vm_id):
-   818                                                   url_params = azure_helpers.parse_url(VM_RESOURCE_ID,
-   819                                                                                        vm_id)
-   820                                                   vm_name = url_params.get(VM_NAME)
-   821                                                   return self.compute_client.virtual_machines.delete(
-   822                                                       self.resource_group, vm_name).wait()
-
-Total time: 0 s
-File: /Users/alex/Desktop/work/cb-profiled/cloudbridge/cloudbridge/cloud/providers/azure/azure_client.py
-Function: get_vm at line 824
-
-Line #      Hits         Time  Per Hit   % Time  Line Contents
-==============================================================
-   824                                               @profile
-   825                                               def get_vm(self, vm_id):
-   826                                                   url_params = azure_helpers.parse_url(VM_RESOURCE_ID,
-   827                                                                                        vm_id)
-   828                                                   vm_name = url_params.get(VM_NAME)
-   829                                                   return self.compute_client.virtual_machines.get(
-   830                                                       self.resource_group,
-   831                                                       vm_name,
-   832                                                       expand='instanceView'
-   833                                                   )
-
-Total time: 0 s
-File: /Users/alex/Desktop/work/cb-profiled/cloudbridge/cloudbridge/cloud/providers/azure/azure_client.py
-Function: create_vm at line 835
-
-Line #      Hits         Time  Per Hit   % Time  Line Contents
-==============================================================
-   835                                               @profile
-   836                                               def create_vm(self, vm_name, params):
-   837                                                   return self.compute_client.virtual_machines. \
-   838                                                       create_or_update(self.resource_group,
-   839                                                                        vm_name, params).result()
-
-Total time: 0 s
-File: /Users/alex/Desktop/work/cb-profiled/cloudbridge/cloudbridge/cloud/providers/azure/azure_client.py
-Function: update_vm at line 841
-
-Line #      Hits         Time  Per Hit   % Time  Line Contents
-==============================================================
-   841                                               @profile
-   842                                               def update_vm(self, vm_id, params):
-   843                                                   url_params = azure_helpers.parse_url(VM_RESOURCE_ID,
-   844                                                                                        vm_id)
-   845                                                   vm_name = url_params.get(VM_NAME)
-   846                                                   return self.compute_client.virtual_machines. \
-   847                                                       create_or_update(self.resource_group,
-   848                                                                        vm_name, params, raw=True)
-
-Total time: 0 s
-File: /Users/alex/Desktop/work/cb-profiled/cloudbridge/cloudbridge/cloud/providers/azure/azure_client.py
-Function: deallocate_vm at line 850
-
-Line #      Hits         Time  Per Hit   % Time  Line Contents
-==============================================================
-   850                                               @profile
-   851                                               def deallocate_vm(self, vm_id):
-   852                                                   url_params = azure_helpers.parse_url(VM_RESOURCE_ID,
-   853                                                                                        vm_id)
-   854                                                   vm_name = url_params.get(VM_NAME)
-   855                                                   self.compute_client. \
-   856                                                       virtual_machines.deallocate(self.resource_group,
-   857                                                                                   vm_name).wait()
-
-Total time: 0 s
-File: /Users/alex/Desktop/work/cb-profiled/cloudbridge/cloudbridge/cloud/providers/azure/azure_client.py
-Function: generalize_vm at line 859
-
-Line #      Hits         Time  Per Hit   % Time  Line Contents
-==============================================================
-   859                                               @profile
-   860                                               def generalize_vm(self, vm_id):
-   861                                                   url_params = azure_helpers.parse_url(VM_RESOURCE_ID,
-   862                                                                                        vm_id)
-   863                                                   vm_name = url_params.get(VM_NAME)
-   864                                                   self.compute_client.virtual_machines. \
-   865                                                       generalize(self.resource_group, vm_name)
-
-Total time: 0 s
-File: /Users/alex/Desktop/work/cb-profiled/cloudbridge/cloudbridge/cloud/providers/azure/azure_client.py
-Function: start_vm at line 867
-
-Line #      Hits         Time  Per Hit   % Time  Line Contents
-==============================================================
-   867                                               @profile
-   868                                               def start_vm(self, vm_id):
-   869                                                   url_params = azure_helpers.parse_url(VM_RESOURCE_ID,
-   870                                                                                        vm_id)
-   871                                                   vm_name = url_params.get(VM_NAME)
-   872                                                   self.compute_client.virtual_machines. \
-   873                                                       start(self.resource_group,
-   874                                                             vm_name).wait()
-
-Total time: 0 s
-File: /Users/alex/Desktop/work/cb-profiled/cloudbridge/cloudbridge/cloud/providers/azure/azure_client.py
-Function: update_vm_tags at line 876
-
-Line #      Hits         Time  Per Hit   % Time  Line Contents
-==============================================================
-   876                                               @profile
-   877                                               def update_vm_tags(self, vm_id, tags):
-   878                                                   url_params = azure_helpers.parse_url(VM_RESOURCE_ID,
-   879                                                                                        vm_id)
-   880                                                   vm_name = url_params.get(VM_NAME)
-   881                                                   self.compute_client.virtual_machines. \
-   882                                                       create_or_update(self.resource_group,
-   883                                                                        vm_name, tags).result()
-
-Total time: 0 s
-File: /Users/alex/Desktop/work/cb-profiled/cloudbridge/cloudbridge/cloud/providers/azure/azure_client.py
-Function: delete_nic at line 885
-
-Line #      Hits         Time  Per Hit   % Time  Line Contents
-==============================================================
-   885                                               @profile
-   886                                               def delete_nic(self, nic_id):
-   887                                                   nic_params = azure_helpers.\
-   888                                                       parse_url(NETWORK_INTERFACE_RESOURCE_ID, nic_id)
-   889                                                   nic_name = nic_params.get(NETWORK_INTERFACE_NAME)
-   890                                                   self.network_management_client. \
-   891                                                       network_interfaces.delete(self.resource_group,
-   892                                                                                 nic_name).wait()
-
-Total time: 0 s
-File: /Users/alex/Desktop/work/cb-profiled/cloudbridge/cloudbridge/cloud/providers/azure/azure_client.py
-Function: get_nic at line 894
-
-Line #      Hits         Time  Per Hit   % Time  Line Contents
-==============================================================
-   894                                               @profile
-   895                                               def get_nic(self, nic_id):
-   896                                                   nic_params = azure_helpers.\
-   897                                                       parse_url(NETWORK_INTERFACE_RESOURCE_ID, nic_id)
-   898                                                   nic_name = nic_params.get(NETWORK_INTERFACE_NAME)
-   899                                                   return self.network_management_client. \
-   900                                                       network_interfaces.get(self.resource_group, nic_name)
-
-Total time: 0 s
-File: /Users/alex/Desktop/work/cb-profiled/cloudbridge/cloudbridge/cloud/providers/azure/azure_client.py
-Function: update_nic at line 902
-
-Line #      Hits         Time  Per Hit   % Time  Line Contents
-==============================================================
-   902                                               @profile
-   903                                               def update_nic(self, nic_id, params):
-   904                                                   nic_params = azure_helpers.\
-   905                                                       parse_url(NETWORK_INTERFACE_RESOURCE_ID, nic_id)
-   906                                                   nic_name = nic_params.get(NETWORK_INTERFACE_NAME)
-   907                                                   async_nic_creation = self.network_management_client. \
-   908                                                       network_interfaces.create_or_update(
-   909                                                           self.resource_group,
-   910                                                           nic_name,
-   911                                                           params
-   912                                                       )
-   913                                                   nic_info = async_nic_creation.result()
-   914                                                   return nic_info
-
-Total time: 0 s
-File: /Users/alex/Desktop/work/cb-profiled/cloudbridge/cloudbridge/cloud/providers/azure/azure_client.py
-Function: create_nic at line 916
-
-Line #      Hits         Time  Per Hit   % Time  Line Contents
-==============================================================
-   916                                               @profile
-   917                                               def create_nic(self, nic_name, params):
-   918                                                   return self.network_management_client. \
-   919                                                       network_interfaces.create_or_update(
-   920                                                           self.resource_group,
-   921                                                           nic_name,
-   922                                                           params
-   923                                                       ).result()
-
-Total time: 0 s
-File: /Users/alex/Desktop/work/cb-profiled/cloudbridge/cloudbridge/cloud/providers/azure/azure_client.py
-Function: create_public_key at line 925
-
-Line #      Hits         Time  Per Hit   % Time  Line Contents
-==============================================================
-   925                                               @profile
-   926                                               def create_public_key(self, entity):
-   927                                                   return self.table_service. \
-   928                                                       insert_or_replace_entity(self.public_key_storage_table_name,
-   929                                                                                entity)
-
-Total time: 0 s
-File: /Users/alex/Desktop/work/cb-profiled/cloudbridge/cloudbridge/cloud/providers/azure/azure_client.py
-Function: get_public_key at line 931
-
-Line #      Hits         Time  Per Hit   % Time  Line Contents
-==============================================================
-   931                                               @profile
-   932                                               def get_public_key(self, name):
-   933                                                   entities = self.table_service. \
-   934                                                       query_entities(self.public_key_storage_table_name,
-   935                                                                      "Name eq '{0}'".format(name), num_results=1)
-   936                                           
-   937                                                   return entities.items[0] if len(entities.items) > 0 else None
-
-Total time: 0 s
-File: /Users/alex/Desktop/work/cb-profiled/cloudbridge/cloudbridge/cloud/providers/azure/azure_client.py
-Function: delete_public_key at line 939
-
-Line #      Hits         Time  Per Hit   % Time  Line Contents
-==============================================================
-   939                                               @profile
-   940                                               def delete_public_key(self, entity):
-   941                                                   self.table_service.delete_entity(self.public_key_storage_table_name,
-   942                                                                                    entity.PartitionKey, entity.RowKey)
-
-Total time: 0 s
-File: /Users/alex/Desktop/work/cb-profiled/cloudbridge/cloudbridge/cloud/providers/azure/azure_client.py
-Function: list_public_keys at line 944
-
-Line #      Hits         Time  Per Hit   % Time  Line Contents
-==============================================================
-   944                                               @profile
-   945                                               def list_public_keys(self, partition_key, limit=None, marker=None):
-   946                                                   entities = self.table_service. \
-   947                                                       query_entities(self.public_key_storage_table_name,
-   948                                                                      "PartitionKey eq '{0}'".format(partition_key),
-   949                                                                      marker=marker, num_results=limit)
-   950                                                   return (entities.items, entities.next_marker)
-
-Total time: 0 s
-File: /Users/alex/Desktop/work/cb-profiled/cloudbridge/cloudbridge/cloud/providers/azure/azure_client.py
-Function: delete_route_table at line 952
-
-Line #      Hits         Time  Per Hit   % Time  Line Contents
-==============================================================
-   952                                               @profile
-   953                                               def delete_route_table(self, route_table_name):
-   954                                                   self.network_management_client. \
-   955                                                       route_tables.delete(self.resource_group, route_table_name
-   956                                                                           ).wait()
-
-Total time: 0 s
-File: /Users/alex/Desktop/work/cb-profiled/cloudbridge/cloudbridge/cloud/providers/azure/azure_client.py
-Function: attach_subnet_to_route_table at line 958
-
-Line #      Hits         Time  Per Hit   % Time  Line Contents
-==============================================================
-   958                                               @profile
-   959                                               def attach_subnet_to_route_table(self, subnet_id, route_table_id):
-   960                                                   url_params = azure_helpers.parse_url(SUBNET_RESOURCE_ID,
-   961                                                                                        subnet_id)
-   962                                                   network_name = url_params.get(NETWORK_NAME)
-   963                                                   subnet_name = url_params.get(SUBNET_NAME)
-   964                                           
-   965                                                   subnet_info = self.network_management_client.subnets.get(
-   966                                                       self.resource_group,
-   967                                                       network_name,
-   968                                                       subnet_name
-   969                                                   )
-   970                                                   if subnet_info:
-   971                                                       subnet_info.route_table = {
-   972                                                           'id': route_table_id
-   973                                                       }
-   974                                           
-   975                                                       result_create = self.network_management_client. \
-   976                                                           subnets.create_or_update(
-   977                                                            self.resource_group,
-   978                                                            network_name,
-   979                                                            subnet_name,
-   980                                                            subnet_info)
-   981                                                       subnet_info = result_create.result()
-   982                                           
-   983                                                   return subnet_info
-
-Total time: 0 s
-File: /Users/alex/Desktop/work/cb-profiled/cloudbridge/cloudbridge/cloud/providers/azure/azure_client.py
-Function: detach_subnet_to_route_table at line 985
-
-Line #      Hits         Time  Per Hit   % Time  Line Contents
-==============================================================
-   985                                               @profile
-   986                                               def detach_subnet_to_route_table(self, subnet_id, route_table_id):
-   987                                                   url_params = azure_helpers.parse_url(SUBNET_RESOURCE_ID,
-   988                                                                                        subnet_id)
-   989                                                   network_name = url_params.get(NETWORK_NAME)
-   990                                                   subnet_name = url_params.get(SUBNET_NAME)
-   991                                           
-   992                                                   subnet_info = self.network_management_client.subnets.get(
-   993                                                       self.resource_group,
-   994                                                       network_name,
-   995                                                       subnet_name
-   996                                                   )
-   997                                           
-   998                                                   if subnet_info and subnet_info.route_table.id == route_table_id:
-   999                                                       subnet_info.route_table = None
-  1000                                           
-  1001                                                       result_create = self.network_management_client. \
-  1002                                                           subnets.create_or_update(
-  1003                                                            self.resource_group,
-  1004                                                            network_name,
-  1005                                                            subnet_name,
-  1006                                                            subnet_info)
-  1007                                                       subnet_info = result_create.result()
-  1008                                           
-  1009                                                   return subnet_info
-
-Total time: 0 s
-File: /Users/alex/Desktop/work/cb-profiled/cloudbridge/cloudbridge/cloud/providers/azure/azure_client.py
-Function: list_route_tables at line 1011
-
-Line #      Hits         Time  Per Hit   % Time  Line Contents
-==============================================================
-  1011                                               @profile
-  1012                                               def list_route_tables(self):
-  1013                                                   return self.network_management_client. \
-  1014                                                       route_tables.list(self.resource_group)
-
-Total time: 0 s
-File: /Users/alex/Desktop/work/cb-profiled/cloudbridge/cloudbridge/cloud/providers/azure/azure_client.py
-Function: get_route_table at line 1016
-
-Line #      Hits         Time  Per Hit   % Time  Line Contents
-==============================================================
-  1016                                               @profile
-  1017                                               def get_route_table(self, router_id):
-  1018                                                   url_params = azure_helpers.parse_url(ROUTER_RESOURCE_ID,
-  1019                                                                                        router_id)
-  1020                                                   router_name = url_params.get(ROUTER_NAME)
-  1021                                                   return self.network_management_client. \
-  1022                                                       route_tables.get(self.resource_group, router_name)
-
-Total time: 0 s
-File: /Users/alex/Desktop/work/cb-profiled/cloudbridge/cloudbridge/cloud/providers/azure/azure_client.py
-Function: create_route_table at line 1024
-
-Line #      Hits         Time  Per Hit   % Time  Line Contents
-==============================================================
-  1024                                               @profile
-  1025                                               def create_route_table(self, route_table_name, params):
-  1026                                                   return self.network_management_client. \
-  1027                                                       route_tables.create_or_update(
-  1028                                                        self.resource_group,
-  1029                                                        route_table_name, params).result()
-
-Total time: 0 s
-File: /Users/alex/Desktop/work/cb-profiled/cloudbridge/cloudbridge/cloud/providers/azure/azure_client.py
-Function: update_route_table_tags at line 1031
-
-Line #      Hits         Time  Per Hit   % Time  Line Contents
-==============================================================
-  1031                                               @profile
-  1032                                               def update_route_table_tags(self, route_table_name, tags):
-  1033                                                   self.network_management_client.route_tables. \
-  1034                                                       create_or_update(self.resource_group,
-  1035                                                                        route_table_name, tags).result()
-