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/env | |
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/env')
11 files changed, 2 insertions, 893 deletions
diff --git a/src/env/components/FirmwareSingleImage/FirmwareAlertServerPower.vue b/src/env/components/FirmwareSingleImage/FirmwareAlertServerPower.vue deleted file mode 100644 index f7ac0fc9..00000000 --- a/src/env/components/FirmwareSingleImage/FirmwareAlertServerPower.vue +++ /dev/null @@ -1,60 +0,0 @@ -<template> - <b-row> - <b-col xl="10"> - <!-- Operation in progress alert --> - <alert v-if="isOperationInProgress" variant="info" class="mb-5"> - <p> - {{ $t('pageFirmware.singleFileUpload.alert.operationInProgress') }} - </p> - </alert> - <!-- Power off server warning alert --> - <alert v-else-if="!isHostOff" variant="warning" class="mb-5"> - <p class="mb-0"> - {{ - $t('pageFirmware.singleFileUpload.alert.serverMustBePoweredOffTo') - }} - </p> - <ul class="m-0"> - <li> - {{ - $t( - 'pageFirmware.singleFileUpload.alert.switchRunningAndBackupImages' - ) - }} - </li> - <li> - {{ $t('pageFirmware.singleFileUpload.alert.updateFirmware') }} - </li> - </ul> - <template #action> - <b-link to="/control/server-power-operations"> - {{ - $t( - 'pageFirmware.singleFileUpload.alert.viewServerPowerOperations' - ) - }} - </b-link> - </template> - </alert> - </b-col> - </b-row> -</template> - -<script> -import Alert from '@/components/Global/Alert'; - -export default { - components: { Alert }, - props: { - isHostOff: { - required: true, - type: Boolean, - }, - }, - computed: { - isOperationInProgress() { - return this.$store.getters['controls/isOperationInProgress']; - }, - }, -}; -</script> diff --git a/src/env/components/FirmwareSingleImage/FirmwareCardsBmc.vue b/src/env/components/FirmwareSingleImage/FirmwareCardsBmc.vue deleted file mode 100644 index 857adf0f..00000000 --- a/src/env/components/FirmwareSingleImage/FirmwareCardsBmc.vue +++ /dev/null @@ -1,145 +0,0 @@ -<template> - <div> - <page-section :section-title="sectionTitle"> - <b-card-group deck> - <!-- Running image --> - <b-card> - <template #header> - <p class="font-weight-bold m-0"> - {{ $t('pageFirmware.singleFileUpload.cardTitleRunning') }} - </p> - </template> - <dl class="mb-0"> - <dt>{{ $t('pageFirmware.singleFileUpload.cardBodyVersion') }}</dt> - <dd class="mb-0">{{ runningVersion }}</dd> - </dl> - </b-card> - - <!-- Backup image --> - <b-card> - <template #header> - <p class="font-weight-bold m-0"> - {{ $t('pageFirmware.singleFileUpload.cardTitleBackup') }} - </p> - </template> - <dl> - <dt>{{ $t('pageFirmware.singleFileUpload.cardBodyVersion') }}</dt> - <dd> - <status-icon v-if="showBackupImageStatus" status="danger" /> - <span v-if="showBackupImageStatus" class="sr-only"> - {{ backupStatus }} - </span> - {{ backupVersion }} - </dd> - </dl> - <b-btn - v-b-modal.modal-switch-to-running - data-test-id="firmware-button-switchToRunning" - variant="link" - size="sm" - class="py-0 px-1 mt-2" - :disabled="isPageDisabled || !backup" - > - <icon-switch class="d-none d-sm-inline-block" /> - {{ $t('pageFirmware.singleFileUpload.cardActionSwitchToRunning') }} - </b-btn> - </b-card> - </b-card-group> - </page-section> - <modal-switch-to-running :backup="backupVersion" @ok="switchToRunning" /> - </div> -</template> - -<script> -import IconSwitch from '@carbon/icons-vue/es/arrows--horizontal/20'; -import PageSection from '@/components/Global/PageSection'; -import LoadingBarMixin, { loading } from '@/components/Mixins/LoadingBarMixin'; -import BVToastMixin from '@/components/Mixins/BVToastMixin'; - -import ModalSwitchToRunning from './FirmwareModalSwitchToRunning'; - -export default { - components: { IconSwitch, ModalSwitchToRunning, PageSection }, - mixins: [BVToastMixin, LoadingBarMixin], - props: { - isPageDisabled: { - required: true, - type: Boolean, - default: false, - }, - }, - data() { - return { - loading, - }; - }, - computed: { - isSingleFileUploadEnabled() { - return this.$store.getters[ - 'firmwareSingleImage/isSingleFileUploadEnabled' - ]; - }, - sectionTitle() { - if (this.isSingleFileUploadEnabled) { - return this.$t( - 'pageFirmware.singleFileUpload.sectionTitleBmcCardsCombined' - ); - } - return this.$t('pageFirmware.singleFileUpload.sectionTitleBmcCards'); - }, - running() { - return this.$store.getters['firmwareSingleImage/activeBmcFirmware']; - }, - backup() { - return this.$store.getters['firmwareSingleImage/backupBmcFirmware']; - }, - runningVersion() { - return this.running?.version || '--'; - }, - backupVersion() { - return this.backup?.version || '--'; - }, - backupStatus() { - return this.backup?.status || null; - }, - showBackupImageStatus() { - return ( - this.backupStatus === 'Critical' || this.backupStatus === 'Warning' - ); - }, - }, - methods: { - switchToRunning() { - this.startLoader(); - const timerId = setTimeout(() => { - this.endLoader(); - this.infoToast( - this.$t('pageFirmware.singleFileUpload.toast.verifySwitchMessage'), - { - title: this.$t('pageFirmware.singleFileUpload.toast.verifySwitch'), - refreshAction: true, - } - ); - }, 60000); - - this.$store - .dispatch('firmwareSingleImage/switchFirmwareAndReboot') - .then(() => - this.infoToast( - this.$t('pageFirmware.singleFileUpload.toast.rebootStartedMessage'), - { - title: this.$t( - 'pageFirmware.singleFileUpload.toast.rebootStarted' - ), - } - ) - ) - .catch(({ message }) => { - this.errorToast(message); - clearTimeout(timerId); - this.endLoader(); - }); - }, - }, -}; -</script> diff --git a/src/env/components/FirmwareSingleImage/FirmwareCardsHost.vue b/src/env/components/FirmwareSingleImage/FirmwareCardsHost.vue deleted file mode 100644 index c47f60f5..00000000 --- a/src/env/components/FirmwareSingleImage/FirmwareCardsHost.vue +++ /dev/null @@ -1,75 +0,0 @@ -<template> - <page-section - :section-title="$t('pageFirmware.singleFileUpload.sectionTitleHostCards')" - > - <b-card-group deck> - <!-- Running image --> - <b-card> - <template #header> - <p class="font-weight-bold m-0"> - {{ $t('pageFirmware.singleFileUpload.cardTitleRunning') }} - </p> - </template> - <dl class="mb-0"> - <dt>{{ $t('pageFirmware.singleFileUpload.cardBodyVersion') }}</dt> - <dd class="mb-0">{{ runningVersion }}</dd> - </dl> - </b-card> - - <!-- Backup image --> - <b-card> - <template #header> - <p class="font-weight-bold m-0"> - {{ $t('pageFirmware.singleFileUpload.cardTitleBackup') }} - </p> - </template> - <dl class="mb-0"> - <dt>{{ $t('pageFirmware.singleFileUpload.cardBodyVersion') }}</dt> - <dd class="mb-0"> - <status-icon v-if="showBackupImageStatus" status="danger" /> - <span v-if="showBackupImageStatus" class="sr-only"> - {{ backupStatus }} - </span> - {{ backupVersion }} - </dd> - </dl> - </b-card> - </b-card-group> - </page-section> -</template> - -<script> -import PageSection from '@/components/Global/PageSection'; - -export default { - components: { PageSection }, - computed: { - running() { - return this.$store.getters['firmwareSingleImage/activeHostFirmware']; - }, - backup() { - return this.$store.getters['firmwareSingleImage/backupHostFirmware']; - }, - runningVersion() { - return this.running?.version || '--'; - }, - backupVersion() { - return this.backup?.version || '--'; - }, - backupStatus() { - return this.backup?.status || null; - }, - showBackupImageStatus() { - return ( - this.backupStatus === 'Critical' || this.backupStatus === 'Warning' - ); - }, - }, -}; -</script> - -<style lang="scss" scoped> -.page-section { - margin-top: -$spacer * 1.5; -} -</style> diff --git a/src/env/components/FirmwareSingleImage/FirmwareFormUpdate.vue b/src/env/components/FirmwareSingleImage/FirmwareFormUpdate.vue deleted file mode 100644 index f13b8e00..00000000 --- a/src/env/components/FirmwareSingleImage/FirmwareFormUpdate.vue +++ /dev/null @@ -1,235 +0,0 @@ -<template> - <div> - <div class="form-background p-3"> - <b-form @submit.prevent="onSubmitUpload"> - <b-form-group - v-if="isTftpUploadAvailable" - :label=" - $t('pageFirmware.singleFileUpload.form.updateFirmware.fileSource') - " - :disabled="isPageDisabled" - > - <b-form-radio v-model="isWorkstationSelected" :value="true"> - {{ - $t( - 'pageFirmware.singleFileUpload.form.updateFirmware.workstation' - ) - }} - </b-form-radio> - <b-form-radio v-model="isWorkstationSelected" :value="false"> - {{ - $t('pageFirmware.singleFileUpload.form.updateFirmware.tftpServer') - }} - </b-form-radio> - </b-form-group> - - <!-- Workstation Upload --> - <template v-if="isWorkstationSelected"> - <b-form-group - :label=" - $t('pageFirmware.singleFileUpload.form.updateFirmware.imageFile') - " - label-for="image-file" - > - <b-form-text id="image-file-help-block"> - {{ - $t( - 'pageFirmware.singleFileUpload.form.updateFirmware.imageFileHelperText' - ) - }} - </b-form-text> - <form-file - id="image-file" - accept=".tar" - :disabled="isPageDisabled" - :state="getValidationState($v.file)" - aria-describedby="image-file-help-block" - @input="onFileUpload($event)" - > - <template #invalid> - <b-form-invalid-feedback role="alert"> - {{ $t('global.form.required') }} - </b-form-invalid-feedback> - </template> - </form-file> - </b-form-group> - </template> - - <!-- TFTP Server Upload --> - <template v-else> - <b-form-group - :label=" - $t( - 'pageFirmware.singleFileUpload.form.updateFirmware.fileAddress' - ) - " - label-for="tftp-address" - > - <b-form-input - id="tftp-address" - v-model="tftpFileAddress" - type="text" - :state="getValidationState($v.tftpFileAddress)" - :disabled="isPageDisabled" - @input="$v.tftpFileAddress.$touch()" - /> - <b-form-invalid-feedback role="alert"> - {{ $t('global.form.fieldRequired') }} - </b-form-invalid-feedback> - </b-form-group> - </template> - <b-btn - data-test-id="firmware-button-startUpdate" - type="submit" - variant="primary" - :disabled="isPageDisabled" - > - {{ - $t('pageFirmware.singleFileUpload.form.updateFirmware.startUpdate') - }} - </b-btn> - <alert - v-if="isServerPowerOffRequired && !isHostOff" - variant="warning" - :small="true" - class="mt-4" - > - <p class="col-form-label"> - {{ - $t( - 'pageFirmware.singleFileUpload.alert.serverMustBePoweredOffToUpdateFirmware' - ) - }} - </p> - </alert> - </b-form> - </div> - - <!-- Modals --> - <modal-update-firmware @ok="updateFirmware" /> - </div> -</template> - -<script> -import { requiredIf } from 'vuelidate/lib/validators'; - -import BVToastMixin from '@/components/Mixins/BVToastMixin'; -import LoadingBarMixin, { loading } from '@/components/Mixins/LoadingBarMixin'; -import VuelidateMixin from '@/components/Mixins/VuelidateMixin.js'; - -import Alert from '@/components/Global/Alert'; -import FormFile from '@/components/Global/FormFile'; -import ModalUpdateFirmware from './FirmwareModalUpdateFirmware'; - -export default { - components: { Alert, FormFile, ModalUpdateFirmware }, - mixins: [BVToastMixin, LoadingBarMixin, VuelidateMixin], - props: { - isPageDisabled: { - required: true, - type: Boolean, - default: false, - }, - isHostOff: { - required: true, - type: Boolean, - }, - }, - data() { - return { - loading, - isWorkstationSelected: true, - file: null, - tftpFileAddress: null, - isServerPowerOffRequired: - process.env.VUE_APP_SERVER_OFF_REQUIRED === 'true', - }; - }, - computed: { - isTftpUploadAvailable() { - return this.$store.getters['firmwareSingleImage/isTftpUploadAvailable']; - }, - }, - watch: { - isWorkstationSelected: function () { - this.$v.$reset(); - this.file = null; - this.tftpFileAddress = null; - }, - }, - validations() { - return { - file: { - required: requiredIf(function () { - return this.isWorkstationSelected; - }), - }, - tftpFileAddress: { - required: requiredIf(function () { - return !this.isWorkstationSelected; - }), - }, - }; - }, - created() { - this.$store.dispatch('firmwareSingleImage/getUpdateServiceSettings'); - }, - methods: { - updateFirmware() { - this.startLoader(); - const timerId = setTimeout(() => { - this.endLoader(); - this.infoToast( - this.$t('pageFirmware.singleFileUpload.toast.verifyUpdateMessage'), - { - title: this.$t('pageFirmware.singleFileUpload.toast.verifyUpdate'), - refreshAction: true, - } - ); - }, 360000); - this.infoToast( - this.$t('pageFirmware.singleFileUpload.toast.updateStartedMessage'), - { - title: this.$t('pageFirmware.singleFileUpload.toast.updateStarted'), - timestamp: true, - } - ); - if (this.isWorkstationSelected) { - this.dispatchWorkstationUpload(timerId); - } else { - this.dispatchTftpUpload(timerId); - } - }, - dispatchWorkstationUpload(timerId) { - this.$store - .dispatch('firmwareSingleImage/uploadFirmware', this.file) - .catch(({ message }) => { - this.endLoader(); - this.errorToast(message); - clearTimeout(timerId); - }); - }, - dispatchTftpUpload(timerId) { - this.$store - .dispatch( - 'firmwareSingleImage/uploadFirmwareTFTP', - this.tftpFileAddress - ) - .catch(({ message }) => { - this.endLoader(); - this.errorToast(message); - clearTimeout(timerId); - }); - }, - onSubmitUpload() { - this.$v.$touch(); - if (this.$v.$invalid) return; - this.$bvModal.show('modal-update-firmware'); - }, - onFileUpload(file) { - this.file = file; - this.$v.file.$touch(); - }, - }, -}; -</script> diff --git a/src/env/components/FirmwareSingleImage/FirmwareModalSwitchToRunning.vue b/src/env/components/FirmwareSingleImage/FirmwareModalSwitchToRunning.vue deleted file mode 100644 index 56f505d0..00000000 --- a/src/env/components/FirmwareSingleImage/FirmwareModalSwitchToRunning.vue +++ /dev/null @@ -1,31 +0,0 @@ -<template> - <b-modal - id="modal-switch-to-running" - :ok-title="$t('pageFirmware.singleFileUpload.modal.switchImages')" - :cancel-title="$t('global.action.cancel')" - :title="$t('pageFirmware.singleFileUpload.modal.switchRunningImage')" - @ok="$emit('ok')" - > - <p> - {{ $t('pageFirmware.singleFileUpload.modal.switchRunningImageInfo') }} - </p> - <p class="m-0"> - {{ - $t('pageFirmware.singleFileUpload.modal.switchRunningImageInfo2', { - backup, - }) - }} - </p> - </b-modal> -</template> - -<script> -export default { - props: { - backup: { - type: String, - required: true, - }, - }, -}; -</script> diff --git a/src/env/components/FirmwareSingleImage/FirmwareModalUpdateFirmware.vue b/src/env/components/FirmwareSingleImage/FirmwareModalUpdateFirmware.vue deleted file mode 100644 index d6c52f9c..00000000 --- a/src/env/components/FirmwareSingleImage/FirmwareModalUpdateFirmware.vue +++ /dev/null @@ -1,48 +0,0 @@ -<template> - <b-modal - id="modal-update-firmware" - :title="$t('pageFirmware.singleFileUpload.sectionTitleUpdateFirmware')" - :ok-title=" - $t('pageFirmware.singleFileUpload.form.updateFirmware.startUpdate') - " - :cancel-title="$t('global.action.cancel')" - @ok="$emit('ok')" - > - <template v-if="isSingleFileUploadEnabled"> - <p> - {{ $t('pageFirmware.singleFileUpload.modal.updateFirmwareInfo') }} - </p> - <p> - {{ - $t('pageFirmware.singleFileUpload.modal.updateFirmwareInfo2', { - running: runningBmcVersion, - }) - }} - </p> - <p class="m-0"> - {{ $t('pageFirmware.singleFileUpload.modal.updateFirmwareInfo3') }} - </p> - </template> - <template v-else> - {{ $t('pageFirmware.singleFileUpload.modal.updateFirmwareInfoDefault') }} - </template> - </b-modal> -</template> - -<script> -export default { - computed: { - runningBmc() { - return this.$store.getters['firmwareSingleImage/activeBmcFirmware']; - }, - runningBmcVersion() { - return this.runningBmc?.version || '--'; - }, - isSingleFileUploadEnabled() { - return this.$store.getters[ - 'firmwareSingleImage/isSingleFileUploadEnabled' - ]; - }, - }, -}; -</script> diff --git a/src/env/components/FirmwareSingleImage/FirmwareSingleImage.vue b/src/env/components/FirmwareSingleImage/FirmwareSingleImage.vue deleted file mode 100644 index 2e601bd4..00000000 --- a/src/env/components/FirmwareSingleImage/FirmwareSingleImage.vue +++ /dev/null @@ -1,97 +0,0 @@ -<template> - <b-container fluid="xl"> - <page-title /> - <alerts-server-power - v-if="isServerPowerOffRequired" - :is-host-off="isHostOff" - /> - - <!-- Firmware cards --> - <b-row> - <b-col xl="10"> - <!-- BMC Firmware --> - <bmc-cards :is-page-disabled="isPageDisabled" /> - - <!-- Host Firmware --> - <host-cards v-if="!isSingleFileUploadEnabled" /> - </b-col> - </b-row> - - <!-- Update firmware--> - <page-section - :section-title=" - $t('pageFirmware.singleFileUpload.sectionTitleUpdateFirmware') - " - > - <b-row> - <b-col sm="8" md="6" xl="4"> - <!-- Update form --> - <form-update - :is-host-off="isHostOff" - :is-page-disabled="isPageDisabled" - /> - </b-col> - </b-row> - </page-section> - </b-container> -</template> - -<script> -import AlertsServerPower from './FirmwareAlertServerPower'; -import BmcCards from './FirmwareCardsBmc'; -import FormUpdate from './FirmwareFormUpdate'; -import HostCards from './FirmwareCardsHost'; -import PageSection from '@/components/Global/PageSection'; -import PageTitle from '@/components/Global/PageTitle'; - -import LoadingBarMixin, { loading } from '@/components/Mixins/LoadingBarMixin'; - -export default { - name: 'FirmwareSingleImage', - components: { - AlertsServerPower, - BmcCards, - FormUpdate, - HostCards, - PageSection, - PageTitle, - }, - mixins: [LoadingBarMixin], - beforeRouteLeave(to, from, next) { - this.hideLoader(); - next(); - }, - data() { - return { - loading, - isServerPowerOffRequired: - process.env.VUE_APP_SERVER_OFF_REQUIRED === 'true', - }; - }, - computed: { - hostStatus() { - return this.$store.getters['global/hostStatus']; - }, - isHostOff() { - return this.hostStatus === 'off' ? true : false; - }, - isSingleFileUploadEnabled() { - return this.$store.getters[ - 'firmwareSingleImage/isSingleFileUploadEnabled' - ]; - }, - isPageDisabled() { - if (this.isServerPowerOffRequired) { - return !this.isHostOff || this.loading || this.isOperationInProgress; - } - return this.loading || this.isOperationInProgress; - }, - }, - created() { - this.startLoader(); - this.$store - .dispatch('firmwareSingleImage/getFirmwareInformation') - .finally(() => this.endLoader()); - }, -}; -</script> diff --git a/src/env/components/FirmwareSingleImage/index.js b/src/env/components/FirmwareSingleImage/index.js deleted file mode 100644 index 06f31f91..00000000 --- a/src/env/components/FirmwareSingleImage/index.js +++ /dev/null @@ -1,2 +0,0 @@ -import FirmwareSingleImage from './FirmwareSingleImage.vue'; -export default FirmwareSingleImage; diff --git a/src/env/router/ibm.js b/src/env/router/ibm.js index 969146cb..c4e1a698 100644 --- a/src/env/router/ibm.js +++ b/src/env/router/ibm.js @@ -4,6 +4,7 @@ import ClientSessions from '@/views/AccessControl/ClientSessions'; import ConsoleLayout from '@/layouts/ConsoleLayout.vue'; import DateTimeSettings from '@/views/Configuration/DateTimeSettings'; import EventLogs from '@/views/Health/EventLogs'; +import Firmware from '@/views/Configuration/Firmware'; import HardwareStatus from '@/views/Health/HardwareStatus'; import Ldap from '@/views/AccessControl/Ldap'; import LocalUserManagement from '@/views/AccessControl/LocalUserManagement'; @@ -26,7 +27,6 @@ import SslCertificates from '@/views/AccessControl/SslCertificates'; import i18n from '@/i18n'; // Custom components -import FirmwareSingleImage from '../components/FirmwareSingleImage'; import Dumps from '../components/Dumps'; const routes = [ @@ -168,7 +168,7 @@ const routes = [ { path: '/configuration/firmware', name: 'firmware', - component: FirmwareSingleImage, + component: Firmware, meta: { title: i18n.t('appPageTitle.firmware'), }, diff --git a/src/env/store/FirmwareSingleImage/FirmwareSingleImageStore.js b/src/env/store/FirmwareSingleImage/FirmwareSingleImageStore.js deleted file mode 100644 index ae4d6333..00000000 --- a/src/env/store/FirmwareSingleImage/FirmwareSingleImageStore.js +++ /dev/null @@ -1,195 +0,0 @@ -import api from '@/store/api'; -import i18n from '@/i18n'; - -const FirmwareSingleImageStore = { - 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 - ); - }, - bmcFirmwareCurrentVersion: (_, getters) => - getters.activeBmcFirmware?.version, //this getter is needed for the Overview page, - }, - 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.errorUploadAndReboot')); - }); - }, - 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.errorUploadAndReboot')); - }); - }, - async switchFirmwareAndReboot({ getters }) { - const backupLoaction = getters.backupBmcFirmware.location; - const data = { - Links: { - ActiveSoftwareImage: { - '@odata.id': backupLoaction, - }, - }, - }; - return await api - .patch('/redfish/v1/Managers/bmc', data) - .catch((error) => { - console.log(error); - throw new Error( - i18n.t('pageFirmware.singleFileUpload.toast.errorSwitchImages') - ); - }); - }, - }, -}; - -export default FirmwareSingleImageStore; diff --git a/src/env/store/ibm.js b/src/env/store/ibm.js index e19dd48c..980236fc 100644 --- a/src/env/store/ibm.js +++ b/src/env/store/ibm.js @@ -1,11 +1,8 @@ import store from '@/store'; -import FirmwareSingleImageStore from './FirmwareSingleImage/FirmwareSingleImageStore'; import DumpsStore from './Dumps/DumpsStore'; store.unregisterModule('virtualMedia'); -store.unregisterModule('firmware'); -store.registerModule('firmwareSingleImage', FirmwareSingleImageStore); store.registerModule('dumps', DumpsStore); export default store; |