BROWSE DOCS
REFERENCE
DOCS / REFERENCE

FAQ

Questions that come up in the first week.

The CLI

Does the CLI need access to my Databricks workspace?

breakdown prices from the bundle file, so it needs no workspace data — but it does run databricks bundle validate to catch cluster references that do not resolve. diff and guard run databricks bundle plan and therefore need the same workspace credentials you already use for bundle deploy. Finowl never provisions, modifies or deletes a resource.

Can I run it without the platform?

No. Pricing rates are fetched live rather than shipped in the package, and guard fetches the rules in force. Without a credential a command exits 2 with one authentication error rather than a cascade of network failures.

What happens on the very first run of a repository?

The data product must already exist. Reports are filed under the identifier in finowl.yml, and a report carrying an unknown identifier is rejected rather than creating anything. What the first run does create is the deployment for the environment it reports from, and the diff baseline — there is nothing to compare a first run against, so it becomes the comparison for the next one.

Why does --target have to be passed every time?

Because guessing it produced confident numbers for environments nobody asked about. A bundle priced for a target it never declared applies no overrides and no target variables, and reports the base bundle as an environment that does not exist. Nothing catches that, because the number looks fine. See The finowl CLI.

How do I change a workload word?

Edit it in finowl.yml directly. finowl init only asks about computes missing from the file and never re-asks a filled entry.

Products and identity

Can two bundles report to one data product?

Yes, deliberately: run finowl initin the second bundle and paste the project's id when it asks. It names the project the reports would be filed under before linking, so you can check the answer against what you were told.

What you must not do is copy a finowl.yml between bundles. The copy is valid and points at the wrong project, so both report into one product and their costs mix with nothing to indicate it.

I renamed my repository. Did I lose the history?

No. Identity is an opaque identifier, not a repository URL or a name. Moving a repository, restructuring a monorepo or migrating to another deployment tool never loses a product's history.

How do I set up a monorepo?

One project per bundle directory. Each databricks.yml gets its own finowl.yml beside it, with its own identity.

products/sales/databricks.yml      + finowl.yml   → project "sales"
products/marketing/databricks.yml + finowl.yml   → project "marketing"

finowl breakdown -b products/sales/databricks.yml -t prod

Budgets and rules

Can a warn rule ever block my pipeline?

No. Only rules with action: block make finowl guard exit non-zero. Warnings are always reported and never enforced, which is what makes it safe to introduce a rule as warn and watch what it would have caught.

Why does my budget rule have no threshold field?

Because the figure is each product's own budget. A number on the rule would be one an administrator could set, review and approve while something else stopped the build. One ceiling, set where the money is agreed. See Cost rules.

My rule exists but nothing ever fails. Why?

Three usual causes, in order of likelihood:

  • The rule is in no policy. The rules page marks those Never runs.
  • Its policy targets an environment this pipeline does not deploy to.
  • For a budget rule: the product has no committed budget, so no ceiling is emitted.

Does the guard check my code against the baseline estimate?

No, and it never will. Nothing fails a merge for costing more than the estimate said. The estimate is a projection made before the code existed; holding code to it would make the estimator a liability rather than a planning tool. The budget is what gets enforced.

Runs and attribution

How do local runs stay separate from CI?

The CLI detects whether it is running inside a CI provider. Local runs carry the developer's git identity and a -dirty marker when the tree has uncommitted changes, and the platform stores them as previews that never touch deployment costs or the dashboards.

Why is my product's actual cost lower than I expected?

Most often, untagged compute. Spend that carries no attribution tag is left unattributed rather than guessed at, so the product shows a total built from a fraction of the money. The other common cause is the as-of date: the most recent day or two are always partial. See Actual cost.

Why do I need both an Azure connection and a Databricks workspace?

They bill different things. Databricks bills the platform units; Azure bills the machines those units run on, plus storage and transfer. In a case we measured, the infrastructure half was the larger of the two. One source alone understates a product by roughly half.

Operations

How do I point the CLI at a non-production Finowl?

Set FINOWL_HOST. The identity domain, OAuth client id and API audience are all discovered from that host, so it is the only variable that changes.

Should I pin the CLI version in CI?

Yes, for anything gating a production deploy. pip install finowl takes whatever is current, so a release changes what gates your deploy without a commit of yours. Use pip install finowl==0.2.0 and upgrade deliberately.

A rule changed. Do I need to redeploy anything?

No. Rules are fetched at run time, per product and per environment. A change applies to the next pipeline run, in every repository.

Something is not answered here.

The exit codes and errors page indexes every error message the CLI produces. Otherwise get in touch and we will walk you through it.