From 68cbbe9014cbdcf7229a878f564d38f6d6199f25 Mon Sep 17 00:00:00 2001 From: Sandeepa Singh Date: Wed, 14 Jul 2021 16:02:22 +0530 Subject: IA update: Update control section to operations This is the third update to the information architecture changes and has the following changes: - The control section has been updated to operations - The server led page has been removed - The firmware page is moved to operations section Signed-off-by: Sandeepa Singh Change-Id: I2e23da447890d7bee51892e1f782d5f2db6dded4 --- src/components/AppHeader/AppHeader.vue | 2 +- src/components/AppNavigation/AppNavigationMixin.js | 35 ++- src/env/components/AppNavigation/ibm.js | 31 ++- src/env/components/AppNavigation/intel.js | 31 ++- src/env/router/ibm.js | 39 ++-- src/env/router/intel.js | 53 ++--- src/locales/en-US.json | 14 +- src/router/routes.js | 63 +++-- src/store/index.js | 14 +- src/store/modules/Configuration/FirmwareStore.js | 191 --------------- src/store/modules/Control/BootSettingsStore.js | 136 ----------- src/store/modules/Control/ControlStore.js | 132 ----------- src/store/modules/Control/FactoryResetStore.js | 32 --- src/store/modules/Control/PowerControlStore.js | 60 ----- src/store/modules/Control/PowerPolicyStore.js | 72 ------ src/store/modules/Control/VirtualMediaStore.js | 105 --------- src/store/modules/HardwareStatus/ServerLedStore.js | 15 +- src/store/modules/Operations/BootSettingsStore.js | 136 +++++++++++ src/store/modules/Operations/ControlStore.js | 132 +++++++++++ src/store/modules/Operations/FactoryResetStore.js | 32 +++ src/store/modules/Operations/FirmwareStore.js | 191 +++++++++++++++ src/store/modules/Operations/PowerControlStore.js | 60 +++++ src/store/modules/Operations/PowerPolicyStore.js | 72 ++++++ src/store/modules/Operations/VirtualMediaStore.js | 105 +++++++++ src/views/Configuration/Firmware/Firmware.vue | 93 -------- .../Firmware/FirmwareAlertServerPower.vue | 50 ---- .../Configuration/Firmware/FirmwareCardsBmc.vue | 136 ----------- .../Configuration/Firmware/FirmwareCardsHost.vue | 73 ------ .../Configuration/Firmware/FirmwareFormUpdate.vue | 200 ---------------- .../Firmware/FirmwareModalSwitchToRunning.vue | 31 --- .../Firmware/FirmwareModalUpdateFirmware.vue | 44 ---- src/views/Configuration/Firmware/index.js | 2 - src/views/Control/FactoryReset/FactoryReset.vue | 117 ---------- .../Control/FactoryReset/FactoryResetModal.vue | 113 --------- src/views/Control/FactoryReset/index.js | 2 - src/views/Control/Kvm/Kvm.vue | 24 -- src/views/Control/Kvm/KvmConsole.vue | 170 -------------- src/views/Control/Kvm/index.js | 2 - .../Control/ManagePowerUsage/ManagePowerUsage.vue | 165 ------------- src/views/Control/ManagePowerUsage/index.js | 2 - .../PowerRestorePolicy/PowerRestorePolicy.vue | 80 ------- src/views/Control/PowerRestorePolicy/index.js | 2 - src/views/Control/RebootBmc/RebootBmc.vue | 83 ------- src/views/Control/RebootBmc/index.js | 2 - src/views/Control/SerialOverLan/SerialOverLan.vue | 24 -- .../Control/SerialOverLan/SerialOverLanConsole.vue | 148 ------------ src/views/Control/SerialOverLan/index.js | 2 - src/views/Control/ServerLed/ServerLed.vue | 71 ------ src/views/Control/ServerLed/index.js | 2 - .../Control/ServerPowerOperations/BootSettings.vue | 140 ----------- .../ServerPowerOperations.vue | 260 --------------------- src/views/Control/ServerPowerOperations/index.js | 2 - .../VirtualMedia/ModalConfigureConnection.vue | 145 ------------ src/views/Control/VirtualMedia/VirtualMedia.vue | 221 ------------------ src/views/Control/VirtualMedia/index.js | 2 - src/views/Operations/FactoryReset/FactoryReset.vue | 117 ++++++++++ .../Operations/FactoryReset/FactoryResetModal.vue | 113 +++++++++ src/views/Operations/FactoryReset/index.js | 2 + src/views/Operations/Firmware/Firmware.vue | 93 ++++++++ .../Firmware/FirmwareAlertServerPower.vue | 50 ++++ src/views/Operations/Firmware/FirmwareCardsBmc.vue | 136 +++++++++++ .../Operations/Firmware/FirmwareCardsHost.vue | 73 ++++++ .../Operations/Firmware/FirmwareFormUpdate.vue | 200 ++++++++++++++++ .../Firmware/FirmwareModalSwitchToRunning.vue | 31 +++ .../Firmware/FirmwareModalUpdateFirmware.vue | 44 ++++ src/views/Operations/Firmware/index.js | 2 + src/views/Operations/Kvm/Kvm.vue | 24 ++ src/views/Operations/Kvm/KvmConsole.vue | 170 ++++++++++++++ src/views/Operations/Kvm/index.js | 2 + .../ManagePowerUsage/ManagePowerUsage.vue | 165 +++++++++++++ src/views/Operations/ManagePowerUsage/index.js | 2 + .../PowerRestorePolicy/PowerRestorePolicy.vue | 80 +++++++ src/views/Operations/PowerRestorePolicy/index.js | 2 + src/views/Operations/RebootBmc/RebootBmc.vue | 83 +++++++ src/views/Operations/RebootBmc/index.js | 2 + .../Operations/SerialOverLan/SerialOverLan.vue | 24 ++ .../SerialOverLan/SerialOverLanConsole.vue | 148 ++++++++++++ src/views/Operations/SerialOverLan/index.js | 2 + .../ServerPowerOperations/BootSettings.vue | 140 +++++++++++ .../ServerPowerOperations.vue | 260 +++++++++++++++++++++ .../Operations/ServerPowerOperations/index.js | 2 + .../VirtualMedia/ModalConfigureConnection.vue | 145 ++++++++++++ src/views/Operations/VirtualMedia/VirtualMedia.vue | 221 ++++++++++++++++++ src/views/Operations/VirtualMedia/index.js | 2 + src/views/Overview/OverviewQuickLinks.vue | 3 +- tests/unit/__snapshots__/AppHeader.spec.js.snap | 2 +- .../unit/__snapshots__/AppNavigation.spec.js.snap | 102 ++++---- 87 files changed, 3227 insertions(+), 3376 deletions(-) delete mode 100644 src/store/modules/Configuration/FirmwareStore.js delete mode 100644 src/store/modules/Control/BootSettingsStore.js delete mode 100644 src/store/modules/Control/ControlStore.js delete mode 100644 src/store/modules/Control/FactoryResetStore.js delete mode 100644 src/store/modules/Control/PowerControlStore.js delete mode 100644 src/store/modules/Control/PowerPolicyStore.js delete mode 100644 src/store/modules/Control/VirtualMediaStore.js create mode 100644 src/store/modules/Operations/BootSettingsStore.js create mode 100644 src/store/modules/Operations/ControlStore.js create mode 100644 src/store/modules/Operations/FactoryResetStore.js create mode 100644 src/store/modules/Operations/FirmwareStore.js create mode 100644 src/store/modules/Operations/PowerControlStore.js create mode 100644 src/store/modules/Operations/PowerPolicyStore.js create mode 100644 src/store/modules/Operations/VirtualMediaStore.js delete mode 100644 src/views/Configuration/Firmware/Firmware.vue delete mode 100644 src/views/Configuration/Firmware/FirmwareAlertServerPower.vue delete mode 100644 src/views/Configuration/Firmware/FirmwareCardsBmc.vue delete mode 100644 src/views/Configuration/Firmware/FirmwareCardsHost.vue delete mode 100644 src/views/Configuration/Firmware/FirmwareFormUpdate.vue delete mode 100644 src/views/Configuration/Firmware/FirmwareModalSwitchToRunning.vue delete mode 100644 src/views/Configuration/Firmware/FirmwareModalUpdateFirmware.vue delete mode 100644 src/views/Configuration/Firmware/index.js delete mode 100644 src/views/Control/FactoryReset/FactoryReset.vue delete mode 100644 src/views/Control/FactoryReset/FactoryResetModal.vue delete mode 100644 src/views/Control/FactoryReset/index.js delete mode 100644 src/views/Control/Kvm/Kvm.vue delete mode 100644 src/views/Control/Kvm/KvmConsole.vue delete mode 100644 src/views/Control/Kvm/index.js delete mode 100644 src/views/Control/ManagePowerUsage/ManagePowerUsage.vue delete mode 100644 src/views/Control/ManagePowerUsage/index.js delete mode 100644 src/views/Control/PowerRestorePolicy/PowerRestorePolicy.vue delete mode 100644 src/views/Control/PowerRestorePolicy/index.js delete mode 100644 src/views/Control/RebootBmc/RebootBmc.vue delete mode 100644 src/views/Control/RebootBmc/index.js delete mode 100644 src/views/Control/SerialOverLan/SerialOverLan.vue delete mode 100644 src/views/Control/SerialOverLan/SerialOverLanConsole.vue delete mode 100644 src/views/Control/SerialOverLan/index.js delete mode 100644 src/views/Control/ServerLed/ServerLed.vue delete mode 100644 src/views/Control/ServerLed/index.js delete mode 100644 src/views/Control/ServerPowerOperations/BootSettings.vue delete mode 100644 src/views/Control/ServerPowerOperations/ServerPowerOperations.vue delete mode 100644 src/views/Control/ServerPowerOperations/index.js delete mode 100644 src/views/Control/VirtualMedia/ModalConfigureConnection.vue delete mode 100644 src/views/Control/VirtualMedia/VirtualMedia.vue delete mode 100644 src/views/Control/VirtualMedia/index.js create mode 100644 src/views/Operations/FactoryReset/FactoryReset.vue create mode 100644 src/views/Operations/FactoryReset/FactoryResetModal.vue create mode 100644 src/views/Operations/FactoryReset/index.js create mode 100644 src/views/Operations/Firmware/Firmware.vue create mode 100644 src/views/Operations/Firmware/FirmwareAlertServerPower.vue create mode 100644 src/views/Operations/Firmware/FirmwareCardsBmc.vue create mode 100644 src/views/Operations/Firmware/FirmwareCardsHost.vue create mode 100644 src/views/Operations/Firmware/FirmwareFormUpdate.vue create mode 100644 src/views/Operations/Firmware/FirmwareModalSwitchToRunning.vue create mode 100644 src/views/Operations/Firmware/FirmwareModalUpdateFirmware.vue create mode 100644 src/views/Operations/Firmware/index.js create mode 100644 src/views/Operations/Kvm/Kvm.vue create mode 100644 src/views/Operations/Kvm/KvmConsole.vue create mode 100644 src/views/Operations/Kvm/index.js create mode 100644 src/views/Operations/ManagePowerUsage/ManagePowerUsage.vue create mode 100644 src/views/Operations/ManagePowerUsage/index.js create mode 100644 src/views/Operations/PowerRestorePolicy/PowerRestorePolicy.vue create mode 100644 src/views/Operations/PowerRestorePolicy/index.js create mode 100644 src/views/Operations/RebootBmc/RebootBmc.vue create mode 100644 src/views/Operations/RebootBmc/index.js create mode 100644 src/views/Operations/SerialOverLan/SerialOverLan.vue create mode 100644 src/views/Operations/SerialOverLan/SerialOverLanConsole.vue create mode 100644 src/views/Operations/SerialOverLan/index.js create mode 100644 src/views/Operations/ServerPowerOperations/BootSettings.vue create mode 100644 src/views/Operations/ServerPowerOperations/ServerPowerOperations.vue create mode 100644 src/views/Operations/ServerPowerOperations/index.js create mode 100644 src/views/Operations/VirtualMedia/ModalConfigureConnection.vue create mode 100644 src/views/Operations/VirtualMedia/VirtualMedia.vue create mode 100644 src/views/Operations/VirtualMedia/index.js diff --git a/src/components/AppHeader/AppHeader.vue b/src/components/AppHeader/AppHeader.vue index df6acbf7..26f4a683 100644 --- a/src/components/AppHeader/AppHeader.vue +++ b/src/components/AppHeader/AppHeader.vue @@ -56,7 +56,7 @@ {{ $t('appHeader.health') }} diff --git a/src/components/AppNavigation/AppNavigationMixin.js b/src/components/AppNavigation/AppNavigationMixin.js index 10ca5f83..935bd7e7 100644 --- a/src/components/AppNavigation/AppNavigationMixin.js +++ b/src/components/AppNavigation/AppNavigationMixin.js @@ -60,54 +60,54 @@ const AppNavigationMixin = { ], }, { - id: 'control', - label: this.$t('appNavigation.control'), + id: 'operations', + label: this.$t('appNavigation.operations'), icon: 'iconControl', children: [ { id: 'factory-reset', label: this.$t('appNavigation.factoryReset'), - route: '/control/factory-reset', + route: '/operations/factory-reset', }, { id: 'kvm', label: this.$t('appNavigation.kvm'), - route: '/control/kvm', + route: '/operations/kvm', + }, + { + id: 'firmware', + label: this.$t('appNavigation.firmware'), + route: '/operations/firmware', }, { id: 'manage-power-usage', label: this.$t('appNavigation.managePowerUsage'), - route: '/control/manage-power-usage', + route: '/operations/manage-power-usage', }, { id: 'power-restore-policy', label: this.$t('appNavigation.powerRestorePolicy'), - route: '/control/power-restore-policy', + route: '/operations/power-restore-policy', }, { id: 'reboot-bmc', label: this.$t('appNavigation.rebootBmc'), - route: '/control/reboot-bmc', + route: '/operations/reboot-bmc', }, { id: 'serial-over-lan', label: this.$t('appNavigation.serialOverLan'), - route: '/control/serial-over-lan', - }, - { - id: 'server-led', - label: this.$t('appNavigation.serverLed'), - route: '/control/server-led', + route: '/operations/serial-over-lan', }, { id: 'server-power-operations', label: this.$t('appNavigation.serverPowerOperations'), - route: '/control/server-power-operations', + route: '/operations/server-power-operations', }, { id: 'virtual-media', label: this.$t('appNavigation.virtualMedia'), - route: '/control/virtual-media', + route: '/operations/virtual-media', }, ], }, @@ -121,11 +121,6 @@ const AppNavigationMixin = { label: this.$t('appNavigation.dateTimeSettings'), route: '/configuration/date-time-settings', }, - { - id: 'firmware', - label: this.$t('appNavigation.firmware'), - route: '/configuration/firmware', - }, { id: 'network-settings', label: this.$t('appNavigation.networkSettings'), diff --git a/src/env/components/AppNavigation/ibm.js b/src/env/components/AppNavigation/ibm.js index 0128d749..fa3891ea 100644 --- a/src/env/components/AppNavigation/ibm.js +++ b/src/env/components/AppNavigation/ibm.js @@ -65,44 +65,44 @@ const AppNavigationMixin = { ], }, { - id: 'control', - label: this.$t('appNavigation.control'), + id: 'operations', + label: this.$t('appNavigation.operations'), icon: 'iconControl', children: [ { id: 'factory-reset', label: this.$t('appNavigation.factoryReset'), - route: '/control/factory-reset', + route: '/operations/factory-reset', + }, + { + id: 'firmware', + label: this.$t('appNavigation.firmware'), + route: '/operations/firmware', }, { id: 'manage-power-usage', label: this.$t('appNavigation.managePowerUsage'), - route: '/control/manage-power-usage', + route: '/operations/manage-power-usage', }, { id: 'power-restore-policy', label: this.$t('appNavigation.powerRestorePolicy'), - route: '/control/power-restore-policy', + route: '/operations/power-restore-policy', }, { id: 'reboot-bmc', label: this.$t('appNavigation.rebootBmc'), - route: '/control/reboot-bmc', + route: '/operations/reboot-bmc', }, { id: 'serial-over-lan', label: this.$t('appNavigation.serialOverLan'), - route: '/control/serial-over-lan', - }, - { - id: 'server-led', - label: this.$t('appNavigation.serverLed'), - route: '/control/server-led', + route: '/operations/serial-over-lan', }, { id: 'server-power-operations', label: this.$t('appNavigation.serverPowerOperations'), - route: '/control/server-power-operations', + route: '/operations/server-power-operations', }, ], }, @@ -116,11 +116,6 @@ const AppNavigationMixin = { label: this.$t('appNavigation.dateTimeSettings'), route: '/configuration/date-time-settings', }, - { - id: 'firmware', - label: this.$t('appNavigation.firmware'), - route: '/configuration/firmware', - }, { id: 'network-settings', label: this.$t('appNavigation.networkSettings'), diff --git a/src/env/components/AppNavigation/intel.js b/src/env/components/AppNavigation/intel.js index 68557c1b..2c4188cc 100644 --- a/src/env/components/AppNavigation/intel.js +++ b/src/env/components/AppNavigation/intel.js @@ -55,44 +55,44 @@ const AppNavigationMixin = { ], }, { - id: 'control', - label: this.$t('appNavigation.control'), + id: 'operations', + label: this.$t('appNavigation.operations'), icon: 'iconControl', children: [ { id: 'kvm', label: this.$t('appNavigation.kvm'), - route: '/control/kvm', + route: '/operations/kvm', + }, + { + id: 'firmware', + label: this.$t('appNavigation.firmware'), + route: '/operations/firmware', }, { id: 'manage-power-usage', label: this.$t('appNavigation.managePowerUsage'), - route: '/control/manage-power-usage', + route: '/operations/manage-power-usage', }, { id: 'reboot-bmc', label: this.$t('appNavigation.rebootBmc'), - route: '/control/reboot-bmc', + route: '/operations/reboot-bmc', }, { id: 'serial-over-lan', label: this.$t('appNavigation.serialOverLan'), - route: '/control/serial-over-lan', - }, - { - id: 'server-led', - label: this.$t('appNavigation.serverLed'), - route: '/control/server-led', + route: '/operations/serial-over-lan', }, { id: 'server-power-operations', label: this.$t('appNavigation.serverPowerOperations'), - route: '/control/server-power-operations', + route: '/operations/server-power-operations', }, { id: 'virtual-media', label: this.$t('appNavigation.virtualMedia'), - route: '/control/virtual-media', + route: '/operations/virtual-media', }, ], }, @@ -106,11 +106,6 @@ const AppNavigationMixin = { label: this.$t('appNavigation.dateTimeSettings'), route: '/configuration/date-time-settings', }, - { - id: 'firmware', - label: this.$t('appNavigation.firmware'), - route: '/configuration/firmware', - }, { id: 'network-settings', label: this.$t('appNavigation.networkSettings'), diff --git a/src/env/router/ibm.js b/src/env/router/ibm.js index 208cd976..b0129ea2 100644 --- a/src/env/router/ibm.js +++ b/src/env/router/ibm.js @@ -4,27 +4,26 @@ import ClientSessions from '@/views/AccessControl/ClientSessions'; import ConsoleLayout from '@/layouts/ConsoleLayout.vue'; import DateTimeSettings from '@/views/Configuration/DateTimeSettings'; import EventLogs from '@/views/Logs/EventLogs'; -import FactoryReset from '@/views/Control/FactoryReset'; -import Firmware from '@/views/Configuration/Firmware'; +import FactoryReset from '@/views/Operations/FactoryReset'; +import Firmware from '@/views/Operations/Firmware'; import Inventory from '@/views/HardwareStatus/Inventory'; import Ldap from '@/views/AccessControl/Ldap'; import LocalUserManagement from '@/views/AccessControl/LocalUserManagement'; import Login from '@/views/Login'; import LoginLayout from '@/layouts/LoginLayout'; -import ManagePowerUsage from '@/views/Control/ManagePowerUsage'; +import ManagePowerUsage from '@/views/Operations/ManagePowerUsage'; import NetworkSettings from '@/views/Configuration/NetworkSettings'; import Overview from '@/views/Overview'; import PageNotFound from '@/views/PageNotFound'; import PostCodeLogs from '@/views/Logs/PostCodeLogs'; -import PowerRestorePolicy from '@/views/Control/PowerRestorePolicy'; +import PowerRestorePolicy from '@/views/Operations/PowerRestorePolicy'; import ProfileSettings from '@/views/ProfileSettings'; -import RebootBmc from '@/views/Control/RebootBmc'; +import RebootBmc from '@/views/Operations/RebootBmc'; import SecuritySettings from '@/views/Configuration/SecuritySettings'; import Sensors from '@/views/HardwareStatus/Sensors'; -import SerialOverLan from '@/views/Control/SerialOverLan'; -import SerialOverLanConsole from '@/views/Control/SerialOverLan/SerialOverLanConsole'; -import ServerLed from '@/views/Control/ServerLed'; -import ServerPowerOperations from '@/views/Control/ServerPowerOperations'; +import SerialOverLan from '@/views/Operations/SerialOverLan'; +import SerialOverLanConsole from '@/views/Operations/SerialOverLan/SerialOverLanConsole'; +import ServerPowerOperations from '@/views/Operations/ServerPowerOperations'; import SslCertificates from '@/views/AccessControl/SslCertificates'; import i18n from '@/i18n'; @@ -176,7 +175,7 @@ const routes = [ }, }, { - path: '/configuration/firmware', + path: '/operations/firmware', name: 'firmware', component: Firmware, meta: { @@ -184,7 +183,7 @@ const routes = [ }, }, { - path: '/control/manage-power-usage', + path: '/operations/manage-power-usage', name: 'manage-power-usage', component: ManagePowerUsage, meta: { @@ -192,7 +191,7 @@ const routes = [ }, }, { - path: '/control/power-restore-policy', + path: '/operations/power-restore-policy', name: 'power-restore-policy', component: PowerRestorePolicy, meta: { @@ -216,7 +215,7 @@ const routes = [ }, }, { - path: '/control/factory-reset', + path: '/operations/factory-reset', name: 'factory-reset', component: FactoryReset, meta: { @@ -224,7 +223,7 @@ const routes = [ }, }, { - path: '/control/reboot-bmc', + path: '/operations/reboot-bmc', name: 'reboot-bmc', component: RebootBmc, meta: { @@ -232,15 +231,7 @@ const routes = [ }, }, { - path: '/control/server-led', - name: 'server-led', - component: ServerLed, - meta: { - title: i18n.t('appPageTitle.serverLed'), - }, - }, - { - path: '/control/serial-over-lan', + path: '/operations/serial-over-lan', name: 'serial-over-lan', component: SerialOverLan, meta: { @@ -248,7 +239,7 @@ const routes = [ }, }, { - path: '/control/server-power-operations', + path: '/operations/server-power-operations', name: 'server-power-operations', component: ServerPowerOperations, meta: { diff --git a/src/env/router/intel.js b/src/env/router/intel.js index 53ae5d44..04fc0eff 100644 --- a/src/env/router/intel.js +++ b/src/env/router/intel.js @@ -4,27 +4,26 @@ import ClientSessions from '@/views/AccessControl/ClientSessions'; import ConsoleLayout from '@/layouts/ConsoleLayout.vue'; import DateTimeSettings from '@/views/Configuration/DateTimeSettings'; import EventLogs from '@/views/Logs/EventLogs'; -import Firmware from '@/views/Configuration/Firmware'; +import Firmware from '@/views/Operations/Firmware'; import Inventory from '@/views/HardwareStatus/Inventory'; -import Kvm from '@/views/Control/Kvm'; -import KvmConsole from '@/views/Control/Kvm/KvmConsole'; +import Kvm from '@/views/Operations/Kvm'; +import KvmConsole from '@/views/Operations/Kvm/KvmConsole'; import LocalUserManagement from '@/views/AccessControl/LocalUserManagement'; import Login from '@/views/Login'; import LoginLayout from '@/layouts/LoginLayout'; -import ManagePowerUsage from '@/views/Control/ManagePowerUsage'; +import ManagePowerUsage from '@/views/Operations/ManagePowerUsage'; import NetworkSettings from '@/views/Configuration/NetworkSettings'; import Overview from '@/views/Overview'; import PageNotFound from '@/views/PageNotFound'; import ProfileSettings from '@/views/ProfileSettings'; -import RebootBmc from '@/views/Control/RebootBmc'; +import RebootBmc from '@/views/Operations/RebootBmc'; import SecuritySettings from '@/views/Configuration/SecuritySettings'; import Sensors from '@/views/HardwareStatus/Sensors'; -import SerialOverLan from '@/views/Control/SerialOverLan'; -import SerialOverLanConsole from '@/views/Control/SerialOverLan/SerialOverLanConsole'; -import ServerLed from '@/views/Control/ServerLed'; -import ServerPowerOperations from '@/views/Control/ServerPowerOperations'; +import SerialOverLan from '@/views/Operations/SerialOverLan'; +import SerialOverLanConsole from '@/views/Operations/SerialOverLan/SerialOverLanConsole'; +import ServerPowerOperations from '@/views/Operations/ServerPowerOperations'; import SslCertificates from '@/views/AccessControl/SslCertificates'; -import VirtualMedia from '@/views/Control/VirtualMedia'; +import VirtualMedia from '@/views/Operations/VirtualMedia'; import i18n from '@/i18n'; const routes = [ @@ -156,23 +155,23 @@ const routes = [ }, }, { - path: '/configuration/firmware', - name: 'firmware', - component: Firmware, + path: '/operations/kvm', + name: 'kvm', + component: Kvm, meta: { - title: i18n.t('appPageTitle.firmware'), + title: i18n.t('appPageTitle.kvm'), }, }, { - path: '/control/kvm', - name: 'kvm', - component: Kvm, + path: '/operations/firmware', + name: 'firmware', + component: Firmware, meta: { - title: i18n.t('appPageTitle.kvm'), + title: i18n.t('appPageTitle.firmware'), }, }, { - path: '/control/manage-power-usage', + path: '/operations/manage-power-usage', name: 'manage-power-usage', component: ManagePowerUsage, meta: { @@ -196,7 +195,7 @@ const routes = [ }, }, { - path: '/control/reboot-bmc', + path: '/operations/reboot-bmc', name: 'reboot-bmc', component: RebootBmc, meta: { @@ -204,15 +203,7 @@ const routes = [ }, }, { - path: '/control/server-led', - name: 'server-led', - component: ServerLed, - meta: { - title: i18n.t('appPageTitle.serverLed'), - }, - }, - { - path: '/control/serial-over-lan', + path: '/operations/serial-over-lan', name: 'serial-over-lan', component: SerialOverLan, meta: { @@ -220,7 +211,7 @@ const routes = [ }, }, { - path: '/control/server-power-operations', + path: '/operations/server-power-operations', name: 'server-power-operations', component: ServerPowerOperations, meta: { @@ -228,7 +219,7 @@ const routes = [ }, }, { - path: '/control/virtual-media', + path: '/operations/virtual-media', name: 'virtual-media', component: VirtualMedia, meta: { diff --git a/src/locales/en-US.json b/src/locales/en-US.json index ee1f6146..856edb8b 100644 --- a/src/locales/en-US.json +++ b/src/locales/en-US.json @@ -101,7 +101,7 @@ "accessControl": "Access control", "clientSessions": "@:appPageTitle.clientSessions", "configuration": "Configuration", - "control": "Control", + "operations": "Operations", "dateTimeSettings": "@:appPageTitle.dateTimeSettings", "dumps": "@:appPageTitle.dumps", "eventLogs": "@:appPageTitle.eventLogs", @@ -123,7 +123,6 @@ "securitySettings": "@:appPageTitle.securitySettings", "sensors": "@:appPageTitle.sensors", "serialOverLan": "SOL console", - "serverLed": "@:appPageTitle.serverLed", "serverPowerOperations": "@:appPageTitle.serverPowerOperations", "snmpSettings": "SNMP settings", "sslCertificates": "@:appPageTitle.sslCertificates", @@ -153,7 +152,6 @@ "securitySettings": "Security settings", "sensors": "Sensors", "serialOverLan": "Serial over LAN (SOL) console", - "serverLed": "Server LED", "serverPowerOperations": "Server power operations", "sslCertificates": "SSL certificates", "virtualMedia": "Virtual media" @@ -734,16 +732,6 @@ "status": "Status", "subTitle": "SOL console redirects the server's serial port output to this window." }, - "pageServerLed": { - "serverLedSubTitle": "Server indicator LED", - "serverLedTitle": "LED light control", - "toast": { - "errorServerLedOff": "Error turning LED off.", - "errorServerLedOn": "Error turning LED on.", - "successServerLedOff": "Server LED successfully turned off.", - "successServerLedOn": "Server LED successfully turned on." - } - }, "pageServerPowerOperations": { "currentStatus": "Current status", "serverBootSettings": "Boot settings", diff --git a/src/router/routes.js b/src/router/routes.js index 3cf10c54..f8461f39 100644 --- a/src/router/routes.js +++ b/src/router/routes.js @@ -3,32 +3,31 @@ import ChangePassword from '@/views/ChangePassword'; import ConsoleLayout from '@/layouts/ConsoleLayout.vue'; import DateTimeSettings from '@/views/Configuration/DateTimeSettings'; import EventLogs from '@/views/Logs/EventLogs'; -import FactoryReset from '@/views/Control/FactoryReset'; -import Firmware from '@/views/Configuration/Firmware'; +import FactoryReset from '@/views/Operations/FactoryReset'; +import Firmware from '@/views/Operations/Firmware'; import Inventory from '@/views/HardwareStatus/Inventory'; -import Kvm from '@/views/Control/Kvm'; -import KvmConsole from '@/views/Control/Kvm/KvmConsole'; +import Kvm from '@/views/Operations/Kvm'; +import KvmConsole from '@/views/Operations/Kvm/KvmConsole'; import ClientSessions from '../views/AccessControl/ClientSessions'; import Ldap from '@/views/AccessControl/Ldap'; import LocalUserManagement from '@/views/AccessControl/LocalUserManagement'; import Login from '@/views/Login'; import LoginLayout from '@/layouts/LoginLayout'; -import ManagePowerUsage from '@/views/Control/ManagePowerUsage'; +import ManagePowerUsage from '@/views/Operations/ManagePowerUsage'; import NetworkSettings from '@/views/Configuration/NetworkSettings'; import Overview from '@/views/Overview'; import PageNotFound from '@/views/PageNotFound'; import PostCodeLogs from '@/views/Logs/PostCodeLogs'; -import PowerRestorePolicy from '@/views/Control/PowerRestorePolicy'; +import PowerRestorePolicy from '@/views/Operations/PowerRestorePolicy'; import ProfileSettings from '@/views/ProfileSettings'; -import RebootBmc from '@/views/Control/RebootBmc'; +import RebootBmc from '@/views/Operations/RebootBmc'; import SecuritySettings from '@/views/Configuration/SecuritySettings'; import Sensors from '@/views/HardwareStatus/Sensors'; -import SerialOverLan from '@/views/Control/SerialOverLan'; -import SerialOverLanConsole from '@/views/Control/SerialOverLan/SerialOverLanConsole'; -import ServerLed from '@/views/Control/ServerLed'; -import ServerPowerOperations from '@/views/Control/ServerPowerOperations'; +import SerialOverLan from '@/views/Operations/SerialOverLan'; +import SerialOverLanConsole from '@/views/Operations/SerialOverLan/SerialOverLanConsole'; +import ServerPowerOperations from '@/views/Operations/ServerPowerOperations'; import SslCertificates from '@/views/AccessControl/SslCertificates'; -import VirtualMedia from '@/views/Control/VirtualMedia'; +import VirtualMedia from '@/views/Operations/VirtualMedia'; import i18n from '@/i18n'; const routes = [ @@ -175,14 +174,6 @@ const routes = [ title: i18n.t('appPageTitle.dateTimeSettings'), }, }, - { - path: '/configuration/firmware', - name: 'firmware', - component: Firmware, - meta: { - title: i18n.t('appPageTitle.firmware'), - }, - }, { path: '/configuration/security-settings', name: 'security-settings', @@ -192,7 +183,7 @@ const routes = [ }, }, { - path: '/control/factory-reset', + path: '/operations/factory-reset', name: 'factory-reset', component: FactoryReset, meta: { @@ -200,7 +191,7 @@ const routes = [ }, }, { - path: '/control/kvm', + path: '/operations/kvm', name: 'kvm', component: Kvm, meta: { @@ -208,7 +199,15 @@ const routes = [ }, }, { - path: '/control/manage-power-usage', + path: '/operations/firmware', + name: 'firmware', + component: Firmware, + meta: { + title: i18n.t('appPageTitle.firmware'), + }, + }, + { + path: '/operations/manage-power-usage', name: 'manage-power-usage', component: ManagePowerUsage, meta: { @@ -216,7 +215,7 @@ const routes = [ }, }, { - path: '/control/power-restore-policy', + path: '/operations/power-restore-policy', name: 'power-restore-policy', component: PowerRestorePolicy, meta: { @@ -232,7 +231,7 @@ const routes = [ }, }, { - path: '/control/reboot-bmc', + path: '/operations/reboot-bmc', name: 'reboot-bmc', component: RebootBmc, meta: { @@ -240,15 +239,7 @@ const routes = [ }, }, { - path: '/control/server-led', - name: 'server-led', - component: ServerLed, - meta: { - title: i18n.t('appPageTitle.serverLed'), - }, - }, - { - path: '/control/serial-over-lan', + path: '/operations/serial-over-lan', name: 'serial-over-lan', component: SerialOverLan, meta: { @@ -256,7 +247,7 @@ const routes = [ }, }, { - path: '/control/server-power-operations', + path: '/operations/server-power-operations', name: 'server-power-operations', component: ServerPowerOperations, meta: { @@ -264,7 +255,7 @@ const routes = [ }, }, { - path: '/control/virtual-media', + path: '/operations/virtual-media', name: 'virtual-media', component: VirtualMedia, meta: { diff --git a/src/store/index.js b/src/store/index.js index 3ea4c5ab..fcfac59f 100644 --- a/src/store/index.js +++ b/src/store/index.js @@ -7,11 +7,11 @@ import ClientSessions from './modules/AccessControl/ClientSessionsStore'; import LdapStore from './modules/AccessControl/LdapStore'; import LocalUserManagementStore from './modules/AccessControl/LocalUserMangementStore'; import SslCertificatesStore from './modules/AccessControl/SslCertificatesStore'; -import FirmwareStore from './modules/Configuration/FirmwareStore'; -import BootSettingsStore from './modules/Control/BootSettingsStore'; -import ControlStore from './modules/Control/ControlStore'; -import PowerControlStore from './modules/Control/PowerControlStore'; -import PowerPolicyStore from './modules/Control/PowerPolicyStore'; +import FirmwareStore from './modules/Operations/FirmwareStore'; +import BootSettingsStore from './modules/Operations/BootSettingsStore'; +import ControlStore from './modules/Operations/ControlStore'; +import PowerControlStore from './modules/Operations/PowerControlStore'; +import PowerPolicyStore from './modules/Operations/PowerPolicyStore'; import NetworkSettingStore from './modules/Configuration/NetworkSettingsStore'; import EventLogStore from './modules/Logs/EventLogStore'; import SensorsStore from './modules/HardwareStatus/SensorsStore'; @@ -25,11 +25,11 @@ import BmcStore from './modules/HardwareStatus/BmcStore'; import ProcessorStore from './modules/HardwareStatus/ProcessorStore'; import PostCodeLogsStore from './modules/Logs/PostCodeLogsStore'; import SecuritySettingsStore from './modules/Configuration/SecuritySettingsStore'; -import FactoryResetStore from './modules/Control/FactoryResetStore'; +import FactoryResetStore from './modules/Operations/FactoryResetStore'; import WebSocketPlugin from './plugins/WebSocketPlugin'; import DateTimeStore from './modules/Configuration/DateTimeSettingsStore'; -import VirtualMediaStore from './modules/Control/VirtualMediaStore'; +import VirtualMediaStore from './modules/Operations/VirtualMediaStore'; Vue.use(Vuex); diff --git a/src/store/modules/Configuration/FirmwareStore.js b/src/store/modules/Configuration/FirmwareStore.js deleted file mode 100644 index c6639ff7..00000000 --- a/src/store/modules/Configuration/FirmwareStore.js +++ /dev/null @@ -1,191 +0,0 @@ -import api from '@/store/api'; -import i18n from '@/i18n'; - -const FirmwareStore = { - 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 - ); - }, - }, - 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.errorUpdateFirmware')); - }); - }, - 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.errorUpdateFirmware')); - }); - }, - async switchBmcFirmwareAndReboot({ getters }) { - const backupLocation = getters.backupBmcFirmware.location; - const data = { - Links: { - ActiveSoftwareImage: { - '@odata.id': backupLocation, - }, - }, - }; - return await api - .patch('/redfish/v1/Managers/bmc', data) - .catch((error) => { - console.log(error); - throw new Error(i18n.t('pageFirmware.toast.errorSwitchImages')); - }); - }, - }, -}; - -export default FirmwareStore; diff --git a/src/store/modules/Control/BootSettingsStore.js b/src/store/modules/Control/BootSettingsStore.js deleted file mode 100644 index 7a36dd84..00000000 --- a/src/store/modules/Control/BootSettingsStore.js +++ /dev/null @@ -1,136 +0,0 @@ -import api from '@/store/api'; -import i18n from '@/i18n'; - -const BootSettingsStore = { - namespaced: true, - state: { - bootSourceOptions: [], - bootSource: null, - overrideEnabled: null, - tpmEnabled: null, - }, - getters: { - bootSourceOptions: (state) => state.bootSourceOptions, - bootSource: (state) => state.bootSource, - overrideEnabled: (state) => state.overrideEnabled, - tpmEnabled: (state) => state.tpmEnabled, - }, - mutations: { - setBootSourceOptions: (state, bootSourceOptions) => - (state.bootSourceOptions = bootSourceOptions), - setBootSource: (state, bootSource) => (state.bootSource = bootSource), - setOverrideEnabled: (state, overrideEnabled) => { - if (overrideEnabled === 'Once') { - state.overrideEnabled = true; - } else { - // 'Continuous' or 'Disabled' - state.overrideEnabled = false; - } - }, - setTpmPolicy: (state, tpmEnabled) => (state.tpmEnabled = tpmEnabled), - }, - actions: { - async getBootSettings({ commit }) { - return await api - .get('/redfish/v1/Systems/system') - .then(({ data: { Boot } }) => { - commit( - 'setBootSourceOptions', - Boot['BootSourceOverrideTarget@Redfish.AllowableValues'] - ); - commit('setOverrideEnabled', Boot.BootSourceOverrideEnabled); - commit('setBootSource', Boot.BootSourceOverrideTarget); - }) - .catch((error) => console.log(error)); - }, - saveBootSettings({ commit, dispatch }, { bootSource, overrideEnabled }) { - const data = { Boot: {} }; - data.Boot.BootSourceOverrideTarget = bootSource; - - if (overrideEnabled) { - data.Boot.BootSourceOverrideEnabled = 'Once'; - } else if (bootSource === 'None') { - data.Boot.BootSourceOverrideEnabled = 'Disabled'; - } else { - data.Boot.BootSourceOverrideEnabled = 'Continuous'; - } - - return api - .patch('/redfish/v1/Systems/system', data) - .then((response) => { - // If request success, commit the values - commit('setBootSource', data.Boot.BootSourceOverrideTarget); - commit('setOverrideEnabled', data.Boot.BootSourceOverrideEnabled); - return response; - }) - .catch((error) => { - console.log(error); - // If request error, GET saved options - dispatch('getBootSettings'); - return error; - }); - }, - async getTpmPolicy({ commit }) { - // TODO: switch to Redfish when available - return await api - .get('/xyz/openbmc_project/control/host0/TPMEnable') - .then(({ data: { data: { TPMEnable } } }) => - commit('setTpmPolicy', TPMEnable) - ) - .catch((error) => console.log(error)); - }, - saveTpmPolicy({ commit, dispatch }, tpmEnabled) { - // TODO: switch to Redfish when available - const data = { data: tpmEnabled }; - return api - .put( - '/xyz/openbmc_project/control/host0/TPMEnable/attr/TPMEnable', - data - ) - .then((response) => { - // If request success, commit the values - commit('setTpmPolicy', tpmEnabled); - return response; - }) - .catch((error) => { - console.log(error); - // If request error, GET saved policy - dispatch('getTpmPolicy'); - return error; - }); - }, - async saveSettings( - { dispatch }, - { bootSource, overrideEnabled, tpmEnabled } - ) { - const promises = []; - - if (bootSource !== null || overrideEnabled !== null) { - promises.push( - dispatch('saveBootSettings', { bootSource, overrideEnabled }) - ); - } - if (tpmEnabled !== null) { - promises.push(dispatch('saveTpmPolicy', tpmEnabled)); - } - - return await api.all(promises).then( - api.spread((...responses) => { - let message = i18n.t( - 'pageServerPowerOperations.toast.successSaveSettings' - ); - responses.forEach((response) => { - if (response instanceof Error) { - throw new Error( - i18n.t('pageServerPowerOperations.toast.errorSaveSettings') - ); - } - }); - return message; - }) - ); - }, - }, -}; - -export default BootSettingsStore; diff --git a/src/store/modules/Control/ControlStore.js b/src/store/modules/Control/ControlStore.js deleted file mode 100644 index 9b8bf73d..00000000 --- a/src/store/modules/Control/ControlStore.js +++ /dev/null @@ -1,132 +0,0 @@ -import api from '@/store/api'; -import i18n from '@/i18n'; - -/** - * Watch for serverStatus changes in GlobalStore module - * to set isOperationInProgress state - * Stop watching status changes and resolve Promise when - * serverStatus value matches passed argument or after 5 minutes - * @param {string} serverStatus - * @returns {Promise} - */ -const checkForServerStatus = function (serverStatus) { - return new Promise((resolve) => { - const timer = setTimeout(() => { - resolve(); - unwatch(); - }, 300000 /*5mins*/); - const unwatch = this.watch( - (state) => state.global.serverStatus, - (value) => { - if (value === serverStatus) { - resolve(); - unwatch(); - clearTimeout(timer); - } - } - ); - }); -}; - -const ControlStore = { - namespaced: true, - state: { - isOperationInProgress: false, - lastPowerOperationTime: null, - lastBmcRebootTime: null, - }, - getters: { - isOperationInProgress: (state) => state.isOperationInProgress, - lastPowerOperationTime: (state) => state.lastPowerOperationTime, - lastBmcRebootTime: (state) => state.lastBmcRebootTime, - }, - mutations: { - setOperationInProgress: (state, inProgress) => - (state.isOperationInProgress = inProgress), - setLastPowerOperationTime: (state, lastPowerOperationTime) => - (state.lastPowerOperationTime = lastPowerOperationTime), - setLastBmcRebootTime: (state, lastBmcRebootTime) => - (state.lastBmcRebootTime = lastBmcRebootTime), - }, - actions: { - async getLastPowerOperationTime({ commit }) { - return await api - .get('/redfish/v1/Systems/system') - .then((response) => { - const lastReset = response.data.LastResetTime; - if (lastReset) { - const lastPowerOperationTime = new Date(lastReset); - commit('setLastPowerOperationTime', lastPowerOperationTime); - } - }) - .catch((error) => console.log(error)); - }, - getLastBmcRebootTime({ commit }) { - return api - .get('/redfish/v1/Managers/bmc') - .then((response) => { - const lastBmcReset = response.data.LastResetTime; - const lastBmcRebootTime = new Date(lastBmcReset); - commit('setLastBmcRebootTime', lastBmcRebootTime); - }) - .catch((error) => console.log(error)); - }, - async rebootBmc({ dispatch }) { - const data = { ResetType: 'GracefulRestart' }; - return await api - .post('/redfish/v1/Managers/bmc/Actions/Manager.Reset', data) - .then(() => dispatch('getLastBmcRebootTime')) - .then(() => i18n.t('pageRebootBmc.toast.successRebootStart')) - .catch((error) => { - console.log(error); - throw new Error(i18n.t('pageRebootBmc.toast.errorRebootStart')); - }); - }, - async serverPowerOn({ dispatch, commit }) { - const data = { ResetType: 'On' }; - dispatch('serverPowerChange', data); - await checkForServerStatus.bind(this, 'on')(); - commit('setOperationInProgress', false); - dispatch('getLastPowerOperationTime'); - }, - async serverSoftReboot({ dispatch, commit }) { - const data = { ResetType: 'GracefulRestart' }; - dispatch('serverPowerChange', data); - await checkForServerStatus.bind(this, 'on')(); - commit('setOperationInProgress', false); - dispatch('getLastPowerOperationTime'); - }, - async serverHardReboot({ dispatch, commit }) { - const data = { ResetType: 'ForceRestart' }; - dispatch('serverPowerChange', data); - await checkForServerStatus.bind(this, 'on')(); - commit('setOperationInProgress', false); - dispatch('getLastPowerOperationTime'); - }, - async serverSoftPowerOff({ dispatch, commit }) { - const data = { ResetType: 'GracefulShutdown' }; - dispatch('serverPowerChange', data); - await checkForServerStatus.bind(this, 'off')(); - commit('setOperationInProgress', false); - dispatch('getLastPowerOperationTime'); - }, - async serverHardPowerOff({ dispatch, commit }) { - const data = { ResetType: 'ForceOff' }; - dispatch('serverPowerChange', data); - await checkForServerStatus.bind(this, 'off')(); - commit('setOperationInProgress', false); - dispatch('getLastPowerOperationTime'); - }, - serverPowerChange({ commit }, data) { - commit('setOperationInProgress', true); - api - .post('/redfish/v1/Systems/system/Actions/ComputerSystem.Reset', data) - .catch((error) => { - console.log(error); - commit('setOperationInProgress', false); - }); - }, - }, -}; - -export default ControlStore; diff --git a/src/store/modules/Control/FactoryResetStore.js b/src/store/modules/Control/FactoryResetStore.js deleted file mode 100644 index 8118cf7f..00000000 --- a/src/store/modules/Control/FactoryResetStore.js +++ /dev/null @@ -1,32 +0,0 @@ -import api from '@/store/api'; -import i18n from '@/i18n'; - -const FactoryResetStore = { - namespaced: true, - actions: { - async resetToDefaults() { - return await api - .post('/redfish/v1/Managers/bmc/Actions/Manager.ResetToDefaults', { - ResetToDefaultsType: 'ResetAll', - }) - .then(() => i18n.t('pageFactoryReset.toast.resetToDefaultsSuccess')) - .catch((error) => { - console.log('Factory Reset: ', error); - throw new Error( - i18n.t('pageFactoryReset.toast.resetToDefaultsError') - ); - }); - }, - async resetBios() { - return await api - .post('/redfish/v1/Systems/system/Bios/Actions/Bios.ResetBios') - .then(() => i18n.t('pageFactoryReset.toast.resetBiosSuccess')) - .catch((error) => { - console.log('Factory Reset: ', error); - throw new Error(i18n.t('pageFactoryReset.toast.resetBiosError')); - }); - }, - }, -}; - -export default FactoryResetStore; diff --git a/src/store/modules/Control/PowerControlStore.js b/src/store/modules/Control/PowerControlStore.js deleted file mode 100644 index 9dbddf05..00000000 --- a/src/store/modules/Control/PowerControlStore.js +++ /dev/null @@ -1,60 +0,0 @@ -import api from '@/store/api'; -import i18n from '@/i18n'; - -const PowerControlStore = { - namespaced: true, - state: { - powerCapValue: null, - powerConsumptionValue: null, - }, - getters: { - powerCapValue: (state) => state.powerCapValue, - powerConsumptionValue: (state) => state.powerConsumptionValue, - }, - mutations: { - setPowerCapValue: (state, powerCapValue) => - (state.powerCapValue = powerCapValue), - setPowerConsumptionValue: (state, powerConsumptionValue) => - (state.powerConsumptionValue = powerConsumptionValue), - }, - actions: { - setPowerCapUpdatedValue({ commit }, value) { - commit('setPowerCapValue', value); - }, - async getPowerControl({ commit }) { - return await api - .get('/redfish/v1/Chassis/chassis/Power') - .then((response) => { - const powerControl = response.data.PowerControl; - const powerCap = powerControl[0].PowerLimit.LimitInWatts; - // If system is powered off, power consumption does not exist in the PowerControl - const powerConsumption = powerControl[0].PowerConsumedWatts || null; - - commit('setPowerCapValue', powerCap); - commit('setPowerConsumptionValue', powerConsumption); - }) - .catch((error) => { - console.log('Power control', error); - }); - }, - async setPowerControl(_, powerCapValue) { - const data = { - PowerControl: [{ PowerLimit: { LimitInWatts: powerCapValue } }], - }; - - return await api - .patch('/redfish/v1/Chassis/chassis/Power', data) - .then(() => - i18n.t('pageServerPowerOperations.toast.successSaveSettings') - ) - .catch((error) => { - console.log(error); - throw new Error( - i18n.t('pageServerPowerOperations.toast.errorSaveSettings') - ); - }); - }, - }, -}; - -export default PowerControlStore; diff --git a/src/store/modules/Control/PowerPolicyStore.js b/src/store/modules/Control/PowerPolicyStore.js deleted file mode 100644 index 4e76cdfe..00000000 --- a/src/store/modules/Control/PowerPolicyStore.js +++ /dev/null @@ -1,72 +0,0 @@ -import api from '@/store/api'; -import i18n from '@/i18n'; - -const PowerControlStore = { - namespaced: true, - state: { - powerRestoreCurrentPolicy: null, - powerRestorePolicies: [], - }, - getters: { - powerRestoreCurrentPolicy: (state) => state.powerRestoreCurrentPolicy, - powerRestorePolicies: (state) => state.powerRestorePolicies, - }, - mutations: { - setPowerRestoreCurrentPolicy: (state, powerRestoreCurrentPolicy) => - (state.powerRestoreCurrentPolicy = powerRestoreCurrentPolicy), - setPowerRestorePolicies: (state, powerRestorePolicies) => - (state.powerRestorePolicies = powerRestorePolicies), - }, - actions: { - async getPowerRestorePolicies({ commit }) { - return await api - .get('/redfish/v1/JsonSchemas/ComputerSystem/ComputerSystem.json') - .then( - ({ - data: { - definitions: { PowerRestorePolicyTypes = {} }, - }, - }) => { - let powerPoliciesData = PowerRestorePolicyTypes.enum.map( - (powerState) => { - let desc = `${i18n.t( - `pagePowerRestorePolicy.policies.${powerState}` - )} - ${PowerRestorePolicyTypes.enumDescriptions[powerState]}`; - return { - state: powerState, - desc, - }; - } - ); - commit('setPowerRestorePolicies', powerPoliciesData); - } - ); - }, - async getPowerRestoreCurrentPolicy({ commit }) { - api - .get('/redfish/v1/Systems/system') - .then(({ data: { PowerRestorePolicy } }) => { - commit('setPowerRestoreCurrentPolicy', PowerRestorePolicy); - }) - .catch((error) => console.log(error)); - }, - async setPowerRestorePolicy({ commit }, powerPolicy) { - const data = { PowerRestorePolicy: powerPolicy }; - - return await api - .patch('/redfish/v1/Systems/system', data) - .then(() => - commit('setPowerRestoreCurrentPolicy', data.PowerRestorePolicy) - ) - .then(() => i18n.t('pagePowerRestorePolicy.toast.successSaveSettings')) - .catch((error) => { - console.log(error); - throw new Error( - i18n.t('pagePowerRestorePolicy.toast.errorSaveSettings') - ); - }); - }, - }, -}; - -export default PowerControlStore; diff --git a/src/store/modules/Control/VirtualMediaStore.js b/src/store/modules/Control/VirtualMediaStore.js deleted file mode 100644 index 7c183b0e..00000000 --- a/src/store/modules/Control/VirtualMediaStore.js +++ /dev/null @@ -1,105 +0,0 @@ -import api from '@/store/api'; -import i18n from '@/i18n'; - -const VirtualMediaStore = { - namespaced: true, - state: { - proxyDevices: [], - legacyDevices: [], - connections: [], - }, - getters: { - proxyDevices: (state) => state.proxyDevices, - legacyDevices: (state) => state.legacyDevices, - }, - mutations: { - setProxyDevicesData: (state, deviceData) => - (state.proxyDevices = deviceData), - setLegacyDevicesData: (state, deviceData) => - (state.legacyDevices = deviceData), - }, - actions: { - async getData({ commit }) { - const virtualMediaListEnabled = - process.env.VUE_APP_VIRTUAL_MEDIA_LIST_ENABLED === 'true' - ? true - : false; - if (!virtualMediaListEnabled) { - const device = { - id: i18n.t('pageVirtualMedia.defaultDeviceName'), - websocket: '/vm/0/0', - file: null, - transferProtocolType: 'OEM', - isActive: false, - }; - commit('setProxyDevicesData', [device]); - return; - } - - return await api - .get('/redfish/v1/Managers/bmc/VirtualMedia') - .then((response) => - response.data.Members.map((virtualMedia) => virtualMedia['@odata.id']) - ) - .then((devices) => api.all(devices.map((device) => api.get(device)))) - .then((devices) => { - const deviceData = devices.map((device) => { - const isActive = device.data?.Inserted === true ? true : false; - return { - id: device.data?.Id, - transferProtocolType: device.data?.TransferProtocolType, - websocket: device.data?.Oem?.OpenBMC?.WebSocketEndpoint, - isActive: isActive, - }; - }); - const proxyDevices = deviceData - .filter((d) => d.transferProtocolType === 'OEM') - .map((device) => { - return { - ...device, - file: null, - }; - }); - const legacyDevices = deviceData - .filter((d) => !d.transferProtocolType) - .map((device) => { - return { - ...device, - serverUri: '', - username: '', - password: '', - isRW: false, - }; - }); - commit('setProxyDevicesData', proxyDevices); - commit('setLegacyDevicesData', legacyDevices); - }) - .catch((error) => { - console.log('Virtual Media:', error); - }); - }, - async mountImage(_, { id, data }) { - return await api - .post( - `/redfish/v1/Managers/bmc/VirtualMedia/${id}/Actions/VirtualMedia.InsertMedia`, - data - ) - .catch((error) => { - console.log('Mount image:', error); - throw new Error(); - }); - }, - async unmountImage(_, id) { - return await api - .post( - `/redfish/v1/Managers/bmc/VirtualMedia/${id}/Actions/VirtualMedia.EjectMedia` - ) - .catch((error) => { - console.log('Unmount image:', error); - throw new Error(); - }); - }, - }, -}; - -export default VirtualMediaStore; diff --git a/src/store/modules/HardwareStatus/ServerLedStore.js b/src/store/modules/HardwareStatus/ServerLedStore.js index a8903e2a..028a6f70 100644 --- a/src/store/modules/HardwareStatus/ServerLedStore.js +++ b/src/store/modules/HardwareStatus/ServerLedStore.js @@ -32,20 +32,17 @@ const ServerLedStore = { .patch('/redfish/v1/Systems/system', { LocationIndicatorActive: payload, }) - .then(() => { - if (payload) { - return i18n.t('pageServerLed.toast.successServerLedOn'); - } else { - return i18n.t('pageServerLed.toast.successServerLedOff'); - } - }) .catch((error) => { console.log(error); commit('setIndicatorLedActiveState', !payload); if (payload) { - throw new Error(i18n.t('pageServerLed.toast.errorServerLedOn')); + throw new Error( + i18n.t('pageInventory.toast.errorEnableIdentifyLed') + ); } else { - throw new Error(i18n.t('pageServerLed.toast.errorServerLedOff')); + throw new Error( + i18n.t('pageInventory.toast.errorDisableIdentifyLed') + ); } }); }, diff --git a/src/store/modules/Operations/BootSettingsStore.js b/src/store/modules/Operations/BootSettingsStore.js new file mode 100644 index 00000000..7a36dd84 --- /dev/null +++ b/src/store/modules/Operations/BootSettingsStore.js @@ -0,0 +1,136 @@ +import api from '@/store/api'; +import i18n from '@/i18n'; + +const BootSettingsStore = { + namespaced: true, + state: { + bootSourceOptions: [], + bootSource: null, + overrideEnabled: null, + tpmEnabled: null, + }, + getters: { + bootSourceOptions: (state) => state.bootSourceOptions, + bootSource: (state) => state.bootSource, + overrideEnabled: (state) => state.overrideEnabled, + tpmEnabled: (state) => state.tpmEnabled, + }, + mutations: { + setBootSourceOptions: (state, bootSourceOptions) => + (state.bootSourceOptions = bootSourceOptions), + setBootSource: (state, bootSource) => (state.bootSource = bootSource), + setOverrideEnabled: (state, overrideEnabled) => { + if (overrideEnabled === 'Once') { + state.overrideEnabled = true; + } else { + // 'Continuous' or 'Disabled' + state.overrideEnabled = false; + } + }, + setTpmPolicy: (state, tpmEnabled) => (state.tpmEnabled = tpmEnabled), + }, + actions: { + async getBootSettings({ commit }) { + return await api + .get('/redfish/v1/Systems/system') + .then(({ data: { Boot } }) => { + commit( + 'setBootSourceOptions', + Boot['BootSourceOverrideTarget@Redfish.AllowableValues'] + ); + commit('setOverrideEnabled', Boot.BootSourceOverrideEnabled); + commit('setBootSource', Boot.BootSourceOverrideTarget); + }) + .catch((error) => console.log(error)); + }, + saveBootSettings({ commit, dispatch }, { bootSource, overrideEnabled }) { + const data = { Boot: {} }; + data.Boot.BootSourceOverrideTarget = bootSource; + + if (overrideEnabled) { + data.Boot.BootSourceOverrideEnabled = 'Once'; + } else if (bootSource === 'None') { + data.Boot.BootSourceOverrideEnabled = 'Disabled'; + } else { + data.Boot.BootSourceOverrideEnabled = 'Continuous'; + } + + return api + .patch('/redfish/v1/Systems/system', data) + .then((response) => { + // If request success, commit the values + commit('setBootSource', data.Boot.BootSourceOverrideTarget); + commit('setOverrideEnabled', data.Boot.BootSourceOverrideEnabled); + return response; + }) + .catch((error) => { + console.log(error); + // If request error, GET saved options + dispatch('getBootSettings'); + return error; + }); + }, + async getTpmPolicy({ commit }) { + // TODO: switch to Redfish when available + return await api + .get('/xyz/openbmc_project/control/host0/TPMEnable') + .then(({ data: { data: { TPMEnable } } }) => + commit('setTpmPolicy', TPMEnable) + ) + .catch((error) => console.log(error)); + }, + saveTpmPolicy({ commit, dispatch }, tpmEnabled) { + // TODO: switch to Redfish when available + const data = { data: tpmEnabled }; + return api + .put( + '/xyz/openbmc_project/control/host0/TPMEnable/attr/TPMEnable', + data + ) + .then((response) => { + // If request success, commit the values + commit('setTpmPolicy', tpmEnabled); + return response; + }) + .catch((error) => { + console.log(error); + // If request error, GET saved policy + dispatch('getTpmPolicy'); + return error; + }); + }, + async saveSettings( + { dispatch }, + { bootSource, overrideEnabled, tpmEnabled } + ) { + const promises = []; + + if (bootSource !== null || overrideEnabled !== null) { + promises.push( + dispatch('saveBootSettings', { bootSource, overrideEnabled }) + ); + } + if (tpmEnabled !== null) { + promises.push(dispatch('saveTpmPolicy', tpmEnabled)); + } + + return await api.all(promises).then( + api.spread((...responses) => { + let message = i18n.t( + 'pageServerPowerOperations.toast.successSaveSettings' + ); + responses.forEach((response) => { + if (response instanceof Error) { + throw new Error( + i18n.t('pageServerPowerOperations.toast.errorSaveSettings') + ); + } + }); + return message; + }) + ); + }, + }, +}; + +export default BootSettingsStore; diff --git a/src/store/modules/Operations/ControlStore.js b/src/store/modules/Operations/ControlStore.js new file mode 100644 index 00000000..9b8bf73d --- /dev/null +++ b/src/store/modules/Operations/ControlStore.js @@ -0,0 +1,132 @@ +import api from '@/store/api'; +import i18n from '@/i18n'; + +/** + * Watch for serverStatus changes in GlobalStore module + * to set isOperationInProgress state + * Stop watching status changes and resolve Promise when + * serverStatus value matches passed argument or after 5 minutes + * @param {string} serverStatus + * @returns {Promise} + */ +const checkForServerStatus = function (serverStatus) { + return new Promise((resolve) => { + const timer = setTimeout(() => { + resolve(); + unwatch(); + }, 300000 /*5mins*/); + const unwatch = this.watch( + (state) => state.global.serverStatus, + (value) => { + if (value === serverStatus) { + resolve(); + unwatch(); + clearTimeout(timer); + } + } + ); + }); +}; + +const ControlStore = { + namespaced: true, + state: { + isOperationInProgress: false, + lastPowerOperationTime: null, + lastBmcRebootTime: null, + }, + getters: { + isOperationInProgress: (state) => state.isOperationInProgress, + lastPowerOperationTime: (state) => state.lastPowerOperationTime, + lastBmcRebootTime: (state) => state.lastBmcRebootTime, + }, + mutations: { + setOperationInProgress: (state, inProgress) => + (state.isOperationInProgress = inProgress), + setLastPowerOperationTime: (state, lastPowerOperationTime) => + (state.lastPowerOperationTime = lastPowerOperationTime), + setLastBmcRebootTime: (state, lastBmcRebootTime) => + (state.lastBmcRebootTime = lastBmcRebootTime), + }, + actions: { + async getLastPowerOperationTime({ commit }) { + return await api + .get('/redfish/v1/Systems/system') + .then((response) => { + const lastReset = response.data.LastResetTime; + if (lastReset) { + const lastPowerOperationTime = new Date(lastReset); + commit('setLastPowerOperationTime', lastPowerOperationTime); + } + }) + .catch((error) => console.log(error)); + }, + getLastBmcRebootTime({ commit }) { + return api + .get('/redfish/v1/Managers/bmc') + .then((response) => { + const lastBmcReset = response.data.LastResetTime; + const lastBmcRebootTime = new Date(lastBmcReset); + commit('setLastBmcRebootTime', lastBmcRebootTime); + }) + .catch((error) => console.log(error)); + }, + async rebootBmc({ dispatch }) { + const data = { ResetType: 'GracefulRestart' }; + return await api + .post('/redfish/v1/Managers/bmc/Actions/Manager.Reset', data) + .then(() => dispatch('getLastBmcRebootTime')) + .then(() => i18n.t('pageRebootBmc.toast.successRebootStart')) + .catch((error) => { + console.log(error); + throw new Error(i18n.t('pageRebootBmc.toast.errorRebootStart')); + }); + }, + async serverPowerOn({ dispatch, commit }) { + const data = { ResetType: 'On' }; + dispatch('serverPowerChange', data); + await checkForServerStatus.bind(this, 'on')(); + commit('setOperationInProgress', false); + dispatch('getLastPowerOperationTime'); + }, + async serverSoftReboot({ dispatch, commit }) { + const data = { ResetType: 'GracefulRestart' }; + dispatch('serverPowerChange', data); + await checkForServerStatus.bind(this, 'on')(); + commit('setOperationInProgress', false); + dispatch('getLastPowerOperationTime'); + }, + async serverHardReboot({ dispatch, commit }) { + const data = { ResetType: 'ForceRestart' }; + dispatch('serverPowerChange', data); + await checkForServerStatus.bind(this, 'on')(); + commit('setOperationInProgress', false); + dispatch('getLastPowerOperationTime'); + }, + async serverSoftPowerOff({ dispatch, commit }) { + const data = { ResetType: 'GracefulShutdown' }; + dispatch('serverPowerChange', data); + await checkForServerStatus.bind(this, 'off')(); + commit('setOperationInProgress', false); + dispatch('getLastPowerOperationTime'); + }, + async serverHardPowerOff({ dispatch, commit }) { + const data = { ResetType: 'ForceOff' }; + dispatch('serverPowerChange', data); + await checkForServerStatus.bind(this, 'off')(); + commit('setOperationInProgress', false); + dispatch('getLastPowerOperationTime'); + }, + serverPowerChange({ commit }, data) { + commit('setOperationInProgress', true); + api + .post('/redfish/v1/Systems/system/Actions/ComputerSystem.Reset', data) + .catch((error) => { + console.log(error); + commit('setOperationInProgress', false); + }); + }, + }, +}; + +export default ControlStore; diff --git a/src/store/modules/Operations/FactoryResetStore.js b/src/store/modules/Operations/FactoryResetStore.js new file mode 100644 index 00000000..8118cf7f --- /dev/null +++ b/src/store/modules/Operations/FactoryResetStore.js @@ -0,0 +1,32 @@ +import api from '@/store/api'; +import i18n from '@/i18n'; + +const FactoryResetStore = { + namespaced: true, + actions: { + async resetToDefaults() { + return await api + .post('/redfish/v1/Managers/bmc/Actions/Manager.ResetToDefaults', { + ResetToDefaultsType: 'ResetAll', + }) + .then(() => i18n.t('pageFactoryReset.toast.resetToDefaultsSuccess')) + .catch((error) => { + console.log('Factory Reset: ', error); + throw new Error( + i18n.t('pageFactoryReset.toast.resetToDefaultsError') + ); + }); + }, + async resetBios() { + return await api + .post('/redfish/v1/Systems/system/Bios/Actions/Bios.ResetBios') + .then(() => i18n.t('pageFactoryReset.toast.resetBiosSuccess')) + .catch((error) => { + console.log('Factory Reset: ', error); + throw new Error(i18n.t('pageFactoryReset.toast.resetBiosError')); + }); + }, + }, +}; + +export default FactoryResetStore; diff --git a/src/store/modules/Operations/FirmwareStore.js b/src/store/modules/Operations/FirmwareStore.js new file mode 100644 index 00000000..c6639ff7 --- /dev/null +++ b/src/store/modules/Operations/FirmwareStore.js @@ -0,0 +1,191 @@ +import api from '@/store/api'; +import i18n from '@/i18n'; + +const FirmwareStore = { + 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 + ); + }, + }, + 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.errorUpdateFirmware')); + }); + }, + 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.errorUpdateFirmware')); + }); + }, + async switchBmcFirmwareAndReboot({ getters }) { + const backupLocation = getters.backupBmcFirmware.location; + const data = { + Links: { + ActiveSoftwareImage: { + '@odata.id': backupLocation, + }, + }, + }; + return await api + .patch('/redfish/v1/Managers/bmc', data) + .catch((error) => { + console.log(error); + throw new Error(i18n.t('pageFirmware.toast.errorSwitchImages')); + }); + }, + }, +}; + +export default FirmwareStore; diff --git a/src/store/modules/Operations/PowerControlStore.js b/src/store/modules/Operations/PowerControlStore.js new file mode 100644 index 00000000..9dbddf05 --- /dev/null +++ b/src/store/modules/Operations/PowerControlStore.js @@ -0,0 +1,60 @@ +import api from '@/store/api'; +import i18n from '@/i18n'; + +const PowerControlStore = { + namespaced: true, + state: { + powerCapValue: null, + powerConsumptionValue: null, + }, + getters: { + powerCapValue: (state) => state.powerCapValue, + powerConsumptionValue: (state) => state.powerConsumptionValue, + }, + mutations: { + setPowerCapValue: (state, powerCapValue) => + (state.powerCapValue = powerCapValue), + setPowerConsumptionValue: (state, powerConsumptionValue) => + (state.powerConsumptionValue = powerConsumptionValue), + }, + actions: { + setPowerCapUpdatedValue({ commit }, value) { + commit('setPowerCapValue', value); + }, + async getPowerControl({ commit }) { + return await api + .get('/redfish/v1/Chassis/chassis/Power') + .then((response) => { + const powerControl = response.data.PowerControl; + const powerCap = powerControl[0].PowerLimit.LimitInWatts; + // If system is powered off, power consumption does not exist in the PowerControl + const powerConsumption = powerControl[0].PowerConsumedWatts || null; + + commit('setPowerCapValue', powerCap); + commit('setPowerConsumptionValue', powerConsumption); + }) + .catch((error) => { + console.log('Power control', error); + }); + }, + async setPowerControl(_, powerCapValue) { + const data = { + PowerControl: [{ PowerLimit: { LimitInWatts: powerCapValue } }], + }; + + return await api + .patch('/redfish/v1/Chassis/chassis/Power', data) + .then(() => + i18n.t('pageServerPowerOperations.toast.successSaveSettings') + ) + .catch((error) => { + console.log(error); + throw new Error( + i18n.t('pageServerPowerOperations.toast.errorSaveSettings') + ); + }); + }, + }, +}; + +export default PowerControlStore; diff --git a/src/store/modules/Operations/PowerPolicyStore.js b/src/store/modules/Operations/PowerPolicyStore.js new file mode 100644 index 00000000..4e76cdfe --- /dev/null +++ b/src/store/modules/Operations/PowerPolicyStore.js @@ -0,0 +1,72 @@ +import api from '@/store/api'; +import i18n from '@/i18n'; + +const PowerControlStore = { + namespaced: true, + state: { + powerRestoreCurrentPolicy: null, + powerRestorePolicies: [], + }, + getters: { + powerRestoreCurrentPolicy: (state) => state.powerRestoreCurrentPolicy, + powerRestorePolicies: (state) => state.powerRestorePolicies, + }, + mutations: { + setPowerRestoreCurrentPolicy: (state, powerRestoreCurrentPolicy) => + (state.powerRestoreCurrentPolicy = powerRestoreCurrentPolicy), + setPowerRestorePolicies: (state, powerRestorePolicies) => + (state.powerRestorePolicies = powerRestorePolicies), + }, + actions: { + async getPowerRestorePolicies({ commit }) { + return await api + .get('/redfish/v1/JsonSchemas/ComputerSystem/ComputerSystem.json') + .then( + ({ + data: { + definitions: { PowerRestorePolicyTypes = {} }, + }, + }) => { + let powerPoliciesData = PowerRestorePolicyTypes.enum.map( + (powerState) => { + let desc = `${i18n.t( + `pagePowerRestorePolicy.policies.${powerState}` + )} - ${PowerRestorePolicyTypes.enumDescriptions[powerState]}`; + return { + state: powerState, + desc, + }; + } + ); + commit('setPowerRestorePolicies', powerPoliciesData); + } + ); + }, + async getPowerRestoreCurrentPolicy({ commit }) { + api + .get('/redfish/v1/Systems/system') + .then(({ data: { PowerRestorePolicy } }) => { + commit('setPowerRestoreCurrentPolicy', PowerRestorePolicy); + }) + .catch((error) => console.log(error)); + }, + async setPowerRestorePolicy({ commit }, powerPolicy) { + const data = { PowerRestorePolicy: powerPolicy }; + + return await api + .patch('/redfish/v1/Systems/system', data) + .then(() => + commit('setPowerRestoreCurrentPolicy', data.PowerRestorePolicy) + ) + .then(() => i18n.t('pagePowerRestorePolicy.toast.successSaveSettings')) + .catch((error) => { + console.log(error); + throw new Error( + i18n.t('pagePowerRestorePolicy.toast.errorSaveSettings') + ); + }); + }, + }, +}; + +export default PowerControlStore; diff --git a/src/store/modules/Operations/VirtualMediaStore.js b/src/store/modules/Operations/VirtualMediaStore.js new file mode 100644 index 00000000..7c183b0e --- /dev/null +++ b/src/store/modules/Operations/VirtualMediaStore.js @@ -0,0 +1,105 @@ +import api from '@/store/api'; +import i18n from '@/i18n'; + +const VirtualMediaStore = { + namespaced: true, + state: { + proxyDevices: [], + legacyDevices: [], + connections: [], + }, + getters: { + proxyDevices: (state) => state.proxyDevices, + legacyDevices: (state) => state.legacyDevices, + }, + mutations: { + setProxyDevicesData: (state, deviceData) => + (state.proxyDevices = deviceData), + setLegacyDevicesData: (state, deviceData) => + (state.legacyDevices = deviceData), + }, + actions: { + async getData({ commit }) { + const virtualMediaListEnabled = + process.env.VUE_APP_VIRTUAL_MEDIA_LIST_ENABLED === 'true' + ? true + : false; + if (!virtualMediaListEnabled) { + const device = { + id: i18n.t('pageVirtualMedia.defaultDeviceName'), + websocket: '/vm/0/0', + file: null, + transferProtocolType: 'OEM', + isActive: false, + }; + commit('setProxyDevicesData', [device]); + return; + } + + return await api + .get('/redfish/v1/Managers/bmc/VirtualMedia') + .then((response) => + response.data.Members.map((virtualMedia) => virtualMedia['@odata.id']) + ) + .then((devices) => api.all(devices.map((device) => api.get(device)))) + .then((devices) => { + const deviceData = devices.map((device) => { + const isActive = device.data?.Inserted === true ? true : false; + return { + id: device.data?.Id, + transferProtocolType: device.data?.TransferProtocolType, + websocket: device.data?.Oem?.OpenBMC?.WebSocketEndpoint, + isActive: isActive, + }; + }); + const proxyDevices = deviceData + .filter((d) => d.transferProtocolType === 'OEM') + .map((device) => { + return { + ...device, + file: null, + }; + }); + const legacyDevices = deviceData + .filter((d) => !d.transferProtocolType) + .map((device) => { + return { + ...device, + serverUri: '', + username: '', + password: '', + isRW: false, + }; + }); + commit('setProxyDevicesData', proxyDevices); + commit('setLegacyDevicesData', legacyDevices); + }) + .catch((error) => { + console.log('Virtual Media:', error); + }); + }, + async mountImage(_, { id, data }) { + return await api + .post( + `/redfish/v1/Managers/bmc/VirtualMedia/${id}/Actions/VirtualMedia.InsertMedia`, + data + ) + .catch((error) => { + console.log('Mount image:', error); + throw new Error(); + }); + }, + async unmountImage(_, id) { + return await api + .post( + `/redfish/v1/Managers/bmc/VirtualMedia/${id}/Actions/VirtualMedia.EjectMedia` + ) + .catch((error) => { + console.log('Unmount image:', error); + throw new Error(); + }); + }, + }, +}; + +export default VirtualMediaStore; diff --git a/src/views/Configuration/Firmware/Firmware.vue b/src/views/Configuration/Firmware/Firmware.vue deleted file mode 100644 index a2acb9b0..00000000 --- a/src/views/Configuration/Firmware/Firmware.vue +++ /dev/null @@ -1,93 +0,0 @@ - - - diff --git a/src/views/Configuration/Firmware/FirmwareAlertServerPower.vue b/src/views/Configuration/Firmware/FirmwareAlertServerPower.vue deleted file mode 100644 index 2a3bcba1..00000000 --- a/src/views/Configuration/Firmware/FirmwareAlertServerPower.vue +++ /dev/null @@ -1,50 +0,0 @@ - - - diff --git a/src/views/Configuration/Firmware/FirmwareCardsBmc.vue b/src/views/Configuration/Firmware/FirmwareCardsBmc.vue deleted file mode 100644 index d79a8769..00000000 --- a/src/views/Configuration/Firmware/FirmwareCardsBmc.vue +++ /dev/null @@ -1,136 +0,0 @@ - - - diff --git a/src/views/Configuration/Firmware/FirmwareCardsHost.vue b/src/views/Configuration/Firmware/FirmwareCardsHost.vue deleted file mode 100644 index b4a8e90d..00000000 --- a/src/views/Configuration/Firmware/FirmwareCardsHost.vue +++ /dev/null @@ -1,73 +0,0 @@ - - - - - diff --git a/src/views/Configuration/Firmware/FirmwareFormUpdate.vue b/src/views/Configuration/Firmware/FirmwareFormUpdate.vue deleted file mode 100644 index 04b28a5c..00000000 --- a/src/views/Configuration/Firmware/FirmwareFormUpdate.vue +++ /dev/null @@ -1,200 +0,0 @@ - - - diff --git a/src/views/Configuration/Firmware/FirmwareModalSwitchToRunning.vue b/src/views/Configuration/Firmware/FirmwareModalSwitchToRunning.vue deleted file mode 100644 index dc4a4973..00000000 --- a/src/views/Configuration/Firmware/FirmwareModalSwitchToRunning.vue +++ /dev/null @@ -1,31 +0,0 @@ - - - diff --git a/src/views/Configuration/Firmware/FirmwareModalUpdateFirmware.vue b/src/views/Configuration/Firmware/FirmwareModalUpdateFirmware.vue deleted file mode 100644 index 18355217..00000000 --- a/src/views/Configuration/Firmware/FirmwareModalUpdateFirmware.vue +++ /dev/null @@ -1,44 +0,0 @@ - - - diff --git a/src/views/Configuration/Firmware/index.js b/src/views/Configuration/Firmware/index.js deleted file mode 100644 index ad15cc03..00000000 --- a/src/views/Configuration/Firmware/index.js +++ /dev/null @@ -1,2 +0,0 @@ -import Firmware from './Firmware.vue'; -export default Firmware; diff --git a/src/views/Control/FactoryReset/FactoryReset.vue b/src/views/Control/FactoryReset/FactoryReset.vue deleted file mode 100644 index 897348fc..00000000 --- a/src/views/Control/FactoryReset/FactoryReset.vue +++ /dev/null @@ -1,117 +0,0 @@ - - - diff --git a/src/views/Control/FactoryReset/FactoryResetModal.vue b/src/views/Control/FactoryReset/FactoryResetModal.vue deleted file mode 100644 index 170bf284..00000000 --- a/src/views/Control/FactoryReset/FactoryResetModal.vue +++ /dev/null @@ -1,113 +0,0 @@ - - diff --git a/src/views/Control/FactoryReset/index.js b/src/views/Control/FactoryReset/index.js deleted file mode 100644 index eae747e0..00000000 --- a/src/views/Control/FactoryReset/index.js +++ /dev/null @@ -1,2 +0,0 @@ -import FactoryReset from './FactoryReset.vue'; -export default FactoryReset; diff --git a/src/views/Control/Kvm/Kvm.vue b/src/views/Control/Kvm/Kvm.vue deleted file mode 100644 index 1a41baaf..00000000 --- a/src/views/Control/Kvm/Kvm.vue +++ /dev/null @@ -1,24 +0,0 @@ - - - - - diff --git a/src/views/Control/Kvm/KvmConsole.vue b/src/views/Control/Kvm/KvmConsole.vue deleted file mode 100644 index c028a9fc..00000000 --- a/src/views/Control/Kvm/KvmConsole.vue +++ /dev/null @@ -1,170 +0,0 @@ - - - - - diff --git a/src/views/Control/Kvm/index.js b/src/views/Control/Kvm/index.js deleted file mode 100644 index ac4f9667..00000000 --- a/src/views/Control/Kvm/index.js +++ /dev/null @@ -1,2 +0,0 @@ -import Kvm from './Kvm.vue'; -export default Kvm; diff --git a/src/views/Control/ManagePowerUsage/ManagePowerUsage.vue b/src/views/Control/ManagePowerUsage/ManagePowerUsage.vue deleted file mode 100644 index 38dbf0b8..00000000 --- a/src/views/Control/ManagePowerUsage/ManagePowerUsage.vue +++ /dev/null @@ -1,165 +0,0 @@ - - - diff --git a/src/views/Control/ManagePowerUsage/index.js b/src/views/Control/ManagePowerUsage/index.js deleted file mode 100644 index f3e95ac1..00000000 --- a/src/views/Control/ManagePowerUsage/index.js +++ /dev/null @@ -1,2 +0,0 @@ -import ManagePowerUsage from './ManagePowerUsage.vue'; -export default ManagePowerUsage; diff --git a/src/views/Control/PowerRestorePolicy/PowerRestorePolicy.vue b/src/views/Control/PowerRestorePolicy/PowerRestorePolicy.vue deleted file mode 100644 index 8589aed3..00000000 --- a/src/views/Control/PowerRestorePolicy/PowerRestorePolicy.vue +++ /dev/null @@ -1,80 +0,0 @@ - - - diff --git a/src/views/Control/PowerRestorePolicy/index.js b/src/views/Control/PowerRestorePolicy/index.js deleted file mode 100644 index fab0d477..00000000 --- a/src/views/Control/PowerRestorePolicy/index.js +++ /dev/null @@ -1,2 +0,0 @@ -import PowerRestorePolicy from './PowerRestorePolicy.vue'; -export default PowerRestorePolicy; diff --git a/src/views/Control/RebootBmc/RebootBmc.vue b/src/views/Control/RebootBmc/RebootBmc.vue deleted file mode 100644 index 900619cd..00000000 --- a/src/views/Control/RebootBmc/RebootBmc.vue +++ /dev/null @@ -1,83 +0,0 @@ - - - - - diff --git a/src/views/Control/RebootBmc/index.js b/src/views/Control/RebootBmc/index.js deleted file mode 100644 index ac31417e..00000000 --- a/src/views/Control/RebootBmc/index.js +++ /dev/null @@ -1,2 +0,0 @@ -import RebootBmc from './RebootBmc.vue'; -export default RebootBmc; diff --git a/src/views/Control/SerialOverLan/SerialOverLan.vue b/src/views/Control/SerialOverLan/SerialOverLan.vue deleted file mode 100644 index 48a68345..00000000 --- a/src/views/Control/SerialOverLan/SerialOverLan.vue +++ /dev/null @@ -1,24 +0,0 @@ - - - diff --git a/src/views/Control/SerialOverLan/SerialOverLanConsole.vue b/src/views/Control/SerialOverLan/SerialOverLanConsole.vue deleted file mode 100644 index 0bda43db..00000000 --- a/src/views/Control/SerialOverLan/SerialOverLanConsole.vue +++ /dev/null @@ -1,148 +0,0 @@ - - - - - diff --git a/src/views/Control/SerialOverLan/index.js b/src/views/Control/SerialOverLan/index.js deleted file mode 100644 index 7c8bc7c0..00000000 --- a/src/views/Control/SerialOverLan/index.js +++ /dev/null @@ -1,2 +0,0 @@ -import SerialOverLan from './SerialOverLan.vue'; -export default SerialOverLan; diff --git a/src/views/Control/ServerLed/ServerLed.vue b/src/views/Control/ServerLed/ServerLed.vue deleted file mode 100644 index 72726bab..00000000 --- a/src/views/Control/ServerLed/ServerLed.vue +++ /dev/null @@ -1,71 +0,0 @@ - - - diff --git a/src/views/Control/ServerLed/index.js b/src/views/Control/ServerLed/index.js deleted file mode 100644 index 1926dae8..00000000 --- a/src/views/Control/ServerLed/index.js +++ /dev/null @@ -1,2 +0,0 @@ -import ServerLed from './ServerLed.vue'; -export default ServerLed; diff --git a/src/views/Control/ServerPowerOperations/BootSettings.vue b/src/views/Control/ServerPowerOperations/BootSettings.vue deleted file mode 100644 index efd8d347..00000000 --- a/src/views/Control/ServerPowerOperations/BootSettings.vue +++ /dev/null @@ -1,140 +0,0 @@ - - - diff --git a/src/views/Control/ServerPowerOperations/ServerPowerOperations.vue b/src/views/Control/ServerPowerOperations/ServerPowerOperations.vue deleted file mode 100644 index 9e030837..00000000 --- a/src/views/Control/ServerPowerOperations/ServerPowerOperations.vue +++ /dev/null @@ -1,260 +0,0 @@ - - - diff --git a/src/views/Control/ServerPowerOperations/index.js b/src/views/Control/ServerPowerOperations/index.js deleted file mode 100644 index 10430047..00000000 --- a/src/views/Control/ServerPowerOperations/index.js +++ /dev/null @@ -1,2 +0,0 @@ -import ServerPowerOperations from './ServerPowerOperations.vue'; -export default ServerPowerOperations; diff --git a/src/views/Control/VirtualMedia/ModalConfigureConnection.vue b/src/views/Control/VirtualMedia/ModalConfigureConnection.vue deleted file mode 100644 index b0bcfb2b..00000000 --- a/src/views/Control/VirtualMedia/ModalConfigureConnection.vue +++ /dev/null @@ -1,145 +0,0 @@ - - - diff --git a/src/views/Control/VirtualMedia/VirtualMedia.vue b/src/views/Control/VirtualMedia/VirtualMedia.vue deleted file mode 100644 index 8a3d5add..00000000 --- a/src/views/Control/VirtualMedia/VirtualMedia.vue +++ /dev/null @@ -1,221 +0,0 @@ - - - diff --git a/src/views/Control/VirtualMedia/index.js b/src/views/Control/VirtualMedia/index.js deleted file mode 100644 index 4573e865..00000000 --- a/src/views/Control/VirtualMedia/index.js +++ /dev/null @@ -1,2 +0,0 @@ -import VirtualMedia from './VirtualMedia.vue'; -export default VirtualMedia; diff --git a/src/views/Operations/FactoryReset/FactoryReset.vue b/src/views/Operations/FactoryReset/FactoryReset.vue new file mode 100644 index 00000000..897348fc --- /dev/null +++ b/src/views/Operations/FactoryReset/FactoryReset.vue @@ -0,0 +1,117 @@ + + + diff --git a/src/views/Operations/FactoryReset/FactoryResetModal.vue b/src/views/Operations/FactoryReset/FactoryResetModal.vue new file mode 100644 index 00000000..170bf284 --- /dev/null +++ b/src/views/Operations/FactoryReset/FactoryResetModal.vue @@ -0,0 +1,113 @@ + + diff --git a/src/views/Operations/FactoryReset/index.js b/src/views/Operations/FactoryReset/index.js new file mode 100644 index 00000000..eae747e0 --- /dev/null +++ b/src/views/Operations/FactoryReset/index.js @@ -0,0 +1,2 @@ +import FactoryReset from './FactoryReset.vue'; +export default FactoryReset; diff --git a/src/views/Operations/Firmware/Firmware.vue b/src/views/Operations/Firmware/Firmware.vue new file mode 100644 index 00000000..a2acb9b0 --- /dev/null +++ b/src/views/Operations/Firmware/Firmware.vue @@ -0,0 +1,93 @@ + + + diff --git a/src/views/Operations/Firmware/FirmwareAlertServerPower.vue b/src/views/Operations/Firmware/FirmwareAlertServerPower.vue new file mode 100644 index 00000000..2a3bcba1 --- /dev/null +++ b/src/views/Operations/Firmware/FirmwareAlertServerPower.vue @@ -0,0 +1,50 @@ + + + diff --git a/src/views/Operations/Firmware/FirmwareCardsBmc.vue b/src/views/Operations/Firmware/FirmwareCardsBmc.vue new file mode 100644 index 00000000..d79a8769 --- /dev/null +++ b/src/views/Operations/Firmware/FirmwareCardsBmc.vue @@ -0,0 +1,136 @@ + + + diff --git a/src/views/Operations/Firmware/FirmwareCardsHost.vue b/src/views/Operations/Firmware/FirmwareCardsHost.vue new file mode 100644 index 00000000..b4a8e90d --- /dev/null +++ b/src/views/Operations/Firmware/FirmwareCardsHost.vue @@ -0,0 +1,73 @@ + + + + + diff --git a/src/views/Operations/Firmware/FirmwareFormUpdate.vue b/src/views/Operations/Firmware/FirmwareFormUpdate.vue new file mode 100644 index 00000000..04b28a5c --- /dev/null +++ b/src/views/Operations/Firmware/FirmwareFormUpdate.vue @@ -0,0 +1,200 @@ + + + diff --git a/src/views/Operations/Firmware/FirmwareModalSwitchToRunning.vue b/src/views/Operations/Firmware/FirmwareModalSwitchToRunning.vue new file mode 100644 index 00000000..dc4a4973 --- /dev/null +++ b/src/views/Operations/Firmware/FirmwareModalSwitchToRunning.vue @@ -0,0 +1,31 @@ + + + diff --git a/src/views/Operations/Firmware/FirmwareModalUpdateFirmware.vue b/src/views/Operations/Firmware/FirmwareModalUpdateFirmware.vue new file mode 100644 index 00000000..18355217 --- /dev/null +++ b/src/views/Operations/Firmware/FirmwareModalUpdateFirmware.vue @@ -0,0 +1,44 @@ + + + diff --git a/src/views/Operations/Firmware/index.js b/src/views/Operations/Firmware/index.js new file mode 100644 index 00000000..ad15cc03 --- /dev/null +++ b/src/views/Operations/Firmware/index.js @@ -0,0 +1,2 @@ +import Firmware from './Firmware.vue'; +export default Firmware; diff --git a/src/views/Operations/Kvm/Kvm.vue b/src/views/Operations/Kvm/Kvm.vue new file mode 100644 index 00000000..1a41baaf --- /dev/null +++ b/src/views/Operations/Kvm/Kvm.vue @@ -0,0 +1,24 @@ + + + + + diff --git a/src/views/Operations/Kvm/KvmConsole.vue b/src/views/Operations/Kvm/KvmConsole.vue new file mode 100644 index 00000000..c028a9fc --- /dev/null +++ b/src/views/Operations/Kvm/KvmConsole.vue @@ -0,0 +1,170 @@ + + + + + diff --git a/src/views/Operations/Kvm/index.js b/src/views/Operations/Kvm/index.js new file mode 100644 index 00000000..ac4f9667 --- /dev/null +++ b/src/views/Operations/Kvm/index.js @@ -0,0 +1,2 @@ +import Kvm from './Kvm.vue'; +export default Kvm; diff --git a/src/views/Operations/ManagePowerUsage/ManagePowerUsage.vue b/src/views/Operations/ManagePowerUsage/ManagePowerUsage.vue new file mode 100644 index 00000000..38dbf0b8 --- /dev/null +++ b/src/views/Operations/ManagePowerUsage/ManagePowerUsage.vue @@ -0,0 +1,165 @@ + + + diff --git a/src/views/Operations/ManagePowerUsage/index.js b/src/views/Operations/ManagePowerUsage/index.js new file mode 100644 index 00000000..f3e95ac1 --- /dev/null +++ b/src/views/Operations/ManagePowerUsage/index.js @@ -0,0 +1,2 @@ +import ManagePowerUsage from './ManagePowerUsage.vue'; +export default ManagePowerUsage; diff --git a/src/views/Operations/PowerRestorePolicy/PowerRestorePolicy.vue b/src/views/Operations/PowerRestorePolicy/PowerRestorePolicy.vue new file mode 100644 index 00000000..8589aed3 --- /dev/null +++ b/src/views/Operations/PowerRestorePolicy/PowerRestorePolicy.vue @@ -0,0 +1,80 @@ + + + diff --git a/src/views/Operations/PowerRestorePolicy/index.js b/src/views/Operations/PowerRestorePolicy/index.js new file mode 100644 index 00000000..fab0d477 --- /dev/null +++ b/src/views/Operations/PowerRestorePolicy/index.js @@ -0,0 +1,2 @@ +import PowerRestorePolicy from './PowerRestorePolicy.vue'; +export default PowerRestorePolicy; diff --git a/src/views/Operations/RebootBmc/RebootBmc.vue b/src/views/Operations/RebootBmc/RebootBmc.vue new file mode 100644 index 00000000..900619cd --- /dev/null +++ b/src/views/Operations/RebootBmc/RebootBmc.vue @@ -0,0 +1,83 @@ + + + + + diff --git a/src/views/Operations/RebootBmc/index.js b/src/views/Operations/RebootBmc/index.js new file mode 100644 index 00000000..ac31417e --- /dev/null +++ b/src/views/Operations/RebootBmc/index.js @@ -0,0 +1,2 @@ +import RebootBmc from './RebootBmc.vue'; +export default RebootBmc; diff --git a/src/views/Operations/SerialOverLan/SerialOverLan.vue b/src/views/Operations/SerialOverLan/SerialOverLan.vue new file mode 100644 index 00000000..48a68345 --- /dev/null +++ b/src/views/Operations/SerialOverLan/SerialOverLan.vue @@ -0,0 +1,24 @@ + + + diff --git a/src/views/Operations/SerialOverLan/SerialOverLanConsole.vue b/src/views/Operations/SerialOverLan/SerialOverLanConsole.vue new file mode 100644 index 00000000..0bda43db --- /dev/null +++ b/src/views/Operations/SerialOverLan/SerialOverLanConsole.vue @@ -0,0 +1,148 @@ + + + + + diff --git a/src/views/Operations/SerialOverLan/index.js b/src/views/Operations/SerialOverLan/index.js new file mode 100644 index 00000000..7c8bc7c0 --- /dev/null +++ b/src/views/Operations/SerialOverLan/index.js @@ -0,0 +1,2 @@ +import SerialOverLan from './SerialOverLan.vue'; +export default SerialOverLan; diff --git a/src/views/Operations/ServerPowerOperations/BootSettings.vue b/src/views/Operations/ServerPowerOperations/BootSettings.vue new file mode 100644 index 00000000..efd8d347 --- /dev/null +++ b/src/views/Operations/ServerPowerOperations/BootSettings.vue @@ -0,0 +1,140 @@ + + + diff --git a/src/views/Operations/ServerPowerOperations/ServerPowerOperations.vue b/src/views/Operations/ServerPowerOperations/ServerPowerOperations.vue new file mode 100644 index 00000000..9e030837 --- /dev/null +++ b/src/views/Operations/ServerPowerOperations/ServerPowerOperations.vue @@ -0,0 +1,260 @@ + + + diff --git a/src/views/Operations/ServerPowerOperations/index.js b/src/views/Operations/ServerPowerOperations/index.js new file mode 100644 index 00000000..10430047 --- /dev/null +++ b/src/views/Operations/ServerPowerOperations/index.js @@ -0,0 +1,2 @@ +import ServerPowerOperations from './ServerPowerOperations.vue'; +export default ServerPowerOperations; diff --git a/src/views/Operations/VirtualMedia/ModalConfigureConnection.vue b/src/views/Operations/VirtualMedia/ModalConfigureConnection.vue new file mode 100644 index 00000000..b0bcfb2b --- /dev/null +++ b/src/views/Operations/VirtualMedia/ModalConfigureConnection.vue @@ -0,0 +1,145 @@ + + + diff --git a/src/views/Operations/VirtualMedia/VirtualMedia.vue b/src/views/Operations/VirtualMedia/VirtualMedia.vue new file mode 100644 index 00000000..8a3d5add --- /dev/null +++ b/src/views/Operations/VirtualMedia/VirtualMedia.vue @@ -0,0 +1,221 @@ + + + diff --git a/src/views/Operations/VirtualMedia/index.js b/src/views/Operations/VirtualMedia/index.js new file mode 100644 index 00000000..4573e865 --- /dev/null +++ b/src/views/Operations/VirtualMedia/index.js @@ -0,0 +1,2 @@ +import VirtualMedia from './VirtualMedia.vue'; +export default VirtualMedia; diff --git a/src/views/Overview/OverviewQuickLinks.vue b/src/views/Overview/OverviewQuickLinks.vue index 7e2602e1..9392c56c 100644 --- a/src/views/Overview/OverviewQuickLinks.vue +++ b/src/views/Overview/OverviewQuickLinks.vue @@ -41,7 +41,7 @@
this.successToast(message)) .catch(({ message }) => this.errorToast(message)); }, }, diff --git a/tests/unit/__snapshots__/AppHeader.spec.js.snap b/tests/unit/__snapshots__/AppHeader.spec.js.snap index b472bcbc..b9e3bf71 100644 --- a/tests/unit/__snapshots__/AppHeader.spec.js.snap +++ b/tests/unit/__snapshots__/AppHeader.spec.js.snap @@ -100,7 +100,7 @@ exports[`AppHeader.vue should render correctly 1`] = `