def test_ls_no_args(self):
     volumes = vmdk_utils.get_volumes(None)
     header = vmdkops_admin.all_ls_headers()
     rows = vmdkops_admin.generate_ls_rows(None)
     self.assertEqual(EXPECTED_COLUMN_COUNT, len(header))
     self.assertEqual(len(volumes), len(rows))
     for i in range(len(volumes)):
         self.assertEqual(volumes[i]['filename'], rows[i][0] + '.vmdk')
Esempio n. 2
0
 def test_ls_no_args(self):
     volumes = vmdk_utils.get_volumes(None)
     header = vmdkops_admin.all_ls_headers()
     rows = vmdkops_admin.generate_ls_rows(None)
     self.assertEqual(EXPECTED_COLUMN_COUNT, len(header))
     self.assertEqual(len(volumes), len(rows))
     for i in range(len(volumes)):
         self.assertEqual(volumes[i]['filename'], rows[i][0] + '.vmdk')
 def test_ls_no_args(self):
     volumes = vmdk_utils.get_volumes(None)
     header = vmdkops_admin.all_ls_headers()
     rows = vmdkops_admin.generate_ls_rows(None)
     expected_column_count = 11
     self.assertEqual(expected_column_count, len(header))
     self.assertEqual(len(volumes), len(rows))
     for i in range(len(volumes)):
         self.assertEqual(volumes[i]['filename'], rows[i][0] + '.vmdk')
Esempio n. 4
0
 def test_ls_no_args(self):
     volumes = vmdk_utils.get_volumes()
     header = vmdkops_admin.all_ls_headers()
     rows = vmdkops_admin.generate_ls_rows()
     expected_column_count = 11
     self.assertEqual(expected_column_count, len(header))
     self.assertEqual(len(volumes), len(rows))
     for i in range(len(volumes)):
         self.assertEqual(volumes[i]['filename'], rows[i][0] + '.vmdk')
Esempio n. 5
0
    def _remove_volumes_for_tenant(self, tenant_id):
        """ Delete all volumes belongs to this tenant.

            Do not use it outside of removing a tenant.

        """
        try:
            cur = self.conn.execute("SELECT name FROM tenants WHERE id = ?",
                                    (tenant_id, ))
            result = cur.fetchone()
        except sqlite3.Error as e:
            logging.error("Error %s when querying from tenants table", e)
            return str(e)

        error_info = ""
        if result:
            logging.debug("remove_volumes_for_tenant: %s %s", tenant_id,
                          result)
            tenant_name = result[0]
            vmdks = vmdk_utils.get_volumes(tenant_name)
            # Delete all volumes for this tenant.
            dir_paths = set()
            for vmdk in vmdks:
                vmdk_path = os.path.join(vmdk['path'],
                                         "{0}".format(vmdk['filename']))
                dir_paths.add(vmdk['path'])
                logging.debug("path=%s filename=%s", vmdk['path'],
                              vmdk['filename'])
                logging.debug("Deleting volume path%s", vmdk_path)
                err = vmdk_ops.removeVMDK(vmdk_path)
                if err:
                    logging.error("remove vmdk %s failed with error %s",
                                  vmdk_path, err)
                    error_info += err

            # Delete path /vmfs/volumes/datastore_name/tenant_name
            logging.debug("Deleting dir paths %s", dir_paths)
            for path in list(dir_paths):
                try:
                    os.rmdir(path)
                except os.error as e:
                    msg = "remove dir {0} failed with error {1}".format(
                        path, e)
                    logging.error(msg)
                    error_info += msg

        err = self.remove_volumes_from_volume_table(tenant_id)
        if err:
            logging.error("Failed to remove volumes from database %s", err)
            error_info += err

        if error_info:
            return error_info

        return None
Esempio n. 6
0
def listVMDK(vm_datastore):
    """
    Returns a list of volume names (note: may be an empty list).
    Each volume name is returned as either `volume@datastore`, or just `volume`
    for volumes on vm_datastore
    """
    vmdks = vmdk_utils.get_volumes()
    # build  fully qualified vol name for each volume found
    return [{u'Name': get_full_vol_name(x['filename'], x['datastore'], vm_datastore),
             u'Attributes': {}} \
            for x in vmdks]
Esempio n. 7
0
def listVMDK(vm_datastore):
    """
    Returns a list of volume names (note: may be an empty list).
    Each volume name is returned as either `volume@datastore`, or just `volume`
    for volumes on vm_datastore
    """
    vmdks = vmdk_utils.get_volumes()
    # build  fully qualified vol name for each volume found
    return [{u'Name': get_full_vol_name(x['filename'], x['datastore'], vm_datastore),
             u'Attributes': {}} \
            for x in vmdks]
