xref: /openbmc/webui-vue/src/store/modules/Operations/BootSettingsStore.js (revision de23ea23d88451a2fa2774ec72053772603c23ae)
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