Pool Scheduler Filters

关于过滤器

当用户创建区域时,池调度器使用过滤器将该区域分配到特定的 DNS 服务器池。作为管理员,您选择一个有序的过滤器列表,该列表在每个 zone create API 请求上运行。您可以配置调度器使用 Designate 提供的过滤器,或创建您自己的过滤器。

Designate 提供的过滤器

Designate 提供了几个过滤器,代表常见的用例。

基础类 - Filter

class designate.scheduler.filters.base.Filter(storage)[source]

这是用于过滤池的基础类。

此类应实现一个公共函数 filter(),该函数接受一个 designate.objects.pool.PoolList 并返回一个 designate.objects.pool.PoolList

abstract filter(context, pools, zone)[source]

基于请求中的属性过滤提供的池列表

参数:
返回值:

designate.objects.pool.PoolList - 过滤后的池列表

属性过滤器

class designate.scheduler.filters.attribute_filter.AttributeFilter(storage)[source]

基础: Filter

这允许用户通过向此过滤器提供提示来选择池。这些作为区域创建时提供的区域对象的一部分的属性提供。

{
    "attributes": {
        "pool_level": "gold",
        "fast_ttl": "true",
        "pops": "global",
    },
    "email": "user@example.com",
    "name": "example.com."
}

区域属性与潜在的池候选对象进行匹配,并且任何不匹配所有提示的池都会被删除。

警告

如果多个池匹配过滤器,则应与 designate.scheduler.impl_filter.filters.random_filter.RandomFilter 结合使用,否则我们将向用户引发错误。

name = 'attribute'

要在 [designate:central:scheduler].filters 选项列表中启用的名称

池 ID 属性过滤器

class designate.scheduler.filters.pool_id_attribute_filter.PoolIDAttributeFilter(storage)[source]

基础: Filter

这允许具有正确角色的用户指定将提供的区域调度到哪个确切的 pool_id。

这作为区域上的属性提供

{
    "attributes": {
        "pool_id": "794ccc2c-d751-44fe-b57f-8894c9f5c842"
    },
    "email": "user@example.com",
    "name": "example.com."
}

加载池以确保其存在,然后执行策略检查以确保用户具有正确的角色。

警告

如果不需要,则不应启用此功能,因为如果用户没有正确的角色,它将引发 403 Forbidden 错误。

filter(context, pools, zone)[source]

尝试加载并设置池到区域属性中提供的池。

参数:
返回值:

designate.objects.pool.PoolList - 包含单个池的 PoolList。

引发:

Forbidden, PoolNotFound

name = 'pool_id_attribute'

要在 [designate:central:scheduler].filters 选项列表中启用的名称

随机过滤器

class designate.scheduler.filters.random_filter.RandomFilter(storage)[source]

基础: Filter

如果提供多个输入池,则随机选择其中一个池。

注意

应将其用作最后一个过滤器之一,因为它将提供的池列表减少到单个池。

name = 'random'

要在 [designate:central:scheduler].filters 选项列表中启用的名称

回退过滤器

class designate.scheduler.filters.fallback_filter.FallbackFilter(storage)[source]

基础: Filter

如果没有可用于调度的区域,此过滤器将插入 default_pool_id。

注意

应将其用作最后一个过滤器之一,如果您希望保留调度器存在之前的行为。

name = 'fallback'

要在 [designate:central:scheduler].filters 选项列表中启用的名称

默认池过滤器

class designate.scheduler.filters.default_pool_filter.DefaultPoolFilter(storage)[source]

基础: Filter

此过滤器将始终返回 designate 配置文件中指定的默认池

警告

应将其用作唯一的过滤器,因为它将始终返回相同的内容 - 包含单个 designate.objects.pool.Pooldesignate.objects.pool.PoolList

name = 'default_pool'

要在 [designate:central:scheduler].filters 选项列表中启用的名称

有疑问的默认池过滤器

class designate.scheduler.filters.in_doubt_default_pool_filter.InDoubtDefaultPoolFilter(storage)[source]

基础: Filter

如果之前的过滤器没有对一个池做出明确的选择,并且默认池位于多个池的集合中,则此过滤器将选择默认池。

如果可用要调度的池少于或等于一个,或者默认池不在多个池的集合中,则此过滤器将传递池列表。

注意

应将其用作最后一个过滤器之一。

name = 'in_doubt_default_pool'

要在 [designate:central:scheduler].filters 选项列表中启用的名称

创建自定义过滤器

您可以通过扩展 designate.scheduler.filters.base.Filter 并注册 designate.conf 中的 designate.scheduler.filters 命名空间中的新入口点来创建自己的过滤器

[entry_points]
designate.scheduler.filters =
my_custom_filter = my_extension.filters.my_custom_filter:MyCustomFilter

在调度器中配置过滤器

在决定使用 Designate 提供的过滤器或创建自定义过滤器后,您必须在池调度器中配置过滤器。

designate.conf 文件中的 [service:central] 部分内,将您希望调度器使用的过滤器添加到 scheduler_filters 参数

[service:central]
scheduler_filters = attribute, pool_id_attribute, fallback, random, my_custom_filter

重要提示

调度器从左到右运行过滤器列表。