定义审计范围为资源池

包含您的 Launchpad 蓝图的 URL

https://blueprints.launchpad.net/watcher/+spec/define-the-audit-scope

Watcher 旨在提供一个灵活的解决方案,用于审计任何资源池并对其进行优化。

此蓝图旨在提供一种通用的方法来定义 审计 的范围。

被审计的资源集合将被称为“审计范围”,并且将在每个 审计模板(包含审计设置)中定义。

问题描述

到目前为止,当启动审计时,整个 OpenStack 集群 都会被审计,管理员无法提供基础设施的逻辑子集(主机聚合、可用区、网络、Hadoop 集群、存储卷等)。

应该能够独立于审计的目标和底层 OpenStack 服务(Nova、Neutron、Sahara 等)定义需要优化的资源集合。

用例

作为具有管理员角色的操作员,我希望能够在审计模板中定义审计范围,以便优化基础设施的某些子集

作为具有管理员角色的操作员,我希望在将资源 UUID 添加到审计范围后,如果该资源不存在或无法被任何优化策略处理,我能够收到通知,以便我知道我的审计范围是否有效

作为开发人员,我希望能够使用通用的描述机制来定义审计范围,以便我可以为任何类型的 OpenStack 资源开发优化策略

项目优先级

不相关,因为 Watcher 目前不在大型帐篷内。

提议的变更

审计模板 应该有一个新的属性,名为“scope”,它包含在审计期间要优化的资源列表。 如果未定义此属性,则默认情况下将采用整个默认可用区。

范围定义为资源类型数组,对于每种资源类型,定义为资源 uuid(s) 的数组

"scope": [
          {"host_aggregates": [
            {"id": 1},
            {"id": 2},
            {"id": 3}
          ]},
          {"availability_zones": [
            {"name": "AZ1"},
            {"name": "AZ2"}
          ]},
          {"exclude": [
            {"instances": [
              {"uuid": "9766dff1-3c81-4de2-92ae-19e0d9adcec6"},
              {"uuid": "777541bb-ce4f-4bf3-8320-d5792d5cdf6e"}
            ]},
            {"compute_nodes": [
              {"name": "compute1"}
            ]}
          ]}
        ]

我们可以从列出的 AZ 和 HA 中排除实例和计算节点,以防止 Watcher 导致它们迁移。

应该能够使用一些通配符字符来指示给定类型的所有资源,而不是特定 UUID 的数组。 例如,要选择所有 Nova 主机聚合和所有可用区,范围的定义如下

"scope": [
          {"host_aggregate": [
            {"id": "*"}
          ]},
          {"availability_zone": [
            {"name": "*"}
          ]}
        ]

当创建或更新范围时,将验证所有资源,例如主机聚合和可用区,以确保资源存在。 用于定义审计范围的模块如下

  • 范围默认模块 (decision_engine/scope/default.py)。 此模块应包含检查范围是否有效的方法。 如果范围有效,则应复制并修改最新的集群数据模型,以根据范围的内容进行修改。 结果副本是原始集群数据模型的一个子集,可用于 Watcher 策略。 如果提供了一些不可用的资源,则应将警告消息添加到日志中。

预计的更改将在以下位置进行

  • Watcher 决策引擎 中,策略 将审计范围作为输入参数接收

  • Watcher API 中,审计模板对象必须使用一个新的 scope 字段进行更新,并且必须添加一些验证,以验证添加到审计范围的资源类型和 UUID 的存在性。

备选方案

数据模型影响

以下数据对象将受到影响

  • AuditTemplate:

    • 我们应该能够将范围定义为资源类型数组,对于每种资源类型,定义为资源 uuid(s) 的数组存储在数据库中。

REST API 影响

对于以 /v1/audit_template/ 开头并使用类型 AuditTemplate 的每个 REST 资源 URL,都会产生影响

  • GET /v1/audit_template

  • GET /v1/audit_template/(audit_template_uuid)

  • POST /v1/audit_template

  • PATCH /v1/audit_template

  • GET /v1/audit_template/detail

