Openstack--虚拟机获取metadata

2024-08-23 12:18

本文主要是介绍Openstack--虚拟机获取metadata,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

1、169.254.169.254

在实例中有一个魔法IP 169.254.169.254,通过访问这个ip,能获得许多与这个实例相关的信息,这些信息被称为metadata,我们在实例上发送:curl http://169.254.169.254/latest/meta-data/。

2、请求流程

1)instance 通过预定义的 169.254.169.254 请求 metadata;

2)请求被转发到 neutron router;

3)router 将请求转发给 neutron-ns-metadata-proxy;

4)再后面就简单了:neutron-ns-metadata-proxy 将请求通过 unix domain socket 发给 neutron-metadata-agent,后者再通过管理网络发给 nova-api-metadata;

参考https://blog.csdn.net/u010258235/article/details/101207119

3、nova代码解析

    /nova/api/metadata/handler.pydef __call__(self, req):if os.path.normpath(req.path_info) == "/":resp = base.ec2_md_print(base.VERSIONS + ["latest"])req.response.body = encodeutils.to_utf8(resp)req.response.content_type = base.MIME_TYPE_TEXT_PLAINreturn req.response#不同的场景不同的方式获取metaif CONF.neutron.service_metadata_proxy:if req.headers.get('X-Metadata-Provider'):meta_data = self._handle_instance_id_request_from_lb(req)else:meta_data = self._handle_instance_id_request(req)else:if req.headers.get('X-Instance-ID'):LOG.warning(_LW("X-Instance-ID present in request headers. The ""'service_metadata_proxy' option must be ""enabled to process this header."))meta_data = self._handle_remote_ip_request(req)if meta_data is None:raise webob.exc.HTTPNotFound()#格式数据try:data = meta_data.lookup(req.path_info)except base.InvalidMetadataPath:raise webob.exc.HTTPNotFound()if callable(data):return data(req, meta_data)resp = base.ec2_md_print(data)req.response.body = encodeutils.to_utf8(resp)req.response.content_type = meta_data.get_mimetype()return req.response
    /nova/api/metadata/handler.pydef get_metadata_by_instance_id(self, instance_id, address):cache_key = 'metadata-%s' % instance_id#缓存中获取metadatadata = self._cache.get(cache_key)if data:LOG.debug("Using cached metadata for instance %s", instance_id)return data#缓存不存在通过instance_id获取metadatatry:data = base.get_metadata_by_instance_id(instance_id, address)except exception.NotFound:return None#将metadata放入缓存中if CONF.api.metadata_cache_expiration > 0:self._cache.set(cache_key, data)return data

 

这篇关于Openstack--虚拟机获取metadata的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1099354

相关文章

Ubuntu固定虚拟机ip地址的方法教程

《Ubuntu固定虚拟机ip地址的方法教程》本文详细介绍了如何在Ubuntu虚拟机中固定IP地址,包括检查和编辑`/etc/apt/sources.list`文件、更新网络配置文件以及使用Networ... 1、由于虚拟机网络是桥接,所以ip地址会不停地变化,接下来我们就讲述ip如何固定 2、如果apt安

如何利用Java获取当天的开始和结束时间

《如何利用Java获取当天的开始和结束时间》:本文主要介绍如何使用Java8的LocalDate和LocalDateTime类获取指定日期的开始和结束时间,展示了如何通过这些类进行日期和时间的处... 目录前言1. Java日期时间API概述2. 获取当天的开始和结束时间代码解析运行结果3. 总结前言在J

java获取图片的大小、宽度、高度方式

《java获取图片的大小、宽度、高度方式》文章介绍了如何将File对象转换为MultipartFile对象的过程,并分享了个人经验,希望能为读者提供参考... 目China编程录Java获取图片的大小、宽度、高度File对象(该对象里面是图片)MultipartFile对象(该对象里面是图片)总结java获取图片

Java通过反射获取方法参数名的方式小结

《Java通过反射获取方法参数名的方式小结》这篇文章主要为大家详细介绍了Java如何通过反射获取方法参数名的方式,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下... 目录1、前言2、解决方式方式2.1: 添加编译参数配置 -parameters方式2.2: 使用Spring的内部工具类 -

Java如何获取视频文件的视频时长

《Java如何获取视频文件的视频时长》文章介绍了如何使用Java获取视频文件的视频时长,包括导入maven依赖和代码案例,同时,也讨论了在运行过程中遇到的SLF4J加载问题,并给出了解决方案... 目录Java获取视频文件的视频时长1、导入maven依赖2、代码案例3、SLF4J: Failed to lo

使用Java实现获取客户端IP地址

《使用Java实现获取客户端IP地址》这篇文章主要为大家详细介绍了如何使用Java实现获取客户端IP地址,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下... 首先是获取 IP,直接上代码import org.springframework.web.context.request.Requ

C++实现获取本机MAC地址与IP地址

《C++实现获取本机MAC地址与IP地址》这篇文章主要为大家详细介绍了C++实现获取本机MAC地址与IP地址的两种方式,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下... 实际工作中,项目上常常需要获取本机的IP地址和MAC地址,在此使用两种方案获取1.MFC中获取IP和MAC地址获取

C/C++通过IP获取局域网网卡MAC地址

《C/C++通过IP获取局域网网卡MAC地址》这篇文章主要为大家详细介绍了C++如何通过Win32API函数SendARP从IP地址获取局域网内网卡的MAC地址,感兴趣的小伙伴可以跟随小编一起学习一下... C/C++通过IP获取局域网网卡MAC地址通过win32 SendARP获取MAC地址代码#i

5分钟获取deepseek api并搭建简易问答应用

《5分钟获取deepseekapi并搭建简易问答应用》本文主要介绍了5分钟获取deepseekapi并搭建简易问答应用,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需... 目录1、获取api2、获取base_url和chat_model3、配置模型参数方法一:终端中临时将加

C#实现系统信息监控与获取功能

《C#实现系统信息监控与获取功能》在C#开发的众多应用场景中,获取系统信息以及监控用户操作有着广泛的用途,比如在系统性能优化工具中,需要实时读取CPU、GPU资源信息,本文将详细介绍如何使用C#来实现... 目录前言一、C# 监控键盘1. 原理与实现思路2. 代码实现二、读取 CPU、GPU 资源信息1.