zoukankan      html  css  js  c++  java
  • 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
  • 相关阅读:
    python爬虫常见面试题(二)
    python爬虫常见面试题(一)
    回首2018,展望2019
    PDF编辑软件PDFGuru
    打字机NoisyTyper
    文本标注系统
    logstash配置
    服务器上安装python3
    scrapy自调度方案
    前端项目配置nginx配置
  • 原文地址:https://www.cnblogs.com/gushiren/p/9516243.html
Copyright © 2011-2022 走看看