8
8
import openapi_client
9
9
from cli .types import Settings
10
10
from cli .util import with_job_mgmt_api
11
- from jobq import Image , Job
11
+ from jobq import Image , ImagePullPolicy , Job
12
12
from jobq .submission_context import SubmissionContext
13
13
from openapi_client import ExecutionMode
14
14
@@ -32,6 +32,7 @@ def _submit_remote_job(
32
32
client : openapi_client .JobManagementApi ,
33
33
job : Job ,
34
34
mode : ExecutionMode ,
35
+ pull_policy : ImagePullPolicy ,
35
36
settings : Settings ,
36
37
) -> None :
37
38
# Job options sent to server do not need image options
@@ -44,6 +45,7 @@ def _submit_remote_job(
44
45
file = job .file ,
45
46
image_ref = _build_image (job , mode ).tag ,
46
47
mode = mode ,
48
+ pull_policy = pull_policy ,
47
49
options = openapi_client .JobOptions .model_validate (job .options .model_dump ()),
48
50
submission_context = SubmissionContext ().to_dict (),
49
51
)
@@ -57,13 +59,14 @@ def submit_job(
57
59
settings : Settings ,
58
60
) -> None :
59
61
mode = args .mode
62
+ pull_policy = args .pull_policy
60
63
logging .debug (f"Execution mode: { mode } " )
61
64
match mode :
62
65
case ExecutionMode .LOCAL :
63
66
# Run the job locally
64
67
job ()
65
68
case _:
66
- _submit_remote_job (job , mode , settings = settings )
69
+ _submit_remote_job (job , mode , pull_policy , settings = settings )
67
70
68
71
69
72
def discover_job (args : argparse .Namespace ) -> Job :
@@ -120,6 +123,12 @@ def add_parser(subparsers: Any, parent: argparse.ArgumentParser) -> None:
120
123
choices = list (ExecutionMode ),
121
124
type = ExecutionMode ,
122
125
)
126
+ parser .add_argument (
127
+ "--pull-policy" ,
128
+ default = ImagePullPolicy .ALWAYS ,
129
+ choices = list (ImagePullPolicy ),
130
+ type = ImagePullPolicy ,
131
+ )
123
132
124
133
parser .add_argument ("entrypoint" )
125
134
# TODO: Factor out into command class
0 commit comments