// CreatePassthroughRoute implements the behavior to run the create passthrough route command. func CreatePassthroughRoute(f *clientcmd.Factory, out io.Writer, cmd *cobra.Command, args []string) error { oc, kc, err := f.Clients() if err != nil { return err } ns, _, err := f.DefaultNamespace() if err != nil { return err } serviceName, err := resolveServiceName(f, kcmdutil.GetFlagString(cmd, "service")) if err != nil { return err } routeName, err := resolveRouteName(args) if err != nil { return err } route, err := cmdutil.UnsecuredRoute(kc, ns, routeName, serviceName, kcmdutil.GetFlagString(cmd, "port")) if err != nil { return err } route.Spec.Host = kcmdutil.GetFlagString(cmd, "hostname") route.Spec.TLS = new(api.TLSConfig) route.Spec.TLS.Termination = api.TLSTerminationPassthrough dryRun := kcmdutil.GetFlagBool(cmd, "dry-run") actualRoute := route if !dryRun { actualRoute, err = oc.Routes(ns).Create(route) if err != nil { return err } } mapper, typer := f.Object(false) resourceMapper := &resource.Mapper{ ObjectTyper: typer, RESTMapper: mapper, ClientMapper: resource.ClientMapperFunc(f.ClientForMapping), } info, err := resourceMapper.InfoForObject(actualRoute, nil) if err != nil { return err } created := "created" if dryRun { created = "created (DRY RUN)" } shortOutput := kcmdutil.GetFlagString(cmd, "output") == "name" kcmdutil.PrintSuccess(mapper, shortOutput, out, info.Mapping.Resource, info.Name, created) return nil }
// validate adds one layer of validation prior to calling the upstream // expose command. func validate(cmd *cobra.Command, f *clientcmd.Factory, args []string) error { namespace, enforceNamespace, err := f.DefaultNamespace() if err != nil { return err } _, kc, err := f.Clients() if err != nil { return err } mapper, typer := f.Object(false) r := resource.NewBuilder(mapper, typer, resource.ClientMapperFunc(f.ClientForMapping), kapi.Codecs.UniversalDecoder()). ContinueOnError(). NamespaceParam(namespace).DefaultNamespace(). FilenameParam(enforceNamespace, false, kcmdutil.GetFlagStringSlice(cmd, "filename")...). ResourceTypeOrNameArgs(false, args...). Flatten(). Do() infos, err := r.Infos() if err != nil { return kcmdutil.UsageError(cmd, err.Error()) } if len(infos) > 1 { return fmt.Errorf("multiple resources provided: %v", args) } info := infos[0] mapping := info.ResourceMapping() generator := kcmdutil.GetFlagString(cmd, "generator") switch mapping.GroupVersionKind.GroupKind() { case kapi.Kind("Service"): switch generator { case "service/v1", "service/v2": // Set default protocol back for generating services if len(kcmdutil.GetFlagString(cmd, "protocol")) == 0 { cmd.Flags().Set("protocol", "TCP") } case "": // Default exposing services as a route generator = "route/v1" cmd.Flags().Set("generator", generator) fallthrough case "route/v1": route, err := cmdutil.UnsecuredRoute(kc, namespace, info.Name, info.Name, kcmdutil.GetFlagString(cmd, "port")) if err != nil { return err } if route.Spec.Port != nil { cmd.Flags().Set("port", route.Spec.Port.TargetPort.String()) } } default: switch generator { case "route/v1": return fmt.Errorf("cannot expose a %s as a route", mapping.GroupVersionKind.Kind) case "": // Default exposing everything except services as a service generator = "service/v2" cmd.Flags().Set("generator", generator) fallthrough case "service/v1", "service/v2": // Set default protocol back for generating services if len(kcmdutil.GetFlagString(cmd, "protocol")) == 0 { cmd.Flags().Set("protocol", "TCP") } } } return nil }
// CreateEdgeRoute implements the behavior to run the create edge route command. func CreateEdgeRoute(f *clientcmd.Factory, out io.Writer, cmd *cobra.Command, args []string) error { oc, kc, err := f.Clients() if err != nil { return err } ns, _, err := f.DefaultNamespace() if err != nil { return err } serviceName, err := resolveServiceName(f, kcmdutil.GetFlagString(cmd, "service")) if err != nil { return err } routeName, err := resolveRouteName(args) if err != nil { return err } route, err := cmdutil.UnsecuredRoute(kc, ns, routeName, serviceName, kcmdutil.GetFlagString(cmd, "port")) if err != nil { return err } route.Spec.Host = kcmdutil.GetFlagString(cmd, "hostname") route.Spec.Path = kcmdutil.GetFlagString(cmd, "path") route.Spec.TLS = new(api.TLSConfig) route.Spec.TLS.Termination = api.TLSTerminationEdge cert, err := fileutil.LoadData(kcmdutil.GetFlagString(cmd, "cert")) if err != nil { return err } route.Spec.TLS.Certificate = string(cert) key, err := fileutil.LoadData(kcmdutil.GetFlagString(cmd, "key")) if err != nil { return err } route.Spec.TLS.Key = string(key) caCert, err := fileutil.LoadData(kcmdutil.GetFlagString(cmd, "ca-cert")) if err != nil { return err } route.Spec.TLS.CACertificate = string(caCert) insecurePolicy := kcmdutil.GetFlagString(cmd, "insecure-policy") if len(insecurePolicy) > 0 { route.Spec.TLS.InsecureEdgeTerminationPolicy = api.InsecureEdgeTerminationPolicyType(insecurePolicy) } dryRun := kcmdutil.GetFlagBool(cmd, "dry-run") actualRoute := route if !dryRun { actualRoute, err = oc.Routes(ns).Create(route) if err != nil { return err } } mapper, typer := f.Object(false) resourceMapper := &resource.Mapper{ ObjectTyper: typer, RESTMapper: mapper, ClientMapper: resource.ClientMapperFunc(f.ClientForMapping), } info, err := resourceMapper.InfoForObject(actualRoute, nil) if err != nil { return err } created := "created" if dryRun { created = "created (DRY RUN)" } shortOutput := kcmdutil.GetFlagString(cmd, "output") == "name" kcmdutil.PrintSuccess(mapper, shortOutput, out, info.Mapping.Resource, info.Name, created) return nil }
// CreateReencryptRoute implements the behavior to run the create reencrypt route command. func CreateReencryptRoute(f *clientcmd.Factory, out io.Writer, cmd *cobra.Command, args []string) error { oc, kc, err := f.Clients() if err != nil { return err } ns, _, err := f.DefaultNamespace() if err != nil { return err } serviceName, err := resolveServiceName(f, kcmdutil.GetFlagString(cmd, "service")) if err != nil { return err } routeName, err := resolveRouteName(args) if err != nil { return err } route, err := cmdutil.UnsecuredRoute(kc, ns, routeName, serviceName, kcmdutil.GetFlagString(cmd, "port")) if err != nil { return err } route.Spec.Host = kcmdutil.GetFlagString(cmd, "hostname") route.Spec.Path = kcmdutil.GetFlagString(cmd, "path") route.Spec.TLS = new(api.TLSConfig) route.Spec.TLS.Termination = api.TLSTerminationReencrypt cert, err := fileutil.LoadData(kcmdutil.GetFlagString(cmd, "cert")) if err != nil { return err } route.Spec.TLS.Certificate = string(cert) key, err := fileutil.LoadData(kcmdutil.GetFlagString(cmd, "key")) if err != nil { return err } route.Spec.TLS.Key = string(key) caCert, err := fileutil.LoadData(kcmdutil.GetFlagString(cmd, "ca-cert")) if err != nil { return err } route.Spec.TLS.CACertificate = string(caCert) destCACert, err := fileutil.LoadData(kcmdutil.GetFlagString(cmd, "dest-ca-cert")) if err != nil { return err } route.Spec.TLS.DestinationCACertificate = string(destCACert) route, err = oc.Routes(ns).Create(route) if err != nil { return err } mapper, typer := f.Object(false) resourceMapper := &resource.Mapper{ ObjectTyper: typer, RESTMapper: mapper, ClientMapper: resource.ClientMapperFunc(f.ClientForMapping), } info, err := resourceMapper.InfoForObject(route, nil) if err != nil { return err } shortOutput := kcmdutil.GetFlagString(cmd, "output") == "name" kcmdutil.PrintSuccess(mapper, shortOutput, out, info.Mapping.Resource, info.Name, "created") return nil }