2.2. 创建基本 YAML 规则


本节论述了如何创建基本 MTA YAML 规则。假设您已安装了 MTA。有关安装说明,请参阅 MTA CLI 指南

2.2.1. 创建基本 YAML 规则模板

基于 MTA YAML 的规则有以下基本结构:

when(condition)
 message(message)
 tag(tags)

流程

  1. /home/<USER& gt;/ 目录中,创建一个文件,其中包含 YAML 规则的基本语法,如下所示:

    - category: mandatory
      description: |
       <DESCRIPTION TITLE>
       <DESCRIPTION TEXT>
      effort: <EFFORT>
      labels:
      - konveyor.io/source=<SOURCE_TECH>
      - konveyor.io/target=<TARGET_TECH>
      links:
     - url: <HYPERLINK>
       title: <HYPERLINK_TITLE>
      message: <MESSAGE>
      tag:
      - <TAG1>
      - <TAG2>
      ruleID: <RULE_ID>
      when:
       <CONDITIONS>

2.2.2. 创建基本 YAML 规则集模板

如果要对多个类似的规则进行分组,可以通过将其文件放在一个目录中并在目录 root 中创建 ruleset.yaml 文件来为它们创建一个规则集。当您使用- rules 选项将此目录作为输入传递给 MTA CLI 时,MTA 会将目录中的所有文件视为属于 ruleset.yaml 文件中定义的规则集。

流程

  1. 如果要使用- rules 选项传递整个目录,请为 ruleset.yaml 文件创建一个模板:

    name: <RULESET_NAME> 1
    description: <RULESET_DESCRIPTION>
    labels: 2
      - key=val
    1
    该名称在提供的规则集内必须是唯一的。
    2
    ruleset 标签由属于规则集的所有规则继承。

2.2.3. 创建 YAML 规则

每个规则文件包含一个或多个 YAML 规则。每个规则都包含元数据、条件和操作。

流程

  1. 创建 when 条件。

    YAML 规则的 when 条件可以是 provider

    1. 创建 供应商 条件

      provider 条件用于定义对特定语言提供程序的搜索查询,并调用提供程序的特定功能。

      条件的一般格式为 < provider_name>.<capability>。该条件还具有 inner 字段,用于指定搜索的详细信息。创建 供应商 条件及其内部字段的方式取决于您使用的供应商以及您调用的功能。

      下表列出了可用的提供程序及其功能。选择一个供应商及其功能,以满足您要创建的规则的目的。条件的一部分还没有包含任何条件的字段。

      供应商功能描述

      java

      引用

      找到模式引用,包括注解,带有可选代码位置,用于详细搜索

      依赖项

      检查应用程序是否有给定依赖项

      builtin

      xml

      使用 XPath 查询搜索 XML 文件

      json

      使用 JSONPath 查询搜索 JSON 文件

      FileContent

      使用 RegEx 模式搜索常规文件中的内容

      file

      查找名称与给定模式匹配的文件

      hasTags

      检查是否通过标记规则为应用程序创建标签

      go

      引用

      查找模式引用

      依赖项

      检查应用程序是否有给定依赖项

      以下示例显示了使用 引用 能力的 java 供应商条件。

      Example

      when:
        java.referenced:
  2. 供应商 条件添加合适的字段。

    下表列出了所有可用的供应商、其功能及其字段。选择属于您选择的供应商和功能的字段。请注意,一些字段是必须的。

    供应商功能字段必需?描述

    java

    引用

    pattern

    RegEx pattern

    位置

    源代码位置;请参阅下面所有支持的搜索位置列表

    annotated

    注解及其元素(名称和值)

    依赖项

    名称

    依赖项的名称

    nameregex

    与名称匹配的正则表达式模式

    upperBound

    匹配小于或等于的版本号

    lowerBound

    匹配大于或等于的版本号

    builtin

    xml

    XPath

    XPath 查询

    命名空间

    映射到范围向下查询到命名空间

    filepaths

    用于范围搜索的可选文件列表

    json

    XPath

    XPath 查询

    filepaths

    用于范围搜索的可选文件列表

    FileContent

    pattern

    在内容中匹配的正则表达式模式

    filePattern

    仅在与此模式匹配的文件中搜索

    file

    pattern

    查找与此模式匹配的名称的文件

    hasTags

    这是字符串标签的内联列表。有关标签格式的详情,请参阅 Rule Actions 中的 Tag Actions

    go

    引用

    pattern

    RegEx pattern

    依赖项

    名称

    依赖项的名称

    nameregex

    与名称匹配的正则表达式模式

    upperBound

    匹配小于或等于的版本号

    lowerBound

    匹配大于或等于的版本号

    以下搜索位置可用于范围 java 搜索:

    • CONSTRUCTOR_CALL
    • TYPE
    • 继承
    • METHOD_CALL
    • 注解
    • IMPLEMENTS_TYPE
    • ENUM_CONSTANT
    • RETURN_TYPE
    • IMPORT
    • VARIABLE_DECLARATION

      以下示例显示搜索软件包引用的规则的 when 条件。

      Example

      when:
        java.referenced:
          location: PACKAGE
          pattern: org.jboss.*
  3. 创建 ANDOR 条件

    • 所有子 条件都匹配时,和 条件都匹配。创建 条件,如下所示:

      when:
        and:
        - java.dependency:
            name: junit.junit
            upperbound: 4.12.2
            lowerbound: 4.4.0
        - java.referenced:
            location: IMPORT
            pattern: junit.junit
    • 当任何子条件都匹配时, 条件会匹配。创建 条件,如下所示:

      when:
        or:
        - java.dependency:
            name: junit.junit
            upperbound: 4.12.2
            lowerbound: 4.4.0
        - java.referenced:
            location: IMPORT
            pattern: junit.junit

2.2.4. 使用自定义 YAML 规则运行分析

要运行分析,请在 CLI 中使用-- rules 选项。

流程

  • 要在一条规则文件 /home/<USER>/rule.yaml 中使用规则,请运行以下命令:

    mta-cli analyze --input /home/<USER>/data/ --output /home/<USER>/output/ --rules /home/<USER>/rule.yaml

    其中:

    • /home/<USER>/data/ - 源代码或二进制的目录
    • /home/<USER>/output/ - 报告的目录(HTML 和 YAML)
  • 要使用多个规则文件,您需要将它们放在目录中并添加 ruleset.yaml 文件。然后,目录被视为 规则集,您可以将其作为输入传递给 规则 选项。

请注意,如果您要在 CLI 中使用-- target 或-- source 选项,则引擎将仅选择与该目标标签匹配的规则。因此,请确保您在规则上添加了目标或源标签。如需了解更多详细信息,请参阅 保留标签

Red Hat logoGithubRedditYoutubeTwitter

学习

尝试、购买和销售

社区

关于红帽文档

通过我们的产品和服务,以及可以信赖的内容,帮助红帽用户创新并实现他们的目标。

让开源更具包容性

红帽致力于替换我们的代码、文档和 Web 属性中存在问题的语言。欲了解更多详情,请参阅红帽博客.

關於紅帽

我们提供强化的解决方案,使企业能够更轻松地跨平台和环境(从核心数据中心到网络边缘)工作。

© 2024 Red Hat, Inc.