@iress-nghia From the logs, looks like every failure is a numeric field: autoscale.min_workers, autoscale.max_workers, aws_attributes.first_on_demand, aws_attributes.spot_bid_price_percent.
On the contrary, every string field passed: node_type_id, availability, runtime_engine, cluster_type. And the message itself says it: the value must be 2 (is "2"). The number your policy is supposed to hold arrived as the string "2". This is not a DLT problem and your pipeline YAML is fine. It seems to be the the numbers got converted into string on the way through Terraform.
You can confirm this by trying this command:
```
databricks cluster-policies get <policy-id>
```
Look at the definition it returns. If you see `"value": "2"` with quotes on the numeric fields, that's the likely root cause.
We run our policies through Terraform too, and the reason we've never hit this is the shape of the input. We keep each policy definition as a raw .json file with real numbers and booleans in it, load it with `jsondecode(file(...))`, and pass it into a module variable that has no type constraint. jsondecode preserves number and bool types, and an unconstrained (or `type = any`) variable passes them through without unification, so `jsonencode` writes them back out as numbers.
So you have two clean fixes, either works:
1. Change the module variable that receives `policy_definition` to `type = any` (or drop the constraint). Terraform then keeps each entry's exact types and your existing HCL works as written.
2. Move the definition into a plain JSON file and load it with `jsondecode(file("policies/unified_archive.json"))`. This also makes the policy diffable against what the API returns, which is handy.