fix weekday parsing in MaintenanceWindow
This commit is contained in:
		
							parent
							
								
									94e175eb12
								
							
						
					
					
						commit
						86d9b8c71c
					
				|  | @ -12,8 +12,6 @@ import ( | ||||||
| 	"k8s.io/client-go/pkg/api/v1" | 	"k8s.io/client-go/pkg/api/v1" | ||||||
| ) | ) | ||||||
| 
 | 
 | ||||||
| var alphaRegexp = regexp.MustCompile("^[a-zA-Z]*$") |  | ||||||
| 
 |  | ||||||
| type MaintenanceWindow struct { | type MaintenanceWindow struct { | ||||||
| 	StartTime    time.Time    // Start time
 | 	StartTime    time.Time    // Start time
 | ||||||
| 	StartWeekday time.Weekday // Start weekday
 | 	StartWeekday time.Weekday // Start weekday
 | ||||||
|  | @ -96,7 +94,10 @@ type PostgresqlList struct { | ||||||
| 	Items []Postgresql `json:"items"` | 	Items []Postgresql `json:"items"` | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| func parseTime(s string) (t time.Time, wd time.Weekday, wdProvided bool, err error) { | var alphaRegexp = regexp.MustCompile("^[a-zA-Z]*$") | ||||||
|  | var weekdays = map[string]int{"Sun":0, "Mon":1, "Tue":2, "Wed":3, "Thu":4, "Fri":5, "Sat":6} | ||||||
|  | 
 | ||||||
|  | func ParseTime(s string) (t time.Time, wd time.Weekday, wdProvided bool, err error) { | ||||||
| 	var timeLayout string | 	var timeLayout string | ||||||
| 
 | 
 | ||||||
| 	parts := strings.Split(s, ":") | 	parts := strings.Split(s, ":") | ||||||
|  | @ -107,6 +108,12 @@ func parseTime(s string) (t time.Time, wd time.Weekday, wdProvided bool, err err | ||||||
| 		} | 		} | ||||||
| 		timeLayout = "Mon:15:04" | 		timeLayout = "Mon:15:04" | ||||||
| 		wdProvided = true | 		wdProvided = true | ||||||
|  | 		weekday, ok := weekdays[parts[0]] | ||||||
|  | 		if !ok { | ||||||
|  | 			err = fmt.Errorf("incorrect weekday") | ||||||
|  | 			return | ||||||
|  | 		} | ||||||
|  | 		wd = time.Weekday(weekday) | ||||||
| 	} else { | 	} else { | ||||||
| 		wdProvided = false | 		wdProvided = false | ||||||
| 		timeLayout = "15:04" | 		timeLayout = "15:04" | ||||||
|  | @ -116,8 +123,6 @@ func parseTime(s string) (t time.Time, wd time.Weekday, wdProvided bool, err err | ||||||
| 	if err != nil { | 	if err != nil { | ||||||
| 		return | 		return | ||||||
| 	} | 	} | ||||||
| 
 |  | ||||||
| 	wd = tp.Weekday() |  | ||||||
| 	t = tp.UTC() | 	t = tp.UTC() | ||||||
| 
 | 
 | ||||||
| 	return | 	return | ||||||
|  | @ -125,7 +130,7 @@ func parseTime(s string) (t time.Time, wd time.Weekday, wdProvided bool, err err | ||||||
| 
 | 
 | ||||||
| func (m *MaintenanceWindow) MarshalJSON() ([]byte, error) { | func (m *MaintenanceWindow) MarshalJSON() ([]byte, error) { | ||||||
| 	var startWd, endWd string | 	var startWd, endWd string | ||||||
| 	if m.StartWeekday == time.Sunday && m.EndWeekday == time.Saturday { | 	if m.StartWeekday == time.Monday && m.EndWeekday == time.Sunday { | ||||||
| 		startWd = "" | 		startWd = "" | ||||||
| 		endWd = "" | 		endWd = "" | ||||||
| 	} else { | 	} else { | ||||||
|  | @ -151,12 +156,12 @@ func (m *MaintenanceWindow) UnmarshalJSON(data []byte) error { | ||||||
| 		return fmt.Errorf("incorrect maintenance window format") | 		return fmt.Errorf("incorrect maintenance window format") | ||||||
| 	} | 	} | ||||||
| 
 | 
 | ||||||
| 	got.StartTime, got.StartWeekday, weekdayProvidedFrom, err = parseTime(parts[0]) | 	got.StartTime, got.StartWeekday, weekdayProvidedFrom, err = ParseTime(parts[0]) | ||||||
| 	if err != nil { | 	if err != nil { | ||||||
| 		return err | 		return err | ||||||
| 	} | 	} | ||||||
| 
 | 
 | ||||||
| 	got.EndTime, got.EndWeekday, weekdayProvidedTo, err = parseTime(parts[1]) | 	got.EndTime, got.EndWeekday, weekdayProvidedTo, err = ParseTime(parts[1]) | ||||||
| 	if err != nil { | 	if err != nil { | ||||||
| 		return err | 		return err | ||||||
| 	} | 	} | ||||||
|  | @ -165,9 +170,13 @@ func (m *MaintenanceWindow) UnmarshalJSON(data []byte) error { | ||||||
| 		return fmt.Errorf("'From' time must be prior to the 'To' time") | 		return fmt.Errorf("'From' time must be prior to the 'To' time") | ||||||
| 	} | 	} | ||||||
| 
 | 
 | ||||||
|  | 	if (int(got.StartWeekday) + 6) % 7 > (int(got.EndWeekday) + 6) % 7 { | ||||||
|  | 		return fmt.Errorf("'From' weekday must be prior to the 'To' weekday") | ||||||
|  | 	} | ||||||
|  | 
 | ||||||
| 	if !weekdayProvidedFrom || !weekdayProvidedTo { | 	if !weekdayProvidedFrom || !weekdayProvidedTo { | ||||||
| 		got.StartWeekday = time.Sunday | 		got.StartWeekday = time.Monday | ||||||
| 		got.EndWeekday = time.Saturday | 		got.EndWeekday = time.Sunday | ||||||
| 	} | 	} | ||||||
| 
 | 
 | ||||||
| 	*m = got | 	*m = got | ||||||
|  | @ -191,11 +200,17 @@ func (pl *PostgresqlList) GetListMeta() unversioned.List { | ||||||
| 	return &pl.Metadata | 	return &pl.Metadata | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| func clusterName(clusterName string, teamName string) (string, error) { | func extractClusterName(clusterName string, teamName string) (string, error) { | ||||||
| 	teamNameLen := len(teamName) | 	teamNameLen := len(teamName) | ||||||
|  | 
 | ||||||
| 	if len(clusterName) < teamNameLen+2 { | 	if len(clusterName) < teamNameLen+2 { | ||||||
| 		return "", fmt.Errorf("name is too short") | 		return "", fmt.Errorf("name is too short") | ||||||
| 	} | 	} | ||||||
|  | 
 | ||||||
|  | 	if teamNameLen == 0 { | ||||||
|  | 		return "", fmt.Errorf("Team name is empty") | ||||||
|  | 	} | ||||||
|  | 
 | ||||||
| 	if strings.ToLower(clusterName[:teamNameLen+1]) != strings.ToLower(teamName)+"-" { | 	if strings.ToLower(clusterName[:teamNameLen+1]) != strings.ToLower(teamName)+"-" { | ||||||
| 		return "", fmt.Errorf("name must match {TEAM}-{NAME} format") | 		return "", fmt.Errorf("name must match {TEAM}-{NAME} format") | ||||||
| 	} | 	} | ||||||
|  | @ -228,7 +243,7 @@ func (p *Postgresql) UnmarshalJSON(data []byte) error { | ||||||
| 	} | 	} | ||||||
| 	tmp2 := Postgresql(tmp) | 	tmp2 := Postgresql(tmp) | ||||||
| 
 | 
 | ||||||
| 	clusterName, err := clusterName(tmp2.Metadata.Name, tmp2.Spec.TeamID) | 	clusterName, err := extractClusterName(tmp2.Metadata.Name, tmp2.Spec.TeamID) | ||||||
| 	if err == nil { | 	if err == nil { | ||||||
| 		tmp2.Spec.ClusterName = clusterName | 		tmp2.Spec.ClusterName = clusterName | ||||||
| 	} else { | 	} else { | ||||||
|  |  | ||||||
		Loading…
	
		Reference in New Issue