func AddAllRequestedServiceAccountEdges(g osgraph.Graph) { for _, node := range g.Nodes() { if podSpecNode, ok := node.(*kubegraph.PodSpecNode); ok { AddRequestedServiceAccountEdges(g, podSpecNode) } } }
func AddAllMountableSecretEdges(g osgraph.Graph) { for _, node := range g.Nodes() { if saNode, ok := node.(*kubegraph.ServiceAccountNode); ok { AddMountableSecretEdges(g, saNode) } } }
func AddAllMountedSecretEdges(g osgraph.Graph) { for _, node := range g.Nodes() { if podSpecNode, ok := node.(*kubegraph.PodSpecNode); ok { AddMountedSecretEdges(g, podSpecNode) } } }
func AddAllVolumeClaimEdges(g osgraph.Graph) { for _, node := range g.Nodes() { if dcNode, ok := node.(*deploygraph.DeploymentConfigNode); ok { AddVolumeClaimEdges(g, dcNode) } } }
// calculatePrunableImageComponents returns the list of prunable image components. func calculatePrunableImageComponents(g graph.Graph) []*imagegraph.ImageComponentNode { components := []*imagegraph.ImageComponentNode{} nodes := g.Nodes() for i := range nodes { cn, ok := nodes[i].(*imagegraph.ImageComponentNode) if !ok { continue } glog.V(4).Infof("Examining %v", cn) if imageComponentIsPrunable(g, cn) { glog.V(4).Infof("%v is prunable", cn) components = append(components, cn) } } return components }
// calculatePrunableLayers returns the list of prunable layers. func calculatePrunableLayers(g graph.Graph) []*imagegraph.ImageLayerNode { prunable := []*imagegraph.ImageLayerNode{} nodes := g.Nodes() for i := range nodes { layerNode, ok := nodes[i].(*imagegraph.ImageLayerNode) if !ok { continue } glog.V(4).Infof("Examining layer %q", layerNode.Layer) if layerIsPrunable(g, layerNode) { glog.V(4).Infof("Layer %q is prunable", layerNode.Layer) prunable = append(prunable, layerNode) } } return prunable }
func markParentsInGraph(g graph.Graph) { imageNodes := getImageNodes(g.Nodes()) for _, in := range imageNodes { // find image's top layer, should be just one for _, e := range g.OutboundEdges(in, ImageTopLayerEdgeKind) { layerNode, _ := e.To().(*imagegraph.ImageLayerNode) // find image's containing this layer but not being their top layer for _, ed := range g.InboundEdges(layerNode, ImageLayerEdgeKind) { childNode, _ := ed.From().(*imagegraph.ImageNode) if in.ID() == childNode.ID() { // don't add self edge, otherwise gonum/graph will panic continue } g.AddEdge(in, childNode, ParentImageEdgeKind) } // TODO: Find image's containing THIS layer being their top layer, // this happens when image contents is not being changed. // TODO: If two layers have exactly the same contents the current // mechanism might trip over that as well. We should check for // a series of layers when checking for parents. } } }