@@ -16,6 +16,7 @@ import (
16
16
osgraph "github.com/openshift/origin/pkg/api/graph"
17
17
"github.com/openshift/origin/pkg/api/graph/graphview"
18
18
kubeedges "github.com/openshift/origin/pkg/api/kubegraph"
19
+ kubeanalysis "github.com/openshift/origin/pkg/api/kubegraph/analysis"
19
20
kubegraph "github.com/openshift/origin/pkg/api/kubegraph/nodes"
20
21
buildapi "github.com/openshift/origin/pkg/build/api"
21
22
buildedges "github.com/openshift/origin/pkg/build/graph"
@@ -43,6 +44,8 @@ func (d *ProjectStatusDescriber) MakeGraph(namespace string) (osgraph.Graph, err
43
44
44
45
loaders := []GraphLoader {
45
46
& serviceLoader {namespace : namespace , lister : d .K },
47
+ & serviceAccountLoader {namespace : namespace , lister : d .K },
48
+ & secretLoader {namespace : namespace , lister : d .K },
46
49
& rcLoader {namespace : namespace , lister : d .K },
47
50
& podLoader {namespace : namespace , lister : d .K },
48
51
& bcLoader {namespace : namespace , lister : d .C },
@@ -71,6 +74,9 @@ func (d *ProjectStatusDescriber) MakeGraph(namespace string) (osgraph.Graph, err
71
74
deployedges .AddAllTriggerEdges (g )
72
75
deployedges .AddAllDeploymentEdges (g )
73
76
imageedges .AddAllImageStreamRefEdges (g )
77
+ kubeedges .AddAllRequestedServiceAccountEdges (g )
78
+ kubeedges .AddAllMountableSecretEdges (g )
79
+ kubeedges .AddAllMountedSecretEdges (g )
74
80
75
81
return g , nil
76
82
}
@@ -154,6 +160,9 @@ func (d *ProjectStatusDescriber) Describe(namespace, name string) (string, error
154
160
if hasUnresolvedImageStreamTag (g ) {
155
161
fmt .Fprintln (out , "Warning: Some of your builds are pointing to image streams, but the administrator has not configured the integrated Docker registry (oadm registry)." )
156
162
}
163
+ if lines , _ := describeBadPodSpecs (out , g ); len (lines ) > 0 {
164
+ fmt .Fprintln (out , strings .Join (lines , "\n " ))
165
+ }
157
166
158
167
fmt .Fprintln (out , "To see more, use 'oc describe service <name>' or 'oc describe dc <name>'." )
159
168
fmt .Fprintln (out , "You can use 'oc get all' to see a list of other objects." )
@@ -179,6 +188,50 @@ func hasUnresolvedImageStreamTag(g osgraph.Graph) bool {
179
188
return false
180
189
}
181
190
191
+ func describeBadPodSpecs (out io.Writer , g osgraph.Graph ) ([]string , []* kubegraph.SecretNode ) {
192
+ allMissingSecrets := []* kubegraph.SecretNode {}
193
+ lines := []string {}
194
+
195
+ for _ , uncastPodSpec := range g .NodesByKind (kubegraph .PodSpecNodeKind ) {
196
+ podSpecNode := uncastPodSpec .(* kubegraph.PodSpecNode )
197
+ unmountableSecrets , missingSecrets := kubeanalysis .CheckMountedSecrets (g , podSpecNode )
198
+ containingNode := osgraph .GetTopLevelContainerNode (g , podSpecNode )
199
+
200
+ allMissingSecrets = append (allMissingSecrets , missingSecrets ... )
201
+
202
+ unmountableNames := []string {}
203
+ for _ , secret := range unmountableSecrets {
204
+ unmountableNames = append (unmountableNames , secret .ResourceString ())
205
+ }
206
+
207
+ missingNames := []string {}
208
+ for _ , secret := range missingSecrets {
209
+ missingNames = append (missingNames , secret .ResourceString ())
210
+ }
211
+
212
+ containingNodeName := g .GraphDescriber .Name (containingNode )
213
+ if resourceNode , ok := containingNode .(osgraph.ResourceNode ); ok {
214
+ containingNodeName = resourceNode .ResourceString ()
215
+ }
216
+
217
+ switch {
218
+ case len (unmountableSecrets ) > 0 && len (missingSecrets ) > 0 :
219
+ lines = append (lines , fmt .Sprintf ("\t %s is not allowed to mount %s and wants to mount these missing secrets %s" , containingNodeName , strings .Join (unmountableNames , "," ), strings .Join (missingNames , "," )))
220
+ case len (unmountableSecrets ) > 0 :
221
+ lines = append (lines , fmt .Sprintf ("\t %s is not allowed to mount %s" , containingNodeName , strings .Join (unmountableNames , "," )))
222
+ case len (unmountableSecrets ) > 0 && len (missingSecrets ) > 0 :
223
+ lines = append (lines , fmt .Sprintf ("\t %s wants to mount these missing secrets %s" , containingNodeName , strings .Join (missingNames , "," )))
224
+ }
225
+ }
226
+
227
+ // if we had any failures, prepend the warning line
228
+ if len (lines ) > 0 {
229
+ return append ([]string {"Warning: some requested secrets are not allowed:" }, lines ... ), allMissingSecrets
230
+ }
231
+
232
+ return []string {}, allMissingSecrets
233
+ }
234
+
182
235
func printLines (out io.Writer , indent string , depth int , lines ... string ) {
183
236
for i , s := range lines {
184
237
fmt .Fprintf (out , strings .Repeat (indent , depth ))
@@ -625,14 +678,14 @@ type GraphLoader interface {
625
678
AddToGraph (g osgraph.Graph ) error
626
679
}
627
680
628
- type serviceLoader struct {
681
+ type rcLoader struct {
629
682
namespace string
630
- lister kclient.ServicesNamespacer
631
- items []kapi.Service
683
+ lister kclient.ReplicationControllersNamespacer
684
+ items []kapi.ReplicationController
632
685
}
633
686
634
- func (l * serviceLoader ) Load () error {
635
- list , err := l .lister .Services (l .namespace ).List (labels .Everything ())
687
+ func (l * rcLoader ) Load () error {
688
+ list , err := l .lister .ReplicationControllers (l .namespace ).List (labels .Everything ())
636
689
if err != nil {
637
690
return err
638
691
}
@@ -641,22 +694,22 @@ func (l *serviceLoader) Load() error {
641
694
return nil
642
695
}
643
696
644
- func (l * serviceLoader ) AddToGraph (g osgraph.Graph ) error {
697
+ func (l * rcLoader ) AddToGraph (g osgraph.Graph ) error {
645
698
for i := range l .items {
646
- kubegraph .EnsureServiceNode (g , & l .items [i ])
699
+ kubegraph .EnsureReplicationControllerNode (g , & l .items [i ])
647
700
}
648
701
649
702
return nil
650
703
}
651
704
652
- type rcLoader struct {
705
+ type serviceLoader struct {
653
706
namespace string
654
- lister kclient.ReplicationControllersNamespacer
655
- items []kapi.ReplicationController
707
+ lister kclient.ServicesNamespacer
708
+ items []kapi.Service
656
709
}
657
710
658
- func (l * rcLoader ) Load () error {
659
- list , err := l .lister .ReplicationControllers (l .namespace ).List (labels .Everything ())
711
+ func (l * serviceLoader ) Load () error {
712
+ list , err := l .lister .Services (l .namespace ).List (labels .Everything ())
660
713
if err != nil {
661
714
return err
662
715
}
@@ -665,9 +718,9 @@ func (l *rcLoader) Load() error {
665
718
return nil
666
719
}
667
720
668
- func (l * rcLoader ) AddToGraph (g osgraph.Graph ) error {
721
+ func (l * serviceLoader ) AddToGraph (g osgraph.Graph ) error {
669
722
for i := range l .items {
670
- kubegraph .EnsureReplicationControllerNode (g , & l .items [i ])
723
+ kubegraph .EnsureServiceNode (g , & l .items [i ])
671
724
}
672
725
673
726
return nil
@@ -697,6 +750,54 @@ func (l *podLoader) AddToGraph(g osgraph.Graph) error {
697
750
return nil
698
751
}
699
752
753
+ type serviceAccountLoader struct {
754
+ namespace string
755
+ lister kclient.ServiceAccountsNamespacer
756
+ items []kapi.ServiceAccount
757
+ }
758
+
759
+ func (l * serviceAccountLoader ) Load () error {
760
+ list , err := l .lister .ServiceAccounts (l .namespace ).List (labels .Everything (), fields .Everything ())
761
+ if err != nil {
762
+ return err
763
+ }
764
+
765
+ l .items = list .Items
766
+ return nil
767
+ }
768
+
769
+ func (l * serviceAccountLoader ) AddToGraph (g osgraph.Graph ) error {
770
+ for i := range l .items {
771
+ kubegraph .EnsureServiceAccountNode (g , & l .items [i ])
772
+ }
773
+
774
+ return nil
775
+ }
776
+
777
+ type secretLoader struct {
778
+ namespace string
779
+ lister kclient.SecretsNamespacer
780
+ items []kapi.Secret
781
+ }
782
+
783
+ func (l * secretLoader ) Load () error {
784
+ list , err := l .lister .Secrets (l .namespace ).List (labels .Everything (), fields .Everything ())
785
+ if err != nil {
786
+ return err
787
+ }
788
+
789
+ l .items = list .Items
790
+ return nil
791
+ }
792
+
793
+ func (l * secretLoader ) AddToGraph (g osgraph.Graph ) error {
794
+ for i := range l .items {
795
+ kubegraph .EnsureSecretNode (g , & l .items [i ])
796
+ }
797
+
798
+ return nil
799
+ }
800
+
700
801
type isLoader struct {
701
802
namespace string
702
803
lister client.ImageStreamsNamespacer
0 commit comments