blob: 06aeefe648a7a7d1a62a7a51634f2ac7f3494dca [file] [log] [blame]
Dixsie Wolmers739e4592020-06-05 07:00:06 -05001import api from '../../api';
2import i18n from '@/i18n';
3
4const DateTimeStore = {
5 namespaced: true,
6 state: {
7 ntpServers: [],
8 isNtpProtocolEnabled: null
9 },
10 getters: {
11 ntpServers: state => state.ntpServers,
12 isNtpProtocolEnabled: state => state.isNtpProtocolEnabled
13 },
14 mutations: {
15 setNtpServers: (state, ntpServers) => (state.ntpServers = ntpServers),
16 setIsNtpProtocolEnabled: (state, isNtpProtocolEnabled) =>
17 (state.isNtpProtocolEnabled = isNtpProtocolEnabled)
18 },
19 actions: {
20 async getNtpData({ commit }) {
21 return await api
22 .get('/redfish/v1/Managers/bmc/NetworkProtocol')
23 .then(response => {
24 const ntpServers = response.data.NTP.NTPServers;
25 const isNtpProtocolEnabled = response.data.NTP.ProtocolEnabled;
26 commit('setNtpServers', ntpServers);
27 commit('setIsNtpProtocolEnabled', isNtpProtocolEnabled);
28 })
29 .catch(error => {
30 console.log(error);
31 });
32 },
Dixsie Wolmersecd45a82020-07-14 17:07:26 -050033 async updateDateTimeSettings({ state }, dateTimeForm) {
Dixsie Wolmers739e4592020-06-05 07:00:06 -050034 const ntpData = {
35 NTP: {
36 ProtocolEnabled: dateTimeForm.ntpProtocolEnabled
37 }
38 };
Dixsie Wolmers739e4592020-06-05 07:00:06 -050039 if (dateTimeForm.ntpProtocolEnabled) {
40 ntpData.NTP.NTPServers = dateTimeForm.ntpServersArray;
41 }
42 return await api
43 .patch(`/redfish/v1/Managers/bmc/NetworkProtocol`, ntpData)
Dixsie Wolmersecd45a82020-07-14 17:07:26 -050044 .then(async () => {
Dixsie Wolmers739e4592020-06-05 07:00:06 -050045 if (!dateTimeForm.ntpProtocolEnabled) {
46 const dateTimeData = {
47 DateTime: dateTimeForm.updatedDateTime
48 };
Dixsie Wolmersecd45a82020-07-14 17:07:26 -050049 /**
50 * https://github.com/openbmc/phosphor-time-manager/blob/master/README.md#special-note-on-changing-ntp-setting
51 * When time mode is initially set to Manual from NTP,
52 * NTP service is disabled and the NTP service is
53 * stopping but not stopped, setting time will return an error.
54 * There are no responses from backend to notify when NTP is stopped.
55 * To work around, a timeout is set to allow NTP to fully stop
56 * TODO: remove timeout if backend solves
57 * https://github.com/openbmc/openbmc/issues/3459
58 */
59 const timeoutVal = state.isNtpProtocolEnabled ? 20000 : 0;
60 return await new Promise((resolve, reject) => {
61 setTimeout(() => {
62 return api
63 .patch(`/redfish/v1/Managers/bmc`, dateTimeData)
64 .then(() => resolve())
65 .catch(() => reject());
66 }, timeoutVal);
67 });
Dixsie Wolmers739e4592020-06-05 07:00:06 -050068 }
69 })
70 .then(() => {
71 return i18n.t(
72 'pageDateTimeSettings.toast.successSaveDateTimeSettings'
73 );
74 })
75 .catch(error => {
76 console.log(error);
77 throw new Error(
78 i18n.t('pageDateTimeSettings.toast.errorSaveDateTimeSettings')
79 );
80 });
81 }
82 }
83};
84
85export default DateTimeStore;