// RunNewBuild contains all the necessary functionality for the OpenShift cli new-build command func (o *NewBuildOptions) RunNewBuild() error { config := o.Config out := o.Out checkGitInstalled(out) result, err := config.Run() if err != nil { return handleBuildError(err, o.BaseName, o.CommandName, o.CommandPath) } if len(config.Labels) == 0 && len(result.Name) > 0 { config.Labels = map[string]string{"build": result.Name} } if err := setLabels(config.Labels, result); err != nil { return err } if err := setAnnotations(map[string]string{newcmd.GeneratedByNamespace: newcmd.GeneratedByNewBuild}, result); err != nil { return err } if o.Action.ShouldPrint() { return o.PrintObject(result.List) } if errs := o.Action.WithMessage(configcmd.CreateMessage(config.Labels), "created").Run(result.List, result.Namespace); len(errs) > 0 { return cmdutil.ErrExit } if !o.Action.Verbose() || o.Action.DryRun { return nil } indent := o.Action.DefaultIndent() for _, item := range result.List.Items { switch t := item.(type) { case *buildapi.BuildConfig: if len(t.Spec.Triggers) > 0 && t.Spec.Source.Binary == nil { fmt.Fprintf(out, "%sBuild configuration %q created and build triggered.\n", indent, t.Name) fmt.Fprintf(out, "%sRun '%s logs -f bc/%s' to stream the build progress.\n", indent, o.BaseName, t.Name) } } } return nil }
// RunNewApp contains all the necessary functionality for the OpenShift cli new-app command func (o *NewAppOptions) RunNewApp() error { config := o.Config out := o.Out if config.Querying() { result, err := config.RunQuery() if err != nil { return handleRunError(err, o.BaseName, o.CommandName, o.CommandPath) } if o.Action.ShouldPrint() { return o.PrintObject(result.List) } return printHumanReadableQueryResult(result, out, o.BaseName, o.CommandName) } checkGitInstalled(out) result, err := config.Run() if err := handleRunError(err, o.BaseName, o.CommandName, o.CommandPath); err != nil { return err } // set labels explicitly supplied by the user on the command line if err := setLabels(config.Labels, result); err != nil { return err } if len(result.Name) > 0 { // only set the computed implicit "app" label on objects if no object we've produced // already has the "app" label. appLabel := map[string]string{"app": result.Name} hasAppLabel, err := hasLabel(appLabel, result) if err != nil { return err } if !hasAppLabel { if err := setLabels(appLabel, result); err != nil { return err } } } if err := setAnnotations(map[string]string{newcmd.GeneratedByNamespace: newcmd.GeneratedByNewApp}, result); err != nil { return err } if o.Action.ShouldPrint() { return o.PrintObject(result.List) } if result.GeneratedJobs { o.Action.Compact() } if errs := o.Action.WithMessage(configcmd.CreateMessage(config.Labels), "created").Run(result.List, result.Namespace); len(errs) > 0 { return cmdutil.ErrExit } if !o.Action.Verbose() || o.Action.DryRun { return nil } hasMissingRepo := false installing := []*kapi.Pod{} indent := o.Action.DefaultIndent() for _, item := range result.List.Items { switch t := item.(type) { case *kapi.Pod: if t.Annotations[newcmd.GeneratedForJob] == "true" { installing = append(installing, t) } case *buildapi.BuildConfig: triggered := false for _, trigger := range t.Spec.Triggers { switch trigger.Type { case buildapi.ImageChangeBuildTriggerType, buildapi.ConfigChangeBuildTriggerType: triggered = true break } } if triggered { fmt.Fprintf(out, "%[1]sBuild scheduled, use '%[3]s logs -f bc/%[2]s' to track its progress.\n", indent, t.Name, o.BaseName) } else { fmt.Fprintf(out, "%[1]sUse '%[3]s start-build %[2]s' to start a build.\n", indent, t.Name, o.BaseName) } case *imageapi.ImageStream: if len(t.Status.DockerImageRepository) == 0 { if hasMissingRepo { continue } hasMissingRepo = true fmt.Fprintf(out, "%sWARNING: No Docker registry has been configured with the server. Automatic builds and deployments may not function.\n", indent) } } } switch { case len(installing) == 1: jobInput := installing[0].Annotations[newcmd.GeneratedForJobFor] return followInstallation(config, jobInput, installing[0], o.LogsForObject) case len(installing) > 1: for i := range installing { fmt.Fprintf(out, "%sTrack installation of %s with '%s logs %s'.\n", indent, installing[i].Name, o.BaseName, installing[i].Name) } case len(result.List.Items) > 0: fmt.Fprintf(out, "%sRun '%s %s' to view your app.\n", indent, o.BaseName, StatusRecommendedName) } return nil }