168cbbe90SSandeepa Singhimport api from '@/store/api'; 268cbbe90SSandeepa Singhimport i18n from '@/i18n'; 368cbbe90SSandeepa Singh 468cbbe90SSandeepa Singhconst BootSettingsStore = { 568cbbe90SSandeepa Singh namespaced: true, 668cbbe90SSandeepa Singh state: { 768cbbe90SSandeepa Singh bootSourceOptions: [], 868cbbe90SSandeepa Singh bootSource: null, 968cbbe90SSandeepa Singh overrideEnabled: null, 1068cbbe90SSandeepa Singh tpmEnabled: null, 1168cbbe90SSandeepa Singh }, 1268cbbe90SSandeepa Singh getters: { 1368cbbe90SSandeepa Singh bootSourceOptions: (state) => state.bootSourceOptions, 1468cbbe90SSandeepa Singh bootSource: (state) => state.bootSource, 1568cbbe90SSandeepa Singh overrideEnabled: (state) => state.overrideEnabled, 1668cbbe90SSandeepa Singh tpmEnabled: (state) => state.tpmEnabled, 1768cbbe90SSandeepa Singh }, 1868cbbe90SSandeepa Singh mutations: { 1968cbbe90SSandeepa Singh setBootSourceOptions: (state, bootSourceOptions) => 2068cbbe90SSandeepa Singh (state.bootSourceOptions = bootSourceOptions), 2168cbbe90SSandeepa Singh setBootSource: (state, bootSource) => (state.bootSource = bootSource), 2268cbbe90SSandeepa Singh setOverrideEnabled: (state, overrideEnabled) => { 2368cbbe90SSandeepa Singh if (overrideEnabled === 'Once') { 2468cbbe90SSandeepa Singh state.overrideEnabled = true; 2568cbbe90SSandeepa Singh } else { 2668cbbe90SSandeepa Singh // 'Continuous' or 'Disabled' 2768cbbe90SSandeepa Singh state.overrideEnabled = false; 2868cbbe90SSandeepa Singh } 2968cbbe90SSandeepa Singh }, 3068cbbe90SSandeepa Singh setTpmPolicy: (state, tpmEnabled) => (state.tpmEnabled = tpmEnabled), 3168cbbe90SSandeepa Singh }, 3268cbbe90SSandeepa Singh actions: { 3368cbbe90SSandeepa Singh async getBootSettings({ commit }) { 3468cbbe90SSandeepa Singh return await api 358841b7d4SSean Zhang .get(`${await this.dispatch('global/getSystemPath')}`) 3668cbbe90SSandeepa Singh .then(({ data: { Boot } }) => { 3768cbbe90SSandeepa Singh commit( 3868cbbe90SSandeepa Singh 'setBootSourceOptions', 398132399cSEd Tanous Boot['BootSourceOverrideTarget@Redfish.AllowableValues'], 4068cbbe90SSandeepa Singh ); 4168cbbe90SSandeepa Singh commit('setOverrideEnabled', Boot.BootSourceOverrideEnabled); 4268cbbe90SSandeepa Singh commit('setBootSource', Boot.BootSourceOverrideTarget); 4368cbbe90SSandeepa Singh }) 4468cbbe90SSandeepa Singh .catch((error) => console.log(error)); 4568cbbe90SSandeepa Singh }, 468841b7d4SSean Zhang async saveBootSettings( 478841b7d4SSean Zhang { commit, dispatch }, 488841b7d4SSean Zhang { bootSource, overrideEnabled }, 498841b7d4SSean Zhang ) { 5068cbbe90SSandeepa Singh const data = { Boot: {} }; 5168cbbe90SSandeepa Singh data.Boot.BootSourceOverrideTarget = bootSource; 5268cbbe90SSandeepa Singh 5368cbbe90SSandeepa Singh if (overrideEnabled) { 5468cbbe90SSandeepa Singh data.Boot.BootSourceOverrideEnabled = 'Once'; 5568cbbe90SSandeepa Singh } else if (bootSource === 'None') { 5668cbbe90SSandeepa Singh data.Boot.BootSourceOverrideEnabled = 'Disabled'; 5768cbbe90SSandeepa Singh } else { 5868cbbe90SSandeepa Singh data.Boot.BootSourceOverrideEnabled = 'Continuous'; 5968cbbe90SSandeepa Singh } 6068cbbe90SSandeepa Singh 6168cbbe90SSandeepa Singh return api 628841b7d4SSean Zhang .patch(`${await this.dispatch('global/getSystemPath')}`, data) 6368cbbe90SSandeepa Singh .then((response) => { 6468cbbe90SSandeepa Singh // If request success, commit the values 6568cbbe90SSandeepa Singh commit('setBootSource', data.Boot.BootSourceOverrideTarget); 6668cbbe90SSandeepa Singh commit('setOverrideEnabled', data.Boot.BootSourceOverrideEnabled); 6768cbbe90SSandeepa Singh return response; 6868cbbe90SSandeepa Singh }) 6968cbbe90SSandeepa Singh .catch((error) => { 7068cbbe90SSandeepa Singh console.log(error); 7168cbbe90SSandeepa Singh // If request error, GET saved options 7268cbbe90SSandeepa Singh dispatch('getBootSettings'); 7368cbbe90SSandeepa Singh return error; 7468cbbe90SSandeepa Singh }); 7568cbbe90SSandeepa Singh }, 7668cbbe90SSandeepa Singh async getTpmPolicy({ commit }) { 7768cbbe90SSandeepa Singh // TODO: switch to Redfish when available 7868cbbe90SSandeepa Singh return await api 7968cbbe90SSandeepa Singh .get('/xyz/openbmc_project/control/host0/TPMEnable') 808132399cSEd Tanous .then( 818132399cSEd Tanous ({ 828132399cSEd Tanous data: { 838132399cSEd Tanous data: { TPMEnable }, 848132399cSEd Tanous }, 858132399cSEd Tanous }) => commit('setTpmPolicy', TPMEnable), 8668cbbe90SSandeepa Singh ) 8768cbbe90SSandeepa Singh .catch((error) => console.log(error)); 8868cbbe90SSandeepa Singh }, 8968cbbe90SSandeepa Singh saveTpmPolicy({ commit, dispatch }, tpmEnabled) { 9068cbbe90SSandeepa Singh // TODO: switch to Redfish when available 9168cbbe90SSandeepa Singh const data = { data: tpmEnabled }; 9268cbbe90SSandeepa Singh return api 9368cbbe90SSandeepa Singh .put( 9468cbbe90SSandeepa Singh '/xyz/openbmc_project/control/host0/TPMEnable/attr/TPMEnable', 958132399cSEd Tanous data, 9668cbbe90SSandeepa Singh ) 9768cbbe90SSandeepa Singh .then((response) => { 9868cbbe90SSandeepa Singh // If request success, commit the values 9968cbbe90SSandeepa Singh commit('setTpmPolicy', tpmEnabled); 10068cbbe90SSandeepa Singh return response; 10168cbbe90SSandeepa Singh }) 10268cbbe90SSandeepa Singh .catch((error) => { 10368cbbe90SSandeepa Singh console.log(error); 10468cbbe90SSandeepa Singh // If request error, GET saved policy 10568cbbe90SSandeepa Singh dispatch('getTpmPolicy'); 10668cbbe90SSandeepa Singh return error; 10768cbbe90SSandeepa Singh }); 10868cbbe90SSandeepa Singh }, 10968cbbe90SSandeepa Singh async saveSettings( 11068cbbe90SSandeepa Singh { dispatch }, 1118132399cSEd Tanous { bootSource, overrideEnabled, tpmEnabled }, 11268cbbe90SSandeepa Singh ) { 11368cbbe90SSandeepa Singh const promises = []; 11468cbbe90SSandeepa Singh 11568cbbe90SSandeepa Singh if (bootSource !== null || overrideEnabled !== null) { 11668cbbe90SSandeepa Singh promises.push( 1178132399cSEd Tanous dispatch('saveBootSettings', { bootSource, overrideEnabled }), 11868cbbe90SSandeepa Singh ); 11968cbbe90SSandeepa Singh } 12068cbbe90SSandeepa Singh if (tpmEnabled !== null) { 12168cbbe90SSandeepa Singh promises.push(dispatch('saveTpmPolicy', tpmEnabled)); 12268cbbe90SSandeepa Singh } 12368cbbe90SSandeepa Singh 12468cbbe90SSandeepa Singh return await api.all(promises).then( 12568cbbe90SSandeepa Singh api.spread((...responses) => { 126*de23ea23SSurya V let message = i18n.global.t( 1278132399cSEd Tanous 'pageServerPowerOperations.toast.successSaveSettings', 12868cbbe90SSandeepa Singh ); 12968cbbe90SSandeepa Singh responses.forEach((response) => { 13068cbbe90SSandeepa Singh if (response instanceof Error) { 13168cbbe90SSandeepa Singh throw new Error( 132*de23ea23SSurya V i18n.global.t( 133*de23ea23SSurya V 'pageServerPowerOperations.toast.errorSaveSettings', 134*de23ea23SSurya V ), 13568cbbe90SSandeepa Singh ); 13668cbbe90SSandeepa Singh } 13768cbbe90SSandeepa Singh }); 13868cbbe90SSandeepa Singh return message; 1398132399cSEd Tanous }), 14068cbbe90SSandeepa Singh ); 14168cbbe90SSandeepa Singh }, 14268cbbe90SSandeepa Singh }, 14368cbbe90SSandeepa Singh}; 14468cbbe90SSandeepa Singh 14568cbbe90SSandeepa Singhexport default BootSettingsStore; 146