X-Git-Url: https://git.arvados.org/arvados.git/blobdiff_plain/b8261deb6e1035134d7ce8f004cc49deeed1bd27..5dfdd042f8931fa7f001256471c0b624f768504c:/services/nodemanager/arvnodeman/computenode/driver/gce.py?ds=sidebyside diff --git a/services/nodemanager/arvnodeman/computenode/driver/gce.py b/services/nodemanager/arvnodeman/computenode/driver/gce.py index 6380d0e342..36bfc96213 100644 --- a/services/nodemanager/arvnodeman/computenode/driver/gce.py +++ b/services/nodemanager/arvnodeman/computenode/driver/gce.py @@ -34,11 +34,17 @@ class ComputeNodeDriver(BaseComputeNodeDriver): super(ComputeNodeDriver, self).__init__( auth_kwargs, list_kwargs, create_kwargs, driver_class) + self._disktype_links = {dt.name: self._object_link(dt) + for dt in self.real.ex_list_disktypes()} @staticmethod def _name_key(cloud_object): return cloud_object.name + @staticmethod + def _object_link(cloud_object): + return cloud_object.extra.get('selfLink') + def _init_image(self, image_name): return 'image', self.search_for( image_name, 'list_images', self._name_key) @@ -59,14 +65,39 @@ class ComputeNodeDriver(BaseComputeNodeDriver): def arvados_create_kwargs(self, arvados_node): cluster_id, _, node_id = arvados_node['uuid'].split('-') - result = {'name': 'compute-{}-{}'.format(node_id, cluster_id), + name = 'compute-{}-{}'.format(node_id, cluster_id) + disks = [ + {'autoDelete': True, + 'boot': True, + 'deviceName': name, + 'initializeParams': + {'diskName': name, + 'diskType': self._disktype_links['pd-standard'], + 'sourceImage': self._object_link(self.create_kwargs['image']), + }, + 'type': 'PERSISTENT', + }, + {'autoDelete': True, + 'boot': False, + # Boot images rely on this device name to find the SSD. + # Any change must be coordinated in the image. + 'deviceName': 'tmp', + 'initializeParams': + {'diskType': self._disktype_links['local-ssd'], + }, + 'type': 'SCRATCH', + }, + ] + result = {'name': name, 'ex_metadata': self.create_kwargs['ex_metadata'].copy(), - 'ex_tags': list(self.node_tags)} - result['ex_metadata']['arv-ping-url'] = self._make_ping_url( - arvados_node) - result['ex_metadata']['booted_at'] = time.strftime(ARVADOS_TIMEFMT, - time.gmtime()) - result['ex_metadata']['hostname'] = arvados_node_fqdn(arvados_node) + 'ex_tags': list(self.node_tags), + 'ex_disks_gce_struct': disks, + } + result['ex_metadata'].update({ + 'arv-ping-url': self._make_ping_url(arvados_node), + 'booted_at': time.strftime(ARVADOS_TIMEFMT, time.gmtime()), + 'hostname': arvados_node_fqdn(arvados_node), + }) return result def list_nodes(self):