--------------- 紧接上篇 nova实例创建(1) --------------------
3. 分析show方法
在2.1中的image = self.image_service.show(context, internal_id)
中,由于S3是EC2的存储平台,所以调用/nova/image/s3.py
的show方法
def show(self, context, image_id): # 参数image_id:实例镜像的ID值,是由ec2_id值变换格式后而来 # id_to_glance_id:根据实例镜像image_id,查询数据库,找到匹配的S3Image的表信息 # 获取它的S3Image.uuid并返回,赋值给image_uuid image_uuid = ec2utils.id_to_glance_id(context, image_id) # 这里的service是获取的service或者是GlanceImageService的对象 #(由glance.get_default_image_service()而来) iamge = self.service.show(context, image_uuid) # 转换镜像中的image_uuid到image_id # 更新image当中的相关属性,返回更新后的image数据 return self._translate_uuid_to_id(context, image)
其中,在image = self.service.show(context, image_uuid)
中可查到:
self.service = service or glance.get_default_image_service()
这里的get_default_image_service()
对应的是/nova/image/glance.py
文件。
可以看到,这里的service获取的类GlanceImageService的实例对象,调用的是该对象里面的show方法: