Example #1
0
  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)
Example #3
0
 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
   )
Example #5
0
 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
         })
Example #6
0
    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)