/
internal_helpers.go
162 lines (143 loc) · 4.9 KB
/
internal_helpers.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
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
package internal_helpers
import (
kapi "k8s.io/kubernetes/pkg/apis/core"
"github.com/openshift/origin/pkg/api/apihelpers"
buildapi "github.com/openshift/origin/pkg/build/apis/build"
)
// NOTE: These helpers are used by apiserver only as the apiserver use the internal types.
// These were copied from pkg/build/util and any change to original helpers should be reflected here as well.
const (
// buildPodSuffix is the suffix used to append to a build pod name given a build name
buildPodSuffix = "build"
)
// BuildToPodLogOptions builds a PodLogOptions object out of a BuildLogOptions.
// Currently BuildLogOptions.Container and BuildLogOptions.Previous aren't used
// so they won't be copied to PodLogOptions.
// DEPRECATED: Reserved for apiserver, do not use outside of it
func BuildToPodLogOptions(opts *buildapi.BuildLogOptions) *kapi.PodLogOptions {
return &kapi.PodLogOptions{
Follow: opts.Follow,
SinceSeconds: opts.SinceSeconds,
SinceTime: opts.SinceTime,
Timestamps: opts.Timestamps,
TailLines: opts.TailLines,
LimitBytes: opts.LimitBytes,
}
}
// DEPRECATED: Reserved for apiserver, do not use outside of it
func IsBuildComplete(b *buildapi.Build) bool {
return IsTerminalPhase(b.Status.Phase)
}
// DEPRECATED: Reserved for apiserver, do not use outside of it
func IsTerminalPhase(p buildapi.BuildPhase) bool {
switch p {
case buildapi.BuildPhaseNew,
buildapi.BuildPhasePending,
buildapi.BuildPhaseRunning:
return false
}
return true
}
// GetBuildPodName returns name of the build pod.
// DEPRECATED: Reserved for apiserver, do not use outside of it
func GetBuildPodName(build *buildapi.Build) string {
return apihelpers.GetPodName(build.Name, buildPodSuffix)
}
// DEPRECATED: Reserved for apiserver, do not use outside of it
func StrategyType(strategy buildapi.BuildStrategy) string {
switch {
case strategy.DockerStrategy != nil:
return "Docker"
case strategy.CustomStrategy != nil:
return "Custom"
case strategy.SourceStrategy != nil:
return "Source"
case strategy.JenkinsPipelineStrategy != nil:
return "JenkinsPipeline"
}
return ""
}
// GetInputReference returns the From ObjectReference associated with the
// BuildStrategy.
// DEPRECATED: Reserved for apiserver, do not use outside of it
func GetInputReference(strategy buildapi.BuildStrategy) *kapi.ObjectReference {
switch {
case strategy.SourceStrategy != nil:
return &strategy.SourceStrategy.From
case strategy.DockerStrategy != nil:
return strategy.DockerStrategy.From
case strategy.CustomStrategy != nil:
return &strategy.CustomStrategy.From
default:
return nil
}
}
// GetBuildEnv gets the build strategy environment
// DEPRECATED: Reserved for apiserver, do not use outside of it
func GetBuildEnv(build *buildapi.Build) []kapi.EnvVar {
switch {
case build.Spec.Strategy.SourceStrategy != nil:
return build.Spec.Strategy.SourceStrategy.Env
case build.Spec.Strategy.DockerStrategy != nil:
return build.Spec.Strategy.DockerStrategy.Env
case build.Spec.Strategy.CustomStrategy != nil:
return build.Spec.Strategy.CustomStrategy.Env
case build.Spec.Strategy.JenkinsPipelineStrategy != nil:
return build.Spec.Strategy.JenkinsPipelineStrategy.Env
default:
return nil
}
}
// SetBuildEnv replaces the current build environment
// DEPRECATED: Reserved for apiserver, do not use outside of it
func SetBuildEnv(build *buildapi.Build, env []kapi.EnvVar) {
var oldEnv *[]kapi.EnvVar
switch {
case build.Spec.Strategy.SourceStrategy != nil:
oldEnv = &build.Spec.Strategy.SourceStrategy.Env
case build.Spec.Strategy.DockerStrategy != nil:
oldEnv = &build.Spec.Strategy.DockerStrategy.Env
case build.Spec.Strategy.CustomStrategy != nil:
oldEnv = &build.Spec.Strategy.CustomStrategy.Env
case build.Spec.Strategy.JenkinsPipelineStrategy != nil:
oldEnv = &build.Spec.Strategy.JenkinsPipelineStrategy.Env
default:
return
}
*oldEnv = env
}
// UpdateBuildEnv updates the strategy environment
// This will replace the existing variable definitions with provided env
// DEPRECATED: Reserved for apiserver, do not use outside of it
func UpdateBuildEnv(build *buildapi.Build, env []kapi.EnvVar) {
buildEnv := GetBuildEnv(build)
newEnv := []kapi.EnvVar{}
for _, e := range buildEnv {
exists := false
for _, n := range env {
if e.Name == n.Name {
exists = true
break
}
}
if !exists {
newEnv = append(newEnv, e)
}
}
newEnv = append(newEnv, env...)
SetBuildEnv(build, newEnv)
}
// BuildSliceByCreationTimestamp implements sort.Interface for []Build
// based on the CreationTimestamp field.
// DEPRECATED: Reserved for apiserver, do not use outside of it
// +k8s:deepcopy-gen=false
type BuildSliceByCreationTimestamp []buildapi.Build
func (b BuildSliceByCreationTimestamp) Len() int {
return len(b)
}
func (b BuildSliceByCreationTimestamp) Less(i, j int) bool {
return b[i].CreationTimestamp.Before(&b[j].CreationTimestamp)
}
func (b BuildSliceByCreationTimestamp) Swap(i, j int) {
b[i], b[j] = b[j], b[i]
}