|
| 1 | +package graphview |
| 2 | + |
| 3 | +import ( |
| 4 | + appsedges "github.com/openshift/origin/pkg/oc/graph/appsgraph" |
| 5 | + osgraph "github.com/openshift/origin/pkg/oc/graph/genericgraph" |
| 6 | + kubeedges "github.com/openshift/origin/pkg/oc/graph/kubegraph" |
| 7 | + kubegraph "github.com/openshift/origin/pkg/oc/graph/kubegraph/nodes" |
| 8 | +) |
| 9 | + |
| 10 | +type Deployment struct { |
| 11 | + Deployment *kubegraph.DeploymentNode |
| 12 | + |
| 13 | + ActiveDeployment *kubegraph.ReplicaSetNode |
| 14 | + InactiveDeployments []*kubegraph.ReplicaSetNode |
| 15 | + |
| 16 | + Images []ImagePipeline |
| 17 | + |
| 18 | + // TODO: handle conflicting once controller refs are present, not worth it yet |
| 19 | +} |
| 20 | + |
| 21 | +// AllDeployments returns all the Deployments that aren't in the excludes set and the set of covered NodeIDs |
| 22 | +func AllDeployments(g osgraph.Graph, excludeNodeIDs IntSet) ([]Deployment, IntSet) { |
| 23 | + covered := IntSet{} |
| 24 | + views := []Deployment{} |
| 25 | + |
| 26 | + for _, uncastNode := range g.NodesByKind(kubegraph.DeploymentNodeKind) { |
| 27 | + if excludeNodeIDs.Has(uncastNode.ID()) { |
| 28 | + continue |
| 29 | + } |
| 30 | + |
| 31 | + view, covers := NewDeployment(g, uncastNode.(*kubegraph.DeploymentNode)) |
| 32 | + covered.Insert(covers.List()...) |
| 33 | + views = append(views, view) |
| 34 | + } |
| 35 | + |
| 36 | + return views, covered |
| 37 | +} |
| 38 | + |
| 39 | +// NewDeployment returns the Deployment and a set of all the NodeIDs covered by the Deployment |
| 40 | +func NewDeployment(g osgraph.Graph, node *kubegraph.DeploymentNode) (Deployment, IntSet) { |
| 41 | + covered := IntSet{} |
| 42 | + covered.Insert(node.ID()) |
| 43 | + |
| 44 | + view := Deployment{} |
| 45 | + view.Deployment = node |
| 46 | + |
| 47 | + for _, istNode := range g.PredecessorNodesByEdgeKind(node, kubeedges.TriggersDeploymentEdgeKind) { |
| 48 | + imagePipeline, covers := NewImagePipelineFromImageTagLocation(g, istNode, istNode.(ImageTagLocation)) |
| 49 | + covered.Insert(covers.List()...) |
| 50 | + view.Images = append(view.Images, imagePipeline) |
| 51 | + } |
| 52 | + |
| 53 | + // for image that we use, create an image pipeline and add it to the list |
| 54 | + for _, tagNode := range g.PredecessorNodesByEdgeKind(node, appsedges.UsedInDeploymentEdgeKind) { |
| 55 | + imagePipeline, covers := NewImagePipelineFromImageTagLocation(g, tagNode, tagNode.(ImageTagLocation)) |
| 56 | + |
| 57 | + covered.Insert(covers.List()...) |
| 58 | + view.Images = append(view.Images, imagePipeline) |
| 59 | + } |
| 60 | + |
| 61 | + view.ActiveDeployment, view.InactiveDeployments = kubeedges.RelevantDeployments(g, view.Deployment) |
| 62 | + for _, rs := range view.InactiveDeployments { |
| 63 | + _, covers := NewReplicaSet(g, rs) |
| 64 | + covered.Insert(covers.List()...) |
| 65 | + } |
| 66 | + |
| 67 | + if view.ActiveDeployment != nil { |
| 68 | + _, covers := NewReplicaSet(g, view.ActiveDeployment) |
| 69 | + covered.Insert(covers.List()...) |
| 70 | + } |
| 71 | + |
| 72 | + return view, covered |
| 73 | +} |
0 commit comments