forked from openshift/origin
/
build.go
87 lines (76 loc) · 4.06 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
package controller
import (
"k8s.io/apimachinery/pkg/runtime/schema"
"k8s.io/kubernetes/pkg/api/legacyscheme"
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"
"github.com/openshift/origin/pkg/cmd/server/bootstrappolicy"
"github.com/openshift/origin/pkg/cmd/util/variable"
)
// RunController starts the build sync loop for builds and buildConfig processing.
func RunBuildController(ctx ControllerContext) (bool, error) {
groupVersion := schema.GroupVersion{Group: "", Version: "v1"}
annotationCodec := legacyscheme.Codecs.LegacyCodec(groupVersion)
imageTemplate := variable.NewDefaultImageTemplate()
imageTemplate.Format = ctx.OpenshiftControllerConfig.Build.ImageTemplateFormat.Format
imageTemplate.Latest = ctx.OpenshiftControllerConfig.Build.ImageTemplateFormat.Latest
buildDefaults, err := builddefaults.NewBuildDefaults(ctx.OpenshiftControllerConfig.Build.AdmissionPluginConfig)
if err != nil {
return true, err
}
buildOverrides, err := buildoverrides.NewBuildOverrides(ctx.OpenshiftControllerConfig.Build.AdmissionPluginConfig)
if err != nil {
return true, err
}
kubeClient := ctx.ClientBuilder.KubeInternalClientOrDie(bootstrappolicy.InfraBuildControllerServiceAccountName)
buildClient := ctx.ClientBuilder.OpenshiftInternalBuildClientOrDie(bootstrappolicy.InfraBuildControllerServiceAccountName)
externalKubeClient := ctx.ClientBuilder.ClientOrDie(bootstrappolicy.InfraBuildControllerServiceAccountName)
securityClient := ctx.ClientBuilder.OpenshiftInternalSecurityClientOrDie(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,
BuildClientInternal: buildClient,
DockerBuildStrategy: &buildstrategy.DockerBuildStrategy{
Image: imageTemplate.ExpandOrDie("docker-builder"),
// TODO: this will be set to --storage-version (the internal schema we use)
Codec: annotationCodec,
},
SourceBuildStrategy: &buildstrategy.SourceBuildStrategy{
Image: imageTemplate.ExpandOrDie("docker-builder"),
// TODO: this will be set to --storage-version (the internal schema we use)
Codec: annotationCodec,
SecurityClient: securityClient.Security(),
},
CustomBuildStrategy: &buildstrategy.CustomBuildStrategy{
// TODO: this will be set to --storage-version (the internal schema we use)
Codec: annotationCodec,
},
BuildDefaults: buildDefaults,
BuildOverrides: buildOverrides,
}
go buildcontroller.NewBuildController(buildControllerParams).Run(5, ctx.Stop)
return true, nil
}
func RunBuildConfigChangeController(ctx ControllerContext) (bool, error) {
clientName := bootstrappolicy.InfraBuildConfigChangeControllerServiceAccountName
kubeExternalClient := ctx.ClientBuilder.ClientOrDie(clientName)
buildClient := ctx.ClientBuilder.OpenshiftInternalBuildClientOrDie(clientName)
buildConfigInformer := ctx.BuildInformers.Build().InternalVersion().BuildConfigs()
buildInformer := ctx.BuildInformers.Build().InternalVersion().Builds()
controller := buildconfigcontroller.NewBuildConfigController(buildClient, kubeExternalClient, buildConfigInformer, buildInformer)
go controller.Run(5, ctx.Stop)
return true, nil
}