generated: '2026-07-21' method: derived source: openapi/vastdata-vms-openapi.json notes: 'Entity-relationship graph of the VAST Management System (VMS) REST API, derived from $ref links and *_id reference fields across the 319 component schemas of the published OpenAPI 3.0.3 document. Cluster and Tenant are the dominant aggregation roots: most hardware entities (CBox/DBox/CNode/DNode/Rack/Fan/Carrier) belong_to Cluster, while data-path entities (Views, Quotas, VIP pools, S3 keys, Kafka broker configs, encryption groups) belong_to Tenant.' entities: 319 core_entities: - Cluster - Tenant - View - ViewPolicy - Snapshot - Quota - User - Group - VipPool - CNode - DNode - CBox - DBox - Rack - Volume - BlockHost - Topic - ProtectionPolicy - ProtectedPath - S3Policy relationships: - from: ActiveDirectory kind: has_one to: LastMaPwdRenewalStatus via: last_ma_pwd_renewal_status - from: ActiveDirectory kind: has_one to: Ldap via: ldap - from: ActiveDirectory kind: belongs_to to: Ldap via: ldap_id - from: ActiveDirectory kind: belongs_to to: Tenant via: tenant_id - from: BGPConfigRackItem kind: belongs_to to: Rack via: rack_id - from: BGPSessionStatePerPort kind: belongs_to to: Rack via: rack_id - from: BGPTableItem kind: belongs_to to: CNode via: cnode_id - from: BGPTableItem kind: belongs_to to: Rack via: rack_id - from: BaseQuota kind: belongs_to to: Cluster via: cluster_id - from: BaseQuota kind: has_one to: DefaultQuota via: default_group_quota - from: BaseQuota kind: has_one to: DefaultQuota via: default_user_quota - from: BaseQuota kind: has_many to: PartialUserQuota via: group_quotas - from: BaseQuota kind: belongs_to to: Tenant via: tenant_id - from: BaseQuota kind: has_many to: PartialUserQuota via: user_quotas - from: BaseVippoolCreateParams kind: belongs_to to: Cluster via: cluster_id - from: BaseVippoolCreateParams kind: belongs_to to: Tenant via: tenant_id - from: BlobExpansionHierarchy kind: belongs_to to: Tenant via: tenant_id - from: BlobExpansionOutput kind: has_many to: Column via: columns - from: BlockHost kind: has_one to: ArbitraryStringsObject via: tags - from: BlockHost kind: belongs_to to: Tenant via: tenant_id - from: BlockMapping kind: has_one to: PartialBlockHostInfo via: block_host - from: BlockMapping kind: has_one to: SnapshotData via: snapshot_data - from: BlockMapping kind: has_one to: PartialVolumeInfo via: volume - from: BlockMappingByPathPair kind: belongs_to to: Host via: host_id - from: BlockMappingPair kind: belongs_to to: Host via: host_id - from: BlockMappingPair kind: belongs_to to: Volume via: volume_id - from: CBox kind: belongs_to to: Cluster via: cluster_id - from: CBox kind: belongs_to to: Rack via: rack_id - from: CNode kind: belongs_to to: CBox via: cbox_id - from: CNode kind: belongs_to to: Cluster via: cluster_id - from: Carrier kind: belongs_to to: Cluster via: cluster_id - from: Carrier kind: belongs_to to: DBox via: dbox_id - from: Cluster kind: has_one to: ArbitraryFloatsObject via: max_performance_metrics - from: Cluster kind: has_one to: TruncatedQOS via: qos - from: ColumnDeleteParams kind: has_one to: TabularColumnArrowSchema via: arrow_schema - from: ColumnDeleteParams kind: belongs_to to: Tenant via: tenant_id - from: ComputeClusterCreateParams kind: has_many to: ComputeClusterCNodeInput via: cnodes - from: ComputeClusterDashboard kind: has_one to: ComputeClusterCNodeCountsPerState via: cnodes - from: ComputeClusterDashboard kind: has_one to: ComputeClusterCountsPerState via: compute_clusters - from: ComputeClusterDashboard kind: has_one to: ComputeClusterDeploymentCountsPerState via: deployments - from: ComputeClusterDashboard kind: has_one to: ComputeClusterPodCountsPerState via: pods - from: ComputeClusterModifyParams kind: has_many to: ComputeClusterCNodeInput via: cnodes - from: ComputeClusterPod kind: has_many to: ComputeClusterPodCondition via: conditions - from: ComputeClusterTenant kind: belongs_to to: Tenant via: tenant_id - from: DBox kind: belongs_to to: Cluster via: cluster_id - from: DBox kind: belongs_to to: Rack via: rack_id - from: DNode kind: belongs_to to: Cluster via: cluster_id - from: DNode kind: belongs_to to: DBox via: dbox_id - from: DNode kind: belongs_to to: EBox via: ebox_id - from: DTray kind: belongs_to to: DBox via: dbox_id - from: DTray kind: has_many to: DNode via: dnodes - from: DeltaRecord kind: has_one to: DeltaRecordObject via: object - from: DeltaStorage kind: has_many to: DeltaRecord via: records - from: EBox kind: belongs_to to: Cluster via: cluster_id - from: EBox kind: belongs_to to: Rack via: rack_id - from: EncryptedPath kind: has_one to: EncryptionGroup via: encryption_group - from: EncryptedPath kind: belongs_to to: Tenant via: tenant_id - from: Env kind: belongs_to to: Cluster via: cluster_id - from: Env kind: belongs_to to: Env via: env_id - from: Fan kind: belongs_to to: CBox via: cbox_id - from: Fan kind: belongs_to to: Cluster via: cluster_id - from: Fan kind: belongs_to to: DBox via: dbox_id - from: Group kind: has_one to: LocalProviderData via: local_provider - from: Group kind: has_many to: PartialS3PolicyInfo via: s3_policies - from: Health kind: has_one to: HealthEntry via: cache - from: Health kind: has_one to: HealthEntry via: db - from: Host kind: belongs_to to: Cluster via: cluster_id - from: Host kind: has_one to: VastInstallInfo via: vast_install_info - from: IAMRole kind: has_one to: PartialTenantInfo via: tenant - from: KafkaBrokerConfig kind: has_many to: KafkaBrokerAddressParams via: addresses - from: KafkaBrokerConfig kind: belongs_to to: Tenant via: tenant_id - from: Kerberos kind: has_one to: KerberosStateInfo via: state - from: KerberosStateInfo kind: has_one to: KerberosServersInfo via: kadmin_servers - from: KerberosStateInfo kind: has_one to: KerberosServersInfo via: kdc - from: KerberosStateInfo kind: has_one to: KerberosPrincipalsInfo via: service_principals - from: Ldap kind: belongs_to to: Tenant via: tenant_id - from: ListPrefetchItem kind: has_many to: ListPrefetchPathItem via: paths - from: Lock kind: belongs_to to: Lock via: lock_id - from: Lock kind: belongs_to to: Tenant via: tenant_id - from: Manager kind: has_one to: PartialTenantInfo via: tenant - from: Manager kind: belongs_to to: Tenant via: tenant_id - from: ModifyVsettingsParams kind: has_one to: ArbitraryStringsObject via: vsettings - from: Module kind: belongs_to to: Cluster via: cluster_id - from: NFS4DelegateInfo kind: has_one to: PartialVTask via: list_open_handles_task - from: NFS4DelegateState kind: has_many to: NFS4DelegateInfo via: delegate_info - from: NIC kind: belongs_to to: CBox via: cbox_id - from: NIC kind: belongs_to to: Cluster via: cluster_id - from: NIC kind: belongs_to to: DBox via: dbox_id - from: NIC kind: belongs_to to: Host via: host_id - from: NIC kind: belongs_to to: NICPort via: nicport_id - from: NICPort kind: belongs_to to: Cluster via: cluster_id - from: NICPort kind: belongs_to to: Host via: host_id - from: NIS kind: belongs_to to: Tenant via: tenant_id - from: NVRAM kind: belongs_to to: Cluster via: cluster_id - from: NVRAM kind: belongs_to to: DBox via: dbox_id - from: ObjectPermission kind: belongs_to to: Manager via: manager_id - from: ObjectPermission kind: belongs_to to: Role via: role_id - from: OpenFile kind: has_one to: PartialVTask via: list_open_handles_task - from: OpenFile kind: belongs_to to: Tenant via: tenant_id - from: OpenFileHandle kind: belongs_to to: Tenant via: tenant_id - from: OpenFilesQuery kind: belongs_to to: Tenant via: tenant_id - from: OpenFilesQueryParams kind: belongs_to to: Tenant via: tenant_id - from: PSU kind: belongs_to to: CBox via: cbox_id - from: PSU kind: belongs_to to: Cluster via: cluster_id - from: PSU kind: belongs_to to: DBox via: dbox_id - from: Port kind: belongs_to to: Cluster via: cluster_id - from: ProtectedPath kind: belongs_to to: Tenant via: tenant_id - from: ProtectionPolicy kind: has_many to: Frame via: frames - from: ProtectionPolicy kind: has_one to: RemoteTenant via: remote_tenant - from: ProtectionPolicy kind: has_one to: PartialTenantInfo via: tenant - from: ProtectionPolicy kind: belongs_to to: Tenant via: tenant_id - from: ProtocolHandle kind: has_one to: FileHandle via: file_handle - from: ProtocolHandle kind: has_many to: OpenProtocolHandle via: open_protocol_handles - from: QOSPolicy kind: has_many to: AttachedUser via: attached_users - from: QOSPolicy kind: has_one to: QOSDynamicLimits via: capacity_limits - from: QOSPolicy kind: has_one to: RequestQOSDynamicTotalLimits via: capacity_total_limits - from: QOSPolicy kind: has_one to: QOSStaticLimits via: static_limits - from: QOSPolicy kind: has_one to: RequestQOSStaticTotalLimits via: static_total_limits - from: QOSPolicy kind: belongs_to to: Tenant via: tenant_id - from: QOSPolicyModifyParams kind: has_many to: AttachedUser via: attached_users - from: QOSPolicyModifyParams kind: has_one to: RequestQOSDynamicLimits via: capacity_limits - from: QOSPolicyModifyParams kind: has_one to: RequestQOSDynamicTotalLimits via: capacity_total_limits - from: QOSPolicyModifyParams kind: has_one to: RequestQOSStaticLimits via: static_limits - from: QOSPolicyModifyParams kind: has_one to: RequestQOSStaticTotalLimits via: static_total_limits - from: Quota kind: belongs_to to: Cluster via: cluster_id - from: Quota kind: has_one to: DefaultQuota via: default_group_quota - from: Quota kind: has_one to: DefaultQuota via: default_user_quota - from: Quota kind: has_many to: PartialUserQuota via: group_quotas - from: Quota kind: belongs_to to: Tenant via: tenant_id - from: Quota kind: has_many to: PartialUserQuota via: user_quotas - from: ReadOnlyFolderParams kind: belongs_to to: Tenant via: tenant_id - from: Realm kind: has_one to: PartialTenantInfo via: tenant - from: Realm kind: belongs_to to: Tenant via: tenant_id - from: RequestTruncatedQOS kind: has_one to: RequestTruncatedQOSStaticLimits via: static_limits - from: Role kind: has_one to: PartialTenantInfo via: tenant - from: Role kind: belongs_to to: Tenant via: tenant_id - from: S3Key kind: has_one to: PartialTenantInfo via: tenant - from: S3Key kind: has_one to: PartialUserInfo via: user - from: S3LifeCycleRule kind: has_one to: ArbitraryStringsObject via: tags - from: S3LifeCycleRule kind: belongs_to to: View via: view_id - from: S3Policy kind: belongs_to to: Tenant via: tenant_id - from: SSD kind: belongs_to to: Cluster via: cluster_id - from: SSD kind: belongs_to to: DBox via: dbox_id - from: Snapshot kind: belongs_to to: Tenant via: tenant_id - from: SupportBundle kind: belongs_to to: Cluster via: cluster_id - from: SupportedDrive kind: has_one to: SupportedDriveInput via: raw_data - from: SupportedPlatform kind: has_one to: SupportedPlatformInput via: raw_data - from: Switch kind: belongs_to to: Cluster via: cluster_id - from: Switch kind: belongs_to to: Switch via: switch_id - from: TLSCertificate kind: has_one to: PartialTenantInfo via: tenant - from: Tenant kind: has_one to: CapacityRules via: capacity_rules - from: Tenant kind: has_one to: LocalProviderData via: local_provider - from: Tenant kind: has_one to: TruncatedQOS via: qos - from: TenantClientMetrics kind: has_many to: TabularColumnArrowSchema via: default_columns - from: TenantClientMetrics kind: has_many to: Column via: user_defined_columns - from: TenantIdBody kind: belongs_to to: Tenant via: tenant_id - from: TenantMetricLabelValue kind: has_one to: PartialTenantMetricLabel via: label - from: TransformNode kind: has_many to: ArgNode via: args - from: TransformNode kind: has_one to: Transform via: value - from: TruncatedQOS kind: has_one to: TruncatedQOSStaticLimits via: static_limits - from: User kind: has_one to: LocalProviderData via: local_provider - from: User kind: has_many to: PartialS3PolicyInfo via: s3_policies - from: UserTenantData kind: has_many to: PartialS3PolicyInfo via: s3_policies - from: VIPPool kind: belongs_to to: Cluster via: cluster_id - from: VIPPool kind: belongs_to to: Tenant via: tenant_id - from: VMSNetworkSettingsInput kind: has_many to: HostNetworkSettings via: hosts - from: VMSNetworkSettingsSummary kind: has_many to: VMSNetworkSettingsHostChanges via: hosts - from: View kind: belongs_to to: Cluster via: cluster_id - from: View kind: has_many to: EventNotification via: event_notifications - from: View kind: belongs_to to: Tenant via: tenant_id - from: View kind: has_one to: UserImpersonation via: user_impersonation - from: ViewPolicy kind: belongs_to to: Cluster via: cluster_id - from: ViewPolicy kind: has_one to: ArbitraryStringsObject via: permission_per_vip_pool - from: ViewPolicy kind: belongs_to to: Tenant via: tenant_id - from: VirtualMachine kind: belongs_to to: Cluster via: cluster_id - from: VirtualMachine kind: belongs_to to: Rack via: rack_id - from: Volume kind: has_one to: PartialGenericInfo via: qos_policy - from: Volume kind: has_one to: SnapshotData via: snapshot_data - from: Volume kind: has_one to: ArbitraryStringsObject via: tags - from: Volume kind: belongs_to to: View via: view_id - from: VpnTunnel kind: belongs_to to: CNode via: cnode_id - from: Webhook kind: belongs_to to: Certificate via: certificate_id - from: Webhook kind: has_one to: ArbitraryStringsObject via: headers