def Run()

in perfkitbenchmarker/linux_benchmarks/provisioning_benchmarks/provision_disk_benchmark.py [0:0]


def Run(bm_spec: benchmark_spec.BenchmarkSpec) -> List[sample.Sample]:
  """Runs the benchmark."""
  vm = bm_spec.vm_groups['default'][0]

  # TODO(user) in order for this to be cloud agnostic, we need to
  # refactor the virtual machine code for all the clouds to use disk strategies
  # like GCE
  if vm.create_disk_strategy is None:
    raise ValueError('VM Create Disk Strategy is None')
  if vm.create_disk_strategy.DiskCreatedOnVMCreation():
    raise ValueError(
        'Disk created on vm creation, cannot measure provisioning time.'
        'Please check the flags.'
    )
  samples = []
  time_to_create = ParseCreateTimeFromScratchDisks(vm)
  time_to_attach = ParseAttachTimeFromScratchDisks(vm)
  time_to_visible_after_create = (
      vm.create_disk_strategy.GetSetupDiskStrategy().time_to_visible
  )
  disk_metadata = GetDiskMetadata(vm)
  if disk_metadata is None:
    raise ValueError('Disk metadata is None')
  time_to_create_and_attach = time_to_create + time_to_attach
  detach_time, time_to_detach_from_guest = DetachDisks(vm)
  samples.append(
      sample.Sample(
          'Time to Create and Attach Disks',
          time_to_create_and_attach,
          'seconds',
          disk_metadata,
      ),
  )
  samples.append(
      sample.Sample(
          'Time to Create Disks',
          time_to_create,
          'seconds',
          disk_metadata,
      ),
  )
  samples.append(
      sample.Sample(
          'Time to Attach Disk after create',
          time_to_attach,
          'seconds',
          disk_metadata,
      )
  )
  samples.append(
      sample.Sample(
          'Time to Visible from Guest after Create',
          time_to_visible_after_create,
          'seconds',
          disk_metadata,
      )
  )
  samples.append(
      sample.Sample(
          'Time to Detach Disks',
          detach_time,
          'seconds',
          disk_metadata,
      ),
  )
  samples.append(
      sample.Sample(
          'Time to Detach from Guest',
          time_to_detach_from_guest,
          'seconds',
          disk_metadata,
      ),
  )
  time.sleep(60)
  vm.create_disk_strategy.GetSetupDiskStrategy().AttachDisks()
  time_to_visible_after_detach = (
      vm.create_disk_strategy.GetSetupDiskStrategy().time_to_visible
  )
  time_to_attach_after_detach = ParseAttachTimeFromScratchDisks(vm)
  samples.append(
      sample.Sample(
          'Time to Attach Disk after detach',
          time_to_attach_after_detach,
          'seconds',
          disk_metadata,
      )
  )
  samples.append(
      sample.Sample(
          'Time to Visible from Guest after Re-attach',
          time_to_visible_after_detach,
          'seconds',
          disk_metadata,
      )
  )
  DetachDisks(vm)
  vm_secondary = bm_spec.vm_groups['secondary'][0]

  time.sleep(60)
  # re-attach to a new VM
  vm_secondary.create_disk_strategy = copy.copy(vm.create_disk_strategy)
  vm_secondary.create_disk_strategy.vm = vm_secondary
  vm_secondary.create_disk_strategy.setup_disk_strategy = copy.copy(
      vm.create_disk_strategy.GetSetupDiskStrategy()
  )
  vm_secondary.create_disk_strategy.setup_disk_strategy.vm = vm_secondary
  vm_secondary.create_disk_strategy.GetSetupDiskStrategy().AttachDisks()
  time_to_visible_to_another_vm = (
      vm_secondary.create_disk_strategy.GetSetupDiskStrategy().time_to_visible
  )
  time_to_reattach_to_another_vm = ParseAttachTimeFromScratchDisks(vm)
  samples.append(
      sample.Sample(
          'Time to Re-attach to New VM',
          time_to_reattach_to_another_vm,
          'seconds',
          disk_metadata,
      )
  )
  samples.append(
      sample.Sample(
          'Time to Visible from Guest after Re-attach to New VM',
          time_to_visible_to_another_vm,
          'seconds',
          disk_metadata,
      )
  )

  return samples