blob: 2d18d5b83fbe53b52ee4d38841d623431dd9c0c7 [file] [log] [blame]
Yoshie Muranaka7bc85e42021-02-11 09:59:13 -08001<template>
2 <div>
3 <page-section :section-title="sectionTitle">
4 <b-card-group deck>
5 <!-- Running image -->
6 <b-card>
7 <template #header>
8 <p class="font-weight-bold m-0">
Yoshie Muranaka33d755f2021-02-18 15:24:14 -08009 {{ $t('pageFirmware.cardTitleRunning') }}
Yoshie Muranaka7bc85e42021-02-11 09:59:13 -080010 </p>
11 </template>
12 <dl class="mb-0">
Yoshie Muranaka33d755f2021-02-18 15:24:14 -080013 <dt>{{ $t('pageFirmware.cardBodyVersion') }}</dt>
Yoshie Muranaka7bc85e42021-02-11 09:59:13 -080014 <dd class="mb-0">{{ runningVersion }}</dd>
15 </dl>
16 </b-card>
17
18 <!-- Backup image -->
19 <b-card>
20 <template #header>
21 <p class="font-weight-bold m-0">
Yoshie Muranaka33d755f2021-02-18 15:24:14 -080022 {{ $t('pageFirmware.cardTitleBackup') }}
Yoshie Muranaka7bc85e42021-02-11 09:59:13 -080023 </p>
24 </template>
25 <dl>
Yoshie Muranaka33d755f2021-02-18 15:24:14 -080026 <dt>{{ $t('pageFirmware.cardBodyVersion') }}</dt>
Yoshie Muranaka7bc85e42021-02-11 09:59:13 -080027 <dd>
28 <status-icon v-if="showBackupImageStatus" status="danger" />
29 <span v-if="showBackupImageStatus" class="sr-only">
30 {{ backupStatus }}
31 </span>
32 {{ backupVersion }}
33 </dd>
34 </dl>
35 <b-btn
MichalX Szopinskif65cc7b2021-07-12 10:56:16 +020036 v-if="!switchToBackupImageDisabled"
Yoshie Muranaka7bc85e42021-02-11 09:59:13 -080037 v-b-modal.modal-switch-to-running
38 data-test-id="firmware-button-switchToRunning"
39 variant="link"
40 size="sm"
41 class="py-0 px-1 mt-2"
Kenneth Fullbrightc3cf3612022-01-27 18:55:00 -060042 :disabled="isPageDisabled || !backup || !isServerOff"
Yoshie Muranaka7bc85e42021-02-11 09:59:13 -080043 >
44 <icon-switch class="d-none d-sm-inline-block" />
Yoshie Muranaka33d755f2021-02-18 15:24:14 -080045 {{ $t('pageFirmware.cardActionSwitchToRunning') }}
Yoshie Muranaka7bc85e42021-02-11 09:59:13 -080046 </b-btn>
47 </b-card>
48 </b-card-group>
49 </page-section>
50 <modal-switch-to-running :backup="backupVersion" @ok="switchToRunning" />
51 </div>
52</template>
53
54<script>
55import IconSwitch from '@carbon/icons-vue/es/arrows--horizontal/20';
56import PageSection from '@/components/Global/PageSection';
57import LoadingBarMixin, { loading } from '@/components/Mixins/LoadingBarMixin';
58import BVToastMixin from '@/components/Mixins/BVToastMixin';
59
60import ModalSwitchToRunning from './FirmwareModalSwitchToRunning';
Surya Vde23ea22024-07-11 15:19:46 +053061import { useI18n } from 'vue-i18n';
62import i18n from '@/i18n';
Yoshie Muranaka7bc85e42021-02-11 09:59:13 -080063
64export default {
65 components: { IconSwitch, ModalSwitchToRunning, PageSection },
66 mixins: [BVToastMixin, LoadingBarMixin],
67 props: {
68 isPageDisabled: {
69 required: true,
70 type: Boolean,
71 default: false,
72 },
Kenneth Fullbrightc3cf3612022-01-27 18:55:00 -060073 isServerOff: {
74 required: true,
75 type: Boolean,
76 default: false,
77 },
Yoshie Muranaka7bc85e42021-02-11 09:59:13 -080078 },
79 data() {
80 return {
Surya Vde23ea22024-07-11 15:19:46 +053081 $t: useI18n().t,
Yoshie Muranaka7bc85e42021-02-11 09:59:13 -080082 loading,
MichalX Szopinskif65cc7b2021-07-12 10:56:16 +020083 switchToBackupImageDisabled:
84 process.env.VUE_APP_SWITCH_TO_BACKUP_IMAGE_DISABLED === 'true',
Yoshie Muranaka7bc85e42021-02-11 09:59:13 -080085 };
86 },
87 computed: {
88 isSingleFileUploadEnabled() {
Yoshie Muranaka33d755f2021-02-18 15:24:14 -080089 return this.$store.getters['firmware/isSingleFileUploadEnabled'];
Yoshie Muranaka7bc85e42021-02-11 09:59:13 -080090 },
91 sectionTitle() {
92 if (this.isSingleFileUploadEnabled) {
Surya Vde23ea22024-07-11 15:19:46 +053093 return i18n.global.t('pageFirmware.sectionTitleBmcCardsCombined');
Yoshie Muranaka7bc85e42021-02-11 09:59:13 -080094 }
Surya Vde23ea22024-07-11 15:19:46 +053095 return i18n.global.t('pageFirmware.sectionTitleBmcCards');
Yoshie Muranaka7bc85e42021-02-11 09:59:13 -080096 },
97 running() {
Yoshie Muranaka33d755f2021-02-18 15:24:14 -080098 return this.$store.getters['firmware/activeBmcFirmware'];
Yoshie Muranaka7bc85e42021-02-11 09:59:13 -080099 },
100 backup() {
Yoshie Muranaka33d755f2021-02-18 15:24:14 -0800101 return this.$store.getters['firmware/backupBmcFirmware'];
Yoshie Muranaka7bc85e42021-02-11 09:59:13 -0800102 },
103 runningVersion() {
104 return this.running?.version || '--';
105 },
106 backupVersion() {
107 return this.backup?.version || '--';
108 },
109 backupStatus() {
110 return this.backup?.status || null;
111 },
112 showBackupImageStatus() {
113 return (
114 this.backupStatus === 'Critical' || this.backupStatus === 'Warning'
115 );
116 },
117 },
118 methods: {
119 switchToRunning() {
120 this.startLoader();
121 const timerId = setTimeout(() => {
122 this.endLoader();
Surya Vde23ea22024-07-11 15:19:46 +0530123 this.infoToast(
124 i18n.global.t('pageFirmware.toast.verifySwitchMessage'),
125 {
126 title: i18n.global.t('pageFirmware.toast.verifySwitch'),
127 refreshAction: true,
128 },
129 );
Yoshie Muranaka7bc85e42021-02-11 09:59:13 -0800130 }, 60000);
131
132 this.$store
Yoshie Muranaka33d755f2021-02-18 15:24:14 -0800133 .dispatch('firmware/switchBmcFirmwareAndReboot')
Yoshie Muranaka7bc85e42021-02-11 09:59:13 -0800134 .then(() =>
Surya Vde23ea22024-07-11 15:19:46 +0530135 this.infoToast(
136 i18n.global.t('pageFirmware.toast.rebootStartedMessage'),
137 {
138 title: i18n.global.t('pageFirmware.toast.rebootStarted'),
139 },
140 ),
Yoshie Muranaka7bc85e42021-02-11 09:59:13 -0800141 )
142 .catch(({ message }) => {
143 this.errorToast(message);
144 clearTimeout(timerId);
145 this.endLoader();
146 });
147 },
148 },
149};
150</script>