6
6
import tempfile
7
7
8
8
9
- def generate (image : str , target_registries : list = None , tags : list = None , target_image : str = None ):
9
+ def generate (image : str , source_registry : str = None , target_registries : list = None , tags : list = None ):
10
10
"""Generate a config item which will be used by `image-syncer`."""
11
- uname = os .environ .get ('DOCKER_MIRROR_REGISTRY_USERNAME' , None )
12
- passwd = os .environ .get ('DOCKER_MIRROR_REGISTRY_PASSWORD' , None )
11
+ uname_mirror = os .environ .get ('DOCKER_MIRROR_REGISTRY_USERNAME' , None )
12
+ passwd_mirror = os .environ .get ('DOCKER_MIRROR_REGISTRY_PASSWORD' , None )
13
13
14
- if uname is None or passwd is None :
14
+ if uname_mirror is None or passwd_mirror is None :
15
15
print ('ENV variable required: DOCKER_MIRROR_REGISTRY_USERNAME and DOCKER_MIRROR_REGISTRY_PASSWORD !' )
16
16
sys .exit (- 2 )
17
17
@@ -20,16 +20,27 @@ def generate(image: str, target_registries: list = None, tags: list = None, targ
20
20
destinations = ['cn-beijing' , 'cn-hangzhou' ]
21
21
target_registries = ['registry.%s.aliyuncs.com' % i for i in destinations ]
22
22
23
- for dest in target_registries :
24
- src = "%s:%s" % (image , tags ) if tags is not None else image
25
- yield {
23
+ for target_registry in target_registries :
24
+ img_src_tag = '%s:%s' % (image , tags ) if tags is not None else image
25
+ img_src : str = "%s/%s" % (source_registry , img_src_tag )
26
+ img_dst : str = "%s/%s" % (target_registry , image )
27
+
28
+ c = {
26
29
'auth' : {
27
- dest : {"username" : uname , "password" : passwd }
30
+ target_registry : {"username" : uname_mirror , "password" : passwd_mirror }
28
31
},
29
- 'images' : {
30
- src : "%s/%s" % (dest , target_image or image )
31
- }
32
+ 'images' : {img_src : img_dst }
32
33
}
34
+ if source_registry is not None :
35
+ uname_source = os .environ .get ('DOCKER_REGISTRY_USERNAME' , None )
36
+ passwd_source = os .environ .get ('DOCKER_REGISTRY_PASSWORD' , None )
37
+ if uname_source is None or passwd_source is None :
38
+ print ('ENV variable required: DOCKER_REGISTRY_USERNAME and DOCKER_REGISTRY_PASSWORD !' )
39
+ sys .exit (- 2 )
40
+ c ['auth' ].update ({source_registry : {
41
+ "username" : uname_source , "password" : passwd_source }
42
+ })
43
+ yield c
33
44
34
45
35
46
def sync_image (cfg : dict ):
@@ -50,13 +61,14 @@ def main():
50
61
parser = argparse .ArgumentParser ()
51
62
parser .add_argument ('img' , type = str , help = 'Source image, with or without tag' )
52
63
parser .add_argument ('--tags' , type = str , action = 'extend' , nargs = '*' , help = 'Tags to sync, optional.' )
53
- parser .add_argument ('--dest-image ' , type = str , help = 'Target image name, with our without tag' )
54
- parser .add_argument ('--dest -registry' , type = str , action = 'extend' , nargs = '*' , help = 'tTarget registry URL' )
64
+ parser .add_argument ('--source-registry ' , type = str , default = 'docker.io' , help = 'Target image name, with our without tag' )
65
+ parser .add_argument ('--target -registry' , type = str , action = 'extend' , nargs = '*' , help = 'Target registry URL' )
55
66
args = parser .parse_args ()
56
67
57
- configs = generate (image = args .img , tags = args .tags , target_registries = args .dest_registry , target_image = args .dest_image )
68
+ configs = generate (image = args .img , tags = args .tags , source_registry = args .target_registry , target_registries = args .dest_registry )
69
+ ret = 0
58
70
for _ , c in enumerate (configs ):
59
- ret = sync_image (cfg = c )
71
+ ret + = sync_image (cfg = c )
60
72
return ret
61
73
62
74
0 commit comments