forked from Grokzen/docker-redis-cluster
-
Notifications
You must be signed in to change notification settings - Fork 0
/
tasks.py
123 lines (95 loc) · 3.11 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
import multiprocessing
from multiprocessing import Pool
from invoke import task
latest_version_string = "6.2.1"
version_config_mapping = []
version_config_mapping += [f"3.0.{i}" for i in range(0, 8)]
version_config_mapping += [f"3.2.{i}" for i in range(0, 14)]
version_config_mapping += [f"4.0.{i}" for i in range(0, 15)]
version_config_mapping += [f"5.0.{i}" for i in range(0, 13)]
version_config_mapping += [f"6.0.{i}" for i in range(0, 13)]
version_config_mapping += [f"6.2-rc{i}" for i in range(1, 3)]
version_config_mapping += [f"6.2.{i}" for i in range(0, 2)]
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_push,
[
[c, version]
for version in version_name_to_version(version)
],
)