Skip to content

Commit ed60088

Browse files
authored
Merge pull request #241 from kobotoolbox/kobocat-as-django-app
Add support to Kobocat as Django app inside KPI
2 parents 6327d3d + cfd65ab commit ed60088

26 files changed

+464
-856
lines changed

helpers/command.py

+32-72
Original file line numberDiff line numberDiff line change
@@ -25,11 +25,7 @@ def help():
2525
' -l, --logs',
2626
' Display docker logs',
2727
' -b, --build',
28-
' Build kpi and kobocat (only on dev/staging mode)',
29-
' -bkf, --build-kpi',
30-
' Build kpi (only on dev/staging mode)',
31-
' -bkc, --build-kobocat',
32-
' Build kobocat (only on dev/staging mode)',
28+
' Build django (kpi) container (only on dev/staging mode)',
3329
' -s, --setup',
3430
' Prompt questions to (re)write configuration files',
3531
' -S, --stop',
@@ -54,52 +50,27 @@ def help():
5450
print('\n'.join(output))
5551

5652
@classmethod
57-
def build(cls, image=None):
53+
def build(cls):
5854
"""
59-
Builds kpi/kobocat images with `--no-caches` option
60-
Pulls latest `kobotoolbox/koboform_base` as well
61-
62-
:param image: str
55+
Builds kpi image with `--no-caches` option
6356
"""
6457
config = Config()
6558
dict_ = config.get_dict()
6659

6760
if config.dev_mode or config.staging_mode:
6861

69-
def build_image(image_):
70-
frontend_command = run_docker_compose(dict_, [
71-
'-f', 'docker-compose.frontend.yml',
72-
'-f', 'docker-compose.frontend.override.yml',
73-
'-p', config.get_prefix('frontend'),
74-
'build', '--force-rm', '--no-cache',
75-
image_
76-
])
77-
78-
CLI.run_command(frontend_command, dict_['kobodocker_path'])
79-
80-
if image is None or image == 'kf':
81-
prefix = config.get_prefix('frontend')
82-
timestamp = int(time.time())
83-
dict_['kpi_dev_build_id'] = f'{prefix}{timestamp}'
84-
config.write_config()
85-
Template.render(config)
86-
build_image('kpi')
87-
88-
if image is None or image == 'kc':
89-
pull_base_command = [
90-
'docker',
91-
'pull',
92-
'kobotoolbox/koboform_base',
93-
]
94-
95-
CLI.run_command(pull_base_command, dict_['kobodocker_path'])
96-
97-
prefix = config.get_prefix('frontend')
98-
timestamp = int(time.time())
99-
dict_['kc_dev_build_id'] = f'{prefix}{timestamp}'
100-
config.write_config()
101-
Template.render(config)
102-
build_image('kobocat')
62+
prefix = config.get_prefix('frontend')
63+
timestamp = int(time.time())
64+
dict_['kpi_dev_build_id'] = f'{prefix}{timestamp}'
65+
config.write_config()
66+
Template.render(config)
67+
frontend_command = run_docker_compose(dict_, [
68+
'-f', 'docker-compose.frontend.yml',
69+
'-f', 'docker-compose.frontend.override.yml',
70+
'-p', config.get_prefix('frontend'),
71+
'build', '--force-rm', '--no-cache', 'kpi'
72+
])
73+
CLI.run_command(frontend_command, dict_['kobodocker_path'])
10374

10475
@classmethod
10576
def compose_frontend(cls, args):
@@ -119,10 +90,9 @@ def compose_frontend(cls, args):
11990
def compose_backend(cls, args):
12091
config = Config()
12192
dict_ = config.get_dict()
122-
backend_role = dict_['backend_server_role']
12393
command = run_docker_compose(dict_, [
124-
'-f', f'docker-compose.backend.{backend_role}.yml',
125-
'-f', f'docker-compose.backend.{backend_role}.override.yml',
94+
'-f', f'docker-compose.backend.yml',
95+
'-f', f'docker-compose.backend.override.yml',
12696
'-p', config.get_prefix('backend')
12797
])
12898
cls.__validate_custom_yml(config, command)
@@ -163,8 +133,8 @@ def info(cls, timeout=600):
163133
elif int(time.time()) - start >= timeout:
164134
if timeout > 0:
165135
CLI.colored_print(
166-
'\n`KoBoToolbox` has not started yet. '
167-
'This is can be normal with low CPU/RAM computers.\n',
136+
'\n`KoboToolbox` has not started yet. '
137+
'This can happen with low CPU/RAM computers.\n',
168138
CLI.COLOR_INFO)
169139
question = f'Wait for another {timeout} seconds?'
170140
response = CLI.yes_no_question(question)
@@ -209,7 +179,7 @@ def info(cls, timeout=600):
209179

