168cbbe90SSandeepa Singhimport api from '@/store/api'; 268cbbe90SSandeepa Singhimport i18n from '@/i18n'; 368cbbe90SSandeepa Singh 468cbbe90SSandeepa Singhconst FirmwareStore = { 568cbbe90SSandeepa Singh namespaced: true, 668cbbe90SSandeepa Singh state: { 768cbbe90SSandeepa Singh bmcFirmware: [], 868cbbe90SSandeepa Singh hostFirmware: [], 968cbbe90SSandeepa Singh bmcActiveFirmwareId: null, 1068cbbe90SSandeepa Singh hostActiveFirmwareId: null, 1168cbbe90SSandeepa Singh applyTime: null, 126b424f99Sgreenfil httpPushUri: null, 1368cbbe90SSandeepa Singh tftpAvailable: false, 1468cbbe90SSandeepa Singh }, 1568cbbe90SSandeepa Singh getters: { 1668cbbe90SSandeepa Singh isTftpUploadAvailable: (state) => state.tftpAvailable, 1768cbbe90SSandeepa Singh isSingleFileUploadEnabled: (state) => state.hostFirmware.length === 0, 1868cbbe90SSandeepa Singh activeBmcFirmware: (state) => { 1968cbbe90SSandeepa Singh return state.bmcFirmware.find( 208132399cSEd Tanous (firmware) => firmware.id === state.bmcActiveFirmwareId, 2168cbbe90SSandeepa Singh ); 2268cbbe90SSandeepa Singh }, 2368cbbe90SSandeepa Singh activeHostFirmware: (state) => { 2468cbbe90SSandeepa Singh return state.hostFirmware.find( 258132399cSEd Tanous (firmware) => firmware.id === state.hostActiveFirmwareId, 2668cbbe90SSandeepa Singh ); 2768cbbe90SSandeepa Singh }, 2868cbbe90SSandeepa Singh backupBmcFirmware: (state) => { 2968cbbe90SSandeepa Singh return state.bmcFirmware.find( 308132399cSEd Tanous (firmware) => firmware.id !== state.bmcActiveFirmwareId, 3168cbbe90SSandeepa Singh ); 3268cbbe90SSandeepa Singh }, 3368cbbe90SSandeepa Singh backupHostFirmware: (state) => { 3468cbbe90SSandeepa Singh return state.hostFirmware.find( 358132399cSEd Tanous (firmware) => firmware.id !== state.hostActiveFirmwareId, 3668cbbe90SSandeepa Singh ); 3768cbbe90SSandeepa Singh }, 3868cbbe90SSandeepa Singh }, 3968cbbe90SSandeepa Singh mutations: { 4068cbbe90SSandeepa Singh setActiveBmcFirmwareId: (state, id) => (state.bmcActiveFirmwareId = id), 4168cbbe90SSandeepa Singh setActiveHostFirmwareId: (state, id) => (state.hostActiveFirmwareId = id), 4268cbbe90SSandeepa Singh setBmcFirmware: (state, firmware) => (state.bmcFirmware = firmware), 4368cbbe90SSandeepa Singh setHostFirmware: (state, firmware) => (state.hostFirmware = firmware), 4468cbbe90SSandeepa Singh setApplyTime: (state, applyTime) => (state.applyTime = applyTime), 456b424f99Sgreenfil setHttpPushUri: (state, httpPushUri) => (state.httpPushUri = httpPushUri), 4668cbbe90SSandeepa Singh setTftpUploadAvailable: (state, tftpAvailable) => 4768cbbe90SSandeepa Singh (state.tftpAvailable = tftpAvailable), 4868cbbe90SSandeepa Singh }, 4968cbbe90SSandeepa Singh actions: { 5068cbbe90SSandeepa Singh async getFirmwareInformation({ dispatch }) { 5168cbbe90SSandeepa Singh dispatch('getActiveHostFirmware'); 5268cbbe90SSandeepa Singh dispatch('getActiveBmcFirmware'); 5368cbbe90SSandeepa Singh return await dispatch('getFirmwareInventory'); 5468cbbe90SSandeepa Singh }, 55*8841b7d4SSean Zhang async getActiveBmcFirmware({ commit }) { 5668cbbe90SSandeepa Singh return api 57*8841b7d4SSean Zhang .get(`${await this.dispatch('global/getBmcPath')}`) 5868cbbe90SSandeepa Singh .then(({ data: { Links } }) => { 5968cbbe90SSandeepa Singh const id = Links?.ActiveSoftwareImage['@odata.id'].split('/').pop(); 6068cbbe90SSandeepa Singh commit('setActiveBmcFirmwareId', id); 6168cbbe90SSandeepa Singh }) 6268cbbe90SSandeepa Singh .catch((error) => console.log(error)); 6368cbbe90SSandeepa Singh }, 64*8841b7d4SSean Zhang async getActiveHostFirmware({ commit }) { 6568cbbe90SSandeepa Singh return api 66*8841b7d4SSean Zhang .get(`${await this.dispatch('global/getSystemPath')}/Bios`) 6768cbbe90SSandeepa Singh .then(({ data: { Links } }) => { 6868cbbe90SSandeepa Singh const id = Links?.ActiveSoftwareImage['@odata.id'].split('/').pop(); 6968cbbe90SSandeepa Singh commit('setActiveHostFirmwareId', id); 7068cbbe90SSandeepa Singh }) 7168cbbe90SSandeepa Singh .catch((error) => console.log(error)); 7268cbbe90SSandeepa Singh }, 7368cbbe90SSandeepa Singh async getFirmwareInventory({ commit }) { 7468cbbe90SSandeepa Singh const inventoryList = await api 7568cbbe90SSandeepa Singh .get('/redfish/v1/UpdateService/FirmwareInventory') 7668cbbe90SSandeepa Singh .then(({ data: { Members = [] } = {} }) => 778132399cSEd Tanous Members.map((item) => api.get(item['@odata.id'])), 7868cbbe90SSandeepa Singh ) 7968cbbe90SSandeepa Singh .catch((error) => console.log(error)); 8068cbbe90SSandeepa Singh await api 8168cbbe90SSandeepa Singh .all(inventoryList) 8268cbbe90SSandeepa Singh .then((response) => { 8368cbbe90SSandeepa Singh const bmcFirmware = []; 8468cbbe90SSandeepa Singh const hostFirmware = []; 8568cbbe90SSandeepa Singh response.forEach(({ data }) => { 8668cbbe90SSandeepa Singh const firmwareType = data?.RelatedItem?.[0]?.['@odata.id'] 8768cbbe90SSandeepa Singh .split('/') 8868cbbe90SSandeepa Singh .pop(); 8968cbbe90SSandeepa Singh const item = { 9068cbbe90SSandeepa Singh version: data?.Version, 9168cbbe90SSandeepa Singh id: data?.Id, 9268cbbe90SSandeepa Singh location: data?.['@odata.id'], 9368cbbe90SSandeepa Singh status: data?.Status?.Health, 9468cbbe90SSandeepa Singh }; 9568cbbe90SSandeepa Singh if (firmwareType === 'bmc') { 9668cbbe90SSandeepa Singh bmcFirmware.push(item); 9768cbbe90SSandeepa Singh } else if (firmwareType === 'Bios') { 9868cbbe90SSandeepa Singh hostFirmware.push(item); 9968cbbe90SSandeepa Singh } 10068cbbe90SSandeepa Singh }); 10168cbbe90SSandeepa Singh commit('setBmcFirmware', bmcFirmware); 10268cbbe90SSandeepa Singh commit('setHostFirmware', hostFirmware); 10368cbbe90SSandeepa Singh }) 10468cbbe90SSandeepa Singh .catch((error) => { 10568cbbe90SSandeepa Singh console.log(error); 10668cbbe90SSandeepa Singh }); 10768cbbe90SSandeepa Singh }, 10868cbbe90SSandeepa Singh getUpdateServiceSettings({ commit }) { 10968cbbe90SSandeepa Singh api 11068cbbe90SSandeepa Singh .get('/redfish/v1/UpdateService') 11168cbbe90SSandeepa Singh .then(({ data }) => { 11268cbbe90SSandeepa Singh const applyTime = 11368cbbe90SSandeepa Singh data.HttpPushUriOptions.HttpPushUriApplyTime.ApplyTime; 11468cbbe90SSandeepa Singh const allowableActions = 11568cbbe90SSandeepa Singh data?.Actions?.['#UpdateService.SimpleUpdate']?.[ 11668cbbe90SSandeepa Singh 'TransferProtocol@Redfish.AllowableValues' 11768cbbe90SSandeepa Singh ]; 11868cbbe90SSandeepa Singh commit('setApplyTime', applyTime); 1196b424f99Sgreenfil const httpPushUri = data.HttpPushUri; 1206b424f99Sgreenfil commit('setHttpPushUri', httpPushUri); 12168cbbe90SSandeepa Singh if (allowableActions?.includes('TFTP')) { 12268cbbe90SSandeepa Singh commit('setTftpUploadAvailable', true); 12368cbbe90SSandeepa Singh } 12468cbbe90SSandeepa Singh }) 12568cbbe90SSandeepa Singh .catch((error) => console.log(error)); 12668cbbe90SSandeepa Singh }, 127ccb71f0bSJagpal Singh Gill async uploadFirmware({ state }, image) { 12868cbbe90SSandeepa Singh return await api 1296b424f99Sgreenfil .post(state.httpPushUri, image, { 13068cbbe90SSandeepa Singh headers: { 'Content-Type': 'application/octet-stream' }, 13168cbbe90SSandeepa Singh }) 13268cbbe90SSandeepa Singh .catch((error) => { 13368cbbe90SSandeepa Singh console.log(error); 13468cbbe90SSandeepa Singh throw new Error(i18n.t('pageFirmware.toast.errorUpdateFirmware')); 13568cbbe90SSandeepa Singh }); 13668cbbe90SSandeepa Singh }, 137ccb71f0bSJagpal Singh Gill async uploadFirmwareTFTP(fileAddress) { 13868cbbe90SSandeepa Singh const data = { 13968cbbe90SSandeepa Singh TransferProtocol: 'TFTP', 14068cbbe90SSandeepa Singh ImageURI: fileAddress, 14168cbbe90SSandeepa Singh }; 14268cbbe90SSandeepa Singh return await api 14368cbbe90SSandeepa Singh .post( 14468cbbe90SSandeepa Singh '/redfish/v1/UpdateService/Actions/UpdateService.SimpleUpdate', 1458132399cSEd Tanous data, 14668cbbe90SSandeepa Singh ) 14768cbbe90SSandeepa Singh .catch((error) => { 14868cbbe90SSandeepa Singh console.log(error); 14968cbbe90SSandeepa Singh throw new Error(i18n.t('pageFirmware.toast.errorUpdateFirmware')); 15068cbbe90SSandeepa Singh }); 15168cbbe90SSandeepa Singh }, 15268cbbe90SSandeepa Singh async switchBmcFirmwareAndReboot({ getters }) { 15368cbbe90SSandeepa Singh const backupLocation = getters.backupBmcFirmware.location; 15468cbbe90SSandeepa Singh const data = { 15568cbbe90SSandeepa Singh Links: { 15668cbbe90SSandeepa Singh ActiveSoftwareImage: { 15768cbbe90SSandeepa Singh '@odata.id': backupLocation, 15868cbbe90SSandeepa Singh }, 15968cbbe90SSandeepa Singh }, 16068cbbe90SSandeepa Singh }; 16168cbbe90SSandeepa Singh return await api 162*8841b7d4SSean Zhang .patch(`${await this.dispatch('global/getBmcPath')}`, data) 16368cbbe90SSandeepa Singh .catch((error) => { 16468cbbe90SSandeepa Singh console.log(error); 16568cbbe90SSandeepa Singh throw new Error(i18n.t('pageFirmware.toast.errorSwitchImages')); 16668cbbe90SSandeepa Singh }); 16768cbbe90SSandeepa Singh }, 16868cbbe90SSandeepa Singh }, 16968cbbe90SSandeepa Singh}; 17068cbbe90SSandeepa Singh 17168cbbe90SSandeepa Singhexport default FirmwareStore; 172