OPA(Open Policy Agent) hello rego 프로그램 실행하기
OPA 실행 파일 설치
$ curl -L -o opa <https://github.com/open-policy-agent/opa/releases/download/v0.62.1/opa_darwin_arm64_static>
$ chmod +x opa
$ mv opa ~/bin/
참고로 홈 디렉토리 아래의 bin 디렉토리에 실행 패스가 잡혀있기 때문에 해당 디렉토리로 이동시킨 것이다.
Intellij 와 Open Policy Agent Plugin 설치
JetBrain 의 IntelliJ 가 있다면 Open Policy Agent 플러그인을 설치하여 rego 프로그램을 작성할 수 있다.
hello 프로그램을 작성하여 실행하여 보자.
먼저 번들용 chap1 디렉토리를 만든다.
$ mkdir -p chap1
chap1 번들 아래에 hello.rego 파일을 만든다.
package hello
default allow_hello = false
default allow_world = false
allow_hello {
"hello" != ""
}
allow_world {
"world" != "world"
}
패키지 hello 는 디렉토리와 상관없으며 chap1 디렉토리를 만들었기 때문에 bundle 은 chap1 이다.
allow_hello 와 allow_world 는 rule 을 나타낸다. OPA 1.0 미만은 if 문이 없기 때문에 비교문 만으로 표현한다. OPA 1.0 부터는 if 문을 사용한다.
opa 실행은 input json 에 대한 output json 이 결과로 나오는데 input 소스를 보면 input 이 필요없기 때문에 빈 input.json 파일을 만든다.
$ touch input.json
현재까지의 디렉토리 구조를 보면 다음과 같다.
rego-example.iml 은 IntelliJ 의 OPA 플러그인에서 사용하는 파일이므로 신경쓸 필요가 없다.
$ tree .
.
├── chap1
│ ├── hello.rego
│ └── input.json
└── rego-example.iml
이를 cli 로 실행하면 다음과 같다.
$ opa eval -f pretty -b chap1 data.hello
--- output ---
{
"allow_hello": true,
"allow_world": false
}
opa eval 명령어로 rule 을 평가할 수 있다.
-f pretty 결과를 보기 쉽게 출력하라는 의미이다.
-b cha1 은 Bundle 을 입력해야 하는데 chap1 디렉토리 의 아래 rego 파일을 실행하다.
data.hello 는 Query 를 의미하며, 여기에는 package 나 rule 을 넣으면 된다. data 는 명시적으로 붙혀서 data.패키지 로 입력하면 된다.
allow_hello rule 을 실행하기 위해서는 query 부분에 rule 까지 넣어주면 된다.
$ opa eval -f pretty -b chap1 data.hello.allow_hello
--- output ---
true
결과 값으로 json 형태가 디퐅트로 출력되는데 -f pretty 를 제거하면 json 으로 결과가 출력된다.
$ opa eval -b chap1 data.hello
--- output ---
{
"result": [
{
"expressions": [
{
"value": {
"allow_hello": true,
"allow_world": false
},
"text": "data.hello",
"location": {
"row": 1,
"col": 1
}
}
]
}
]
}
input 을 위해서 빈 input.json 파일을 만들었는데 이를 활용하는 명령을 추가할 수 있다.
input 값을 실제로 사용하지는 않기 때문에 결과 값은 동일하다.
$ opa eval -b chap1 -i chap1/input.json data.hello
--- output ---
{
"result": [
{
"expressions": [
{
"value": {
"allow_hello": true,
"allow_world": false
},
"text": "data.hello",
"location": {
"row": 1,
"col": 1
}
}
]
}
]
}
실행을 cli 로 하지 말고 IntelliJ 에서 실행하는 방법은 아래와 같이 입력하면 된다.
메뉴에서 Run >> Edit Configurations... 을 실행한다.
앞에서 설명한 cli 에서 입력한 내용을 그대로 넣으면 된다.
Run 버튼을 클릭하면 다음과 같이 결과가 나온다.
소스는 아래 사이트에서 다운받을 수 있다. (계속 업데이트 될 예정)