-
Notifications
You must be signed in to change notification settings - Fork 101
Assess jobs fails if it cannot find a cluster policy #358
Description
The assessment job fails if a cluster policy is declared but missing with the following error:
`DatabricksError: Can't find a cluster policy with id: 3063AE1FA3002298.
DatabricksError Traceback (most recent call last)
File ~/.ipykernel/1367/command--1-1614873630:18
15 entry = [ep for ep in metadata.distribution("databricks_labs_ucx").entry_points if ep.name == "runtime"]
16 if entry:
17 # Load and execute the entrypoint, assumes no parameters
---> 18 entry[0].load()()
19 else:
20 import databricks_labs_ucx
File /local_disk0/.ephemeral_nfs/cluster_libraries/python/lib/python3.10/site-packages/databricks/labs/ucx/runtime.py:213, in main()
212 def main():
--> 213 trigger(*sys.argv)
File /local_disk0/.ephemeral_nfs/cluster_libraries/python/lib/python3.10/site-packages/databricks/labs/ucx/framework/tasks.py:93, in trigger(*argv)
90 cfg = WorkspaceConfig.from_file(Path(args["config"]))
91 logging.getLogger("databricks").setLevel(cfg.log_level)
---> 93 current_task.fn(cfg)
File /local_disk0/.ephemeral_nfs/cluster_libraries/python/lib/python3.10/site-packages/databricks/labs/ucx/runtime.py:104, in assess_jobs(cfg)
102 ws = WorkspaceClient(config=cfg.to_databricks_config())
103 crawler = JobsCrawler(ws, RuntimeBackend(), cfg.inventory_database)
--> 104 crawler.snapshot()
File /local_disk0/.ephemeral_nfs/cluster_libraries/python/lib/python3.10/site-packages/databricks/labs/ucx/assessment/crawlers.py:237, in JobsCrawler.snapshot(self)
236 def snapshot(self) -> list[ClusterInfo]:
--> 237 return self._snapshot(self._try_fetch, self._crawl)
File /local_disk0/.ephemeral_nfs/cluster_libraries/python/lib/python3.10/site-packages/databricks/labs/ucx/framework/crawlers.py:214, in CrawlerBase._snapshot(self, fetcher, loader)
212 raise err
213 logger.debug(f"[{self._full_name}] crawling new batch for {self._table}")
--> 214 loaded_records = list(loader())
215 self._append_records(loaded_records)
216 return loaded_records
File /local_disk0/.ephemeral_nfs/cluster_libraries/python/lib/python3.10/site-packages/databricks/labs/ucx/assessment/crawlers.py:194, in JobsCrawler._crawl(self)
192 all_jobs = list(self._ws.jobs.list(expand_tasks=True))
193 all_clusters = {c.cluster_id: c for c in self._ws.clusters.list()}
--> 194 return self._assess_jobs(all_jobs, all_clusters)
File /local_disk0/.ephemeral_nfs/cluster_libraries/python/lib/python3.10/site-packages/databricks/labs/ucx/assessment/crawlers.py:223, in JobsCrawler._assess_jobs(self, all_jobs, all_clusters_by_id)
221 # Checking if Azure cluster config is present in cluster policies
222 if cluster_config.policy_id:
--> 223 policy = self._ws.cluster_policies.get(cluster_config.policy_id)
224 if _azure_sp_conf_present_check(json.loads(policy.definition)):
225 job_assessment[job.job_id].add(f"{_AZURE_SP_CONF_FAILURE_MSG} Job cluster.")
File /local_disk0/.ephemeral_nfs/cluster_libraries/python/lib/python3.10/site-packages/databricks/sdk/service/compute.py:3591, in ClusterPoliciesAPI.get(self, policy_id)
3589 if policy_id is not None: query['policy_id'] = policy_id
3590 headers = {'Accept': 'application/json', }
-> 3591 res = self._api.do('GET', '/api/2.0/policies/clusters/get', query=query, headers=headers)
3592 return Policy.from_dict(res)
File /local_disk0/.ephemeral_nfs/cluster_libraries/python/lib/python3.10/site-packages/databricks/sdk/core.py:1084, in ApiClient.do(self, method, path, query, headers, body, raw, files, data)
1080 if not response.ok:
1081 # TODO: experiment with traceback pruning for better readability
1082 # See https://stackoverflow.com/a/58821552/277035
1083 payload = response.json()
-> 1084 raise self._make_nicer_error(status_code=response.status_code, **payload) from None
1085 if raw:
1086 return StreamingResponse(response)
DatabricksError: Can't find a cluster policy with id: 3063AE1FA3002298.`