How Ironic Inspector Works
翻译官网概述。
操作员将节点注册为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的更多相关文章
- Ironic 裸金属管理服务
目录 文章目录 目录 Ironic 软件架构设计 资源模型设计 全生命周期的状态机设计 Inspection 裸金属上架自检阶段 Provision 裸金属部署阶段 Clean 裸金属回收阶段 快速体 ...
- ironic组件硬件自检服务——ironic-inspector
介绍 ironic-inspector是一个用于硬件自检的辅助型服务,它可以对被ironic组件管理的裸金属节点进行硬件自检,通过在裸金属节点上运行内存系统,发现裸金属节点的硬件信息,例如CPU数量和 ...
- 手动集成 Ironic 裸金属管理服务(Rocky)
目录 文章目录 目录 前文列表 横向扩展裸金属管理服务节点 配置基础设施 安装 Ironic(BareMetal) 安装 Nova Compute(BareMetal) 配置 Neutron 提供 P ...
- 【翻译】为Ext JS和Sencha Touch开发人员准备的应用程序监测(App Inspector)
和其他的Sencha开发人员一样,我会花费大约半天的时间在我喜欢的IDE工具上编写JavaScript,而另一半时间则是在浏览器上测试和调试我的应用程序.在过去几年,每一个主要的浏览器都已大为改善.现 ...
- How the Bitcoin protocol actually works
sklearn实战-乳腺癌细胞数据挖掘(博客主亲自录制视频教程) https://study.163.com/course/introduction.htm?courseId=1005269003&a ...
- 理解裸机部署过程ironic
部署物理机跟部署虚拟机的概念在nova来看是一样,都是nova通过创建虚拟机的方式来触发,只是底层nova-scheduler和nova-compute的驱动不一样.虚拟机的底层驱动采用的libvir ...
- ironic images
参考: http://blog.csdn.net/wanghuiict/article/details/52757359 ironic 整个部署流程中有两组映像,分别是 deploy 映像和 user ...
- 洛谷 P3486 [POI2009]KON-Ticket Inspector
P3486 [POI2009]KON-Ticket Inspector 题目描述 Byteasar works as a ticket inspector in a Byteotian Nationa ...
- 注册 Ironic 裸金属节点并部署裸金属实例
目录 文章目录 目录 前文列表 注册(Enrollment)裸机 创建裸金属实例的 Flavor 部署裸金属实例 日志分析 问题:Failed to create neutron ports for ...
随机推荐
- springMvc-框架搭建
搭建springmvc框架的步骤: 1.在web.xml中配置springMvc的servlet 2.创建controller处理页面传来的数据, 3.床架springMvc文件,处理视图: 3.1: ...
- LeetCode Rotate Array 翻转数组
题意:给定一个数组,将该数组的后k位移动到前n-k位之前.(本题在编程珠玑中第二章有讲) 思路: 方法一:将后K位用vector容器装起来,再移动前n-k位到后面,再将容器内k位插到前面. class ...
- hdu-3572 Task Schedule---最大流判断满流+dinic算法
题目链接: http://acm.hdu.edu.cn/showproblem.php?pid=3572 题目大意: 给N个任务,M台机器.每个任务有最早才能开始做的时间S,deadline E,和持 ...
- tableviewcell折叠问题,(类似qq列表展开形式) 多个cell同时展开,OC版 和 Swift
之前没有用到过这块,但是今天看到,就试了试,但是发现,网上的有的方法不能多个cell同时展开,只能一个一个的展开. 我就尝试用用数组记录展开的标记的方法,功能实现了, 直接上代码: // // Vie ...
- Optional int parameter 'fundID' is present but cannot be translated into a null value due to being declared as a primitive type
错误的意思是: "可选的int参数'fundID'存在但由于被声明为基本类型而无法转换为空值" 意思是fundID被申明为int的基本数据类型, 不能转换为字符串的null值. 难 ...
- axios跨域问题记录
axios({headers: {'X-Requested-With': 'XMLHttpRequest','Content-Type': 'application/json; charset=UTF ...
- java调用摄像头
http://blog.csdn.net/xing_sky/article/details/43482213 原文地址:http://blog.csdn.net/zajin/article/detai ...
- 如何利用WordPress的菜单功能实现友情链接功能?
导语:对于wordpress网站的友情链接,有很多种方法可以实现,例如我们可以利用WordPress的链接功能,或者利用WordPress的菜单功能.本文章介绍的是如何利用菜单功能来实现友情链接. 前 ...
- 通过Tcode查找Badi或者客户出口
https://wiki.scn.sap.com/wiki/display/ABAP/Code+To+Find+BAdi Created by Naresh Reddy K, last modifie ...
- awk截取指定字段
#!/bin/bash #好多地方可以优化,先记录下,便于以后使用 dir="/logs/$1"file="/logs/$1/requests.log"if [ ...