类型 AuditTemplate 将包含一个新的 Scope 字段,该字段包含资源类型数组,对于每种资源类型,包含资源 uuid(s) 的数组。

以下是包含三个 Nova 主机聚合、两个可用区和一些排除对象的 Scope json 的审计模板的新 JSON 有效负载示例

{
    "created_at": "2016-01-07T13:23:52.761933",
    "deleted_at": null,
    "description": "Description of my audit template",
    "extra": {
        "automatic": true
    },
    "goal": "MINIMIZE_ENERGY",
    "scope": [{
        "host_aggregates": [{
            "id": 1
        }, {
            "id": 2
        }, {
            "id": 3
        }]
    }, {
        "availability_zones": [{
            "name": "AZ1"
        }, {
            "name": "AZ2"
        }]
    }, {
        "exclude": [{
            "instances": [{
                "uuid": "9766dff1-3c81-4de2-92ae-19e0d9adcec6"
            }, {
                "uuid": "777541bb-ce4f-4bf3-8320-d5792d5cdf6e"
            }]
        }, {
            "compute_nodes": [{
                "name": "compute1"
            }]
        }]
    }],
    "links": [{
        "href": "https://:9322/v1/audit_templates/27e3153e-d5bf-4b7e-b517-fb518e17f34c",
        "rel": "self"
    }, {
        "href": "https://:9322/audit_templates/27e3153e-d5bf-4b7e-b517-fb518e17f34c",
        "rel": "bookmark"
    }],
    "name": "My Audit Template",
    "updated_at": "2016-01-07T13:23:52.761937",
    "uuid": "27e3153e-d5bf-4b7e-b517-fb518e17f34c"
}

安全影响

通知影响

当资源不可用时,应发送警告消息。 该消息应描述哪个资源不可用。

其他最终用户影响

  • python-watcherclient audit-template-create 命令将被更新,以处理在 JSON 文件中提供的范围定义

  • python-watcherclient audit-template-show 命令将被更新,以显示审计范围 JSON 定义

  • python-watcherclient audit-template-list –detail 命令将被更新,以显示每个审计范围 JSON 定义

性能影响

其他部署者影响

操作员可能需要配置定期检查所有审计范围有效性的周期性任务的频率。

操作员可以指定主机聚合 ID,也可以指定主机聚合名称(将在未来提供)。

开发人员影响

实现

负责人

主要负责人

alexchadin

其他贡献者

jed56 vincent-francoise david-tardivel

工作项

以下是预见的工作项目列表

  • watcher/objects/audit_template.py 类中添加一个 scope 字段

  • 更新 watcher/db/sqlalchemy/models.py 中的 AuditTemplate

  • 创建 watcher/decision_engine/scope 文件夹,默认处理程序和基本处理程序类将放置在此处。

  • 为了将范围应用于 CDM,我们需要在策略执行之前将范围默认处理程序的实例添加到 watcher/decision_engine/strategy/strategies/base.py

  • 更新 watcher/api/controllers/v1/audit_template.py 类以处理新的 scope 字段以及资源类型和 UUID 的验证。

  • 更新单元测试和集成测试(Tempest 场景)

  • 提供数据库迁移脚本

依赖项

此蓝图与以下蓝图相关

测试

当然,需要更新单元测试。

需要更新现有的 Tempest 场景,这些场景创建了一个审计模板并定义了一个审计范围。

应该创建一个测试场景,该场景在测试环境中创建两个主机聚合,并确保审计仅影响属于审计范围的主机聚合的资源,并忽略其他主机聚合的资源。

应该编写另一个测试用例来处理审计范围中使用的资源 UUID 不再存在的情况。

文档影响

  • 需要在 Watcher 词汇表中定义 审计范围 的概念

  • 需要更新 REST API 文档,并显示定义审计范围的 JSON 有效负载

  • 需要更新用户指南,以显示如何在 json 文件中定义审计范围,并使用此文件作为输入参数创建审计模板。

参考资料

历史