scratch = int(size.scratch / 1000) + 1
if scratch > size.disk:
volsize = scratch - size.disk
- if volsize < 1:
- volsize = 1
if volsize > 16384:
+ # Must be 1-16384 for General Purpose SSD (gp2) devices
+ # https://docs.aws.amazon.com/AWSEC2/latest/APIReference/API_EbsBlockDevice.html
+ self._logger.warning("Requested EBS volume size %d is too large, capping size request to 16384 GB", volsize)
volsize = 16384
kw["ex_blockdevicemappings"] = [{
"DeviceName": "/dev/xvdt",
create_method = self.driver_mock().create_node
self.assertTrue(create_method.called)
self.assertIsNone(create_method.call_args[1].get('ex_blockdevicemappings'))
+
+ def test_ebs_volume_too_big(self):
+ arv_node = testutil.arvados_node_mock()
+ driver = self.new_driver()
+ # libcloud/ec2 "disk" sizes are in GB, Arvados/SLURM "scratch" value is in MB
+ size = testutil.MockSize(1)
+ size.disk=80
+ size.scratch=20000000
+ driver.create_node(size, arv_node)
+ create_method = self.driver_mock().create_node
+ self.assertTrue(create_method.called)
+ self.assertEqual([{
+ "DeviceName": "/dev/xvdt",
+ "Ebs": {
+ "DeleteOnTermination": True,
+ "VolumeSize": 16384,
+ "VolumeType": "gp2"
+ }}],
+ create_method.call_args[1].get('ex_blockdevicemappings'))