func newBuilderConfigFromEnvironment(out io.Writer) (*builderConfig, error) { cfg := &builderConfig{} var err error cfg.out = out // build (BUILD) buildStr := os.Getenv("BUILD") glog.V(4).Infof("$BUILD env var is %s \n", buildStr) cfg.build = &api.Build{} if err := runtime.DecodeInto(kapi.Codecs.UniversalDecoder(), []byte(buildStr), cfg.build); err != nil { return nil, fmt.Errorf("unable to parse build: %v", err) } if errs := validation.ValidateBuild(cfg.build); len(errs) > 0 { return nil, errors.NewInvalid(unversioned.GroupKind{Kind: "Build"}, cfg.build.Name, errs) } glog.V(4).Infof("Build: %#v", cfg.build) masterVersion := os.Getenv(api.OriginVersion) thisVersion := version.Get().String() if len(masterVersion) != 0 && masterVersion != thisVersion { fmt.Fprintf(cfg.out, "warning: OpenShift server version %q differs from this image %q\n", masterVersion, thisVersion) } else { glog.V(4).Infof("Master version %q, Builder version %q", masterVersion, thisVersion) } // sourceSecretsDir (SOURCE_SECRET_PATH) cfg.sourceSecretDir = os.Getenv("SOURCE_SECRET_PATH") // dockerClient and dockerEndpoint (DOCKER_HOST) // usually not set, defaults to docker socket cfg.dockerClient, cfg.dockerEndpoint, err = dockerutil.NewHelper().GetClient() if err != nil { return nil, fmt.Errorf("no Docker configuration defined: %v", err) } // buildsClient (KUBERNETES_SERVICE_HOST, KUBERNETES_SERVICE_PORT) clientConfig, err := restclient.InClusterConfig() if err != nil { return nil, fmt.Errorf("cannot connect to the server: %v", err) } osClient, err := client.New(clientConfig) if err != nil { return nil, fmt.Errorf("failed to get client: %v", err) } cfg.buildsClient = osClient.Builds(cfg.build.Namespace) return cfg, nil }
// Update replaces a given Build instance with an existing instance in storage.registry. func (storage *Storage) Update(obj interface{}) (<-chan interface{}, error) { build, ok := obj.(*api.Build) if !ok { return nil, fmt.Errorf("not a build: %#v", obj) } if errs := validation.ValidateBuild(build); len(errs) > 0 { return nil, errors.NewInvalid("build", build.ID, errs) } return apiserver.MakeAsync(func() (interface{}, error) { err := storage.registry.UpdateBuild(build) if err != nil { return nil, err } return build, nil }), nil }
// Create registers a given new Build instance to storage.registry. func (storage *Storage) Create(obj interface{}) (<-chan interface{}, error) { build, ok := obj.(*api.Build) if !ok { return nil, fmt.Errorf("not a build: %#v", obj) } if len(build.ID) == 0 { build.ID = uuid.NewUUID().String() } if len(build.Status) == 0 { build.Status = api.BuildNew } build.CreationTimestamp = util.Now() if errs := validation.ValidateBuild(build); len(errs) > 0 { return nil, errors.NewInvalid("build", build.ID, errs) } return apiserver.MakeAsync(func() (interface{}, error) { err := storage.registry.CreateBuild(build) if err != nil { return nil, err } return build, nil }), nil }
// Validate validates a new policy. func (strategy) Validate(ctx kapi.Context, obj runtime.Object) field.ErrorList { return validation.ValidateBuild(obj.(*api.Build)) }