Beispiel #1
0
    def register_user(self, sfa_record, hrn, pub_key):
        aggregate = OSAggregate(self)

        # Get the authority tenant info for initialization of a user
        auth_hrn = Xrn(hrn).get_authority_hrn()
        auth_tenant_name = OSXrn(xrn=auth_hrn, type='authority').get_tenant_name() 
        auth_tenant = self.shell.auth_manager.tenants.find(name=auth_tenant_name)

        # Create a user based on the auth tenant
        user_name = sfa_record.get('hrn')
        email = sfa_record.get('email', None)
        user = aggregate.create_user(user_name=user_name, password=user_name, \
                                     tenant_id=auth_tenant.id, email=email, enabled=True) 

        keys = sfa_record.get('keys', [])
        for key in keys:
            keyname = OSXrn(xrn=hrn, type='user').get_slicename()
            # Update connection for the current user
            self.shell.compute_manager.connect(username=user.name, tenant=auth_tenant.name, \
                                               password=user.name)
            self.shell.compute_manager.keypairs.create(name=keyname, public_key=key)

        # Update initial connection info
        self.init_compute_manager_conn()
        return user
Beispiel #2
0
    def register_federation(self, user_hrn, slice_hrn, keys, email=None):
        aggregate = OSAggregate(self)

        # Create a slice of the federation user
        tenant = aggregate.create_tenant(tenant_name=slice_hrn, description=user_hrn)
        # Create a user of the federation user
        user = aggregate.create_user(user_name=user_hrn,  password=user_hrn, \
                                     tenant_id=tenant.id, email=email, enabled=True)

        # Check if the user has roles or not 
        member_role = self.shell.auth_manager.roles.find(name='Member')
        if self.shell.auth_manager.roles.roles_for_user(user, tenant).count(member_role) == 0:
            self.shell.auth_manager.roles.add_user_role(user, member_role, tenant)
        
        # Check if keys exist or not
        if keys is not None: 
            # Check if the user has keys or not
            if len(keys) < 1:
                key = None
            else:
                key = keys[0]
            keyname = OSXrn(xrn=user_hrn, type='user').get_slicename()

            # Update connection for the current client 
            self.shell.compute_manager.connect(username=user.name, tenant=tenant.name, password=user_hrn)
            keypair_list = self.shell.compute_manager.keypairs.list()
            for keypair in keypair_list:
                if keyname == keypair.name:
                    break
            else:
                self.shell.compute_manager.keypairs.create(name=keyname, public_key=key)

            # Update initial connection info
            self.init_compute_manager_conn()
            logger.info( "The federation user[%s] has the slice[%s] as member role." % \
                         (user.name, tenant.name)                                      ) 
            return user