diff --git a/pkg/harvester/pages/c/_cluster/forklift/configure-mappings.vue b/pkg/harvester/pages/c/_cluster/forklift/configure-mappings.vue index 26a20cba..2732ddf9 100644 --- a/pkg/harvester/pages/c/_cluster/forklift/configure-mappings.vue +++ b/pkg/harvester/pages/c/_cluster/forklift/configure-mappings.vue @@ -11,7 +11,6 @@ import { SCHEMA, STORAGE_CLASS, NETWORK_ATTACHMENT } from '@shell/config/types'; import { useI18n } from '@shell/composables/useI18n'; import { HCI } from '../../../../types'; import { PRODUCT_NAME } from '../../../../config/harvester'; -import vmData from '../../../../utils/vms.json'; const schema = { id: HCI.FORKLIFT_NETWORK_MAP, @@ -335,11 +334,54 @@ const init = async() => { if (vmsParam) { try { const vmIds = JSON.parse(vmsParam); + const baseUrl = `https://forklift-apir.13.48.147.135.sslip.io/providers/vsphere/67e67481-48f1-4d9b-8fb6-b4c5c58d3232`; + + const [allVms, networksData, datastoresData] = await Promise.all([ + fetch(`${ baseUrl }/vms`).then((r) => r.json()).catch(() => []), + fetch(`${ baseUrl }/networks`).then((r) => r.json()).catch(() => []), + fetch(`${ baseUrl }/datastores`).then((r) => r.json()).catch(() => []), + ]); + + const networkNameMap = (Array.isArray(networksData) ? networksData : []).reduce((map, n) => { + map[n.id] = n.name; + + return map; + }, {}); + const datastoreNameMap = (Array.isArray(datastoresData) ? datastoresData : []).reduce((map, d) => { + map[d.id] = d.name; + + return map; + }, {}); + + const vmList = Array.isArray(allVms) ? allVms : (allVms?.data || []); vms.value = vmIds.map((id) => { - const found = vmData.find((vm) => vm.id === id); + const found = vmList.find((vm) => vm.id === id); - return found || { + if (found) { + // Resolve network names + if (found.networks) { + found.networks = found.networks.map((n) => ({ + ...n, + name: n.name || networkNameMap[n.id] || n.id, + })); + } + + // Resolve datastore names + if (found.disks) { + found.disks = found.disks.map((d) => ({ + ...d, + datastore: d.datastore ? { + ...d.datastore, + name: d.datastore.name || datastoreNameMap[d.datastore.id] || d.datastore.id, + } : d.datastore, + })); + } + + return found; + } + + return { id, name: id, networks: [], disks: [] }; }); diff --git a/pkg/harvester/pages/c/_cluster/forklift/review-migration.vue b/pkg/harvester/pages/c/_cluster/forklift/review-migration.vue index c8eae5dd..8645bdab 100644 --- a/pkg/harvester/pages/c/_cluster/forklift/review-migration.vue +++ b/pkg/harvester/pages/c/_cluster/forklift/review-migration.vue @@ -12,7 +12,6 @@ import { SCHEMA } from '@shell/config/types'; import { useI18n } from '@shell/composables/useI18n'; import { HCI } from '../../../../types'; import { PRODUCT_NAME } from '../../../../config/harvester'; -import vmData from '../../../../utils/vms.json'; const schema = { id: HCI.FORKLIFT_PLAN, @@ -228,9 +227,13 @@ const init = async() => { if (vmsParam) { try { const vmIds = JSON.parse(vmsParam); + const baseUrl = `https://forklift-apir.13.48.147.135.sslip.io/providers/vsphere/67e67481-48f1-4d9b-8fb6-b4c5c58d3232`; + + const allVms = await fetch(`${ baseUrl }/vms`).then((r) => r.json()).catch(() => []); + const vmList = Array.isArray(allVms) ? allVms : (allVms?.data || []); vms.value = vmIds.map((id) => { - const found = vmData.find((vm) => vm.id === id); + const found = vmList.find((vm) => vm.id === id); return found || { id, name: id, networks: [], disks: [], cpuCount: 0, memoryMB: 0, guestName: '' diff --git a/pkg/harvester/pages/c/_cluster/forklift/select-vms.vue b/pkg/harvester/pages/c/_cluster/forklift/select-vms.vue index 7b3ea8a5..9ac6876f 100644 --- a/pkg/harvester/pages/c/_cluster/forklift/select-vms.vue +++ b/pkg/harvester/pages/c/_cluster/forklift/select-vms.vue @@ -10,7 +10,6 @@ import { SCHEMA } from '@shell/config/types'; import { useI18n } from '@shell/composables/useI18n'; import { HCI } from '../../../../types'; import { PRODUCT_NAME } from '../../../../config/harvester'; -import vmData from '../../../../utils/vms.json'; const schema = { id: HCI.FORKLIFT_PROVIDER, @@ -33,6 +32,8 @@ const discoveredVMs = ref([]); const selectedVMs = ref([]); const tableRows = ref([]); const loading = ref(true); +const networkMap = ref({}); +const datastoreMap = ref({}); const providerName = computed(() => provider.value?.metadata?.name || route.query.provider || ''); const vmCount = computed(() => discoveredVMs.value.length); @@ -100,7 +101,7 @@ const buildTableRows = () => { if (vm.networks && vm.networks.length > 0) { networks = vm.networks.map((n) => ({ - name: n.name || n.id || n, + name: n.name || networkMap.value[n.id] || n.id || n, id: n.id || '', vlanId: n.vlanId || '', })); @@ -117,7 +118,7 @@ const buildTableRows = () => { if (dsId && !seen.has(dsId)) { seen.add(dsId); datastores.push({ - name: d.datastore?.name || dsId, + name: d.datastore?.name || datastoreMap.value[dsId] || dsId, id: d.datastore?.id || '', type: d.datastore?.type || '', capacity: d.capacity || 0, @@ -197,18 +198,38 @@ const init = async() => { if (provider.value) { try { - const inventoryType = 'forklift-inventory.konveyor.io.vspherevm'; + const baseUrl = `https://forklift-apir.13.48.147.135.sslip.io/providers/vsphere/67e67481-48f1-4d9b-8fb6-b4c5c58d3232`; - discoveredVMs.value = await store.dispatch(`${ inStore }/findAll`, { type: inventoryType }); + const [vmsResp, networksResp, datastoresResp] = await Promise.all([ + fetch(`${ baseUrl }/vms`).then((r) => r.json()), + fetch(`${ baseUrl }/networks`).then((r) => r.json()).catch(() => []), + fetch(`${ baseUrl }/datastores`).then((r) => r.json()).catch(() => []), + ]); + + if (Array.isArray(vmsResp)) { + discoveredVMs.value = vmsResp; + } else if (vmsResp?.data && Array.isArray(vmsResp.data)) { + discoveredVMs.value = vmsResp.data; + } + + const networks = Array.isArray(networksResp) ? networksResp : (networksResp?.data || []); + const datastores = Array.isArray(datastoresResp) ? datastoresResp : (datastoresResp?.data || []); + + networkMap.value = networks.reduce((map, n) => { + map[n.id] = n.name; + + return map; + }, {}); + datastoreMap.value = datastores.reduce((map, d) => { + map[d.id] = d.name; + + return map; + }, {}); } catch (e) { discoveredVMs.value = []; } } - if (discoveredVMs.value.length === 0) { - discoveredVMs.value = vmData; - } - tableRows.value = buildTableRows(); loading.value = false; };