翻译官网概述。

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

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

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

在接收节点UUID ironic-inspector

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

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

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

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

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

验证收到的数据

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

状态机图

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

内省规则:

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

How Ironic Inspector Works的更多相关文章

  1. Ironic 裸金属管理服务

    目录 文章目录 目录 Ironic 软件架构设计 资源模型设计 全生命周期的状态机设计 Inspection 裸金属上架自检阶段 Provision 裸金属部署阶段 Clean 裸金属回收阶段 快速体 ...

  2. ironic组件硬件自检服务——ironic-inspector

    介绍 ironic-inspector是一个用于硬件自检的辅助型服务,它可以对被ironic组件管理的裸金属节点进行硬件自检,通过在裸金属节点上运行内存系统,发现裸金属节点的硬件信息,例如CPU数量和 ...

  3. 手动集成 Ironic 裸金属管理服务(Rocky)

    目录 文章目录 目录 前文列表 横向扩展裸金属管理服务节点 配置基础设施 安装 Ironic(BareMetal) 安装 Nova Compute(BareMetal) 配置 Neutron 提供 P ...

  4. 【翻译】为Ext JS和Sencha Touch开发人员准备的应用程序监测(App Inspector)

    和其他的Sencha开发人员一样,我会花费大约半天的时间在我喜欢的IDE工具上编写JavaScript,而另一半时间则是在浏览器上测试和调试我的应用程序.在过去几年,每一个主要的浏览器都已大为改善.现 ...

  5. How the Bitcoin protocol actually works

    sklearn实战-乳腺癌细胞数据挖掘(博客主亲自录制视频教程) https://study.163.com/course/introduction.htm?courseId=1005269003&a ...

  6. 理解裸机部署过程ironic

    部署物理机跟部署虚拟机的概念在nova来看是一样,都是nova通过创建虚拟机的方式来触发,只是底层nova-scheduler和nova-compute的驱动不一样.虚拟机的底层驱动采用的libvir ...

  7. ironic images

    参考: http://blog.csdn.net/wanghuiict/article/details/52757359 ironic 整个部署流程中有两组映像,分别是 deploy 映像和 user ...

  8. 洛谷 P3486 [POI2009]KON-Ticket Inspector

    P3486 [POI2009]KON-Ticket Inspector 题目描述 Byteasar works as a ticket inspector in a Byteotian Nationa ...

  9. 注册 Ironic 裸金属节点并部署裸金属实例

    目录 文章目录 目录 前文列表 注册(Enrollment)裸机 创建裸金属实例的 Flavor 部署裸金属实例 日志分析 问题:Failed to create neutron ports for ...

随机推荐

  1. 基于spark Mllib(ML)聚类实战

        写在前面的话:由于spark2.0.0之后ML中才包括LDA,GaussianMixture 模型,这里k-means用的是ML模块做测试,LDA,GaussianMixture 则用的是ML ...

  2. HDU 1008 电梯( 水题)

    题意: 电梯当前在0层,每在1层需要停5秒,往上走每层需6秒,往下走每层需要4秒. 思路: 在接收输入的时候直接计算了它,不用再弄一个循环.每计算一个请求就更新当前层,停留5秒的等到输出时再加上5*n ...

  3. WORD窗体保护密码清除

    Word 2003破解方法如下:1.用Word打开已设置有密码的“保护文档”(原始DOC文件):2.菜单中选择“文件”→“另存为Web页”,保存为HTML文件然后关闭Word:3.用文本编辑器(如:记 ...

  4. JS encodeURIComponent函数

    为了避免歧义,可以用JS 的encodeURIComponent函数  将有歧义的字符(?+=等)转换成对应的ASCII编码 for(var i=0;i<whichform.elements.l ...

  5. codeforce 599C Day at the Beach

    Bi表示第i个块,那么就是说Bi max ≤ Bi+1 min,又因为Bi min ≤ Bi max, 因此只要判断前缀的最大值是否小于等于后缀. #include<bits/stdc++.h& ...

  6. python_27_多级字典嵌套及操作

    #key-value 字典无下标 所以乱序,key值尽量不要取中文 person_log={ '大二':{ 'Ya Nan':['free','cute','soso'], 'Sha sha':['微 ...

  7. java菜鸟的Python学习之路(1)

    学习一门新的语言,应当抓住语言的共有特性,这样容易触类旁通,学习起来也十分的快捷愉悦 而语言的特性大约有以下元素 变量定义与类型 算术符号与逻辑符号 for 循环与 while 循环 数组,线性表等一 ...

  8. EasyUI获取正在编辑状态行的索引

    function getRowIndex(target){ var tr = $(target).closest("tr.datagrid-row"); return paseIn ...

  9. JS - 箭头函数与 () {} 的作用域

    foo () { // ... } 等价于 foo: function () { // ... } foo: () => { // ... } 范例: // 全局 name = 'zhangsa ...

  10. Ajax基础知识梳理

    Ajax用一句话来说就是无须刷新页面即可从服务器取得数据.注意,虽然Ajax翻译过来叫异步JavaScript与XML,但是获得的数据不一定是XML数据,现在服务器端返回的都是JSON格式的文件. 完 ...