// AddInputEdges links the build config to its input image and source nodes. func AddInputEdges(g osgraph.MutableUniqueGraph, node *buildgraph.BuildConfigNode) { if in := buildgraph.EnsureSourceRepositoryNode(g, node.BuildConfig.Spec.Source); in != nil { g.AddEdge(in, node, BuildInputEdgeKind) } inputImage := buildutil.GetImageStreamForStrategy(node.BuildConfig.Spec.Strategy) if input := imageRefNode(g, inputImage, node.BuildConfig); input != nil { g.AddEdge(input, node, BuildInputImageEdgeKind) } }
// AddInputOutputEdges links the build config to other nodes for the images and source repositories it depends on. func AddInputOutputEdges(g osgraph.MutableUniqueGraph, node *buildgraph.BuildConfigNode) *buildgraph.BuildConfigNode { output := node.BuildConfig.Spec.Output to := output.To switch { case to == nil: case to.Kind == "DockerImage": out := imagegraph.EnsureDockerRepositoryNode(g, to.Name, "") g.AddEdge(node, out, BuildOutputEdgeKind) case to.Kind == "ImageStreamTag": out := imagegraph.FindOrCreateSyntheticImageStreamTagNode(g, imagegraph.MakeImageStreamTagObjectMeta2(defaultNamespace(to.Namespace, node.BuildConfig.Namespace), to.Name)) g.AddEdge(node, out, BuildOutputEdgeKind) } if in := buildgraph.EnsureSourceRepositoryNode(g, node.BuildConfig.Spec.Source); in != nil { g.AddEdge(in, node, BuildInputEdgeKind) } from := buildutil.GetImageStreamForStrategy(node.BuildConfig.Spec.Strategy) if from != nil { switch from.Kind { case "DockerImage": if ref, err := imageapi.ParseDockerImageReference(from.Name); err == nil { tag := ref.Tag ref.Tag = "" in := imagegraph.EnsureDockerRepositoryNode(g, ref.String(), tag) g.AddEdge(in, node, BuildInputImageEdgeKind) } case "ImageStream": in := imagegraph.FindOrCreateSyntheticImageStreamTagNode(g, imagegraph.MakeImageStreamTagObjectMeta(defaultNamespace(from.Namespace, node.BuildConfig.Namespace), from.Name, imageapi.DefaultImageTag)) g.AddEdge(in, node, BuildInputImageEdgeKind) case "ImageStreamTag": in := imagegraph.FindOrCreateSyntheticImageStreamTagNode(g, imagegraph.MakeImageStreamTagObjectMeta2(defaultNamespace(from.Namespace, node.BuildConfig.Namespace), from.Name)) g.AddEdge(in, node, BuildInputImageEdgeKind) case "ImageStreamImage": in := imagegraph.FindOrCreateSyntheticImageStreamImageNode(g, imagegraph.MakeImageStreamImageObjectMeta(defaultNamespace(from.Namespace, node.BuildConfig.Namespace), from.Name)) g.AddEdge(in, node, BuildInputImageEdgeKind) } } return node }
// AddInputOutputEdges links the build config to other nodes for the images and source repositories it depends on. func AddInputOutputEdges(g osgraph.MutableUniqueGraph, node *buildgraph.BuildConfigNode) *buildgraph.BuildConfigNode { output := node.BuildConfig.Parameters.Output to := output.To switch { case to != nil && len(to.Name) > 0: out := imagegraph.FindOrCreateSyntheticImageStreamTagNode(g, imagegraph.MakeImageStreamTagObjectMeta(defaultNamespace(to.Namespace, node.BuildConfig.Namespace), to.Name, output.Tag)) g.AddEdge(node, out, BuildOutputEdgeKind) case len(output.DockerImageReference) > 0: out := imagegraph.EnsureDockerRepositoryNode(g, output.DockerImageReference, output.Tag) g.AddEdge(node, out, BuildOutputEdgeKind) } if in := buildgraph.EnsureSourceRepositoryNode(g, node.BuildConfig.Parameters.Source); in != nil { g.AddEdge(in, node, BuildInputEdgeKind) } from := buildutil.GetImageStreamForStrategy(node.BuildConfig.Parameters.Strategy) if from != nil { switch from.Kind { case "DockerImage": if ref, err := imageapi.ParseDockerImageReference(from.Name); err == nil { tag := ref.Tag ref.Tag = "" in := imagegraph.EnsureDockerRepositoryNode(g, ref.String(), tag) g.AddEdge(in, node, BuildInputImageEdgeKind) } case "ImageStream": tag := imageapi.DefaultImageTag in := imagegraph.FindOrCreateSyntheticImageStreamTagNode(g, imagegraph.MakeImageStreamTagObjectMeta(defaultNamespace(from.Namespace, node.BuildConfig.Namespace), from.Name, tag)) g.AddEdge(in, node, BuildInputImageEdgeKind) case "ImageStreamTag": name, tag, _ := imageapi.SplitImageStreamTag(from.Name) in := imagegraph.FindOrCreateSyntheticImageStreamTagNode(g, imagegraph.MakeImageStreamTagObjectMeta(defaultNamespace(from.Namespace, node.BuildConfig.Namespace), name, tag)) g.AddEdge(in, node, BuildInputImageEdgeKind) case "ImageStreamImage": glog.V(4).Infof("Ignoring ImageStreamImage reference in BuildConfig %s/%s", node.BuildConfig.Namespace, node.BuildConfig.Name) } } return node }