|
最终,neutron-metadata-agent会把虚拟机信息放到头部中,发送到Nova Metadata服务的头部信息如下:
- headers = {
- 'X-Forwarded-For': req.headers.get('X-Forwarded-For'),
- 'X-Instance-ID': instance_id,
- 'X-Tenant-ID': tenant_id,
- 'X-Instance-ID-Signature': self._sign_instance_id(instance_id)
- }
此时Nova Metadata就可以通过虚拟机的uuid查询metadata信息了,代码位于nova/api/metadata/base.py:
- def get_metadata_by_instance_id(instance_id, address, ctxt=None):
- ctxt = ctxt or context.get_admin_context()
- attrs = ['ec2_ids', 'flavor', 'info_cache',
- 'metadata', 'system_metadata',
- 'security_groups', 'keypairs',
- 'device_metadata']
- try:
- im = objects.InstanceMapping.get_by_instance_uuid(ctxt, instance_id)
- except exception.InstanceMappingNotFound:
- LOG.warning('Instance mapping for %(uuid)s not found; '
- 'cell setup is incomplete', {'uuid': instance_id})
- instance = objects.Instance.get_by_uuid(ctxt, instance_id,
- expected_attrs=attrs)
- return InstanceMetadata(instance, address)
-
- with context.target_cell(ctxt, im.cell_mapping) as cctxt:
- instance = objects.Instance.get_by_uuid(cctxt, instance_id,
- expected_attrs=attrs)
- return InstanceMetadata(instance, address)
5 在虚拟机外部如何获取虚拟机metadata (编辑:安卓应用网_ASP源码网)
【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!
|