1 from plstackapi.planetstack.config import Config
2 from plstackapi.openstack.shell import OpenStackShell
6 def __init__(self, config = None):
8 self.config = Config(config)
10 self.config = Config()
11 self.shell = OpenStackShell()
13 def create_tenant(self, **kwds):
14 """Create keystone tenant. Suggested fields: name, description, enabled"""
15 required_fields = ['name', 'enabled', 'description']
16 for field in required_fields:
18 raise Exception, "Must specify %s" % field
20 tenants = self.shell.keystone.tenants.findall(name=kwds['name'])
22 tenant = self.shell.keystone.tenants.create(**kwds)
27 def update_tenant(self, id, **kwds):
28 return self.shell.keystone.tenants.update(self.id, **kwds)
30 def delete_tenant(self, id):
31 tenant = self.shell.keystone.tenants.find(id=id)
32 return self.shell.keystone.tenants.delete(tenant)
35 def spawn_instance(self, name, key_name=None, hostname=None, flavor=None, image=None, security_group=None, pubkeys=[]):
37 flavor = self.config.nova_default_flavor
39 image = self.config.nova_default_imave
40 if not security_group:
41 security_group = self.config.nova_default_security_group
43 authorized_keys = "\n".join(pubkeys)
44 files = {'/root/.ssh/authorized_keys': authorized_keys}
46 flavor_id = self.shell.nova.flavors.find(name=flavor)
47 images = self.shell.glance.get_images(name=image)
49 raise Exception, "Image not found: " + image
50 image_id = images[0]['id']
53 hints['force_hosts']= hostname
54 server = self.shell.nova.servers.create(
59 security_group = security_group,
61 scheduler_hints=hints)
64 def destroy_instance(self, name, id=None):
68 servers = self.shell.nova.servers.findall(**args)
69 for server in servers:
70 if name == server.name:
71 if not id or id == server.id:
72 self.shell.nova.servers.delete(server)