Skip to content

Commit d11c95c

Browse files
committed
return proper types, add env var example file, exports
1 parent 80f7329 commit d11c95c

File tree

3 files changed

+173
-23
lines changed

3 files changed

+173
-23
lines changed

datacrunch/containers/__init__.py

Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,24 @@
1+
from .containers import (
2+
EnvVar,
3+
EnvVarType,
4+
ContainerRegistryType,
5+
ContainerDeploymentStatus,
6+
HealthcheckSettings,
7+
EntrypointOverridesSettings,
8+
VolumeMount,
9+
VolumeMountType,
10+
Container,
11+
ContainerRegistryCredentials,
12+
ContainerRegistrySettings,
13+
ComputeResource,
14+
ScalingPolicy,
15+
QueueLoadScalingTrigger,
16+
UtilizationScalingTrigger,
17+
ScalingTriggers,
18+
ScalingOptions,
19+
Deployment,
20+
ReplicaInfo,
21+
Secret,
22+
RegistryCredential,
23+
ContainersService,
24+
)

datacrunch/containers/containers.py

Lines changed: 49 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -332,17 +332,17 @@ def update_deployment_scaling_options(self, deployment_name: str, scaling_option
332332
)
333333
return ScalingOptions.from_dict(response.json())
334334

335-
def get_deployment_replicas(self, deployment_name: str) -> Dict:
335+
def get_deployment_replicas(self, deployment_name: str) -> ReplicaInfo:
336336
"""Get deployment replicas
337337
338338
:param deployment_name: name of the deployment
339339
:type deployment_name: str
340340
:return: replicas information
341-
:rtype: Dict
341+
:rtype: ReplicaInfo
342342
"""
343343
response = self.client.get(
344344
f"{CONTAINER_DEPLOYMENTS_ENDPOINT}/{deployment_name}/replicas")
345-
return response.json()
345+
return [ReplicaInfo.from_dict(replica) for replica in response.json()["list"]]
346346

