import api from '../../api'; import i18n from '@/i18n'; const VirtualMediaStore = { namespaced: true, state: { proxyDevices: [], legacyDevices: [], connections: [] }, getters: { proxyDevices: state => state.proxyDevices, legacyDevices: state => state.legacyDevices }, mutations: { setProxyDevicesData: (state, deviceData) => (state.proxyDevices = deviceData), setLegacyDevicesData: (state, deviceData) => (state.legacyDevices = deviceData) }, actions: { async getData({ commit }) { const virtualMediaListEnabled = process.env.VUE_APP_VIRTUAL_MEDIA_LIST_ENABLED === 'true' ? true : false; if (!virtualMediaListEnabled) { const device = { id: i18n.t('pageVirtualMedia.defaultDeviceName'), websocket: '/vm/0/0', file: null, transferProtocolType: 'OEM', isActive: false }; commit('setProxyDevicesData', [device]); return; } return await api .get('/redfish/v1/Managers/bmc/VirtualMedia') .then(response => response.data.Members.map(virtualMedia => virtualMedia['@odata.id']) ) .then(devices => api.all(devices.map(device => api.get(device)))) .then(devices => { const deviceData = devices.map(device => { const isActive = device.data?.Inserted === true ? true : false; return { id: device.data?.Id, transferProtocolType: device.data?.TransferProtocolType, websocket: device.data?.Oem?.OpenBMC?.WebSocketEndpoint, isActive: isActive }; }); const proxyDevices = deviceData .filter(d => d.transferProtocolType === 'OEM') .map(device => { return { ...device, file: null }; }); const legacyDevices = deviceData .filter(d => !d.transferProtocolType) .map(device => { return { ...device, serverUri: '', username: '', password: '', isRW: false }; }); commit('setProxyDevicesData', proxyDevices); commit('setLegacyDevicesData', legacyDevices); }) .catch(error => { console.log('Virtual Media:', error); }); }, async mountImage(_, { id, data }) { return await api .post( `/redfish/v1/Managers/bmc/VirtualMedia/${id}/Actions/VirtualMedia.InsertMedia`, data ) .catch(error => { console.log('Mount image:', error); throw new Error(); }); }, async unmountImage(_, id) { return await api .post( `/redfish/v1/Managers/bmc/VirtualMedia/${id}/Actions/VirtualMedia.EjectMedia` ) .catch(error => { console.log('Unmount image:', error); throw new Error(); }); } } }; export default VirtualMediaStore;