| 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; |