@@ -6,15 +6,18 @@ import (
6
6
"net/http"
7
7
"reflect"
8
8
"sort"
9
+ "strings"
9
10
"time"
10
11
11
12
"github.com/docker/distribution/manifest/schema2"
12
13
"github.com/docker/distribution/registry/api/errcode"
13
14
"github.com/golang/glog"
14
15
gonum "github.com/gonum/graph"
15
16
17
+ kmeta "k8s.io/apimachinery/pkg/api/meta"
16
18
"k8s.io/apimachinery/pkg/api/resource"
17
19
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
20
+ "k8s.io/apimachinery/pkg/runtime"
18
21
kerrors "k8s.io/apimachinery/pkg/util/errors"
19
22
"k8s.io/apimachinery/pkg/util/sets"
20
23
kapi "k8s.io/kubernetes/pkg/api"
@@ -377,7 +380,7 @@ func addImageStreamsToGraph(g graph.Graph, streams *imageapi.ImageStreamList, li
377
380
for i := range streams .Items {
378
381
stream := & streams .Items [i ]
379
382
380
- glog .V (4 ).Infof ("Examining ImageStream %s/%s " , stream . Namespace , stream . Name )
383
+ glog .V (4 ).Infof ("Examining ImageStream %s" , getName ( stream ) )
381
384
382
385
// use a weak reference for old image revisions by default
383
386
oldImageRevisionReferenceKind := WeakReferencedImageEdgeKind
@@ -388,7 +391,7 @@ func addImageStreamsToGraph(g graph.Graph, streams *imageapi.ImageStreamList, li
388
391
oldImageRevisionReferenceKind = ReferencedImageEdgeKind
389
392
}
390
393
391
- glog .V (4 ).Infof ("Adding ImageStream %s/%s to graph" , stream . Namespace , stream . Name )
394
+ glog .V (4 ).Infof ("Adding ImageStream %s to graph" , getName ( stream ) )
392
395
isNode := imagegraph .EnsureImageStreamNode (g , stream )
393
396
imageStreamNode := isNode .(* imagegraph.ImageStreamNode )
394
397
@@ -415,7 +418,7 @@ func addImageStreamsToGraph(g graph.Graph, streams *imageapi.ImageStreamList, li
415
418
}
416
419
}
417
420
418
- glog .V (4 ).Infof ("Checking for existing strong reference from stream %s/%s to image %s" , stream . Namespace , stream . Name , imageNode .Image .Name )
421
+ glog .V (4 ).Infof ("Checking for existing strong reference from stream %s to image %s" , getName ( stream ) , imageNode .Image .Name )
419
422
if edge := g .Edge (imageStreamNode , imageNode ); edge != nil && g .EdgeKinds (edge ).Has (ReferencedImageEdgeKind ) {
420
423
glog .V (4 ).Infof ("Strong reference found" )
421
424
continue
@@ -432,7 +435,7 @@ func addImageStreamsToGraph(g graph.Graph, streams *imageapi.ImageStreamList, li
432
435
continue
433
436
}
434
437
435
- glog .V (4 ).Infof ("Adding reference from stream %q to %s" , stream . Name , cn .Describe ())
438
+ glog .V (4 ).Infof ("Adding reference from stream %s to %s" , getName ( stream ) , cn .Describe ())
436
439
if cn .Type == imagegraph .ImageComponentTypeConfig {
437
440
g .AddEdge (imageStreamNode , s , ReferencedImageConfigEdgeKind )
438
441
} else {
@@ -447,10 +450,7 @@ func addImageStreamsToGraph(g graph.Graph, streams *imageapi.ImageStreamList, li
447
450
// exceedsLimits checks if given image exceeds LimitRanges defined in ImageStream's namespace.
448
451
func exceedsLimits (is * imageapi.ImageStream , image * imageapi.Image , limits map [string ][]* kapi.LimitRange ) bool {
449
452
limitRanges , ok := limits [is .Namespace ]
450
- if ! ok {
451
- return false
452
- }
453
- if len (limitRanges ) == 0 {
453
+ if ! ok || len (limitRanges ) == 0 {
454
454
return false
455
455
}
456
456
@@ -470,8 +470,8 @@ func exceedsLimits(is *imageapi.ImageStream, image *imageapi.Image, limits map[s
470
470
}
471
471
if limitQuantity .Cmp (* imageSize ) < 0 {
472
472
// image size is larger than the permitted limit range max size
473
- glog .V (4 ).Infof ("Image %s in stream %s/%s exceeds limit %s: %v vs %v" ,
474
- image .Name , is . Namespace , is . Name , limitRange .Name , * imageSize , limitQuantity )
473
+ glog .V (4 ).Infof ("Image %s in stream %s exceeds limit %s: %v vs %v" ,
474
+ image .Name , getName ( is ) , limitRange .Name , * imageSize , limitQuantity )
475
475
return true
476
476
}
477
477
}
@@ -491,18 +491,17 @@ func addPodsToGraph(g graph.Graph, pods *kapi.PodList, algorithm pruneAlgorithm)
491
491
for i := range pods .Items {
492
492
pod := & pods .Items [i ]
493
493
494
- glog .V (4 ).Infof ("Examining pod %s/%s " , pod . Namespace , pod . Name )
494
+ glog .V (4 ).Infof ("Examining pod %s" , getName ( pod ) )
495
495
496
496
if pod .Status .Phase != kapi .PodRunning && pod .Status .Phase != kapi .PodPending {
497
497
age := metav1 .Now ().Sub (pod .CreationTimestamp .Time )
498
498
if age >= algorithm .keepYoungerThan {
499
- glog .V (4 ).Infof ("Pod %s/%s is not running or pending and age is at least minimum pruning age - skipping" , pod .Namespace , pod .Name )
500
- // not pending or running, age is at least minimum pruning age, skip
499
+ glog .V (4 ).Infof ("Pod %s is not running nor pending and age exceeds keepYoungerThan (%v) - skipping" , getName (pod ), age )
501
500
continue
502
501
}
503
502
}
504
503
505
- glog .V (4 ).Infof ("Adding pod %s/%s to graph" , pod . Namespace , pod . Name )
504
+ glog .V (4 ).Infof ("Adding pod %s to graph" , getName ( pod ) )
506
505
podNode := kubegraph .EnsurePodNode (g , pod )
507
506
508
507
addPodSpecToGraph (g , & pod .Spec , podNode )
@@ -548,7 +547,7 @@ func addPodSpecToGraph(g graph.Graph, spec *kapi.PodSpec, predecessor gonum.Node
548
547
func addReplicationControllersToGraph (g graph.Graph , rcs * kapi.ReplicationControllerList ) {
549
548
for i := range rcs .Items {
550
549
rc := & rcs .Items [i ]
551
- glog .V (4 ).Infof ("Examining replication controller %s/%s " , rc . Namespace , rc . Name )
550
+ glog .V (4 ).Infof ("Examining replication controller %s" , getName ( rc ) )
552
551
rcNode := kubegraph .EnsureReplicationControllerNode (g , rc )
553
552
addPodSpecToGraph (g , & rc .Spec .Template .Spec , rcNode )
554
553
}
@@ -562,7 +561,7 @@ func addReplicationControllersToGraph(g graph.Graph, rcs *kapi.ReplicationContro
562
561
func addDeploymentConfigsToGraph (g graph.Graph , dcs * deployapi.DeploymentConfigList ) {
563
562
for i := range dcs .Items {
564
563
dc := & dcs .Items [i ]
565
- glog .V (4 ).Infof ("Examining DeploymentConfig %s/%s " , dc . Namespace , dc . Name )
564
+ glog .V (4 ).Infof ("Examining DeploymentConfig %s" , getName ( dc ) )
566
565
dcNode := deploygraph .EnsureDeploymentConfigNode (g , dc )
567
566
addPodSpecToGraph (g , & dc .Spec .Template .Spec , dcNode )
568
567
}
@@ -574,7 +573,7 @@ func addDeploymentConfigsToGraph(g graph.Graph, dcs *deployapi.DeploymentConfigL
574
573
func addBuildConfigsToGraph (g graph.Graph , bcs * buildapi.BuildConfigList ) {
575
574
for i := range bcs .Items {
576
575
bc := & bcs .Items [i ]
577
- glog .V (4 ).Infof ("Examining BuildConfig %s/%s " , bc . Namespace , bc . Name )
576
+ glog .V (4 ).Infof ("Examining BuildConfig %s" , getName ( bc ) )
578
577
bcNode := buildgraph .EnsureBuildConfigNode (g , bc )
579
578
addBuildStrategyImageReferencesToGraph (g , bc .Spec .Strategy , bcNode )
580
579
}
@@ -586,7 +585,7 @@ func addBuildConfigsToGraph(g graph.Graph, bcs *buildapi.BuildConfigList) {
586
585
func addBuildsToGraph (g graph.Graph , builds * buildapi.BuildList ) {
587
586
for i := range builds .Items {
588
587
build := & builds .Items [i ]
589
- glog .V (4 ).Infof ("Examining build %s/%s " , build . Namespace , build . Name )
588
+ glog .V (4 ).Infof ("Examining build %s" , getName ( build ) )
590
589
buildNode := buildgraph .EnsureBuildNode (g , build )
591
590
addBuildStrategyImageReferencesToGraph (g , build .Spec .Strategy , buildNode )
592
591
}
@@ -761,7 +760,7 @@ func pruneStreams(g graph.Graph, imageNodes []*imagegraph.ImageNode, streamPrune
761
760
stream := streamNode .ImageStream
762
761
updatedTags := sets .NewString ()
763
762
764
- glog .V (4 ).Infof ("Checking if ImageStream %s/%s has references to image %s in status.tags" , stream . Namespace , stream . Name , imageNode .Image .Name )
763
+ glog .V (4 ).Infof ("Checking if ImageStream %s has references to image %s in status.tags" , getName ( stream ) , imageNode .Image .Name )
765
764
766
765
for tag , history := range stream .Status .Tags {
767
766
glog .V (4 ).Infof ("Checking tag %q" , tag )
@@ -780,7 +779,7 @@ func pruneStreams(g graph.Graph, imageNodes []*imagegraph.ImageNode, streamPrune
780
779
}
781
780
}
782
781
if len (newHistory .Items ) == 0 {
783
- glog .V (4 ).Infof ("Removing tag %q from status.tags of ImageStream %s/%s " , tag , stream . Namespace , stream . Name )
782
+ glog .V (4 ).Infof ("Removing tag %q from status.tags of ImageStream %s" , tag , getName ( stream ) )
784
783
delete (stream .Status .Tags , tag )
785
784
} else {
786
785
stream .Status .Tags [tag ] = newHistory
@@ -789,7 +788,8 @@ func pruneStreams(g graph.Graph, imageNodes []*imagegraph.ImageNode, streamPrune
789
788
790
789
updatedStream , err := streamPruner .DeleteImageStream (stream , imageNode .Image , updatedTags .List ())
791
790
if err != nil {
792
- errs = append (errs , fmt .Errorf ("error pruning image from stream: %v" , err ))
791
+ errs = append (errs , fmt .Errorf ("error removing image %s from stream %s: %v" ,
792
+ imageNode .Image .Name , getName (stream ), err ))
793
793
continue
794
794
}
795
795
@@ -806,7 +806,7 @@ func pruneImages(g graph.Graph, imageNodes []*imagegraph.ImageNode, imagePruner
806
806
807
807
for _ , imageNode := range imageNodes {
808
808
if err := imagePruner .DeleteImage (imageNode .Image ); err != nil {
809
- errs = append (errs , fmt .Errorf ("error pruning image %q: %v" , imageNode .Image .Name , err ))
809
+ errs = append (errs , fmt .Errorf ("error removing image %q: %v" , imageNode .Image .Name , err ))
810
810
}
811
811
}
812
812
@@ -904,7 +904,7 @@ func (p *pruner) Prune(
904
904
glog .V (1 ).Infof ("Using registry: %s" , registryURL )
905
905
906
906
if err := p .registryPinger .ping (registryURL ); err != nil {
907
- return fmt .Errorf ("error communicating with registry: %v" , err )
907
+ return fmt .Errorf ("error communicating with registry %s : %v" , registryURL , err )
908
908
}
909
909
910
910
prunableImageNodes , prunableImageIDs := calculatePrunableImages (p .g , imageNodes )
@@ -1001,9 +1001,9 @@ func pruneBlobs(
1001
1001
errs := []error {}
1002
1002
1003
1003
for _ , cn := range componentNodes {
1004
- glog .V (4 ).Infof ("Pruning registry=%q, blob=%q" , registryURL , cn .Component )
1005
1004
if err := blobPruner .DeleteBlob (registryClient , registryURL , cn .Component ); err != nil {
1006
- errs = append (errs , fmt .Errorf ("error pruning blob %q: %v" , cn .Component , err ))
1005
+ errs = append (errs , fmt .Errorf ("error removing blob from registry %s: blob %q: %v" ,
1006
+ registryURL , cn .Component , err ))
1007
1007
}
1008
1008
}
1009
1009
@@ -1069,7 +1069,7 @@ func NewImageStreamDeleter(streams client.ImageStreamsNamespacer) ImageStreamDel
1069
1069
}
1070
1070
1071
1071
func (p * imageStreamDeleter ) DeleteImageStream (stream * imageapi.ImageStream , image * imageapi.Image , updatedTags []string ) (* imageapi.ImageStream , error ) {
1072
- glog .V (4 ).Infof ("Updating ImageStream %s/%s " , stream . Namespace , stream . Name )
1072
+ glog .V (4 ).Infof ("Updating ImageStream %s" , getName ( stream ) )
1073
1073
glog .V (5 ).Infof ("Updated stream: %#v" , stream )
1074
1074
return p .streams .ImageStreams (stream .Namespace ).UpdateStatus (stream )
1075
1075
}
@@ -1081,14 +1081,16 @@ func deleteFromRegistry(registryClient *http.Client, url string) error {
1081
1081
deleteFunc := func (proto , url string ) error {
1082
1082
req , err := http .NewRequest ("DELETE" , url , nil )
1083
1083
if err != nil {
1084
- glog .Errorf ("Error creating request: %v" , err )
1085
- return fmt .Errorf ("error creating request: %v" , err )
1084
+ return err
1086
1085
}
1087
1086
1088
1087
glog .V (4 ).Infof ("Sending request to registry" )
1089
1088
resp , err := registryClient .Do (req )
1090
1089
if err != nil {
1091
- return fmt .Errorf ("error sending request: %v" , err )
1090
+ if proto != "https" && strings .Contains (err .Error (), "malformed HTTP response" ) {
1091
+ return fmt .Errorf ("%v.\n * Are you trying to connect to a TLS-enabled registry without TLS?" , err )
1092
+ }
1093
+ return err
1092
1094
}
1093
1095
defer resp .Body .Close ()
1094
1096
@@ -1147,7 +1149,7 @@ func NewLayerLinkDeleter() LayerLinkDeleter {
1147
1149
}
1148
1150
1149
1151
func (p * layerLinkDeleter ) DeleteLayerLink (registryClient * http.Client , registryURL , repoName , linkName string ) error {
1150
- glog .V (4 ).Infof ("Pruning registry %q, repo %q, layer link %q" , registryURL , repoName , linkName )
1152
+ glog .V (4 ).Infof ("Deleting layer link from registry %q: repo %q, layer link %q" , registryURL , repoName , linkName )
1151
1153
return deleteFromRegistry (registryClient , fmt .Sprintf ("%s/v2/%s/blobs/%s" , registryURL , repoName , linkName ))
1152
1154
}
1153
1155
@@ -1162,7 +1164,7 @@ func NewBlobDeleter() BlobDeleter {
1162
1164
}
1163
1165
1164
1166
func (p * blobDeleter ) DeleteBlob (registryClient * http.Client , registryURL , blob string ) error {
1165
- glog .V (4 ).Infof ("Pruning registry %q, blob %q" , registryURL , blob )
1167
+ glog .V (4 ).Infof ("Deleting blob from registry %q: blob %q" , registryURL , blob )
1166
1168
return deleteFromRegistry (registryClient , fmt .Sprintf ("%s/admin/blobs/%s" , registryURL , blob ))
1167
1169
}
1168
1170
@@ -1177,6 +1179,15 @@ func NewManifestDeleter() ManifestDeleter {
1177
1179
}
1178
1180
1179
1181
func (p * manifestDeleter ) DeleteManifest (registryClient * http.Client , registryURL , repoName , manifest string ) error {
1180
- glog .V (4 ).Infof ("Pruning manifest for registry %q, repo %q, manifest %q" , registryURL , repoName , manifest )
1182
+ glog .V (4 ).Infof ("Deleting manifest from registry %q: repo %q, manifest %q" , registryURL , repoName , manifest )
1181
1183
return deleteFromRegistry (registryClient , fmt .Sprintf ("%s/v2/%s/manifests/%s" , registryURL , repoName , manifest ))
1182
1184
}
1185
+
1186
+ func getName (obj runtime.Object ) string {
1187
+ accessor , err := kmeta .Accessor (obj )
1188
+ if err != nil {
1189
+ glog .V (4 ).Infof ("Error getting accessor for %#v" , obj )
1190
+ return "<unknown>"
1191
+ }
1192
+ return fmt .Sprintf ("%s/%s" , accessor .GetNamespace (), accessor .GetName ())
1193
+ }
0 commit comments