@terasky/backstage-plugin-vcf-automation 1.1.1 → 1.3.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -83,6 +83,146 @@ class VcfAutomationClient {
83
83
  }
84
84
  return await response.json();
85
85
  }
86
+ async getProjects(instanceName) {
87
+ const baseUrl = await this.discoveryApi.getBaseUrl("vcf-automation");
88
+ const headers = await this.getAuthHeaders();
89
+ const url = instanceName ? `${baseUrl}/projects?instance=${encodeURIComponent(instanceName)}` : `${baseUrl}/projects`;
90
+ const response = await fetch(url, {
91
+ headers
92
+ });
93
+ if (!response.ok) {
94
+ throw new Error(`Failed to fetch projects: ${response.statusText}`);
95
+ }
96
+ return await response.json();
97
+ }
98
+ async getDeployments(instanceName) {
99
+ const baseUrl = await this.discoveryApi.getBaseUrl("vcf-automation");
100
+ const headers = await this.getAuthHeaders();
101
+ const url = instanceName ? `${baseUrl}/deployments?instance=${encodeURIComponent(instanceName)}` : `${baseUrl}/deployments`;
102
+ const response = await fetch(url, {
103
+ headers
104
+ });
105
+ if (!response.ok) {
106
+ throw new Error(`Failed to fetch deployments: ${response.statusText}`);
107
+ }
108
+ return await response.json();
109
+ }
110
+ async getDeploymentResources(deploymentId, instanceName) {
111
+ const baseUrl = await this.discoveryApi.getBaseUrl("vcf-automation");
112
+ const headers = await this.getAuthHeaders();
113
+ const url = instanceName ? `${baseUrl}/deployments/${deploymentId}/resources?instance=${encodeURIComponent(instanceName)}` : `${baseUrl}/deployments/${deploymentId}/resources`;
114
+ const response = await fetch(url, {
115
+ headers
116
+ });
117
+ if (!response.ok) {
118
+ throw new Error(`Failed to fetch deployment resources: ${response.statusText}`);
119
+ }
120
+ return await response.json();
121
+ }
122
+ async getSupervisorResources(instanceName) {
123
+ const baseUrl = await this.discoveryApi.getBaseUrl("vcf-automation");
124
+ const headers = await this.getAuthHeaders();
125
+ const url = instanceName ? `${baseUrl}/supervisor-resources?instance=${encodeURIComponent(instanceName)}` : `${baseUrl}/supervisor-resources`;
126
+ const response = await fetch(url, {
127
+ headers
128
+ });
129
+ if (!response.ok) {
130
+ throw new Error(`Failed to fetch supervisor resources: ${response.statusText}`);
131
+ }
132
+ return await response.json();
133
+ }
134
+ async getSupervisorResource(resourceId, instanceName) {
135
+ const baseUrl = await this.discoveryApi.getBaseUrl("vcf-automation");
136
+ const headers = await this.getAuthHeaders();
137
+ const url = instanceName ? `${baseUrl}/supervisor-resources/${resourceId}?instance=${encodeURIComponent(instanceName)}` : `${baseUrl}/supervisor-resources/${resourceId}`;
138
+ const response = await fetch(url, {
139
+ headers
140
+ });
141
+ if (!response.ok) {
142
+ throw new Error(`Failed to fetch supervisor resource: ${response.statusText}`);
143
+ }
144
+ return await response.json();
145
+ }
146
+ async getSupervisorNamespaces(instanceName) {
147
+ const baseUrl = await this.discoveryApi.getBaseUrl("vcf-automation");
148
+ const headers = await this.getAuthHeaders();
149
+ const url = instanceName ? `${baseUrl}/supervisor-namespaces?instance=${encodeURIComponent(instanceName)}` : `${baseUrl}/supervisor-namespaces`;
150
+ const response = await fetch(url, {
151
+ headers
152
+ });
153
+ if (!response.ok) {
154
+ throw new Error(`Failed to fetch supervisor namespaces: ${response.statusText}`);
155
+ }
156
+ return await response.json();
157
+ }
158
+ async getSupervisorNamespace(namespaceId, instanceName) {
159
+ const baseUrl = await this.discoveryApi.getBaseUrl("vcf-automation");
160
+ const headers = await this.getAuthHeaders();
161
+ const url = instanceName ? `${baseUrl}/supervisor-namespaces/${namespaceId}?instance=${encodeURIComponent(instanceName)}` : `${baseUrl}/supervisor-namespaces/${namespaceId}`;
162
+ const response = await fetch(url, {
163
+ headers
164
+ });
165
+ if (!response.ok) {
166
+ throw new Error(`Failed to fetch supervisor namespace: ${response.statusText}`);
167
+ }
168
+ return await response.json();
169
+ }
170
+ // VM Power Management for deployment-managed VMs
171
+ async checkVmPowerAction(resourceId, action, instanceName) {
172
+ const baseUrl = await this.discoveryApi.getBaseUrl("vcf-automation");
173
+ const headers = await this.getAuthHeaders();
174
+ const url = instanceName ? `${baseUrl}/resources/${resourceId}/power-actions/${action}?instance=${encodeURIComponent(instanceName)}` : `${baseUrl}/resources/${resourceId}/power-actions/${action}`;
175
+ const response = await fetch(url, {
176
+ headers
177
+ });
178
+ if (!response.ok) {
179
+ throw new Error(`Failed to check VM power action: ${response.statusText}`);
180
+ }
181
+ return await response.json();
182
+ }
183
+ async executeVmPowerAction(resourceId, action, instanceName) {
184
+ const baseUrl = await this.discoveryApi.getBaseUrl("vcf-automation");
185
+ const headers = await this.getAuthHeaders();
186
+ const url = instanceName ? `${baseUrl}/resources/${resourceId}/power-actions/${action}?instance=${encodeURIComponent(instanceName)}` : `${baseUrl}/resources/${resourceId}/power-actions/${action}`;
187
+ const response = await fetch(url, {
188
+ method: "POST",
189
+ headers
190
+ });
191
+ if (!response.ok) {
192
+ throw new Error(`Failed to execute VM power action: ${response.statusText}`);
193
+ }
194
+ return await response.json();
195
+ }
196
+ // VM Power Management for standalone VMs
197
+ async getStandaloneVmStatus(namespaceUrnId, namespaceName, vmName, instanceName) {
198
+ const baseUrl = await this.discoveryApi.getBaseUrl("vcf-automation");
199
+ const headers = await this.getAuthHeaders();
200
+ const url = instanceName ? `${baseUrl}/standalone-vms/${namespaceUrnId}/${namespaceName}/${vmName}/status?instance=${encodeURIComponent(instanceName)}` : `${baseUrl}/standalone-vms/${namespaceUrnId}/${namespaceName}/${vmName}/status`;
201
+ const response = await fetch(url, {
202
+ headers
203
+ });
204
+ if (!response.ok) {
205
+ throw new Error(`Failed to get standalone VM status: ${response.statusText}`);
206
+ }
207
+ return await response.json();
208
+ }
209
+ async executeStandaloneVmPowerAction(namespaceUrnId, namespaceName, vmName, powerState, vmData, instanceName) {
210
+ const baseUrl = await this.discoveryApi.getBaseUrl("vcf-automation");
211
+ const headers = await this.getAuthHeaders();
212
+ const url = instanceName ? `${baseUrl}/standalone-vms/${namespaceUrnId}/${namespaceName}/${vmName}/power-state?instance=${encodeURIComponent(instanceName)}` : `${baseUrl}/standalone-vms/${namespaceUrnId}/${namespaceName}/${vmName}/power-state`;
213
+ const response = await fetch(url, {
214
+ method: "PUT",
215
+ headers: {
216
+ ...headers,
217
+ "Content-Type": "application/json"
218
+ },
219
+ body: JSON.stringify({ powerState, vmData })
220
+ });
221
+ if (!response.ok) {
222
+ throw new Error(`Failed to execute standalone VM power action: ${response.statusText}`);
223
+ }
224
+ return await response.json();
225
+ }
86
226
  }
