func convert_v1_BuildOutput_To_api_BuildOutput(in *BuildOutput, out *newer.BuildOutput, s conversion.Scope) error { if err := s.DefaultConvert(in, out, conversion.IgnoreMissingFields); err != nil { return err } if in.To != nil && in.To.Kind == "ImageStreamTag" { name, tag, ok := imageapi.SplitImageStreamTag(in.To.Name) if !ok { return fmt.Errorf("ImageStreamTag object references must be in the form <name>:<tag>: %s", in.To.Name) } out.To.Kind = "ImageStream" out.To.Name = name out.Tag = tag return nil } if in.To != nil && in.To.Kind == "DockerImage" { out.To = nil if ref, err := imageapi.ParseDockerImageReference(in.To.Name); err == nil { out.Tag = ref.Tag ref.Tag = "" out.DockerImageReference = ref.String() } else { out.DockerImageReference = in.To.Name } } return nil }
func convert_v1beta3_DeploymentTriggerImageChangeParams_To_api_DeploymentTriggerImageChangeParams(in *DeploymentTriggerImageChangeParams, out *newer.DeploymentTriggerImageChangeParams, s conversion.Scope) error { out.Automatic = in.Automatic out.ContainerNames = make([]string, len(in.ContainerNames)) copy(out.ContainerNames, in.ContainerNames) out.LastTriggeredImage = in.LastTriggeredImage if err := s.Convert(&in.From, &out.From, 0); err != nil { return err } switch in.From.Kind { case "DockerImage": ref, err := imageapi.ParseDockerImageReference(in.From.Name) if err != nil { return err } out.Tag = ref.Tag ref.Tag, ref.ID = "", "" out.RepositoryName = ref.String() case "ImageStreamTag": name, tag, ok := imageapi.SplitImageStreamTag(in.From.Name) if !ok { return fmt.Errorf("ImageStreamTag object references must be in the form <name>:<tag>: %s", in.From.Name) } out.From.Kind = "ImageStream" out.From.Name = name out.Tag = tag } return nil }
// BuildConfig adds a graph node for the specific build config if it does not exist, // and will link the build config to other nodes for the images and source repositories // it depends on. func BuildConfig(g MutableUniqueGraph, config *build.BuildConfig) graph.Node { node, found := g.FindOrCreate( UniqueName(fmt.Sprintf("%d|%s/%s", BuildConfigGraphKind, config.Namespace, config.Name)), func(node Node) graph.Node { return &BuildConfigNode{ Node: node, BuildConfig: config, } }, ) if found { return node } output := config.Parameters.Output to := output.To switch { case to != nil && len(to.Name) > 0: out := ImageStreamTag(g, defaultNamespace(to.Namespace, config.Namespace), to.Name, output.Tag) g.AddEdge(node, out, BuildOutputGraphEdgeKind) case len(output.DockerImageReference) > 0: out := DockerRepository(g, output.DockerImageReference, output.Tag) g.AddEdge(node, out, BuildOutputGraphEdgeKind) } if in, ok := SourceRepository(g, config.Parameters.Source); ok { g.AddEdge(in, node, BuildInputGraphEdgeKind) } from := buildutil.GetImageStreamForStrategy(config.Parameters.Strategy) if from != nil { switch from.Kind { case "DockerImage": if ref, err := image.ParseDockerImageReference(from.Name); err == nil { tag := ref.Tag ref.Tag = "" in := DockerRepository(g, ref.String(), tag) g.AddEdge(in, node, BuildInputImageGraphEdgeKind) } case "ImageStream": tag := image.DefaultImageTag in := ImageStreamTag(g, defaultNamespace(from.Namespace, config.Namespace), from.Name, tag) g.AddEdge(in, node, BuildInputImageGraphEdgeKind) case "ImageStreamTag": name, tag, _ := image.SplitImageStreamTag(from.Name) in := ImageStreamTag(g, defaultNamespace(from.Namespace, config.Namespace), name, tag) g.AddEdge(in, node, BuildInputImageGraphEdgeKind) case "ImageStreamImage": glog.V(4).Infof("Ignoring ImageStreamImage reference in BuildConfig %s/%s", config.Namespace, config.Name) } } return node }
func convert_v1_CustomBuildStrategy_To_api_CustomBuildStrategy(in *CustomBuildStrategy, out *newer.CustomBuildStrategy, s conversion.Scope) error { if err := s.DefaultConvert(in, out, conversion.IgnoreMissingFields); err != nil { return err } if in.From != nil { switch in.From.Kind { case "ImageStream": out.From.Kind = "ImageStreamTag" out.From.Name = imageapi.JoinImageStreamTag(in.From.Name, "") case "ImageStreamTag": _, _, ok := imageapi.SplitImageStreamTag(in.From.Name) if !ok { return fmt.Errorf("ImageStreamTag object references must be in the form <name>:<tag>: %s", in.From.Name) } } } return nil }
// RunTag contains all the necessary functionality for the OpenShift cli tag command. func RunTag(f *clientcmd.Factory, out io.Writer, cmd *cobra.Command, args []string, sourceKind string) error { if len(args) < 2 { return cmdutil.UsageError(cmd, "you must specify a source and at least one destination") } original := sourceKind if len(sourceKind) > 0 { sourceKind = determineSourceKind(f, sourceKind) } if len(sourceKind) > 0 { validSources := util.NewStringSet("imagestreamtag", "istag", "imagestreamimage", "isimage", "docker", "dockerimage") if !validSources.Has(strings.ToLower(sourceKind)) { cmdutil.CheckErr(cmdutil.UsageError(cmd, "invalid source %q; valid values are %v", original, strings.Join(validSources.List(), ", "))) } } namespace, err := f.DefaultNamespace() if err != nil { return err } sourceNamespace, sourceNameAndRef, err := parseStreamName(args[0], namespace) if err != nil { return err } osClient, _, err := f.Clients() if err != nil { return err } if len(sourceKind) == 0 { if sourceName, sourceTag, ok := imageapi.SplitImageStreamTag(sourceNameAndRef); ok { if _, err := osClient.ImageStreamTags(sourceNamespace).Get(sourceName, sourceTag); err == nil { sourceKind = "ImageStreamTag" } } } if len(sourceKind) == 0 { if sourceName, sourceID, err := imagestreamimage.ParseNameAndID(sourceNameAndRef); err == nil { if _, err := osClient.ImageStreamImages(sourceNamespace).Get(sourceName, sourceID); err == nil { sourceKind = "ImageStreamImage" } } } if len(sourceKind) == 0 { sourceKind = "DockerImage" } for _, arg := range args[1:] { destNamespace, destNameAndTag, err := parseStreamName(arg, namespace) if err != nil { return err } destName, destTag, ok := imageapi.SplitImageStreamTag(destNameAndTag) if !ok { return fmt.Errorf("%q must be of the form <namespace>/<stream name>:<tag>", arg) } isc := osClient.ImageStreams(destNamespace) target, err := isc.Get(destName) if err != nil { if !kerrors.IsNotFound(err) { return err } // try to create the target if it doesn't exist target = &imageapi.ImageStream{ ObjectMeta: kapi.ObjectMeta{ Name: destName, }, } target, err = isc.Create(target) if err != nil { return nil } } if target.Spec.Tags == nil { target.Spec.Tags = make(map[string]imageapi.TagReference) } targetRef, ok := target.Spec.Tags[destTag] if !ok { targetRef = imageapi.TagReference{} } targetRef.From = &kapi.ObjectReference{ Kind: sourceKind, } switch sourceKind { case "DockerImage": targetRef.From.Name = args[0] default: targetRef.From.Namespace = sourceNamespace targetRef.From.Name = sourceNameAndRef } target.Spec.Tags[destTag] = targetRef if _, err = isc.Update(target); err != nil { return err } } return nil }
func makeImageStreamKey(ref *kapi.ObjectReference) string { name, _, _ := imageapi.SplitImageStreamTag(ref.Name) return types.NamespacedName{ref.Namespace, name}.String() }