Exemplo n.º 1
0
    def verify_users(self, slice_hrn, slice_record, users, options={}):
        slice_name = hrn_to_dummy_slicename(slice_hrn)
        users_by_email = {}
        for user in users:
            user['urn'] = user['urn'].lower()
            hrn, type = urn_to_hrn(user['urn'])
            username = get_leaf(hrn)
            user['username'] = username

            if 'email' in user:
                user['email'] = user['email'].lower() 
                users_by_email[user['email']] = user
        
        # start building a list of existing users
        existing_users_by_email = {}
        existing_slice_users_by_email = {}
        existing_users = self.driver.shell.GetUsers()
        existing_slice_users_ids = self.driver.shell.GetSlices({'slice_name': slice_name})[0]['user_ids']
        for user in existing_users:
            existing_users_by_email[user['email']] = user  
	    if user['user_id'] in existing_slice_users_ids:
                existing_slice_users_by_email[user['email']] = user
                
        add_users_by_email = set(users_by_email).difference(existing_slice_user_by_email)
        delete_users_by_email = set(existing_slice_user_by_email).difference(users_by_email)
        try:
            for user in add_users_by_email: 
                self.driver.shell.AddUser()
        except: 
            pass
Exemplo n.º 2
0
    def verify_users(self, slice_hrn, slice_record, users, options={}):
        slice_name = hrn_to_dummy_slicename(slice_hrn)
        users_by_email = {}
        for user in users:
            user['urn'] = user['urn'].lower()
            hrn, type = urn_to_hrn(user['urn'])
            username = get_leaf(hrn)
            user['username'] = username

            if 'email' in user:
                user['email'] = user['email'].lower()
                users_by_email[user['email']] = user

        # start building a list of existing users
        existing_users_by_email = {}
        existing_slice_users_by_email = {}
        existing_users = self.driver.shell.GetUsers()
        existing_slice_users_ids = self.driver.shell.GetSlices(
            {'slice_name': slice_name})[0]['user_ids']
        for user in existing_users:
            existing_users_by_email[user['email']] = user
            if user['user_id'] in existing_slice_users_ids:
                existing_slice_users_by_email[user['email']] = user

        add_users_by_email = set(users_by_email).difference(
            existing_slice_user_by_email)
        delete_users_by_email = set(existing_slice_user_by_email).difference(
            users_by_email)
        try:
            for user in add_users_by_email:
                self.driver.shell.AddUser()
        except:
            pass
Exemplo n.º 3
0
    def verify_slice(self, slice_hrn, slice_record, expiration, options={}):
        slicename = hrn_to_dummy_slicename(slice_hrn)
        parts = slicename.split("_")
        login_base = parts[0]
        slices = self.driver.shell.GetSlices({'slice_name': slicename})
        if not slices:
            slice = {'slice_name': slicename}
            # add the slice
            slice['slice_id'] = self.driver.shell.AddSlice(slice)
            slice['node_ids'] = []
            slice['user_ids'] = []
        else:
            slice = slices[0]
            if slice_record and slice_record.get('expires'):
                requested_expires = int(
                    datetime_to_epoch(utcparse(slice_record['expires'])))
                if requested_expires and slice['expires'] != requested_expires:
                    self.driver.shell.UpdateSlice({
                        'slice_id': slice['slice_id'],
                        'fields': {
                            'expires': expiration
                        }
                    })

        return slice
Exemplo n.º 4
0
 def start_slice(self, slice_urn, slice_hrn, creds):
     slicename = hrn_to_dummy_slicename(slice_hrn)
     slices = self.shell.GetSlices({"slice_name": slicename})
     if not slices:
         raise RecordNotFound(slice_hrn)
     slice_id = slices[0]["slice_id"]
     slice_enabled = slices[0]["enabled"]
     # just update the slice enabled tag
     if not slice_enabled:
         self.shell.UpdateSlice({"slice_id": slice_id, "fields": {"enabled": True}})
     return 1
Exemplo n.º 5
0
    def delete_sliver(self, slice_urn, slice_hrn, creds, options):
        slicename = hrn_to_dummy_slicename(slice_hrn)
        slices = self.shell.GetSlices({"slice_name": slicename})
        if not slices:
            return True
        slice = slices[0]

        try:
            self.shell.DeleteSliceFromNodes({"slice_id": slice["slice_id"], "node_ids": slice["node_ids"]})
            return True
        except:
            return False
