from sfa.util.sfalogging import logger
from sfa.util.defaultdict import defaultdict
from sfa.util.sfatime import utcparse, datetime_to_string, datetime_to_epoch
-from sfa.util.xrn import Xrn, hrn_to_urn, get_leaf, urn_to_sliver_id
+from sfa.util.xrn import Xrn, hrn_to_urn, get_leaf
from sfa.openstack.osxrn import OSXrn, hrn_to_os_slicename, hrn_to_os_tenant_name
from sfa.util.cache import Cache
from sfa.trust.credential import Credential
return rspec
def sliver_status (self, slice_urn, slice_hrn):
+ # update nova connection
+ tenant_name = OSXrn(xrn=slice_hrn, type='slice').get_tenant_name()
+ self.shell.nova_manager.connect(tenant=tenant_name)
+
# find out where this slice is currently running
project_name = hrn_to_os_slicename(slice_hrn)
instances = self.shell.nova_manager.servers.findall(name=project_name)
def create_sliver (self, slice_urn, slice_hrn, creds, rspec_string, users, options):
aggregate = OSAggregate(self)
- rspec = RSpec(rspec_string)
- instance_name = hrn_to_os_slicename(slice_hrn)
- # make sure a tenant exists for this slice
- tenant = aggregate.create_tenant(slice_hrn)
-
- # add the sfa admin user to this tenant and update our nova client connection
- # to use these credentials for the rest of this session. This emsures that the instances
- # we create will be assigned to the correct tenant.
- sfa_admin_user = self.shell.auth_manager.users.find(name=self.shell.auth_manager.opts['OS_USERNAME'])
- user_role = self.shell.auth_manager.roles.find(name='user')
- admin_role = self.shell.auth_manager.roles.find(name='admin')
- self.shell.auth_manager.roles.add_user_role(sfa_admin_user, admin_role, tenant)
- self.shell.auth_manager.roles.add_user_role(sfa_admin_user, user_role, tenant)
- self.shell.nova_manager.connect(tenant=tenant.name)
-
# assume first user is the caller and use their context
# for the ec2/euca api connection. Also, use the first users
# key as the project key.
for user in users:
pubkeys.extend(user['keys'])
- aggregate.run_instances(instance_name, rspec_string, key_name, pubkeys)
+ rspec = RSpec(rspec_string)
+ instance_name = hrn_to_os_slicename(slice_hrn)
+ tenant_name = OSXrn(xrn=slice_hrn, type='slice').get_tenant_name()
+ aggregate.run_instances(instance_name, tenant_name, rspec_string, key_name, pubkeys)
return aggregate.get_rspec(slice_xrn=slice_urn, version=rspec.version)
def delete_sliver (self, slice_urn, slice_hrn, creds, options):
aggregate = OSAggregate(self)
+ tenant_name = OSXrn(xrn=slice_hrn, type='slice').get_tenant_name()
project_name = hrn_to_os_slicename(slice_hrn)
- return aggregate.delete_instances(project_name)
+ return aggregate.delete_instances(project_name, tenant_name)
def update_sliver(self, slice_urn, slice_hrn, rspec, creds, options):
name = hrn_to_os_slicename(slice_hrn)
+ tenant_name = OSXrn(xrn=slice_hrn, type='slice').get_tenant_name()
aggregate = OSAggregate(self)
return aggregate.update_instances(name)
return 1
def stop_slice (self, slice_urn, slice_hrn, creds):
+ tenant_name = OSXrn(xrn=slice_hrn, type='slice').get_tenant_name()
name = OSXrn(xrn=slice_urn).name
aggregate = OSAggregate(self)
- return aggregate.stop_instances(name)
+ return aggregate.stop_instances(name, tenant_name)
def reset_slice (self, slice_urn, slice_hrn, creds):
raise SfaNotImplemented ("reset_slice not available at this interface")