Skip to content

Commit bf74399

Browse files
authored
Merge pull request #46 from forcedotcom/docker_network
Docker network
2 parents 77e417d + 93708d6 commit bf74399

File tree

4 files changed

+131
-44
lines changed

4 files changed

+131
-44
lines changed

README.md

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -217,6 +217,7 @@ Zip a transformation job in preparation to upload to Data Cloud.
217217

218218
Options:
219219
- `--path TEXT`: Path to the code directory (default: ".")
220+
- `--network TEXT`: docker network (default: "default")
220221

221222

222223
#### `datacustomcode deploy`
@@ -228,6 +229,7 @@ Options:
228229
- `--name TEXT`: Name of the transformation job [required]
229230
- `--version TEXT`: Version of the transformation job (default: "0.0.1")
230231
- `--description TEXT`: Description of the transformation job (default: "")
232+
- `--network TEXT`: docker network (default: "default")
231233
- `--cpu-size TEXT`: CPU size for the deployment (default: "CPU_XL"). Available options: CPU_L(Large), CPU_XL(Extra Large), CPU_2XL(2X Large), CPU_4XL(4X Large)
232234

233235

src/datacustomcode/cli.py

Lines changed: 12 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -71,11 +71,12 @@ def configure(
7171

7272
@cli.command()
7373
@click.argument("path", default="payload")
74-
def zip(path: str):
74+
@click.option("--network", default="default")
75+
def zip(path: str, network: str):
7576
from datacustomcode.deploy import zip
7677

7778
logger.debug("Zipping project")
78-
zip(path)
79+
zip(path, network)
7980

8081

8182
@cli.command()
@@ -84,6 +85,7 @@ def zip(path: str):
8485
@click.option("--version", default="0.0.1")
8586
@click.option("--description", default="Custom Data Transform Code")
8687
@click.option("--profile", default="default")
88+
@click.option("--network", default="default")
8789
@click.option(
8890
"--cpu-size",
8991
default="CPU_2XL",
@@ -98,7 +100,13 @@ def zip(path: str):
98100
Choose based on your workload requirements.""",
99101
)
100102
def deploy(
101-
path: str, name: str, version: str, description: str, cpu_size: str, profile: str
103+
path: str,
104+
name: str,
105+
version: str,
106+
description: str,
107+
cpu_size: str,
108+
profile: str,
109+
network: str,
102110
):
103111
from datacustomcode.credentials import Credentials
104112
from datacustomcode.deploy import TransformationJobMetadata, deploy_full
@@ -132,7 +140,7 @@ def deploy(
132140
fg="red",
133141
)
134142
raise click.Abort() from None
135-
deploy_full(path, metadata, credentials)
143+
deploy_full(path, metadata, credentials, network)
136144

137145

138146
@cli.command()

src/datacustomcode/deploy.py

Lines changed: 36 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -163,27 +163,22 @@ def create_deployment(
163163
ZIP_FILE_NAME = "deployment.zip"
164164

165165

166-
def prepare_dependency_archive(directory: str) -> None:
166+
def prepare_dependency_archive(directory: str, docker_network: str) -> None:
167167
cmd = f"docker images -q {DOCKER_IMAGE_NAME}"
168168
image_exists = cmd_output(cmd)
169169

170170
if not image_exists:
171-
logger.info("Building docker image...")
172-
cmd = (
173-
f"{PLATFORM_ENV_VAR} docker build -t {DOCKER_IMAGE_NAME} "
174-
f"-f Dockerfile.dependencies ."
175-
)
171+
logger.info(f"Building docker image with docker network: {docker_network}...")
172+
cmd = docker_build_cmd(docker_network)
176173
cmd_output(cmd)
177174

178175
with tempfile.TemporaryDirectory() as temp_dir:
179-
logger.info("Building dependencies archive")
176+
logger.info(
177+
f"Building dependencies archive with docker network: {docker_network}"
178+
)
180179
shutil.copy("requirements.txt", temp_dir)
181180
shutil.copy("build_native_dependencies.sh", temp_dir)
182-
cmd = (
183-
f"{PLATFORM_ENV_VAR} docker run --rm "
184-
f"-v {temp_dir}:/workspace "
185-
f"{DOCKER_IMAGE_NAME}"
186-
)
181+
cmd = docker_run_cmd(docker_network, temp_dir)
187182
cmd_output(cmd)
188183
archives_temp_path = os.path.join(temp_dir, DEPENDENCIES_ARCHIVE_FULL_NAME)
189184
os.makedirs(os.path.dirname(DEPENDENCIES_ARCHIVE_PATH), exist_ok=True)
@@ -192,6 +187,31 @@ def prepare_dependency_archive(directory: str) -> None:
192187
logger.info(f"Dependencies archived to {DEPENDENCIES_ARCHIVE_PATH}")
193188

194189

190+
def docker_build_cmd(network: str) -> str:
191+
cmd = (
192+
f"{PLATFORM_ENV_VAR} docker build -t {DOCKER_IMAGE_NAME} "
193+
f"--file Dockerfile.dependencies . "
194+
)
195+
196+
if network != "default":
197+
cmd = cmd + f"--network {network}"
198+
logger.debug(f"Docker build command: {cmd}")
199+
return cmd
200+
201+
202+
def docker_run_cmd(network: str, temp_dir) -> str:
203+
cmd = (
204+
f"{PLATFORM_ENV_VAR} docker run --rm "
205+
f"-v {temp_dir}:/workspace "
206+
f"{DOCKER_IMAGE_NAME} "
207+
)
208+
209+
if network != "default":
210+
cmd = cmd + f"--network {network} "
211+
logger.debug(f"Docker run command: {cmd}")
212+
return cmd
213+
214+
195215
class DeploymentsResponse(BaseModel):
196216
deploymentStatus: str
197217

@@ -366,13 +386,14 @@ def upload_zip(file_upload_url: str) -> None:
366386

367387
def zip(
368388
directory: str,
389+
docker_network: str,
369390
):
370391
# Create a zip file excluding .DS_Store files
371392
import zipfile
372393

373394
# prepare payload only if requirements.txt is non-empty
374395
if has_nonempty_requirements_file(directory):
375-
prepare_dependency_archive(directory)
396+
prepare_dependency_archive(directory, docker_network)
376397
else:
377398
logger.info(
378399
f"Skipping dependency archive: requirements.txt is missing or empty "
@@ -396,6 +417,7 @@ def deploy_full(
396417
directory: str,
397418
metadata: TransformationJobMetadata,
398419
credentials: Credentials,
420+
docker_network: str,
399421
callback=None,
400422
) -> AccessTokenResponse:
401423
"""Deploy a data transform in the DataCloud."""
@@ -406,7 +428,7 @@ def deploy_full(
406428

407429
# create deployment and upload payload
408430
deployment = create_deployment(access_token, metadata)
409-
zip(directory)
431+
zip(directory, docker_network)
410432
upload_zip(deployment.fileUploadUrl)
411433
wait_for_deployment(access_token, metadata, callback)
412434

0 commit comments

Comments
 (0)