blob: 99542b88d91e38f8acca48b2e3e69c1affeb5302 [file] [log] [blame]
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;