summaryrefslogtreecommitdiff
path: root/src/store/modules
diff options
context:
space:
mode:
authorYoshie Muranaka <yoshiemuranaka@gmail.com>2020-02-26 02:54:07 +0300
committerGunnar Mills <gmills@us.ibm.com>2020-03-06 06:36:47 +0300
commitfa1512b5fabd3a412a80462971ec1203244971ab (patch)
treecaa44726d1e586e96f0c042534346934b0937b18 /src/store/modules
parentf12e0607f2c1c13113180cfba23bffe837b5c109 (diff)
downloadwebui-vue-fa1512b5fabd3a412a80462971ec1203244971ab.tar.xz
Add power operations page
Add route, component and Control requests to enable power operations (power on, soft and hard reboot, soft and hard power off). This rewrite includes updates to use Redfish endpoints. Signed-off-by: Yoshie Muranaka <yoshiemuranaka@gmail.com> Change-Id: I54784b8cc1b6260e44e708c260ea4a531fc0a629
Diffstat (limited to 'src/store/modules')
-rw-r--r--src/store/modules/Control/ControlStore.js79
1 files changed, 79 insertions, 0 deletions
diff --git a/src/store/modules/Control/ControlStore.js b/src/store/modules/Control/ControlStore.js
index 9b2e4592..6f9ced43 100644
--- a/src/store/modules/Control/ControlStore.js
+++ b/src/store/modules/Control/ControlStore.js
@@ -1,8 +1,45 @@
import api from '../../api';
import i18n from '../../../i18n';
+/**
+ * Watch for hostStatus changes in GlobalStore module
+ * to set isOperationInProgress state
+ * Stop watching status changes and resolve Promise when
+ * hostStatus value matches passed argument or after 5 minutes
+ * @param {string} hostStatus
+ * @returns {Promise}
+ */
+const checkForHostStatus = function(hostStatus) {
+ return new Promise(resolve => {
+ const timer = setTimeout(() => {
+ resolve();
+ unwatch();
+ }, 300000 /*5mins*/);
+ const unwatch = this.watch(
+ state => state.global.hostStatus,
+ value => {
+ if (value === hostStatus) {
+ resolve();
+ unwatch();
+ clearTimeout(timer);
+ }
+ }
+ );
+ });
+};
+
const ControlStore = {
namespaced: true,
+ state: {
+ isOperationInProgress: false
+ },
+ getters: {
+ isOperationInProgress: state => state.isOperationInProgress
+ },
+ mutations: {
+ setOperationInProgress: (state, inProgress) =>
+ (state.isOperationInProgress = inProgress)
+ },
actions: {
async rebootBmc() {
const data = { ResetType: 'GracefulRestart' };
@@ -13,6 +50,48 @@ const ControlStore = {
console.log(error);
throw new Error(i18n.t('pageRebootBmc.toast.errorRebootStart'));
});
+ },
+ async hostPowerOn({ dispatch, commit }) {
+ const data = { ResetType: 'On' };
+ dispatch('hostPowerChange', data);
+ await checkForHostStatus.bind(this, 'on')();
+ commit('setOperationInProgress', false);
+ },
+ async hostSoftReboot({ dispatch, commit }) {
+ const data = { ResetType: 'GracefulRestart' };
+ dispatch('hostPowerChange', data);
+ await checkForHostStatus.bind(this, 'on')();
+ commit('setOperationInProgress', false);
+ },
+ async hostHardReboot({ dispatch, commit }) {
+ // TODO: Update when ForceWarmReboot property
+ // available
+ dispatch('hostPowerChange', { ResetType: 'ForceOff' });
+ await checkForHostStatus.bind(this, 'off')();
+ dispatch('hostPowerChange', { ResetType: 'On' });
+ await checkForHostStatus.bind(this, 'on')();
+ commit('setOperationInProgress', false);
+ },
+ async hostSoftPowerOff({ dispatch, commit }) {
+ const data = { ResetType: 'GracefulShutdown' };
+ dispatch('hostPowerChange', data);
+ await checkForHostStatus.bind(this, 'off')();
+ commit('setOperationInProgress', false);
+ },
+ async hostHardPowerOff({ dispatch, commit }) {
+ const data = { ResetType: 'ForceOff' };
+ dispatch('hostPowerChange', data);
+ await checkForHostStatus.bind(this, 'off')();
+ commit('setOperationInProgress', false);
+ },
+ hostPowerChange({ commit }, data) {
+ commit('setOperationInProgress', true);
+ api
+ .post('/redfish/v1/Systems/system/Actions/ComputerSystem.Reset', data)
+ .catch(error => {
+ console.log(error);
+ commit('setOperationInProgress', false);
+ });
}
}
};