为 iLO 驱动程序实现清理操作

https://blueprints.launchpad.net/ironic/+spec/ilo-cleaning-support

本规范建议支持在 iLO 驱动程序中调用某些功能,作为清理过程的一部分,以管理 HP Proliant 节点。

问题描述

规范“实现清理状态” [1] 提供了一个框架,用于在清理过程中调用某些操作。其中一些操作可能依赖于硬件,并且可以通过 iLO 进行带外支持。

因此,iLO 驱动程序应能够支持 Proliant 特定的清理操作。

提议的变更

  • 将以下函数添加到 IloManagement 接口,并使用 @clean_step(priority) 进行装饰

    • ilo_reset()

      重置 iLO。

    • apply_base_firmware_settings()

      应用基本固件设置。

    • reset_ilo_credential()

      重置 BMC 密码为新的密码。这对于希望为新的工作负载刷新密码的环境非常有用。

    • reset_secure_boot_keys()

      重置安全启动密钥为制造商的默认值。(如果 ironic 驱动程序支持安全启动功能,则适用)

    • clear_secure_boot_keys()

      清除安全启动密钥(如果 ironic 驱动程序支持安全启动功能,则适用)

  • 建议的默认顺序如下 -

    reset_ilo_credential() 9 reset_secure_boot_keys() 8 apply_base_firmware_settings() 7 ilo_reset() 6

  • clear_secure_boot_keys() 的默认优先级为零,操作员可以选择 reset_secure_boot_keys 或 clear_secure_boot_keys(重置为制造商的默认值或清除所有密钥)。

  • proliantutils [2] 库将用于执行带外操作,例如 reset_bmc_credential、ilo_reset、apply_base_firmware_settings、reset_secure_boot_keys、clear_secure_boot_keys。

  • 将添加新的 CONF 变量 ‘CONF.ilo.base_firmware_settings’,它接受要在每个节点清理时应用的默认设置。

  • secure_disk_erase、update_firmware 将通过带内机制实现。正在探索 hdparm、shred 等工具用于磁盘擦除,以及 hpsum、smart 组件可执行文件用于固件更新。

  • 清理操作所需的参数需要通过带有适当键的 driver_info 传递。

    例如:以下是清理步骤所需的强制参数键 -
    1. upgrade_firmware - ilo_firmware_location_url 键,可以接受 http 位置 url 或 swift url,用于包含所有要更新的固件的 tar/gz 文件。

    2. reset_ilo_credential - ilo_change_password,它接受在清理期间要更改的默认 iLO 密码。

  • 如果缺少键,并且启用了相应的清理步骤,将记录警告消息,并且该步骤将无操作并继续执行其他清理步骤。

备选方案

数据模型影响

REST API 影响

RPC API 影响

驱动程序 API 影响

Nova 驱动程序影响

安全影响

通过执行一些清理任务(如安全磁盘擦除、iLO 密码重置等)来增强安全性。

其他最终用户影响

可扩展性影响

性能影响

其他部署者影响

  • 部署者可能需要使用 HP 特定工具构建 IPA ramdisk。

  • DIB 元素将被增强,以添加 ProLiant 特定的清理工具,用于部署 ramdisk。部署者可以使用增强的 DIB 元素来构建 ramdisk。

开发人员影响

实现

负责人

主要负责人

ramineni

工作项

实现可以在清理期间调用的函数。

依赖项

依赖于 https://review.openstack.org/#/c/102685/ 执行清理的框架。

测试

将添加单元测试,模拟 proliantutils 库。

升级和向后兼容性

文档影响

  • 将记录支持的固件设置。

  • 将记录某些清理操作所需的参数键。

  • 将记录使用 HP 特定工具创建部署 ramdisk。

参考资料

[1] 实现清理状态 - https://review.openstack.org/#/c/102685/

[2] proliantutils - https://github.com/hpproliant/proliantutils