一、界面样式

image.png

二、语法设计

  • Items属性
    • label:前端显示搜索名
    • path:查询的JSON位置,”##”表示”.”
    • type: “textbox”类型表示手动输入;combobox表示下拉框
    • data: 数据请求,包含两种模式
      • 传kind和field,主要用于从数据库查询,比如主机个数
      • 传ConfigMap, namespace和name,主要用于用户配置,比如配置Pod的状态
  1. {
  2. "metadata": {
  3. "name": "formsearch-pod",
  4. "namespace": "default"
  5. },
  6. "apiVersion": "doslab.io/v1",
  7. "kind": "Frontend",
  8. "spec": {
  9. "data": {
  10. "items": [
  11. {
  12. "label": "资源名称:",
  13. "path": "metadata##name",
  14. "type": "textbox"
  15. },
  16. {
  17. "label": "所在主机:",
  18. "path": "spec##nodeName",
  19. "type": "combobox",
  20. "data":
  21. {
  22. "kind": "Node",
  23. "field": "metadata##name"
  24. }
  25. },
  26. {
  27. "label": "实例状态:",
  28. "path": "status##phase",
  29. "type": "combobox",
  30. "data":
  31. {
  32. "kind": "ConfigMap",
  33. "namespace": "default",
  34. "name": "pod-status"
  35. }
  36. }
  37. ]
  38. },
  39. "type": "formsearch"
  40. }
  41. }

三、语法使用

3.1 普通模式

{
          "label": "资源名称:",
                    "path": "metadata##name",
                    "type": "textbox"
 }

说明根据JSON的metadata##name进行查询,其结果是

image.png

3.2 根据查询结果

{
                    "label": "所在主机:",
          "path": "spec##nodeName",
                    "type": "combobox",
          "data": 
          {
             "kind": "Node",
             "field": "metadata##name"
          }
       }
    即向Node资源(kubectl get nodes)查询所有资源,取metadata.name(##表示“.”)<br />![image.png](https://cdn.nlark.com/yuque/0/2021/png/99567/1630590939708-fde41cb1-6f17-49a0-bd96-26505201a016.png#clientId=u53f3d996-5949-4&from=paste&height=204&id=u0a07a689&margin=%5Bobject%20Object%5D&name=image.png&originHeight=407&originWidth=1363&originalType=binary&ratio=1&size=67540&status=done&style=none&taskId=u6a6b238a-4fa4-4360-9bb5-4a457cf0740&width=681.5)

3.3 用户配置

{
          "label": "实例状态:",
          "path": "status##phase",
          "type": "combobox",
          "data": 
          {
             "kind": "ConfigMap",
             "namespace": "default",
             "name": "pod-status"
          }
              }

image.png

其对应的ConfigMap为

apiVersion: v1
kind: ConfigMap
metadata:
  name: pod-status
  namespace: default
data:
  Completed: 执行完成
  Running: 运行中
  Terminating: 销毁中
  Pending: 挂起中
  Failed: 执行失败
  Unknown: 未知状态