87
227
 
88
228
  export { VcfAutomationClient, vcfAutomationApiRef };
@@ -1 +1 @@
1
- {"version":3,"file":"VcfAutomationClient.esm.js","sources":["../../src/api/VcfAutomationClient.ts"],"sourcesContent":["import { createApiRef, DiscoveryApi, IdentityApi } from '@backstage/core-plugin-api';\nimport { VcfProject as VcfProjectType } from '../types';\n\nexport interface VcfDeploymentEvent {\n timestamp: string;\n status: string;\n operation: string;\n user: string;\n details: string;\n}\n\nexport interface VcfDeploymentConfig {\n key: string;\n value: string;\n}\n\nexport interface VcfDeploymentResponse {\n content: any;\n pageable: any;\n config: VcfDeploymentConfig[];\n history: VcfDeploymentEvent[];\n}\n\nexport interface VcfVSphereVM {\n id: string;\n name: string;\n type: string;\n properties: {\n resourceId: string;\n moref: string;\n resourceDescLink: string;\n powerState: string;\n zone: string;\n environmentName: string;\n hasSnapshots: string;\n computeHostType: string;\n id: string;\n memoryGB: string;\n cpuCount: number;\n image: string;\n totalMemoryMB: number;\n endpointType: string;\n resourceName: string;\n tags: string[];\n softwareName: string;\n name: string;\n resourceLink: string;\n region: string;\n hostName: string;\n storage: {\n disks: Array<{\n vm: string;\n name: string;\n type: string;\n shares?: string;\n vcUuid: string;\n diskFile?: string;\n bootOrder?: number;\n encrypted: boolean;\n limitIops?: string;\n capacityGb: number;\n persistent: boolean;\n independent?: string;\n sharesLevel?: string;\n endpointType: string;\n resourceLink: string;\n vmFolderPath?: string;\n controllerKey: string;\n diskPlacementRef?: string;\n existingResource: string;\n provisioningType?: string;\n controllerUnitNumber: string;\n }>;\n };\n networks: Array<{\n id: string;\n name: string;\n address: string;\n network: string;\n assignment: string;\n deviceIndex: number;\n external_id: string;\n mac_address: string;\n resourceName: string;\n ipv6Addresses?: string[];\n }>;\n areVMActionsDisabled: string;\n providerId: string;\n osType: string;\n instanceUUID: string;\n componentType: string;\n address: string;\n endpointId: string;\n externalId: string;\n datacenter: string;\n datastoreName: string;\n coreCount: string;\n primaryMAC: string;\n computeHostRef: string;\n snapshotCount: string;\n accounts: string[];\n vmFolderPath: string;\n account: string;\n vcUuid: string;\n };\n createdAt: string;\n syncStatus: string;\n expense: {\n totalExpense: number;\n computeExpense: number;\n storageExpense: number;\n additionalExpense: number;\n unit: string;\n lastUpdatedTime: string;\n };\n origin: string;\n dependsOn: string[];\n state: string;\n}\n\nexport type VcfProject = VcfProjectType;\n\nexport interface VcfAutomationApi {\n getDeploymentEvents(deploymentId: string, instanceName?: string): Promise<VcfDeploymentResponse>;\n getVSphereVMDetails(deploymentId: string, resourceId: string, instanceName?: string): Promise<VcfVSphereVM>;\n getProjectDetails(projectId: string, instanceName?: string): Promise<VcfProject>;\n getGenericResourceDetails(deploymentId: string, resourceId: string, instanceName?: string): Promise<any>;\n getDeploymentDetails(deploymentId: string, instanceName?: string): Promise<any>;\n}\n\nexport const vcfAutomationApiRef = createApiRef<VcfAutomationApi>({\n id: 'plugin.vcf-automation.service',\n});\n\nexport class VcfAutomationClient implements VcfAutomationApi {\n private readonly discoveryApi: DiscoveryApi;\n private readonly identityApi: IdentityApi;\n\n constructor(options: { discoveryApi: DiscoveryApi; identityApi: IdentityApi }) {\n this.discoveryApi = options.discoveryApi;\n this.identityApi = options.identityApi;\n }\n\n private async getAuthHeaders(): Promise<HeadersInit> {\n const token = await this.identityApi.getCredentials();\n return {\n 'Content-Type': 'application/json',\n ...(token?.token ? { Authorization: `Bearer ${token.token}` } : {}),\n };\n }\n\n async getDeploymentEvents(deploymentId: string, instanceName?: string): Promise<VcfDeploymentResponse> {\n const baseUrl = await this.discoveryApi.getBaseUrl('vcf-automation');\n const headers = await this.getAuthHeaders();\n const url = instanceName \n ? `${baseUrl}/deployments/${deploymentId}/events?instance=${encodeURIComponent(instanceName)}`\n : `${baseUrl}/deployments/${deploymentId}/events`;\n const response = await fetch(url, {\n headers,\n });\n if (!response.ok) {\n throw new Error(`Failed to fetch deployment events: ${response.statusText}`);\n }\n return await response.json();\n }\n\n async getVSphereVMDetails(deploymentId: string, resourceId: string, instanceName?: string): Promise<VcfVSphereVM> {\n const baseUrl = await this.discoveryApi.getBaseUrl('vcf-automation');\n const headers = await this.getAuthHeaders();\n const url = instanceName \n ? `${baseUrl}/deployments/${deploymentId}/resources/${resourceId}?instance=${encodeURIComponent(instanceName)}`\n : `${baseUrl}/deployments/${deploymentId}/resources/${resourceId}`;\n const response = await fetch(url, {\n headers,\n });\n if (!response.ok) {\n throw new Error(`Failed to fetch resource details: ${response.statusText}`);\n }\n return await response.json();\n }\n\n async getGenericResourceDetails(deploymentId: string, resourceId: string, instanceName?: string): Promise<any> {\n const baseUrl = await this.discoveryApi.getBaseUrl('vcf-automation');\n const headers = await this.getAuthHeaders();\n \n const url = instanceName \n ? `${baseUrl}/deployments/${deploymentId}/resources/${resourceId}?instance=${encodeURIComponent(instanceName)}`\n : `${baseUrl}/deployments/${deploymentId}/resources/${resourceId}`;\n \n const response = await fetch(url, {\n headers: {\n 'Content-Type': 'application/json',\n ...headers,\n },\n });\n\n if (!response.ok) {\n throw new Error(`Failed to fetch resource details: ${response.statusText}`);\n }\n\n return await response.json();\n }\n\n async getDeploymentDetails(deploymentId: string, instanceName?: string): Promise<any> {\n const baseUrl = await this.discoveryApi.getBaseUrl('vcf-automation');\n const headers = await this.getAuthHeaders();\n \n const url = instanceName \n ? `${baseUrl}/deployments/${deploymentId}?instance=${encodeURIComponent(instanceName)}`\n : `${baseUrl}/deployments/${deploymentId}`;\n \n const response = await fetch(url, {\n headers: {\n 'Content-Type': 'application/json',\n ...headers,\n },\n });\n\n if (!response.ok) {\n throw new Error(`Failed to fetch deployment details: ${response.statusText}`);\n }\n\n return await response.json();\n }\n\n async getProjectDetails(projectId: string, instanceName?: string): Promise<VcfProject> {\n const baseUrl = await this.discoveryApi.getBaseUrl('vcf-automation');\n const headers = await this.getAuthHeaders();\n const url = instanceName \n ? `${baseUrl}/projects/${projectId}?instance=${encodeURIComponent(instanceName)}`\n : `${baseUrl}/projects/${projectId}`;\n const response = await fetch(url, {\n headers,\n });\n if (!response.ok) {\n throw new Error(`Failed to fetch project details: ${response.statusText}`);\n }\n return await response.json();\n }\n} "],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"VcfAutomationClient.esm.js","sources":["../../src/api/VcfAutomationClient.ts"],"sourcesContent":["import { createApiRef, DiscoveryApi, IdentityApi } from '@backstage/core-plugin-api';\nimport { VcfProject as VcfProjectType } from '../types';\n\nexport interface VcfDeploymentEvent {\n timestamp: string;\n status: string;\n operation: string;\n user: string;\n details: string;\n}\n\nexport interface VcfDeploymentConfig {\n key: string;\n value: string;\n}\n\nexport interface VcfDeploymentResponse {\n content: any;\n pageable: any;\n config: VcfDeploymentConfig[];\n history: VcfDeploymentEvent[];\n}\n\nexport interface VcfVSphereVM {\n id: string;\n name: string;\n type: string;\n properties: {\n resourceId: string;\n moref: string;\n resourceDescLink: string;\n powerState: string;\n zone: string;\n environmentName: string;\n hasSnapshots: string;\n computeHostType: string;\n id: string;\n memoryGB: string;\n cpuCount: number;\n image: string;\n totalMemoryMB: number;\n endpointType: string;\n resourceName: string;\n tags: string[];\n softwareName: string;\n name: string;\n resourceLink: string;\n region: string;\n hostName: string;\n storage: {\n disks: Array<{\n vm: string;\n name: string;\n type: string;\n shares?: string;\n vcUuid: string;\n diskFile?: string;\n bootOrder?: number;\n encrypted: boolean;\n limitIops?: string;\n capacityGb: number;\n persistent: boolean;\n independent?: string;\n sharesLevel?: string;\n endpointType: string;\n resourceLink: string;\n vmFolderPath?: string;\n controllerKey: string;\n diskPlacementRef?: string;\n existingResource: string;\n provisioningType?: string;\n controllerUnitNumber: string;\n }>;\n };\n networks: Array<{\n id: string;\n name: string;\n address: string;\n network: string;\n assignment: string;\n deviceIndex: number;\n external_id: string;\n mac_address: string;\n resourceName: string;\n ipv6Addresses?: string[];\n }>;\n areVMActionsDisabled: string;\n providerId: string;\n osType: string;\n instanceUUID: string;\n componentType: string;\n address: string;\n endpointId: string;\n externalId: string;\n datacenter: string;\n datastoreName: string;\n coreCount: string;\n primaryMAC: string;\n computeHostRef: string;\n snapshotCount: string;\n accounts: string[];\n vmFolderPath: string;\n account: string;\n vcUuid: string;\n };\n createdAt: string;\n syncStatus: string;\n expense: {\n totalExpense: number;\n computeExpense: number;\n storageExpense: number;\n additionalExpense: number;\n unit: string;\n lastUpdatedTime: string;\n };\n origin: string;\n dependsOn: string[];\n state: string;\n}\n\nexport type VcfProject = VcfProjectType;\n\nexport interface VcfAutomationApi {\n getDeploymentEvents(deploymentId: string, instanceName?: string): Promise<VcfDeploymentResponse>;\n getVSphereVMDetails(deploymentId: string, resourceId: string, instanceName?: string): Promise<VcfVSphereVM>;\n getProjectDetails(projectId: string, instanceName?: string): Promise<VcfProject>;\n getGenericResourceDetails(deploymentId: string, resourceId: string, instanceName?: string): Promise<any>;\n getDeploymentDetails(deploymentId: string, instanceName?: string): Promise<any>;\n getProjects(instanceName?: string): Promise<any>;\n getDeployments(instanceName?: string): Promise<any>;\n getDeploymentResources(deploymentId: string, instanceName?: string): Promise<any>;\n getSupervisorResources(instanceName?: string): Promise<any>;\n getSupervisorResource(resourceId: string, instanceName?: string): Promise<any>;\n getSupervisorNamespaces(instanceName?: string): Promise<any>;\n getSupervisorNamespace(namespaceId: string, instanceName?: string): Promise<any>;\n // VM Power Management\n checkVmPowerAction(resourceId: string, action: 'PowerOn' | 'PowerOff', instanceName?: string): Promise<any>;\n executeVmPowerAction(resourceId: string, action: 'PowerOn' | 'PowerOff', instanceName?: string): Promise<any>;\n getStandaloneVmStatus(namespaceUrnId: string, namespaceName: string, vmName: string, instanceName?: string): Promise<any>;\n executeStandaloneVmPowerAction(namespaceUrnId: string, namespaceName: string, vmName: string, powerState: 'PoweredOn' | 'PoweredOff', vmData: any, instanceName?: string): Promise<any>;\n}\n\nexport const vcfAutomationApiRef = createApiRef<VcfAutomationApi>({\n id: 'plugin.vcf-automation.service',\n});\n\nexport class VcfAutomationClient implements VcfAutomationApi {\n private readonly discoveryApi: DiscoveryApi;\n private readonly identityApi: IdentityApi;\n\n constructor(options: { discoveryApi: DiscoveryApi; identityApi: IdentityApi }) {\n this.discoveryApi = options.discoveryApi;\n this.identityApi = options.identityApi;\n }\n\n private async getAuthHeaders(): Promise<HeadersInit> {\n const token = await this.identityApi.getCredentials();\n return {\n 'Content-Type': 'application/json',\n ...(token?.token ? { Authorization: `Bearer ${token.token}` } : {}),\n };\n }\n\n async getDeploymentEvents(deploymentId: string, instanceName?: string): Promise<VcfDeploymentResponse> {\n const baseUrl = await this.discoveryApi.getBaseUrl('vcf-automation');\n const headers = await this.getAuthHeaders();\n const url = instanceName \n ? `${baseUrl}/deployments/${deploymentId}/events?instance=${encodeURIComponent(instanceName)}`\n : `${baseUrl}/deployments/${deploymentId}/events`;\n const response = await fetch(url, {\n headers,\n });\n if (!response.ok) {\n throw new Error(`Failed to fetch deployment events: ${response.statusText}`);\n }\n return await response.json();\n }\n\n async getVSphereVMDetails(deploymentId: string, resourceId: string, instanceName?: string): Promise<VcfVSphereVM> {\n const baseUrl = await this.discoveryApi.getBaseUrl('vcf-automation');\n const headers = await this.getAuthHeaders();\n const url = instanceName \n ? `${baseUrl}/deployments/${deploymentId}/resources/${resourceId}?instance=${encodeURIComponent(instanceName)}`\n : `${baseUrl}/deployments/${deploymentId}/resources/${resourceId}`;\n const response = await fetch(url, {\n headers,\n });\n if (!response.ok) {\n throw new Error(`Failed to fetch resource details: ${response.statusText}`);\n }\n return await response.json();\n }\n\n async getGenericResourceDetails(deploymentId: string, resourceId: string, instanceName?: string): Promise<any> {\n const baseUrl = await this.discoveryApi.getBaseUrl('vcf-automation');\n const headers = await this.getAuthHeaders();\n \n const url = instanceName \n ? `${baseUrl}/deployments/${deploymentId}/resources/${resourceId}?instance=${encodeURIComponent(instanceName)}`\n : `${baseUrl}/deployments/${deploymentId}/resources/${resourceId}`;\n \n const response = await fetch(url, {\n headers: {\n 'Content-Type': 'application/json',\n ...headers,\n },\n });\n\n if (!response.ok) {\n throw new Error(`Failed to fetch resource details: ${response.statusText}`);\n }\n\n return await response.json();\n }\n\n async getDeploymentDetails(deploymentId: string, instanceName?: string): Promise<any> {\n const baseUrl = await this.discoveryApi.getBaseUrl('vcf-automation');\n const headers = await this.getAuthHeaders();\n \n const url = instanceName \n ? `${baseUrl}/deployments/${deploymentId}?instance=${encodeURIComponent(instanceName)}`\n : `${baseUrl}/deployments/${deploymentId}`;\n \n const response = await fetch(url, {\n headers: {\n 'Content-Type': 'application/json',\n ...headers,\n },\n });\n\n if (!response.ok) {\n throw new Error(`Failed to fetch deployment details: ${response.statusText}`);\n }\n\n return await response.json();\n }\n\n async getProjectDetails(projectId: string, instanceName?: string): Promise<VcfProject> {\n const baseUrl = await this.discoveryApi.getBaseUrl('vcf-automation');\n const headers = await this.getAuthHeaders();\n const url = instanceName \n ? `${baseUrl}/projects/${projectId}?instance=${encodeURIComponent(instanceName)}`\n : `${baseUrl}/projects/${projectId}`;\n const response = await fetch(url, {\n headers,\n });\n if (!response.ok) {\n throw new Error(`Failed to fetch project details: ${response.statusText}`);\n }\n return await response.json();\n }\n\n async getProjects(instanceName?: string): Promise<any> {\n const baseUrl = await this.discoveryApi.getBaseUrl('vcf-automation');\n const headers = await this.getAuthHeaders();\n const url = instanceName \n ? `${baseUrl}/projects?instance=${encodeURIComponent(instanceName)}`\n : `${baseUrl}/projects`;\n const response = await fetch(url, {\n headers,\n });\n if (!response.ok) {\n throw new Error(`Failed to fetch projects: ${response.statusText}`);\n }\n return await response.json();\n }\n\n async getDeployments(instanceName?: string): Promise<any> {\n const baseUrl = await this.discoveryApi.getBaseUrl('vcf-automation');\n const headers = await this.getAuthHeaders();\n const url = instanceName \n ? `${baseUrl}/deployments?instance=${encodeURIComponent(instanceName)}`\n : `${baseUrl}/deployments`;\n const response = await fetch(url, {\n headers,\n });\n if (!response.ok) {\n throw new Error(`Failed to fetch deployments: ${response.statusText}`);\n }\n return await response.json();\n }\n\n async getDeploymentResources(deploymentId: string, instanceName?: string): Promise<any> {\n const baseUrl = await this.discoveryApi.getBaseUrl('vcf-automation');\n const headers = await this.getAuthHeaders();\n const url = instanceName\n ? `${baseUrl}/deployments/${deploymentId}/resources?instance=${encodeURIComponent(instanceName)}`\n : `${baseUrl}/deployments/${deploymentId}/resources`;\n const response = await fetch(url, {\n headers,\n });\n if (!response.ok) {\n throw new Error(`Failed to fetch deployment resources: ${response.statusText}`);\n }\n return await response.json();\n }\n\n async getSupervisorResources(instanceName?: string): Promise<any> {\n const baseUrl = await this.discoveryApi.getBaseUrl('vcf-automation');\n const headers = await this.getAuthHeaders();\n \n const url = instanceName\n ? `${baseUrl}/supervisor-resources?instance=${encodeURIComponent(instanceName)}`\n : `${baseUrl}/supervisor-resources`;\n const response = await fetch(url, {\n headers,\n });\n if (!response.ok) {\n throw new Error(`Failed to fetch supervisor resources: ${response.statusText}`);\n }\n return await response.json();\n }\n\n async getSupervisorResource(resourceId: string, instanceName?: string): Promise<any> {\n const baseUrl = await this.discoveryApi.getBaseUrl('vcf-automation');\n const headers = await this.getAuthHeaders();\n \n const url = instanceName\n ? `${baseUrl}/supervisor-resources/${resourceId}?instance=${encodeURIComponent(instanceName)}`\n : `${baseUrl}/supervisor-resources/${resourceId}`;\n const response = await fetch(url, {\n headers,\n });\n if (!response.ok) {\n throw new Error(`Failed to fetch supervisor resource: ${response.statusText}`);\n }\n return await response.json();\n }\n\n async getSupervisorNamespaces(instanceName?: string): Promise<any> {\n const baseUrl = await this.discoveryApi.getBaseUrl('vcf-automation');\n const headers = await this.getAuthHeaders();\n \n const url = instanceName\n ? `${baseUrl}/supervisor-namespaces?instance=${encodeURIComponent(instanceName)}`\n : `${baseUrl}/supervisor-namespaces`;\n const response = await fetch(url, {\n headers,\n });\n if (!response.ok) {\n throw new Error(`Failed to fetch supervisor namespaces: ${response.statusText}`);\n }\n return await response.json();\n }\n\n async getSupervisorNamespace(namespaceId: string, instanceName?: string): Promise<any> {\n const baseUrl = await this.discoveryApi.getBaseUrl('vcf-automation');\n const headers = await this.getAuthHeaders();\n \n const url = instanceName\n ? `${baseUrl}/supervisor-namespaces/${namespaceId}?instance=${encodeURIComponent(instanceName)}`\n : `${baseUrl}/supervisor-namespaces/${namespaceId}`;\n const response = await fetch(url, {\n headers,\n });\n if (!response.ok) {\n throw new Error(`Failed to fetch supervisor namespace: ${response.statusText}`);\n }\n return await response.json();\n }\n\n // VM Power Management for deployment-managed VMs\n async checkVmPowerAction(resourceId: string, action: 'PowerOn' | 'PowerOff', instanceName?: string): Promise<any> {\n const baseUrl = await this.discoveryApi.getBaseUrl('vcf-automation');\n const headers = await this.getAuthHeaders();\n \n const url = instanceName\n ? `${baseUrl}/resources/${resourceId}/power-actions/${action}?instance=${encodeURIComponent(instanceName)}`\n : `${baseUrl}/resources/${resourceId}/power-actions/${action}`;\n const response = await fetch(url, {\n headers,\n });\n if (!response.ok) {\n throw new Error(`Failed to check VM power action: ${response.statusText}`);\n }\n return await response.json();\n }\n\n async executeVmPowerAction(resourceId: string, action: 'PowerOn' | 'PowerOff', instanceName?: string): Promise<any> {\n const baseUrl = await this.discoveryApi.getBaseUrl('vcf-automation');\n const headers = await this.getAuthHeaders();\n \n const url = instanceName\n ? `${baseUrl}/resources/${resourceId}/power-actions/${action}?instance=${encodeURIComponent(instanceName)}`\n : `${baseUrl}/resources/${resourceId}/power-actions/${action}`;\n const response = await fetch(url, {\n method: 'POST',\n headers,\n });\n if (!response.ok) {\n throw new Error(`Failed to execute VM power action: ${response.statusText}`);\n }\n return await response.json();\n }\n\n // VM Power Management for standalone VMs\n async getStandaloneVmStatus(namespaceUrnId: string, namespaceName: string, vmName: string, instanceName?: string): Promise<any> {\n const baseUrl = await this.discoveryApi.getBaseUrl('vcf-automation');\n const headers = await this.getAuthHeaders();\n \n const url = instanceName\n ? `${baseUrl}/standalone-vms/${namespaceUrnId}/${namespaceName}/${vmName}/status?instance=${encodeURIComponent(instanceName)}`\n : `${baseUrl}/standalone-vms/${namespaceUrnId}/${namespaceName}/${vmName}/status`;\n const response = await fetch(url, {\n headers,\n });\n if (!response.ok) {\n throw new Error(`Failed to get standalone VM status: ${response.statusText}`);\n }\n return await response.json();\n }\n\n async executeStandaloneVmPowerAction(namespaceUrnId: string, namespaceName: string, vmName: string, powerState: 'PoweredOn' | 'PoweredOff', vmData: any, instanceName?: string): Promise<any> {\n const baseUrl = await this.discoveryApi.getBaseUrl('vcf-automation');\n const headers = await this.getAuthHeaders();\n \n const url = instanceName\n ? `${baseUrl}/standalone-vms/${namespaceUrnId}/${namespaceName}/${vmName}/power-state?instance=${encodeURIComponent(instanceName)}`\n : `${baseUrl}/standalone-vms/${namespaceUrnId}/${namespaceName}/${vmName}/power-state`;\n const response = await fetch(url, {\n method: 'PUT',\n headers: {\n ...headers,\n 'Content-Type': 'application/json',\n },\n body: JSON.stringify({ powerState, vmData }),\n });\n if (!response.ok) {\n throw new Error(`Failed to execute standalone VM power action: ${response.statusText}`);\n }\n return await response.json();\n }\n} "],"names":[],"mappings":"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"}
@@ -0,0 +1,180 @@
1
+ import { jsx, jsxs } from 'react/jsx-runtime';
2
+ import { useEntity } from '@backstage/plugin-catalog-react';
3
+ import { InfoCard, StructuredMetadataTable, Table, StatusPending, StatusError, StatusOK } from '@backstage/core-components';
4
+ import { Typography, Grid, Card, CardContent, Box } from '@material-ui/core';
5
+ import { makeStyles } from '@material-ui/core/styles';
6
+
7
+ const useStyles = makeStyles((theme) => ({
8
+ statusChip: {
9
+ marginRight: theme.spacing(1),
10
+ marginBottom: theme.spacing(0.5)
11
+ },
12
+ sectionTitle: {
13
+ marginBottom: theme.spacing(2)
14
+ },
15
+ conditionChip: {
16
+ margin: theme.spacing(0.25)
17
+ },
18
+ card: {
19
+ marginBottom: theme.spacing(2)
20
+ },
21
+ statusCard: {
22
+ border: `1px solid ${theme.palette.divider}`
23
+ }
24
+ }));
25
+ const VCFAutomationCCINamespaceDetails = () => {
26
+ const classes = useStyles();
27
+ const { entity } = useEntity();
28
+ const resourceProperties = entity.metadata.annotations?.["terasky.backstage.io/vcf-automation-resource-properties"];
29
+ const supervisorNamespaceData = entity.metadata.annotations?.["terasky.backstage.io/vcf-automation-supervisor-namespace-data"];
30
+ const namespaceEndpoint = entity.metadata.annotations?.["terasky.backstage.io/vcf-automation-cci-namespace-endpoint"];
31
+ const namespacePhase = entity.metadata.annotations?.["terasky.backstage.io/vcf-automation-cci-namespace-phase"];
32
+ const resourceState = entity.metadata.annotations?.["terasky.backstage.io/vcf-automation-resource-state"];
33
+ const syncStatus = entity.metadata.annotations?.["terasky.backstage.io/vcf-automation-resource-sync-status"];
34
+ const createdAt = entity.metadata.annotations?.["terasky.backstage.io/vcf-automation-resource-created-at"];
35
+ const origin = entity.metadata.annotations?.["terasky.backstage.io/vcf-automation-resource-origin"];
36
+ const isStandalone = origin === "SUPERVISOR_NAMESPACE";
37
+ let namespaceData = null;
38
+ if (isStandalone && supervisorNamespaceData) {
39
+ try {
40
+ namespaceData = JSON.parse(supervisorNamespaceData);
41
+ } catch (e) {
42
+ }
43
+ } else if (resourceProperties) {
44
+ try {
45
+ namespaceData = JSON.parse(resourceProperties);
46
+ } catch (e) {
47
+ }
48
+ }
49
+ if (!namespaceData) {
50
+ return /* @__PURE__ */ jsx(InfoCard, { title: `CCI Supervisor Namespace Details${isStandalone ? " (Standalone)" : ""}`, children: /* @__PURE__ */ jsx(Typography, { children: "No namespace data available." }) });
51
+ }
52
+ const { status, metadata } = namespaceData;
53
+ const renderStatusIcon = (conditionStatus) => {
54
+ switch (conditionStatus.toLowerCase()) {
55
+ case "true":
56
+ return /* @__PURE__ */ jsx(StatusOK, {});
57
+ case "false":
58
+ return /* @__PURE__ */ jsx(StatusError, {});
59
+ default:
60
+ return /* @__PURE__ */ jsx(StatusPending, {});
61
+ }
62
+ };
63
+ const basicInfo = {
64
+ "Namespace Name": namespaceData.name || "Unknown",
65
+ "Resource ID": namespaceData.id || "Unknown",
66
+ "Resource Link": namespaceData.resourceLink || "Not available",
67
+ "Phase": namespacePhase || status?.phase || "Unknown",
68
+ "State": resourceState || "Unknown",
69
+ "Sync Status": syncStatus || "Unknown",
70
+ "Created At": createdAt ? new Date(createdAt).toLocaleString() : "Unknown",
71
+ "Existing Resource": namespaceData.existing ? "Yes" : "No"
72
+ };
73
+ const infrastructureInfo = {
74
+ "Infrastructure ID": metadata?.["infrastructure.cci.vmware.com/id"] || "Not available",
75
+ "Project ID": metadata?.["infrastructure.cci.vmware.com/project-id"] || "Not available",
76
+ "Endpoint URL": namespaceEndpoint || status?.namespaceEndpointURL || "Not available"
77
+ };
78
+ const vmClassColumns = [
79
+ { title: "VM Class Name", field: "name" }
80
+ ];
81
+ const storageClassColumns = [
82
+ { title: "Storage Class Name", field: "name" },
83
+ { title: "Limit", field: "limit" }
84
+ ];
85
+ const zoneColumns = [
86
+ { title: "Zone Name", field: "name" },
87
+ { title: "CPU Limit", field: "cpuLimit" },
88
+ { title: "CPU Reservation", field: "cpuReservation" },
89
+ { title: "Memory Limit", field: "memoryLimit" },
90
+ { title: "Memory Reservation", field: "memoryReservation" }
91
+ ];
92
+ const conditionColumns = [
93
+ {
94
+ title: "Status",
95
+ field: "status",
96
+ render: (rowData) => /* @__PURE__ */ jsxs(Box, { display: "flex", alignItems: "center", children: [
97
+ renderStatusIcon(rowData.status),
98
+ /* @__PURE__ */ jsx("span", { style: { marginLeft: 8 }, children: rowData.status })
99
+ ] })
100
+ },
101
+ { title: "Type", field: "type" },
102
+ { title: "Last Transition", field: "lastTransitionTime" },
103
+ { title: "Reason", field: "reason" },
104
+ { title: "Message", field: "message" }
105
+ ];
106
+ return /* @__PURE__ */ jsxs(Grid, { container: true, spacing: 3, children: [
107
+ /* @__PURE__ */ jsx(Grid, { item: true, xs: 12, children: /* @__PURE__ */ jsx(InfoCard, { title: "Basic Information", children: /* @__PURE__ */ jsx(StructuredMetadataTable, { metadata: basicInfo }) }) }),
108
+ /* @__PURE__ */ jsx(Grid, { item: true, xs: 12, children: /* @__PURE__ */ jsx(InfoCard, { title: "Infrastructure Details", children: /* @__PURE__ */ jsx(StructuredMetadataTable, { metadata: infrastructureInfo }) }) }),
109
+ status?.conditions && status.conditions.length > 0 && /* @__PURE__ */ jsx(Grid, { item: true, xs: 12, children: /* @__PURE__ */ jsx(InfoCard, { title: "Namespace Conditions", children: /* @__PURE__ */ jsx(
110
+ Table,
111
+ {
112
+ columns: conditionColumns,
113
+ data: status.conditions,
114
+ options: {
115
+ search: true,
116
+ paging: false,
117
+ padding: "dense"
118
+ }
119
+ }
120
+ ) }) }),
121
+ status?.vmClasses && status.vmClasses.length > 0 && /* @__PURE__ */ jsx(Grid, { item: true, xs: 12, md: 6, children: /* @__PURE__ */ jsx(InfoCard, { title: "Available VM Classes", children: /* @__PURE__ */ jsx(
122
+ Table,
123
+ {
124
+ columns: vmClassColumns,
125
+ data: status.vmClasses,
126
+ options: {
127
+ search: true,
128
+ paging: status.vmClasses.length > 10,
129
+ pageSize: 10,
130
+ padding: "dense"
131
+ }
132
+ }
133
+ ) }) }),
134
+ status?.storageClasses && status.storageClasses.length > 0 && /* @__PURE__ */ jsx(Grid, { item: true, xs: 12, md: 6, children: /* @__PURE__ */ jsx(InfoCard, { title: "Storage Classes", children: /* @__PURE__ */ jsx(
135
+ Table,
136
+ {
137
+ columns: storageClassColumns,
138
+ data: status.storageClasses,
139
+ options: {
140
+ search: true,
141
+ paging: false,
142
+ padding: "dense"
143
+ }
144
+ }
145
+ ) }) }),
146
+ status?.zones && status.zones.length > 0 && /* @__PURE__ */ jsx(Grid, { item: true, xs: 12, children: /* @__PURE__ */ jsx(InfoCard, { title: "Resource Zones", children: /* @__PURE__ */ jsx(
147
+ Table,
148
+ {
149
+ columns: zoneColumns,
150
+ data: status.zones,
151
+ options: {
152
+ search: true,
153
+ paging: false,
154
+ padding: "dense"
155
+ }
156
+ }
157
+ ) }) }),
158
+ status && /* @__PURE__ */ jsx(Grid, { item: true, xs: 12, children: /* @__PURE__ */ jsx(InfoCard, { title: "Namespace Status Summary", children: /* @__PURE__ */ jsxs(Grid, { container: true, spacing: 2, children: [
159
+ /* @__PURE__ */ jsx(Grid, { item: true, xs: 12, sm: 6, md: 3, children: /* @__PURE__ */ jsx(Card, { className: classes.statusCard, children: /* @__PURE__ */ jsxs(CardContent, { children: [
160
+ /* @__PURE__ */ jsx(Typography, { variant: "h6", color: "textSecondary", children: "Phase" }),
161
+ /* @__PURE__ */ jsx(Typography, { variant: "h4", children: status.phase || "Unknown" })
162
+ ] }) }) }),
163
+ /* @__PURE__ */ jsx(Grid, { item: true, xs: 12, sm: 6, md: 3, children: /* @__PURE__ */ jsx(Card, { className: classes.statusCard, children: /* @__PURE__ */ jsxs(CardContent, { children: [
164
+ /* @__PURE__ */ jsx(Typography, { variant: "h6", color: "textSecondary", children: "VM Classes" }),
165
+ /* @__PURE__ */ jsx(Typography, { variant: "h4", children: status.vmClasses?.length || 0 })
166
+ ] }) }) }),
167
+ /* @__PURE__ */ jsx(Grid, { item: true, xs: 12, sm: 6, md: 3, children: /* @__PURE__ */ jsx(Card, { className: classes.statusCard, children: /* @__PURE__ */ jsxs(CardContent, { children: [
168
+ /* @__PURE__ */ jsx(Typography, { variant: "h6", color: "textSecondary", children: "Storage Classes" }),
169
+ /* @__PURE__ */ jsx(Typography, { variant: "h4", children: status.storageClasses?.length || 0 })
170
+ ] }) }) }),
171
+ /* @__PURE__ */ jsx(Grid, { item: true, xs: 12, sm: 6, md: 3, children: /* @__PURE__ */ jsx(Card, { className: classes.statusCard, children: /* @__PURE__ */ jsxs(CardContent, { children: [
172
+ /* @__PURE__ */ jsx(Typography, { variant: "h6", color: "textSecondary", children: "Zones" }),
173
+ /* @__PURE__ */ jsx(Typography, { variant: "h4", children: status.zones?.length || 0 })
174
+ ] }) }) })
175
+ ] }) }) })
176
+ ] });
177
+ };
178
+
179
+ export { VCFAutomationCCINamespaceDetails };
180
+ //# sourceMappingURL=VCFAutomationCCINamespaceDetails.esm.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"VCFAutomationCCINamespaceDetails.esm.js","sources":["../../src/components/VCFAutomationCCINamespaceDetails.tsx"],"sourcesContent":["import { useEntity } from '@backstage/plugin-catalog-react';\nimport {\n InfoCard,\n StructuredMetadataTable,\n StatusOK,\n StatusError,\n StatusPending,\n Table,\n TableColumn,\n} from '@backstage/core-components';\nimport { Grid, Typography, Box, Card, CardContent } from '@material-ui/core';\nimport { makeStyles } from '@material-ui/core/styles';\n\nconst useStyles = makeStyles(theme => ({\n statusChip: {\n marginRight: theme.spacing(1),\n marginBottom: theme.spacing(0.5),\n },\n sectionTitle: {\n marginBottom: theme.spacing(2),\n },\n conditionChip: {\n margin: theme.spacing(0.25),\n },\n card: {\n marginBottom: theme.spacing(2),\n },\n statusCard: {\n border: `1px solid ${theme.palette.divider}`,\n },\n}));\n\ninterface VMClass {\n name: string;\n}\n\ninterface StorageClass {\n name: string;\n limit: string;\n}\n\ninterface Zone {\n name: string;\n cpuLimit: string;\n cpuReservation: string;\n memoryLimit: string;\n memoryReservation: string;\n}\n\ninterface Condition {\n type: string;\n status: string;\n lastTransitionTime: string;\n reason?: string;\n message?: string;\n}\n\nexport const VCFAutomationCCINamespaceDetails = () => {\n const classes = useStyles();\n const { entity } = useEntity();\n\n const resourceProperties = entity.metadata.annotations?.['terasky.backstage.io/vcf-automation-resource-properties'];\n const supervisorNamespaceData = entity.metadata.annotations?.['terasky.backstage.io/vcf-automation-supervisor-namespace-data'];\n const namespaceEndpoint = entity.metadata.annotations?.['terasky.backstage.io/vcf-automation-cci-namespace-endpoint'];\n const namespacePhase = entity.metadata.annotations?.['terasky.backstage.io/vcf-automation-cci-namespace-phase'];\n const resourceState = entity.metadata.annotations?.['terasky.backstage.io/vcf-automation-resource-state'];\n const syncStatus = entity.metadata.annotations?.['terasky.backstage.io/vcf-automation-resource-sync-status'];\n const createdAt = entity.metadata.annotations?.['terasky.backstage.io/vcf-automation-resource-created-at'];\n const origin = entity.metadata.annotations?.['terasky.backstage.io/vcf-automation-resource-origin'];\n\n const isStandalone = origin === 'SUPERVISOR_NAMESPACE';\n \n // For standalone namespaces, use supervisor namespace data; for deployment-managed, use resource properties\n let namespaceData = null;\n if (isStandalone && supervisorNamespaceData) {\n try {\n namespaceData = JSON.parse(supervisorNamespaceData);\n } catch (e) {\n // Keep null if parsing fails\n }\n } else if (resourceProperties) {\n try {\n namespaceData = JSON.parse(resourceProperties);\n } catch (e) {\n // Keep null if parsing fails\n }\n }\n\n if (!namespaceData) {\n return (\n <InfoCard title={`CCI Supervisor Namespace Details${isStandalone ? ' (Standalone)' : ''}`}>\n <Typography>No namespace data available.</Typography>\n </InfoCard>\n );\n }\n\n const { status, metadata } = namespaceData;\n\n const renderStatusIcon = (conditionStatus: string) => {\n switch (conditionStatus.toLowerCase()) {\n case 'true':\n return <StatusOK />;\n case 'false':\n return <StatusError />;\n default:\n return <StatusPending />;\n }\n };\n\n const basicInfo = {\n 'Namespace Name': namespaceData.name || 'Unknown',\n 'Resource ID': namespaceData.id || 'Unknown',\n 'Resource Link': namespaceData.resourceLink || 'Not available',\n 'Phase': namespacePhase || status?.phase || 'Unknown',\n 'State': resourceState || 'Unknown',\n 'Sync Status': syncStatus || 'Unknown',\n 'Created At': createdAt ? new Date(createdAt).toLocaleString() : 'Unknown',\n 'Existing Resource': namespaceData.existing ? 'Yes' : 'No',\n };\n\n const infrastructureInfo = {\n 'Infrastructure ID': metadata?.['infrastructure.cci.vmware.com/id'] || 'Not available',\n 'Project ID': metadata?.['infrastructure.cci.vmware.com/project-id'] || 'Not available',\n 'Endpoint URL': namespaceEndpoint || status?.namespaceEndpointURL || 'Not available',\n };\n\n const vmClassColumns: TableColumn<VMClass>[] = [\n { title: 'VM Class Name', field: 'name' },\n ];\n\n const storageClassColumns: TableColumn<StorageClass>[] = [\n { title: 'Storage Class Name', field: 'name' },\n { title: 'Limit', field: 'limit' },\n ];\n\n const zoneColumns: TableColumn<Zone>[] = [\n { title: 'Zone Name', field: 'name' },\n { title: 'CPU Limit', field: 'cpuLimit' },\n { title: 'CPU Reservation', field: 'cpuReservation' },\n { title: 'Memory Limit', field: 'memoryLimit' },\n { title: 'Memory Reservation', field: 'memoryReservation' },\n ];\n\n const conditionColumns: TableColumn<Condition>[] = [\n { \n title: 'Status', \n field: 'status',\n render: (rowData) => (\n <Box display=\"flex\" alignItems=\"center\">\n {renderStatusIcon(rowData.status)}\n <span style={{ marginLeft: 8 }}>{rowData.status}</span>\n </Box>\n ),\n },\n { title: 'Type', field: 'type' },\n { title: 'Last Transition', field: 'lastTransitionTime' },\n { title: 'Reason', field: 'reason' },\n { title: 'Message', field: 'message' },\n ];\n\n return (\n <Grid container spacing={3}>\n <Grid item xs={12}>\n <InfoCard title=\"Basic Information\">\n <StructuredMetadataTable metadata={basicInfo} />\n </InfoCard>\n </Grid>\n\n <Grid item xs={12}>\n <InfoCard title=\"Infrastructure Details\">\n <StructuredMetadataTable metadata={infrastructureInfo} />\n </InfoCard>\n </Grid>\n\n {status?.conditions && status.conditions.length > 0 && (\n <Grid item xs={12}>\n <InfoCard title=\"Namespace Conditions\">\n <Table\n columns={conditionColumns}\n data={status.conditions}\n options={{\n search: true,\n paging: false,\n padding: 'dense',\n }}\n />\n </InfoCard>\n </Grid>\n )}\n\n {status?.vmClasses && status.vmClasses.length > 0 && (\n <Grid item xs={12} md={6}>\n <InfoCard title=\"Available VM Classes\">\n <Table\n columns={vmClassColumns}\n data={status.vmClasses}\n options={{\n search: true,\n paging: status.vmClasses.length > 10,\n pageSize: 10,\n padding: 'dense',\n }}\n />\n </InfoCard>\n </Grid>\n )}\n\n {status?.storageClasses && status.storageClasses.length > 0 && (\n <Grid item xs={12} md={6}>\n <InfoCard title=\"Storage Classes\">\n <Table\n columns={storageClassColumns}\n data={status.storageClasses}\n options={{\n search: true,\n paging: false,\n padding: 'dense',\n }}\n />\n </InfoCard>\n </Grid>\n )}\n\n {status?.zones && status.zones.length > 0 && (\n <Grid item xs={12}>\n <InfoCard title=\"Resource Zones\">\n <Table\n columns={zoneColumns}\n data={status.zones}\n options={{\n search: true,\n paging: false,\n padding: 'dense',\n }}\n />\n </InfoCard>\n </Grid>\n )}\n\n {status && (\n <Grid item xs={12}>\n <InfoCard title=\"Namespace Status Summary\">\n <Grid container spacing={2}>\n <Grid item xs={12} sm={6} md={3}>\n <Card className={classes.statusCard}>\n <CardContent>\n <Typography variant=\"h6\" color=\"textSecondary\">\n Phase\n </Typography>\n <Typography variant=\"h4\">\n {status.phase || 'Unknown'}\n </Typography>\n </CardContent>\n </Card>\n </Grid>\n <Grid item xs={12} sm={6} md={3}>\n <Card className={classes.statusCard}>\n <CardContent>\n <Typography variant=\"h6\" color=\"textSecondary\">\n VM Classes\n </Typography>\n <Typography variant=\"h4\">\n {status.vmClasses?.length || 0}\n </Typography>\n </CardContent>\n </Card>\n </Grid>\n <Grid item xs={12} sm={6} md={3}>\n <Card className={classes.statusCard}>\n <CardContent>\n <Typography variant=\"h6\" color=\"textSecondary\">\n Storage Classes\n </Typography>\n <Typography variant=\"h4\">\n {status.storageClasses?.length || 0}\n </Typography>\n </CardContent>\n </Card>\n </Grid>\n <Grid item xs={12} sm={6} md={3}>\n <Card className={classes.statusCard}>\n <CardContent>\n <Typography variant=\"h6\" color=\"textSecondary\">\n Zones\n </Typography>\n <Typography variant=\"h4\">\n {status.zones?.length || 0}\n </Typography>\n </CardContent>\n </Card>\n </Grid>\n </Grid>\n </InfoCard>\n </Grid>\n )}\n </Grid>\n );\n};"],"names":[],"mappings":"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"}
@@ -0,0 +1,187 @@
1
+ import { jsx, jsxs } from 'react/jsx-runtime';
2
+ import { useMemo } from 'react';
3
+ import { useEntity } from '@backstage/plugin-catalog-react';
4
+ import { useApi } from '@backstage/core-plugin-api';
5
+ import { vcfAutomationApiRef } from '../api/VcfAutomationClient.esm.js';
6
+ import { InfoCard, Progress, ResponseErrorPanel, StructuredMetadataTable, StatusPending, StatusError, StatusOK } from '@backstage/core-components';
7
+ import { Typography, Grid, Box, Chip } from '@material-ui/core';
8
+ import { makeStyles } from '@material-ui/core/styles';
9
+ import useAsync from 'react-use/lib/useAsync';
10
+
11
+ const useStyles = makeStyles((theme) => ({
12
+ statusChip: {
13
+ marginRight: theme.spacing(1),
14
+ marginBottom: theme.spacing(0.5)
15
+ },
16
+ sectionTitle: {
17
+ marginBottom: theme.spacing(2)
18
+ },
19
+ conditionChip: {
20
+ margin: theme.spacing(0.25)
21
+ }
22
+ }));
23
+ const VCFAutomationCCINamespaceOverview = () => {
24
+ const classes = useStyles();
25
+ const { entity } = useEntity();
26
+ const api = useApi(vcfAutomationApiRef);
27
+ const deploymentId = entity.spec?.system;
28
+ const resourceId = entity.metadata.name;
29
+ const instanceName = entity.metadata.annotations?.["terasky.backstage.io/vcf-automation-instance"];
30
+ const annotationData = useMemo(() => {
31
+ const resourceProperties = entity.metadata.annotations?.["terasky.backstage.io/vcf-automation-resource-properties"];
32
+ const supervisorNamespaceData = entity.metadata.annotations?.["terasky.backstage.io/vcf-automation-supervisor-namespace-data"];
33
+ const origin = entity.metadata.annotations?.["terasky.backstage.io/vcf-automation-resource-origin"];
34
+ let namespaceData2 = null;
35
+ if (supervisorNamespaceData && supervisorNamespaceData !== "{}") {
36
+ try {
37
+ namespaceData2 = JSON.parse(supervisorNamespaceData);
38
+ } catch (e) {
39
+ }
40
+ }
41
+ if (!namespaceData2 && resourceProperties && resourceProperties !== "{}") {
42
+ try {
43
+ namespaceData2 = JSON.parse(resourceProperties);
44
+ } catch (e) {
45
+ }
46
+ }
47
+ return {
48
+ namespaceData: namespaceData2,
49
+ isStandalone: origin === "SUPERVISOR_NAMESPACE",
50
+ origin: origin || ""
51
+ };
52
+ }, [
53
+ entity.metadata.annotations?.["terasky.backstage.io/vcf-automation-resource-properties"],
54
+ entity.metadata.annotations?.["terasky.backstage.io/vcf-automation-supervisor-namespace-data"],
55
+ entity.metadata.annotations?.["terasky.backstage.io/vcf-automation-resource-origin"]
56
+ ]);
57
+ const needsApiCall = !annotationData.namespaceData;
58
+ const { value: apiNamespaceData, loading, error } = useAsync(async () => {
59
+ if (!needsApiCall || !resourceId) {
60
+ return null;
61
+ }
62
+ try {
63
+ if (annotationData.isStandalone) {
64
+ const response2 = await api.getSupervisorNamespace(resourceId, instanceName);
65
+ return response2;
66
+ }
67
+ if (!deploymentId) {
68
+ return null;
69
+ }
70
+ const response = await api.getDeploymentResources(deploymentId, instanceName);
71
+ let resources = null;
72
+ if (response) {
73
+ if (Array.isArray(response)) {
74
+ resources = response;
75
+ } else if (response.content && Array.isArray(response.content)) {
76
+ resources = response.content;
77
+ }
78
+ }
79
+ if (resources) {
80
+ return resources.find((r) => r.id === resourceId);
81
+ }
82
+ return null;
83
+ } catch (apiError) {
84
+ console.error("Failed to fetch namespace data:", apiError);
85
+ return null;
86
+ }
87
+ }, [needsApiCall, deploymentId, resourceId, instanceName, annotationData.isStandalone]);
88
+ const namespaceData = annotationData.namespaceData || apiNamespaceData;
89
+ if (loading) {
90
+ return /* @__PURE__ */ jsx(InfoCard, { title: `CCI Supervisor Namespace${annotationData.isStandalone ? " (Standalone)" : ""}`, children: /* @__PURE__ */ jsx(Progress, {}) });
91
+ }
92
+ if (error) {
93
+ return /* @__PURE__ */ jsx(ResponseErrorPanel, { error });
94
+ }
95
+ if (!namespaceData) {
96
+ return /* @__PURE__ */ jsx(InfoCard, { title: `CCI Supervisor Namespace${annotationData.isStandalone ? " (Standalone)" : ""}`, children: /* @__PURE__ */ jsx(Typography, { children: "No namespace data available." }) });
97
+ }
98
+ const { status, metadata } = namespaceData;
99
+ const renderStatusIcon = (conditionStatus) => {
100
+ switch (conditionStatus.toLowerCase()) {
101
+ case "true":
102
+ return /* @__PURE__ */ jsx(StatusOK, {});
103
+ case "false":
104
+ return /* @__PURE__ */ jsx(StatusError, {});
105
+ default:
106
+ return /* @__PURE__ */ jsx(StatusPending, {});
107
+ }
108
+ };
109
+ const basicInfo = {
110
+ "Namespace Name": namespaceData.name,
111
+ "Resource Link": namespaceData.resourceLink,
112
+ "Phase": status?.phase || "Unknown",
113
+ "Endpoint URL": status?.namespaceEndpointURL || "Not available",
114
+ "Infrastructure ID": metadata?.["infrastructure.cci.vmware.com/id"] || "Not available",
115
+ "Project ID": metadata?.["infrastructure.cci.vmware.com/project-id"] || "Not available"
116
+ };
117
+ return /* @__PURE__ */ jsx(InfoCard, { title: `CCI Supervisor Namespace Overview${annotationData.isStandalone ? " (Standalone)" : ""}`, children: /* @__PURE__ */ jsxs(Grid, { container: true, spacing: 3, children: [
118
+ /* @__PURE__ */ jsxs(Grid, { item: true, xs: 12, children: [
119
+ /* @__PURE__ */ jsx(Typography, { variant: "h6", className: classes.sectionTitle, children: "Basic Information" }),
120
+ /* @__PURE__ */ jsx(StructuredMetadataTable, { metadata: basicInfo })
121
+ ] }),
122
+ status?.conditions && status.conditions.length > 0 && /* @__PURE__ */ jsxs(Grid, { item: true, xs: 12, children: [
123
+ /* @__PURE__ */ jsx(Typography, { variant: "h6", className: classes.sectionTitle, children: "Conditions" }),
124
+ /* @__PURE__ */ jsx(Box, { children: status.conditions.map((condition, index) => /* @__PURE__ */ jsxs(Box, { display: "flex", alignItems: "center", mb: 1, children: [
125
+ renderStatusIcon(condition.status),
126
+ /* @__PURE__ */ jsx(
127
+ Chip,
128
+ {
129
+ label: `${condition.type}: ${condition.status}`,
130
+ size: "small",
131
+ className: classes.conditionChip,
132
+ color: condition.status === "True" ? "primary" : "default"
133
+ }
134
+ ),
135
+ /* @__PURE__ */ jsx(Typography, { variant: "caption", style: { marginLeft: 8 }, children: condition.lastTransitionTime })
136
+ ] }, index)) })
137
+ ] }),
138
+ status?.vmClasses && status.vmClasses.length > 0 && /* @__PURE__ */ jsxs(Grid, { item: true, xs: 12, md: 6, children: [
139
+ /* @__PURE__ */ jsx(Typography, { variant: "h6", className: classes.sectionTitle, children: "Available VM Classes" }),
140
+ /* @__PURE__ */ jsx(Box, { children: status.vmClasses.map((vmClass, index) => /* @__PURE__ */ jsx(
141
+ Chip,
142
+ {
143
+ label: vmClass.name,
144
+ size: "small",
145
+ className: classes.statusChip,
146
+ variant: "outlined"
147
+ },
148
+ index
149
+ )) })
150
+ ] }),
151
+ status?.storageClasses && status.storageClasses.length > 0 && /* @__PURE__ */ jsxs(Grid, { item: true, xs: 12, md: 6, children: [
152
+ /* @__PURE__ */ jsx(Typography, { variant: "h6", className: classes.sectionTitle, children: "Storage Classes" }),
153
+ /* @__PURE__ */ jsx(Box, { children: status.storageClasses.map((storageClass, index) => /* @__PURE__ */ jsxs(Box, { mb: 1, children: [
154
+ /* @__PURE__ */ jsx(
155
+ Chip,
156
+ {
157
+ label: storageClass.name,
158
+ size: "small",
159
+ className: classes.statusChip,
160
+ color: "secondary"
161
+ }
162
+ ),
163
+ /* @__PURE__ */ jsxs(Typography, { variant: "caption", display: "block", children: [
164
+ "Limit: ",
165
+ storageClass.limit
166
+ ] })
167
+ ] }, index)) })
168
+ ] }),
169
+ status?.zones && status.zones.length > 0 && /* @__PURE__ */ jsxs(Grid, { item: true, xs: 12, children: [
170
+ /* @__PURE__ */ jsx(Typography, { variant: "h6", className: classes.sectionTitle, children: "Resource Zones" }),
171
+ /* @__PURE__ */ jsx(Grid, { container: true, spacing: 2, children: status.zones.map((zone, index) => /* @__PURE__ */ jsx(Grid, { item: true, xs: 12, md: 6, children: /* @__PURE__ */ jsx(InfoCard, { title: zone.name, children: /* @__PURE__ */ jsx(
172
+ StructuredMetadataTable,
173
+ {
174
+ metadata: {
175
+ "CPU Limit": zone.cpuLimit,
176
+ "CPU Reservation": zone.cpuReservation,
177
+ "Memory Limit": zone.memoryLimit,
178
+ "Memory Reservation": zone.memoryReservation
179
+ }
180
+ }
181
+ ) }) }, index)) })
182
+ ] })
183
+ ] }) });
184
+ };
185
+
186
+ export { VCFAutomationCCINamespaceOverview };
187
+ //# sourceMappingURL=VCFAutomationCCINamespaceOverview.esm.js.map