self.tags = {key[4:]: value
for key, value in list_kwargs.iteritems()
if key.startswith('tag:')}
+ # Tags are assigned at instance creation time
+ create_kwargs.setdefault('ex_metadata', {})
+ create_kwargs['ex_metadata'].update(self.tags)
super(ComputeNodeDriver, self).__init__(
auth_kwargs, {'ex_filters': list_kwargs}, create_kwargs,
driver_class)
def _init_image_id(self, image_id):
- return 'image', self.search_for(image_id, 'list_images')
+ return 'image', self.search_for(image_id, 'list_images', ex_owner='self')
def _init_security_groups(self, group_names):
return 'ex_security_groups', [
"VolumeSize": volsize,
"VolumeType": "gp2"
}}]
+ if size.preemptable:
+ # Request a Spot instance for this node
+ kw['ex_spot_market'] = True
return kw
- def post_create_node(self, cloud_node):
- self.real.ex_create_tags(cloud_node, self.tags)
-
def sync_node(self, cloud_node, arvados_node):
self.real.ex_create_tags(cloud_node,
{'Name': arvados_node_fqdn(arvados_node)})
+ def create_node(self, size, arvados_node):
+ # Set up tag indicating the Arvados assigned Cloud Size id.
+ self.create_kwargs['ex_metadata'].update({'arvados_node_size': size.id})
+ return super(ComputeNodeDriver, self).create_node(size, arvados_node)
+
def list_nodes(self):
# Need to populate Node.size
nodes = super(ComputeNodeDriver, self).list_nodes()
for n in nodes:
if not n.size:
n.size = self.sizes[n.extra["instance_type"]]
+ n.extra['arvados_node_size'] = n.extra.get('tags', {}).get('arvados_node_size')
return nodes
@classmethod