Skip to main content

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.

Pre 1.0
package example

import rego.v1

allow if count(deny) == 0

deny contains "not admin" if input.user.role != "admin"
Post 1.0
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