diff --git a/tardis/adapters/sites/moab.py b/tardis/adapters/sites/moab.py
index 3ab110a..cec43d0 100644
--- a/tardis/adapters/sites/moab.py
+++ b/tardis/adapters/sites/moab.py
@@ -72,15 +72,41 @@ class MoabAdapter(SiteAdapter):
             remote_resource_uuid="JobID", resource_status="State"
         )
 
+        # see job state codes at https://computing.llnl.gov/tutorials/moab/#JobStates
         translator_functions = StaticMapping(
             State=lambda x, translator=StaticMapping(
+                BatchHold=ResourceStatus.Stopped,
+                Canceling=ResourceStatus.Running,
+                CANCELLED=ResourceStatus.Deleted,
+                Completed=ResourceStatus.Deleted,
+                COMPLETED=ResourceStatus.Deleted,
+                COMPLETING=ResourceStatus.Running,
+                Deffered=ResourceStatus.Booting,
+                Depend=ResourceStatus.Error,
+                Dependency=ResourceStatus.Error,
+                FAILED=ResourceStatus.Error,
                 Idle=ResourceStatus.Booting,
+                JobHeldUser=ResourceStatus.Stopped,
+                Migrated=ResourceStatus.Booting,
+                NODE_FAIL=ResourceStatus.Error,
+                NotQueued=ResourceStatus.Error,
+                PENDING=ResourceStatus.Booting,
+                Priority=ResourceStatus.Booting,
+                Removed=ResourceStatus.Deleted,
+                Resources=ResourceStatus.Booting,
                 Running=ResourceStatus.Running,
-                Completed=ResourceStatus.Deleted,
-                Canceling=ResourceStatus.Running,
-                Vacated=ResourceStatus.Stopped,
+                RUNNING=ResourceStatus.Running,
+                Staging=ResourceStatus.Booting,
+                Starting=ResourceStatus.Booting,
+                Suspended=ResourceStatus.Stopped,
+                SUSPENDED=ResourceStatus.Stopped,
+                SystemHold=ResourceStatus.Stopped,
+                TimeLimit=ResourceStatus.Deleted,
+                TIMEOUT=ResourceStatus.Deleted,
+                UserHold=ResourceStatus.Stopped,
+                Vacated=ResourceStatus.Deleted,
             ): translator[x],
-            JobID=lambda x: int(x),
+            JobID=int,
         )
 
         self.handle_response = partial(

Missing resource status in moab site adapter
Because of the lack of some job status and their translations in the moab site adapter, an exception is thrown e.g. for drones in state "Removed". 
diff --git a/tests/adapters_t/sites_t/test_moab.py b/tests/adapters_t/sites_t/test_moab.py
index 12a580f..0ba91dc 100644
--- a/tests/adapters_t/sites_t/test_moab.py
+++ b/tests/adapters_t/sites_t/test_moab.py
@@ -80,6 +80,60 @@ ERROR:  invalid job specified (4761849)
 
 """
 
+STATE_TRANSLATIONS = [
+    ("BatchHold", ResourceStatus.Stopped),
+    ("Canceling", ResourceStatus.Running),
+    ("CANCELLED", ResourceStatus.Deleted),
+    ("Completed", ResourceStatus.Deleted),
+    ("COMPLETED", ResourceStatus.Deleted),
+    ("COMPLETING", ResourceStatus.Running),
+    ("Deffered", ResourceStatus.Booting),
+    ("Depend", ResourceStatus.Error),
+    ("Dependency", ResourceStatus.Error),
+    ("FAILED", ResourceStatus.Error),
+    ("Idle", ResourceStatus.Booting),
+    ("JobHeldUser", ResourceStatus.Stopped),
+    ("Migrated", ResourceStatus.Booting),
+    ("NODE_FAIL", ResourceStatus.Error),
+    ("NotQueued", ResourceStatus.Error),
+    ("PENDING", ResourceStatus.Booting),
+    ("Priority", ResourceStatus.Booting),
+    ("Removed", ResourceStatus.Deleted),
+    ("Resources", ResourceStatus.Booting),
+    ("Running", ResourceStatus.Running),
+    ("RUNNING", ResourceStatus.Running),
+    ("Staging", ResourceStatus.Booting),
+    ("Starting", ResourceStatus.Booting),
+    ("Suspended", ResourceStatus.Stopped),
+    ("SUSPENDED", ResourceStatus.Stopped),
+    ("SystemHold", ResourceStatus.Stopped),
+    ("TimeLimit", ResourceStatus.Deleted),
+    ("TIMEOUT", ResourceStatus.Deleted),
+    ("UserHold", ResourceStatus.Stopped),
+    ("Vacated", ResourceStatus.Deleted),
+]
+
+TEST_RESOURCE_STATE_TRANSLATION_RESPONSE = f"\n\n".join(
+    f"""
+<Data>
+ <Object>queue</Object>
+ <cluster LocalActiveNodes="0" LocalAllocProcs="0" LocalConfigNodes="918" LocalIdleNodes="9" LocalIdleProcs="1336" LocalUpNodes="916" LocalUpProcs="18776" RemoteActiveNodes="0" RemoteAllocProcs="0" RemoteConfigNodes="0" RemoteIdleNodes="0" RemoteIdleProcs="0" RemoteUpNodes="0" RemoteUpProcs="0" time="1583334681"/>
+ <queue count="0" option="active"/>
+ <queue count="0" option="eligible"/>
+ <queue count="0" option="blocked"/>
+</Data>
+
+<Data>
+ <Object>queue</Object>
+ <cluster LocalActiveNodes="0" LocalAllocProcs="0" LocalConfigNodes="918" LocalIdleNodes="9" LocalIdleProcs="1336" LocalUpNodes="916" LocalUpProcs="18776" RemoteActiveNodes="0" RemoteAllocProcs="0" RemoteConfigNodes="0" RemoteIdleNodes="0" RemoteIdleProcs="0" RemoteUpNodes="0" RemoteUpProcs="0" time="1583334681"/>
+ <queue count="1" option="completed" purgetime="86400">
+  <job Account="bw16g013" CompletionCode="CNCLD" EEDuration="2729" GJID="76242{num:02}" Group="ka_etp" JobID="76242{num:02}" JobName="startVM.py" ReqAWDuration="360" ReqProcs="20" StartTime="0" StatPSDed="0.000000" StatPSUtl="0.000000" State="{resource_status}" SubmissionTime="1583331813" SuspendDuration="0" User="ka_qb1555"/>
+ </queue>
+</Data>
+"""
+    for num, (resource_status, _) in enumerate(STATE_TRANSLATIONS)
+)
+
 
 class TestMoabAdapter(TestCase):
     @classmethod
@@ -216,6 +270,20 @@ class TestMoabAdapter(TestCase):
         del expected_resource_attributes.updated, return_resource_attributes.updated
         self.assertEqual(return_resource_attributes, expected_resource_attributes)
 
+    @mock_executor_run_command(TEST_RESOURCE_STATE_TRANSLATION_RESPONSE)
+    def test_resource_state_translation(self):
+        for num, (_, state) in enumerate(STATE_TRANSLATIONS):
+            job_id = f"76242{num:02}"
+            return_resource_attributes = run_async(
+                self.moab_adapter.resource_status,
+                AttributeDict(remote_resource_uuid=job_id),
+            )
+            self.assertEqual(return_resource_attributes.resource_status, state)
+
+        self.mock_executor.return_value.run_command.assert_called_with(
+            "showq --xml -w user=$(whoami) && showq -c --xml -w user=$(whoami)"
+        )
+
     @mock_executor_run_command(TEST_RESOURCE_STATUS_RESPONSE_RUNNING)
     def test_resource_status_update(self):
         self.assertEqual(

pip install -e .[contrib]
parse_log_pytest
pytest
pytest
3.8
pytest --no-header -rA --tb=line --color=no -p no:cacheprovider -W ignore::DeprecationWarning
aiohappyeyeballs==2.4.4
aiohttp==3.10.11
aiosignal==1.3.1
aiotelegraf==0.4.0
aiotools==1.7.0
async-timeout==5.0.1
AsyncOpenStackClient==0.9.0
asyncssh==2.20.0
attrs==25.3.0
black==24.8.0
certifi==2025.1.31
cffi==1.17.1
charset-normalizer==3.4.1
click==8.1.8
CloudStackAIO==0.0.8
cobald==0.14.0
-e git+https://github.com/MatterMiners/tardis.git@d1a436ebdb48d7f415b9a26526d8f5e0f68e564a#egg=cobald_tardis
cryptography==44.0.2
entrypoints==0.4
exceptiongroup @ file:///croot/exceptiongroup_1706031385326/work
flake8==7.1.2
flake8-bugbear==24.12.12
frozenlist==1.5.0
idna==3.10
iniconfig @ file:///home/linux1/recipes/ci/iniconfig_1610983019677/work
json-encoder==0.4.4
mccabe==0.7.0
multidict==6.1.0
mypy-extensions==1.0.0
outcome==1.3.0.post0
packaging @ file:///croot/packaging_1720101850331/work
pathspec==0.12.1
platformdirs==4.3.6
pluggy @ file:///tmp/build/80754af9/pluggy_1648042571233/work
propcache==0.2.0
pycodestyle==2.12.1
pycparser==2.22
pyflakes==3.2.0
pytelegraf==0.3.3
pytest @ file:///croot/pytest_1717793244625/work
python-dateutil==2.8.0
python-status==1.0.1
PyYAML==6.0.2
requests==2.32.3
simple-rest-client==0.5.4
simplejson==3.16.0
singledispatch==4.1.0
six==1.17.0
sniffio==1.3.1
sortedcontainers==2.4.0
tomli @ file:///opt/conda/conda-bld/tomli_1657175507142/work
toposort==1.10
trio==0.27.0
typing_extensions==4.13.0
urllib3==2.2.3
yarl==1.15.2

name: tardis
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
  - ca-certificates=2025.2.25=h06a4308_0
  - exceptiongroup=1.2.0=py38h06a4308_0
  - iniconfig=1.1.1=pyhd3eb1b0_0
  - ld_impl_linux-64=2.40=h12ee557_0
  - libffi=3.4.4=h6a678d5_1
  - libgcc-ng=11.2.0=h1234567_1
  - libgomp=11.2.0=h1234567_1
  - libstdcxx-ng=11.2.0=h1234567_1
  - ncurses=6.4=h6a678d5_0
  - openssl=3.0.16=h5eee18b_0
  - packaging=24.1=py38h06a4308_0
  - pip=24.2=py38h06a4308_0
  - pluggy=1.0.0=py38h06a4308_1
  - pytest=7.4.4=py38h06a4308_0
  - python=3.8.20=he870216_0
  - readline=8.2=h5eee18b_0
  - setuptools=75.1.0=py38h06a4308_0
  - sqlite=3.45.3=h5eee18b_0
  - tk=8.6.14=h39e8969_0
  - tomli=2.0.1=py38h06a4308_0
  - wheel=0.44.0=py38h06a4308_0
  - xz=5.6.4=h5eee18b_1
  - zlib=1.2.13=h5eee18b_1
  - pip:
      - aiohappyeyeballs==2.4.4
      - aiohttp==3.10.11
      - aiosignal==1.3.1
      - aiotelegraf==0.4.0
      - aiotools==1.7.0
      - async-timeout==5.0.1
      - asyncopenstackclient==0.9.0
      - asyncssh==2.20.0
      - attrs==25.3.0
      - black==24.8.0
      - certifi==2025.1.31
      - cffi==1.17.1
      - charset-normalizer==3.4.1
      - click==8.1.8
      - cloudstackaio==0.0.8
      - cobald==0.14.0
      - cryptography==44.0.2
      - entrypoints==0.4
      - flake8==7.1.2
      - flake8-bugbear==24.12.12
      - frozenlist==1.5.0
      - idna==3.10
      - json-encoder==0.4.4
      - mccabe==0.7.0
      - multidict==6.1.0
      - mypy-extensions==1.0.0
      - outcome==1.3.0.post0
      - pathspec==0.12.1
      - platformdirs==4.3.6
      - propcache==0.2.0
      - pycodestyle==2.12.1
      - pycparser==2.22
      - pyflakes==3.2.0
      - pytelegraf==0.3.3
      - python-dateutil==2.8.0
      - python-status==1.0.1
      - pyyaml==6.0.2
      - requests==2.32.3
      - simple-rest-client==0.5.4
      - simplejson==3.16.0
      - singledispatch==4.1.0
      - six==1.17.0
      - sniffio==1.3.1
      - sortedcontainers==2.4.0
      - toposort==1.10
      - trio==0.27.0
      - typing-extensions==4.13.0
      - urllib3==2.2.3
      - yarl==1.15.2
prefix: /opt/conda/envs/tardis

tests/adapters_t/sites_t/test_moab.py::TestMoabAdapter::test_resource_state_translation
tests/adapters_t/sites_t/test_moab.py::TestMoabAdapter::test_check_remote_resource_uuid tests/adapters_t/sites_t/test_moab.py::TestMoabAdapter::test_deploy_resource tests/adapters_t/sites_t/test_moab.py::TestMoabAdapter::test_exception_handling tests/adapters_t/sites_t/test_moab.py::TestMoabAdapter::test_machine_meta_data tests/adapters_t/sites_t/test_moab.py::TestMoabAdapter::test_machine_type tests/adapters_t/sites_t/test_moab.py::TestMoabAdapter::test_resource_status tests/adapters_t/sites_t/test_moab.py::TestMoabAdapter::test_resource_status_raise tests/adapters_t/sites_t/test_moab.py::TestMoabAdapter::test_resource_status_raise_past tests/adapters_t/sites_t/test_moab.py::TestMoabAdapter::test_resource_status_update tests/adapters_t/sites_t/test_moab.py::TestMoabAdapter::test_site_name tests/adapters_t/sites_t/test_moab.py::TestMoabAdapter::test_start_up_command_deprecation_warning tests/adapters_t/sites_t/test_moab.py::TestMoabAdapter::test_stop_resource tests/adapters_t/sites_t/test_moab.py::TestMoabAdapter::test_terminate_dead_resource tests/adapters_t/sites_t/test_moab.py::TestMoabAdapter::test_terminate_resource tests/adapters_t/sites_t/test_moab.py::TestMoabAdapter::test_terminate_resource_error
tardis/adapters/sites/moab.py
tardis/adapters/sites/moab.py