| import api from '@/store/api'; |
| import i18n from '@/i18n'; |
| |
| const DateTimeStore = { |
| namespaced: true, |
| state: { |
| ntpServers: [], |
| isNtpProtocolEnabled: null |
| }, |
| getters: { |
| ntpServers: state => state.ntpServers, |
| isNtpProtocolEnabled: state => state.isNtpProtocolEnabled |
| }, |
| mutations: { |
| setNtpServers: (state, ntpServers) => (state.ntpServers = ntpServers), |
| setIsNtpProtocolEnabled: (state, isNtpProtocolEnabled) => |
| (state.isNtpProtocolEnabled = isNtpProtocolEnabled) |
| }, |
| actions: { |
| async getNtpData({ commit }) { |
| return await api |
| .get('/redfish/v1/Managers/bmc/NetworkProtocol') |
| .then(response => { |
| const ntpServers = response.data.NTP.NTPServers; |
| const isNtpProtocolEnabled = response.data.NTP.ProtocolEnabled; |
| commit('setNtpServers', ntpServers); |
| commit('setIsNtpProtocolEnabled', isNtpProtocolEnabled); |
| }) |
| .catch(error => { |
| console.log(error); |
| }); |
| }, |
| async updateDateTimeSettings({ state }, dateTimeForm) { |
| const ntpData = { |
| NTP: { |
| ProtocolEnabled: dateTimeForm.ntpProtocolEnabled |
| } |
| }; |
| if (dateTimeForm.ntpProtocolEnabled) { |
| ntpData.NTP.NTPServers = dateTimeForm.ntpServersArray; |
| } |
| return await api |
| .patch(`/redfish/v1/Managers/bmc/NetworkProtocol`, ntpData) |
| .then(async () => { |
| if (!dateTimeForm.ntpProtocolEnabled) { |
| const dateTimeData = { |
| DateTime: dateTimeForm.updatedDateTime |
| }; |
| /** |
| * https://github.com/openbmc/phosphor-time-manager/blob/master/README.md#special-note-on-changing-ntp-setting |
| * When time mode is initially set to Manual from NTP, |
| * NTP service is disabled and the NTP service is |
| * stopping but not stopped, setting time will return an error. |
| * There are no responses from backend to notify when NTP is stopped. |
| * To work around, a timeout is set to allow NTP to fully stop |
| * TODO: remove timeout if backend solves |
| * https://github.com/openbmc/openbmc/issues/3459 |
| */ |
| const timeoutVal = state.isNtpProtocolEnabled ? 20000 : 0; |
| return await new Promise((resolve, reject) => { |
| setTimeout(() => { |
| return api |
| .patch(`/redfish/v1/Managers/bmc`, dateTimeData) |
| .then(() => resolve()) |
| .catch(() => reject()); |
| }, timeoutVal); |
| }); |
| } |
| }) |
| .then(() => { |
| return i18n.t( |
| 'pageDateTimeSettings.toast.successSaveDateTimeSettings' |
| ); |
| }) |
| .catch(error => { |
| console.log(error); |
| throw new Error( |
| i18n.t('pageDateTimeSettings.toast.errorSaveDateTimeSettings') |
| ); |
| }); |
| } |
| } |
| }; |
| |
| export default DateTimeStore; |