6.2.4. 创建验证规则
您可以通过将包含规则的配置映射自定义资源(CR)应用到 Validation 服务来创建验证规则。
重要
-
如果您创建与现有规则 相同的规则,验证服务
将使用规则执行OR操作。 -
如果您创建使用默认规则迭代的规则,则
Validation服务将不会启动。
验证规则示例
验证规则基于由 Provider Inventory 服务收集的虚拟机(VM)属性。
例如,VMware API 使用此路径来检查 VMware 虚拟机是否配置了 NUMA 节点关联性: MOR:VirtualMachine.config.extraConfig["numa.nodeAffinity"]。
Provider Inventory 服务使用列表值简化了此配置并返回 testable 属性:
"numaNodeAffinity": [
"0",
"1"
],
您可以根据此属性创建一个 Rego 查询,并将其添加到 forklift-validation-config 配置映射中:
`count(input.numaNodeAffinity) != 0`
流程
根据以下示例创建配置映射 CR:
$ cat << EOF | oc apply -f - apiVersion: v1 kind: ConfigMap metadata: name: <forklift-validation-config> namespace: openshift-mtv data: vmware_multiple_disks.rego: |- package <provider_package> 1 has_multiple_disks { 2 count(input.disks) > 1 } concerns[flag] { has_multiple_disks 3 flag := { "category": "<Information>", 4 "label": "Multiple disks detected", "assessment": "Multiple disks detected on this VM." } } EOF通过将
forklift-controller部署扩展到0来停止Validationpod:$ oc scale -n openshift-mtv --replicas=0 deployment/forklift-controller
通过将forklift-controller部署扩展到1:$ oc scale -n openshift-mtv --replicas=1 deployment/forklift-controller
检查
Validationpod 日志,以验证 pod 是否已启动:$ oc logs -f <validation_pod>
如果自定义规则与默认规则冲突,则
Validationpod 将不会启动。删除源供应商:
$ oc delete provider <provider> -n openshift-mtv
添加源供应商以应用新规则:
$ cat << EOF | oc apply -f - apiVersion: forklift.konveyor.io/v1beta1 kind: Provider metadata: name: <provider> namespace: openshift-mtv spec: type: <provider_type> 1 url: <api_end_point> 2 secret: name: <secret> 3 namespace: openshift-mtv EOF
您必须在创建自定义规则后更新规则版本,以便 Inventory 服务检测到更改并验证虚拟机。