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')
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')
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
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]
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
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
""" 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):
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')]
""" 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