ironic baremetal node status

 

 

参考:

https://docs.openstack.org/ironic/latest/contributor/states.html

https://docs.openstack.org/ironic/latest/contributor/states.html

 

enroll-manageable

ironic/api/controllers/v1/node.py
class NodeStatesController(rest.RestController):
    def provision(self, node_ident, target, configdrive=None,
              clean_steps=None, rescue_password=None):
            ......
            elif target in PROVISION_ACTION_STATES:
    pecan.request.rpcapi.do_provisioning_action(
        pecan.request.context, rpc_node.uuid, target, topic)
  
ironic/conductor/manager.py
class ConductorManager(base_manager.BaseConductorManager):
        ......
    #RPC方法启动某些供应状态转换。通过状态机启动配置状态更改.
    def do_provisioning_action(self, context, node_id, action):
            ......
            #如果action等于manager且provision状态为enroll,则执行验证节点
            if (action == states.VERBS['manage'] and
        node.provision_state == states.ENROLL):
    task.process_event(
        'manage',
        callback=self._spawn_worker,
        call_args=(self._do_node_verify, task),
        err_handler=utils.provisioning_error_handler)
    return
  
    #执行电源凭证验证的内部方法
    def _do_node_verify(self, task):
            ......
            else:
    try:
        power_state = task.driver.power.get_power_state(task)
  
ironic/drivers/modules/ipmitool.py
class IPMIPower(base.PowerInterface):
        ##获取任务节点的当前电源状态
        def get_power_state(self, task):
            driver_info = _parse_driver_info(task.node)#获取ipmitool访问节点所需的参数
            return _power_status(driver_info)
  
        def _parse_driver_info(node):
            ......#返回IPMI参数,当节点有了关于driver和相关认证等信息后,就可以通过manage请求,将状态转变为manageable状态
            return {
                 'address': address,
                 'dest_port': dest_port,
                 'username': username,
                 'password': password,
                 'port': port,
                 'uuid': node.uuid,
                 'priv_level': priv_level,
                 'local_address': local_address,
                 'transit_channel': transit_channel,
                 'transit_address': transit_address,
                 'target_channel': target_channel,
                 'target_address': target_address,
                 'protocol_version': protocol_version,
                 'force_boot_device': force_boot_device,
            }
View Code

相关文章:

  • 2021-09-05
  • 2022-12-23
  • 2021-08-20
  • 2022-12-23
  • 2022-12-23
  • 2022-12-23
  • 2021-12-08
  • 2021-10-30
猜你喜欢
  • 2022-12-23
  • 2021-03-31
  • 2022-12-23
  • 2022-12-23
  • 2022-12-23
  • 2021-10-23
相关资源
相似解决方案