summaryrefslogtreecommitdiff
path: root/src/store/modules/Configuration/FirmwareStore.js
diff options
context:
space:
mode:
Diffstat (limited to 'src/store/modules/Configuration/FirmwareStore.js')
-rw-r--r--src/store/modules/Configuration/FirmwareStore.js142
1 files changed, 105 insertions, 37 deletions
diff --git a/src/store/modules/Configuration/FirmwareStore.js b/src/store/modules/Configuration/FirmwareStore.js
index d9d3cfb8..c99e7eb8 100644
--- a/src/store/modules/Configuration/FirmwareStore.js
+++ b/src/store/modules/Configuration/FirmwareStore.js
@@ -1,57 +1,126 @@
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: {
- activeFirmware: {
- version: '--',
- id: null,
- location: null
+ bmcFirmware: {
+ currentVersion: null,
+ currentState: null,
+ currentLocation: null,
+ backupVersion: null,
+ backupState: null,
+ backupLocation: null
},
- backupFirmware: {
- version: '--',
- id: null,
- location: null,
- status: '--'
+ hostFirmware: {
+ currentVersion: null,
+ currentState: null,
+ currentLocation: null,
+ backupVersion: null,
+ backupState: null,
+ backupLocation: null
},
applyTime: null
},
getters: {
- systemFirmwareVersion: state => state.activeFirmware.version,
- backupFirmwareVersion: state => state.backupFirmware.version,
- backupFirmwareStatus: state => state.backupFirmware.status,
- isRebootFromBackupAvailable: state =>
- state.backupFirmware.id ? true : false
+ 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: {
- setActiveFirmware: (state, { version, id, location }) => {
- state.activeFirmware.version = version;
- state.activeFirmware.id = id;
- state.activeFirmware.location = location;
+ setBmcFirmwareCurrent: (state, { version, location, status }) => {
+ state.bmcFirmware.currentVersion = version;
+ state.bmcFirmware.currentState = status;
+ state.bmcFirmware.currentLocation = location;
+ },
+ setBmcFirmwareBackup: (state, { version, location, status }) => {
+ state.bmcFirmware.backupVersion = version;
+ state.bmcFirmware.backupState = status;
+ state.bmcFirmware.backupLocation = location;
},
- setBackupFirmware: (state, { version, id, location, status }) => {
- state.backupFirmware.version = version;
- state.backupFirmware.id = id;
- state.backupFirmware.location = location;
- state.backupFirmware.status = status;
+ setHostFirmwareCurrent: (state, { version, location, status }) => {
+ state.hostFirmware.currentVersion = version;
+ state.hostFirmware.currentState = status;
+ state.hostFirmware.currentLocation = location;
+ },
+ setHostFirmwareBackup: (state, { version, location, status }) => {
+ state.hostFirmware.backupVersion = version;
+ state.hostFirmware.backupState = status;
+ state.hostFirmware.backupLocation = location;
},
setApplyTime: (state, applyTime) => (state.applyTime = applyTime)
},
actions: {
- async getSystemFirwareVersion({ commit }) {
+ async getFirmwareInformation({ dispatch }) {
+ return await api.all([
+ dispatch('getBmcFirmware'),
+ dispatch('getHostFirmware')
+ ]);
+ },
+ async getBmcFirmware({ commit }) {
return await api
.get('/redfish/v1/Managers/bmc')
.then(({ data: { Links } }) => {
const currentLocation = Links.ActiveSoftwareImage['@odata.id'];
// Check SoftwareImages list for not ActiveSoftwareImage id
- const backupLocation = Links.SoftwareImages.map(
- item => item['@odata.id']
- ).find(location => {
- const id = location.split('/').pop();
- const currentId = currentLocation.split('/').pop();
- return id !== currentId;
+ 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
});
+ })
+ .catch(error => console.log(error));
+ },
+ async getHostFirmware({ commit }) {
+ return await 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 };
})
.then(async ({ currentLocation, backupLocation }) => {
@@ -62,14 +131,13 @@ const FirmwareStore = {
backupData = await api.get(backupLocation);
}
- commit('setActiveFirmware', {
+ commit('setHostFirmwareCurrent', {
version: currentData?.data?.Version,
- id: currentData?.data?.Id,
- location: currentData?.data?.['@odata.id']
+ location: currentData?.data?.['@odata.id'],
+ status: currentData?.data?.Status?.State
});
- commit('setBackupFirmware', {
+ commit('setHostFirmwareBackup', {
version: backupData.data?.Version,
- id: backupData.data?.Id,
location: backupData.data?.['@odata.id'],
status: backupData.data?.Status?.State
});
@@ -138,8 +206,8 @@ const FirmwareStore = {
throw new Error(i18n.t('pageFirmware.toast.errorUploadAndReboot'));
});
},
- async switchFirmwareAndReboot({ state }) {
- const backupLoaction = state.backupFirmware.location;
+ async swtichBmcFirmware({ state }) {
+ const backupLoaction = state.bmcFirmware.backupLoaction;
const data = {
Links: {
ActiveSoftwareImage: {