// AddTriggerEdges creates edges that point to named Docker image repositories for each image used in the deployment. func AddTriggerEdges(g osgraph.MutableUniqueGraph, node *deploygraph.DeploymentConfigNode) *deploygraph.DeploymentConfigNode { rcTemplate := node.DeploymentConfig.Template.ControllerTemplate.Template if rcTemplate == nil { return node } EachTemplateImage( &rcTemplate.Spec, DeploymentConfigHasTrigger(node.DeploymentConfig), func(image TemplateImage, err error) { if err != nil { return } if image.From != nil { if len(image.From.Name) == 0 { return } in := imagegraph.EnsureImageStreamTagNode(g, image.From.Namespace, image.From.Name, image.FromTag) g.AddEdge(in, node, TriggersDeploymentEdgeKind) return } tag := image.Ref.Tag image.Ref.Tag = "" in := imagegraph.EnsureDockerRepositoryNode(g, image.Ref.String(), tag) g.AddEdge(in, node, UsedInDeploymentEdgeKind) }) 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.EnsureImageStreamTagNode(g, 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.EnsureImageStreamTagNode(g, defaultNamespace(from.Namespace, node.BuildConfig.Namespace), from.Name, tag) g.AddEdge(in, node, BuildInputImageEdgeKind) case "ImageStreamTag": name, tag, _ := imageapi.SplitImageStreamTag(from.Name) in := imagegraph.EnsureImageStreamTagNode(g, 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 }