Esempio n. 8
0
def list_volumes_and_policies():
    """ Return a list of vmdks and the policies in use"""
    vmdks_and_policies = []
    path = vsan_info.get_vsan_dockvols_path()
    if not path:
        return []

    for volume in vmdk_utils.get_volumes("*"):
        logging.debug("volume data is %s", volume)
        policy = kv_get_vsan_policy_name(os.path.join(volume['path'], volume['filename']))
        vmdks_and_policies.append({'volume': volume['filename'], 'policy': policy,
                                    'path': volume['path']})
    return vmdks_and_policies
def generate_ls_rows():
    """ Gather all volume metadata into rows that can be used to format a table """
    rows = []
    for v in vmdk_utils.get_volumes():
        path = os.path.join(v['path'], v['filename'])
        name = vmdk_utils.strip_vmdk_extension(v['filename'])
        metadata = get_metadata(path)
        attached_to = get_attached_to(metadata)
        policy = get_policy(metadata, path)
        size_info = get_vmdk_size_info(path)
        created, created_by = get_creation_info(metadata)
        rows.append([name, v['datastore'], created_by, created, attached_to,
                     policy, size_info['capacity'], size_info['used']])
    return rows
Esempio n. 10
0
def generate_ls_rows():
    """ Gather all volume metadata into rows that can be used to format a table """
    rows = []
    for v in vmdk_utils.get_volumes():
        path = os.path.join(v['path'], v['filename'])
        name = vmdk_utils.strip_vmdk_extension(v['filename'])
        metadata = get_metadata(path)
        attached_to = get_attached_to(metadata)
        policy = get_policy(metadata, path)
        size_info = get_vmdk_size_info(path)
        created, created_by = get_creation_info(metadata)
        rows.append([name, v['datastore'], created_by, created, attached_to,
                     policy, size_info['capacity'], size_info['used']])
    return rows
def generate_ls_rows(tenant_reg):
    """ Gather all volume metadata into rows that can be used to format a table """
    rows = []
    for v in vmdk_utils.get_volumes(tenant_reg):
        if 'tenant' not in v or v['tenant'] == auth_data_const.ORPHAN_TENANT:
            tenant = 'N/A'
        else:
            tenant = v['tenant']
        path = os.path.join(v['path'], v['filename'])
        name = vmdk_utils.strip_vmdk_extension(v['filename'])
        metadata = get_metadata(path)
        attached_to = get_attached_to(metadata)
        policy = get_policy(metadata, path)
        size_info = get_vmdk_size_info(path)
        created, created_by = get_creation_info(metadata)
        diskformat = get_diskformat(metadata)
        fstype = get_fstype(metadata)
        access = get_access(metadata)
        attach_as = get_attach_as(metadata)
        rows.append([name, v['datastore'], tenant, size_info['capacity'], size_info['used'], fstype, policy,
                     diskformat, attached_to, access, attach_as, created_by, created])

    return rows
