1、用户调用Nova的rescue函数
nova/virt/ironic/driver.py class IronicDriver(virt_driver.ComputeDriver): ...... ...... #导入ironicclient模块 def __init__(self, virtapi, read_only=False): super(IronicDriver, self).__init__(virtapi) global ironic if ironic is None: ironic = importutils.import_module('ironicclient') ...... self.ironicclient = client_wrapper.IronicClientWrapper() def spawn(self, context, instance, image_meta, injected_files, admin_password, allocations, network_info=None, block_device_info=None): ...... #调用ironicclient.call方法,触发节点部署 try: self.ironicclient.call("node.set_provision_state", node_uuid, ironic_states.ACTIVE, configdrive=configdrive_value) ...... try: ##Virt驱动程序在等待provision_state更改时循环,并根据需要更新Nova状态 timer.start(interval=CONF.ironic.api_retry_interval).wait() LOG.info('Successfully provisioned Ironic node %s', node.uuid, instance=instance)