X-Git-Url: https://git.arvados.org/arvados.git/blobdiff_plain/92d7a504629d848927d5334b0a801cd3993a585b..bb91f86ea02e3535e3953ee0916dd6877bf585f7:/services/nodemanager/arvnodeman/computenode/driver/ec2.py diff --git a/services/nodemanager/arvnodeman/computenode/driver/ec2.py b/services/nodemanager/arvnodeman/computenode/driver/ec2.py index 8deabbd50a..1c1b51b829 100644 --- a/services/nodemanager/arvnodeman/computenode/driver/ec2.py +++ b/services/nodemanager/arvnodeman/computenode/driver/ec2.py @@ -1,4 +1,7 @@ #!/usr/bin/env python +# Copyright (C) The Arvados Authors. All rights reserved. +# +# SPDX-License-Identifier: AGPL-3.0 from __future__ import absolute_import, print_function @@ -67,8 +70,25 @@ class ComputeNodeDriver(BaseComputeNodeDriver): create_cloud_name = staticmethod(arvados_node_fqdn) def arvados_create_kwargs(self, size, arvados_node): - return {'name': self.create_cloud_name(arvados_node), + kw = {'name': self.create_cloud_name(arvados_node), 'ex_userdata': self._make_ping_url(arvados_node)} + # libcloud/ec2 disk sizes are in GB, Arvados/SLURM "scratch" value is in MB + scratch = int(size.scratch / 1000) + 1 + if scratch > size.disk: + volsize = scratch - size.disk + 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", + "Ebs": { + "DeleteOnTermination": True, + "VolumeSize": volsize, + "VolumeType": "gp2" + }}] + return kw def post_create_node(self, cloud_node): self.real.ex_create_tags(cloud_node, self.tags)