-
Notifications
You must be signed in to change notification settings - Fork 4.7k
/
build.go
97 lines (85 loc) · 4.03 KB
/
build.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
package controller
import (
"k8s.io/apimachinery/pkg/runtime"
buildcontroller "github.com/openshift/origin/pkg/build/controller/build"
builddefaults "github.com/openshift/origin/pkg/build/controller/build/defaults"
buildoverrides "github.com/openshift/origin/pkg/build/controller/build/overrides"
buildconfigcontroller "github.com/openshift/origin/pkg/build/controller/buildconfig"
buildstrategy "github.com/openshift/origin/pkg/build/controller/strategy"
configapi "github.com/openshift/origin/pkg/cmd/server/api"
"github.com/openshift/origin/pkg/cmd/server/bootstrappolicy"
sccadmission "github.com/openshift/origin/pkg/security/admission"
)
type BuildControllerConfig struct {
DockerImage string
S2IImage string
AdmissionPluginConfig map[string]configapi.AdmissionPluginConfig
Codec runtime.Codec
}
// RunController starts the build sync loop for builds and buildConfig processing.
func (c *BuildControllerConfig) RunController(ctx ControllerContext) (bool, error) {
sccAdmission := sccadmission.NewConstraint()
sccAdmission.SetSecurityInformers(ctx.SecurityInformers)
sccAdmission.SetInternalKubeClientSet(ctx.ClientBuilder.KubeInternalClientOrDie(bootstrappolicy.InfraBuildControllerServiceAccountName))
if err := sccAdmission.Validate(); err != nil {
return true, err
}
buildDefaults, err := builddefaults.NewBuildDefaults(c.AdmissionPluginConfig)
if err != nil {
return true, err
}
buildOverrides, err := buildoverrides.NewBuildOverrides(c.AdmissionPluginConfig)
if err != nil {
return true, err
}
deprecatedOpenshiftClient, err := ctx.ClientBuilder.DeprecatedOpenshiftClient(bootstrappolicy.InfraBuildControllerServiceAccountName)
if err != nil {
return true, err
}
kubeClient := ctx.ClientBuilder.KubeInternalClientOrDie(bootstrappolicy.InfraBuildControllerServiceAccountName)
externalKubeClient := ctx.ClientBuilder.ClientOrDie(bootstrappolicy.InfraBuildControllerServiceAccountName)
buildInformer := ctx.BuildInformers.Build().InternalVersion().Builds()
buildConfigInformer := ctx.BuildInformers.Build().InternalVersion().BuildConfigs()
imageStreamInformer := ctx.ImageInformers.Image().InternalVersion().ImageStreams()
podInformer := ctx.ExternalKubeInformers.Core().V1().Pods()
secretInformer := ctx.ExternalKubeInformers.Core().V1().Secrets()
buildControllerParams := &buildcontroller.BuildControllerParams{
BuildInformer: buildInformer,
BuildConfigInformer: buildConfigInformer,
ImageStreamInformer: imageStreamInformer,
PodInformer: podInformer,
SecretInformer: secretInformer,
KubeClientInternal: kubeClient,
KubeClientExternal: externalKubeClient,
OpenshiftClient: deprecatedOpenshiftClient,
DockerBuildStrategy: &buildstrategy.DockerBuildStrategy{
Image: c.DockerImage,
// TODO: this will be set to --storage-version (the internal schema we use)
Codec: c.Codec,
},
SourceBuildStrategy: &buildstrategy.SourceBuildStrategy{
Image: c.S2IImage,
// TODO: this will be set to --storage-version (the internal schema we use)
Codec: c.Codec,
AdmissionControl: sccAdmission,
},
CustomBuildStrategy: &buildstrategy.CustomBuildStrategy{
// TODO: this will be set to --storage-version (the internal schema we use)
Codec: c.Codec,
},
BuildDefaults: buildDefaults,
BuildOverrides: buildOverrides,
}
go buildcontroller.NewBuildController(buildControllerParams).Run(5, ctx.Stop)
return true, nil
}
func RunBuildConfigChangeController(ctx ControllerContext) (bool, error) {
clientName := bootstrappolicy.InfraBuildConfigChangeControllerServiceAccountName
openshiftClient := ctx.ClientBuilder.DeprecatedOpenshiftClientOrDie(clientName)
kubeExternalClient := ctx.ClientBuilder.ClientOrDie(clientName)
buildConfigInformer := ctx.BuildInformers.Build().InternalVersion().BuildConfigs()
buildInformer := ctx.BuildInformers.Build().InternalVersion().Builds()
controller := buildconfigcontroller.NewBuildConfigController(openshiftClient, kubeExternalClient, buildConfigInformer, buildInformer)
go controller.Run(5, ctx.Stop)
return true, nil
}