in perfkitbenchmarker/providers/aws/aws_virtual_machine.py [0:0]
def _Create(self):
"""Create a VM instance."""
_, stderr, retcode = vm_util.IssueCommand(
self.create_cmd, raise_on_failure=False
)
if self.use_dedicated_host and 'InsufficientCapacityOnHost' in stderr:
if self.num_vms_per_host:
raise errors.Resource.CreationError(
'Failed to create host: %d vms of type %s per host exceeds '
'memory capacity limits of the host'
% (self.num_vms_per_host, self.machine_type)
)
else:
logging.warning(
'Creation failed due to insufficient host capacity. A new host '
'will be created and instance creation will be retried.'
)
with self._lock:
if self.num_hosts == len(self.host_list):
host = AwsDedicatedHost(self.machine_type, self.zone)
self.host_list.append(host)
host.Create()
self.host = self.host_list[-1]
self.client_token = str(uuid.uuid4())
raise errors.Resource.RetryableCreationError()
if 'InsufficientInstanceCapacity' in stderr:
if self.use_spot_instance:
self.spot_status_code = 'InsufficientSpotInstanceCapacity'
self.spot_early_termination = True
raise errors.Benchmarks.InsufficientCapacityCloudFailure(stderr)
if 'SpotMaxPriceTooLow' in stderr:
self.spot_status_code = 'SpotMaxPriceTooLow'
self.spot_early_termination = True
raise errors.Resource.CreationError(stderr)
if 'InstanceLimitExceeded' in stderr or 'VcpuLimitExceeded' in stderr:
raise errors.Benchmarks.QuotaFailure(stderr)
if 'RequestLimitExceeded' in stderr:
if FLAGS.retry_on_rate_limited:
raise errors.Resource.RetryableCreationError(stderr)
else:
raise errors.Benchmarks.QuotaFailure(stderr)
if 'InternalError' in stderr:
raise errors.Resource.CreationInternalError(stderr)
if 'InvalidKeyPair.NotFound' in stderr:
raise errors.Benchmarks.KnownIntermittentError(stderr)
# When launching more than 1 VM into the same placement group, there is an
# occasional error that the placement group has already been used in a
# separate zone. Retrying fixes this error.
if 'InvalidPlacementGroup.InUse' in stderr:
raise errors.Resource.RetryableCreationError(stderr)
if self.use_spot_instance and re.search(
r'Your requested instance type .+ is not supported in your requested'
r' Availability Zone',
stderr,
):
raise errors.Benchmarks.InsufficientCapacityCloudFailure(stderr)
if _UNSUPPORTED in stderr:
raise errors.Benchmarks.UnsupportedConfigError(stderr)
if retcode:
raise errors.Resource.CreationError(
'Failed to create VM: %s return code: %s' % (stderr, retcode)
)
if not self.create_return_time:
self.create_return_time = time.time()