from __future__ import absolute_import, print_function
import time
-from operator import attrgetter
import libcloud.compute.base as cloud_base
import libcloud.compute.providers as cloud_provider
def __init__(self, auth_kwargs, list_kwargs, create_kwargs,
driver_class=DEFAULT_DRIVER):
- list_kwargs["ex_resource_group"] = create_kwargs["ex_resource_group"]
+
+ if not list_kwargs.get("ex_resource_group"):
+ raise Exception("Must include ex_resource_group in Cloud List configuration (list_kwargs)")
+
+ create_kwargs["ex_resource_group"] = list_kwargs["ex_resource_group"]
self.tags = {key[4:]: value
for key, value in create_kwargs.iteritems()
if key.startswith('tag_')}
+ # filter out tags from create_kwargs
+ create_kwargs = {key: value
+ for key, value in create_kwargs.iteritems()
+ if not key.startswith('tag_')}
super(ComputeNodeDriver, self).__init__(
auth_kwargs, list_kwargs, create_kwargs,
driver_class)
name = 'compute-{}-{}'.format(node_id, cluster_id)
tags = {
'booted_at': time.strftime(ARVADOS_TIMEFMT, time.gmtime()),
- 'arv-ping-url': self._make_ping_url(arvados_node),
+ 'arv-ping-url': self._make_ping_url(arvados_node)
}
tags.update(self.tags)
return {
}
def sync_node(self, cloud_node, arvados_node):
- hostname = arvados_node_fqdn(arvados_node)
- self.real.ex_create_tags(cloud_node.id, {"hostname": hostname})
+ self.real.ex_create_tags(cloud_node,
+ {'hostname': arvados_node_fqdn(arvados_node)})
def _init_image(self, urn):
- return "image", self.list_images(ex_urn=urn)[0]
+ return "image", self.get_image(urn)
- def _init_ssh_key(self, filename):
- with open(filename) as ssh_file:
- key = cloud_base.NodeAuthSSHKey(ssh_file.read())
- return 'auth', key
+ def post_create_node(self, cloud_node):
+ self.real.ex_run_command(cloud_node,
+ """bash -c '
+ mkdir -p /var/tmp/arv-node-data/meta-data
+ echo "%s" > /var/tmp/arv-node-data/arv-ping-url
+ echo "%s" > /var/tmp/arv-node-data/meta-data/instance-id
+ echo "%s" > /var/tmp/arv-node-data/meta-data/instance-type
+ echo "%s" > /var/tmp/arv-node-data/meta-data/local-ipv4
+ '""" % (cloud_node.extra["tags"]["arv-ping-url"],
+ cloud_node.id,
+ cloud_node.extra["properties"]["hardwareProfile"]["vmSize"],
+ cloud_node.private_ips[0]),
+ timestamp=int(time.time()))
def list_nodes(self):
# Azure only supports filtering node lists by resource group.