def __init__(self, spec): super(AzureNetwork, self).__init__(spec) self.resource_group = GetResourceGroup() self.location = util.GetLocationFromZone(self.zone) # With dedicated hosting and/or an availability zone, an availability set # cannot be created if (FLAGS.dedicated_hosts or util.GetAvailabilityZoneFromZone(self.zone) or not FLAGS.azure_availability_set): self.avail_set = None else: avail_set_name = '%s-%s' % (self.resource_group.name, self.zone) self.avail_set = AzureAvailSet(avail_set_name, self.location) # Storage account names can't include separator characters :(. storage_account_prefix = 'pkb%s' % FLAGS.run_uri # Storage account names must be 3-24 characters long and use # numbers and lower-case letters only, which leads us to this # awful naming scheme. suffix = 'storage%d' % AzureStorageAccount.total_storage_accounts self.storage_account = AzureStorageAccount( FLAGS.azure_storage_type, self.location, storage_account_prefix[:24 - len(suffix)] + suffix) prefix = '%s-%s' % (self.resource_group.name, self.zone) self.vnet = AzureVirtualNetwork(self.location, prefix + '-vnet') self.subnet = AzureSubnet(self.vnet, self.vnet.name + '-subnet') self.nsg = AzureNetworkSecurityGroup(self.location, self.subnet, self.subnet.name + '-nsg')
def __init__(self, vm_spec): """Initialize an Azure virtual machine. Args: vm_spec: virtual_machine.BaseVmSpec object of the vm. """ super(AzureVirtualMachine, self).__init__(vm_spec) # PKB zone can be either a region or a region with an availability zone. # Format for Azure availability zone support is "region-availability_zone" # Example: eastus2-1 is Azure region eastus2 with availability zone 1. self.region = util.GetRegionFromZone(self.zone) self.availability_zone = util.GetAvailabilityZoneFromZone(self.zone) self.use_dedicated_host = vm_spec.use_dedicated_host self.num_vms_per_host = vm_spec.num_vms_per_host self.network = azure_network.AzureNetwork.GetNetwork(self) self.firewall = azure_network.AzureFirewall.GetFirewall() self.max_local_disks = NUM_LOCAL_VOLUMES.get(self.machine_type) or 1 self._lun_counter = itertools.count() self._deleted = False self.resource_group = azure_network.GetResourceGroup() self.public_ip = AzurePublicIPAddress(self.region, self.availability_zone, self.name + '-public-ip') self.nic = AzureNIC(self.network.subnet, self.name + '-nic', self.public_ip.name, vm_spec.accelerated_networking, self.network.nsg) self.storage_account = self.network.storage_account if vm_spec.image: self.image = vm_spec.image elif self.machine_type in _MACHINE_TYPES_ONLY_SUPPORT_GEN2_IMAGES: if hasattr(type(self), 'GEN2_IMAGE_URN'): self.image = type(self).GEN2_IMAGE_URN else: raise errors.Benchmarks.UnsupportedConfigError( 'No Azure gen2 image.') else: self.image = type(self).IMAGE_URN self.host = None if self.use_dedicated_host: self.host_series_sku = _GetSkuType(self.machine_type) self.host_list = None self.low_priority = vm_spec.low_priority self.low_priority_status_code = None self.spot_early_termination = False self.ultra_ssd_enabled = False disk_spec = disk.BaseDiskSpec('azure_os_disk') disk_spec.disk_type = (vm_spec.boot_disk_type or self.storage_account.storage_type) if vm_spec.boot_disk_size: disk_spec.disk_size = vm_spec.boot_disk_size self.os_disk = azure_disk.AzureDisk(disk_spec, self, None, is_image=True)
def __init__(self, spec): super(AzureNetwork, self).__init__(spec) self.resource_group = GetResourceGroup() self.location = util.GetLocationFromZone(self.zone) self.availability_zone = util.GetAvailabilityZoneFromZone(self.zone) placement_group_spec = azure_placement_group.AzurePlacementGroupSpec( 'AzurePlacementGroupSpec', flag_values=FLAGS, zone=self.zone, resource_group=self.resource_group.name) is_dedicated_host = bool(FLAGS.dedicated_hosts) in_availability_zone = bool(self.availability_zone) cluster_placement_group = ( FLAGS.placement_group_style == placement_group.PLACEMENT_GROUP_CLUSTER) spread_placement_group = ( FLAGS.placement_group_style == placement_group.PLACEMENT_GROUP_SPREAD) if cluster_placement_group and IsProximityPlacementGroupCompatible( self.location): self.placement_group = azure_placement_group.AzureProximityGroup( placement_group_spec) # With dedicated hosting and/or an availability zone, an availability set # cannot be created elif spread_placement_group and not (is_dedicated_host or in_availability_zone): self.placement_group = azure_placement_group.AzureAvailSet( placement_group_spec) else: self.placement_group = None # Storage account names can't include separator characters :(. storage_account_prefix = 'pkb%s' % FLAGS.run_uri # Storage account names must be 3-24 characters long and use # numbers and lower-case letters only, which leads us to this # awful naming scheme. suffix = 'storage%d' % AzureStorageAccount.total_storage_accounts self.storage_account = AzureStorageAccount( FLAGS.azure_storage_type, self.location, storage_account_prefix[:24 - len(suffix)] + suffix) # Length restriction from https://docs.microsoft.com/en-us/azure/azure-resource-manager/management/resource-name-rules#microsoftnetwork pylint: disable=line-too-long prefix = '%s-%s' % (self.resource_group.name, self.location) vnet_name = prefix + '-vnet' if len(vnet_name) > 64: vnet_name = prefix[:59] + '-vnet' self.vnet = AzureVirtualNetwork.GetForLocation(spec, self.location, vnet_name) subnet_name = self.vnet.name if self.availability_zone: subnet_name += '-' + self.availability_zone subnet_name += '-subnet' self.subnet = AzureSubnet(self.vnet, subnet_name) self.nsg = AzureNetworkSecurityGroup(self.location, self.subnet, self.subnet.name + '-nsg')
def __init__(self, vm_spec): """Initialize an Azure virtual machine. Args: vm_spec: virtual_machine.BaseVmSpec object of the vm. """ super(AzureVirtualMachine, self).__init__(vm_spec) # PKB zone can be either a location or a location with an availability zone. # Format for Azure availability zone support is "location-availability_zone" # Example: eastus2-1 is Azure location eastus2 with availability zone 1. self.location = util.GetLocationFromZone(self.zone) self.availability_zone = util.GetAvailabilityZoneFromZone(self.zone) self.use_dedicated_host = vm_spec.use_dedicated_host # TODO(buggay): implement num_vms_per_host functionality self.num_vms_per_host = vm_spec.num_vms_per_host if self.num_vms_per_host: raise NotImplementedError( 'Num vms per host for Azure is not supported.') self.network = azure_network.AzureNetwork.GetNetwork(self) self.firewall = azure_network.AzureFirewall.GetFirewall() self.max_local_disks = NUM_LOCAL_VOLUMES.get(self.machine_type) or 1 self._lun_counter = itertools.count() self._deleted = False self.resource_group = azure_network.GetResourceGroup() self.public_ip = AzurePublicIPAddress(self.location, self.availability_zone, self.name + '-public-ip') self.nic = AzureNIC(self.network.subnet, self.name + '-nic', self.public_ip.name, vm_spec.accelerated_networking) self.storage_account = self.network.storage_account self.image = vm_spec.image or self.IMAGE_URN self.host = None if self.use_dedicated_host: self.host_series_sku = _GetSkuType(self.machine_type) self.host_list = None disk_spec = disk.BaseDiskSpec('azure_os_disk') disk_spec.disk_type = (vm_spec.boot_disk_type or self.storage_account.storage_type) if vm_spec.boot_disk_size: disk_spec.disk_size = vm_spec.boot_disk_size self.os_disk = azure_disk.AzureDisk(disk_spec, self.name, self.machine_type, self.storage_account, None, is_image=True)
def test_get_availability_zone_from_zone_invalid_zone(self): valid_region = 'eastus2-1a' with self.assertRaises(ValueError): util.GetAvailabilityZoneFromZone(valid_region)
def test_get_availability_zone_from_zone_valid_zone(self): valid_zone = 'eastus2-1' self.assertEqual(self.expected_availability_zone, util.GetAvailabilityZoneFromZone(valid_zone))
def test_get_availability_zone_from_zone_valid_region(self): valid_region = 'eastus2' self.assertIsNone(util.GetAvailabilityZoneFromZone(valid_region))
def test_get_availability_zone_from_zone_valid_location(self): valid_location = 'eastus2' self.assertEqual(None, util.GetAvailabilityZoneFromZone(valid_location))