diff --git a/lando/k8s/jobmanager.py b/lando/k8s/jobmanager.py
index b0c2095..456a8f2 100644
--- a/lando/k8s/jobmanager.py
+++ b/lando/k8s/jobmanager.py
@@ -169,7 +169,10 @@ class JobManager(object):
                 read_only=True))
         command_parts = run_workflow_config.command
         command_parts.extend(["--tmp-outdir-prefix", Paths.TMPOUT_DATA + "/",
-                              "--outdir", Paths.OUTPUT_RESULTS_DIR + "/"])
+                              "--outdir", Paths.OUTPUT_RESULTS_DIR + "/",
+                              "--max-ram", self.job.job_flavor_memory,
+                              "--max-cores", str(self.job.job_flavor_cpus)
+                              ])
         command_parts.extend([
             self.names.workflow_path,
             self.names.job_order_path,
diff --git a/lando/server/jobapi.py b/lando/server/jobapi.py
index bcf596d..a049cd0 100644
--- a/lando/server/jobapi.py
+++ b/lando/server/jobapi.py
@@ -302,6 +302,8 @@ class Job(object):
         self.state = data['state']
         self.step = data['step']
         self.job_flavor_name = data['job_flavor']['name']
+        self.job_flavor_cpus = data['job_flavor']['cpus']
+        self.job_flavor_memory = data['job_flavor']['memory']
         self.vm_instance_name = data['vm_instance_name']
         self.vm_volume_name = data['vm_volume_name']
         self.stage_group = data['stage_group']

k8s lando should pass cpu/memory from job_flavor to calrissian
Currently the flavor settings are not being used by the k8s run workflow job.
These values need to be passed via "--max-ram" and "--max-cores" flags for the `run_workflow` step.
https://github.com/Duke-GCB/lando/blob/9294aabdb06947677d36dd738a3c927951bae7ec/lando/k8s/jobmanager.py#L170-L172
diff --git a/lando/k8s/tests/test_jobmanager.py b/lando/k8s/tests/test_jobmanager.py
index fa1c304..e98c2a4 100644
--- a/lando/k8s/tests/test_jobmanager.py
+++ b/lando/k8s/tests/test_jobmanager.py
@@ -10,7 +10,13 @@ class TestJobManager(TestCase):
         mock_job_order = {
             'threads': 2
         }
-        self.mock_job = Mock(username='jpb', workflow=Mock(url='someurl', job_order=mock_job_order), volume_size=3)
+        self.mock_job = Mock(
+            username='jpb',
+            workflow=Mock(url='someurl', job_order=mock_job_order),
+            volume_size=3,
+            job_flavor_cpus=2,
+            job_flavor_memory='1G',
+        )
         self.mock_job.id = '51'
         self.mock_job.vm_settings = None
         self.mock_job.k8s_settings.stage_data = Mock(
@@ -184,14 +190,14 @@ class TestJobManager(TestCase):
         self.assertEqual(job_container.name, 'run-workflow-51-jpb')  # container name
         self.assertEqual(job_container.image_name, self.mock_job.k8s_settings.run_workflow.image_name,
                          'run workflow image name is based on job settings')
-
-        self.assertEqual(job_container.command, ['bash', '-c', 'cwltool --tmp-outdir-prefix /bespin/tmpout/ '
-                                                               '--outdir /bespin/output-data/results/ '
-                                                               '/bespin/job-data/workflow/someurl '
-                                                               '/bespin/job-data/job-order.json '
-                                                               '>/bespin/output-data/bespin-workflow-output.json '
-                                                               '2>/bespin/output-data/bespin-workflow-output.log'
-                                                ],
+        expected_bash_command = 'cwltool --tmp-outdir-prefix /bespin/tmpout/ ' \
+                                '--outdir /bespin/output-data/results/ ' \
+                                '--max-ram 1G --max-cores 2 ' \
+                                '/bespin/job-data/workflow/someurl ' \
+                                '/bespin/job-data/job-order.json ' \
+                                '>/bespin/output-data/bespin-workflow-output.json ' \
+                                '2>/bespin/output-data/bespin-workflow-output.log'
+        self.assertEqual(job_container.command, ['bash', '-c', expected_bash_command],
                          'run workflow command combines job settings and staged files')
         self.assertEqual(job_container.env_dict['CALRISSIAN_POD_NAME'].field_path, 'metadata.name',
                          'We should store the pod name in a CALRISSIAN_POD_NAME environment variable')
diff --git a/lando/server/tests/test_jobapi.py b/lando/server/tests/test_jobapi.py
index 32d48c5..4ef4c84 100644
--- a/lando/server/tests/test_jobapi.py
+++ b/lando/server/tests/test_jobapi.py
@@ -23,6 +23,8 @@ class TestJobApi(TestCase):
             'created': '2017-03-21T13:29:09.123603Z',
             'job_flavor': {
                 'name': 'm1.tiny',
+                'cpus': 1,
+                'memory': '200MB',
             },
             'vm_instance_name': '',
             'vm_volume_name': '',
@@ -76,6 +78,8 @@ class TestJobApi(TestCase):
         self.assertEqual('joe@joe.com', job.username)
         self.assertEqual('N', job.state)
         self.assertEqual('m1.tiny', job.job_flavor_name)
+        self.assertEqual(1, job.job_flavor_cpus)
+        self.assertEqual('200MB', job.job_flavor_memory)
         self.assertEqual('', job.vm_instance_name)
         self.assertEqual('', job.vm_volume_name)
         self.assertEqual(True, job.cleanup_vm)
@@ -180,6 +184,8 @@ class TestJobApi(TestCase):
             'step': '',
             'job_flavor': {
                 'name': 'm1.tiny',
+                'cpus': 8,
+                'memory': '1G',
             },
             'vm_instance_name': '',
             'vm_volume_name': '',
@@ -246,6 +252,8 @@ class TestJobApi(TestCase):
                 'created': '2017-03-21T13:29:09.123603Z',
                 'job_flavor': {
                     'name': 'm1.tiny',
+                    'cpus': 2,
+                    'memory': '1G',
                 },
                 'vm_instance_name': '',
                 'vm_volume_name': '',
@@ -396,6 +404,8 @@ class TestJob(TestCase):
             'created': '2017-03-21T13:29:09.123603Z',
             'job_flavor': {
                 'name': 'm1.tiny',
+                'cpus': 1,
+                'memory': '200MB',
             },
             'vm_instance_name': '',
             'vm_volume_name': '',
@@ -432,7 +442,7 @@ class TestJob(TestCase):
             ],
             "cwl_pre_process_command": [
                 "prep.sh"
-            ]
+            ],
         }
         self.k8s_job_data = copy.deepcopy(job_data)
         self.k8s_job_data['job_settings']['name'] = 'k8s'

pip install -e .
parse_log_pytest
pytest
nose==1.3.7 pytest
3.6
pytest --no-header -rA --tb=line --color=no -p no:cacheprovider -W ignore::DeprecationWarning
adal==1.2.7
appdirs==1.4.4
argcomplete==3.1.2
attrs @ file:///opt/conda/conda-bld/attrs_1642510447205/work
CacheControl==0.12.14
cachetools==4.2.4
certifi==2021.5.30
cffi==1.15.1
chardet==3.0.4
coloredlogs==6.4
cryptography==40.0.2
cwl-upgrader==1.2.8
cwl-utils==0.28
cwlref-runner==1.0
cwltool==3.1.20230719185429
decorator==4.4.2
dogpile.cache==1.2.2
DukeDSClient==1.0.3
future==1.0.0
google-auth==2.22.0
humanfriendly==2.4
idna==2.7
importlib-metadata @ file:///tmp/build/80754af9/importlib-metadata_1631916693255/work
importlib-resources==5.4.0
iniconfig @ file:///home/linux1/recipes/ci/iniconfig_1610983019677/work
iso8601==1.1.0
isodate==0.6.1
Jinja2==2.9.5
jmespath==0.10.0
jsonpatch==1.32
jsonpointer==2.3
keystoneauth1==5.1.3
kubernetes==8.0.1
-e git+https://github.com/Duke-GCB/lando.git@9294aabdb06947677d36dd738a3c927951bae7ec#egg=lando
lando-messaging==0.7.6
lockfile==0.12.2
lxml==5.3.1
Markdown==2.6.9
MarkupSafe==2.0.1
mistune==2.0.5
more-itertools @ file:///tmp/build/80754af9/more-itertools_1637733554872/work
msgpack==1.0.5
munch==4.0.0
mypy-extensions==1.0.0
netifaces==0.11.0
networkx==2.5.1
nose==1.3.7
oauthlib==3.2.2
openstacksdk==0.49.0
os-client-config==2.1.0
os-service-types==1.7.0
packaging @ file:///tmp/build/80754af9/packaging_1637314298585/work
pbr==6.1.1
pika==0.10.0
pluggy @ file:///tmp/build/80754af9/pluggy_1615976315926/work
prov==1.5.1
psutil==7.0.0
py @ file:///opt/conda/conda-bld/py_1644396412707/work
pyasn1==0.5.1
pyasn1-modules==0.3.0
pycparser==2.21
pydot==1.4.2
PyJWT==2.4.0
pyparsing==2.4.7
pytest==6.2.4
python-dateutil==2.6.0
pytz==2025.2
PyYAML==3.12
rdflib==5.0.0
rdflib-jsonld==0.6.1
requests==2.20.1
requests-oauthlib==2.0.0
requestsexceptions==1.4.0
rsa==4.9
ruamel.yaml==0.17.40
ruamel.yaml.clib==0.2.8
schema-salad==8.4.20230808163024
shade==1.29.0
shellescape==3.8.1
six==1.17.0
stevedore==3.5.2
toml @ file:///tmp/build/80754af9/toml_1616166611790/work
typing_extensions @ file:///opt/conda/conda-bld/typing_extensions_1647553014482/work
urllib3==1.24.3
websocket-client==1.3.1
zipp @ file:///tmp/build/80754af9/zipp_1633618647012/work

name: lando
channels:
  - defaults
  - https://repo.anaconda.com/pkgs/main
  - https://repo.anaconda.com/pkgs/r
  - conda-forge
dependencies:
  - _libgcc_mutex=0.1=main
  - _openmp_mutex=5.1=1_gnu
  - attrs=21.4.0=pyhd3eb1b0_0
  - ca-certificates=2025.2.25=h06a4308_0
  - certifi=2021.5.30=py36h06a4308_0
  - importlib-metadata=4.8.1=py36h06a4308_0
  - importlib_metadata=4.8.1=hd3eb1b0_0
  - iniconfig=1.1.1=pyhd3eb1b0_0
  - ld_impl_linux-64=2.40=h12ee557_0
  - libffi=3.3=he6710b0_2
  - libgcc-ng=11.2.0=h1234567_1
  - libgomp=11.2.0=h1234567_1
  - libstdcxx-ng=11.2.0=h1234567_1
  - more-itertools=8.12.0=pyhd3eb1b0_0
  - ncurses=6.4=h6a678d5_0
  - openssl=1.1.1w=h7f8727e_0
  - packaging=21.3=pyhd3eb1b0_0
  - pip=21.2.2=py36h06a4308_0
  - pluggy=0.13.1=py36h06a4308_0
  - py=1.11.0=pyhd3eb1b0_0
  - pytest=6.2.4=py36h06a4308_2
  - python=3.6.13=h12debd9_1
  - readline=8.2=h5eee18b_0
  - setuptools=58.0.4=py36h06a4308_0
  - sqlite=3.45.3=h5eee18b_0
  - tk=8.6.14=h39e8969_0
  - toml=0.10.2=pyhd3eb1b0_0
  - typing_extensions=4.1.1=pyh06a4308_0
  - wheel=0.37.1=pyhd3eb1b0_0
  - xz=5.6.4=h5eee18b_1
  - zipp=3.6.0=pyhd3eb1b0_0
  - zlib=1.2.13=h5eee18b_1
  - pip:
      - adal==1.2.7
      - appdirs==1.4.4
      - argcomplete==3.1.2
      - cachecontrol==0.12.14
      - cachetools==4.2.4
      - cffi==1.15.1
      - chardet==3.0.4
      - coloredlogs==6.4
      - cryptography==40.0.2
      - cwl-upgrader==1.2.8
      - cwl-utils==0.28
      - cwlref-runner==1.0
      - cwltool==3.1.20230719185429
      - decorator==4.4.2
      - dogpile-cache==1.2.2
      - dukedsclient==1.0.3
      - future==1.0.0
      - google-auth==2.22.0
      - humanfriendly==2.4
      - idna==2.7
      - importlib-resources==5.4.0
      - iso8601==1.1.0
      - isodate==0.6.1
      - jinja2==2.9.5
      - jmespath==0.10.0
      - jsonpatch==1.32
      - jsonpointer==2.3
      - keystoneauth1==5.1.3
      - kubernetes==8.0.1
      - lando-messaging==0.7.6
      - lockfile==0.12.2
      - lxml==5.3.1
      - markdown==2.6.9
      - markupsafe==2.0.1
      - mistune==2.0.5
      - msgpack==1.0.5
      - munch==4.0.0
      - mypy-extensions==1.0.0
      - netifaces==0.11.0
      - networkx==2.5.1
      - nose==1.3.7
      - oauthlib==3.2.2
      - openstacksdk==0.49.0
      - os-client-config==2.1.0
      - os-service-types==1.7.0
      - pbr==6.1.1
      - pika==0.10.0
      - prov==1.5.1
      - psutil==7.0.0
      - pyasn1==0.5.1
      - pyasn1-modules==0.3.0
      - pycparser==2.21
      - pydot==1.4.2
      - pyjwt==2.4.0
      - pyparsing==2.4.7
      - python-dateutil==2.6.0
      - pytz==2025.2
      - pyyaml==3.12
      - rdflib==5.0.0
      - rdflib-jsonld==0.6.1
      - requests==2.20.1
      - requests-oauthlib==2.0.0
      - requestsexceptions==1.4.0
      - rsa==4.9
      - ruamel-yaml==0.17.40
      - ruamel-yaml-clib==0.2.8
      - schema-salad==8.4.20230808163024
      - shade==1.29.0
      - shellescape==3.8.1
      - six==1.17.0
      - stevedore==3.5.2
      - urllib3==1.24.3
      - websocket-client==1.3.1
prefix: /opt/conda/envs/lando

lando/k8s/tests/test_jobmanager.py::TestJobManager::test_create_run_workflow_job lando/server/tests/test_jobapi.py::TestJobApi::test_get_job_api
lando/k8s/tests/test_jobmanager.py::TestJobManager::test_cleanup_all lando/k8s/tests/test_jobmanager.py::TestJobManager::test_cleanup_organize_output_project_job lando/k8s/tests/test_jobmanager.py::TestJobManager::test_cleanup_record_output_project_job lando/k8s/tests/test_jobmanager.py::TestJobManager::test_cleanup_run_workflow_job lando/k8s/tests/test_jobmanager.py::TestJobManager::test_cleanup_save_output_job lando/k8s/tests/test_jobmanager.py::TestJobManager::test_cleanup_stage_data_job lando/k8s/tests/test_jobmanager.py::TestJobManager::test_create_organize_output_project_job lando/k8s/tests/test_jobmanager.py::TestJobManager::test_create_record_output_project_job lando/k8s/tests/test_jobmanager.py::TestJobManager::test_create_run_workflow_persistent_volumes lando/k8s/tests/test_jobmanager.py::TestJobManager::test_create_save_output_job lando/k8s/tests/test_jobmanager.py::TestJobManager::test_create_stage_data_job lando/k8s/tests/test_jobmanager.py::TestJobManager::test_create_stage_data_persistent_volumes lando/k8s/tests/test_jobmanager.py::TestJobManager::test_make_job_labels lando/k8s/tests/test_jobmanager.py::TestJobManager::test_read_record_output_project_details lando/k8s/tests/test_jobmanager.py::TestJobManager::test_read_record_output_project_details_missing_fields lando/k8s/tests/test_jobmanager.py::TestJobManager::test_read_record_output_project_details_pod_not_found lando/k8s/tests/test_jobmanager.py::TestNames::test_constructor lando/k8s/tests/test_jobmanager.py::TestNames::test_strips_username_after_at_sign lando/k8s/tests/test_jobmanager.py::TestStageDataConfig::test_constructor lando/k8s/tests/test_jobmanager.py::TestRunWorkflowConfig::test_constructor lando/k8s/tests/test_jobmanager.py::TestOrganizeOutputConfig::test_constructor lando/k8s/tests/test_jobmanager.py::TestSaveOutputConfig::test_constructor lando/k8s/tests/test_jobmanager.py::TestRecordOutputProjectConfig::test_constructor lando/server/tests/test_jobapi.py::TestJobApi::test_get_credentials lando/server/tests/test_jobapi.py::TestJobApi::test_get_input_files lando/server/tests/test_jobapi.py::TestJobApi::test_get_jobs_for_vm_instance_name lando/server/tests/test_jobapi.py::TestJobApi::test_get_run_job_data lando/server/tests/test_jobapi.py::TestJobApi::test_get_store_output_job_data lando/server/tests/test_jobapi.py::TestJobApi::test_get_workflow_methods_document lando/server/tests/test_jobapi.py::TestJobApi::test_job_constructor_volume_size lando/server/tests/test_jobapi.py::TestJobApi::test_post_error lando/server/tests/test_jobapi.py::TestJobApi::test_save_project_details lando/server/tests/test_jobapi.py::TestJobApi::test_set_job_state lando/server/tests/test_jobapi.py::TestJobApi::test_set_job_step lando/server/tests/test_jobapi.py::TestJobApi::test_set_vm_instance_name lando/server/tests/test_jobapi.py::TestJobApi::test_set_vm_volume_name lando/server/tests/test_jobapi.py::TestJob::test_cleanup_vm_default lando/server/tests/test_jobapi.py::TestJob::test_cleanup_vm_false lando/server/tests/test_jobapi.py::TestJob::test_cleanup_vm_true lando/server/tests/test_jobapi.py::CWLCommandTests::test_defaults_pre_and_post lando/server/tests/test_jobapi.py::CWLCommandTests::test_loads_base_command lando/server/tests/test_jobapi.py::CWLCommandTests::test_loads_pre_and_post lando/server/tests/test_jobapi.py::CWLCommandTests::test_requires_base_command lando/server/tests/test_jobapi.py::VMSettingsTests::test_loads_vmsettings
lando/k8s/jobmanager.py lando/server/jobapi.py
lando/k8s/jobmanager.py lando/server/jobapi.py