Merge branch 'pr/25'
[arvados.git] / services / nodemanager / arvnodeman / computenode / driver / dummy.py
1 #!/usr/bin/env python
2
3 from __future__ import absolute_import, print_function
4
5 import time
6
7 import libcloud.compute.providers as cloud_provider
8 import libcloud.compute.types as cloud_types
9
10 from . import BaseComputeNodeDriver
11 from .. import arvados_node_fqdn
12
13 class ComputeNodeDriver(BaseComputeNodeDriver):
14     """Compute node driver wrapper for libcloud's dummy driver.
15
16     This class provides the glue necessary to run the node manager with a
17     dummy cloud.  It's useful for testing.
18     """
19     DEFAULT_DRIVER = cloud_provider.get_driver(cloud_types.Provider.DUMMY)
20     DEFAULT_REAL = DEFAULT_DRIVER('ComputeNodeDriver')
21     DUMMY_START_TIME = time.time()
22
23     def __init__(self, auth_kwargs, list_kwargs, create_kwargs,
24                  driver_class=DEFAULT_DRIVER):
25         super(ComputeNodeDriver, self).__init__(
26             auth_kwargs, list_kwargs, create_kwargs, driver_class)
27         if driver_class is self.DEFAULT_DRIVER:
28             self.real = self.DEFAULT_REAL
29
30     def _ensure_private_ip(self, node):
31         if not node.private_ips:
32             node.private_ips = ['10.10.0.{}'.format(node.id)]
33
34     def arvados_create_kwargs(self, arvados_node):
35         return {}
36
37     def list_nodes(self):
38         nodelist = super(ComputeNodeDriver, self).list_nodes()
39         for node in nodelist:
40             self._ensure_private_ip(node)
41         return nodelist
42
43     def create_node(self, size, arvados_node):
44         node = super(ComputeNodeDriver, self).create_node(size, arvados_node)
45         self._ensure_private_ip(node)
46         return node
47
48     def sync_node(self, cloud_node, arvados_node):
49         cloud_node.name = arvados_node_fqdn(arvados_node)
50
51     @classmethod
52     def node_fqdn(cls, node):
53         return node.name
54
55     @classmethod
56     def node_start_time(cls, node):
57         return cls.DUMMY_START_TIME