347347
def purge_deployment_queue(self, deployment_name: str) -> None:
348348
"""Purge deployment queue
@@ -371,55 +371,75 @@ def resume_deployment(self, deployment_name: str) -> None:
371371
self.client.post(
372372
f"{CONTAINER_DEPLOYMENTS_ENDPOINT}/{deployment_name}/resume")
373373

374-
def get_deployment_environment_variables(self, deployment_name: str) -> Dict:
374+
def get_deployment_environment_variables(self, deployment_name: str) -> Dict[str, List[EnvVar]]:
375375
"""Get deployment environment variables
376376
377377
:param deployment_name: name of the deployment
378378
:type deployment_name: str
379-
:return: environment variables
380-
:rtype: Dict
379+
:return: dictionary mapping container names to their environment variables
380+
:rtype: Dict[str, List[EnvVar]]
381381
"""
382382
response = self.client.get(
383383
f"{CONTAINER_DEPLOYMENTS_ENDPOINT}/{deployment_name}/environment-variables")
384-
return response.json()
385-
386-
def add_deployment_environment_variables(self, deployment_name: str, container_name: str, env_vars: List[Dict]) -> Dict:
384+
result = {}
385+
for item in response.json():
386+
container_name = item["container_name"]
387+
env_vars = item["env"]
388+
result[container_name] = [EnvVar.from_dict(
389+
env_var) for env_var in env_vars]
390+
return result
391+
392+
def add_deployment_environment_variables(self, deployment_name: str, container_name: str, env_vars: List[EnvVar]) -> Dict[str, List[EnvVar]]:
387393
"""Add environment variables to a container
388394
389395
:param deployment_name: name of the deployment
390396
:type deployment_name: str
391397
:param container_name: name of the container
392398
:type container_name: str
393399
:param env_vars: environment variables to add
394-
:type env_vars: List[Dict]
400+
:type env_vars: List[EnvVar]
395401
:return: updated environment variables
396-
:rtype: Dict
402+
:rtype: Dict[str, List[EnvVar]]
397403
"""
398404
response = self.client.post(
399405
f"{CONTAINER_DEPLOYMENTS_ENDPOINT}/{deployment_name}/environment-variables",
400-
{"container_name": container_name, "env": env_vars}
406+
{"container_name": container_name, "env": [
407+
env_var.to_dict() for env_var in env_vars]}
401408
)
402-
return response.json()
403-
404-
def update_deployment_environment_variables(self, deployment_name: str, container_name: str, env_vars: List[Dict]) -> Dict:
409+
result = {}
410+
for item in response.json():
411+
container_name = item["container_name"]
412+
env_vars = item["env"]
413+
result[container_name] = [EnvVar.from_dict(
414+
env_var) for env_var in env_vars]
415+
return result
416+
417+
def update_deployment_environment_variables(self, deployment_name: str, container_name: str, env_vars: List[EnvVar]) -> Dict[str, List[EnvVar]]:
405418
"""Update environment variables of a container
406419
407420
:param deployment_name: name of the deployment
408421
:type deployment_name: str
409422
:param container_name: name of the container
410423
:type container_name: str
411424
:param env_vars: updated environment variables
412-
:type env_vars: List[Dict]
425+
:type env_vars: List[EnvVar]
413426
:return: updated environment variables
414-
:rtype: Dict
427+
:rtype: Dict[str, List[EnvVar]]
415428
"""
416429
response = self.client.patch(
417430
f"{CONTAINER_DEPLOYMENTS_ENDPOINT}/{deployment_name}/environment-variables",
418-
{"container_name": container_name, "env": env_vars}
431+
{"container_name": container_name, "env": [
432+
env_var.to_dict() for env_var in env_vars]}
419433
)
420-
return response.json()
421-
422-
def delete_deployment_environment_variables(self, deployment_name: str, container_name: str, env_var_names: List[str]) -> Dict:
434+
result = {}
435+
item = response.json()
436+
container_name = item["container_name"]
437+
env_vars = item["env"]
438+
result[container_name] = [EnvVar.from_dict(
439+
env_var) for env_var in env_vars]
440+
return result
441+
442+
def delete_deployment_environment_variables(self, deployment_name: str, container_name: str, env_var_names: List[str]) -> Dict[str, List[EnvVar]]:
423443
"""Delete environment variables from a container
424444
425445
:param deployment_name: name of the deployment
@@ -429,13 +449,19 @@ def delete_deployment_environment_variables(self, deployment_name: str, containe
429449
:param env_var_names: names of environment variables to delete
430450
:type env_var_names: List[str]
431451
:return: remaining environment variables
432-
:rtype: Dict
452+
:rtype: Dict[str, List[EnvVar]]
433453
"""
434454
response = self.client.delete(
435455
f"{CONTAINER_DEPLOYMENTS_ENDPOINT}/{deployment_name}/environment-variables",
436456
{"container_name": container_name, "env": env_var_names}
437457
)
438-
return response.json()
458+
result = {}
459+
for item in response.json():
460+
container_name = item["container_name"]
461+
env_vars = item["env"]
462+
result[container_name] = [EnvVar.from_dict(
463+
env_var) for env_var in env_vars]
464+
return result
439465

440466
def get_compute_resources(self) -> List[ComputeResource]:
441467
"""Get available compute resources
Lines changed: 100 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,100 @@
1+
"""
2+
This example demonstrates how to manage environment variables for container deployments.
3+
It shows how to:
4+
1. Get environment variables for a deployment
5+
2. Add new environment variables to a container
6+
3. Update existing environment variables
7+
4. Delete environment variables
8+
"""
9+
10+
import os
11+
from datacrunch.containers import EnvVar, EnvVarType
12+
from datacrunch import DataCrunchClient
13+
from typing import Dict, List
14+
15+
DATACRUNCH_CLIENT_ID = os.environ.get('DATACRUNCH_CLIENT_ID')
16+
DATACRUNCH_CLIENT_SECRET = os.environ.get('DATACRUNCH_CLIENT_SECRET')
17+
18+
# Initialize DataCrunch client
19+
datacrunch_client = DataCrunchClient(client_id=DATACRUNCH_CLIENT_ID,
20+
client_secret=DATACRUNCH_CLIENT_SECRET)
21+
22+
# Example deployment and container names
23+
DEPLOYMENT_NAME = "my-deployment"
24+
CONTAINER_NAME = "main"
25+
26+
27+
def print_env_vars(env_vars: Dict[str, List[EnvVar]]) -> None:
28+
"""Helper function to print environment variables"""
29+
print("\nCurrent environment variables:")
30+
for container_name, vars in env_vars.items():
31+
print(f"\nContainer: {container_name}")
32+
for var in vars:
33+
print(f" {var.name}: {var.value_or_reference_to_secret} ({var.type})")
34+
35+
36+
def main():
37+
# First, let's get the current environment variables
38+
print("Getting current environment variables...")
39+
env_vars = datacrunch_client.containers.get_deployment_environment_variables(
40+
DEPLOYMENT_NAME)
41+
print_env_vars(env_vars)
42+
43+
# Create a new secret
44+
secret_name = "my-secret-key"
45+
datacrunch_client.containers.create_secret(
46+
secret_name,
47+
"my-secret-value"
48+
)
49+
50+
# Add new environment variables
51+
print("\nAdding new environment variables...")
52+
new_env_vars = [
53+
EnvVar(
54+
name="API_KEY",
55+
value_or_reference_to_secret=secret_name,
56+
type=EnvVarType.SECRET
57+
),
58+
EnvVar(
59+
name="DEBUG",
60+
value_or_reference_to_secret="true",
61+
type=EnvVarType.PLAIN
62+
)
63+
]
64+
65+
env_vars = datacrunch_client.containers.add_deployment_environment_variables(
66+
deployment_name=DEPLOYMENT_NAME,
67+
container_name=CONTAINER_NAME,
68+
env_vars=new_env_vars
69+
)
70+
print_env_vars(env_vars)
71+
72+
# Update existing environment variables
73+
print("\nUpdating environment variables...")
74+
updated_env_vars = [
75+
EnvVar(
76+
name="DEBUG",
77+
value_or_reference_to_secret="false",
78+
type=EnvVarType.PLAIN
79+
),
80+
]
81+
82+
env_vars = datacrunch_client.containers.update_deployment_environment_variables(
83+
deployment_name=DEPLOYMENT_NAME,
84+
container_name=CONTAINER_NAME,
85+
env_vars=updated_env_vars
86+
)
87+
print_env_vars(env_vars)
88+
89+
# Delete environment variables
90+
print("\nDeleting environment variables...")
91+
env_vars = datacrunch_client.containers.delete_deployment_environment_variables(
92+
deployment_name=DEPLOYMENT_NAME,
93+
container_name=CONTAINER_NAME,
94+
env_var_names=["DEBUG"]
95+
)
96+
print_env_vars(env_vars)
97+
98+
99+
if __name__ == "__main__":
100+
main()

0 commit comments

Comments
 (0)