168cbbe90SSandeepa Singh<template>
268cbbe90SSandeepa Singh  <div>
368cbbe90SSandeepa Singh    <page-section :section-title="sectionTitle">
468cbbe90SSandeepa Singh      <b-card-group deck>
568cbbe90SSandeepa Singh        <!-- Running image -->
668cbbe90SSandeepa Singh        <b-card>
768cbbe90SSandeepa Singh          <template #header>
868cbbe90SSandeepa Singh            <p class="font-weight-bold m-0">
968cbbe90SSandeepa Singh              {{ $t('pageFirmware.cardTitleRunning') }}
1068cbbe90SSandeepa Singh            </p>
1168cbbe90SSandeepa Singh          </template>
1268cbbe90SSandeepa Singh          <dl class="mb-0">
1368cbbe90SSandeepa Singh            <dt>{{ $t('pageFirmware.cardBodyVersion') }}</dt>
1468cbbe90SSandeepa Singh            <dd class="mb-0">{{ runningVersion }}</dd>
1568cbbe90SSandeepa Singh          </dl>
1668cbbe90SSandeepa Singh        </b-card>
1768cbbe90SSandeepa Singh
1868cbbe90SSandeepa Singh        <!-- Backup image -->
1968cbbe90SSandeepa Singh        <b-card>
2068cbbe90SSandeepa Singh          <template #header>
2168cbbe90SSandeepa Singh            <p class="font-weight-bold m-0">
2268cbbe90SSandeepa Singh              {{ $t('pageFirmware.cardTitleBackup') }}
2368cbbe90SSandeepa Singh            </p>
2468cbbe90SSandeepa Singh          </template>
2568cbbe90SSandeepa Singh          <dl>
2668cbbe90SSandeepa Singh            <dt>{{ $t('pageFirmware.cardBodyVersion') }}</dt>
2768cbbe90SSandeepa Singh            <dd>
2868cbbe90SSandeepa Singh              <status-icon v-if="showBackupImageStatus" status="danger" />
2968cbbe90SSandeepa Singh              <span v-if="showBackupImageStatus" class="sr-only">
3068cbbe90SSandeepa Singh                {{ backupStatus }}
3168cbbe90SSandeepa Singh              </span>
3268cbbe90SSandeepa Singh              {{ backupVersion }}
3368cbbe90SSandeepa Singh            </dd>
3468cbbe90SSandeepa Singh          </dl>
3568cbbe90SSandeepa Singh          <b-btn
3668cbbe90SSandeepa Singh            v-if="!switchToBackupImageDisabled"
3768cbbe90SSandeepa Singh            v-b-modal.modal-switch-to-running
3868cbbe90SSandeepa Singh            data-test-id="firmware-button-switchToRunning"
3968cbbe90SSandeepa Singh            variant="link"
4068cbbe90SSandeepa Singh            size="sm"
4168cbbe90SSandeepa Singh            class="py-0 px-1 mt-2"
42c3cf3610SKenneth Fullbright            :disabled="isPageDisabled || !backup || !isServerOff"
4368cbbe90SSandeepa Singh          >
4468cbbe90SSandeepa Singh            <icon-switch class="d-none d-sm-inline-block" />
4568cbbe90SSandeepa Singh            {{ $t('pageFirmware.cardActionSwitchToRunning') }}
4668cbbe90SSandeepa Singh          </b-btn>
4768cbbe90SSandeepa Singh        </b-card>
4868cbbe90SSandeepa Singh      </b-card-group>
4968cbbe90SSandeepa Singh    </page-section>
5068cbbe90SSandeepa Singh    <modal-switch-to-running :backup="backupVersion" @ok="switchToRunning" />
5168cbbe90SSandeepa Singh  </div>
5268cbbe90SSandeepa Singh</template>
5368cbbe90SSandeepa Singh
5468cbbe90SSandeepa Singh<script>
5568cbbe90SSandeepa Singhimport IconSwitch from '@carbon/icons-vue/es/arrows--horizontal/20';
5668cbbe90SSandeepa Singhimport PageSection from '@/components/Global/PageSection';
5768cbbe90SSandeepa Singhimport LoadingBarMixin, { loading } from '@/components/Mixins/LoadingBarMixin';
5868cbbe90SSandeepa Singhimport BVToastMixin from '@/components/Mixins/BVToastMixin';
5968cbbe90SSandeepa Singh
6068cbbe90SSandeepa Singhimport ModalSwitchToRunning from './FirmwareModalSwitchToRunning';
6168cbbe90SSandeepa Singh
6268cbbe90SSandeepa Singhexport default {
6368cbbe90SSandeepa Singh  components: { IconSwitch, ModalSwitchToRunning, PageSection },
6468cbbe90SSandeepa Singh  mixins: [BVToastMixin, LoadingBarMixin],
6568cbbe90SSandeepa Singh  props: {
6668cbbe90SSandeepa Singh    isPageDisabled: {
6768cbbe90SSandeepa Singh      required: true,
6868cbbe90SSandeepa Singh      type: Boolean,
6968cbbe90SSandeepa Singh      default: false,
7068cbbe90SSandeepa Singh    },
71c3cf3610SKenneth Fullbright    isServerOff: {
72c3cf3610SKenneth Fullbright      required: true,
73c3cf3610SKenneth Fullbright      type: Boolean,
74c3cf3610SKenneth Fullbright      default: false,
75c3cf3610SKenneth Fullbright    },
7668cbbe90SSandeepa Singh  },
7768cbbe90SSandeepa Singh  data() {
7868cbbe90SSandeepa Singh    return {
7968cbbe90SSandeepa Singh      loading,
8068cbbe90SSandeepa Singh      switchToBackupImageDisabled:
8168cbbe90SSandeepa Singh        process.env.VUE_APP_SWITCH_TO_BACKUP_IMAGE_DISABLED === 'true',
8268cbbe90SSandeepa Singh    };
8368cbbe90SSandeepa Singh  },
8468cbbe90SSandeepa Singh  computed: {
8568cbbe90SSandeepa Singh    isSingleFileUploadEnabled() {
8668cbbe90SSandeepa Singh      return this.$store.getters['firmware/isSingleFileUploadEnabled'];
8768cbbe90SSandeepa Singh    },
8868cbbe90SSandeepa Singh    sectionTitle() {
8968cbbe90SSandeepa Singh      if (this.isSingleFileUploadEnabled) {
9068cbbe90SSandeepa Singh        return this.$t('pageFirmware.sectionTitleBmcCardsCombined');
9168cbbe90SSandeepa Singh      }
9268cbbe90SSandeepa Singh      return this.$t('pageFirmware.sectionTitleBmcCards');
9368cbbe90SSandeepa Singh    },
9468cbbe90SSandeepa Singh    running() {
9568cbbe90SSandeepa Singh      return this.$store.getters['firmware/activeBmcFirmware'];
9668cbbe90SSandeepa Singh    },
9768cbbe90SSandeepa Singh    backup() {
9868cbbe90SSandeepa Singh      return this.$store.getters['firmware/backupBmcFirmware'];
9968cbbe90SSandeepa Singh    },
10068cbbe90SSandeepa Singh    runningVersion() {
10168cbbe90SSandeepa Singh      return this.running?.version || '--';
10268cbbe90SSandeepa Singh    },
10368cbbe90SSandeepa Singh    backupVersion() {
10468cbbe90SSandeepa Singh      return this.backup?.version || '--';
10568cbbe90SSandeepa Singh    },
10668cbbe90SSandeepa Singh    backupStatus() {
10768cbbe90SSandeepa Singh      return this.backup?.status || null;
10868cbbe90SSandeepa Singh    },
10968cbbe90SSandeepa Singh    showBackupImageStatus() {
11068cbbe90SSandeepa Singh      return (
11168cbbe90SSandeepa Singh        this.backupStatus === 'Critical' || this.backupStatus === 'Warning'
11268cbbe90SSandeepa Singh      );
11368cbbe90SSandeepa Singh    },
11468cbbe90SSandeepa Singh  },
11568cbbe90SSandeepa Singh  methods: {
11668cbbe90SSandeepa Singh    switchToRunning() {
11768cbbe90SSandeepa Singh      this.startLoader();
11868cbbe90SSandeepa Singh      const timerId = setTimeout(() => {
11968cbbe90SSandeepa Singh        this.endLoader();
12068cbbe90SSandeepa Singh        this.infoToast(this.$t('pageFirmware.toast.verifySwitchMessage'), {
12168cbbe90SSandeepa Singh          title: this.$t('pageFirmware.toast.verifySwitch'),
12268cbbe90SSandeepa Singh          refreshAction: true,
12368cbbe90SSandeepa Singh        });
12468cbbe90SSandeepa Singh      }, 60000);
12568cbbe90SSandeepa Singh
12668cbbe90SSandeepa Singh      this.$store
12768cbbe90SSandeepa Singh        .dispatch('firmware/switchBmcFirmwareAndReboot')
12868cbbe90SSandeepa Singh        .then(() =>
12968cbbe90SSandeepa Singh          this.infoToast(this.$t('pageFirmware.toast.rebootStartedMessage'), {
13068cbbe90SSandeepa Singh            title: this.$t('pageFirmware.toast.rebootStarted'),
131*8132399cSEd Tanous          }),
13268cbbe90SSandeepa Singh        )
13368cbbe90SSandeepa Singh        .catch(({ message }) => {
13468cbbe90SSandeepa Singh          this.errorToast(message);
13568cbbe90SSandeepa Singh          clearTimeout(timerId);
13668cbbe90SSandeepa Singh          this.endLoader();
13768cbbe90SSandeepa Singh        });
13868cbbe90SSandeepa Singh    },
13968cbbe90SSandeepa Singh  },
14068cbbe90SSandeepa Singh};
14168cbbe90SSandeepa Singh</script>
142