Tripleo之nova-compute 和Ironic的代码深入分析(三)

本文深入剖析了在TripleO环境中,Nova-Compute如何通过设置ironic节点的provision_state为ACTIVE触发部署过程。探讨了ironic在接收到请求后的处理流程,包括任务调度、驱动验证、镜像准备、配置更新和单板启动顺序设定等关键步骤,详细阐述了driver部署和验证机制以及与Neutron DHCP服务器的交互。
摘要由CSDN通过智能技术生成

声明:

本博客欢迎转载,但请保留原作者信息!

作者:姜飞

团队:华为杭州OpenStack团队


上文说到,nova boot在nova-compute的spawn操作,设置了ironic node的provision_state为ACTIVE,ironic-api接收到了provision_state的设置请求,然后返回202的异步请求,那我们下来看下ironic在做什么.

首先,设置ironic node的provision_stat为ACTIVE相当于发了一个POST请求:PUT  /v1/nodes/(node_uuid)/states/provision。那根据openstack的wsgi的框架,注册了app为ironic.api.app.VersionSelectorApplication的类为ironic的消息处理接口,那PUT  /v1/nodes/(node_uuid)/states/provision的消息处理就在ironic.api.controllers.v1.node.NodeStatesController的provision方法。

    @wsme_pecan.wsexpose(None, types.uuid, wtypes.text, status_code=202)
    def provision(self, node_uuid, target):
        
        rpc_node = objects.Node.get_by_uuid(pecan.request.context, node_uuid)
        topic = pecan.request.rpcapi.get_topic_for(rpc_node)
		
        #进行状态判断,如果状态相同,则返回400,表示状态已经是目标状态了。
        #如果状态在ACTIVE或者REBUILD 或者状态在删除状态,返回409,表示相冲突,#要么在部署,要么在删除
        if target == rpc_node.provision_state:
            msg = (_("Node %(node)s is already in the '%(state)s' state.") %
                   {'node': rpc_node['uuid'], 'state': target})
            raise wsme.exc.ClientSideError(msg, status_code=400)

        if target in (ir_states.ACTIVE, ir_states.REBUILD):
            processing = rpc_node.target_provision_state is not None
        elif target == ir_states.DELETED:
            processing = (rpc_node.target_provision_state is not None and
                        rpc_node.provision_state != ir_states.DEPLOYWAIT)
        else:
            raise exception.InvalidStateRequested(state=target, node=node_uuid)

        if processing:
            msg 
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值