上篇两篇文章分析了Nova Scheduler服务,这篇文章我们继续来分析创建虚拟机的过程。先来回顾一下。
class FilterScheduler(driver.Scheduler):
def scheduler_run_instance(self, context, request_spec,
admin_password, injected_files,
requested_networks, is_first_time,
filter_properties):
#获取调度所需参数
payload = dict(request_spec=request_spec)
#通知Nova API开始调度
notifier.notify(context, notifier.publisher_id("scheduler"),
'scheduler.run_instance.start', notifier.INFO, notifier.INFO,
payload)
...
#执行调度算法,获取加权主机列表
weighted_hosts = self._schedule(context, "compute", request_spec,
filter_properties, instance_uuids)
...
#为每个虚拟机分配计算节点
for num, instance_uuid in enumerate(instance_uuids):
...
try:
try:
#选择权值最高的计算节点
weighted_host = weighted_hosts.pop(0)
except IndexError:
raise exception.NoValidHost(reason="")
#在权值最高的计算节点上创建虚拟机
self._provision_resource(context, weighted_host,