added destroy_instances()
[plcapi.git] / PLC / Slices.py
index 6c60b4d..21a8ccf 100644 (file)
@@ -119,7 +119,7 @@ class Slice(AlchemyObj):
                                               'node_id': node['node_id']})
             slice_node.sync()
 
-    def spawn_instances(self, nodes, caller):
+    def spawn_instances(self, nodes):
         # use the caller's nova keypair
         keypairs = self.api.client_shell.nova.keypairs.list()
         if not keypairs:
@@ -186,12 +186,25 @@ class Slice(AlchemyObj):
                 if not images:
                     raise PLCInvalidArgument('Image bot found')
                 image_id = images[0]['id']
-                self.api.client_shell.nova.servers.create(flavor=flavor_id,
-                                                     image=image_id,
-                                                     key_name = key_name,
-                                                     security_group = security_group,
-                                                     files=files,
-                                                     name=self['name'])              
+                hints = {'force_hosts': node['hostname']}
+                self.api.client_shell.nova.servers.create(name=self['name'],
+                                                    flavor=flavor_id,
+                                                    image=image_id,
+                                                    key_name = key_name,
+                                                    security_group = security_group,
+                                                    files=files,
+                                                    scheduler_hints=hints)             
+
+    def destroy_instances(self, nodes):
+        hostnames = [n['hostname'] for n in nodes]
+        servers = self.api.client_shell.nova.servers.list()
+        for server in servers:
+            name = server.name
+            hostname = server._info['OS-EXT-SRV-ATTR:host']
+            if self['name'] == name and hostname in hostnames:
+                self.api.client_shell.nova.servers.delete(server)
+                
+             
  
     def remove_node(self, node_filter, commit=True):
         from PLC.Nodes import Nodes