Skip to content

Commit e0e0368

Browse files
committed
add support for deployments in oc status
1 parent e777abd commit e0e0368

File tree

21 files changed

+1012
-224
lines changed

21 files changed

+1012
-224
lines changed

pkg/oc/admin/prune/imageprune/prune.go

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -560,7 +560,7 @@ func (p *pruner) addDaemonSetsToGraph(dss *kapisext.DaemonSetList) []error {
560560
ds := &dss.Items[i]
561561
desc := fmt.Sprintf("DaemonSet %s", getName(ds))
562562
glog.V(4).Infof("Examining %s", desc)
563-
dsNode := appsgraph.EnsureDaemonSetNode(p.g, ds)
563+
dsNode := kubegraph.EnsureDaemonSetNode(p.g, ds)
564564
errs = append(errs, p.addPodSpecToGraph(getRef(ds), &ds.Spec.Template.Spec, dsNode)...)
565565
}
566566

@@ -578,7 +578,7 @@ func (p *pruner) addDeploymentsToGraph(dmnts *kapisext.DeploymentList) []error {
578578
d := &dmnts.Items[i]
579579
ref := getRef(d)
580580
glog.V(4).Infof("Examining %s", getKindName(ref))
581-
dNode := appsgraph.EnsureDeploymentNode(p.g, d)
581+
dNode := kubegraph.EnsureDeploymentNode(p.g, d)
582582
errs = append(errs, p.addPodSpecToGraph(ref, &d.Spec.Template.Spec, dNode)...)
583583
}
584584

@@ -615,7 +615,7 @@ func (p *pruner) addReplicaSetsToGraph(rss *kapisext.ReplicaSetList) []error {
615615
rs := &rss.Items[i]
616616
ref := getRef(rs)
617617
glog.V(4).Infof("Examining %s", getKindName(ref))
618-
rsNode := appsgraph.EnsureReplicaSetNode(p.g, rs)
618+
rsNode := kubegraph.EnsureReplicaSetNode(p.g, rs)
619619
errs = append(errs, p.addPodSpecToGraph(ref, &rs.Spec.Template.Spec, rsNode)...)
620620
}
621621

