zrb 0.0.38__py3-none-any.whl → 0.0.40__py3-none-any.whl

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (73) hide show
  1. zrb/builtin/__init__.py +2 -0
  2. zrb/builtin/generator/docker_compose_task/template/_automate/snake_task_name.py +4 -1
  3. zrb/builtin/generator/fastapp/__init__.py +0 -0
  4. zrb/builtin/generator/fastapp/add.py +131 -0
  5. zrb/builtin/generator/fastapp/template/_automate/snake_app_name/__init__.py +0 -0
  6. zrb/builtin/generator/fastapp/template/_automate/snake_app_name/app/__init__.py +0 -0
  7. zrb/builtin/generator/fastapp/template/_automate/snake_app_name/app/app_env.py +16 -0
  8. zrb/builtin/generator/fastapp/template/_automate/snake_app_name/cmd/pulumi-destroy.sh +2 -0
  9. zrb/builtin/generator/fastapp/template/_automate/snake_app_name/cmd/pulumi-up.sh +2 -0
  10. zrb/builtin/generator/fastapp/template/_automate/snake_app_name/cmd/start.sh +15 -0
  11. zrb/builtin/generator/fastapp/template/_automate/snake_app_name/common.py +81 -0
  12. zrb/builtin/generator/fastapp/template/_automate/snake_app_name/compose/__init__.py +0 -0
  13. zrb/builtin/generator/fastapp/template/_automate/snake_app_name/compose/compose_checker.py +49 -0
  14. zrb/builtin/generator/fastapp/template/_automate/snake_app_name/compose/compose_env.py +52 -0
  15. zrb/builtin/generator/fastapp/template/_automate/snake_app_name/container.py +91 -0
  16. zrb/builtin/generator/fastapp/template/_automate/snake_app_name/deployment.py +55 -0
  17. zrb/builtin/generator/fastapp/template/_automate/snake_app_name/image.py +44 -0
  18. zrb/builtin/generator/fastapp/template/_automate/snake_app_name/local.py +92 -0
  19. zrb/builtin/generator/fastapp/template/src/kebab-app-name/deployment/.gitignore +2 -0
  20. zrb/builtin/generator/fastapp/template/src/kebab-app-name/deployment/Pulumi.yaml +6 -0
  21. zrb/builtin/generator/fastapp/template/src/kebab-app-name/deployment/__main__.py +79 -0
  22. zrb/builtin/generator/fastapp/template/src/kebab-app-name/deployment/requirements.txt +3 -0
  23. zrb/builtin/generator/fastapp/template/src/kebab-app-name/deployment/state/.gitkeep +0 -0
  24. zrb/builtin/generator/fastapp/template/src/kebab-app-name/docker-compose.yml +82 -0
  25. zrb/builtin/generator/fastapp/template/src/kebab-app-name/src/.dockerignore +3 -0
  26. zrb/builtin/generator/fastapp/template/src/kebab-app-name/src/.gitignore +3 -0
  27. zrb/builtin/generator/fastapp/template/src/kebab-app-name/src/Dockerfile +5 -0
  28. zrb/builtin/generator/fastapp/template/src/kebab-app-name/src/__init__.py +0 -0
  29. zrb/builtin/generator/fastapp/template/src/kebab-app-name/src/component/__init__.py +0 -0
  30. zrb/builtin/generator/fastapp/template/src/kebab-app-name/src/component/app.py +51 -0
  31. zrb/builtin/generator/fastapp/template/src/kebab-app-name/src/component/app_state.py +26 -0
  32. zrb/builtin/generator/fastapp/template/src/kebab-app-name/src/component/log.py +20 -0
  33. zrb/builtin/generator/fastapp/template/src/kebab-app-name/src/component/message_consumer.py +42 -0
  34. zrb/builtin/generator/fastapp/template/src/kebab-app-name/src/component/message_mocker.py +6 -0
  35. zrb/builtin/generator/fastapp/template/src/kebab-app-name/src/component/message_publisher.py +42 -0
  36. zrb/builtin/generator/fastapp/template/src/kebab-app-name/src/component/message_serializer.py +9 -0
  37. zrb/builtin/generator/fastapp/template/src/kebab-app-name/src/config.py +43 -0
  38. zrb/builtin/generator/fastapp/template/src/kebab-app-name/src/core/__init__.py +0 -0
  39. zrb/builtin/generator/fastapp/template/src/kebab-app-name/src/core/messagebus/__init__.py +0 -0
  40. zrb/builtin/generator/fastapp/template/src/kebab-app-name/src/core/messagebus/kafka/__init__.py +0 -0
  41. zrb/builtin/generator/fastapp/template/src/kebab-app-name/src/core/messagebus/kafka/consumer.py +198 -0
  42. zrb/builtin/generator/fastapp/template/src/kebab-app-name/src/core/messagebus/kafka/publisher.py +144 -0
  43. zrb/builtin/generator/fastapp/template/src/kebab-app-name/src/core/messagebus/messagebus.py +52 -0
  44. zrb/builtin/generator/fastapp/template/src/kebab-app-name/src/core/messagebus/mock.py +51 -0
  45. zrb/builtin/generator/fastapp/template/src/kebab-app-name/src/core/messagebus/rabbitmq/__init__.py +0 -0
  46. zrb/builtin/generator/fastapp/template/src/kebab-app-name/src/core/messagebus/rabbitmq/consumer.py +92 -0
  47. zrb/builtin/generator/fastapp/template/src/kebab-app-name/src/core/messagebus/rabbitmq/publisher.py +61 -0
  48. zrb/builtin/generator/fastapp/template/src/kebab-app-name/src/core/serializer/serializer.py +35 -0
  49. zrb/builtin/generator/fastapp/template/src/kebab-app-name/src/helper/__init__.py +0 -0
  50. zrb/builtin/generator/fastapp/template/src/kebab-app-name/src/helper/async_task.py +17 -0
  51. zrb/builtin/generator/fastapp/template/src/kebab-app-name/src/helper/conversion.py +27 -0
  52. zrb/builtin/generator/fastapp/template/src/kebab-app-name/src/main.py +38 -0
  53. zrb/builtin/generator/fastapp/template/src/kebab-app-name/src/requirements.txt +8 -0
  54. zrb/builtin/generator/fastapp/template/src/kebab-app-name/src/template.env +17 -0
  55. zrb/builtin/generator/simple_python_app/template/_automate/snake_app_name/cmd/start.sh +3 -1
  56. zrb/builtin/generator/simple_python_app/template/_automate/snake_app_name/container.py +1 -0
  57. zrb/builtin/generator/simple_python_app/template/_automate/snake_app_name/local.py +1 -0
  58. zrb/builtin/generator/simple_python_app/template/src/kebab-app-name/src/template.env +1 -0
  59. zrb/helper/list/ensure_uniqueness.py +22 -0
  60. zrb/helper/render_data.py +3 -2
  61. zrb/helper/string/conversion.py +8 -8
  62. zrb/helper/util.py +5 -0
  63. zrb/task/base_model.py +35 -14
  64. zrb/task/base_task.py +30 -20
  65. zrb/task/docker_compose_task.py +3 -3
  66. zrb/task/http_checker.py +29 -5
  67. zrb/task/port_checker.py +35 -10
  68. {zrb-0.0.38.dist-info → zrb-0.0.40.dist-info}/METADATA +1 -1
  69. {zrb-0.0.38.dist-info → zrb-0.0.40.dist-info}/RECORD +72 -20
  70. zrb/helper/list/append_unique.py +0 -9
  71. {zrb-0.0.38.dist-info → zrb-0.0.40.dist-info}/LICENSE +0 -0
  72. {zrb-0.0.38.dist-info → zrb-0.0.40.dist-info}/WHEEL +0 -0
  73. {zrb-0.0.38.dist-info → zrb-0.0.40.dist-info}/entry_points.txt +0 -0
