翻译官网概述。

操作员将节点注册为Ironic,例如 通过openstack baremetal CLI命令。 电源管理认证应该在这一步提供给Ironic。

如节点状态所述,节点被置于正确的自省状态。

运算符使用 ironic-inspector API和 CLI发送自检节点。

在接收节点UUID ironic-inspector

验证电源认证,当前功率和供应状态

允许访问节点的PXE引导服务

为节点发出重启命令,以便启动虚拟硬盘。

虚拟磁盘收集所需的信息并将其发回ironic-inspector

在从ramdisk接收数据时,ironic-inspector

验证收到的数据

在Ironic数据库中使用它的BMC地址(在SSH驱动的情况下是MAC地址)找到节点,用收到的数据填充缺少的节点属性并创建丢失的端口。

状态机图

下面的图表显示了反省状态,即在节点内省,发现和重新处理过程中,ironic-inspector经历的内省状态。 该图还显示触发状态转换的事件。

How Ironic Inspector Works-LMLPHP

内省规则:

Inspector支持一个简单的基于JSON的DSL来定义在自省过程中运行的规则。 Inspector提供了一个API来管理这些规则,并在运行所有处理钩子后自动运行它们。

规则由检查条件和要运行的操作组成。 如果条件在内省数据上评估为真,则在节点上运行操作。

条件:

条件由具有字段的对象表示:

op比较操作的类型,默认可用操作符包括:

eq,le,ge,ne,lt,gt - 基本比较运算符;
in-net - 检查IP地址是否在给定的网络中;
匹配 - 要求与给定的正则表达式完全匹配;
包含 - 要求包含给定正则表达式的值;
is-empty - 检查该字段是否为空字符串,列表,字典或无值。
在内省数据中为字段使用JSON路径来比较。