Exemplo n.º 6
0
 def renew_sliver(self, slice_urn, slice_hrn, creds, expiration_time, options):
     slicename = hrn_to_dummy_slicename(slice_hrn)
     slices = self.shell.GetSlices({"slice_name": slicename})
     if not slices:
         raise RecordNotFound(slice_hrn)
     slice = slices[0]
     requested_time = utcparse(expiration_time)
     record = {"expires": int(datetime_to_epoch(requested_time))}
     try:
         self.shell.UpdateSlice({"slice_id": slice["slice_id"], "fields": record})
         return True
     except:
         return False
Exemplo n.º 7
0
    def sliver_status(self, slice_urn, slice_hrn):
        # find out where this slice is currently running
        slice_name = hrn_to_dummy_slicename(slice_hrn)

        slice = self.shell.GetSlices({"slice_name": slice_name})
        if len(slices) == 0:
            raise SliverDoesNotExist("%s (used %s as slicename internally)" % (slice_hrn, slicename))

        # report about the local nodes only
        nodes = self.shell.GetNodes({"node_ids": slice["node_ids"]})

        if len(nodes) == 0:
            raise SliverDoesNotExist("You have not allocated any slivers here")

        # get login info
        user = {}
        keys = []
        if slice["user_ids"]:
            users = self.shell.GetUsers({"user_ids": slice["user_ids"]})
            for user in users:
                keys.extend(user["keys"])

            user.update(
                {"urn": slice_urn, "login": slice["slice_name"], "protocol": ["ssh"], "port": ["22"], "keys": keys}
            )

        result = {}
        top_level_status = "unknown"
        if nodes:
            top_level_status = "ready"
        result["geni_urn"] = slice_urn
        result["dummy_login"] = slice["slice_name"]
        result["dummy_expires"] = datetime_to_string(utcparse(slice["expires"]))
        result["geni_expires"] = datetime_to_string(utcparse(slice["expires"]))

        resources = []
        for node in nodes:
            res = {}
            res["dummy_hostname"] = node["hostname"]
            res["geni_expires"] = datetime_to_string(utcparse(slice["expires"]))
            sliver_id = Xrn(slice_urn, type="slice", id=node["node_id"], authority=self.hrn).urn
            res["geni_urn"] = sliver_id
            res["geni_status"] = "ready"
            res["geni_error"] = ""
            res["users"] = [users]

            resources.append(res)

        result["geni_status"] = top_level_status
        result["geni_resources"] = resources
        return result
Exemplo n.º 8
0
 def verify_slice(self, slice_hrn, slice_record, expiration, options={}):
     slicename = hrn_to_dummy_slicename(slice_hrn)
     parts = slicename.split("_")
     login_base = parts[0]
     slices = self.driver.shell.GetSlices({'slice_name': slicename}) 
     if not slices:
         slice = {'slice_name': slicename}
         # add the slice                          
         slice['slice_id'] = self.driver.shell.AddSlice(slice)
         slice['node_ids'] = []
         slice['user_ids'] = []
     else:
         slice = slices[0]
         if slice_record and slice_record.get('expires'):
             requested_expires = int(datetime_to_epoch(utcparse(slice_record['expires'])))
             if requested_expires and slice['expires'] != requested_expires:
                 self.driver.shell.UpdateSlice( {'slice_id': slice['slice_id'], 'fields':{'expires' : expiration}})
    
     return slice
Exemplo n.º 9
0
    def get_slice_and_slivers(self, slice_xrn):
        """
        Returns a dict of slivers keyed on the sliver's node_id
        """
        slivers = {}
        slice = None
        if not slice_xrn:
            return (slice, slivers)
        slice_urn = hrn_to_urn(slice_xrn, 'slice')
        slice_hrn, _ = urn_to_hrn(slice_xrn)
        slice_name = hrn_to_dummy_slicename(slice_hrn)
        slices = self.driver.shell.GetSlices({'slice_name': slice_name})
        if not slices:
            return (slice, slivers)
        slice = slices[0]
        
        # sort slivers by node id 
        slice_nodes = []
        if 'node_ids' in slice.keys():
            slice_nodes = self.driver.shell.GetNodes({'node_ids': slice['node_ids']}) 
        for node in slice_nodes:
            slivers[node['node_id']] = node  

        return (slice, slivers)
