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(`${await this.dispatch('global/getSystemPath')}`) .then(({ data: { Boot } }) => { commit( 'setBootSourceOptions', Boot['BootSourceOverrideTarget@Redfish.AllowableValues'], ); commit('setOverrideEnabled', Boot.BootSourceOverrideEnabled); commit('setBootSource', Boot.BootSourceOverrideTarget); }) .catch((error) => console.log(error)); }, async 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(`${await this.dispatch('global/getSystemPath')}`, 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.global.t( 'pageServerPowerOperations.toast.successSaveSettings', ); responses.forEach((response) => { if (response instanceof Error) { throw new Error( i18n.global.t( 'pageServerPowerOperations.toast.errorSaveSettings', ), ); } }); return message; }), ); }, }, }; export default BootSettingsStore;