-
Notifications
You must be signed in to change notification settings - Fork 550
/
tasks.py
186 lines (153 loc) · 3.53 KB
/
tasks.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
import multiprocessing
from multiprocessing import Pool
from invoke import task
latest_version_string = "6.2.0"
version_config_mapping = [
"3.0.0",
"3.0.1",
"3.0.2",
"3.0.3",
"3.0.4",
"3.0.5",
"3.0.6",
"3.0.7",
"3.2.0",
"3.2.1",
"3.2.2",
"3.2.3",
"3.2.4",
"3.2.5",
"3.2.6",
"3.2.7",
"3.2.8",
"3.2.9",
"3.2.10",
"3.2.11",
"3.2.12",
"3.2.13",
"4.0.0",
"4.0.1",
"4.0.2",
"4.0.3",
"4.0.4",
"4.0.5",
"4.0.6",
"4.0.7",
"4.0.8",
"4.0.9",
"4.0.10",
"4.0.11",
"4.0.12",
"4.0.13",
"4.0.14",
"5.0.0",
"5.0.1",
"5.0.2",
"5.0.3",
"5.0.4",
"5.0.5",
"5.0.6",
"5.0.7",
"5.0.8",
"5.0.9",
"5.0.10",
"5.0.11",
"6.0.0",
"6.0.1",
"6.0.2",
"6.0.3",
"6.0.4",
"6.0.5",
"6.0.6",
"6.0.7",
"6.0.8",
"6.0.9",
"6.0.10",
"6.0.11",
"6.2-rc1",
"6.2-rc2",
"6.2.0",
]
def version_name_to_version(version):
"""
Helper method that returns correct versions if you specify either
- all
- latest
or it will filter your chosen version based on what you inputed as version argument
"""
if version == "all":
return version_config_mapping
elif version == "latest":
return [latest_version_string]
else:
return filter_versions(version)
def get_pool_size(cpu_from_cli):
if cpu_from_cli:
pool_size = int(cpu_from_cli)
else:
pool_size = multiprocessing.cpu_count() - 1
print(f"Configured multiprocess pool size: {pool_size}")
return pool_size
def filter_versions(desired_version):
result = []
for version in version_config_mapping:
if version.startswith(desired_version):
result.append(version)
return result
def _docker_pull(config):
"""
Internal multiprocess method to run docker pull command
"""
c, version = config
print(f" -- Starting docker pull for version : {version}")
pull_command = f"docker pull grokzen/redis-cluster:{version}"
c.run(pull_command)
def _docker_build(config):
"""
Internal multiprocess method to run docker build command
"""
c, version = config
print(f" -- Starting docker build for version : {version}")
build_command = f"docker build --build-arg redis_version={version} -t grokzen/redis-cluster:{version} ."
c.run(build_command)
def _docker_push(config):
"""
Internal multiprocess method to run docker push command
"""
c, version = config
print(f" -- Starting docker push for version : {version}")
build_command = f"docker push grokzen/redis-cluster:{version}"
c.run(build_command)
@task
def pull(c, version, cpu=None):
print(f" -- Docker pull version docker-hub : {version}")
pool = Pool(get_pool_size(cpu))
pool.map(
_docker_pull,
[
[c, version]
for version in version_name_to_version(version)
],
)
@task
def build(c, version, cpu=None):
print(f" -- Docker building version : {version}")
pool = Pool(get_pool_size(cpu))
pool.map(
_docker_build,
[
[c, version]
for version in version_name_to_version(version)
],
)
@task
def push(c, version, cpu=None):
print(f" -- Docker push version to docker-hub : {version}")
pool = Pool(get_pool_size(cpu))
pool.map(
_docker_build,
[
[c, version]
for version in version_name_to_version(version)
],
)