| Yoshie Muranaka | 7bc85e4 | 2021-02-11 09:59:13 -0800 | [diff] [blame] | 1 | <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 Muranaka | 33d755f | 2021-02-18 15:24:14 -0800 | [diff] [blame] | 9 | {{ $t('pageFirmware.cardTitleRunning') }} | 
| Yoshie Muranaka | 7bc85e4 | 2021-02-11 09:59:13 -0800 | [diff] [blame] | 10 | </p> | 
|  | 11 | </template> | 
|  | 12 | <dl class="mb-0"> | 
| Yoshie Muranaka | 33d755f | 2021-02-18 15:24:14 -0800 | [diff] [blame] | 13 | <dt>{{ $t('pageFirmware.cardBodyVersion') }}</dt> | 
| Yoshie Muranaka | 7bc85e4 | 2021-02-11 09:59:13 -0800 | [diff] [blame] | 14 | <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 Muranaka | 33d755f | 2021-02-18 15:24:14 -0800 | [diff] [blame] | 22 | {{ $t('pageFirmware.cardTitleBackup') }} | 
| Yoshie Muranaka | 7bc85e4 | 2021-02-11 09:59:13 -0800 | [diff] [blame] | 23 | </p> | 
|  | 24 | </template> | 
|  | 25 | <dl> | 
| Yoshie Muranaka | 33d755f | 2021-02-18 15:24:14 -0800 | [diff] [blame] | 26 | <dt>{{ $t('pageFirmware.cardBodyVersion') }}</dt> | 
| Yoshie Muranaka | 7bc85e4 | 2021-02-11 09:59:13 -0800 | [diff] [blame] | 27 | <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 Szopinski | f65cc7b | 2021-07-12 10:56:16 +0200 | [diff] [blame^] | 36 | v-if="!switchToBackupImageDisabled" | 
| Yoshie Muranaka | 7bc85e4 | 2021-02-11 09:59:13 -0800 | [diff] [blame] | 37 | 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 Muranaka | 33d755f | 2021-02-18 15:24:14 -0800 | [diff] [blame] | 45 | {{ $t('pageFirmware.cardActionSwitchToRunning') }} | 
| Yoshie Muranaka | 7bc85e4 | 2021-02-11 09:59:13 -0800 | [diff] [blame] | 46 | </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> | 
|  | 55 | import IconSwitch from '@carbon/icons-vue/es/arrows--horizontal/20'; | 
|  | 56 | import PageSection from '@/components/Global/PageSection'; | 
|  | 57 | import LoadingBarMixin, { loading } from '@/components/Mixins/LoadingBarMixin'; | 
|  | 58 | import BVToastMixin from '@/components/Mixins/BVToastMixin'; | 
|  | 59 |  | 
|  | 60 | import ModalSwitchToRunning from './FirmwareModalSwitchToRunning'; | 
|  | 61 |  | 
|  | 62 | export 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 Szopinski | f65cc7b | 2021-07-12 10:56:16 +0200 | [diff] [blame^] | 75 | switchToBackupImageDisabled: | 
|  | 76 | process.env.VUE_APP_SWITCH_TO_BACKUP_IMAGE_DISABLED === 'true', | 
| Yoshie Muranaka | 7bc85e4 | 2021-02-11 09:59:13 -0800 | [diff] [blame] | 77 | }; | 
|  | 78 | }, | 
|  | 79 | computed: { | 
|  | 80 | isSingleFileUploadEnabled() { | 
| Yoshie Muranaka | 33d755f | 2021-02-18 15:24:14 -0800 | [diff] [blame] | 81 | return this.$store.getters['firmware/isSingleFileUploadEnabled']; | 
| Yoshie Muranaka | 7bc85e4 | 2021-02-11 09:59:13 -0800 | [diff] [blame] | 82 | }, | 
|  | 83 | sectionTitle() { | 
|  | 84 | if (this.isSingleFileUploadEnabled) { | 
| Yoshie Muranaka | 33d755f | 2021-02-18 15:24:14 -0800 | [diff] [blame] | 85 | return this.$t('pageFirmware.sectionTitleBmcCardsCombined'); | 
| Yoshie Muranaka | 7bc85e4 | 2021-02-11 09:59:13 -0800 | [diff] [blame] | 86 | } | 
| Yoshie Muranaka | 33d755f | 2021-02-18 15:24:14 -0800 | [diff] [blame] | 87 | return this.$t('pageFirmware.sectionTitleBmcCards'); | 
| Yoshie Muranaka | 7bc85e4 | 2021-02-11 09:59:13 -0800 | [diff] [blame] | 88 | }, | 
|  | 89 | running() { | 
| Yoshie Muranaka | 33d755f | 2021-02-18 15:24:14 -0800 | [diff] [blame] | 90 | return this.$store.getters['firmware/activeBmcFirmware']; | 
| Yoshie Muranaka | 7bc85e4 | 2021-02-11 09:59:13 -0800 | [diff] [blame] | 91 | }, | 
|  | 92 | backup() { | 
| Yoshie Muranaka | 33d755f | 2021-02-18 15:24:14 -0800 | [diff] [blame] | 93 | return this.$store.getters['firmware/backupBmcFirmware']; | 
| Yoshie Muranaka | 7bc85e4 | 2021-02-11 09:59:13 -0800 | [diff] [blame] | 94 | }, | 
|  | 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 Muranaka | 33d755f | 2021-02-18 15:24:14 -0800 | [diff] [blame] | 115 | this.infoToast(this.$t('pageFirmware.toast.verifySwitchMessage'), { | 
|  | 116 | title: this.$t('pageFirmware.toast.verifySwitch'), | 
|  | 117 | refreshAction: true, | 
|  | 118 | }); | 
| Yoshie Muranaka | 7bc85e4 | 2021-02-11 09:59:13 -0800 | [diff] [blame] | 119 | }, 60000); | 
|  | 120 |  | 
|  | 121 | this.$store | 
| Yoshie Muranaka | 33d755f | 2021-02-18 15:24:14 -0800 | [diff] [blame] | 122 | .dispatch('firmware/switchBmcFirmwareAndReboot') | 
| Yoshie Muranaka | 7bc85e4 | 2021-02-11 09:59:13 -0800 | [diff] [blame] | 123 | .then(() => | 
| Yoshie Muranaka | 33d755f | 2021-02-18 15:24:14 -0800 | [diff] [blame] | 124 | this.infoToast(this.$t('pageFirmware.toast.rebootStartedMessage'), { | 
|  | 125 | title: this.$t('pageFirmware.toast.rebootStarted'), | 
|  | 126 | }) | 
| Yoshie Muranaka | 7bc85e4 | 2021-02-11 09:59:13 -0800 | [diff] [blame] | 127 | ) | 
|  | 128 | .catch(({ message }) => { | 
|  | 129 | this.errorToast(message); | 
|  | 130 | clearTimeout(timerId); | 
|  | 131 | this.endLoader(); | 
|  | 132 | }); | 
|  | 133 | }, | 
|  | 134 | }, | 
|  | 135 | }; | 
|  | 136 | </script> |