Esempio n. 1
0
 def remove_initiator_allow(self, id):
     target = self._generate_target_name(id)
     with lock.ResourceFile(self.initiators_allow):
         initiators = self._scan_initiators()
         if target not in initiators:
             return
         initiators.pop(target, None)
         self._rewrite_initiators(initiators)
Esempio n. 2
0
 def add_initiator_allow(self, id, ip):
     allow = self.default_allows
     if ip:
         for subnet in self.allow_subnets:
             if ip in subnet:
                 allow = ip
                 break
     target = self._generate_target_name(id)
     with lock.ResourceFile(self.initiators_allow):
         initiators = self._scan_initiators()
         initiators[target].append(allow)
         self._rewrite_initiators(initiators)
Esempio n. 3
0
    def create(self, id, ip=None):
        with lock.ResourceFile(self._build_lock_path(id)):
            try:
                # see if an export was created while we were locking
                self.get(id)
            except NotFound:
                pass
            else:
                raise AlreadyExists("An export already exists for "
                                    "volume '%s'" % id)
            # create target
            params = {'Name': self._generate_target_name(id)}
            try:
                out = self.ietadm(op='new', tid='auto', params=params)
            except InvalidArgument:
                logger.exception("Unable to create target for '%s'" % id)
                raise ServiceUnavailable("Invalid argument while trying to "
                                         "create export for '%s'" % id)
            # lookup tid
            tid = self._get_tid(id)
            # add lun
            path = self._lun_path(id)
            params = {'Path': path, 'Type': 'blockio'}
            try:
                out += self.ietadm(op='new', tid=tid, lun=0, params=params)
            except (NoSuchFile, NotPermitted):
                # clean up the target
                self.delete(id)
                if not os.path.exists(path):
                    raise NotFound("No volume named '%s'" % id)
                logger.exception('Unable to create export for %s' % id)
                raise ServiceUnavailable("Invalid param trying to create "
                                         "export for '%s'" % id)
        # Write the new exports to the iet config
        exports = self.rewrite_config()

        if ip:
            self.add_initiator_allow(id, ip)

        return self.get(id, exports=exports)