3636DEFAULT_REMAIN_TIME = environ .get ('REMAIN_TIME' , 30 * 24 * 3600 )
3737
3838
39+ class Repo :
40+
41+ def __init__ (self , repo_name , tags ):
42+ self .repo_name = repo_name
43+ self .tags = tags
44+
45+
46+ class Image :
47+
48+ def __init__ (self , repo_name , tag , digest ):
49+ self .repo_name = repo_name
50+ self .tag = tag
51+ self .digest = digest
52+
53+ def __str__ (self ):
54+ return "{%s, %s, %s}" % (self .repo_name , self .tag , self .digest )
55+
56+
3957def _time_during (ts1 , ts2 , t ):
4058 total_seconds = (datetime .fromtimestamp (ts1 ) -
4159 datetime .fromtimestamp (ts2 )).total_seconds ()
@@ -118,25 +136,7 @@ def _token_url(auth_head):
118136 return token_url
119137
120138
121- class Repo :
122-
123- def __init__ (self , repo_name , tags ):
124- self .repo_name = repo_name
125- self .tags = tags
126-
127-
128- class Image :
129-
130- def __init__ (self , repo_name , tag , digest ):
131- self .repo_name = repo_name
132- self .tag = tag
133- self .digest = digest
134-
135- def __str__ (self ):
136- return "{%s, %s, %s}" % (self .repo_name , self .tag , self .digest )
137-
138-
139- def _repos_in_registry (session ):
139+ def _registry_repos (session ):
140140 repo_url = REPOS_URL_TEMPLATE % registry_host
141141 resp = _request (session , 'GET' , repo_url )
142142 if resp is None :
@@ -157,7 +157,7 @@ def _digest_from_tag(session, repo, tag):
157157 return resp .headers .get ('Docker-Content-Digest' )
158158
159159
160- def _images_in_repo (session , repo ):
160+ def _repo_images (session , repo ):
161161 tags_url = TAGS_URL_TEMPLATE % (registry_host , repo )
162162 resp = _request (session , 'GET' , tags_url )
163163 if resp is None :
@@ -194,49 +194,45 @@ def _image_timestamp(image):
194194 return 0
195195
196196
197- def _image_delete (session , image ):
197+ def _delete_image (session , image ):
198198 info ("Deleting image: %s" , image )
199199 manifest_url = MANIFEST_URL_TEMPLATE % (
200200 registry_host , image .repo_name , image .digest )
201201 resp = _request (session , 'DELETE' , manifest_url )
202202 info ("Delete image(%s) result:%s " , image , resp )
203203
204204
205- def repo_tags_inorder (session , repo ):
206- images = _images_in_repo (session , repo )
205+ def ordered_images (session , repo ):
206+ images = _repo_images (session , repo )
207207 times_images = {}
208- index = 0
209208 for image in images :
210209 timestamp = _image_timestamp (image )
211- if timestamp == 0 :
212- timestamp = index
213- index += 1
214- times_images [str (timestamp )+ image .tag ] = image
210+ times_images [str (timestamp ) + image .tag ] = image
215211 return sort_map_values (times_images )
216212
217213
218- def repo_tag_delete (session , repo , tag ):
214+ def delete_image_tag (session , repo , tag ):
219215 digest = _digest_from_tag (session , repo , tag )
220216 if digest == '' :
221217 error ('no such repo or repo has no such tag' )
222218 return
223219 image = Image (repo , tag , digest )
224- _image_delete (session , image )
220+ _delete_image (session , image )
225221
226222
227- def repo_delete (session , repo ):
223+ def delete_repo (session , repo ):
228224 info ('start delete repo:%s!' , repo )
229- images = _images_in_repo (session , repo )
225+ images = _repo_images (session , repo )
230226 for image in images :
231- _image_delete (session , image )
227+ _delete_image (session , image )
232228 info ('delete repo:%s over!' , repo )
233229
234230
235- def expired_repo_clear (session , repo , repo_remain , time_remain ):
231+ def clear_expired_repo (session , repo , repo_remain , time_remain ):
236232 info ('----------------------------' )
237233 info ('Start clean registry repo %s' , repo )
238234 try :
239- images = _images_in_repo (session , repo )
235+ images = _repo_images (session , repo )
240236 if len (images ) <= repo_remain :
241237 return
242238 meta_images_map = {}
@@ -247,10 +243,9 @@ def expired_repo_clear(session, repo, repo_remain, time_remain):
247243 timestamp = _image_timestamp (image )
248244 if timestamp == 0 :
249245 if image .tag .find ('-config-' ) > 0 :
250- info ("Deleting special config image: %s" , image )
251- _image_delete (session , image )
246+ info ("specific config image: %s" , image )
247+ _delete_image (session , image )
252248 continue
253-
254249 if (_time_during (now , timestamp , time_remain )):
255250 continue
256251 if image .tag .startswith (META ):
@@ -265,25 +260,25 @@ def expired_repo_clear(session, repo, repo_remain, time_remain):
265260 rels_images = sort_map_values (rels_images_map )
266261
267262 for image in prep_images [repo_remain :]:
268- _image_delete (session , image )
263+ _delete_image (session , image )
269264 for image in meta_images [repo_remain :]:
270- _image_delete (session , image )
265+ _delete_image (session , image )
271266 for image in rels_images [repo_remain :]:
272- _image_delete (session , image )
267+ _delete_image (session , image )
273268 except Exception as e :
274269 error ('Clean registry failed! error:%s' , str (e ))
275270 finally :
276271 info ('Clean registry repo %s over' , repo )
277272
278273
279- def expired_all_repos_clear (session , repo_remain , time_remain ):
274+ def clear_all_expired_repos (session , repo_remain , time_remain ):
280275 info ('Start clean registry' )
281276 info ('============================' )
282- repos = _repos_in_registry (session )
277+ repos = _registry_repos (session )
283278 if not isinstance (repos , list ) or len (repos ) == 0 :
284279 return
285280 for repo in repos :
286- expired_repo_clear (session , repo , repo_remain , time_remain )
281+ clear_expired_repo (session , repo , repo_remain , time_remain )
287282 info ('============================' )
288283 info ('Clean registry over' )
289284
@@ -297,7 +292,7 @@ class Registry(TwoLevelCommandBase):
297292
298293 @classmethod
299294 def subcommands (self ):
300- return [self .list , self .clean , self .delete ]
295+ return [self .list , self .delete , self .clean ]
301296
302297 @classmethod
303298 def namespace (self ):
@@ -310,18 +305,18 @@ def help_message(self):
310305 @classmethod
311306 @arg ('-t' , '--target' , required = False , help = "target repository in registry" )
312307 @arg ('-s' , '--sort' , required = False , help = "return results in order" )
313- def list (self , target = "all" , sort = True ):
308+ def list (self , target = "all" , sort = False ):
314309 session = requests .Session ()
315310 self ._update_domain ()
316311 if target == "all" :
317- repos = _repos_in_registry (session )
312+ repos = _registry_repos (session )
318313 for repo in repos :
319314 info (repo )
320315 else :
321316 if sort :
322- images = repo_tags_inorder (session , target )
317+ images = ordered_images (session , target )
323318 else :
324- images = _images_in_repo (session , target )
319+ images = _repo_images (session , target )
325320 for image in images :
326321 info ('%s' , image )
327322
@@ -332,9 +327,9 @@ def delete(self, repo='', tag=''):
332327 session = requests .Session ()
333328 self ._update_domain ()
334329 if tag != '' :
335- repo_tag_delete (session , repo , tag )
330+ delete_image_tag (session , repo , tag )
336331 else :
337- repo_delete (session , repo )
332+ delete_repo (session , repo )
338333
339334 @classmethod
340335 @arg ('-t' , '--target' , required = False , help = "clean target repository in registry" )
@@ -348,9 +343,9 @@ def clean(self, num=20, time=DEFAULT_REMAIN_TIME, target="all"):
348343 if time < 1 :
349344 raise CommandError ("time must bigger than 0" )
350345 if target == "all" :
351- expired_all_repos_clear (session , num , time )
346+ clear_all_expired_repos (session , num , time )
352347 else :
353- expired_repo_clear (session , target , num , time )
348+ clear_expired_repo (session , target , num , time )
354349
355350 @classmethod
356351 def _update_domain (self ):
0 commit comments