pkg/oc/cli/describe/deployments.go

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -473,12 +473,12 @@ func (d *LatestDeploymentsDescriber) Describe(namespace, name string) (string, e
473473
for i := range deployments {
474474
kubegraph.EnsureReplicationControllerNode(g, &deployments[i])
475475
}
476-
appsedges.AddTriggerEdges(g, dcNode)
477-
appsedges.AddDeploymentEdges(g, dcNode)
476+
appsedges.AddTriggerDeploymentConfigsEdges(g, dcNode)
477+
appsedges.AddDeploymentConfigsDeploymentEdges(g, dcNode)
478478
activeDeployment, inactiveDeployments := appsedges.RelevantDeployments(g, dcNode)
479479

480480
return tabbedString(func(out *tabwriter.Writer) error {
481-
descriptions := describeDeployments(f, dcNode, activeDeployment, inactiveDeployments, nil, d.count)
481+
descriptions := describeDeploymentConfigDeployments(f, dcNode, activeDeployment, inactiveDeployments, nil, d.count)
482482
for i, description := range descriptions {
483483
descriptions[i] = fmt.Sprintf("%v %v", name, description)
484484
}

pkg/oc/cli/describe/projectstatus.go

Lines changed: 189 additions & 21 deletions
Large diffs are not rendered by default.

pkg/oc/cli/describe/projectstatus_test.go

Lines changed: 20 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -328,6 +328,23 @@ func TestProjectStatus(t *testing.T) {
328328
},
329329
Time: mustParseTime("2015-04-07T04:12:25Z"),
330330
},
331+
"with deployment": {
332+
File: "deployment.yaml",
333+
ErrFn: func(err error) bool { return err == nil },
334+
Extra: []runtime.Object{
335+
&projectapi.Project{
336+
ObjectMeta: metav1.ObjectMeta{Name: "example", Namespace: ""},
337+
},
338+
},
339+
Contains: []string{
340+
"In project example on server https://example.com:8443\n",
341+
"svc/ruby-deploy",
342+
"deployment/ruby-deploy deploys istag/ruby-deploy:latest <-",
343+
"bc/ruby-deploy source builds https://github.com/openshift/ruby-ex.git on istag/ruby-22-centos7:latest",
344+
"not built yet",
345+
},
346+
Time: mustParseTime("2015-04-07T04:12:25Z"),
347+
},
331348
"with stateful sets": {
332349
File: "statefulset.yaml",
333350
Extra: []runtime.Object{
@@ -339,7 +356,8 @@ func TestProjectStatus(t *testing.T) {
339356
Contains: []string{
340357
"In project example on server https://example.com:8443\n",
341358
"svc/galera (headless):3306",
342-
"statefulset/mysql manages erkules/galera:basic, created less than a second ago - 3 pods",
359+
"statefulset/mysql manages erkules/galera:basic",
360+
"created less than a second ago - 3 pods",
343361
"* pod/mysql-1 has restarted 7 times",
344362
},
345363
Time: mustParseTime("2015-04-07T04:12:25Z"),
@@ -458,6 +476,7 @@ func TestProjectStatus(t *testing.T) {
458476
LogsCommandName: "oc logs -p",
459477
SecurityPolicyCommandFormat: "policycommand %s %s",
460478
}
479+
t.Logf("describing %q ...", test.File)
461480
out, err := d.Describe("example", "")
462481
if !test.ErrFn(err) {
463482
t.Errorf("%s: unexpected error: %v", k, err)

pkg/oc/graph/appsgraph/analysis/dc_test.go

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,7 @@ func TestMissingImageStreamTag(t *testing.T) {
1616
t.Fatalf("unexpected error: %v", err)
1717
}
1818
buildedges.AddAllInputOutputEdges(g)
19-
appsedges.AddAllTriggerEdges(g)
19+
appsedges.AddAllTriggerDeploymentConfigsEdges(g)
2020
imageedges.AddAllImageStreamRefEdges(g)
2121
imageedges.AddAllImageStreamImageRefEdges(g)
2222

@@ -36,7 +36,7 @@ func TestMissingImageStream(t *testing.T) {
3636
t.Fatalf("unexpected error: %v", err)
3737
}
3838
buildedges.AddAllInputOutputEdges(g)
39-
appsedges.AddAllTriggerEdges(g)
39+
appsedges.AddAllTriggerDeploymentConfigsEdges(g)
4040
imageedges.AddAllImageStreamRefEdges(g)
4141
imageedges.AddAllImageStreamImageRefEdges(g)
4242

@@ -56,7 +56,7 @@ func TestMissingReadinessProbe(t *testing.T) {
5656
t.Fatalf("unexpected error: %v", err)
5757
}
5858
buildedges.AddAllInputOutputEdges(g)
59-
appsedges.AddAllTriggerEdges(g)
59+
appsedges.AddAllTriggerDeploymentConfigsEdges(g)
6060
imageedges.AddAllImageStreamRefEdges(g)
6161

6262
markers := FindDeploymentConfigReadinessWarnings(g, osgraph.DefaultNamer, "command probe")

pkg/oc/graph/appsgraph/edge_test.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -39,7 +39,7 @@ func TestNamespaceEdgeMatching(t *testing.T) {
3939

4040
fn("ns", g)
4141
fn("other", g)
42-
AddAllDeploymentEdges(g)
42+
AddAllDeploymentConfigsDeploymentEdges(g)
4343

4444
if len(g.Edges()) != 4 {
4545
t.Fatal(g)

pkg/oc/graph/appsgraph/edges.go

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -27,8 +27,8 @@ const (
2727
VolumeClaimEdgeKind = "VolumeClaim"
2828
)
2929

30-
// AddTriggerEdges creates edges that point to named Docker image repositories for each image used in the deployment.
31-
func AddTriggerEdges(g osgraph.MutableUniqueGraph, node *appsgraph.DeploymentConfigNode) *appsgraph.DeploymentConfigNode {
30+
// AddTriggerDeploymentConfigsEdges creates edges that point to named Docker image repositories for each image used in the deployment.
31+
func AddTriggerDeploymentConfigsEdges(g osgraph.MutableUniqueGraph, node *appsgraph.DeploymentConfigNode) *appsgraph.DeploymentConfigNode {
3232
podTemplate := node.DeploymentConfig.Spec.Template
3333
if podTemplate == nil {
3434
return node
@@ -60,15 +60,15 @@ func AddTriggerEdges(g osgraph.MutableUniqueGraph, node *appsgraph.DeploymentCon
6060
return node
6161
}
6262

63-
func AddAllTriggerEdges(g osgraph.MutableUniqueGraph) {
63+
func AddAllTriggerDeploymentConfigsEdges(g osgraph.MutableUniqueGraph) {
6464
for _, node := range g.(graph.Graph).Nodes() {
6565
if dcNode, ok := node.(*appsgraph.DeploymentConfigNode); ok {
66-
AddTriggerEdges(g, dcNode)
66+
AddTriggerDeploymentConfigsEdges(g, dcNode)
6767
}
6868
}
6969
}
7070

71-
func AddDeploymentEdges(g osgraph.MutableUniqueGraph, node *appsgraph.DeploymentConfigNode) *appsgraph.DeploymentConfigNode {
71+
func AddDeploymentConfigsDeploymentEdges(g osgraph.MutableUniqueGraph, node *appsgraph.DeploymentConfigNode) *appsgraph.DeploymentConfigNode {
7272
for _, n := range g.(graph.Graph).Nodes() {
7373
if rcNode, ok := n.(*kubegraph.ReplicationControllerNode); ok {
7474
if rcNode.ReplicationController.Namespace != node.DeploymentConfig.Namespace {
@@ -84,10 +84,10 @@ func AddDeploymentEdges(g osgraph.MutableUniqueGraph, node *appsgraph.Deployment
8484
return node
8585
}
8686

87-
func AddAllDeploymentEdges(g osgraph.MutableUniqueGraph) {
87+
func AddAllDeploymentConfigsDeploymentEdges(g osgraph.MutableUniqueGraph) {
8888
for _, node := range g.(graph.Graph).Nodes() {
8989
if dcNode, ok := node.(*appsgraph.DeploymentConfigNode); ok {
90-
AddDeploymentEdges(g, dcNode)
90+
AddDeploymentConfigsDeploymentEdges(g, dcNode)
9191
}
9292
}
9393
}

pkg/oc/graph/appsgraph/nodes/nodes.go

Lines changed: 0 additions & 83 deletions
Original file line numberDiff line numberDiff line change
@@ -3,67 +3,11 @@ package nodes
33
import (
44
"github.com/gonum/graph"
55

6-
kapisext "k8s.io/kubernetes/pkg/apis/extensions"
7-
86
appsapi "github.com/openshift/origin/pkg/apps/apis/apps"
97
osgraph "github.com/openshift/origin/pkg/oc/graph/genericgraph"
108
kubegraph "github.com/openshift/origin/pkg/oc/graph/kubegraph/nodes"
119
)
1210

13-
// EnsureDaemonSetNode adds the provided daemon set to the graph if it does not exist
14-
func EnsureDaemonSetNode(g osgraph.MutableUniqueGraph, ds *kapisext.DaemonSet) *DaemonSetNode {
15-
dsName := DaemonSetNodeName(ds)
16-
dsNode := osgraph.EnsureUnique(
17-
g,
18-
dsName,
19-
func(node osgraph.Node) graph.Node {
20-
return &DaemonSetNode{Node: node, DaemonSet: ds, IsFound: true}
21-
},
22-
).(*DaemonSetNode)
23-
24-
podTemplateSpecNode := kubegraph.EnsurePodTemplateSpecNode(g, &ds.Spec.Template, ds.Namespace, dsName)
25-
g.AddEdge(dsNode, podTemplateSpecNode, osgraph.ContainsEdgeKind)
26-
27-
return dsNode
28-
}
29-
30-
func FindOrCreateSyntheticDaemonSetNode(g osgraph.MutableUniqueGraph, ds *kapisext.DaemonSet) *DaemonSetNode {
31-
return osgraph.EnsureUnique(
32-
g,
33-
DaemonSetNodeName(ds),
34-
func(node osgraph.Node) graph.Node {
35-
return &DaemonSetNode{Node: node, DaemonSet: ds, IsFound: false}
36-
},
37-
).(*DaemonSetNode)
38-
}
39-
40-
// EnsureDeploymentNode adds the provided upstream deployment to the graph if it does not exist
41-
func EnsureDeploymentNode(g osgraph.MutableUniqueGraph, deployment *kapisext.Deployment) *DeploymentNode {
42-
deploymentName := DeploymentNodeName(deployment)
43-
deploymentNode := osgraph.EnsureUnique(
44-
g,
45-
deploymentName,
46-
func(node osgraph.Node) graph.Node {
47-
return &DeploymentNode{Node: node, Deployment: deployment, IsFound: true}
48-
},
49-
).(*DeploymentNode)
50-
51-
podTemplateSpecNode := kubegraph.EnsurePodTemplateSpecNode(g, &deployment.Spec.Template, deployment.Namespace, deploymentName)
52-
g.AddEdge(deploymentNode, podTemplateSpecNode, osgraph.ContainsEdgeKind)
53-
54-
return deploymentNode
55-
}
56-
57-
func FindOrCreateSyntheticDeploymentNode(g osgraph.MutableUniqueGraph, deployment *kapisext.Deployment) *DeploymentNode {
58-
return osgraph.EnsureUnique(
59-
g,
60-
DeploymentNodeName(deployment),
61-
func(node osgraph.Node) graph.Node {
62-
return &DeploymentNode{Node: node, Deployment: deployment, IsFound: false}
63-
},
64-
).(*DeploymentNode)
65-
}
66-
6711
// EnsureDeploymentConfigNode adds the provided deployment config to the graph if it does not exist
6812
func EnsureDeploymentConfigNode(g osgraph.MutableUniqueGraph, dc *appsapi.DeploymentConfig) *DeploymentConfigNode {
6913
dcName := DeploymentConfigNodeName(dc)
@@ -92,30 +36,3 @@ func FindOrCreateSyntheticDeploymentConfigNode(g osgraph.MutableUniqueGraph, dc
9236
},
9337
).(*DeploymentConfigNode)
9438
}
95-
96-
// EnsureReplicaSetNode adds the provided replica set to the graph if it does not exist
97-
func EnsureReplicaSetNode(g osgraph.MutableUniqueGraph, rs *kapisext.ReplicaSet) *ReplicaSetNode {
98-
rsName := ReplicaSetNodeName(rs)
99-
rsNode := osgraph.EnsureUnique(
100-
g,
101-
rsName,
102-
func(node osgraph.Node) graph.Node {
103-
return &ReplicaSetNode{Node: node, ReplicaSet: rs, IsFound: true}
104-
},
105-
).(*ReplicaSetNode)
106-
107-
podTemplateSpecNode := kubegraph.EnsurePodTemplateSpecNode(g, &rs.Spec.Template, rs.Namespace, rsName)
108-
g.AddEdge(rsNode, podTemplateSpecNode, osgraph.ContainsEdgeKind)
109-
110-
return rsNode
111-
}
112-
113-
func FindOrCreateSyntheticReplicaSetNode(g osgraph.MutableUniqueGraph, rs *kapisext.ReplicaSet) *ReplicaSetNode {
114-
return osgraph.EnsureUnique(
115-
g,
116-
ReplicaSetNodeName(rs),
117-
func(node osgraph.Node) graph.Node {
118-
return &ReplicaSetNode{Node: node, ReplicaSet: rs, IsFound: false}
119-
},
120-
).(*ReplicaSetNode)
121-
}

pkg/oc/graph/appsgraph/nodes/types.go

Lines changed: 0 additions & 86 deletions
Original file line numberDiff line numberDiff line change
@@ -3,73 +3,14 @@ package nodes
33
import (
44
"reflect"
55

6-
kapisext "k8s.io/kubernetes/pkg/apis/extensions"
7-
86
appsapi "github.com/openshift/origin/pkg/apps/apis/apps"
97
osgraph "github.com/openshift/origin/pkg/oc/graph/genericgraph"
108
)
119

1210
var (
13-
DaemonSetNodeKind = reflect.TypeOf(kapisext.DaemonSet{}).Name()
14-
DeploymentNodeKind = reflect.TypeOf(kapisext.Deployment{}).Name()
1511
DeploymentConfigNodeKind = reflect.TypeOf(appsapi.DeploymentConfig{}).Name()
16-
ReplicaSetNodeKind = reflect.TypeOf(kapisext.ReplicaSet{}).Name()
1712
)
1813

19-
func DaemonSetNodeName(o *kapisext.DaemonSet) osgraph.UniqueName {
20-
return osgraph.GetUniqueRuntimeObjectNodeName(DaemonSetNodeKind, o)
21-
}
22-
23-
type DaemonSetNode struct {
24-
osgraph.Node
25-
DaemonSet *kapisext.DaemonSet
26-
27-
IsFound bool
28-
}
29-
30-
func (n DaemonSetNode) Found() bool {
31-
return n.IsFound
32-
}
33-
34-
func (n DaemonSetNode) Object() interface{} {
35-
return n.DaemonSet
36-
}
37-
38-
func (n DaemonSetNode) String() string {
39-
return string(DaemonSetNodeName(n.DaemonSet))
40-
}
41-
42-
func (*DaemonSetNode) Kind() string {
43-
return DaemonSetNodeKind
44-
}
45-
46-
func DeploymentNodeName(o *kapisext.Deployment) osgraph.UniqueName {
47-
return osgraph.GetUniqueRuntimeObjectNodeName(DeploymentNodeKind, o)
48-
}
49-
50-
type DeploymentNode struct {
51-
osgraph.Node
52-
Deployment *kapisext.Deployment
53-
54-
IsFound bool
55-
}
56-
57-
func (n DeploymentNode) Found() bool {
58-
return n.IsFound
59-
}
60-
61-
func (n DeploymentNode) Object() interface{} {
62-
return n.Deployment
63-
}
64-
65-
func (n DeploymentNode) String() string {
66-
return string(DeploymentNodeName(n.Deployment))
67-
}
68-
69-
func (*DeploymentNode) Kind() string {
70-
return DeploymentNodeKind
71-
}
72-
7314
func DeploymentConfigNodeName(o *appsapi.DeploymentConfig) osgraph.UniqueName {
7415
return osgraph.GetUniqueRuntimeObjectNodeName(DeploymentConfigNodeKind, o)
7516
}
@@ -96,30 +37,3 @@ func (n DeploymentConfigNode) String() string {
9637
func (*DeploymentConfigNode) Kind() string {
9738
return DeploymentConfigNodeKind
9839
}
99-
100-
func ReplicaSetNodeName(o *kapisext.ReplicaSet) osgraph.UniqueName {
101-
return osgraph.GetUniqueRuntimeObjectNodeName(ReplicaSetNodeKind, o)
102-
}
103-
104-
type ReplicaSetNode struct {
105-
osgraph.Node
106-
ReplicaSet *kapisext.ReplicaSet
107-
108-
IsFound bool
109-
}
110-
111-
func (n ReplicaSetNode) Found() bool {
112-
return n.IsFound
113-
}
114-
115-
func (n ReplicaSetNode) Object() interface{} {
116-
return n.ReplicaSet
117-
}
118-
119-
func (n ReplicaSetNode) String() string {
120-
return string(ReplicaSetNodeName(n.ReplicaSet))
121-
}
122-
123-
func (*ReplicaSetNode) Kind() string {
124-
return ReplicaSetNodeKind
125-
}

pkg/oc/graph/genericgraph/graphview/dc_pipeline.go

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@ import (
1010
)
1111

1212
type DeploymentConfigPipeline struct {
13-
Deployment *appsgraph.DeploymentConfigNode
13+
DeploymentConfig *appsgraph.DeploymentConfigNode
1414

1515
ActiveDeployment *kubegraph.ReplicationControllerNode
1616
InactiveDeployments []*kubegraph.ReplicationControllerNode
@@ -43,7 +43,7 @@ func NewDeploymentConfigPipeline(g osgraph.Graph, dcNode *appsgraph.DeploymentCo
4343
covered.Insert(dcNode.ID())
4444

4545
dcPipeline := DeploymentConfigPipeline{}
46-
dcPipeline.Deployment = dcNode
46+
dcPipeline.DeploymentConfig = dcNode
4747

4848
// for everything that can trigger a deployment, create an image pipeline and add it to the list
4949
for _, istNode := range g.PredecessorNodesByEdgeKind(dcNode, appsedges.TriggersDeploymentEdgeKind) {
@@ -80,5 +80,5 @@ type SortedDeploymentConfigPipeline []DeploymentConfigPipeline
8080
func (m SortedDeploymentConfigPipeline) Len() int { return len(m) }
8181
func (m SortedDeploymentConfigPipeline) Swap(i, j int) { m[i], m[j] = m[j], m[i] }
8282
func (m SortedDeploymentConfigPipeline) Less(i, j int) bool {
83-
return CompareObjectMeta(&m[i].Deployment.DeploymentConfig.ObjectMeta, &m[j].Deployment.DeploymentConfig.ObjectMeta)
83+
return CompareObjectMeta(&m[i].DeploymentConfig.DeploymentConfig.ObjectMeta, &m[j].DeploymentConfig.DeploymentConfig.ObjectMeta)
8484
}

0 commit comments

Comments
 (0)