class OpenStackDriver:
- def __init__(self, config = None, client=None):
+ def __init__(self, config = None, client=None, deployment=None):
if config:
self.config = Config(config)
else:
- self.config = Config()
+ self.config = Config()
- self.admin_client = OpenStackClient()
+ self.admin_client = OpenStackClient(deployment=deployment)
self.admin_user = self.admin_client.keystone.users.find(name=self.admin_client.keystone.username)
if client:
self.shell = client
else:
- self.shell = OpenStackClient()
+ self.shell = OpenStackClient(deployment=deployment)
self.enabled = manager_enabled
self.has_openstack = has_openstack
- def client_driver(self, caller=None, tenant=None):
+ def client_driver(self, caller=None, tenant=None, deployment=None):
if caller:
auth = {'username': caller.email,
'password': hashlib.md5(caller.password).hexdigest()[:6],
'tenant': tenant}
- client = OpenStackClient(**auth)
+ client = OpenStackClient(deployment=deployment, **auth)
else:
- client = OpenStackClient(tenant=tenant)
- driver = OpenStackDriver(client=client)
+ client = OpenStackClient(tenant=tenant, deployment=deployment)
+
+ driver = OpenStackDriver(client=client, deployment=deployment)
return driver
- def admin_driver(self, tenant=None):
- client = OpenStackClient(tenant=tenant)
- driver = OpenStackDriver(client=client)
+ def admin_driver(self, tenant=None, deployment=None):
+ client = OpenStackClient(tenant=tenant, deployment=deployment)
+ driver = OpenStackDriver(client=client, deployment=deployment)
+ return driver
def create_role(self, name):
roles = self.shell.keystone.roles.findall(name=name)
for key in keys:
self.shell.nova.keypairs.delete(key)
self.shell.keystone.users.delete(user)
- return 1
+ return 1
+
+ def get_admin_role(self):
+ role = None
+ for admin_role_name in ['admin', 'Admin']:
+ roles = self.shell.keystone.roles.findall(name=admin_role_name)
+ if roles:
+ role = roles[0]
+ break
+ return role
def add_user_role(self, kuser_id, tenant_id, role_name):
user = self.shell.keystone.users.find(id=kuser_id)
tenant = self.shell.keystone.tenants.find(id=tenant_id)
- role = self.shell.keystone.roles.find(name=role_name)
+ # admin role can be lowercase or title. Look for both
+ role = None
+ if role_name.lower() == 'admin':
+ role = self.get_admin_role()
+ else:
+ # look up non admin role or force exception when admin role isnt found
+ role = self.shell.keystone.roles.find(name=role_name)
role_found = False
user_roles = user.list_roles(tenant.id)
def delete_user_role(self, kuser_id, tenant_id, role_name):
user = self.shell.keystone.users.find(id=kuser_id)
tenant = self.shell.keystone.tenants.find(id=tenant_id)
- role = self.shell.keystone.roles.find(name=role_name)
+ # admin role can be lowercase or title. Look for both
+ role = None
+ if role_name.lower() == 'admin':
+ role = self.get_admin_role()
+ else:
+ # look up non admin role or force exception when admin role isnt found
+ role = self.shell.keystone.roles.find(name=role_name)
role_found = False
user_roles = user.list_roles(tenant.id)
if not security_group:
security_group = self.config.nova_default_security_group
- files = {}
+ personality = []
if pubkeys:
- files['/root/.ssh/authorized_keys'] = "\n".join(pubkeys)
-
+ personality.append({
+ 'path': '/root/.ssh/authorized_keys',
+ 'contents':"\n".join(pubkeys),
+ })
hints = {}
availability_zone = None
if hostname:
- availability_zone = 'nova:%s' % hostname
+ availability_zone = 'nova:%s' % hostname.split('.')[0]
server = self.shell.nova.servers.create(
name=name,
key_name = key_name,
flavor=flavor.id,
image=image_id,
security_group = security_group,
- files=files,
+ personality = personality,
scheduler_hints=hints,
availability_zone=availability_zone,
nics=nics,
+ networks=nics,
meta=metadata)
return server