9120: search_for_now falls back to real driver methods when needed.
[arvados.git] / services / nodemanager / arvnodeman / computenode / driver / ec2.py
index 588ca515a9cf3f55abe0b4091928a4c153e41541..8deabbd50a6163da537193d0df39ac720f1d04d0 100644 (file)
@@ -64,13 +64,10 @@ class ComputeNodeDriver(BaseComputeNodeDriver):
     def _init_subnet_id(self, subnet_id):
         return 'ex_subnet', self.search_for(subnet_id, 'ex_list_subnets')
 
-    def _init_ssh_key(self, filename):
-        with open(filename) as ssh_file:
-            key = cloud_base.NodeAuthSSHKey(ssh_file.read())
-        return 'auth', key
+    create_cloud_name = staticmethod(arvados_node_fqdn)
 
-    def arvados_create_kwargs(self, arvados_node):
-        return {'name': arvados_node_fqdn(arvados_node),
+    def arvados_create_kwargs(self, size, arvados_node):
+        return {'name': self.create_cloud_name(arvados_node),
                 'ex_userdata': self._make_ping_url(arvados_node)}
 
     def post_create_node(self, cloud_node):
@@ -80,6 +77,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
@@ -89,3 +94,7 @@ class ComputeNodeDriver(BaseComputeNodeDriver):
         time_str = node.extra['launch_time'].split('.', 2)[0] + 'UTC'
         return time.mktime(time.strptime(
                 time_str,'%Y-%m-%dT%H:%M:%S%Z')) - time.timezone
+
+    @classmethod
+    def node_id(cls, node):
+        return node.id