// NewCmdNewBuild implements the OpenShift cli new-build command func NewCmdNewBuild(fullName string, f *clientcmd.Factory, in io.Reader, out io.Writer) *cobra.Command { mapper, typer := f.Object() clientMapper := f.ClientMapperForCommand() config := newcmd.NewAppConfig(typer, mapper, clientMapper) cmd := &cobra.Command{ Use: "new-build (IMAGE | IMAGESTREAM | PATH | URL ...)", Short: "Create a new build configuration", Long: newBuildLong, Example: fmt.Sprintf(newBuildExample, fullName), Run: func(c *cobra.Command, args []string) { config.AddEnvironmentToBuild = true err := RunNewBuild(fullName, f, out, in, c, args, config) if err == errExit { os.Exit(1) } cmdutil.CheckErr(err) }, } cmd.Flags().Var(&config.SourceRepositories, "code", "Source code in the build configuration.") cmd.Flags().VarP(&config.ImageStreams, "image", "i", "Name of an image stream to to use as a builder.") cmd.Flags().Var(&config.DockerImages, "docker-image", "Name of a Docker image to use as a builder.") cmd.Flags().StringVar(&config.Name, "name", "", "Set name to use for generated build artifacts") cmd.Flags().VarP(&config.Environment, "env", "e", "Specify key value pairs of environment variables to set into resulting image.") cmd.Flags().StringVar(&config.Strategy, "strategy", "", "Specify the build strategy to use if you don't want to detect (docker|source).") cmd.Flags().StringVarP(&config.Dockerfile, "dockerfile", "D", "", "Specify the contents of a Dockerfile to build directly, implies --strategy=docker. Pass '-' to read from STDIN.") cmd.Flags().BoolVar(&config.OutputDocker, "to-docker", false, "Have the build output push to a Docker repository.") cmd.Flags().StringP("labels", "l", "", "Label to set in all generated resources.") cmdutil.AddPrinterFlags(cmd) return cmd }
// NewCmdNewApplication implements the OpenShift cli new-app command func NewCmdNewApplication(fullName string, f *clientcmd.Factory, out io.Writer) *cobra.Command { config := newcmd.NewAppConfig() config.Deploy = true cmd := &cobra.Command{ Use: "new-app (IMAGE | IMAGESTREAM | TEMPLATE | PATH | URL ...)", Short: "Create a new application", Long: fmt.Sprintf(newAppLong, fullName), Example: fmt.Sprintf(newAppExample, fullName), SuggestFor: []string{"app", "application"}, Run: func(c *cobra.Command, args []string) { mapper, typer := f.Object() config.Mapper = mapper config.Typer = typer config.ClientMapper = resource.ClientMapperFunc(f.ClientForMapping) err := RunNewApplication(fullName, f, out, c, args, config) if err == cmdutil.ErrExit { os.Exit(1) } kcmdutil.CheckErr(err) }, } cmd.Flags().BoolVar(&config.AsTestDeployment, "as-test", config.AsTestDeployment, "If true create this application as a test deployment, which validates that the deployment succeeds and then scales down.") cmd.Flags().StringSliceVar(&config.SourceRepositories, "code", config.SourceRepositories, "Source code to use to build this application.") cmd.Flags().StringVar(&config.ContextDir, "context-dir", "", "Context directory to be used for the build.") cmd.Flags().StringSliceVarP(&config.ImageStreams, "image", "", config.ImageStreams, "Name of an image stream to use in the app. (deprecated)") cmd.Flags().MarkDeprecated("image", "use --image-stream instead") cmd.Flags().StringSliceVarP(&config.ImageStreams, "image-stream", "i", config.ImageStreams, "Name of an image stream to use in the app.") cmd.Flags().StringSliceVar(&config.DockerImages, "docker-image", config.DockerImages, "Name of a Docker image to include in the app.") cmd.Flags().StringSliceVar(&config.Templates, "template", config.Templates, "Name of a stored template to use in the app.") cmd.Flags().StringSliceVarP(&config.TemplateFiles, "file", "f", config.TemplateFiles, "Path to a template file to use for the app.") cmd.MarkFlagFilename("file", "yaml", "yml", "json") cmd.Flags().StringSliceVarP(&config.TemplateParameters, "param", "p", config.TemplateParameters, "Specify a list of key value pairs (e.g., -p FOO=BAR,BAR=FOO) to set/override parameter values in the template.") cmd.Flags().StringSliceVar(&config.Groups, "group", config.Groups, "Indicate components that should be grouped together as <comp1>+<comp2>.") cmd.Flags().StringSliceVarP(&config.Environment, "env", "e", config.Environment, "Specify key value pairs of environment variables to set into each container.") cmd.Flags().StringVar(&config.Name, "name", "", "Set name to use for generated application artifacts") cmd.Flags().StringVar(&config.Strategy, "strategy", "", "Specify the build strategy to use if you don't want to detect (docker|source).") cmd.Flags().StringP("labels", "l", "", "Label to set in all resources for this application.") cmd.Flags().BoolVar(&config.InsecureRegistry, "insecure-registry", false, "If true, indicates that the referenced Docker images are on insecure registries and should bypass certificate checking") cmd.Flags().BoolVarP(&config.AsList, "list", "L", false, "List all local templates and image streams that can be used to create.") cmd.Flags().BoolVarP(&config.AsSearch, "search", "S", false, "Search all templates, image streams, and Docker images that match the arguments provided.") cmd.Flags().BoolVar(&config.AllowMissingImages, "allow-missing-images", false, "If true, indicates that referenced Docker images that cannot be found locally or in a registry should still be used.") cmd.Flags().BoolVar(&config.AllowMissingImageStreamTags, "allow-missing-imagestream-tags", false, "If true, indicates that image stream tags that don't exist should still be used.") cmd.Flags().BoolVar(&config.AllowSecretUse, "grant-install-rights", false, "If true, a component that requires access to your account may use your token to install software into your project. Only grant images you trust the right to run with your token.") cmd.Flags().BoolVar(&config.SkipGeneration, "no-install", false, "Do not attempt to run images that describe themselves as being installable") cmd.Flags().BoolVar(&config.DryRun, "dry-run", false, "If true, do not actually create resources.") // TODO AddPrinterFlags disabled so that it doesn't conflict with our own "template" flag. // Need a better solution. // kcmdutil.AddPrinterFlags(cmd) cmd.Flags().StringP("output", "o", "", "Output format. One of: json|yaml|template|templatefile.") cmd.Flags().String("output-version", "", "Output the formatted object with the given version (default api-version).") cmd.Flags().Bool("no-headers", false, "When using the default output, don't print headers.") cmd.Flags().String("output-template", "", "Template string or path to template file to use when -o=template or -o=templatefile. The template format is golang templates [http://golang.org/pkg/text/template/#pkg-overview]") cmd.MarkFlagFilename("output-template") return cmd }
// NewCmdNewBuild implements the OpenShift cli new-build command func NewCmdNewBuild(fullName string, f *clientcmd.Factory, out io.Writer) *cobra.Command { mapper, typer := f.Object() clientMapper := f.ClientMapperForCommand() config := newcmd.NewAppConfig(typer, mapper, clientMapper) cmd := &cobra.Command{ Use: "new-build (IMAGE | IMAGESTREAM | PATH | URL ...)", Short: "Create a new build configuration", Long: newBuildLong, Example: fmt.Sprintf(newBuildExample, fullName), Run: func(c *cobra.Command, args []string) { err := RunNewBuild(fullName, f, out, c, args, config) if err == errExit { os.Exit(1) } cmdutil.CheckErr(err) }, } cmd.Flags().Var(&config.SourceRepositories, "code", "Source code in the build configuration.") cmd.Flags().VarP(&config.ImageStreams, "image", "i", "Name of an OpenShift image stream to to use as a builder.") cmd.Flags().Var(&config.DockerImages, "docker-image", "Name of a Docker image to use as a builder.") cmd.Flags().StringVar(&config.Name, "name", "", "Set name to use for generated build artifacts") cmd.Flags().StringVar(&config.Strategy, "strategy", "", "Specify the build strategy to use if you don't want to detect (docker|source).") cmd.Flags().BoolVar(&config.OutputDocker, "to-docker", false, "Force the Build output to be DockerImage.") cmd.Flags().StringP("labels", "l", "", "Label to set in all generated resources.") cmdutil.AddPrinterFlags(cmd) return cmd }
// NewCmdNewApplication implements the OpenShift cli new-app command. func NewCmdNewApplication(name, baseName string, f *clientcmd.Factory, in io.Reader, out, errout io.Writer) *cobra.Command { config := newcmd.NewAppConfig() config.Deploy = true o := &NewAppOptions{Config: config} cmd := &cobra.Command{ Use: fmt.Sprintf("%s (IMAGE | IMAGESTREAM | TEMPLATE | PATH | URL ...)", name), Short: "Create a new application", Long: fmt.Sprintf(newAppLong, baseName, name), Example: fmt.Sprintf(newAppExample, baseName, name), SuggestFor: []string{"app", "application"}, Run: func(c *cobra.Command, args []string) { kcmdutil.CheckErr(o.Complete(baseName, name, f, c, args, in, out, errout)) err := o.RunNewApp() if err == cmdutil.ErrExit { os.Exit(1) } kcmdutil.CheckErr(err) }, } cmd.Flags().BoolVar(&config.AsTestDeployment, "as-test", config.AsTestDeployment, "If true create this application as a test deployment, which validates that the deployment succeeds and then scales down.") cmd.Flags().StringSliceVar(&config.SourceRepositories, "code", config.SourceRepositories, "Source code to use to build this application.") cmd.Flags().StringVar(&config.ContextDir, "context-dir", "", "Context directory to be used for the build.") cmd.Flags().StringSliceVarP(&config.ImageStreams, "image", "", config.ImageStreams, "Name of an image stream to use in the app. (deprecated)") cmd.Flags().MarkDeprecated("image", "use --image-stream instead") cmd.Flags().StringSliceVarP(&config.ImageStreams, "image-stream", "i", config.ImageStreams, "Name of an image stream to use in the app.") cmd.Flags().StringSliceVar(&config.DockerImages, "docker-image", config.DockerImages, "Name of a Docker image to include in the app.") cmd.Flags().StringSliceVar(&config.Templates, "template", config.Templates, "Name of a stored template to use in the app.") cmd.Flags().StringSliceVarP(&config.TemplateFiles, "file", "f", config.TemplateFiles, "Path to a template file to use for the app.") cmd.MarkFlagFilename("file", "yaml", "yml", "json") cmd.Flags().StringArrayVarP(&config.TemplateParameters, "param", "p", config.TemplateParameters, "Specify a key-value pair (e.g., -p FOO=BAR) to set/override a parameter value in the template.") cmd.Flags().StringArrayVar(&config.TemplateParameterFiles, "param-file", config.TemplateParameterFiles, "File containing parameter values to set/override in the template.") cmd.MarkFlagFilename("param-file") cmd.Flags().StringSliceVar(&config.Groups, "group", config.Groups, "Indicate components that should be grouped together as <comp1>+<comp2>.") cmd.Flags().StringArrayVarP(&config.Environment, "env", "e", config.Environment, "Specify a key-value pair for an environment variable to set into each container.") cmd.Flags().StringArrayVar(&config.EnvironmentFiles, "env-file", config.EnvironmentFiles, "File containing key-value pairs of environment variables to set into each container.") cmd.MarkFlagFilename("env-file") cmd.Flags().StringVar(&config.Name, "name", "", "Set name to use for generated application artifacts") cmd.Flags().Var(&config.Strategy, "strategy", "Specify the build strategy to use if you don't want to detect (docker|pipeline|source).") cmd.Flags().StringP("labels", "l", "", "Label to set in all resources for this application.") cmd.Flags().BoolVar(&config.InsecureRegistry, "insecure-registry", false, "If true, indicates that the referenced Docker images are on insecure registries and should bypass certificate checking") cmd.Flags().BoolVarP(&config.AsList, "list", "L", false, "List all local templates and image streams that can be used to create.") cmd.Flags().BoolVarP(&config.AsSearch, "search", "S", false, "Search all templates, image streams, and Docker images that match the arguments provided.") cmd.Flags().BoolVar(&config.AllowMissingImages, "allow-missing-images", false, "If true, indicates that referenced Docker images that cannot be found locally or in a registry should still be used.") cmd.Flags().BoolVar(&config.AllowMissingImageStreamTags, "allow-missing-imagestream-tags", false, "If true, indicates that image stream tags that don't exist should still be used.") cmd.Flags().BoolVar(&config.AllowSecretUse, "grant-install-rights", false, "If true, a component that requires access to your account may use your token to install software into your project. Only grant images you trust the right to run with your token.") cmd.Flags().BoolVar(&config.SkipGeneration, "no-install", false, "Do not attempt to run images that describe themselves as being installable") o.Action.BindForOutput(cmd.Flags()) cmd.Flags().String("output-version", "", "The preferred API versions of the output objects") return cmd }
// NewCmdNewBuild implements the OpenShift cli new-build command func NewCmdNewBuild(fullName string, f *clientcmd.Factory, in io.Reader, out io.Writer) *cobra.Command { config := newcmd.NewAppConfig() config.ExpectToBuild = true cmd := &cobra.Command{ Use: "new-build (IMAGE | IMAGESTREAM | PATH | URL ...)", Short: "Create a new build configuration", Long: fmt.Sprintf(newBuildLong, fullName), Example: fmt.Sprintf(newBuildExample, fullName), SuggestFor: []string{"build", "builds"}, Run: func(c *cobra.Command, args []string) { mapper, typer := f.Object() config.Mapper = mapper config.Typer = typer config.ClientMapper = resource.ClientMapperFunc(f.ClientForMapping) config.AddEnvironmentToBuild = true err := RunNewBuild(fullName, f, out, in, c, args, config) if err == cmdutil.ErrExit { os.Exit(1) } kcmdutil.CheckErr(err) }, } cmd.Flags().StringSliceVar(&config.SourceRepositories, "code", config.SourceRepositories, "Source code in the build configuration.") cmd.Flags().StringSliceVarP(&config.ImageStreams, "image", "", config.ImageStreams, "Name of an image stream to to use as a builder. (deprecated)") cmd.Flags().MarkDeprecated("image", "use --image-stream instead") cmd.Flags().StringSliceVarP(&config.ImageStreams, "image-stream", "i", config.ImageStreams, "Name of an image stream to to use as a builder.") cmd.Flags().StringSliceVar(&config.DockerImages, "docker-image", config.DockerImages, "Name of a Docker image to use as a builder.") cmd.Flags().StringSliceVar(&config.Secrets, "build-secret", config.Secrets, "Secret and destination to use as an input for the build.") cmd.Flags().StringVar(&config.Name, "name", "", "Set name to use for generated build artifacts.") cmd.Flags().StringVar(&config.To, "to", "", "Push built images to this image stream tag (or Docker image repository if --to-docker is set).") cmd.Flags().BoolVar(&config.OutputDocker, "to-docker", false, "Have the build output push to a Docker repository.") cmd.Flags().StringSliceVarP(&config.Environment, "env", "e", config.Environment, "Specify key value pairs of environment variables to set into resulting image.") cmd.Flags().StringVar(&config.Strategy, "strategy", "", "Specify the build strategy to use if you don't want to detect (docker|source).") cmd.Flags().StringVarP(&config.Dockerfile, "dockerfile", "D", "", "Specify the contents of a Dockerfile to build directly, implies --strategy=docker. Pass '-' to read from STDIN.") cmd.Flags().BoolVar(&config.BinaryBuild, "binary", false, "Instead of expecting a source URL, set the build to expect binary contents. Will disable triggers.") cmd.Flags().StringP("labels", "l", "", "Label to set in all generated resources.") cmd.Flags().BoolVar(&config.AllowMissingImages, "allow-missing-images", false, "If true, indicates that referenced Docker images that cannot be found locally or in a registry should still be used.") cmd.Flags().BoolVar(&config.AllowMissingImageStreamTags, "allow-missing-imagestream-tags", false, "If true, indicates that image stream tags that don't exist should still be used.") cmd.Flags().StringVar(&config.ContextDir, "context-dir", "", "Context directory to be used for the build.") cmd.Flags().BoolVar(&config.DryRun, "dry-run", false, "If true, do not actually create resources.") cmd.Flags().BoolVar(&config.NoOutput, "no-output", false, "If true, the build output will not be pushed anywhere.") cmd.Flags().StringVar(&config.SourceImage, "source-image", "", "Specify an image to use as source for the build. You must also specify --source-image-path.") cmd.Flags().StringVar(&config.SourceImagePath, "source-image-path", "", "Specify the file or directory to copy from the source image and its destination in the build directory. Format: [source]:[destination-dir].") kcmdutil.AddPrinterFlags(cmd) return cmd }
// NewAppFromTemplate creates a new application from the given template and parameters // and returns the list of objects created, or the errors // // The template referenced should already have been created func (c *Context) NewAppFromTemplate(templateName string, templateParameters []string) (*kapi.List, []error) { factory, err := c.Factory() if err != nil { return nil, []error{err} } client, _, err := factory.Clients() if err != nil { return nil, []error{err} } namespace, err := c.Namespace() if err != nil { return nil, []error{err} } mapper, typer := factory.Object() clientMapper := factory.ClientMapperForCommand() appConfig := cmd.NewAppConfig() appConfig.SetTyper(typer) appConfig.SetMapper(mapper) appConfig.SetClientMapper(clientMapper) appConfig.Out = ioutil.Discard appConfig.ErrOut = ioutil.Discard appConfig.SetOpenShiftClient(client, namespace) appConfig.Components = append(appConfig.Components, templateName) if len(templateParameters) > 0 { appConfig.TemplateParameters = append(appConfig.TemplateParameters, templateParameters...) } // parse appResult, err := appConfig.Run() if err != nil { return nil, []error{err} } // and create all objects bulk := configcmd.Bulk{ Mapper: mapper, Typer: typer, RESTClientFactory: factory.RESTClient, } if errs := bulk.Create(appResult.List, appResult.Namespace); len(errs) != 0 { return nil, errs } return appResult.List, []error{} }
// NewCmdNewApplication implements the OpenShift cli new-app command func NewCmdNewApplication(fullName string, f *clientcmd.Factory, out io.Writer) *cobra.Command { mapper, typer := f.Object() clientMapper := f.ClientMapperForCommand() config := newcmd.NewAppConfig(typer, mapper, clientMapper) cmd := &cobra.Command{ Use: "new-app (IMAGE | IMAGESTREAM | TEMPLATE | PATH | URL ...)", Short: "Create a new application", Long: newAppLong, Example: fmt.Sprintf(newAppExample, fullName), SuggestFor: []string{"app", "application"}, Run: func(c *cobra.Command, args []string) { err := RunNewApplication(fullName, f, out, c, args, config) if err == errExit { os.Exit(1) } cmdutil.CheckErr(err) }, } cmd.Flags().Var(&config.SourceRepositories, "code", "Source code to use to build this application.") cmd.Flags().StringVar(&config.ContextDir, "context-dir", "", "Context directory to be used for the build.") cmd.Flags().VarP(&config.ImageStreams, "image", "", "Name of an image stream to use in the app. (deprecated)") cmd.Flags().VarP(&config.ImageStreams, "image-stream", "i", "Name of an image stream to use in the app.") cmd.Flags().Var(&config.DockerImages, "docker-image", "Name of a Docker image to include in the app.") cmd.Flags().Var(&config.Templates, "template", "Name of a stored template to use in the app.") cmd.Flags().VarP(&config.TemplateFiles, "file", "f", "Path to a template file to use for the app.") cmd.Flags().VarP(&config.TemplateParameters, "param", "p", "Specify a list of key value pairs (eg. -p FOO=BAR,BAR=FOO) to set/override parameter values in the template.") cmd.Flags().Var(&config.Groups, "group", "Indicate components that should be grouped together as <comp1>+<comp2>.") cmd.Flags().VarP(&config.Environment, "env", "e", "Specify key value pairs of environment variables to set into each container.") cmd.Flags().StringVar(&config.Name, "name", "", "Set name to use for generated application artifacts") cmd.Flags().StringVar(&config.Strategy, "strategy", "", "Specify the build strategy to use if you don't want to detect (docker|source).") cmd.Flags().StringP("labels", "l", "", "Label to set in all resources for this application.") cmd.Flags().BoolVar(&config.InsecureRegistry, "insecure-registry", false, "If true, indicates that the referenced Docker images are on insecure registries and should bypass certificate checking") cmd.Flags().BoolVarP(&config.AsList, "list", "L", false, "List all local templates and image streams that can be used to create.") cmd.Flags().BoolVarP(&config.AsSearch, "search", "S", false, "Search all templates, image streams, and Docker images that match the arguments provided.") cmd.Flags().BoolVar(&config.AllowMissingImages, "allow-missing-images", false, "If true, indicates that referenced Docker images that cannot be found locally or in a registry should still be used.") // TODO AddPrinterFlags disabled so that it doesn't conflict with our own "template" flag. // Need a better solution. // cmdutil.AddPrinterFlags(cmd) cmd.Flags().StringP("output", "o", "", "Output format. One of: json|yaml|template|templatefile.") cmd.Flags().String("output-version", "", "Output the formatted object with the given version (default api-version).") cmd.Flags().Bool("no-headers", false, "When using the default output, don't print headers.") cmd.Flags().String("output-template", "", "Template string or path to template file to use when -o=template or -o=templatefile. The template format is golang templates [http://golang.org/pkg/text/template/#pkg-overview]") return cmd }
// NewCmdNewBuild implements the OpenShift cli new-build command func NewCmdNewBuild(fullName string, f *clientcmd.Factory, in io.Reader, out io.Writer) *cobra.Command { config := newcmd.NewAppConfig() config.ExpectToBuild = true cmd := &cobra.Command{ Use: "new-build (IMAGE | IMAGESTREAM | PATH | URL ...)", Short: "Create a new build configuration", Long: fmt.Sprintf(newBuildLong, fullName), Example: fmt.Sprintf(newBuildExample, fullName), SuggestFor: []string{"build", "builds"}, Run: func(c *cobra.Command, args []string) { mapper, typer := f.Object() config.SetMapper(mapper) config.SetTyper(typer) config.SetClientMapper(f.ClientMapperForCommand()) config.AddEnvironmentToBuild = true err := RunNewBuild(fullName, f, out, in, c, args, config) if err == errExit { os.Exit(1) } cmdutil.CheckErr(err) }, } cmd.Flags().Var(&config.SourceRepositories, "code", "Source code in the build configuration.") cmd.Flags().VarP(&config.ImageStreams, "image", "i", "Name of an image stream to to use as a builder.") cmd.Flags().Var(&config.DockerImages, "docker-image", "Name of a Docker image to use as a builder.") cmd.Flags().StringVar(&config.Name, "name", "", "Set name to use for generated build artifacts") cmd.Flags().VarP(&config.Environment, "env", "e", "Specify key value pairs of environment variables to set into resulting image.") cmd.Flags().StringVar(&config.Strategy, "strategy", "", "Specify the build strategy to use if you don't want to detect (docker|source).") cmd.Flags().StringVarP(&config.Dockerfile, "dockerfile", "D", "", "Specify the contents of a Dockerfile to build directly, implies --strategy=docker. Pass '-' to read from STDIN.") cmd.Flags().BoolVar(&config.BinaryBuild, "binary", false, "Instead of expecting a source URL, set the build to expect binary contents. Will disable triggers.") cmd.Flags().BoolVar(&config.OutputDocker, "to-docker", false, "Have the build output push to a Docker repository.") cmd.Flags().StringP("labels", "l", "", "Label to set in all generated resources.") cmd.Flags().BoolVar(&config.AllowMissingImages, "allow-missing-images", false, "If true, indicates that referenced Docker images that cannot be found locally or in a registry should still be used.") cmd.Flags().StringVar(&config.ContextDir, "context-dir", "", "Context directory to be used for the build.") cmd.Flags().BoolVar(&config.DryRun, "dry-run", false, "If true, do not actually create resources.") cmdutil.AddPrinterFlags(cmd) return cmd }
// TestNewAppDefaultFlags ensures that flags default values are set. func TestNewAppDefaultFlags(t *testing.T) { config := newcmd.NewAppConfig() config.Deploy = true tests := map[string]struct { flagName string defaultVal string }{ "as test": { flagName: "as-test", defaultVal: strconv.FormatBool(config.AsTestDeployment), }, "code": { flagName: "code", defaultVal: "[" + strings.Join(config.SourceRepositories, ",") + "]", }, "context dir": { flagName: "context-dir", defaultVal: "", }, "image-stream": { flagName: "image-stream", defaultVal: "[" + strings.Join(config.ImageStreams, ",") + "]", }, "docker-image": { flagName: "docker-image", defaultVal: "[" + strings.Join(config.DockerImages, ",") + "]", }, "template": { flagName: "template", defaultVal: "[" + strings.Join(config.Templates, ",") + "]", }, "file": { flagName: "file", defaultVal: "[" + strings.Join(config.TemplateFiles, ",") + "]", }, "param": { flagName: "param", defaultVal: "[" + strings.Join(config.TemplateParameters, ",") + "]", }, "group": { flagName: "group", defaultVal: "[" + strings.Join(config.Groups, ",") + "]", }, "env": { flagName: "env", defaultVal: "[" + strings.Join(config.Environment, ",") + "]", }, "name": { flagName: "name", defaultVal: config.Name, }, "strategy": { flagName: "strategy", defaultVal: "", }, "labels": { flagName: "labels", defaultVal: "", }, "insecure-registry": { flagName: "insecure-registry", defaultVal: strconv.FormatBool(false), }, "list": { flagName: "list", defaultVal: strconv.FormatBool(false), }, "search": { flagName: "search", defaultVal: strconv.FormatBool(false), }, "allow-missing-images": { flagName: "allow-missing-images", defaultVal: strconv.FormatBool(false), }, "allow-missing-imagestream-tags": { flagName: "allow-missing-imagestream-tags", defaultVal: strconv.FormatBool(false), }, "grant-install-rights": { flagName: "grant-install-rights", defaultVal: strconv.FormatBool(false), }, "no-install": { flagName: "no-install", defaultVal: strconv.FormatBool(false), }, "output-version": { flagName: "output-version", defaultVal: "", }, } cmd := NewCmdNewApplication("oc", NewAppRecommendedCommandName, nil, nil, nil, nil) for _, v := range tests { f := cmd.Flag(v.flagName) if f == nil { t.Fatalf("expected flag %s to be registered but found none", v.flagName) } if f.DefValue != v.defaultVal { t.Errorf("expected default value of %s for %s but found %s", v.defaultVal, v.flagName, f.DefValue) } } }
// TestNewAppRunFailure test failures. func TestNewAppRunFailure(t *testing.T) { tests := map[string]struct { config *newcmd.AppConfig expectedErr string }{ "list_and_search": { config: &newcmd.AppConfig{ AsList: true, AsSearch: true, }, expectedErr: "--list and --search can't be used together", }, "list_with_arguments": { config: &newcmd.AppConfig{ AsList: true, ComponentInputs: newcmd.ComponentInputs{ Templates: []string{"test"}, }, }, expectedErr: "--list can't be used with arguments", }, "list_no_matches": { config: &newcmd.AppConfig{ AsList: true, }, expectedErr: "no matches found", }, "search_with_source_code": { config: &newcmd.AppConfig{ AsSearch: true, ComponentInputs: newcmd.ComponentInputs{ Components: []string{"mysql"}, SourceRepositories: []string{"https://github.com/openshift/ruby-hello-world"}, }, }, expectedErr: "--search can't be used with source code", }, "search_with_env": { config: &newcmd.AppConfig{ AsSearch: true, ComponentInputs: newcmd.ComponentInputs{ Components: []string{"mysql"}, }, GenerationInputs: newcmd.GenerationInputs{ Environment: []string{"FOO=BAR"}, }, }, expectedErr: "--search can't be used with --env", }, "search_with_param": { config: &newcmd.AppConfig{ AsSearch: true, ComponentInputs: newcmd.ComponentInputs{ Components: []string{"mysql"}, }, GenerationInputs: newcmd.GenerationInputs{ TemplateParameters: []string{"FOO=BAR"}, }, }, expectedErr: "--search can't be used with --param", }, } opts := &NewAppOptions{ BaseName: "oc", CommandName: NewAppRecommendedCommandName, } for testName, test := range tests { test.config.Resolvers = newcmd.NewAppConfig().Resolvers test.config.Deploy = true opts.Config = test.config if err := opts.RunNewApp(); err != nil { if !strings.Contains(err.Error(), test.expectedErr) { t.Fatalf("[%s] error not expected: %+v", testName, err) } } else if len(test.expectedErr) != 0 { t.Fatalf("[%s] expected error: %v, got nil", testName, test.expectedErr) } } }