210180
else:
211181
message = (
212-
'KoBoToolbox could not start!\n'
182+
'KoboToolbox could not start!\n'
213183
'Please try `python3 run.py --logs` to see the logs.'
214184
)
215185
CLI.framed_print(message, color=CLI.COLOR_ERROR)
@@ -221,11 +191,10 @@ def logs(cls):
221191
config = Config()
222192
dict_ = config.get_dict()
223193

224-
if config.primary_backend or config.secondary_backend:
225-
backend_role = dict_['backend_server_role']
194+
if config.backend:
226195
backend_command = run_docker_compose(dict_, [
227-
'-f', f'docker-compose.backend.{backend_role}.yml',
228-
'-f', f'docker-compose.backend.{backend_role}.override.yml',
196+
'-f', f'docker-compose.backend.yml',
197+
'-f', f'docker-compose.backend.override.yml',
229198
'-p', config.get_prefix('backend'),
230199
'logs', '-f'
231200
])
@@ -310,13 +279,10 @@ def start(cls, frontend_only=False, force_setup=False):
310279
else:
311280
nginx_port = int(dict_['exposed_nginx_docker_port'])
312281

313-
if frontend_only or config.frontend or \
314-
not config.multi_servers:
282+
if frontend_only or config.frontend or not config.multi_servers:
315283
ports.append(nginx_port)
316284

317-
if (not frontend_only or config.primary_backend or
318-
config.secondary_backend) and \
319-
config.expose_backend_ports:
285+
if not frontend_only and config.expose_backend_ports and config.backend:
320286
ports.append(dict_['postgresql_port'])
321287
ports.append(dict_['mongo_port'])
322288
ports.append(dict_['redis_main_port'])
@@ -332,11 +298,9 @@ def start(cls, frontend_only=False, force_setup=False):
332298
# Start the back-end containers
333299
if not frontend_only and config.backend:
334300

335-
backend_role = dict_['backend_server_role']
336-
337301
backend_command = run_docker_compose(dict_, [
338-
'-f', f'docker-compose.backend.{backend_role}.yml',
339-
'-f', f'docker-compose.backend.{backend_role}.override.yml',
302+
'-f', f'docker-compose.backend.yml',
303+
'-f', f'docker-compose.backend.override.yml',
340304
'-p', config.get_prefix('backend'),
341305
'up', '-d'
342306
])
@@ -392,9 +356,8 @@ def start(cls, frontend_only=False, force_setup=False):
392356
'It can take a few minutes.', CLI.COLOR_INFO)
393357
cls.info()
394358
else:
395-
backend_server_role = dict_['backend_server_role']
396359
CLI.colored_print(
397-
(f'{backend_server_role} backend server is starting up '
360+
(f'Back-end server is starting up '
398361
'and should be up & running soon!\nPlease look at docker '
399362
'logs for further information: '
400363
'`python3 run.py -cb logs -f`'),
@@ -443,7 +406,6 @@ def stop_containers(cls, group: str, down: bool = False):
443406

444407
config = Config()
445408
dict_ = config.get_dict()
446-
backend_role = dict_['backend_server_role']
447409

448410
if group not in ['frontend', 'backend', 'certbot', 'maintenance']:
449411
raise Exception('Unknown group')
@@ -459,8 +421,8 @@ def stop_containers(cls, group: str, down: bool = False):
459421
},
460422
'backend': {
461423
'options': [
462-
'-f', f'docker-compose.backend.{backend_role}.yml',
463-
'-f', f'docker-compose.backend.{backend_role}.override.yml',
424+
'-f', f'docker-compose.backend.yml',
425+
'-f', f'docker-compose.backend.override.yml',
464426
'-p', config.get_prefix('backend'),
465427
],
466428
'custom_yml': True,
@@ -570,10 +532,8 @@ def __validate_custom_yml(config, command):
570532
command.insert(start_index + 1, 'docker-compose.frontend.custom.yml')
571533

572534
if not frontend_command and dict_['use_backend_custom_yml']:
573-
backend_server_role = dict_['backend_server_role']
574-
custom_file = '{}/docker-compose.backend.{}.custom.yml'.format(
535+
custom_file = '{}/docker-compose.backend.custom.yml'.format(
575536
dict_['kobodocker_path'],
576-
backend_server_role
577537
)
578538

579539
does_custom_file_exist = os.path.exists(custom_file)
@@ -590,5 +550,5 @@ def __validate_custom_yml(config, command):
590550
command.insert(start_index, '-f')
591551
command.insert(
592552
start_index + 1,
593-
'docker-compose.backend.{}.custom.yml'.format(backend_server_role),
553+
'docker-compose.backend.custom.yml',
594554
)

0 commit comments

Comments
 (0)