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.
- zrb/builtin/__init__.py +2 -0
- zrb/builtin/generator/docker_compose_task/template/_automate/snake_task_name.py +4 -1
- zrb/builtin/generator/fastapp/__init__.py +0 -0
- zrb/builtin/generator/fastapp/add.py +131 -0
- zrb/builtin/generator/fastapp/template/_automate/snake_app_name/__init__.py +0 -0
- zrb/builtin/generator/fastapp/template/_automate/snake_app_name/app/__init__.py +0 -0
- zrb/builtin/generator/fastapp/template/_automate/snake_app_name/app/app_env.py +16 -0
- zrb/builtin/generator/fastapp/template/_automate/snake_app_name/cmd/pulumi-destroy.sh +2 -0
- zrb/builtin/generator/fastapp/template/_automate/snake_app_name/cmd/pulumi-up.sh +2 -0
- zrb/builtin/generator/fastapp/template/_automate/snake_app_name/cmd/start.sh +15 -0
- zrb/builtin/generator/fastapp/template/_automate/snake_app_name/common.py +81 -0
- zrb/builtin/generator/fastapp/template/_automate/snake_app_name/compose/__init__.py +0 -0
- zrb/builtin/generator/fastapp/template/_automate/snake_app_name/compose/compose_checker.py +49 -0
- zrb/builtin/generator/fastapp/template/_automate/snake_app_name/compose/compose_env.py +52 -0
- zrb/builtin/generator/fastapp/template/_automate/snake_app_name/container.py +91 -0
- zrb/builtin/generator/fastapp/template/_automate/snake_app_name/deployment.py +55 -0
- zrb/builtin/generator/fastapp/template/_automate/snake_app_name/image.py +44 -0
- zrb/builtin/generator/fastapp/template/_automate/snake_app_name/local.py +92 -0
- zrb/builtin/generator/fastapp/template/src/kebab-app-name/deployment/.gitignore +2 -0
- zrb/builtin/generator/fastapp/template/src/kebab-app-name/deployment/Pulumi.yaml +6 -0
- zrb/builtin/generator/fastapp/template/src/kebab-app-name/deployment/__main__.py +79 -0
- zrb/builtin/generator/fastapp/template/src/kebab-app-name/deployment/requirements.txt +3 -0
- zrb/builtin/generator/fastapp/template/src/kebab-app-name/deployment/state/.gitkeep +0 -0
- zrb/builtin/generator/fastapp/template/src/kebab-app-name/docker-compose.yml +82 -0
- zrb/builtin/generator/fastapp/template/src/kebab-app-name/src/.dockerignore +3 -0
- zrb/builtin/generator/fastapp/template/src/kebab-app-name/src/.gitignore +3 -0
- zrb/builtin/generator/fastapp/template/src/kebab-app-name/src/Dockerfile +5 -0
- zrb/builtin/generator/fastapp/template/src/kebab-app-name/src/__init__.py +0 -0
- zrb/builtin/generator/fastapp/template/src/kebab-app-name/src/component/__init__.py +0 -0
- zrb/builtin/generator/fastapp/template/src/kebab-app-name/src/component/app.py +51 -0
- zrb/builtin/generator/fastapp/template/src/kebab-app-name/src/component/app_state.py +26 -0
- zrb/builtin/generator/fastapp/template/src/kebab-app-name/src/component/log.py +20 -0
- zrb/builtin/generator/fastapp/template/src/kebab-app-name/src/component/message_consumer.py +42 -0
- zrb/builtin/generator/fastapp/template/src/kebab-app-name/src/component/message_mocker.py +6 -0
- zrb/builtin/generator/fastapp/template/src/kebab-app-name/src/component/message_publisher.py +42 -0
- zrb/builtin/generator/fastapp/template/src/kebab-app-name/src/component/message_serializer.py +9 -0
- zrb/builtin/generator/fastapp/template/src/kebab-app-name/src/config.py +43 -0
- zrb/builtin/generator/fastapp/template/src/kebab-app-name/src/core/__init__.py +0 -0
- zrb/builtin/generator/fastapp/template/src/kebab-app-name/src/core/messagebus/__init__.py +0 -0
- zrb/builtin/generator/fastapp/template/src/kebab-app-name/src/core/messagebus/kafka/__init__.py +0 -0
- zrb/builtin/generator/fastapp/template/src/kebab-app-name/src/core/messagebus/kafka/consumer.py +198 -0
- zrb/builtin/generator/fastapp/template/src/kebab-app-name/src/core/messagebus/kafka/publisher.py +144 -0
- zrb/builtin/generator/fastapp/template/src/kebab-app-name/src/core/messagebus/messagebus.py +52 -0
- zrb/builtin/generator/fastapp/template/src/kebab-app-name/src/core/messagebus/mock.py +51 -0
- zrb/builtin/generator/fastapp/template/src/kebab-app-name/src/core/messagebus/rabbitmq/__init__.py +0 -0
- zrb/builtin/generator/fastapp/template/src/kebab-app-name/src/core/messagebus/rabbitmq/consumer.py +92 -0
- zrb/builtin/generator/fastapp/template/src/kebab-app-name/src/core/messagebus/rabbitmq/publisher.py +61 -0
- zrb/builtin/generator/fastapp/template/src/kebab-app-name/src/core/serializer/serializer.py +35 -0
- zrb/builtin/generator/fastapp/template/src/kebab-app-name/src/helper/__init__.py +0 -0
- zrb/builtin/generator/fastapp/template/src/kebab-app-name/src/helper/async_task.py +17 -0
- zrb/builtin/generator/fastapp/template/src/kebab-app-name/src/helper/conversion.py +27 -0
- zrb/builtin/generator/fastapp/template/src/kebab-app-name/src/main.py +38 -0
- zrb/builtin/generator/fastapp/template/src/kebab-app-name/src/requirements.txt +8 -0
- zrb/builtin/generator/fastapp/template/src/kebab-app-name/src/template.env +17 -0
- zrb/builtin/generator/simple_python_app/template/_automate/snake_app_name/cmd/start.sh +3 -1
- zrb/builtin/generator/simple_python_app/template/_automate/snake_app_name/container.py +1 -0
- zrb/builtin/generator/simple_python_app/template/_automate/snake_app_name/local.py +1 -0
- zrb/builtin/generator/simple_python_app/template/src/kebab-app-name/src/template.env +1 -0
- zrb/helper/list/ensure_uniqueness.py +22 -0
- zrb/helper/render_data.py +3 -2
- zrb/helper/string/conversion.py +8 -8
- zrb/helper/util.py +5 -0
- zrb/task/base_model.py +35 -14
- zrb/task/base_task.py +30 -20
- zrb/task/docker_compose_task.py +3 -3
- zrb/task/http_checker.py +29 -5
- zrb/task/port_checker.py +35 -10
- {zrb-0.0.38.dist-info → zrb-0.0.40.dist-info}/METADATA +1 -1
- {zrb-0.0.38.dist-info → zrb-0.0.40.dist-info}/RECORD +72 -20
- zrb/helper/list/append_unique.py +0 -9
- {zrb-0.0.38.dist-info → zrb-0.0.40.dist-info}/LICENSE +0 -0
- {zrb-0.0.38.dist-info → zrb-0.0.40.dist-info}/WHEEL +0 -0
- {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
|
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')
|
File without changes
|
File without changes
|
@@ -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,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
|
+
)
|
File without changes
|
@@ -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)
|