Merge the new APIs

Signed-off-by: Marcelo Fukumoto <marcelo.fukumoto@suse.com>
This commit is contained in:
Marcelo Fukumoto 2026-05-07 18:14:39 +02:00
parent d195c5dd18
commit d4f59a04be
No known key found for this signature in database
GPG Key ID: 1CA12189625C2543
3 changed files with 80 additions and 14 deletions

View File

@ -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: []
};
});

View File

@ -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: ''

View File

@ -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;
};