import libcloud.compute.base as cloud_base
import libcloud.compute.providers as cloud_provider
import libcloud.compute.types as cloud_types
+from libcloud.common.exceptions import BaseHTTPError
from . import BaseComputeNodeDriver
from .. import arvados_node_fqdn, arvados_timestamp, ARVADOS_TIMEFMT
}
def sync_node(self, cloud_node, arvados_node):
- self.real.ex_create_tags(cloud_node,
- {'hostname': arvados_node_fqdn(arvados_node)})
+ try:
+ self.real.ex_create_tags(cloud_node,
+ {'hostname': arvados_node_fqdn(arvados_node)})
+ return True
+ except BaseHTTPError as b:
+ return False
def _init_image(self, urn):
return "image", self.get_image(urn)
+ 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.
# Do our own filtering based on tag.