Merge branch '5353-set-node-size' refs #5353
authorPeter Amstutz <peter.amstutz@curoverse.com>
Thu, 19 Nov 2015 19:46:38 +0000 (14:46 -0500)
committerPeter Amstutz <peter.amstutz@curoverse.com>
Thu, 19 Nov 2015 19:46:38 +0000 (14:46 -0500)
services/nodemanager/arvnodeman/computenode/driver/__init__.py
services/nodemanager/arvnodeman/computenode/driver/azure.py
services/nodemanager/arvnodeman/computenode/driver/dummy.py
services/nodemanager/arvnodeman/computenode/driver/ec2.py
services/nodemanager/arvnodeman/daemon.py

index 14e804f385dc3e957fd707c34e7e4504ed1951e7..06b532ac5618d79915478930d05072278ad3753f 100644 (file)
@@ -53,6 +53,8 @@ class BaseComputeNodeDriver(object):
                 if new_pair is not None:
                     self.create_kwargs[new_pair[0]] = new_pair[1]
 
+        self.sizes = {sz.id: sz for sz in self.real.list_sizes()}
+
     def _init_ping_host(self, ping_host):
         self.ping_host = ping_host
 
index b1ec5e6abc95e923e1b6583d3c33e49a3247368d..cfa529bbbd3448744c3e0d3ceabb1c0de6cdf6ac 100644 (file)
@@ -88,6 +88,14 @@ 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")
index c164a25b85f79e2e8c26dc91aef76554a0545fb7..44ee71569f6570a8ac09fa0da8f846bdd0b29ca3 100644 (file)
@@ -38,6 +38,7 @@ class ComputeNodeDriver(BaseComputeNodeDriver):
         nodelist = super(ComputeNodeDriver, self).list_nodes()
         for node in nodelist:
             self._ensure_private_ip(node)
+            node.size = self.sizes["1"]
         return nodelist
 
     def create_node(self, size, arvados_node):
index 6afe3163c9cf89bb287ca3c0a904311345a36555..c0a72b7235f6137c0c92e321edc547e5e91ead0f 100644 (file)
@@ -75,6 +75,14 @@ class ComputeNodeDriver(BaseComputeNodeDriver):
         self.real.ex_create_tags(cloud_node,
                                  {'Name': arvados_node_fqdn(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"]]
+        return nodes
+
     @classmethod
     def node_fqdn(cls, node):
         return node.name
index 64bb177de56f84e75e2b01dca644db7f35d9433f..df0307ae310e048e8eae4e87744c801085f4b65e 100644 (file)
@@ -222,7 +222,7 @@ class NodeManagerDaemonActor(actor_class):
         up += sum(1
                   for i in (self.booted, self.cloud_nodes.nodes)
                   for c in i.itervalues()
-                  if size is None or (c.cloud_node.size and c.cloud_node.size.id == size.id))
+                  if size is None or c.cloud_node.size.id == size.id)
         return up
 
     def _total_price(self):
@@ -231,22 +231,21 @@ class NodeManagerDaemonActor(actor_class):
                   for c in self.booting.itervalues())
         cost += sum(c.cloud_node.size.price
                     for i in (self.booted, self.cloud_nodes.nodes)
-                    for c in i.itervalues()
-                    if c.cloud_node.size)
+                    for c in i.itervalues())
         return cost
 
     def _nodes_busy(self, size):
         return sum(1 for busy in
                    pykka.get_all(rec.actor.in_state('busy') for rec in
                                  self.cloud_nodes.nodes.itervalues()
-                                 if (rec.cloud_node.size and rec.cloud_node.size.id == size.id))
+                                 if rec.cloud_node.size.id == size.id)
                    if busy)
 
     def _nodes_missing(self, size):
         return sum(1 for arv_node in
                    pykka.get_all(rec.actor.arvados_node for rec in
                                  self.cloud_nodes.nodes.itervalues()
-                                 if rec.cloud_node.size and rec.cloud_node.size.id == size.id and rec.actor.cloud_node.get().id not in self.shutdowns)
+                                 if rec.cloud_node.size.id == size.id and rec.actor.cloud_node.get().id not in self.shutdowns)
                    if arv_node and cnode.arvados_node_missing(arv_node, self.node_stale_after))
 
     def _size_wishlist(self, size):