Esempio n. 12
0
        """
        try:
            cur = self.conn.execute(
            "SELECT name FROM tenants WHERE id = ?",
            (tenant_id,)
            )
            result = cur.fetchone()
        except sqlite3.Error, e:
            logging.error("Error %s when querying from tenants table", e)
            return str(e)

        error_info = ""
        if result:    
            logging.debug("remove_volumes_for_tenant: %s %s", tenant_id, result)
            tenant_name = result[0]
            vmdks = vmdk_utils.get_volumes(tenant_name)
            # Delete all volumes for this tenant. 
            dir_paths = set()
            for vmdk in vmdks:
                vmdk_path = os.path.join(vmdk['path'], "{0}".format(vmdk['filename']))
                dir_paths.add(vmdk['path'])
                logging.debug("path=%s filename=%s", vmdk['path'], vmdk['filename'])    
                logging.debug("Deleting volume path%s", vmdk_path)
                err = vmdk_ops.removeVMDK(vmdk_path)
                if err:
                    logging.error("remove vmdk %s failed with error %s", vmdk_path, err)
                    error_info += err
            
            # Delete path /vmfs/volumes/datastore_name/tenant_name
            logging.debug("Deleting dir paths %s", dir_paths)
            for path in list(dir_paths):
Esempio n. 13
0
 def get_testvols(self):
     return [
         x for x in vmdk_utils.get_volumes(None)
         if x['filename'].startswith('testvol')
     ]
 def get_testvols(self):
     return [
         x for x in vmdk_utils.get_volumes()
         if x['filename'].startswith('VmdkAttachDetachTestVol')
     ]
 def get_testvols(self):
     return [x
             for x in vmdk_utils.get_volumes(None)
             if x['filename'].startswith('testvol')]
Esempio n. 16
0
        """ Delete all volumes belongs to this tenant.

            Do not use it outside of removing a tenant.

        """
        try:
            cur = self.conn.execute("SELECT name FROM tenants WHERE id = ?",
                                    (tenant_id, ))
            result = cur.fetchone()
        except sqlite3.Error, e:
            logging.error("Error %s when querying from tenants table", e)
            return str(e)

        logging.debug("remove_volumes_for_tenant: %s %s", tenant_id, result)
        tenant_name = result[0]
        vmdks = vmdk_utils.get_volumes(tenant_name)
        # Delete all volumes for this tenant.
        dir_path = None
        for vmdk in vmdks:
            vmdk_path = os.path.join(vmdk['path'],
                                     "{0}".format(vmdk['filename']))
            if not dir_path:
                dir_path = vmdk['path']
            print("path=%s filename=%s", vmdk['path'], vmdk['filename'])
            logging.debug("Deleting volume path%s", vmdk_path)
            err = vmdk_ops.removeVMDK(vmdk_path)
            if err:
                logging.error("remove vmdk %s failed with error %s", vmdk_path,
                              err)
                if err:
                    return err
    def _remove_volumes_for_tenant(self, tenant_id):
        """ Delete all volumes belongs to this tenant.

            Do not use it outside of removing a tenant.

        """
        try:
            cur = self.conn.execute("SELECT name FROM tenants WHERE id = ?",
                                    (tenant_id, ))
            result = cur.fetchone()
        except sqlite3.Error as e:
            logging.error("Error %s when querying from tenants table", e)
            return str(e)

        error_msg = ""
        if result:
            logging.debug("remove_volumes_for_tenant: %s %s", tenant_id,
                          result)
            tenant_name = result[0]
            vmdks = vmdk_utils.get_volumes(tenant_name)
            # Delete all volumes for this tenant.
            dir_paths = set()
            for vmdk in vmdks:
                vmdk_path = os.path.join(vmdk['path'],
                                         "{0}".format(vmdk['filename']))
                dir_paths.add(vmdk['path'])
                logging.debug("path=%s filename=%s", vmdk['path'],
                              vmdk['filename'])
                logging.debug("Deleting volume path%s", vmdk_path)
                datastore_url = vmdk_utils.get_datastore_url(vmdk['datastore'])
                err = vmdk_ops.removeVMDK(
                    vmdk_path=vmdk_path,
                    vol_name=vmdk_utils.strip_vmdk_extension(vmdk['filename']),
                    vm_name=None,
                    tenant_uuid=tenant_id,
                    datastore_url=datastore_url)
                if err:
                    logging.error("remove vmdk %s failed with error %s",
                                  vmdk_path, err)
                    error_msg += str(err)

            VOL_RM_LOG_PREFIX = "Tenant <name> %s removal: "
            # delete the symlink /vmfs/volume/datastore_name/tenant_name
            # which point to /vmfs/volumes/datastore_name/tenant_uuid
            for (datastore, url, path) in vmdk_utils.get_datastores():
                dockvol_path, tenant_path = get_dockvol_path_tenant_path(
                    datastore_name=datastore, tenant_id=tenant_id)
                logging.debug(
                    VOL_RM_LOG_PREFIX + "try to remove symlink to %s",
                    tenant_name, tenant_path)

                if os.path.isdir(tenant_path):
                    exist_symlink_path = os.path.join(dockvol_path,
                                                      tenant_name)
                    if os.path.isdir(exist_symlink_path):
                        os.remove(exist_symlink_path)
                        logging.debug(
                            VOL_RM_LOG_PREFIX + "removing symlink %s",
                            tenant_name, exist_symlink_path)

            # Delete path /vmfs/volumes/datastore_name/tenant_uuid
            logging.debug("Deleting dir paths %s", dir_paths)
            for path in list(dir_paths):
                try:
                    os.rmdir(path)
                except os.error as e:
                    msg = "remove dir {0} failed with error {1}".format(
                        path, e)
                    logging.error(msg)
                    error_msg += str(err)

        err = self.remove_volumes_from_volumes_table(tenant_id)
        if err:
            logging.error("Failed to remove volumes from database %s", err)
            error_msg += str(err)

        if error_msg:
            return error_msg

        return None