blob: d79a87693c4b811b07c79a636fb6e988cb66e43f [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"
42 :disabled="isPageDisabled || !backup"
43 >
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';
61
62export default {
63 components: { IconSwitch, ModalSwitchToRunning, PageSection },
64 mixins: [BVToastMixin, LoadingBarMixin],
65 props: {
66 isPageDisabled: {
67 required: true,
68 type: Boolean,
69 default: false,
70 },
71 },
72 data() {
73 return {
74 loading,
MichalX Szopinskif65cc7b2021-07-12 10:56:16 +020075 switchToBackupImageDisabled:
76 process.env.VUE_APP_SWITCH_TO_BACKUP_IMAGE_DISABLED === 'true',
Yoshie Muranaka7bc85e42021-02-11 09:59:13 -080077 };
78 },
79 computed: {
80 isSingleFileUploadEnabled() {
Yoshie Muranaka33d755f2021-02-18 15:24:14 -080081 return this.$store.getters['firmware/isSingleFileUploadEnabled'];
Yoshie Muranaka7bc85e42021-02-11 09:59:13 -080082 },
83 sectionTitle() {
84 if (this.isSingleFileUploadEnabled) {
Yoshie Muranaka33d755f2021-02-18 15:24:14 -080085 return this.$t('pageFirmware.sectionTitleBmcCardsCombined');
Yoshie Muranaka7bc85e42021-02-11 09:59:13 -080086 }
Yoshie Muranaka33d755f2021-02-18 15:24:14 -080087 return this.$t('pageFirmware.sectionTitleBmcCards');
Yoshie Muranaka7bc85e42021-02-11 09:59:13 -080088 },
89 running() {
Yoshie Muranaka33d755f2021-02-18 15:24:14 -080090 return this.$store.getters['firmware/activeBmcFirmware'];
Yoshie Muranaka7bc85e42021-02-11 09:59:13 -080091 },
92 backup() {
Yoshie Muranaka33d755f2021-02-18 15:24:14 -080093 return this.$store.getters['firmware/backupBmcFirmware'];
Yoshie Muranaka7bc85e42021-02-11 09:59:13 -080094 },
95 runningVersion() {
96 return this.running?.version || '--';
97 },
98 backupVersion() {
99 return this.backup?.version || '--';
100 },
101 backupStatus() {
102 return this.backup?.status || null;
103 },
104 showBackupImageStatus() {
105 return (
106 this.backupStatus === 'Critical' || this.backupStatus === 'Warning'
107 );
108 },
109 },
110 methods: {
111 switchToRunning() {
112 this.startLoader();
113 const timerId = setTimeout(() => {
114 this.endLoader();
Yoshie Muranaka33d755f2021-02-18 15:24:14 -0800115 this.infoToast(this.$t('pageFirmware.toast.verifySwitchMessage'), {
116 title: this.$t('pageFirmware.toast.verifySwitch'),
117 refreshAction: true,
118 });
Yoshie Muranaka7bc85e42021-02-11 09:59:13 -0800119 }, 60000);
120
121 this.$store
Yoshie Muranaka33d755f2021-02-18 15:24:14 -0800122 .dispatch('firmware/switchBmcFirmwareAndReboot')
Yoshie Muranaka7bc85e42021-02-11 09:59:13 -0800123 .then(() =>
Yoshie Muranaka33d755f2021-02-18 15:24:14 -0800124 this.infoToast(this.$t('pageFirmware.toast.rebootStartedMessage'), {
125 title: this.$t('pageFirmware.toast.rebootStarted'),
126 })
Yoshie Muranaka7bc85e42021-02-11 09:59:13 -0800127 )
128 .catch(({ message }) => {
129 this.errorToast(message);
130 clearTimeout(timerId);
131 this.endLoader();
132 });
133 },
134 },
135};
136</script>