def CreateScratchDisk(self, disk_spec): """Create a VM's scratch disk. Args: disk_spec: virtual_machine.BaseDiskSpec object of the disk. """ disks = [] for i in xrange(disk_spec.num_striped_disks): if disk_spec.disk_type == disk.LOCAL: name = '' if FLAGS.gce_ssd_interface == SCSI: name = 'local-ssd-%d' % self.local_disk_counter elif FLAGS.gce_ssd_interface == NVME: name = 'nvme0n%d' % (self.local_disk_counter + 1) data_disk = gce_disk.GceDisk(disk_spec, name, self.zone, self.project) # Local disk numbers start at 1 (0 is the system disk). data_disk.disk_number = self.local_disk_counter + 1 self.local_disk_counter += 1 if self.local_disk_counter > self.max_local_disks: raise errors.Error('Not enough local disks.') else: name = '%s-data-%d-%d' % (self.name, len(self.scratch_disks), i) data_disk = gce_disk.GceDisk(disk_spec, name, self.zone, self.project) # Remote disk numbers start at 1+max_local_disks (0 is the system disk # and local disks occupy 1-max_local_disks). data_disk.disk_number = (self.remote_disk_counter + 1 + self.max_local_disks) self.remote_disk_counter += 1 disks.append(data_disk) self._CreateScratchDiskFromDisks(disk_spec, disks)
def CreateScratchDisk(self, disk_spec): """Create a VM's scratch disk. Args: disk_spec: virtual_machine.BaseDiskSpec object of the disk. """ disks = [] replica_zones = FLAGS.data_disk_zones for i in range(disk_spec.num_striped_disks): if disk_spec.disk_type == disk.LOCAL: name = '' if FLAGS.gce_ssd_interface == SCSI: name = 'local-ssd-%d' % self.local_disk_counter disk_number = self.local_disk_counter + 1 elif FLAGS.gce_ssd_interface == NVME: # Device can either be /dev/nvme0n1 or /dev/nvme1n1. Find out which. name, _ = self.RemoteCommand('find /dev/nvme*n%d' % (self.local_disk_counter + 1)) name = name.strip().split('/')[-1] disk_number = self.local_disk_counter + self.NVME_START_INDEX else: raise errors.Error('Unknown Local SSD Interface.') data_disk = gce_disk.GceDisk(disk_spec, name, self.zone, self.project, replica_zones=replica_zones) data_disk.disk_number = disk_number self.local_disk_counter += 1 if self.local_disk_counter > self.max_local_disks: raise errors.Error('Not enough local disks.') elif disk_spec.disk_type == disk.NFS: data_disk = self._GetNfsService().CreateNfsDisk() else: name = '%s-data-%d-%d' % (self.name, len( self.scratch_disks), i) data_disk = gce_disk.GceDisk(disk_spec, name, self.zone, self.project, replica_zones=replica_zones) # Remote disk numbers start at 1+max_local_disks (0 is the system disk # and local disks occupy 1-max_local_disks). data_disk.disk_number = (self.remote_disk_counter + 1 + self.max_local_disks) self.remote_disk_counter += 1 disks.append(data_disk) self._CreateScratchDiskFromDisks(disk_spec, disks)
def testDeviceId(self): with mock.patch(disk.__name__ + '.FLAGS') as disk_flags: disk_flags.os_type = 'windows' disk_spec = disk.BaseDiskSpec(_COMPONENT, disk_number=1, disk_size=2, disk_type=gce_disk.PD_STANDARD) disk_obj = gce_disk.GceDisk(disk_spec, 'name', 'zone', 'project') self.assertEquals(disk_obj.GetDeviceId(), r'\\.\PHYSICALDRIVE1')
def testPDStandard(self): disk_spec = disk.BaseDiskSpec(_COMPONENT, disk_size=2, disk_type=gce_disk.PD_STANDARD) disk_obj = gce_disk.GceDisk(disk_spec, 'name', 'zone', 'project') self.assertDictContainsSubset( {disk.MEDIA: disk.HDD, disk.REPLICATION: disk.ZONE}, disk_obj.metadata )
def testPDStandard(self): disk_spec = disk.BaseDiskSpec(_COMPONENT, disk_size=2, disk_type=gce_disk.PD_STANDARD) disk_obj = gce_disk.GceDisk(disk_spec, 'name', 'zone', 'project') self.assertEquals( disk_obj.metadata, { disk.MEDIA: disk.HDD, disk.REPLICATION: disk.ZONE, disk.LEGACY_DISK_TYPE: disk.STANDARD })
def __init__(self, disk_num, spec, name): super(GcePersistentDisk, self).__init__(disk_num, spec, name) spec = copy.deepcopy(spec) spec.disk_type = spec.backing_store_disk_type or gce_disk.PD_STANDARD stdout, _, _ = vm_util.IssueCommand([ FLAGS.kubectl, '--kubeconfig=%s' % FLAGS.kubeconfig, 'get', 'nodes', '-o=jsonpath={.items[].spec.providerID}' ]) try: m = re.match('gce://(?P<project>[^/]*)/(?P<zone>[^/]*)/.*', stdout) self.project = m.group('project') self.zone = m.group('zone') except: logging.exception( 'Node ProviderID (%s) does not match expected GCE format.', stdout) raise self.pd = gce_disk.GceDisk(spec, self.name, self.zone, self.project)