diff options
author | Yoshie Muranaka <yoshiemuranaka@gmail.com> | 2021-02-19 02:24:14 +0300 |
---|---|---|
committer | Derick Montague <derick.montague@ibm.com> | 2021-03-01 16:45:05 +0300 |
commit | 33d755f4e62beff72101f6ca07e4d31b04e13826 (patch) | |
tree | a67d890472f0c7f27951b8e86d472e220dac066e /src/store | |
parent | 9a25c80591e8872297f2c33ad9bcd6a97639f04c (diff) | |
download | webui-vue-33d755f4e62beff72101f6ca07e4d31b04e13826.tar.xz |
Update the default firmware page
- Minor updates made to the general layout and styles
- Changes to some page copy
- Moves update firmware form to bottom of page
- Adds dynamic TFTP upload option
- Adds dynamic card layout for BMC and host firmwre
- 2 cards for combined
- 4 cards for separate
- Removes FirmwareSingleImage components that were used for IBM builds
Signed-off-by: Yoshie Muranaka <yoshiemuranaka@gmail.com>
Change-Id: Ib5465ecc30dd1505824bf41c82d33b7655d5e598
Diffstat (limited to 'src/store')
-rw-r--r-- | src/store/modules/Configuration/FirmwareStore.js | 222 |
1 files changed, 92 insertions, 130 deletions
diff --git a/src/store/modules/Configuration/FirmwareStore.js b/src/store/modules/Configuration/FirmwareStore.js index 59a421d8..3b4bd853 100644 --- a/src/store/modules/Configuration/FirmwareStore.js +++ b/src/store/modules/Configuration/FirmwareStore.js @@ -1,156 +1,123 @@ import api from '@/store/api'; import i18n from '@/i18n'; -/** - * Get backup firmware image from SoftwareImages - * The backup is whichever image is not the current - * or "ActiveSoftwareImage" - * @param {Array} list - * @param {String} currentLocation - */ -function getBackupFirmwareLocation(list, currentLocation) { - return list - .map((item) => item['@odata.id']) - .find((location) => { - const id = location.split('/').pop(); - const currentId = currentLocation.split('/').pop(); - return id !== currentId; - }); -} - const FirmwareStore = { namespaced: true, state: { - bmcFirmware: { - currentVersion: null, - currentState: null, - currentLocation: null, - backupVersion: null, - backupState: null, - backupLocation: null, - }, - hostFirmware: { - currentVersion: null, - currentState: null, - currentLocation: null, - backupVersion: null, - backupState: null, - backupLocation: null, - }, + bmcFirmware: [], + hostFirmware: [], + bmcActiveFirmwareId: null, + hostActiveFirmwareId: null, applyTime: null, + tftpAvailable: false, }, getters: { - bmcFirmwareCurrentVersion: (state) => state.bmcFirmware.currentVersion, - bmcFirmwareCurrentState: (state) => state.bmcFirmware.currentState, - bmcFirmwareBackupVersion: (state) => state.bmcFirmware.backupVersion, - bmcFirmwareBackupState: (state) => state.bmcFirmware.backupState, - hostFirmwareCurrentVersion: (state) => state.hostFirmware.currentVersion, - hostFirmwareCurrentState: (state) => state.hostFirmware.currentState, - hostFirmwareBackupVersion: (state) => state.hostFirmware.backupVersion, - hostFirmwareBackupState: (state) => state.hostFirmware.backupState, - }, - mutations: { - setBmcFirmwareCurrent: (state, { version, location, status }) => { - state.bmcFirmware.currentVersion = version; - state.bmcFirmware.currentState = status; - state.bmcFirmware.currentLocation = location; + isTftpUploadAvailable: (state) => state.tftpAvailable, + isSingleFileUploadEnabled: (state) => state.hostFirmware.length === 0, + activeBmcFirmware: (state) => { + return state.bmcFirmware.find( + (firmware) => firmware.id === state.bmcActiveFirmwareId + ); }, - setBmcFirmwareBackup: (state, { version, location, status }) => { - state.bmcFirmware.backupVersion = version; - state.bmcFirmware.backupState = status; - state.bmcFirmware.backupLocation = location; + activeHostFirmware: (state) => { + return state.hostFirmware.find( + (firmware) => firmware.id === state.hostActiveFirmwareId + ); }, - setHostFirmwareCurrent: (state, { version, location, status }) => { - state.hostFirmware.currentVersion = version; - state.hostFirmware.currentState = status; - state.hostFirmware.currentLocation = location; + backupBmcFirmware: (state) => { + return state.bmcFirmware.find( + (firmware) => firmware.id !== state.bmcActiveFirmwareId + ); }, - setHostFirmwareBackup: (state, { version, location, status }) => { - state.hostFirmware.backupVersion = version; - state.hostFirmware.backupState = status; - state.hostFirmware.backupLocation = location; + 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 }) { - return await api.all([ - dispatch('getBmcFirmware'), - dispatch('getHostFirmware'), - ]); + dispatch('getActiveHostFirmware'); + dispatch('getActiveBmcFirmware'); + return await dispatch('getFirmwareInventory'); }, - async getBmcFirmware({ commit }) { - return await api + getActiveBmcFirmware({ commit }) { + return api .get('/redfish/v1/Managers/bmc') .then(({ data: { Links } }) => { - const currentLocation = Links.ActiveSoftwareImage['@odata.id']; - // Check SoftwareImages list for not ActiveSoftwareImage id - const backupLocation = getBackupFirmwareLocation( - Links.SoftwareImages, - currentLocation - ); - return { currentLocation, backupLocation }; - }) - .then(async ({ currentLocation, backupLocation }) => { - const currentData = await api.get(currentLocation); - let backupData = {}; - - if (backupLocation) { - backupData = await api.get(backupLocation); - } - - commit('setBmcFirmwareCurrent', { - version: currentData?.data?.Version, - location: currentData?.data?.['@odata.id'], - status: currentData?.data?.Status?.State, - }); - commit('setBmcFirmwareBackup', { - version: backupData.data?.Version, - location: backupData.data?.['@odata.id'], - status: backupData.data?.Status?.State, - }); + const id = Links?.ActiveSoftwareImage['@odata.id'].split('/').pop(); + commit('setActiveBmcFirmwareId', id); }) .catch((error) => console.log(error)); }, - async getHostFirmware({ commit }) { - return await api + getActiveHostFirmware({ commit }) { + return api .get('/redfish/v1/Systems/system/Bios') .then(({ data: { Links } }) => { - const currentLocation = Links.ActiveSoftwareImage['@odata.id']; - const backupLocation = getBackupFirmwareLocation( - Links.SoftwareImages, - currentLocation - ); - return { currentLocation, backupLocation }; + const id = Links?.ActiveSoftwareImage['@odata.id'].split('/').pop(); + commit('setActiveHostFirmwareId', id); }) - .then(async ({ currentLocation, backupLocation }) => { - const currentData = await api.get(currentLocation); - let backupData = {}; - - if (backupLocation) { - backupData = await api.get(backupLocation); - } - - commit('setHostFirmwareCurrent', { - version: currentData?.data?.Version, - location: currentData?.data?.['@odata.id'], - status: currentData?.data?.Status?.State, - }); - commit('setHostFirmwareBackup', { - version: backupData.data?.Version, - location: backupData.data?.['@odata.id'], - status: backupData.data?.Status?.State, + .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)); + .catch((error) => { + console.log(error); + }); }, - getUpdateServiceApplyTime({ commit }) { + 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)); }, @@ -177,17 +144,15 @@ const FirmwareStore = { .post('/redfish/v1/UpdateService', image, { headers: { 'Content-Type': 'application/octet-stream' }, }) - .then(() => dispatch('getSystemFirwareVersion')) - .then(() => i18n.t('pageFirmware.toast.successUploadMessage')) .catch((error) => { console.log(error); - throw new Error(i18n.t('pageFirmware.toast.errorUploadAndReboot')); + throw new Error(i18n.t('pageFirmware.toast.errorUpdateFirmware')); }); }, - async uploadFirmwareTFTP({ state, dispatch }, { address, filename }) { + async uploadFirmwareTFTP({ state, dispatch }, fileAddress) { const data = { TransferProtocol: 'TFTP', - ImageURI: `${address}/${filename}`, + ImageURI: fileAddress, }; if (state.applyTime !== 'Immediate') { // ApplyTime must be set to Immediate before making @@ -199,15 +164,13 @@ const FirmwareStore = { '/redfish/v1/UpdateService/Actions/UpdateService.SimpleUpdate', data ) - .then(() => dispatch('getSystemFirwareVersion')) - .then(() => i18n.t('pageFirmware.toast.successUploadMessage')) .catch((error) => { console.log(error); - throw new Error(i18n.t('pageFirmware.toast.errorUploadAndReboot')); + throw new Error(i18n.t('pageFirmware.toast.errorUpdateFirmware')); }); }, - async switchBmcFirmware({ state }) { - const backupLocation = state.bmcFirmware.backupLocation; + async switchBmcFirmwareAndReboot({ getters }) { + const backupLocation = getters.backupBmcFirmware.location; const data = { Links: { ActiveSoftwareImage: { @@ -217,10 +180,9 @@ const FirmwareStore = { }; return await api .patch('/redfish/v1/Managers/bmc', data) - .then(() => i18n.t('pageFirmware.toast.successRebootFromBackup')) .catch((error) => { console.log(error); - throw new Error(i18n.t('pageFirmware.toast.errorRebootFromBackup')); + throw new Error(i18n.t('pageFirmware.toast.errorSwitchImages')); }); }, }, |