Exemple #1
0
    def delete(self, lv_name):
        """Delete logical volume; return True."""
        lv_name = common.validate_hostname(
            lv_name)  # LV names are always hostnames

        args = ['lvremove', '-f', '%s/%s' % (self.vg_name, lv_name)]
        str_args = " ".join(args)
        msg = "Running " + str_args
        self.log.debug(msg)
        try:
            result = subprocess.Popen(args,
                                      stdout=subprocess.PIPE,
                                      stderr=subprocess.PIPE,
                                      close_fds=True)
        except Exception:
            msg = 'Running command %s failed' % str_args
            #trace = traceback.format_exec()
            raise error.SpokeError(msg)

        data = result.communicate()
        stdout = data[0]
        stderr = data[1]
        msg = "Command stdout was: %s, stderr was: %s" % (stdout, stderr)
        self.log.debug(msg)

        if "Volume group \"%s\" not found" % self.vg_name in stderr:
            msg = "volume group '%s' was not found." % self.vg_name
            raise error.NotFound(msg)
        elif "logical volume(s) not found" in stderr:
            msg = "logical volume '%s' not found." % lv_name
            raise error.NotFound(msg)

        # Catch non-specific errors
        if result.returncode != 0:
            msg = "Delete command returned non-zero: %s stdout was: %s, stderr was: %s" % \
                                                        (result.returncode, stdout, stderr)
            raise error.LVMError(msg)

        result = self.get(lv_name)
        if result['exit_code'] == 3 and result['count'] == 0:
            result['msg'] = "Deleted %s:" % result['type']
            self.log.debug('Result: %s' % result)
            return result
        else:
            msg = 'Delete operation returned OK, but object still there?'
            raise error.SearchError(msg)
Exemple #2
0
 def delete(self):
     """Delete subnet kv stores; return True."""
     if not (self.network and self.mask):
         msg = 'Please specify ip and mask'
         raise error.InputError(msg)
     if self.get()['data'] == []:
         msg = "cannot delete as already missing"
         raise error.NotFound, msg
     # Delete kv stores
     self.KV.delete(self.kv_aloc)
     self.KV.delete(self.kv_free)
     result = self.get()
     if result['exit_code'] == 3 and result['count'] == 0:
         result['msg'] = "Deleted %s:" % result['type']
         return result
     else:
         msg = 'Delete operation returned OK, but object still there?'
         raise error.SearchError(msg)
Exemple #3
0
 def delete(self, mac):
     """Deletes file self.tftp_root/pxelinux.cfg/01-<mac>"""
     mac = common.validate_mac(mac)
     mac_file = string.replace(mac, ":",
                               "-")  #Format for use on tftp filesystem
     dst = self.tftp_dir + self.tftp_prefix + mac_file
     #Make sure the file exists before deleting
     if os.path.lexists(dst):
         self.log.debug('Deleting link to mac %s' % mac)
         os.unlink(dst)
     else:
         msg = "Link to mac %s doesn't exist, can't delete" % mac
         raise error.NotFound, msg
     result = self.search(mac)
     if result['exit_code'] == 3 and result['count'] == 0:
         result['msg'] = "Deleted %s" % result['type']
         return result
     else:
         msg = 'Delete operation returned OK, but object still there?'
         raise error.SearchError(msg)
Exemple #4
0
 def delete(self, vm_name):
     '''Remove a definition from store, will fail on xen if machine is running'''
     if vm_name == None:
         msg = "InputError: vm name must be specified with delete."
         raise error.InputError(msg)
     try:
         dom = self.conn.lookupByName(vm_name)
     except libvirt.libvirtError:
         msg = "VM definition for %s doesn't exist, can't delete." % vm_name
         raise error.NotFound(msg)
     try:
         dom.undefine()
     except libvirt.libvirtError:
         msg = "VM %s is running (shutdown first?), can't delete." % vm_name
         raise error.VMRunning(msg)
     #self.conn.close()
     result = self.get(vm_name)
     if result['exit_code'] == 3 and result['count'] == 0:
         result['msg'] = "Deleted %s:" % result['type']
         return result
     else:
         msg = 'Delete operation returned OK, but object still there?'
         raise error.SearchError(msg)