@@ -857,26 +857,36 @@ def _run(args):
857
857
858
858
#
859
859
# docker and kube scenarios
860
- def build_and_push_docker_image (build_args , docker_package , build_ydbd , image , force_rebuild ):
860
+ def build_docker_image (build_args , docker_package , build_ydbd , image , force_rebuild ):
861
861
if docker_package is None :
862
862
docker_package = docker .DOCKER_IMAGE_YDBD_PACKAGE_SPEC
863
863
864
864
logger .debug (f'using docker package spec: { docker_package } ' )
865
865
866
866
image_details = docker .docker_inspect (image )
867
+ output_path = docker .get_image_output_path (image )
867
868
868
869
if image_details is None :
869
870
logger .debug ('ydb image %s is not present on host, building' , image )
870
871
root = arcadia_root ()
871
872
ya_package_docker (root , build_args , docker_package , image )
873
+ docker .docker_image_save (image , output_path , True )
872
874
elif force_rebuild :
873
875
logger .debug ('ydb image %s is already present on host, rebuilding' , image )
874
876
root = arcadia_root ()
875
877
ya_package_docker (root , build_args , docker_package , image )
878
+ docker .docker_image_save (image , output_path , True )
876
879
else :
877
880
logger .debug ('ydb image %s is already present on host, using existing image' , image )
881
+ docker .docker_image_save (image , output_path , False )
878
882
879
- docker .docker_push (image )
883
+
884
+ def push_docker_image (image ):
885
+ image_details = docker .docker_inspect (image )
886
+ if image_details is not None :
887
+ docker .docker_push (image )
888
+ else :
889
+ logger .error ('ydb image %s is not present on host, skip' , image )
880
890
881
891
882
892
def add_arguments_docker_build_with_remainder (mode , add_force_rebuild = False ):
@@ -908,13 +918,24 @@ def add_arguments_docker_build_with_remainder(mode, add_force_rebuild=False):
908
918
)
909
919
910
920
921
+ def add_arguments_docker_push_with_remainder (mode ):
922
+ group = mode .add_argument_group ('docker push options' )
923
+ group .add_argument (
924
+ '-i' , '--image' ,
925
+ help = 'Optional: docker image name and tag to push. Conflicts with "-t" argument.' ,
926
+ )
927
+ group .add_argument (
928
+ '-t' , '--tag' ,
929
+ help = 'Optional: docker image tag to push. Conflicts with "-i" argument. Default is {user}-latest.' ,
930
+ )
931
+
932
+
911
933
def add_docker_build_mode (modes ):
912
934
def _run (args ):
913
935
logger .debug ("starting docker-build cmd with args '%s'" , args )
914
936
try :
915
937
image = docker .get_image_from_args (args )
916
- build_and_push_docker_image (args .build_args , args .docker_package , False , image , force_rebuild = True )
917
-
938
+ build_docker_image (args .build_args , args .docker_package , False , image , True )
918
939
logger .info ('docker-build finished' )
919
940
except RuntimeError as e :
920
941
logger .error (e .args [0 ])
@@ -929,6 +950,26 @@ def _run(args):
929
950
mode .set_defaults (handler = _run )
930
951
931
952
953
+ def add_docker_push_mode (modes ):
954
+ def _run (args ):
955
+ logger .debug ("starting docker-push cmd with args '%s'" , args )
956
+ try :
957
+ image = docker .get_image_from_args (args )
958
+ push_docker_image (image )
959
+ logger .info ('docker-push finished' )
960
+ except RuntimeError as e :
961
+ logger .error (e .args [0 ])
962
+ sys .exit (1 )
963
+
964
+ mode = modes .add_parser (
965
+ "docker-push" ,
966
+ parents = [],
967
+ description = "Push YDB docker image."
968
+ )
969
+ add_arguments_docker_push_with_remainder (mode )
970
+ mode .set_defaults (handler = _run )
971
+
972
+
932
973
def add_kube_generate_mode (modes ):
933
974
def _run (args ):
934
975
logger .debug ("starting kube-generate cmd with args '%s'" , args )
@@ -989,11 +1030,11 @@ def _run(args):
989
1030
try :
990
1031
image = docker .get_image_from_args (args )
991
1032
if not args .use_prebuilt_image :
992
- build_and_push_docker_image (args .build_args , args .docker_package , False , image , force_rebuild = args .force_rebuild )
1033
+ build_docker_image (args .build_args , args .docker_package , False , image , args .force_rebuild )
993
1034
994
1035
manifests = kube_handlers .get_all_manifests (args .path )
995
1036
kube_handlers .manifests_ydb_set_image (args .path , manifests , image )
996
- kube_handlers .slice_install (args .path , manifests , args .wait_ready , args .dynamic_config_type )
1037
+ kube_handlers .slice_install (args .path , manifests , args .wait_ready , args .dynamic_config_type , image , args . use_prebuilt_image )
997
1038
998
1039
logger .info ('kube-install finished' )
999
1040
except RuntimeError as e :
@@ -1036,12 +1077,12 @@ def _run(args):
1036
1077
try :
1037
1078
image = docker .get_image_from_args (args )
1038
1079
if not args .use_prebuilt_image :
1039
- build_and_push_docker_image (args .build_args , args .docker_package , False , image , force_rebuild = args .force_rebuild )
1080
+ build_docker_image (args .build_args , args .docker_package , False , image , args .force_rebuild )
1040
1081
1041
1082
manifests = kube_handlers .get_all_manifests (args .path )
1042
1083
manifests = kube_handlers .manifests_ydb_filter_components (args .path , manifests , args .components )
1043
1084
kube_handlers .manifests_ydb_set_image (args .path , manifests , image )
1044
- kube_handlers .slice_update (args .path , manifests , args .wait_ready , args .dynamic_config_type )
1085
+ kube_handlers .slice_update (args .path , manifests , args .wait_ready , args .dynamic_config_type , image , args . use_prebuilt_image )
1045
1086
1046
1087
logger .info ('kube-update finished' )
1047
1088
except RuntimeError as e :
@@ -1368,6 +1409,7 @@ def main(walle_provider=None):
1368
1409
add_sample_config_mode (modes )
1369
1410
1370
1411
add_docker_build_mode (modes )
1412
+ add_docker_push_mode (modes )
1371
1413
add_kube_generate_mode (modes )
1372
1414
add_kube_install_mode (modes )
1373
1415
add_kube_update_mode (modes )
0 commit comments