5 from libcloud.compute.base import NodeSize, Node, NodeDriver, NodeState
6 from libcloud.common.exceptions import BaseHTTPError
12 class FakeDriver(NodeDriver):
13 def __init__(self, *args, **kwargs):
14 self.name = "FakeDriver"
16 def list_sizes(self, **kwargs):
17 return [NodeSize("Standard_D3", "Standard_D3", 3500, 200, 0, 0, self),
18 NodeSize("Standard_D4", "Standard_D4", 7000, 400, 0, 0, self)]
20 def list_nodes(self, **kwargs):
23 def create_node(self, name=None,
27 ex_storage_account=None,
29 ex_resource_group=None,
33 global all_nodes, create_calls
35 n = Node(name, name, NodeState.RUNNING, [], [], self, size=size, extra={"tags": ex_tags})
37 ping_url = re.search(r"echo '(.*)' > /var/tmp/arv-node-data/arv-ping-url", ex_customdata).groups(1)[0] + "&instance_id=" + name
38 ctx = ssl.SSLContext(ssl.PROTOCOL_SSLv23)
39 ctx.verify_mode = ssl.CERT_NONE
40 f = urllib.urlopen(ping_url, "", context=ctx)
44 def destroy_node(self, cloud_node):
46 all_nodes = [n for n in all_nodes if n.id != cloud_node.id]
49 def get_image(self, img):
52 def ex_create_tags(self, cloud_node, tags):
55 class QuotaDriver(FakeDriver):
56 def create_node(self, name=None,
60 ex_storage_account=None,
62 ex_resource_group=None,
66 global all_nodes, create_calls, quota
67 if len(all_nodes) >= quota:
68 raise BaseHTTPError(503, "Quota exceeded")
70 return super(QuotaDriver, self).create_node(name=name,
74 ex_storage_account=ex_storage_account,
75 ex_customdata=ex_customdata,
76 ex_resource_group=ex_resource_group,
77 ex_user_name=ex_user_name,
79 ex_network=ex_network)
81 def destroy_node(self, cloud_node):
82 global all_nodes, quota
83 all_nodes = [n for n in all_nodes if n.id != cloud_node.id]
84 if len(all_nodes) == 0:
88 class FailingDriver(FakeDriver):
89 def create_node(self, name=None,
93 ex_storage_account=None,
95 ex_resource_group=None,
99 raise Exception("nope")
101 class RetryDriver(FakeDriver):
102 def create_node(self, name=None,
106 ex_storage_account=None,
108 ex_resource_group=None,
115 raise BaseHTTPError(429, "Rate limit exceeded",
116 {'retry-after': '12'})
118 return super(RetryDriver, self).create_node(name=name,
122 ex_storage_account=ex_storage_account,
123 ex_customdata=ex_customdata,
124 ex_resource_group=ex_resource_group,
125 ex_user_name=ex_user_name,
127 ex_network=ex_network)