Rego Keyword: import
In Rego, the import
keyword is used to include references in the current file
from other places, namely other Rego packages. However, the import
keyword is
also used to change the Rego syntax available in the current file. Let's cover
this case first.
Importing rego.v1
In OPA 1.0 a number of
previously optional keywords will be required. These settings for the Rego
language is available in pre-1.0 versions using the import
keyword. The two
files that follow are equivalent.
package example
import rego.v1
allow if count(deny) == 0
deny contains "not admin" if input.user.role != "admin"
package example
allow if count(deny) == 0
deny contains "not admin" if input.user.role != "admin"
Importing packages
Most importantly, the import
keyword is used to make the rules defined in one
package, available in another.
Imagine we have a package, package1
, that defines a rule name
like this:
package package1
import rego.v1
name := "World"
Now, if we'd like to use the name
rule in another package, package2
, we
could do something like this:
package package2
import rego.v1
output := sprintf("Hello, %v", [data.package1.name])
While this will work, it's better to use an import at the top of the file to save repetition and declare the dependency upfront for readers of the policy. We can achieve the same result like this:
package package2
import rego.v1
import data.package1
output := sprintf("Hello, %v", [package1.name])
Sometimes, using the package name for an import many times throughout a file can be too verbose. In such cases, it can be helpful to use an alias like this:
package package2
import rego.v1
import data.package1 as p1
output := sprintf("Hello, %v", [p1.name])
Further Reading
- Read about imports in the OPA documentation.
- Make sure you're using
import
correctly with Regal's import rules.