lazycloud-shared 0.0.0__tar.gz
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.
- lazycloud_shared-0.0.0/PKG-INFO +8 -0
- lazycloud_shared-0.0.0/pyproject.toml +20 -0
- lazycloud_shared-0.0.0/setup.cfg +4 -0
- lazycloud_shared-0.0.0/src/lazycloud_shared.egg-info/PKG-INFO +8 -0
- lazycloud_shared-0.0.0/src/lazycloud_shared.egg-info/SOURCES.txt +151 -0
- lazycloud_shared-0.0.0/src/lazycloud_shared.egg-info/dependency_links.txt +1 -0
- lazycloud_shared-0.0.0/src/lazycloud_shared.egg-info/requires.txt +3 -0
- lazycloud_shared-0.0.0/src/lazycloud_shared.egg-info/top_level.txt +1 -0
- lazycloud_shared-0.0.0/src/shared/__init__.py +1 -0
- lazycloud_shared-0.0.0/src/shared/app_identity.py +132 -0
- lazycloud_shared-0.0.0/src/shared/app_lifecycle.py +43 -0
- lazycloud_shared-0.0.0/src/shared/app_slug.py +44 -0
- lazycloud_shared-0.0.0/src/shared/autoscaler_state.py +52 -0
- lazycloud_shared-0.0.0/src/shared/autoscaling.py +371 -0
- lazycloud_shared-0.0.0/src/shared/aws_connections.py +584 -0
- lazycloud_shared-0.0.0/src/shared/billing_accounts.py +101 -0
- lazycloud_shared-0.0.0/src/shared/billing_plans.py +22 -0
- lazycloud_shared-0.0.0/src/shared/billing_quotes.py +469 -0
- lazycloud_shared-0.0.0/src/shared/billing_rate_card.py +620 -0
- lazycloud_shared-0.0.0/src/shared/bytes_transport.py +38 -0
- lazycloud_shared-0.0.0/src/shared/cache_records.py +19 -0
- lazycloud_shared-0.0.0/src/shared/callbacks.py +33 -0
- lazycloud_shared-0.0.0/src/shared/capacity.py +237 -0
- lazycloud_shared-0.0.0/src/shared/checkpoints.py +76 -0
- lazycloud_shared-0.0.0/src/shared/compute_enrollment.py +156 -0
- lazycloud_shared-0.0.0/src/shared/compute_fleet.py +89 -0
- lazycloud_shared-0.0.0/src/shared/compute_policy.py +255 -0
- lazycloud_shared-0.0.0/src/shared/container_requests.py +410 -0
- lazycloud_shared-0.0.0/src/shared/containers.py +82 -0
- lazycloud_shared-0.0.0/src/shared/contracts.py +8 -0
- lazycloud_shared-0.0.0/src/shared/cron.py +95 -0
- lazycloud_shared-0.0.0/src/shared/custom_domains.py +149 -0
- lazycloud_shared-0.0.0/src/shared/deployment_records.py +450 -0
- lazycloud_shared-0.0.0/src/shared/deployment_settings.py +25 -0
- lazycloud_shared-0.0.0/src/shared/deployment_subdomains.py +100 -0
- lazycloud_shared-0.0.0/src/shared/deployments.py +23 -0
- lazycloud_shared-0.0.0/src/shared/enums.py +12 -0
- lazycloud_shared-0.0.0/src/shared/env.py +167 -0
- lazycloud_shared-0.0.0/src/shared/errors.py +69 -0
- lazycloud_shared-0.0.0/src/shared/events.py +29 -0
- lazycloud_shared-0.0.0/src/shared/external_identity.py +47 -0
- lazycloud_shared-0.0.0/src/shared/function_payloads.py +220 -0
- lazycloud_shared-0.0.0/src/shared/gpu.py +256 -0
- lazycloud_shared-0.0.0/src/shared/http/__init__.py +1 -0
- lazycloud_shared-0.0.0/src/shared/http/apps.py +87 -0
- lazycloud_shared-0.0.0/src/shared/http/artifacts.py +78 -0
- lazycloud_shared-0.0.0/src/shared/http/aws_connections.py +133 -0
- lazycloud_shared-0.0.0/src/shared/http/base.py +16 -0
- lazycloud_shared-0.0.0/src/shared/http/billing.py +187 -0
- lazycloud_shared-0.0.0/src/shared/http/callbacks.py +23 -0
- lazycloud_shared-0.0.0/src/shared/http/client_manifests.py +128 -0
- lazycloud_shared-0.0.0/src/shared/http/collections.py +109 -0
- lazycloud_shared-0.0.0/src/shared/http/compute.py +378 -0
- lazycloud_shared-0.0.0/src/shared/http/compute_policy.py +163 -0
- lazycloud_shared-0.0.0/src/shared/http/concurrency.py +53 -0
- lazycloud_shared-0.0.0/src/shared/http/custom_domains.py +66 -0
- lazycloud_shared-0.0.0/src/shared/http/deployments.py +118 -0
- lazycloud_shared-0.0.0/src/shared/http/device_auth.py +57 -0
- lazycloud_shared-0.0.0/src/shared/http/endpoint_forwarding.py +277 -0
- lazycloud_shared-0.0.0/src/shared/http/endpoints.py +68 -0
- lazycloud_shared-0.0.0/src/shared/http/errors.py +84 -0
- lazycloud_shared-0.0.0/src/shared/http/functions.py +166 -0
- lazycloud_shared-0.0.0/src/shared/http/gateway.py +333 -0
- lazycloud_shared-0.0.0/src/shared/http/gateway_tasks.py +55 -0
- lazycloud_shared-0.0.0/src/shared/http/images.py +79 -0
- lazycloud_shared-0.0.0/src/shared/http/objects.py +96 -0
- lazycloud_shared-0.0.0/src/shared/http/observability.py +376 -0
- lazycloud_shared-0.0.0/src/shared/http/operations.py +210 -0
- lazycloud_shared-0.0.0/src/shared/http/pods.py +331 -0
- lazycloud_shared-0.0.0/src/shared/http/pricing.py +147 -0
- lazycloud_shared-0.0.0/src/shared/http/provider_nodes.py +106 -0
- lazycloud_shared-0.0.0/src/shared/http/secrets.py +128 -0
- lazycloud_shared-0.0.0/src/shared/http/shells.py +78 -0
- lazycloud_shared-0.0.0/src/shared/http/source_cache_cleanup.py +23 -0
- lazycloud_shared-0.0.0/src/shared/http/storage.py +90 -0
- lazycloud_shared-0.0.0/src/shared/http/stubs.py +170 -0
- lazycloud_shared-0.0.0/src/shared/http/system.py +154 -0
- lazycloud_shared-0.0.0/src/shared/http/task_payload.py +74 -0
- lazycloud_shared-0.0.0/src/shared/http/tasks.py +141 -0
- lazycloud_shared-0.0.0/src/shared/http/usage.py +214 -0
- lazycloud_shared-0.0.0/src/shared/http/users.py +117 -0
- lazycloud_shared-0.0.0/src/shared/http/volumes.py +250 -0
- lazycloud_shared-0.0.0/src/shared/http/workspace_changes.py +86 -0
- lazycloud_shared-0.0.0/src/shared/http/workspaces.py +169 -0
- lazycloud_shared-0.0.0/src/shared/http_headers.py +61 -0
- lazycloud_shared-0.0.0/src/shared/http_transport.py +203 -0
- lazycloud_shared-0.0.0/src/shared/identity.py +311 -0
- lazycloud_shared-0.0.0/src/shared/image_building/__init__.py +23 -0
- lazycloud_shared-0.0.0/src/shared/image_building/authoring.py +62 -0
- lazycloud_shared-0.0.0/src/shared/image_building/constants.py +31 -0
- lazycloud_shared-0.0.0/src/shared/image_building/context.py +52 -0
- lazycloud_shared-0.0.0/src/shared/image_building/credentials.py +245 -0
- lazycloud_shared-0.0.0/src/shared/image_building/planning.py +15 -0
- lazycloud_shared-0.0.0/src/shared/image_building/records.py +85 -0
- lazycloud_shared-0.0.0/src/shared/image_building/requirements.py +49 -0
- lazycloud_shared-0.0.0/src/shared/lifecycle.py +104 -0
- lazycloud_shared-0.0.0/src/shared/logs.py +35 -0
- lazycloud_shared-0.0.0/src/shared/managed_runtime_integrity.py +112 -0
- lazycloud_shared-0.0.0/src/shared/mounts.py +66 -0
- lazycloud_shared-0.0.0/src/shared/objects.py +41 -0
- lazycloud_shared-0.0.0/src/shared/paths.py +19 -0
- lazycloud_shared-0.0.0/src/shared/payments.py +431 -0
- lazycloud_shared-0.0.0/src/shared/process_liveness.py +88 -0
- lazycloud_shared-0.0.0/src/shared/provider_config.py +27 -0
- lazycloud_shared-0.0.0/src/shared/py.typed +1 -0
- lazycloud_shared-0.0.0/src/shared/queue_messages.py +21 -0
- lazycloud_shared-0.0.0/src/shared/realtime/__init__.py +1 -0
- lazycloud_shared-0.0.0/src/shared/realtime/contracts.py +302 -0
- lazycloud_shared-0.0.0/src/shared/realtime/streams.py +768 -0
- lazycloud_shared-0.0.0/src/shared/resources.py +26 -0
- lazycloud_shared-0.0.0/src/shared/routing.py +96 -0
- lazycloud_shared-0.0.0/src/shared/runtime_paths.py +15 -0
- lazycloud_shared-0.0.0/src/shared/scheduling.py +391 -0
- lazycloud_shared-0.0.0/src/shared/secrets.py +22 -0
- lazycloud_shared-0.0.0/src/shared/serialization.py +183 -0
- lazycloud_shared-0.0.0/src/shared/shell_protocol.py +121 -0
- lazycloud_shared-0.0.0/src/shared/signals.py +228 -0
- lazycloud_shared-0.0.0/src/shared/source_cache_cleanup.py +146 -0
- lazycloud_shared-0.0.0/src/shared/task_context.py +71 -0
- lazycloud_shared-0.0.0/src/shared/tasks.py +290 -0
- lazycloud_shared-0.0.0/src/shared/timestamps.py +20 -0
- lazycloud_shared-0.0.0/src/shared/transport_retry.py +126 -0
- lazycloud_shared-0.0.0/src/shared/urls.py +198 -0
- lazycloud_shared-0.0.0/src/shared/usage.py +163 -0
- lazycloud_shared-0.0.0/src/shared/usage_query.py +19 -0
- lazycloud_shared-0.0.0/src/shared/volumes.py +14 -0
- lazycloud_shared-0.0.0/src/shared/worker_events.py +59 -0
- lazycloud_shared-0.0.0/src/shared/workload_config.py +310 -0
- lazycloud_shared-0.0.0/src/shared/workload_keys.py +22 -0
- lazycloud_shared-0.0.0/src/shared/workspace_storage.py +89 -0
- lazycloud_shared-0.0.0/tests/test_autoscaling_semantics.py +27 -0
- lazycloud_shared-0.0.0/tests/test_billing_quotes.py +129 -0
- lazycloud_shared-0.0.0/tests/test_common_stubs.py +55 -0
- lazycloud_shared-0.0.0/tests/test_common_utilities.py +123 -0
- lazycloud_shared-0.0.0/tests/test_custom_domains.py +16 -0
- lazycloud_shared-0.0.0/tests/test_deployment_subdomains.py +98 -0
- lazycloud_shared-0.0.0/tests/test_execution_contracts.py +50 -0
- lazycloud_shared-0.0.0/tests/test_fleet_contracts.py +141 -0
- lazycloud_shared-0.0.0/tests/test_gpu_contract.py +81 -0
- lazycloud_shared-0.0.0/tests/test_http_json_boundaries.py +133 -0
- lazycloud_shared-0.0.0/tests/test_http_transport_tls.py +95 -0
- lazycloud_shared-0.0.0/tests/test_identity_contracts.py +84 -0
- lazycloud_shared-0.0.0/tests/test_image_building_credentials.py +122 -0
- lazycloud_shared-0.0.0/tests/test_memory_eviction_policy.py +57 -0
- lazycloud_shared-0.0.0/tests/test_mounts.py +24 -0
- lazycloud_shared-0.0.0/tests/test_process_liveness.py +38 -0
- lazycloud_shared-0.0.0/tests/test_serialization.py +71 -0
- lazycloud_shared-0.0.0/tests/test_shell_protocol.py +38 -0
- lazycloud_shared-0.0.0/tests/test_storage_contracts.py +126 -0
- lazycloud_shared-0.0.0/tests/test_transport_retry.py +39 -0
- lazycloud_shared-0.0.0/tests/test_urls.py +22 -0
- lazycloud_shared-0.0.0/tests/test_usage_contracts.py +66 -0
- lazycloud_shared-0.0.0/tests/test_workload_defaults.py +104 -0
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
Metadata-Version: 2.4
|
|
2
|
+
Name: lazycloud-shared
|
|
3
|
+
Version: 0.0.0
|
|
4
|
+
Summary: Boundary-safe shared primitives and HTTP payloads for the compute platform.
|
|
5
|
+
Requires-Python: >=3.10
|
|
6
|
+
Requires-Dist: certifi>=2025.1.31
|
|
7
|
+
Requires-Dist: croniter>=6.2.4
|
|
8
|
+
Requires-Dist: pydantic<3,>=2.8
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
[project]
|
|
2
|
+
name = "lazycloud-shared"
|
|
3
|
+
version = "0.0.0"
|
|
4
|
+
description = "Boundary-safe shared primitives and HTTP payloads for the compute platform."
|
|
5
|
+
requires-python = ">=3.10"
|
|
6
|
+
dependencies = [
|
|
7
|
+
"certifi>=2025.1.31",
|
|
8
|
+
"croniter>=6.2.4",
|
|
9
|
+
"pydantic>=2.8,<3",
|
|
10
|
+
]
|
|
11
|
+
|
|
12
|
+
[build-system]
|
|
13
|
+
requires = ["setuptools>=68", "wheel"]
|
|
14
|
+
build-backend = "setuptools.build_meta"
|
|
15
|
+
|
|
16
|
+
[tool.setuptools.packages.find]
|
|
17
|
+
where = ["src"]
|
|
18
|
+
|
|
19
|
+
[tool.setuptools.package-data]
|
|
20
|
+
shared = ["py.typed"]
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
Metadata-Version: 2.4
|
|
2
|
+
Name: lazycloud-shared
|
|
3
|
+
Version: 0.0.0
|
|
4
|
+
Summary: Boundary-safe shared primitives and HTTP payloads for the compute platform.
|
|
5
|
+
Requires-Python: >=3.10
|
|
6
|
+
Requires-Dist: certifi>=2025.1.31
|
|
7
|
+
Requires-Dist: croniter>=6.2.4
|
|
8
|
+
Requires-Dist: pydantic<3,>=2.8
|
|
@@ -0,0 +1,151 @@
|
|
|
1
|
+
pyproject.toml
|
|
2
|
+
src/lazycloud_shared.egg-info/PKG-INFO
|
|
3
|
+
src/lazycloud_shared.egg-info/SOURCES.txt
|
|
4
|
+
src/lazycloud_shared.egg-info/dependency_links.txt
|
|
5
|
+
src/lazycloud_shared.egg-info/requires.txt
|
|
6
|
+
src/lazycloud_shared.egg-info/top_level.txt
|
|
7
|
+
src/shared/__init__.py
|
|
8
|
+
src/shared/app_identity.py
|
|
9
|
+
src/shared/app_lifecycle.py
|
|
10
|
+
src/shared/app_slug.py
|
|
11
|
+
src/shared/autoscaler_state.py
|
|
12
|
+
src/shared/autoscaling.py
|
|
13
|
+
src/shared/aws_connections.py
|
|
14
|
+
src/shared/billing_accounts.py
|
|
15
|
+
src/shared/billing_plans.py
|
|
16
|
+
src/shared/billing_quotes.py
|
|
17
|
+
src/shared/billing_rate_card.py
|
|
18
|
+
src/shared/bytes_transport.py
|
|
19
|
+
src/shared/cache_records.py
|
|
20
|
+
src/shared/callbacks.py
|
|
21
|
+
src/shared/capacity.py
|
|
22
|
+
src/shared/checkpoints.py
|
|
23
|
+
src/shared/compute_enrollment.py
|
|
24
|
+
src/shared/compute_fleet.py
|
|
25
|
+
src/shared/compute_policy.py
|
|
26
|
+
src/shared/container_requests.py
|
|
27
|
+
src/shared/containers.py
|
|
28
|
+
src/shared/contracts.py
|
|
29
|
+
src/shared/cron.py
|
|
30
|
+
src/shared/custom_domains.py
|
|
31
|
+
src/shared/deployment_records.py
|
|
32
|
+
src/shared/deployment_settings.py
|
|
33
|
+
src/shared/deployment_subdomains.py
|
|
34
|
+
src/shared/deployments.py
|
|
35
|
+
src/shared/enums.py
|
|
36
|
+
src/shared/env.py
|
|
37
|
+
src/shared/errors.py
|
|
38
|
+
src/shared/events.py
|
|
39
|
+
src/shared/external_identity.py
|
|
40
|
+
src/shared/function_payloads.py
|
|
41
|
+
src/shared/gpu.py
|
|
42
|
+
src/shared/http_headers.py
|
|
43
|
+
src/shared/http_transport.py
|
|
44
|
+
src/shared/identity.py
|
|
45
|
+
src/shared/lifecycle.py
|
|
46
|
+
src/shared/logs.py
|
|
47
|
+
src/shared/managed_runtime_integrity.py
|
|
48
|
+
src/shared/mounts.py
|
|
49
|
+
src/shared/objects.py
|
|
50
|
+
src/shared/paths.py
|
|
51
|
+
src/shared/payments.py
|
|
52
|
+
src/shared/process_liveness.py
|
|
53
|
+
src/shared/provider_config.py
|
|
54
|
+
src/shared/py.typed
|
|
55
|
+
src/shared/queue_messages.py
|
|
56
|
+
src/shared/resources.py
|
|
57
|
+
src/shared/routing.py
|
|
58
|
+
src/shared/runtime_paths.py
|
|
59
|
+
src/shared/scheduling.py
|
|
60
|
+
src/shared/secrets.py
|
|
61
|
+
src/shared/serialization.py
|
|
62
|
+
src/shared/shell_protocol.py
|
|
63
|
+
src/shared/signals.py
|
|
64
|
+
src/shared/source_cache_cleanup.py
|
|
65
|
+
src/shared/task_context.py
|
|
66
|
+
src/shared/tasks.py
|
|
67
|
+
src/shared/timestamps.py
|
|
68
|
+
src/shared/transport_retry.py
|
|
69
|
+
src/shared/urls.py
|
|
70
|
+
src/shared/usage.py
|
|
71
|
+
src/shared/usage_query.py
|
|
72
|
+
src/shared/volumes.py
|
|
73
|
+
src/shared/worker_events.py
|
|
74
|
+
src/shared/workload_config.py
|
|
75
|
+
src/shared/workload_keys.py
|
|
76
|
+
src/shared/workspace_storage.py
|
|
77
|
+
src/shared/http/__init__.py
|
|
78
|
+
src/shared/http/apps.py
|
|
79
|
+
src/shared/http/artifacts.py
|
|
80
|
+
src/shared/http/aws_connections.py
|
|
81
|
+
src/shared/http/base.py
|
|
82
|
+
src/shared/http/billing.py
|
|
83
|
+
src/shared/http/callbacks.py
|
|
84
|
+
src/shared/http/client_manifests.py
|
|
85
|
+
src/shared/http/collections.py
|
|
86
|
+
src/shared/http/compute.py
|
|
87
|
+
src/shared/http/compute_policy.py
|
|
88
|
+
src/shared/http/concurrency.py
|
|
89
|
+
src/shared/http/custom_domains.py
|
|
90
|
+
src/shared/http/deployments.py
|
|
91
|
+
src/shared/http/device_auth.py
|
|
92
|
+
src/shared/http/endpoint_forwarding.py
|
|
93
|
+
src/shared/http/endpoints.py
|
|
94
|
+
src/shared/http/errors.py
|
|
95
|
+
src/shared/http/functions.py
|
|
96
|
+
src/shared/http/gateway.py
|
|
97
|
+
src/shared/http/gateway_tasks.py
|
|
98
|
+
src/shared/http/images.py
|
|
99
|
+
src/shared/http/objects.py
|
|
100
|
+
src/shared/http/observability.py
|
|
101
|
+
src/shared/http/operations.py
|
|
102
|
+
src/shared/http/pods.py
|
|
103
|
+
src/shared/http/pricing.py
|
|
104
|
+
src/shared/http/provider_nodes.py
|
|
105
|
+
src/shared/http/secrets.py
|
|
106
|
+
src/shared/http/shells.py
|
|
107
|
+
src/shared/http/source_cache_cleanup.py
|
|
108
|
+
src/shared/http/storage.py
|
|
109
|
+
src/shared/http/stubs.py
|
|
110
|
+
src/shared/http/system.py
|
|
111
|
+
src/shared/http/task_payload.py
|
|
112
|
+
src/shared/http/tasks.py
|
|
113
|
+
src/shared/http/usage.py
|
|
114
|
+
src/shared/http/users.py
|
|
115
|
+
src/shared/http/volumes.py
|
|
116
|
+
src/shared/http/workspace_changes.py
|
|
117
|
+
src/shared/http/workspaces.py
|
|
118
|
+
src/shared/image_building/__init__.py
|
|
119
|
+
src/shared/image_building/authoring.py
|
|
120
|
+
src/shared/image_building/constants.py
|
|
121
|
+
src/shared/image_building/context.py
|
|
122
|
+
src/shared/image_building/credentials.py
|
|
123
|
+
src/shared/image_building/planning.py
|
|
124
|
+
src/shared/image_building/records.py
|
|
125
|
+
src/shared/image_building/requirements.py
|
|
126
|
+
src/shared/realtime/__init__.py
|
|
127
|
+
src/shared/realtime/contracts.py
|
|
128
|
+
src/shared/realtime/streams.py
|
|
129
|
+
tests/test_autoscaling_semantics.py
|
|
130
|
+
tests/test_billing_quotes.py
|
|
131
|
+
tests/test_common_stubs.py
|
|
132
|
+
tests/test_common_utilities.py
|
|
133
|
+
tests/test_custom_domains.py
|
|
134
|
+
tests/test_deployment_subdomains.py
|
|
135
|
+
tests/test_execution_contracts.py
|
|
136
|
+
tests/test_fleet_contracts.py
|
|
137
|
+
tests/test_gpu_contract.py
|
|
138
|
+
tests/test_http_json_boundaries.py
|
|
139
|
+
tests/test_http_transport_tls.py
|
|
140
|
+
tests/test_identity_contracts.py
|
|
141
|
+
tests/test_image_building_credentials.py
|
|
142
|
+
tests/test_memory_eviction_policy.py
|
|
143
|
+
tests/test_mounts.py
|
|
144
|
+
tests/test_process_liveness.py
|
|
145
|
+
tests/test_serialization.py
|
|
146
|
+
tests/test_shell_protocol.py
|
|
147
|
+
tests/test_storage_contracts.py
|
|
148
|
+
tests/test_transport_retry.py
|
|
149
|
+
tests/test_urls.py
|
|
150
|
+
tests/test_usage_contracts.py
|
|
151
|
+
tests/test_workload_defaults.py
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
shared
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
"""Protocol-neutral contracts shared across LazyCloud process boundaries."""
|
|
@@ -0,0 +1,132 @@
|
|
|
1
|
+
from __future__ import annotations
|
|
2
|
+
|
|
3
|
+
NAME = "lazycloud"
|
|
4
|
+
DISPLAY_NAME = NAME.replace("-", " ").title()
|
|
5
|
+
ENV_PREFIX = NAME.upper().replace("-", "_")
|
|
6
|
+
_LABEL_NAME = "".join(part.capitalize() for part in NAME.replace("_", "-").split("-"))
|
|
7
|
+
HOME_DIR = f".{NAME}"
|
|
8
|
+
STATE_DIR = f"/var/lib/{NAME}"
|
|
9
|
+
CACHE_DIR = f"{STATE_DIR}/cache"
|
|
10
|
+
CACHE_PAGES_DIR = f"{CACHE_DIR}/pages"
|
|
11
|
+
WORKER_BUNDLE_ROOT = f"/tmp/{NAME}-containers"
|
|
12
|
+
WORKER_CHECKPOINT_ROOT = f"/tmp/{NAME}-checkpoints"
|
|
13
|
+
CHECKPOINT_SIGNAL_ROOT = f"/tmp/{NAME}-checkpoint-signals"
|
|
14
|
+
MANAGED_PACKAGE_ROOT = f"/tmp/{NAME}-packages"
|
|
15
|
+
FUNCTION_IMAGE = f"{NAME}-function"
|
|
16
|
+
ENDPOINT_IMAGE = f"{NAME}-endpoint"
|
|
17
|
+
POD_IMAGE = f"{NAME}-pod"
|
|
18
|
+
SHELL_IMAGE = f"{NAME}-shell"
|
|
19
|
+
SHELL_LOG_PATH = f"/tmp/{NAME}-shell.log"
|
|
20
|
+
AGENT_CONTAINER_TMP_PATH = f"/tmp/{NAME}"
|
|
21
|
+
AGENT_CONTAINER_LOG_PATH = f"/var/log/{NAME}"
|
|
22
|
+
AGENT_STATE_DIR = f"{STATE_DIR}/agent"
|
|
23
|
+
AGENT_CONTAINER_DATA_PATH = f"{AGENT_STATE_DIR}/data"
|
|
24
|
+
AGENT_CONTAINER_OBJECT_PATH = f"{AGENT_CONTAINER_DATA_PATH}/objects"
|
|
25
|
+
AGENT_WORKER_CONFIG_PATH = f"/etc/{NAME}/worker/config.json"
|
|
26
|
+
CLI_NAME = NAME
|
|
27
|
+
ADMIN_CLI_NAME = f"{NAME}-admin"
|
|
28
|
+
REDIS_KEY_PREFIX = NAME
|
|
29
|
+
OBJECT_STORE_BUCKET = f"{NAME}-objects"
|
|
30
|
+
|
|
31
|
+
WORKSPACE_BUCKET_PREFIX = "workspace"
|
|
32
|
+
"""Default prefix of a workspace's own bucket.
|
|
33
|
+
|
|
34
|
+
A deployment sharing an AWS account with another one overrides this, because the
|
|
35
|
+
grant that reaches `workspace-*` cannot otherwise tell two deployments apart.
|
|
36
|
+
"""
|
|
37
|
+
DATA_STORAGE_BUCKET = f"{NAME}-data"
|
|
38
|
+
OBJECT_STORE_ACCESS_KEY_ID = NAME
|
|
39
|
+
OBJECT_STORE_SECRET_ACCESS_KEY = f"{NAME}-secret"
|
|
40
|
+
WORKSPACE_OBJECT_BUCKET = "default"
|
|
41
|
+
IMAGE_BUILD_CONTEXT_BUCKET = "build-contexts"
|
|
42
|
+
CLUSTER_NAME_LABEL = f"{_LABEL_NAME}ClusterName"
|
|
43
|
+
POOL_NAME_LABEL = f"{_LABEL_NAME}PoolName"
|
|
44
|
+
MACHINE_ID_LABEL = f"{_LABEL_NAME}MachineId"
|
|
45
|
+
DEFAULT_RESOURCE_TYPE = NAME
|
|
46
|
+
EVENT_SOURCE = f"{NAME}-cluster"
|
|
47
|
+
INTERNAL_WEBHOOK_FORMAT = f"{NAME}-webhook"
|
|
48
|
+
METRICS_NAMESPACE = NAME.replace("-", "_")
|
|
49
|
+
AGENT_NAME = f"{NAME}-agent"
|
|
50
|
+
AGENT_SERVICE_DESCRIPTION = f"{DISPLAY_NAME} agent"
|
|
51
|
+
AGENT_LAUNCHD_LABEL_PREFIX = f"com.{NAME}.agent"
|
|
52
|
+
CONTROL_PLANE_SERVICE_NAME = f"{NAME}-api"
|
|
53
|
+
CONTROL_PLANE_IMAGE = "api"
|
|
54
|
+
SCHEDULER_PROCESS_NAME = f"{NAME}-scheduler"
|
|
55
|
+
SCHEDULER_IMAGE = "scheduler"
|
|
56
|
+
CONTAINER_WORKER_PROCESS_NAME = f"{NAME}-container-worker"
|
|
57
|
+
CONTAINER_WORKER_IMAGE = "container-worker"
|
|
58
|
+
CONTAINER_HELPER_PATH = f"/usr/local/bin/{NAME}-sandbox-supervisor"
|
|
59
|
+
WORKER_BOOTSTRAP_PROCESS_NAME = f"{NAME}-worker-bootstrap"
|
|
60
|
+
WORKER_BOOTSTRAP_IMAGE = "worker-bootstrap"
|
|
61
|
+
CACHE_SERVER_PROCESS_NAME = f"{NAME}-cache-server"
|
|
62
|
+
CACHE_SERVER_IMAGE = "cache-server"
|
|
63
|
+
SANDBOX_COMPOSE_OVERRIDE_PATH = f"/tmp/{NAME}-docker-compose.override.yml"
|
|
64
|
+
METRICS_SOURCE = NAME
|
|
65
|
+
PRIVATE_RESOURCE_PREFIX = f"{NAME}-private"
|
|
66
|
+
SOURCE_CACHE_DIR = f"{NAME}-source-cache"
|
|
67
|
+
SOURCE_PACKAGE_BUCKET = f"{NAME}-source-packages"
|
|
68
|
+
WORKSPACE_UPLOAD_BUCKETS = frozenset(
|
|
69
|
+
{WORKSPACE_OBJECT_BUCKET, SOURCE_PACKAGE_BUCKET, IMAGE_BUILD_CONTEXT_BUCKET}
|
|
70
|
+
)
|
|
71
|
+
|
|
72
|
+
__all__ = [
|
|
73
|
+
"ADMIN_CLI_NAME",
|
|
74
|
+
"AGENT_CONTAINER_DATA_PATH",
|
|
75
|
+
"AGENT_CONTAINER_LOG_PATH",
|
|
76
|
+
"AGENT_CONTAINER_OBJECT_PATH",
|
|
77
|
+
"AGENT_CONTAINER_TMP_PATH",
|
|
78
|
+
"AGENT_LAUNCHD_LABEL_PREFIX",
|
|
79
|
+
"AGENT_NAME",
|
|
80
|
+
"AGENT_SERVICE_DESCRIPTION",
|
|
81
|
+
"AGENT_STATE_DIR",
|
|
82
|
+
"AGENT_WORKER_CONFIG_PATH",
|
|
83
|
+
"CACHE_DIR",
|
|
84
|
+
"CACHE_PAGES_DIR",
|
|
85
|
+
"CACHE_SERVER_IMAGE",
|
|
86
|
+
"CACHE_SERVER_PROCESS_NAME",
|
|
87
|
+
"CHECKPOINT_SIGNAL_ROOT",
|
|
88
|
+
"CLI_NAME",
|
|
89
|
+
"CLUSTER_NAME_LABEL",
|
|
90
|
+
"CONTAINER_HELPER_PATH",
|
|
91
|
+
"CONTAINER_WORKER_IMAGE",
|
|
92
|
+
"CONTAINER_WORKER_PROCESS_NAME",
|
|
93
|
+
"CONTROL_PLANE_IMAGE",
|
|
94
|
+
"CONTROL_PLANE_SERVICE_NAME",
|
|
95
|
+
"DATA_STORAGE_BUCKET",
|
|
96
|
+
"DEFAULT_RESOURCE_TYPE",
|
|
97
|
+
"DISPLAY_NAME",
|
|
98
|
+
"ENDPOINT_IMAGE",
|
|
99
|
+
"ENV_PREFIX",
|
|
100
|
+
"EVENT_SOURCE",
|
|
101
|
+
"FUNCTION_IMAGE",
|
|
102
|
+
"HOME_DIR",
|
|
103
|
+
"IMAGE_BUILD_CONTEXT_BUCKET",
|
|
104
|
+
"INTERNAL_WEBHOOK_FORMAT",
|
|
105
|
+
"MACHINE_ID_LABEL",
|
|
106
|
+
"MANAGED_PACKAGE_ROOT",
|
|
107
|
+
"METRICS_NAMESPACE",
|
|
108
|
+
"METRICS_SOURCE",
|
|
109
|
+
"NAME",
|
|
110
|
+
"OBJECT_STORE_ACCESS_KEY_ID",
|
|
111
|
+
"OBJECT_STORE_BUCKET",
|
|
112
|
+
"OBJECT_STORE_SECRET_ACCESS_KEY",
|
|
113
|
+
"POD_IMAGE",
|
|
114
|
+
"POOL_NAME_LABEL",
|
|
115
|
+
"PRIVATE_RESOURCE_PREFIX",
|
|
116
|
+
"REDIS_KEY_PREFIX",
|
|
117
|
+
"SANDBOX_COMPOSE_OVERRIDE_PATH",
|
|
118
|
+
"SCHEDULER_IMAGE",
|
|
119
|
+
"SCHEDULER_PROCESS_NAME",
|
|
120
|
+
"SHELL_IMAGE",
|
|
121
|
+
"SHELL_LOG_PATH",
|
|
122
|
+
"SOURCE_CACHE_DIR",
|
|
123
|
+
"SOURCE_PACKAGE_BUCKET",
|
|
124
|
+
"STATE_DIR",
|
|
125
|
+
"WORKER_BOOTSTRAP_IMAGE",
|
|
126
|
+
"WORKER_BOOTSTRAP_PROCESS_NAME",
|
|
127
|
+
"WORKER_BUNDLE_ROOT",
|
|
128
|
+
"WORKER_CHECKPOINT_ROOT",
|
|
129
|
+
"WORKSPACE_BUCKET_PREFIX",
|
|
130
|
+
"WORKSPACE_OBJECT_BUCKET",
|
|
131
|
+
"WORKSPACE_UPLOAD_BUCKETS",
|
|
132
|
+
]
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
from __future__ import annotations
|
|
2
|
+
|
|
3
|
+
from enum import Enum
|
|
4
|
+
|
|
5
|
+
|
|
6
|
+
class AppLifecycleState(str, Enum):
|
|
7
|
+
Active = "active"
|
|
8
|
+
Pausing = "pausing"
|
|
9
|
+
Paused = "paused"
|
|
10
|
+
Resuming = "resuming"
|
|
11
|
+
Deleting = "deleting"
|
|
12
|
+
CleanupFailed = "cleanup_failed"
|
|
13
|
+
Deleted = "deleted"
|
|
14
|
+
|
|
15
|
+
|
|
16
|
+
class AppLifecycleTarget(str, Enum):
|
|
17
|
+
Active = "active"
|
|
18
|
+
Paused = "paused"
|
|
19
|
+
Deleted = "deleted"
|
|
20
|
+
|
|
21
|
+
|
|
22
|
+
class AppDeploymentIntentTarget(str, Enum):
|
|
23
|
+
Active = "active"
|
|
24
|
+
Inactive = "inactive"
|
|
25
|
+
Deleted = "deleted"
|
|
26
|
+
|
|
27
|
+
|
|
28
|
+
UNFINISHED_APP_LIFECYCLE_STATES = frozenset(
|
|
29
|
+
{
|
|
30
|
+
AppLifecycleState.Pausing,
|
|
31
|
+
AppLifecycleState.Resuming,
|
|
32
|
+
AppLifecycleState.Deleting,
|
|
33
|
+
AppLifecycleState.CleanupFailed,
|
|
34
|
+
}
|
|
35
|
+
)
|
|
36
|
+
|
|
37
|
+
|
|
38
|
+
__all__ = [
|
|
39
|
+
"UNFINISHED_APP_LIFECYCLE_STATES",
|
|
40
|
+
"AppDeploymentIntentTarget",
|
|
41
|
+
"AppLifecycleState",
|
|
42
|
+
"AppLifecycleTarget",
|
|
43
|
+
]
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
from __future__ import annotations
|
|
2
|
+
|
|
3
|
+
import keyword
|
|
4
|
+
import re
|
|
5
|
+
|
|
6
|
+
APP_SLUG_PATTERN = re.compile(r"^[a-z][a-z0-9_]{0,62}$")
|
|
7
|
+
|
|
8
|
+
|
|
9
|
+
def validate_app_slug(value: str) -> str:
|
|
10
|
+
slug = value.strip()
|
|
11
|
+
if not APP_SLUG_PATTERN.fullmatch(slug) or keyword.iskeyword(slug):
|
|
12
|
+
msg = (
|
|
13
|
+
"app slug must be a lowercase Python identifier segment, "
|
|
14
|
+
"start with a letter, and contain only lowercase letters, digits, or underscores"
|
|
15
|
+
)
|
|
16
|
+
raise ValueError(msg)
|
|
17
|
+
return slug
|
|
18
|
+
|
|
19
|
+
|
|
20
|
+
def app_slug_from_name(value: str) -> str:
|
|
21
|
+
raw = value.strip().lower()
|
|
22
|
+
slug = re.sub(r"[^a-z0-9_]+", "_", raw).strip("_")
|
|
23
|
+
if not slug or not slug[0].isalpha():
|
|
24
|
+
slug = f"app_{slug or 'default'}"
|
|
25
|
+
if len(slug) > 63:
|
|
26
|
+
slug = slug[:63].rstrip("_")
|
|
27
|
+
if keyword.iskeyword(slug):
|
|
28
|
+
slug = f"{slug}_app"
|
|
29
|
+
return validate_app_slug(slug)
|
|
30
|
+
|
|
31
|
+
|
|
32
|
+
def app_slug_or_default(value: str | None, *, default: str) -> str:
|
|
33
|
+
selected = (value or "").strip()
|
|
34
|
+
if selected:
|
|
35
|
+
return validate_app_slug(selected)
|
|
36
|
+
return app_slug_from_name(default)
|
|
37
|
+
|
|
38
|
+
|
|
39
|
+
__all__ = [
|
|
40
|
+
"APP_SLUG_PATTERN",
|
|
41
|
+
"app_slug_from_name",
|
|
42
|
+
"app_slug_or_default",
|
|
43
|
+
"validate_app_slug",
|
|
44
|
+
]
|
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
from __future__ import annotations
|
|
2
|
+
|
|
3
|
+
from datetime import datetime
|
|
4
|
+
|
|
5
|
+
from pydantic import Field, JsonValue
|
|
6
|
+
|
|
7
|
+
from shared.contracts import ContractModel
|
|
8
|
+
from shared.enums import StringEnum
|
|
9
|
+
from shared.timestamps import utc_now
|
|
10
|
+
|
|
11
|
+
|
|
12
|
+
class AutoscalerTargetKind(StringEnum):
|
|
13
|
+
Function = "function"
|
|
14
|
+
Endpoint = "endpoint"
|
|
15
|
+
Pod = "pod"
|
|
16
|
+
|
|
17
|
+
|
|
18
|
+
class AutoscalerStateRecord(ContractModel):
|
|
19
|
+
name: str
|
|
20
|
+
workspace_id: str
|
|
21
|
+
source: str
|
|
22
|
+
target_kind: AutoscalerTargetKind
|
|
23
|
+
target_id: str
|
|
24
|
+
deployment_id: str = ""
|
|
25
|
+
app_id: str = ""
|
|
26
|
+
current_count: int = 0
|
|
27
|
+
desired_count: int = 0
|
|
28
|
+
signal_name: str = ""
|
|
29
|
+
signal_value: int = 0
|
|
30
|
+
decision: str = ""
|
|
31
|
+
reason: str = ""
|
|
32
|
+
active: bool = True
|
|
33
|
+
valid: bool = True
|
|
34
|
+
lock_acquired: bool = True
|
|
35
|
+
owner_lock_key: str = ""
|
|
36
|
+
cooldown_until: datetime | None = None
|
|
37
|
+
failed_container_count: int = 0
|
|
38
|
+
error: str = ""
|
|
39
|
+
last_sample: dict[str, JsonValue] = Field(default_factory=dict)
|
|
40
|
+
last_actions: list[dict[str, JsonValue]] = Field(default_factory=list)
|
|
41
|
+
updated_at: datetime = Field(default_factory=utc_now)
|
|
42
|
+
|
|
43
|
+
|
|
44
|
+
def autoscaler_state_name(target_kind: AutoscalerTargetKind, target_id: str) -> str:
|
|
45
|
+
return f"{target_kind.value}:{target_id}"
|
|
46
|
+
|
|
47
|
+
|
|
48
|
+
__all__ = [
|
|
49
|
+
"AutoscalerStateRecord",
|
|
50
|
+
"AutoscalerTargetKind",
|
|
51
|
+
"autoscaler_state_name",
|
|
52
|
+
]
|