Documentation ¶
Overview ¶
Package repl implements a Read-Eval-Print-Loop (REPL) for interacting with the policy engine.
The REPL is typically used from the command line, however, it can also be used as a library. nolint: goconst // String reuse here doesn't make sense to deduplicate.
Index ¶
- Constants
- type Error
- type REPL
- func (r *REPL) DisableMultiLineBuffering(yes bool) *REPL
- func (r *REPL) DisableUndefinedOutput(yes bool) *REPL
- func (r *REPL) Loop(ctx context.Context)
- func (r *REPL) OneShot(ctx context.Context, line string) error
- func (r *REPL) SetOPAVersionReport(report [][2]string)
- func (r *REPL) WithCapabilities(capabilities *ast.Capabilities) *REPL
- func (r *REPL) WithInitBundles(b map[string]*bundle.Bundle) *REPL
- func (r *REPL) WithRegoVersion(v ast.RegoVersion) *REPL
- func (r *REPL) WithRuntime(term *ast.Term) *REPL
- func (r *REPL) WithStderrWriter(w io.Writer) *REPL
- func (r *REPL) WithV1Compatible(v1Compatible bool) *REPL
Examples ¶
Constants ¶
const ( // BadArgsErr indicates bad arguments were provided to a built-in REPL // command. BadArgsErr string = "bad arguments" )
Variables ¶
This section is empty.
Functions ¶
This section is empty.
Types ¶
type REPL ¶
type REPL struct {
// contains filtered or unexported fields
}
REPL represents an instance of the interactive shell.
func New ¶
func New(store storage.Store, historyPath string, output io.Writer, outputFormat string, errLimit int, banner string) *REPL
New returns a new instance of the REPL.
func (*REPL) DisableMultiLineBuffering ¶ added in v0.2.2
DisableMultiLineBuffering causes the REPL to not buffer lines when a parse error occurs. Instead, the error will be returned to the caller.
func (*REPL) DisableUndefinedOutput ¶ added in v0.2.2
DisableUndefinedOutput causes the REPL to not print any output when the query is undefined.
func (*REPL) Loop ¶
Loop will run until the user enters "exit", Ctrl+C, Ctrl+D, or an unexpected error occurs.
func (*REPL) OneShot ¶
OneShot evaluates the line and prints the result. If an error occurs it is returned for the caller to display.
Example ¶
nolint // example code
package main import ( "bytes" "context" "fmt" "github.com/open-policy-agent/opa/ast" "github.com/open-policy-agent/opa/repl" "github.com/open-policy-agent/opa/storage/inmem" ) func main() { // Initialize context for the example. Normally the caller would obtain the // context from an input parameter or instantiate their own. ctx := context.Background() // Instantiate the policy engine's storage layer. store := inmem.New() // Create a buffer that will receive REPL output. var buf bytes.Buffer // Create a new REPL. r := repl.New(store, "", &buf, "json", 0, ""). WithRegoVersion(ast.RegoV1) // Define a rule inside the REPL. r.OneShot(ctx, "p if { a = [1, 2, 3, 4]; a[_] > 3 }") // Query the rule defined above. r.OneShot(ctx, "p") // Inspect the output. Defining rules does not produce output so we only expect // output from the second line of input. fmt.Println(buf.String()) }
Output: { "result": [ { "expressions": [ { "value": true, "text": "p", "location": { "row": 1, "col": 1 } } ] } ] }
func (*REPL) SetOPAVersionReport ¶ added in v0.20.0
SetOPAVersionReport sets the information about the latest OPA release.
func (*REPL) WithCapabilities ¶ added in v0.42.0
func (r *REPL) WithCapabilities(capabilities *ast.Capabilities) *REPL
func (*REPL) WithInitBundles ¶ added in v0.67.0
func (*REPL) WithRegoVersion ¶ added in v0.69.0
func (r *REPL) WithRegoVersion(v ast.RegoVersion) *REPL
WithRegoVersion sets the Rego version to v.
func (*REPL) WithRuntime ¶ added in v0.10.0
WithRuntime sets the runtime data to provide to the evaluation engine.
func (*REPL) WithV1Compatible ¶ added in v0.61.0
WithV1Compatible sets the Rego version to v1. Deprecated: Use WithRegoVersion instead.