Exemplo n.º 10
0
    def get_slivers(self, xrn, node=None):
        hrn, type = urn_to_hrn(xrn)
         
        slice_name = hrn_to_dummy_slicename(hrn)
        
        slices = self.driver.shell.GetSlices({'slice_name': slice_name})
        slice = slices[0]
        # Build up list of users and slice attributes
        user_ids = slice['user_ids']
        # Get user information
        all_users_list = self.driver.shell.GetUsers({'user_id':user_ids})
        all_users = {}
        for user in all_users_list:
            all_users[user['user_id']] = user        

        # Build up list of keys
        all_keys = set()
        for user in all_users_list:
            all_keys.extend(user['keys'])

        slivers = []
        for slice in slices:
            keys = all_keys
            # XXX Sanity check; though technically this should be a system invariant
            # checked with an assertion
            if slice['expires'] > MAXINT:  slice['expires']= MAXINT
            
            slivers.append({
                'hrn': hrn,
                'name': slice['name'],
                'slice_id': slice['slice_id'],
                'expires': slice['expires'],
                'keys': keys,
            })

        return slivers
Exemplo n.º 11
0
    def get_slice_and_slivers(self, slice_xrn):
        """
        Returns a dict of slivers keyed on the sliver's node_id
        """
        slivers = {}
        slice = None
        if not slice_xrn:
            return (slice, slivers)
        slice_urn = hrn_to_urn(slice_xrn, 'slice')
        slice_hrn, _ = urn_to_hrn(slice_xrn)
        slice_name = hrn_to_dummy_slicename(slice_hrn)
        slices = self.driver.shell.GetSlices({'slice_name': slice_name})
        if not slices:
            return (slice, slivers)
        slice = slices[0]
        
        # sort slivers by node id 
        slice_nodes = []
        if 'node_ids' in slice.keys():
            slice_nodes = self.driver.shell.GetNodes({'node_ids': slice['node_ids']}) 
        for node in slice_nodes:
            slivers[node['node_id']] = node  

        return (slice, slivers)
Exemplo n.º 12
0
    def sfa_fields_to_dummy_fields(self, type, hrn, sfa_record):

        dummy_record = {}

        if type == "slice":
            dummy_record["slice_name"] = hrn_to_dummy_slicename(hrn)

        elif type == "node":
            if "hostname" not in sfa_record:
                raise MissingSfaInfo("hostname")
            dummy_record["hostname"] = sfa_record["hostname"]
            if "type" in sfa_record:
                dummy_record["type"] = sfa_record["type"]
            else:
                dummy_record["type"] = "dummy_type"

        elif type == "authority":
            dummy_record["name"] = hrn

        elif type == "user":
            dummy_record["user_name"] = sfa_record["email"].split("@")[0]
            dummy_record["email"] = sfa_record["email"]

        return dummy_record
Exemplo n.º 13
0
    def sfa_fields_to_dummy_fields(self, type, hrn, sfa_record):

        dummy_record = {}

        if type == "slice":
            dummy_record["slice_name"] = hrn_to_dummy_slicename(hrn)

        elif type == "node":
            if "hostname" not in sfa_record:
                raise MissingSfaInfo("hostname")
            dummy_record["hostname"] = sfa_record["hostname"]
            if "type" in sfa_record:
                dummy_record["type"] = sfa_record["type"]
            else:
                dummy_record["type"] = "dummy_type"

        elif type == "authority":
            dummy_record["name"] = hrn

        elif type == "user":
            dummy_record["user_name"] = sfa_record["email"].split('@')[0]
            dummy_record["email"] = sfa_record["email"]

        return dummy_record
Exemplo n.º 14
0
    def get_slivers(self, xrn, node=None):
        hrn, type = urn_to_hrn(xrn)

        slice_name = hrn_to_dummy_slicename(hrn)

        slices = self.driver.shell.GetSlices({'slice_name': slice_name})
        slice = slices[0]
        # Build up list of users and slice attributes
        user_ids = slice['user_ids']
        # Get user information
        all_users_list = self.driver.shell.GetUsers({'user_id': user_ids})
        all_users = {}
        for user in all_users_list:
            all_users[user['user_id']] = user

        # Build up list of keys
        all_keys = set()
        for user in all_users_list:
            all_keys.extend(user['keys'])

        slivers = []
        for slice in slices:
            keys = all_keys
            # XXX Sanity check; though technically this should be a system invariant
            # checked with an assertion
            if slice['expires'] > MAXINT: slice['expires'] = MAXINT

            slivers.append({
                'hrn': hrn,
                'name': slice['name'],
                'slice_id': slice['slice_id'],
                'expires': slice['expires'],
                'keys': keys,
            })

        return slivers