From 68cbbe9014cbdcf7229a878f564d38f6d6199f25 Mon Sep 17 00:00:00 2001 From: Sandeepa Singh Date: Wed, 14 Jul 2021 16:02:22 +0530 Subject: IA update: Update control section to operations This is the third update to the information architecture changes and has the following changes: - The control section has been updated to operations - The server led page has been removed - The firmware page is moved to operations section Signed-off-by: Sandeepa Singh Change-Id: I2e23da447890d7bee51892e1f782d5f2db6dded4 --- src/store/modules/Operations/FirmwareStore.js | 191 ++++++++++++++++++++++++++ 1 file changed, 191 insertions(+) create mode 100644 src/store/modules/Operations/FirmwareStore.js (limited to 'src/store/modules/Operations/FirmwareStore.js') diff --git a/src/store/modules/Operations/FirmwareStore.js b/src/store/modules/Operations/FirmwareStore.js new file mode 100644 index 00000000..c6639ff7 --- /dev/null +++ b/src/store/modules/Operations/FirmwareStore.js @@ -0,0 +1,191 @@ +import api from '@/store/api'; +import i18n from '@/i18n'; + +const FirmwareStore = { + namespaced: true, + state: { + bmcFirmware: [], + hostFirmware: [], + bmcActiveFirmwareId: null, + hostActiveFirmwareId: null, + applyTime: null, + tftpAvailable: false, + }, + getters: { + isTftpUploadAvailable: (state) => state.tftpAvailable, + isSingleFileUploadEnabled: (state) => state.hostFirmware.length === 0, + activeBmcFirmware: (state) => { + return state.bmcFirmware.find( + (firmware) => firmware.id === state.bmcActiveFirmwareId + ); + }, + activeHostFirmware: (state) => { + return state.hostFirmware.find( + (firmware) => firmware.id === state.hostActiveFirmwareId + ); + }, + backupBmcFirmware: (state) => { + return state.bmcFirmware.find( + (firmware) => firmware.id !== state.bmcActiveFirmwareId + ); + }, + backupHostFirmware: (state) => { + return state.hostFirmware.find( + (firmware) => firmware.id !== state.hostActiveFirmwareId + ); + }, + }, + mutations: { + setActiveBmcFirmwareId: (state, id) => (state.bmcActiveFirmwareId = id), + setActiveHostFirmwareId: (state, id) => (state.hostActiveFirmwareId = id), + setBmcFirmware: (state, firmware) => (state.bmcFirmware = firmware), + setHostFirmware: (state, firmware) => (state.hostFirmware = firmware), + setApplyTime: (state, applyTime) => (state.applyTime = applyTime), + setTftpUploadAvailable: (state, tftpAvailable) => + (state.tftpAvailable = tftpAvailable), + }, + actions: { + async getFirmwareInformation({ dispatch }) { + dispatch('getActiveHostFirmware'); + dispatch('getActiveBmcFirmware'); + return await dispatch('getFirmwareInventory'); + }, + getActiveBmcFirmware({ commit }) { + return api + .get('/redfish/v1/Managers/bmc') + .then(({ data: { Links } }) => { + const id = Links?.ActiveSoftwareImage['@odata.id'].split('/').pop(); + commit('setActiveBmcFirmwareId', id); + }) + .catch((error) => console.log(error)); + }, + getActiveHostFirmware({ commit }) { + return api + .get('/redfish/v1/Systems/system/Bios') + .then(({ data: { Links } }) => { + const id = Links?.ActiveSoftwareImage['@odata.id'].split('/').pop(); + commit('setActiveHostFirmwareId', id); + }) + .catch((error) => console.log(error)); + }, + async getFirmwareInventory({ commit }) { + const inventoryList = await api + .get('/redfish/v1/UpdateService/FirmwareInventory') + .then(({ data: { Members = [] } = {} }) => + Members.map((item) => api.get(item['@odata.id'])) + ) + .catch((error) => console.log(error)); + await api + .all(inventoryList) + .then((response) => { + const bmcFirmware = []; + const hostFirmware = []; + response.forEach(({ data }) => { + const firmwareType = data?.RelatedItem?.[0]?.['@odata.id'] + .split('/') + .pop(); + const item = { + version: data?.Version, + id: data?.Id, + location: data?.['@odata.id'], + status: data?.Status?.Health, + }; + if (firmwareType === 'bmc') { + bmcFirmware.push(item); + } else if (firmwareType === 'Bios') { + hostFirmware.push(item); + } + }); + commit('setBmcFirmware', bmcFirmware); + commit('setHostFirmware', hostFirmware); + }) + .catch((error) => { + console.log(error); + }); + }, + getUpdateServiceSettings({ commit }) { + api + .get('/redfish/v1/UpdateService') + .then(({ data }) => { + const applyTime = + data.HttpPushUriOptions.HttpPushUriApplyTime.ApplyTime; + const allowableActions = + data?.Actions?.['#UpdateService.SimpleUpdate']?.[ + 'TransferProtocol@Redfish.AllowableValues' + ]; + + commit('setApplyTime', applyTime); + if (allowableActions?.includes('TFTP')) { + commit('setTftpUploadAvailable', true); + } + }) + .catch((error) => console.log(error)); + }, + setApplyTimeImmediate({ commit }) { + const data = { + HttpPushUriOptions: { + HttpPushUriApplyTime: { + ApplyTime: 'Immediate', + }, + }, + }; + return api + .patch('/redfish/v1/UpdateService', data) + .then(() => commit('setApplyTime', 'Immediate')) + .catch((error) => console.log(error)); + }, + async uploadFirmware({ state, dispatch }, image) { + if (state.applyTime !== 'Immediate') { + // ApplyTime must be set to Immediate before making + // request to update firmware + await dispatch('setApplyTimeImmediate'); + } + return await api + .post('/redfish/v1/UpdateService', image, { + headers: { 'Content-Type': 'application/octet-stream' }, + }) + .catch((error) => { + console.log(error); + throw new Error(i18n.t('pageFirmware.toast.errorUpdateFirmware')); + }); + }, + async uploadFirmwareTFTP({ state, dispatch }, fileAddress) { + const data = { + TransferProtocol: 'TFTP', + ImageURI: fileAddress, + }; + if (state.applyTime !== 'Immediate') { + // ApplyTime must be set to Immediate before making + // request to update firmware + await dispatch('setApplyTimeImmediate'); + } + return await api + .post( + '/redfish/v1/UpdateService/Actions/UpdateService.SimpleUpdate', + data + ) + .catch((error) => { + console.log(error); + throw new Error(i18n.t('pageFirmware.toast.errorUpdateFirmware')); + }); + }, + async switchBmcFirmwareAndReboot({ getters }) { + const backupLocation = getters.backupBmcFirmware.location; + const data = { + Links: { + ActiveSoftwareImage: { + '@odata.id': backupLocation, + }, + }, + }; + return await api + .patch('/redfish/v1/Managers/bmc', data) + .catch((error) => { + console.log(error); + throw new Error(i18n.t('pageFirmware.toast.errorSwitchImages')); + }); + }, + }, +}; + +export default FirmwareStore; -- cgit v1.2.3