microsoft / regorus

Regorus - A fast, lightweight Rego (OPA policy language) interpreter written in Rust.
MIT License
130 stars 31 forks source link

Provide a way to get the package name of a loaded rego file #229

Closed anakrish closed 4 months ago

anakrish commented 4 months ago

Currently there is no direct way for the user to figure out package names defined in loaded policy files.

One way to obtain the package names is via a query:

$ regorus eval -d policy.rego "data[package_name]"
...
      "bindings": {
        "package_name": "agent_policy"
      }
...
let mut engine = Engine::new();
engine.add_policy(...);
engine.set_strict_builtin_errors(false); // Ensure that the query below does not raise errors due to missing data/input.

// Do not add_data since the added data shows up as keys in the `data` document.

// Create bindings to package names.
let results = engine.eval_query("data[package_name]".to_string(), false)?;
// Name of first package.
let package_name = results.result[0].bindings["package_name"].as_string()?.to_string();

The ask in this issue to provide a direct way.

See #228, #187