5MASTER_TPL_FILENAME =
'redis_master.conf.tpl'
6SENTINEL_TPL_FILENAME =
'redis_sentinel.conf.tpl'
7SLAVE_TPL_FILENAME =
'redis_slave.conf.tpl'
8CLUSTER_TPL_FILENAME =
'redis_cluster_node.conf.tpl'
12 'down_after_milliseconds': 60000,
13 'failover_timeout': 180000,
17 'down_after_milliseconds': 10000,
18 'failover_timeout': 180000,
25 parser = argparse.ArgumentParser()
28 help=
'Path to output directory',
35 help=
'Redis host for sentinel config',
41 help=
'Redis masters0 port',
47 help=
'Redis masters0 port',
53 help=
'Redis slave0 port',
59 help=
'Redis slave1 port',
65 help=
'Redis slave2 port',
71 help=
'Redis sentinel port',
77 default=[17380, 17381, 17382, 17383, 17384, 17385],
78 help=
'Redis cluster port',
80 return parser.parse_args()
83def _generate_redis_config(
84 input_file: pathlib.Path,
85 output_file: pathlib.Path,
88 master_port: int |
None =
None,
90 config_tpl = input_file.read_text()
91 config_body = string.Template(config_tpl).substitute(
94 master_port=master_port,
96 output_file.write_text(config_body)
102 output_path: pathlib.Path,
105 input_file = _redis_config_directory() / MASTER_TPL_FILENAME
106 output_file = _construct_output_filename(
111 _generate_redis_config(
123 output_path: pathlib.Path,
126 input_file = _redis_config_directory() / SLAVE_TPL_FILENAME
127 output_file = _construct_output_filename(
132 _generate_redis_config(
141def _generate_sentinel(
145 output_path: pathlib.Path,
148 input_file = _redis_config_directory() / SENTINEL_TPL_FILENAME
149 lines = [
'daemonize yes',
'port %d' % sentinel_port,
'']
150 config_tpl = input_file.read_text()
152 for index, (port, param)
in enumerate(zip(ports, params)):
153 config_body = string.Template(config_tpl).substitute(
159 lines.append(config_body)
161 output_path.joinpath(
'redis_sentinel.conf').write_text(
'\n'.join(lines))
164def _generate_cluster_node(
167 output_path: pathlib.Path,
170 input_file = _redis_config_directory() / CLUSTER_TPL_FILENAME
171 output_file = _construct_output_filename(
173 CLUSTER_TPL_FILENAME,
177 _generate_redis_config(
185def _construct_output_filename(
186 output_path: pathlib.Path,
190 name = tpl_filename.split(
'.', 1)[0]
191 config_filename =
''.join((name, str(number),
'.conf'))
192 return output_path / config_filename
195def _redis_config_directory() -> pathlib.Path:
196 return pathlib.Path(__file__).parent /
'configs'
199def generate_cluster_redis_configs(
200 output_path: pathlib.Path,
202 cluster_ports: tuple[int, ...],
204 _generate_cluster_node(
212def generate_standalone_redis_config(
213 output_path: pathlib.Path,
217 input_file = _redis_config_directory() / MASTER_TPL_FILENAME
218 output_file = output_path /
'test_standalone_master0.conf'
220 _generate_redis_config(
228def generate_redis_configs(
229 output_path: pathlib.Path,
238 _generate_master(host, master0_port, output_path, 0)
239 _generate_master(host, master1_port, output_path, 1)
266 [master0_port, master1_port],
274 generate_redis_configs(
275 output_path=args.output,
277 master0_port=args.master0_port,
278 master1_port=args.master1_port,
279 slave0_port=args.slave0_port,
280 slave1_port=args.slave1_port,
281 slave2_port=args.slave2_port,
282 sentinel_port=args.sentinel_port,
284 generate_cluster_redis_configs(
285 output_path=args.output,
287 cluster_ports=args.cluster_port,
291if __name__ ==
'__main__':