7.2. Validation 서비스에 대한 사용자 지정 규칙 생성
유효성 검사 서비스는 OCI(Open Policy Agent) 정책 규칙을 사용하여 마이그레이션을 위한 각 VM(가상 머신)의 적합성을 확인합니다. 유효성 검사 서비스는 공급자 인벤토리 서비스에 VM 속성으로 저장되는 각 VM에 대한 우려 목록을 생성합니다. 웹 콘솔에는 공급자 인벤토리의 각 VM에 대한 문제가 표시됩니다.
사용자 지정 규칙을 만들어 Validation 서비스의 기본 규칙 집합을 확장할 수 있습니다. 예를 들어 VM에 여러 디스크가 있는지 확인하는 규칙을 생성할 수 있습니다.
7.2.1. Rego 파일 정보 링크 복사링크가 클립보드에 복사되었습니다!
검증 규칙은 OCI(Open Policy Agent) 기본 쿼리 언어인 Rego 로 작성됩니다. 규칙은 Validation Pod의 /usr/share/opa/policies/io/konveyor/forklift/<provider > 디렉터리에 .rego 파일로 저장됩니다.
각 검증 규칙은 별도의 .rego 파일에 정의되고 특정 조건에 대한 테스트입니다. 조건이 true 로 평가되면 규칙은 {"category", "label", "assessment"} 해시를 문제에 추가합니다. 문제가 있는 콘텐츠는 VM의 인벤토리 레코드에 있는 concerns 키에 추가됩니다. 웹 콘솔에는 공급자 인벤토리의 각 VM에 대한 concerns 키 내용이 표시됩니다.
다음 .rego 파일 예제에서는 VMware VM 클러스터에서 활성화된 분산 리소스 스케줄링을 확인합니다.
drs_enabled.rego example
7.2.2. 기본 검증 규칙 확인 링크 복사링크가 클립보드에 복사되었습니다!
사용자 지정 규칙을 만들기 전에 Validation 서비스의 기본 규칙을 확인하여 기존 기본값을 설명하는 규칙을 만들지 않아야 합니다.
예: 기본 규칙에 default valid_input = false 행이 포함되어 있고 default valid_input = true 줄이 포함된 사용자 정의 규칙을 생성하면 검증 서비스가 시작되지 않습니다.
프로세스
ValidationPod의 터미널에 연결합니다.oc rsh <validation_pod>
$ oc rsh <validation_pod>Copy to Clipboard Copied! Toggle word wrap Toggle overflow 공급자의 OPA 정책 디렉터리로 이동합니다.
cd /usr/share/opa/policies/io/konveyor/forklift/<provider>
$ cd /usr/share/opa/policies/io/konveyor/forklift/<provider>1 Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 1
vmware또는ovirt를 지정합니다.
기본 정책을 검색합니다.
grep -R "default" *
$ grep -R "default" *Copy to Clipboard Copied! Toggle word wrap Toggle overflow
7.2.3. 검증 규칙 생성 링크 복사링크가 클립보드에 복사되었습니다!
검증 서비스에 규칙이 포함된 구성 맵 CR(사용자 정의 리소스)을 적용하여 검증 규칙을 생성합니다.
-
기존 규칙과 동일한 이름으로 규칙을 만드는 경우
유효성 검사서비스는 규칙을 사용하여OR작업을 수행합니다. -
기본 규칙과 일치하지 않는 규칙을 생성하면
검증서비스가 시작되지 않습니다.
검증 규칙 예
검증 규칙은 공급자 인벤토리 서비스에서 수집한 VM(가상 머신) 속성을 기반으로 합니다.
예를 들어 VMware API는 이 경로를 사용하여 VMware VM에 NUMA 노드 유사성이 MOR: Cryostat.config.extraConfig["numa.nodeAffinity"] 가 구성되어 있는지 확인합니다.
공급자 인벤토리 서비스는 이 구성을 단순화하고 목록 값을 사용하여 테스트 가능한 속성을 반환합니다.
"numaNodeAffinity": [
"0",
"1"
],
"numaNodeAffinity": [
"0",
"1"
],
이 속성을 기반으로 Rego 쿼리를 생성하고 forklift-validation-config 구성 맵에 추가합니다.
`count(input.numaNodeAffinity) != 0`
`count(input.numaNodeAffinity) != 0`
프로세스
다음 예에 따라 구성 맵 CR을 생성합니다.
Copy to Clipboard Copied! Toggle word wrap Toggle overflow forklift-controller배포를0으로 스케일링하여ValidationPod를 중지합니다.oc scale -n openshift-mtv --replicas=0 deployment/forklift-controller
$ oc scale -n openshift-mtv --replicas=0 deployment/forklift-controllerCopy to Clipboard Copied! Toggle word wrap Toggle overflow forklift-controller배포를1로 확장하여ValidationPod를 시작합니다.oc scale -n openshift-mtv --replicas=1 deployment/forklift-controller
$ oc scale -n openshift-mtv --replicas=1 deployment/forklift-controllerCopy to Clipboard Copied! Toggle word wrap Toggle overflow ValidationPod 로그를 확인하여 Pod가 시작되었는지 확인합니다.oc logs -f <validation_pod>
$ oc logs -f <validation_pod>Copy to Clipboard Copied! Toggle word wrap Toggle overflow 사용자 정의 규칙이 기본 규칙과 충돌하면
ValidationPod가 시작되지 않습니다.소스 공급자를 제거합니다.
oc delete provider <provider> -n openshift-mtv
$ oc delete provider <provider> -n openshift-mtvCopy to Clipboard Copied! Toggle word wrap Toggle overflow 소스 공급자를 추가하여 새 규칙을 적용합니다.
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
인벤토리 서비스에서 변경 사항을 감지하고 VM의 유효성을 검사하도록 사용자 지정 규칙을 생성한 후 규칙 버전을 업데이트해야 합니다.
7.2.4. 인벤토리 규칙 버전 업데이트 링크 복사링크가 클립보드에 복사되었습니다!
공급자 인벤토리 서비스에서 변경 사항을 감지하고 규칙 버전을 업데이트해야 합니다.
검증 서비스를 트리거하도록 규칙을 업데이트할 때마다 인벤토리
규칙 버전은 각 공급자에 대한 rules_version.rego 파일에 기록됩니다.
프로세스
현재 규칙 버전을 검색합니다.
GET https://forklift-validation/v1/data/io/konveyor/forklift/<provider>/rules_version
$ GET https://forklift-validation/v1/data/io/konveyor/forklift/<provider>/rules_version1 Copy to Clipboard Copied! Toggle word wrap Toggle overflow 출력 예
{ "result": { "rules_version": 5 } }{ "result": { "rules_version": 5 } }Copy to Clipboard Copied! Toggle word wrap Toggle overflow ValidationPod의 터미널에 연결합니다.oc rsh <validation_pod>
$ oc rsh <validation_pod>Copy to Clipboard Copied! Toggle word wrap Toggle overflow -
/usr/share/opa/policies/io/konveyor/forklift/<provider>/rules_version.rego파일에서 규칙 버전을 업데이트합니다. -
ValidationPod 터미널에서 로그아웃합니다. 업데이트된 규칙 버전을 확인합니다.
GET https://forklift-validation/v1/data/io/konveyor/forklift/<provider>/rules_version
$ GET https://forklift-validation/v1/data/io/konveyor/forklift/<provider>/rules_version1 Copy to Clipboard Copied! Toggle word wrap Toggle overflow 출력 예
{ "result": { "rules_version": 6 } }{ "result": { "rules_version": 6 } }Copy to Clipboard Copied! Toggle word wrap Toggle overflow
7.2.5. 인벤토리 서비스 JSON 검색 링크 복사링크가 클립보드에 복사되었습니다!
인벤토리 서비스 쿼리를 VM(가상 머신 )으로 전송하여 인벤토리 서비스 JSON을 검색합니다. 출력에는 유효성 검사 서비스 규칙에 의해 쿼리되는 인벤토리 속성이 포함된 "입력" 키가 포함되어 있습니다.
"입력" 키의 모든 속성을 기반으로 검증 규칙을 생성할 수 있습니다(예: input.snapshot.kind ).
프로세스
프로젝트의 경로를 검색합니다.
oc get route -n openshift-mtv
oc get route -n openshift-mtvCopy to Clipboard Copied! Toggle word wrap Toggle overflow 인벤토리서비스 경로를 검색합니다.oc get route <inventory_service> -n openshift-mtv
$ oc get route <inventory_service> -n openshift-mtvCopy to Clipboard Copied! Toggle word wrap Toggle overflow 액세스 토큰을 검색합니다.
TOKEN=$(oc whoami -t)
$ TOKEN=$(oc whoami -t)Copy to Clipboard Copied! Toggle word wrap Toggle overflow HTTP GET 요청을 트리거합니다(예: Curl 사용).
curl -H "Authorization: Bearer $TOKEN" https://<inventory_service_route>/providers -k
$ curl -H "Authorization: Bearer $TOKEN" https://<inventory_service_route>/providers -kCopy to Clipboard Copied! Toggle word wrap Toggle overflow 공급자의
UUID를 검색합니다.curl -H "Authorization: Bearer $TOKEN" https://<inventory_service_route>/providers/<provider> -k
$ curl -H "Authorization: Bearer $TOKEN" https://<inventory_service_route>/providers/<provider> -k1 Copy to Clipboard Copied! Toggle word wrap Toggle overflow 공급자의 VM을 검색합니다.
curl -H "Authorization: Bearer $TOKEN" https://<inventory_service_route>/providers/<provider>/<UUID>/vms -k
$ curl -H "Authorization: Bearer $TOKEN" https://<inventory_service_route>/providers/<provider>/<UUID>/vms -kCopy to Clipboard Copied! Toggle word wrap Toggle overflow VM의 세부 정보를 검색합니다.
curl -H "Authorization: Bearer $TOKEN" https://<inventory_service_route>/providers/<provider>/<UUID>/workloads/<vm> -k
$ curl -H "Authorization: Bearer $TOKEN" https://<inventory_service_route>/providers/<provider>/<UUID>/workloads/<vm> -kCopy to Clipboard Copied! Toggle word wrap Toggle overflow 출력 예
Copy to Clipboard Copied! Toggle word wrap Toggle overflow