ipa和ironic-conductor交互
IPA使用lookup和hearteat机制与Ironic Conductor进行交互,启动时agent给Conductor的vendor_passthru lookup endpoint(地址为/v1/drivers/{driver}/vendor_passthru/lookup)发送一个硬件的profile,
然后Ironic就可以得出该节点的uuid,在成功发现该节点之后,agent隔N秒发送心跳包给Conductor(hearteat地址为/v1/nodes/{node_ident}/vendor_passthru/heartbeat ),conductor执行一系列动作,包括查询已经运行的命令的状态,启动带内清洁任务或将镜像部署到节点。
- #主函数入口,定义了IronicPythonAgent类的对象, 初始化它,并调用该对象的run()函数.
- #机器上电后,ramdisk在内存中执行,然后启动IPA,入口为cmd.agent.run(),
- #然后调用ironic-python-agent.agent.run(),其代码如下:
- def run(self):
- """Run the Ironic Python Agent."""
- # Get the UUID so we can heartbeat to Ironic. Raises LookupNodeError
- # if there is an issue (uncaught, restart agent)
- self.started_at = _time()
- #运行ipa,获取node的uuid,发送心跳包
- # Cached hw managers at runtime, not load time. See bug 1490008.
- hardware.load_managers()
- #调用hardwarre.load_managers加载硬件到缓存,以优先级顺序获取硬件管理器的列表。
- # Operator-settable delay before hardware actually comes up.
- # Helps with slow RAID drivers - see bug 1582797.
- if self.hardware_initialization_delay > 0:
- LOG.info('Waiting %d seconds before proceeding',
- self.hardware_initialization_delay)
- time.sleep(self.hardware_initialization_delay)
- #该函数中会判断是否为standalone模式启动,如果不是,则会向ironic-api查询当前节点的信息,比如uuid等:
- if not self.standalone:
- # Inspection should be started before call to lookup, otherwise
- # lookup will fail due to unknown MAC.
- uuid = None
- if cfg.CONF.inspection_callback_url:
- uuid = inspector.inspect()
- #利用Ironic API给Condutor发送lookup()请求,用户获取UUID,相当于自发现
- if self.api_url:
- self._wait_for_interface()
- #此处会调取ironic_python_agent.agent._wait_for_interface函数,
- #通过ironic_python_agent.hardware.dispatch_to_managers获取网卡信息
- content = self.api_client.lookup_node(
- #调用到ironic_python_agent.ironic_api_client.lookup_node的_do_lookup(),
- #然后发送一个GET /{api_version}/drivers/{driver}/vendor_passthru/lookup请求。
- #Condutor API在接受到lookup请求后调用指定驱动的lookup函数处理,返回节点UUID。
- hardware_info=hardware.dispatch_to_managers(
- 'list_hardware_info'),
- #调取ironic_python_agent.hardware.dispatch_to_managers获取硬件信息列表
- timeout=self.lookup_timeout,
- starting_interval=self.lookup_interval,
- node_uuid=uuid)
- LOG.debug('Received lookup results: %s', content)
- self.node = content['node']
- LOG.info('Lookup succeeded, node UUID is %s',
- self.node['uuid'])
- hardware.cache_node(self.node)
- self.heartbeat_timeout = content['config']['heartbeat_timeout']
- # Update config with values from Ironic
- config = content.get('config', {})
- if config.get('metrics'):
- for opt, val in config.items():
- setattr(cfg.CONF.metrics, opt, val)
- if config.get('metrics_statsd'):
- for opt, val in config.items():
- setattr(cfg.CONF.metrics_statsd, opt, val)
- elif cfg.CONF.inspection_callback_url:
- LOG.info('No ipa-api-url configured, Heartbeat and lookup '
- 'skipped for inspector.')
- else:
- LOG.error('Neither ipa-api-url nor inspection_callback_url'
- 'found, please check your pxe append parameters.')
- self.serve_ipa_api()#调取ironic_python_agent.agent.serve_ipa_api,创建一个wsgi的server服务对象,发送心跳包
- if not self.standalone and self.api_url:
- self.heartbeater.stop()
- #部署完成后停止心跳包
ipa和ironic-conductor交互的更多相关文章
- 注册 Ironic 裸金属节点并部署裸金属实例
目录 文章目录 目录 前文列表 注册(Enrollment)裸机 创建裸金属实例的 Flavor 部署裸金属实例 日志分析 问题:Failed to create neutron ports for ...
- 手动集成 Ironic 裸金属管理服务(Rocky)
目录 文章目录 目录 前文列表 横向扩展裸金属管理服务节点 配置基础设施 安装 Ironic(BareMetal) 安装 Nova Compute(BareMetal) 配置 Neutron 提供 P ...
- ironic-conductor与ipa交互clean部分代码分析
clean的动作会在provide和delete阶段才会触发 从代码分析: 对节点执行的node provide/deleted/clean会先发送到ironicclient ironicclient ...
- 理解裸机部署过程ironic
部署物理机跟部署虚拟机的概念在nova来看是一样,都是nova通过创建虚拟机的方式来触发,只是底层nova-scheduler和nova-compute的驱动不一样.虚拟机的底层驱动采用的libvir ...
- 剖析ironic
关键技术 在安装操作系统时需要存储介质来存储系统镜像.需要控制物理机开关机,在网络部署环境中还需要预启动环境. PXE (预启动环境) IPMI(电源管理) iSCSI(存储) 什么是PXE PXE( ...
- ironic baremetal rescue process
1.用户调用Nova的rescue函数 nova/virt/ironic/driver.py class IronicDriver(virt_driver.ComputeDriver): ...... ...
- 【ironic】ironic介绍与原理
[ironic]ironic介绍与原理 零,配置文件 0.1 配置驱动 文件ironic.conf, ipmi硬件类型,默认值也是ipmi, pxe_ipmitool驱动也是默认值,配置驱动 [DEF ...
- Ironic 裸金属实例的部署流程
目录 文章目录 目录 逻辑架构 部署架构 前提条件 部署流程 iSCSI Deploy UML PXE Deploy Driver Direct Deploy UML IPA Deploy Drive ...
- Ironic 裸金属管理服务
目录 文章目录 目录 Ironic 软件架构设计 资源模型设计 全生命周期的状态机设计 Inspection 裸金属上架自检阶段 Provision 裸金属部署阶段 Clean 裸金属回收阶段 快速体 ...
随机推荐
- Poj(1521),哈夫曼编码
题目链接:http://poj.org/problem?id=1521 这里,网上有很多博客都有写,很多人没有建树,直接就是求一下这个哈夫曼编码的长度,的确很巧妙,我也用的这个方法,但是,几乎所有博客 ...
- AMD、CMD、CommonJs和ES6对比
一.AMD(异步模块定义) AMD(异步模块定义)是RequireJS在推广过程中对模块定义的规范化产出.AMD是一个概念,RequireJs是对这个概念的实现.比如javascript语言是对ECM ...
- SQL基础语句汇总
连接数据库 1 mysql -h10.20.66.32 -uroot -p123456 -h后面是mysqlServer所在地址,-u后面是用户名,-p后面是密码 查看数据库 1 show datab ...
- pod 指令无效
到了新公司,配置pod,死活找不到pod指令,用了很多方法之后,找到了解决办法 sudo vim .bash_profile 然后添加 export PATH=/usr/local/bin:$PATH ...
- 通过tomcat配置访问本机资源
背景:在最近的项目中使用海康威视的摄像机,在项目预算中没有购买对应的硬盘录像机,但是由于客户需要能够进行视频的回放功能,所以直接采用了海康提供的视频管理客户端直接进行视频录像,然后保存在本机进行播放. ...
- 复用传统C/S架构系统,升级成‘伪’B/S架构设计
应用场景:已经部署了传统系统又想要移动方式的场景.安全性考虑要求高的场景(核心资源要求在企业内部的场景). 我们 做了如下的系统设计: 核心是我们利用了WS做了内外穿透的设计.
- Ajax上传文件/照片时报错TypeError :Illegal invocation
问题 Ajax上传文件/照片时报错TypeError :Illegal invocation 解决 网上搜索问题,错误原因可能有以下几个,依次检查: 请求类型有误,如post请求,但在后台设置的是ge ...
- 连接mysql 报错 Can't connect to local MySQL server through socket '/tmp/mysql.sock' (2)
网上找不到 朋友说是因为非正常关机导致,mysql.server start 运行报错 ERROR! The server quit without updating PID file(): 解决办 ...
- Python常用函数记录
Python常用函数/方法记录 一. Python的random模块: 导入模块: import random 1. random()方法: 如上如可知该函数返回一个[0,1)(左闭右开)的一个随机的 ...
- hive 学习系列一(数据类型的定义)
数字类型(Numeric Types) 整型 TINYINT(取值范围:-128 -- 127) SMALLINT(取值范围:-32,768 to 32,767) INT/INTEGER(取值范围: ...