summaryrefslogtreecommitdiff
path: root/src/env/store
diff options
context:
space:
mode:
authorYoshie Muranaka <yoshiemuranaka@gmail.com>2020-10-06 19:24:14 +0300
committerDerick Montague <derick.montague@ibm.com>2020-10-26 16:48:19 +0300
commit0b980dbfe69e1b3f59d5b26e83d16ecbdab95ecb (patch)
tree57c664cedf5702d50cd2513979bdf36b1b1d71a7 /src/env/store
parent7026cad99fbc3b4584e5ce60dbb8476f6c6f41f7 (diff)
downloadwebui-vue-0b980dbfe69e1b3f59d5b26e83d16ecbdab95ecb.tar.xz
Make copy of single file firmware upload
Make a copy of single file firmware upload component and store in env directory. Update IBM router to use copied single file firmware components. Update IBM store module to use copied single file firmware store. Signed-off-by: Yoshie Muranaka <yoshiemuranaka@gmail.com> Change-Id: I046ce6c69a02b90400058866295b84c5435f5a4b
Diffstat (limited to 'src/env/store')
-rw-r--r--src/env/store/FirmwareSingleImage/FirmwareSingleImageStore.js161
-rw-r--r--src/env/store/ibm.js6
2 files changed, 164 insertions, 3 deletions
diff --git a/src/env/store/FirmwareSingleImage/FirmwareSingleImageStore.js b/src/env/store/FirmwareSingleImage/FirmwareSingleImageStore.js
new file mode 100644
index 00000000..d00c5f71
--- /dev/null
+++ b/src/env/store/FirmwareSingleImage/FirmwareSingleImageStore.js
@@ -0,0 +1,161 @@
+import api from '@/store/api';
+import i18n from '@/i18n';
+
+const FirmwareSingleImageStore = {
+ namespaced: true,
+ state: {
+ activeFirmware: {
+ version: '--',
+ id: null,
+ location: null
+ },
+ backupFirmware: {
+ version: '--',
+ id: null,
+ location: null,
+ status: '--'
+ },
+ 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
+ },
+ mutations: {
+ setActiveFirmware: (state, { version, id, location }) => {
+ state.activeFirmware.version = version;
+ state.activeFirmware.id = id;
+ state.activeFirmware.location = location;
+ },
+ setBackupFirmware: (state, { version, id, location, status }) => {
+ state.backupFirmware.version = version;
+ state.backupFirmware.id = id;
+ state.backupFirmware.location = location;
+ state.backupFirmware.status = status;
+ },
+ setApplyTime: (state, applyTime) => (state.applyTime = applyTime)
+ },
+ actions: {
+ async getSystemFirwareVersion({ 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;
+ });
+ return { currentLocation, backupLocation };
+ })
+ .then(async ({ currentLocation, backupLocation }) => {
+ const currentData = await api.get(currentLocation);
+ let backupData = {};
+
+ if (backupLocation) {
+ backupData = await api.get(backupLocation);
+ }
+
+ commit('setActiveFirmware', {
+ version: currentData?.data?.Version,
+ id: currentData?.data?.Id,
+ location: currentData?.data?.['@odata.id']
+ });
+ commit('setBackupFirmware', {
+ version: backupData.data?.Version,
+ id: backupData.data?.Id,
+ location: backupData.data?.['@odata.id'],
+ status: backupData.data?.Status?.State
+ });
+ })
+ .catch(error => console.log(error));
+ },
+ getUpdateServiceApplyTime({ commit }) {
+ api
+ .get('/redfish/v1/UpdateService')
+ .then(({ data }) => {
+ const applyTime =
+ data.HttpPushUriOptions.HttpPushUriApplyTime.ApplyTime;
+ commit('setApplyTime', applyTime);
+ })
+ .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' }
+ })
+ .then(() => dispatch('getSystemFirwareVersion'))
+ .then(() => i18n.t('pageFirmware.toast.successUploadMessage'))
+ .catch(error => {
+ console.log(error);
+ throw new Error(i18n.t('pageFirmware.toast.errorUploadAndReboot'));
+ });
+ },
+ async uploadFirmwareTFTP({ state, dispatch }, { address, filename }) {
+ const data = {
+ TransferProtocol: 'TFTP',
+ ImageURI: `${address}/${filename}`
+ };
+ 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
+ )
+ .then(() => dispatch('getSystemFirwareVersion'))
+ .then(() => i18n.t('pageFirmware.toast.successUploadMessage'))
+ .catch(error => {
+ console.log(error);
+ throw new Error(i18n.t('pageFirmware.toast.errorUploadAndReboot'));
+ });
+ },
+ async switchFirmwareAndReboot({ state }) {
+ const backupLoaction = state.backupFirmware.location;
+ const data = {
+ Links: {
+ ActiveSoftwareImage: {
+ '@odata.id': backupLoaction
+ }
+ }
+ };
+ 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'));
+ });
+ }
+ }
+};
+
+export default FirmwareSingleImageStore;
diff --git a/src/env/store/ibm.js b/src/env/store/ibm.js
index 70c9b98a..12fd0865 100644
--- a/src/env/store/ibm.js
+++ b/src/env/store/ibm.js
@@ -1,7 +1,7 @@
import store from '@/store';
+import FirmwareSingleImageStore from './FirmwareSingleImage/FirmwareSingleImageStore';
-// Use store.registerModule() to register env specific
-// store modules
-// https://vuex.vuejs.org/api/#registermodule
+store.unregisterModule('firmware');
+store.registerModule('firmwareSingleImage', FirmwareSingleImageStore);
export default store;