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]¶
基于请求中的属性过滤提供的池列表
- 参数:
context –
designate.context.DesignateContext- 请求的上下文对象pools –
designate.objects.pool.PoolList- 要选择的池列表zone –
designate.objects.zone.Zone- 要创建的区域
- 返回值:
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]¶
尝试加载并设置池到区域属性中提供的池。
- 参数:
context –
designate.context.DesignateContext- 请求的上下文对象pools –
designate.objects.pool.PoolList- 要选择的池列表zone –
designate.objects.zone.Zone- 要创建的区域
- 返回值:
designate.objects.pool.PoolList- 包含单个池的 PoolList。- 引发:
Forbidden, PoolNotFound
- name = 'pool_id_attribute'¶
要在
[designate:central:scheduler].filters选项列表中启用的名称
随机过滤器¶
回退过滤器¶
默认池过滤器¶
- class designate.scheduler.filters.default_pool_filter.DefaultPoolFilter(storage)[source]¶
基础:
Filter此过滤器将始终返回 designate 配置文件中指定的默认池
警告
应将其用作唯一的过滤器,因为它将始终返回相同的内容 - 包含单个
designate.objects.pool.Pool的designate.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
重要提示
调度器从左到右运行过滤器列表。