从Mitaka版本开始,您也可以将条件应用于讽刺节点字段。 使用模式的前缀字段(data://或node://)来区分内省数据和节点的值。 两种方案都使用JSON路径:

{"field": "node://property.path", "op": "eq", "value": "val"}
{"field": "data://introspection.path", "op": "eq", "value": "val"}

如果方案(节点或数据)缺失,则条件将数据与自省数据进行比较。

反转布尔值,是否反转比较结果。

多个如何处理字段查询返回多个结果的情况(例如字段包含列表),可用的选项有:

任何(默认)需要任何匹配,
都要求全部匹配,
首先需要首先匹配。
所有其他字段被传递给条件插件,例如 数值比较操作需要一个值字段进行比较。

动作:

一个动作由一个带有字段的对象来表示:

行动类型的行动。可能的值由插件定义。

所有其他字段都传递给动作插件。

可用的默认操作包括:

自省失败。需要失败消息的消息参数。
set-attribute在Ironic节点上设置一个属性。需要一个路径字段,该字段是讽刺用途(例如/ properties / something)所使用的属性的路径,以及要设置的值。
设置能力在讽刺节点上设置能力。需要名称和值域,这是相应的新功能的名称和值。相同能力的现有值被替换。
extend-attribute与set-attribute相同,但将现有值视为列表并将值附加到它。如果可选的唯一参数设置为True,如果给定的值已经在列表中,则不会添加任何内容。
从mitaka发布开始,动作中的值字段支持从内省中获取数据,它使用的是Python字符串格式化符号

插件:

ironic-inspector 严重依赖插件进行数据处理。 即使标准功能主要基于插件。 在配置文件中设置processing_hooks选项,以更改要在内省数据上运行的插件集。 注意这个顺序在这个选项中很重要,特别是对于依赖于其他钩子的钩子。

调度
验证和更新基本硬件调度属性:CPU数量和架构,内存和磁盘大小。

validate_interfaces验证网络接口信息。 创建新的端口,可选地删除内省数据中不存在的端口。 还为PXE引导端口设置pxe_enabled标志,并将其设置为所有其他端口,以避免nova挑选随机端口来引导节点。
以下插件默认启用,但不需要时可以禁用:

ramdisk_error
报告错误,如果错误字段由ramdisk设置,还可以选择存储来自日志字段的日志
capabilities
检测节点功能:CPU,引导模式等。
pci_devices
收集由ramdisk返回的所有PCI设备的列表,并与配置文件的pci_devices部分的别名字段中定义的列表进行比较。 然后将识别的PCI设备及其计数存储在节点属性中。 这个信息稍后可以在nova中用于节点调度。
以下是一些可以额外启用的插件:

raid_device
从ramdisk收集块设备并在多次运行中暴露根设备。
extra_hardware
将ramdisk返回的'data'键的值作为JSON编码的字符串存储在Swift对象中。该插件也将尝试将数据转换为内省规则可用的格式。如果这是成功的,那么新格式将被存储在“额外”键中。然后将数据键从自检数据中删除,除非通过内省规则将其转换为不可用。
local_link_connection
处理从检查返回的LLDP数据,特别是查找端口ID和机箱ID,如果发现它在具有该数据的节点Ironic端口上配置本地链路连接信息。要在IPA清单中启用LLDP,ipa-collect-lldp = 1应作为内核参数传递给IPA ramdisk。为了避免两次处理原始LLDP数据,lldp_basic插件也应该在插件之前安装并运行。
lldp_basic
处理从检查返回的LLDP数据并分析基本管理(802.1AB),802.1Q和802.3中的TLV,并将处理的数据存回Swift中的Ironic检查器数据。

发觉:

从mitaka开始,ironic-inspector能够在Ironic中注册新的节点。

现有的node-not-found-hook处理如果ironic-inspector收到来自其无法识别的节点的检查数据时发生的情况。如果一个节点手动启动,而没有首先注册Ironic,就会发生这种情况。

为了发现,配置文件选项node_not_found_hook应该被设置为加载被称为enroll的挂钩。这个挂钩将使用假驱动程序将未标识的节点注册到Ironic(该驱动程序是一个可配置的选项,在ironic-inspector配置文件中将enroll_node_driver设置为所需的Ironic驱动程序)。

注册钩子也将在新节点上设置ipmi_address属性(如果它在我们收到的内省数据中可用)

注册挂钩完成后,ironic-inspector将按照与识别节点相同的方式处理自检数据。它运行处理插件,之后运行内省规则,这将允许更多的可定制节点配置。

将节点的Ironic驱动程序设置为agent_ipmitool驱动程序并为该驱动程序填充所需的driver_info的规则如下所示:

[{
"description": "Set IPMI driver_info if no credentials",
"actions": [
{"action": "set-attribute", "path": "driver", "value": "agent_ipmitool"},
{"action": "set-attribute", "path": "driver_info/ipmi_username",
"value": "username"},
{"action": "set-attribute", "path": "driver_info/ipmi_password",
"value": "password"}
],
"conditions": [
{"op": "is-empty", "field": "node://driver_info.ipmi_password"},
{"op": "is-empty", "field": "node://driver_info.ipmi_username"}
]
},{
"description": "Set deploy info if not already set on node",
"actions": [
{"action": "set-attribute", "path": "driver_info/deploy_kernel",
"value": "<glance uuid>"},
{"action": "set-attribute", "path": "driver_info/deploy_ramdisk",
"value": "<glance uuid>"}
],
"conditions": [
{"op": "is-empty", "field": "node://driver_info.deploy_ramdisk"},
{"op": "is-empty", "field": "node://driver_info.deploy_kernel"}
]
}]

所有通过登记挂钩发现并注册的节点都将在自省数据中包含一个auto_discovered标志,这个标志可以使用规则条件eq区分内省规则中的手动注册节点和自动发现节点

{
"description": "Enroll auto-discovered nodes with fake driver",
"actions": [
{"action": "set-attribute", "path": "driver", "value": "fake"}
],
"conditions": [
{"op": "eq", "field": "data://auto_discovered", "value": true}
]
}

功能检测:

从Newton版本开始,Ironic Inspector可以选择发现多个节点功能。 最近IPA图像是需要它的工作。

引导模式
当前启动模式(BIOS或UEFI)可以检测并记录为Ironic的boot_mode功能。 这将使一些驱动改变他们的行为来说明这种能力。

将[capabilities] boot_mode配置选项设置为True以启用。

CPU功能
默认情况下检测到几个CPU标志,并记录下列功能:

cpu_aes AES指令。
cpu_vt虚拟化支持。
cpu_txt TXT支持。
cpu_hugepages巨大页面(2 MiB)的支持。
cpu_hugepages_1g大页面(1 GiB)的支持。
可以定义自己的规则来检测CPU功能。 将[capabilities] cpu_flags配置选项设置为CPU标志和功能之间的映射,例如:

cpu_flags = aes:cpu_aes,svm:cpu_vt,vmx:cpu_vt
05-11 21:42