-
Notifications
You must be signed in to change notification settings - Fork 21
/
util.go
63 lines (54 loc) · 1.91 KB
/
util.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
/*
* Copyright 2022 The Furiko Authors.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package jobconfigcontroller
import (
"sort"
execution "github.com/furiko-io/furiko/apis/execution/v1alpha1"
"github.com/furiko-io/furiko/pkg/utils/cmp"
)
type FilterFunc func(execution.Job) bool
// IsJobConfigStatusEqual returns true if the JobConfigStatus is not equal for a JobConfig.
func IsJobConfigStatusEqual(orig, updated *execution.JobConfig) (bool, error) {
newUpdated := orig.DeepCopy()
newUpdated.Status = updated.Status
return cmp.IsJSONEqual(orig, newUpdated)
}
// FilterJobs filters a list of Job.
func FilterJobs(items []execution.Job, filterFunc FilterFunc) []execution.Job {
filtered := make([]execution.Job, 0, len(items))
for _, item := range items {
if filterFunc(item) {
filtered = append(filtered, item)
}
}
return filtered
}
// ToJobReferences converts a list of Job to a list of JobReference.
func ToJobReferences(items []execution.Job) []execution.JobReference {
refs := make([]execution.JobReference, 0, len(items))
for _, item := range items {
ref := execution.JobReference{Namespace: item.Namespace, Name: item.Name}
refs = append(refs, ref)
}
// Sort refs to make return value deterministic.
sort.Slice(refs, func(i, j int) bool {
if refs[i].Namespace != refs[j].Namespace {
return refs[i].Namespace < refs[j].Namespace
}
return refs[i].Name < refs[j].Name
})
return refs
}