@@ -478,7 +478,7 @@ def tag_latest(feat, docker_id, image_ver):
478
478
else :
479
479
log_error (err )
480
480
elif ret == - 1 :
481
- ret = 0
481
+ log_debug ( out )
482
482
else :
483
483
log_error (err )
484
484
return ret
@@ -487,45 +487,52 @@ def _do_clean(feat, current_version, last_version):
487
487
err = ""
488
488
out = ""
489
489
ret = 0
490
- DOCKER_ID = "docker_id "
490
+ IMAGE_ID = "image_id "
491
491
REPO = "repo"
492
492
_ , image_info , err = _run_command ("docker images |grep {} |grep -v latest |awk '{{print $1,$2,$3}}'" .format (feat ))
493
493
if image_info :
494
- version_dict = {}
495
- version_dict_default = {}
494
+ remote_image_version_dict = {}
495
+ local_image_version_dict = {}
496
496
for info in image_info .split ("\n " ):
497
- rep , version , docker_id = info .split ()
497
+ rep , version , image_id = info .split ()
498
498
if len (rep .split ("/" )) == 1 :
499
- version_dict_default [version ] = {DOCKER_ID : docker_id , REPO : rep }
499
+ local_image_version_dict [version ] = {IMAGE_ID : image_id , REPO : rep }
500
500
else :
501
- version_dict [version ] = {DOCKER_ID : docker_id , REPO : rep }
501
+ remote_image_version_dict [version ] = {IMAGE_ID : image_id , REPO : rep }
502
502
503
- if current_version in version_dict :
504
- image_prefix = version_dict [current_version ][REPO ]
505
- del version_dict [current_version ]
503
+ if current_version in remote_image_version_dict :
504
+ image_prefix = remote_image_version_dict [current_version ][REPO ]
505
+ del remote_image_version_dict [current_version ]
506
506
else :
507
507
out = "Current version {} doesn't exist." .format (current_version )
508
508
ret = 0
509
509
return ret , out , err
510
- # should be only one item in version_dict_default
511
- for k , v in version_dict_default .items ():
512
- local_version , local_repo , local_docker_id = k , v [REPO ], v [DOCKER_ID ]
513
- tag_res , _ , err = _run_command ("docker tag {} {}:{} && docker rmi {}:{}" .format (
514
- local_docker_id , image_prefix , local_version , local_repo , local_version ))
510
+ # should be only one item in local_image_version_dict
511
+ for k , v in local_image_version_dict .items ():
512
+ local_version , local_repo , local_image_id = k , v [REPO ], v [IMAGE_ID ]
513
+ # if there is a kube image with same version, need to remove the kube version
514
+ # and tag the local version to kube version for fallback preparation
515
+ # and remove the local version
516
+ if local_version in remote_image_version_dict :
517
+ tag_res , _ , err = _run_command ("docker rmi {}:{} && docker tag {} {}:{} && docker rmi {}:{}" .format (
518
+ image_prefix , local_version , local_image_id , image_prefix , local_version , local_repo , local_version ))
519
+ # if there is no kube image with same version, just remove the local version
520
+ else :
521
+ tag_res , _ , err = _run_command ("docker rmi {}:{}" .format (local_repo , local_version ))
515
522
if tag_res == 0 :
516
523
msg = "Tag {} local version images successfully" .format (feat )
517
524
log_debug (msg )
518
525
else :
519
526
ret = 1
520
527
err = "Failed to tag {} local version images. Err: {}" .format (feat , err )
521
528
return ret , out , err
522
-
523
- if last_version in version_dict :
524
- del version_dict [last_version ]
525
-
526
- versions = [item [DOCKER_ID ] for item in version_dict .values ()]
527
- if versions :
528
- clean_res , _ , err = _run_command ("docker rmi {} --force" .format (" " .join (versions )))
529
+
530
+ if last_version in remote_image_version_dict :
531
+ del remote_image_version_dict [last_version ]
532
+
533
+ image_id_remove_list = [item [IMAGE_ID ] for item in remote_image_version_dict .values ()]
534
+ if image_id_remove_list :
535
+ clean_res , _ , err = _run_command ("docker rmi {} --force" .format (" " .join (image_id_remove_list )))
529
536
else :
530
537
clean_res = 0
531
538
if clean_res == 0 :
@@ -534,7 +541,7 @@ def _do_clean(feat, current_version, last_version):
534
541
err = "Failed to clean {} old version images. Err: {}" .format (feat , err )
535
542
ret = 1
536
543
else :
537
- err = "Failed to docker images |grep {} |awk '{{print $3}}'" .format (feat )
544
+ err = "Failed to docker images |grep {} |awk '{{print $3}}'. Error: {} " .format (feat , err )
538
545
ret = 1
539
546
540
547
return ret , out , err
0 commit comments