3 from __future__ import absolute_import, print_function
7 import libcloud.compute.base as cloud_base
8 import libcloud.compute.providers as cloud_provider
9 import libcloud.compute.types as cloud_types
11 from . import BaseComputeNodeDriver
12 from .. import arvados_node_fqdn, arvados_timestamp, ARVADOS_TIMEFMT
14 class ComputeNodeDriver(BaseComputeNodeDriver):
16 DEFAULT_DRIVER = cloud_provider.get_driver(cloud_types.Provider.AZURE_ARM)
19 def __init__(self, auth_kwargs, list_kwargs, create_kwargs,
20 driver_class=DEFAULT_DRIVER):
22 if not list_kwargs.get("ex_resource_group"):
23 raise Exception("Must include ex_resource_group in Cloud List configuration (list_kwargs)")
25 create_kwargs["ex_resource_group"] = list_kwargs["ex_resource_group"]
27 self.tags = {key[4:]: value
28 for key, value in create_kwargs.iteritems()
29 if key.startswith('tag_')}
30 # filter out tags from create_kwargs
31 create_kwargs = {key: value
32 for key, value in create_kwargs.iteritems()
33 if not key.startswith('tag_')}
34 super(ComputeNodeDriver, self).__init__(
35 auth_kwargs, list_kwargs, create_kwargs,
38 def arvados_create_kwargs(self, arvados_node):
39 cluster_id, _, node_id = arvados_node['uuid'].split('-')
40 name = 'compute-{}-{}'.format(node_id, cluster_id)
42 'booted_at': time.strftime(ARVADOS_TIMEFMT, time.gmtime()),
43 'arv-ping-url': self._make_ping_url(arvados_node)
45 tags.update(self.tags)
51 def sync_node(self, cloud_node, arvados_node):
52 self.real.ex_create_tags(cloud_node,
53 {'hostname': arvados_node_fqdn(arvados_node)})
55 def _init_image(self, urn):
56 return "image", self.get_image(urn)
59 # Azure only supports filtering node lists by resource group.
60 # Do our own filtering based on tag.
61 return [node for node in
62 super(ComputeNodeDriver, self).list_nodes()
63 if node.extra["tags"].get("arvados-class") == self.tags["arvados-class"]]
66 def node_fqdn(cls, node):
67 return node.extra["tags"].get("hostname")
70 def node_start_time(cls, node):
71 return arvados_timestamp(node.extra["tags"].get("booted_at"))