zrb/builtin/__init__.py CHANGED
@@ -12,6 +12,7 @@ from .generator.cmd_task import add as generate_cmd_task
12
12
  from .generator.docker_compose_task import add as generate_docker_compose_task
13
13
  from .generator.python_task import add as generate_python_task
14
14
  from .generator.simple_python_app import add as generate_simple_python_app
15
+ from .generator.fastapp import add as generate_fastapp
15
16
 
16
17
  assert base64
17
18
  assert env
@@ -27,3 +28,4 @@ assert generate_cmd_task
27
28
  assert generate_docker_compose_task
28
29
  assert generate_python_task
29
30
  assert generate_simple_python_app
31
+ assert generate_fastapp
@@ -31,7 +31,10 @@ snake_task_name = DockerComposeTask(
31
31
  ),
32
32
  ],
33
33
  checkers=[
34
- HTTPChecker(port='{{env.HOST_PORT}}')
34
+ HTTPChecker(
35
+ name='check-kebab-app-name',
36
+ port='{{env.HOST_PORT}}'
37
+ )
35
38
  ]
36
39
  )
37
40
  runner.register(snake_task_name)
File without changes
@@ -0,0 +1,131 @@
1
+ from typing import Any
2
+ from ..._group import project_add_group
3
+ from ....task.task import Task
4
+ from ....task.decorator import python_task
5
+ from ....task.resource_maker import ResourceMaker
6
+ from ....runner import runner
7
+ from .._common import (
8
+ default_app_inputs, project_dir_input, app_name_input,
9
+ validate_project_dir, create_register_local_app_module,
10
+ create_register_container_app_module, create_register_image_app_module,
11
+ create_register_deployment_app_module, get_default_app_replacements,
12
+ get_default_app_replacement_middlewares, new_app_scaffold_lock
13
+ )
14
+ from ..project_task.task_factory import (
15
+ create_add_project_automation, create_register_app_start,
16
+ create_register_app_start_container, create_register_app_stop_container,
17
+ create_register_app_remove_container, create_register_app_build_image,
18
+ create_register_app_push_image, create_register_app_deploy,
19
+ create_register_app_destroy
20
+ )
21
+ from ....helper import util
22
+
23
+ import os
24
+
25
+ # Common definitions
26
+
27
+ current_dir = os.path.dirname(__file__)
28
+
29
+
30
+ @python_task(
31
+ name='task-validate-create',
32
+ inputs=[project_dir_input, app_name_input],
33
+ )
34
+ async def validate(*args: Any, **kwargs: Any):
35
+ project_dir = kwargs.get('project_dir')
36
+ validate_project_dir(project_dir)
37
+ app_name = kwargs.get('app_name')
38
+ automation_dir = os.path.join(
39
+ project_dir, '_automate', util.to_snake_case(app_name)
40
+ )
41
+ if os.path.isdir(automation_dir):
42
+ raise Exception(f'Directory already exists: {automation_dir}')
43
+
44
+
45
+ copy_resource = ResourceMaker(
46
+ name='copy-resource',
47
+ inputs=default_app_inputs,
48
+ upstreams=[validate],
49
+ replacements=get_default_app_replacements(),
50
+ replacement_middlewares=get_default_app_replacement_middlewares(),
51
+ template_path=os.path.join(current_dir, 'template'),
52
+ destination_path='{{ input.project_dir }}',
53
+ scaffold_locks=[new_app_scaffold_lock],
54
+ excludes=['*/deployment/venv']
55
+ )
56
+
57
+ register_local_app_module = create_register_local_app_module(
58
+ upstreams=[copy_resource]
59
+ )
60
+
61
+ register_container_app_module = create_register_container_app_module(
62
+ upstreams=[copy_resource]
63
+ )
64
+
65
+ register_image_app_module = create_register_image_app_module(
66
+ upstreams=[copy_resource]
67
+ )
68
+
69
+ register_deployment_app_module = create_register_deployment_app_module(
70
+ upstreams=[copy_resource]
71
+ )
72
+
73
+ add_project_task = create_add_project_automation(
74
+ upstreams=[copy_resource]
75
+ )
76
+
77
+ register_start = create_register_app_start(
78
+ upstreams=[add_project_task]
79
+ )
80
+
81
+ register_start_container = create_register_app_start_container(
82
+ upstreams=[add_project_task]
83
+ )
84
+
85
+ register_stop_container = create_register_app_stop_container(
86
+ upstreams=[add_project_task]
87
+ )
88
+
89
+ register_remove_container = create_register_app_remove_container(
90
+ upstreams=[add_project_task]
91
+ )
92
+
93
+ register_push_image = create_register_app_push_image(
94
+ upstreams=[add_project_task]
95
+ )
96
+
97
+ register_build_image = create_register_app_build_image(
98
+ upstreams=[add_project_task]
99
+ )
100
+
101
+ register_deploy = create_register_app_deploy(
102
+ upstreams=[add_project_task]
103
+ )
104
+
105
+ register_destroy = create_register_app_destroy(
106
+ upstreams=[add_project_task]
107
+ )
108
+
109
+
110
+ @python_task(
111
+ name='fastapp',
112
+ group=project_add_group,
113
+ upstreams=[
114
+ register_local_app_module,
115
+ register_container_app_module,
116
+ register_image_app_module,
117
+ register_deployment_app_module,
118
+ register_start,
119
+ register_start_container,
120
+ register_stop_container,
121
+ register_remove_container,
122
+ register_build_image,
123
+ register_push_image,
124
+ register_deploy,
125
+ register_destroy
126
+ ],
127
+ runner=runner
128
+ )
129
+ async def add_simple_python_app(*args: Any, **kwargs: Any):
130
+ task: Task = kwargs.get('_task')
131
+ task.print_out('Success')
@@ -0,0 +1,16 @@
1
+ from zrb import Env, EnvFile
2
+ from ..common import TEMPLATE_ENV_FILE_NAME
3
+
4
+ app_env_file = EnvFile(env_file=TEMPLATE_ENV_FILE_NAME, prefix='ENV_PREFIX')
5
+ app_envs = [
6
+ Env(
7
+ name='APP_PORT',
8
+ os_name='ENV_PREFIX_APP_PORT',
9
+ default='httpPort'
10
+ ),
11
+ Env(
12
+ name='APP_BROKER_TYPE',
13
+ os_name='ENV_PREFIX_APP_BROKER_TYPE',
14
+ default='rabbitmq'
15
+ )
16
+ ]
@@ -0,0 +1,2 @@
1
+ (pulumi stack select {{input.snake_app_name_pulumi_stack}} || pulumi stack init {{input.snake_app_name_pulumi_stack}})
2
+ pulumi destroy --skip-preview
@@ -0,0 +1,2 @@
1
+ (pulumi stack select {{input.snake_app_name_pulumi_stack}} || pulumi stack init {{input.snake_app_name_pulumi_stack}})
2
+ pulumi up --skip-preview
@@ -0,0 +1,15 @@
1
+ PYTHONUNBUFFERED=1
2
+
3
+ if [ ! -d venv ]
4
+ then
5
+ echo "Init venv"
6
+ python -m venv venv
7
+ fi
8
+ echo "Activate venv"
9
+ source venv/bin/activate
10
+
11
+ echo "Install packages"
12
+ pip install -r requirements.txt
13
+
14
+ echo "Start app"
15
+ uvicorn main:app --host {{env.get("APP_HOST", "0.0.0.0")}} --port {{env.get("APP_PORT", "8080")}} {{ "--reload" if util.to_boolean(env.get("APP_RELOAD", "true")) else "" }}
@@ -0,0 +1,81 @@
1
+ from zrb import BoolInput, IntInput, StrInput, Env
2
+ import os
3
+
4
+ # Constants
5
+
6
+ CURRENT_DIR = os.path.dirname(__file__)
7
+ PROJECT_DIR = os.path.abspath(os.path.join(CURRENT_DIR, '..', '..'))
8
+ RESOURCE_DIR = os.path.join(PROJECT_DIR, 'src', 'kebab-app-name')
9
+ DEPLOYMENT_DIR = os.path.join(RESOURCE_DIR, 'deployment')
10
+ APP_DIR = os.path.join(RESOURCE_DIR, 'src')
11
+ TEMPLATE_ENV_FILE_NAME = os.path.join(APP_DIR, 'template.env')
12
+
13
+ # Inputs
14
+
15
+ local_input = BoolInput(
16
+ name='local-kebab-app-name',
17
+ description='Use local "kebab-app-name"',
18
+ prompt='Use local "kebab-app-name"?',
19
+ default=True
20
+ )
21
+
22
+ https_input = BoolInput(
23
+ name='kebab-app-name-https',
24
+ description='Whether "kebab-app-name" run on HTTPS',
25
+ prompt='Is "kebab-app-name" run on HTTPS?',
26
+ default=False
27
+ )
28
+
29
+ host_input = StrInput(
30
+ name='kebab-app-name-host',
31
+ description='Hostname of "kebab-app-name"',
32
+ prompt='Hostname of "kebab-app-name"',
33
+ default='localhost'
34
+ )
35
+
36
+ image_input = StrInput(
37
+ name='kebab-app-name-image',
38
+ description='Image name of "kebab-app-name"',
39
+ prompt='Image name of "kebab-app-name"',
40
+ default='app-image-name:latest'
41
+ )
42
+
43
+ replica_input = IntInput(
44
+ name='kebab-app-name-replica',
45
+ description='Replica of "kebab-app-name"',
46
+ prompt='Replica of "kebab-app-name"',
47
+ default=1,
48
+ )
49
+
50
+ pulumi_stack_input = StrInput(
51
+ name='kebab-app-name-pulumi-stack',
52
+ description='Pulumi stack name for "kebab-app-name"',
53
+ prompt='Pulumi stack name for "kebab-app-name"',
54
+ default=os.getenv('ZRB_ENV', 'dev')
55
+ )
56
+
57
+ # Envs
58
+
59
+ image_env = Env(
60
+ name='IMAGE',
61
+ os_name='CONTAINER_ENV_PREFIX_IMAGE',
62
+ default='{{input.snake_app_name_image}}'
63
+ )
64
+
65
+ pulumi_backend_url_env = Env(
66
+ name='PULUMI_BACKEND_URL',
67
+ os_name='PULUMI_ENV_PREFIX_BACKEND_URL',
68
+ default=f'file://{DEPLOYMENT_DIR}/state'
69
+ )
70
+
71
+ pulumi_config_passphrase_env = Env(
72
+ name='PULUMI_CONFIG_PASSPHRASE',
73
+ os_name='PULUMI_ENV_PREFIX_CONFIG_PASSPHRASE',
74
+ default='secret'
75
+ )
76
+
77
+ deployment_replica_env = Env(
78
+ name='REPLICA',
79
+ os_name='DEPLOYMENT_ENV_PREFIX',
80
+ default='{{input.snake_app_name_replica}}'
81
+ )
@@ -0,0 +1,49 @@
1
+ from zrb import HTTPChecker, PortChecker
2
+
3
+ rabbitmq_management_checker = HTTPChecker(
4
+ name='check-rabbitmq-management',
5
+ port='{{env.get("RABBITMQ_MANAGEMENT_HOST_PORT", "15672")}}',
6
+ is_https='{{input.snake_app_name_https}}',
7
+ skip_execution='{{env.get("APP_BROKER_TYPE", "rabbitmq") != "rabbitmq"}}'
8
+ )
9
+
10
+ rabbitmq_checker = PortChecker(
11
+ name='check-rabbitmq',
12
+ port='{{env.get("RABBITMQ_HOST_PORT", "5672")}}',
13
+ skip_execution='{{env.get("APP_BROKER_TYPE", "rabbitmq") != "rabbitmq"}}'
14
+ )
15
+
16
+ redpanda_console_checker = HTTPChecker(
17
+ name='check-redpanda-console',
18
+ port='{{env.get("REDPANDA_CONSOLE_HOST_PORT", "9000")}}',
19
+ is_https='{{input.snake_app_name_https}}',
20
+ skip_execution='{{env.get("APP_BROKER_TYPE", "rabbitmq") != "kafka"}}'
21
+ )
22
+
23
+ kafka_plaintext_checker = HTTPChecker(
24
+ name='check-kafka-plaintext',
25
+ port='{{env.get("KAFKA_PLAINTEXT_HOST_PORT", "29092")}}',
26
+ is_https='{{input.snake_app_name_https}}',
27
+ skip_execution='{{env.get("APP_BROKER_TYPE", "rabbitmq") != "kafka"}}'
28
+ )
29
+
30
+ kafka_outside_checker = HTTPChecker(
31
+ name='check-kafka-outside',
32
+ port='{{env.get("KAFKA_OUTSIDE_HOST_PORT", "9092")}}',
33
+ is_https='{{input.snake_app_name_https}}',
34
+ skip_execution='{{env.get("APP_BROKER_TYPE", "rabbitmq") != "kafka"}}'
35
+ )
36
+
37
+ pandaproxy_plaintext_checker = HTTPChecker(
38
+ name='check-pandaproxy-plaintext',
39
+ port='{{env.get("PANDAPROXY_PLAINTEXT_HOST_PORT", "29092")}}',
40
+ is_https='{{input.snake_app_name_https}}',
41
+ skip_execution='{{env.get("APP_BROKER_TYPE", "rabbitmq") != "kafka"}}'
42
+ )
43
+
44
+ pandaproxy_outside_checker = HTTPChecker(
45
+ name='check-pandaproxy-outside',
46
+ port='{{env.get("PANDAPROXY_OUTSIDE_HOST_PORT", "9092")}}',
47
+ is_https='{{input.snake_app_name_https}}',
48
+ skip_execution='{{env.get("APP_BROKER_TYPE", "rabbitmq") != "kafka"}}'
49
+ )
@@ -0,0 +1,52 @@
1
+ from zrb import Env
2
+ from ..common import image_env
3
+
4
+ compose_env_prefix = 'CONTAINER_ENV_PREFIX'
5
+ compose_envs = [
6
+ image_env,
7
+ Env(
8
+ name='APP_BROKER_TYPE',
9
+ os_name='CONTAINER_ENV_PREFIX_APP_BROKER_TYPE',
10
+ default='rabbitmq'
11
+ ),
12
+ Env(
13
+ name='APP_HOST_PORT',
14
+ os_name='CONTAINER_ENV_PREFIX_APP_HOST_PORT',
15
+ default='httpPort'
16
+ ),
17
+ Env(
18
+ name='RABBITMQ_HOST_PORT',
19
+ os_name='CONTAINER_ENV_PREFIX_RABBITMQ_HOST_PORT',
20
+ default='5672'
21
+ ),
22
+ Env(
23
+ name='RABBITMQ_MANAGEMENT_HOST_PORT',
24
+ os_name='CONTAINER_ENV_PREFIX_RABBITMQ_MANAGEMENT_HOST_PORT',
25
+ default='15672'
26
+ ),
27
+ Env(
28
+ name='REDPANDA_CONSOLE_HOST_PORT',
29
+ os_name='CONTAINER_ENV_PREFIX_REDPANDA_CONSOLE_HOST_PORT',
30
+ default='9000'
31
+ ),
32
+ Env(
33
+ name='KAFKA_PLAINTEXT_HOST_PORT',
34
+ os_name='CONTAINER_ENV_PREFIX_KAFKA_PLAINTEXT_HOST_PORT',
35
+ default='29092'
36
+ ),
37
+ Env(
38
+ name='KAFKA_OUTSIDE_HOST_PORT',
39
+ os_name='CONTAINER_ENV_PREFIX_KAFKA_OUTSIDE_HOST_PORT',
40
+ default='9092'
41
+ ),
42
+ Env(
43
+ name='PANDAPROXY_PLAINTEXT_HOST_PORT',
44
+ os_name='CONTAINER_ENV_PREFIX_PANDAPROXY_PLAINTEXT_HOST_PORT',
45
+ default='29092'
46
+ ),
47
+ Env(
48
+ name='PANDAPROXY_OUTSIDE_HOST_PORT',
49
+ os_name='CONTAINER_ENV_PREFIX_PANDAPROXY_OUTSIDE_HOST_PORT',
50
+ default='9092'
51
+ ),
52
+ ]
@@ -0,0 +1,91 @@
1
+ from zrb import DockerComposeTask, Env, HTTPChecker, runner
2
+ from zrb.builtin._group import project_group
3
+ from .common import (
4
+ RESOURCE_DIR,
5
+ local_input, host_input, https_input, image_input
6
+ )
7
+ from .image import build_snake_app_name_image
8
+ from .compose.compose_env import compose_env_prefix, compose_envs
9
+ from .compose.compose_checker import (
10
+ rabbitmq_checker, rabbitmq_management_checker,
11
+ redpanda_console_checker, kafka_outside_checker,
12
+ kafka_plaintext_checker, pandaproxy_outside_checker,
13
+ pandaproxy_plaintext_checker
14
+ )
15
+
16
+
17
+ remove_snake_app_name_container = DockerComposeTask(
18
+ icon='💨',
19
+ name='remove-kebab-app-name-container',
20
+ description='Rumove human readable app name container',
21
+ group=project_group,
22
+ cwd=RESOURCE_DIR,
23
+ compose_cmd='down',
24
+ compose_env_prefix=compose_env_prefix,
25
+ envs=compose_envs,
26
+ )
27
+ runner.register(remove_snake_app_name_container)
28
+
29
+ start_snake_app_name_container = DockerComposeTask(
30
+ icon='🐳',
31
+ name='start-kebab-app-name-container',
32
+ description='Start human readable app name container',
33
+ group=project_group,
34
+ inputs=[
35
+ local_input,
36
+ host_input,
37
+ https_input,
38
+ image_input,
39
+ ],
40
+ skip_execution='{{not input.local_snake_app_name}}',
41
+ upstreams=[
42
+ build_snake_app_name_image,
43
+ remove_snake_app_name_container
44
+ ],
45
+ cwd=RESOURCE_DIR,
46
+ compose_cmd='up',
47
+ compose_env_prefix=compose_env_prefix,
48
+ envs=compose_envs + [
49
+ Env(
50
+ name='COMPOSE_PROFILES',
51
+ os_name='',
52
+ default=' '.join([
53
+ '{{',
54
+ '",".join([',
55
+ ' env.get("APP_BROKER_TYPE", "rabbitmq"),',
56
+ ' "monolith"',
57
+ '])',
58
+ '}}'
59
+ ])
60
+ )
61
+ ],
62
+ checkers=[
63
+ HTTPChecker(
64
+ name='check-kebab-app-name-monolith',
65
+ host='{{input.snake_app_name_host}}',
66
+ url='/readiness',
67
+ port='{{env.get("HOST_PORT", "httpPort")}}',
68
+ is_https='{{input.snake_app_name_https}}'
69
+ ),
70
+ rabbitmq_checker,
71
+ rabbitmq_management_checker,
72
+ kafka_outside_checker,
73
+ kafka_plaintext_checker,
74
+ redpanda_console_checker,
75
+ pandaproxy_outside_checker,
76
+ pandaproxy_plaintext_checker,
77
+ ]
78
+ )
79
+ runner.register(start_snake_app_name_container)
80
+
81
+ stop_snake_app_name_container = DockerComposeTask(
82
+ icon='⛔',
83
+ name='stop-kebab-app-name-container',
84
+ description='Stop human readable app name container',
85
+ group=project_group,
86
+ cwd=RESOURCE_DIR,
87
+ compose_cmd='stop',
88
+ compose_env_prefix=compose_env_prefix,
89
+ envs=compose_envs,
90
+ )
91
+ runner.register(stop_snake_app_name_container)
@@ -0,0 +1,55 @@
1
+ from typing import List
2
+ from zrb import Input, CmdTask, Env, EnvFile, runner
3
+ from zrb.builtin._group import project_group
4
+ from .image import push_snake_app_name_image
5
+ from .common import (
6
+ CURRENT_DIR, DEPLOYMENT_DIR, TEMPLATE_ENV_FILE_NAME,
7
+ image_input, pulumi_stack_input, replica_input, image_env,
8
+ deployment_replica_env, pulumi_backend_url_env,
9
+ pulumi_config_passphrase_env
10
+ )
11
+ import os
12
+
13
+ app_env_file = EnvFile(
14
+ env_file=TEMPLATE_ENV_FILE_NAME, prefix='DEPLOYMENT_APP_ENV_PREFIX'
15
+ )
16
+
17
+ deployment_inputs: List[Input] = [
18
+ image_input,
19
+ replica_input,
20
+ pulumi_stack_input,
21
+ ]
22
+
23
+ deployment_envs: List[Env] = [
24
+ pulumi_backend_url_env,
25
+ pulumi_config_passphrase_env,
26
+ image_env,
27
+ deployment_replica_env,
28
+ ]
29
+
30
+ deploy_snake_app_name = CmdTask(
31
+ icon='🚧',
32
+ name='deploy-kebab-app-name',
33
+ description='Deploy human readable app name',
34
+ group=project_group,
35
+ inputs=deployment_inputs,
36
+ upstreams=[push_snake_app_name_image],
37
+ cwd=DEPLOYMENT_DIR,
38
+ env_files=[app_env_file],
39
+ envs=deployment_envs,
40
+ cmd_path=os.path.join(CURRENT_DIR, 'cmd', 'pulumi-up.sh'),
41
+ )
42
+ runner.register(deploy_snake_app_name)
43
+
44
+ destroy_snake_app_name = CmdTask(
45
+ icon='💨',
46
+ name='destroy-kebab-app-name',
47
+ description='Remove human readable app name deployment',
48
+ group=project_group,
49
+ inputs=deployment_inputs,
50
+ cwd=DEPLOYMENT_DIR,
51
+ env_files=[app_env_file],
52
+ envs=deployment_envs,
53
+ cmd_path=os.path.join(CURRENT_DIR, 'cmd', 'pulumi-destroy.sh'),
54
+ )
55
+ runner.register(destroy_snake_app_name)
@@ -0,0 +1,44 @@
1
+ from typing import List
2
+ from zrb import Input, DockerComposeTask, runner
3
+ from zrb.builtin._group import project_group
4
+ from .common import (
5
+ RESOURCE_DIR,
6
+ local_input, image_input, image_env
7
+ )
8
+
9
+ compose_inputs: List[Input] = [
10
+ local_input,
11
+ image_input,
12
+ ]
13
+ compose_env_prefix = 'CONTAINER_ENV_PREFIX'
14
+
15
+ build_snake_app_name_image = DockerComposeTask(
16
+ icon='🏭',
17
+ name='build-kebab-app-name-image',
18
+ description='Build human readable app name image',
19
+ group=project_group,
20
+ inputs=compose_inputs,
21
+ envs=[image_env],
22
+ skip_execution='{{not input.local_snake_app_name}}',
23
+ cwd=RESOURCE_DIR,
24
+ compose_cmd='build',
25
+ compose_flags=[
26
+ '--no-cache'
27
+ ],
28
+ compose_env_prefix=compose_env_prefix,
29
+ )
30
+ runner.register(build_snake_app_name_image)
31
+
32
+ push_snake_app_name_image = DockerComposeTask(
33
+ icon='📰',
34
+ name='push-kebab-app-name-image',
35
+ description='Push human readable app name image',
36
+ group=project_group,
37
+ inputs=compose_inputs,
38
+ envs=[image_env],
39
+ upstreams=[build_snake_app_name_image],
40
+ cwd=RESOURCE_DIR,
41
+ compose_cmd='push',
42
+ compose_env_prefix=compose_env_prefix,
43
+ )
44
+ runner.register(push_snake_app_name_image)
@@ -0,0 +1,92 @@
1
+ from zrb import CmdTask, DockerComposeTask, Env, HTTPChecker, runner
2
+ from zrb.builtin._group import project_group
3
+ from .common import (
4
+ CURRENT_DIR, APP_DIR, RESOURCE_DIR,
5
+ local_input, host_input, https_input, image_input
6
+ )
7
+ from .image import build_snake_app_name_image
8
+ from .app.app_env import app_env_file, app_envs
9
+ from .container import remove_snake_app_name_container
10
+ from .compose.compose_env import compose_env_prefix, compose_envs
11
+ from .compose.compose_checker import (
12
+ rabbitmq_checker, rabbitmq_management_checker,
13
+ redpanda_console_checker, kafka_outside_checker,
14
+ kafka_plaintext_checker, pandaproxy_outside_checker,
15
+ pandaproxy_plaintext_checker
16
+ )
17
+ import os
18
+
19
+ start_snake_app_name_support_container = DockerComposeTask(
20
+ icon='🐳',
21
+ name='start-kebab-app-name-support-container',
22
+ description='Start human readable app name container',
23
+ inputs=[
24
+ local_input,
25
+ host_input,
26
+ https_input,
27
+ image_input,
28
+ ],
29
+ skip_execution=' '.join([
30
+ '{{',
31
+ 'not input.local_snake_app_name',
32
+ 'or env.get("APP_BROKER_TYPE") == "mock"',
33
+ '}}',
34
+ ]),
35
+ upstreams=[
36
+ build_snake_app_name_image,
37
+ remove_snake_app_name_container
38
+ ],
39
+ cwd=RESOURCE_DIR,
40
+ compose_cmd='up',
41
+ compose_env_prefix=compose_env_prefix,
42
+ envs=compose_envs + app_envs + [
43
+ Env(
44
+ name='COMPOSE_PROFILES',
45
+ os_name='',
46
+ default=' '.join([
47
+ '{{',
48
+ '",".join([',
49
+ ' env.get("APP_BROKER_TYPE", "rabbitmq"),',
50
+ '])',
51
+ '}}'
52
+ ])
53
+ )
54
+ ],
55
+ checkers=[
56
+ rabbitmq_checker,
57
+ rabbitmq_management_checker,
58
+ kafka_outside_checker,
59
+ kafka_plaintext_checker,
60
+ redpanda_console_checker,
61
+ pandaproxy_outside_checker,
62
+ pandaproxy_plaintext_checker,
63
+ ]
64
+ )
65
+
66
+ start_snake_app_name = CmdTask(
67
+ icon='🚤',
68
+ name='start-kebab-app-name',
69
+ description='Start human readable app name',
70
+ group=project_group,
71
+ inputs=[
72
+ local_input,
73
+ host_input,
74
+ https_input
75
+ ],
76
+ skip_execution='{{not input.local_snake_app_name}}',
77
+ upstreams=[start_snake_app_name_support_container],
78
+ cwd=APP_DIR,
79
+ env_files=[app_env_file],
80
+ envs=app_envs,
81
+ cmd_path=os.path.join(CURRENT_DIR, 'cmd', 'start.sh'),
82
+ checkers=[
83
+ HTTPChecker(
84
+ name='check-kebab-app-name',
85
+ host='{{input.snake_app_name_host}}',
86
+ url='/readiness',
87
+ port='{{env.APP_PORT}}',
88
+ is_https='{{input.snake_app_name_https}}'
89
+ )
90
+ ]
91
+ )
92
+ runner.register(start_snake_app_name)
@@ -0,0 +1,6 @@
1
+ name: kebab-app-name
2
+ runtime:
3
+ name: python
4
+ options:
5
+ virtualenv: venv
6
+ description: A minimal Kubernetes Python Pulumi program