X-Git-Url: https://git.arvados.org/arvados.git/blobdiff_plain/013a5d60ce55b627f314ed05000e4a7fa6b1cae8..6d349aac4810e7b0039e519860d0eda8345c9dfe:/services/nodemanager/arvnodeman/computenode/driver/azure.py diff --git a/services/nodemanager/arvnodeman/computenode/driver/azure.py b/services/nodemanager/arvnodeman/computenode/driver/azure.py index cfa529bbbd..fbae522499 100644 --- a/services/nodemanager/arvnodeman/computenode/driver/azure.py +++ b/services/nodemanager/arvnodeman/computenode/driver/azure.py @@ -2,6 +2,7 @@ from __future__ import absolute_import, print_function +import pipes import time import libcloud.compute.base as cloud_base @@ -37,7 +38,7 @@ class ComputeNodeDriver(BaseComputeNodeDriver): auth_kwargs, list_kwargs, create_kwargs, driver_class) - def arvados_create_kwargs(self, arvados_node): + def arvados_create_kwargs(self, size, arvados_node): cluster_id, _, node_id = arvados_node['uuid'].split('-') name = 'compute-{}-{}'.format(node_id, cluster_id) tags = { @@ -45,9 +46,20 @@ class ComputeNodeDriver(BaseComputeNodeDriver): 'arv-ping-url': self._make_ping_url(arvados_node) } tags.update(self.tags) + + customdata = """#!/bin/sh +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 +""" % (pipes.quote(tags['arv-ping-url']), + pipes.quote(name), + pipes.quote(size.id)) + return { 'name': name, 'ex_tags': tags, + 'ex_customdata': customdata } def sync_node(self, cloud_node, arvados_node): @@ -61,26 +73,17 @@ class ComputeNodeDriver(BaseComputeNodeDriver): 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. - return [node for node in + nodes = [node for node in super(ComputeNodeDriver, self).list_nodes() if node.extra["tags"].get("arvados-class") == self.tags["arvados-class"]] + for n in nodes: + # Need to populate Node.size + if not n.size: + n.size = self.sizes[n.extra["properties"]["hardwareProfile"]["vmSize"]] + return nodes def broken(self, cloud_node): """Return true if libcloud has indicated the node is in a "broken" state.""" @@ -88,14 +91,6 @@ class ComputeNodeDriver(BaseComputeNodeDriver): # of failure that the Azure libcloud driver doesn't know how to interpret. return (cloud_node.state in (cloud_types.NodeState.ERROR, cloud_types.NodeState.UNKNOWN)) - 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["properties"]["hardwareProfile"]["vmSize"]] - return nodes - @classmethod def node_fqdn(cls, node): return node.extra["tags"].get("hostname")