Puppet Openstack Mitaka Design Summit小结
Puppet Openstack Design Summit小结
经过Puppet Openstack社区的不断努力,Puppet Openstack社区目前提供的Official Modules已经成熟,直接被用于Mirantis Fuel,Redhat PackStack等主流的部署工具中。
因此从Juno版本开始,社区的重心逐渐地转移到如何提供更全面的测试,如何抽取公共库以及规范架构等等代码的优化工作上。
本次Puppet Openstack Work Session放在古色古香的Aoi会议室举行,由于参会人员较多,地板上也坐满了人。由于议题数量较多,每个议题的时间较长,破天荒地被拆分为三场,主要讨论以下问题:
1. init类的重构
为了向后兼容大量的废弃配置选项以及支持不断增长的新配置选项,当前的init.pp类越来越臃肿,这对于代码维护和理解带来了困难。最终得出解决方法概括来说有以下点:
- 将所有配置选项根据类型拆分为子类
- init类使用include子类来实现调用
- 不破坏原有接口
- 定期清理用于向后兼容的代码(就像清理草坪)
2. 增加管理定制化参数的方法
会议现场有人提出了每个项目为了支持新参数而在不停地更新module,需要有一种方法能够在不改动module层的基础上,通过在hiera层面来应对此挑战,PTL提到了当前的module::config已经能够很好支持此需求。这个重要feature最初是由UnitedStack贡献的,目前puppet-murano外,其他二十多个module均已支持定制化参数。
图为 PTL Emilien在谈及module::config的代码
3.处理客户端的warning级别输出
由于在某些情况下,client端会输出一些warning级别的日志,然而puppet当前的解析输出机制(不区分stdout/stderr)并不支持此类场景。已有新patch提交到了puppet-openstacklib公共库项目,方法是通过正则匹配的方式来只过滤掉warning信息,仍会捕获error级别的输出。但这个问题仍然治标不治本,由此引出了下个议题。
4.扩展性问题 Ruby库 vs OSclient
每场 work session的时间是40分钟,而大家在这个问题上争论非常激烈,以至于连10分钟的中场休息也没有放过,这个话题足足讨论了30分钟。
简单介绍该议题的上下文:当前puppet调用各服务的API接口获取资源信息是通过custom resource type和facter来获取的,这些自定义的脚本又是通过调用python-openstackclient的命令行接口来实现以上功能。
在最近的ML讨论中,由Mirantis的Sergey发现puppet-neutron模块在某种情况下,在议题3中我们已经知道Puppet傻傻分不清楚标准和错误输出,导致抓取了错误的输出信息,从而获取了不正确的net id。
说实话,社区在这个问题上已经在ML和IRC上经过了多届拉锯战般的讨论:要不要自己造个轮子,写个Ruby版本的SDK。
其实在OSclient之前,大家饱受使用各项目Client的痛苦(接口和输出不统一),于是由原Puppetlabs公司的美女工程师Crinkle发起,(索要照片请私信)写了一个Ruby SDK。但不久之后,OSClient横空出世,这个项目就被雪藏了。但现在大家发现在ruby中使用osclient的命令行接口还是比较坑爹的,于是又怀念起纯正血统的ruby SDK。
那么既然决定要干:大家又开始讨论应该怎么做,怎么利用现有的项目资源,如何使用现有的公共库等等各种问题(一言蔽之,怎么偷懒)。最终的结论是这样的:
It would be really really cool to have a ruby sdk for OS.
持反对意见者稍加润色以表示他们的怀疑态度:
It would be really really cool to have a (good) ruby sdk for OS
5.增加健康检测module
这是一个比较有意思的项目,例如我们希望能够在Puppet将服务启动或者重启后,有一个机制可以确认API服务是正常运行的。比如手动使用一个简单的curl命令,判断web应用的状态返回码。因此,有些工程师在一些类中添加了监控检测的代码来做这样的事情。不过都是一些松散分散在各个项目中的代码,因此社区这次把健康检测抽象成一个独立的module,提供标准的class和define接口,方便代码复用和持续地优化。
6.在*_config resource type中添加处理弃用配置选项的功能
这个topic属于一个新特性的讨论,例如,在Kilo版本开始,rabbit_hosts参数从DEFAULT section中移动到了slo_messaging中去。因此,我们希望通过以下格式将neutron中关于rabbit_hosts的新旧参数都集中管理起来:
neutron_config { 'oslo_messaging/rabbit_hosts': old_key => 'DEFAULT/rabbit_hosts', value => $value}
由于属于大家都喜闻乐见的特性,无人持异议,并且该议题的提出者clayton将如何实现的细节都写到了etherpad上(应放在puppet-specs里讨论实现的细节)。PTL戏称,你这是要让大家在etherpad给你+1的节奏嘛?一时间会议室里充满了快活的空气。
其他还有一些小的议题,例如PTL跪求更多的人参与到贡献和审查代码的工作中来(因为现在参与人员庞大,core member不够用了,每天都有审查不完的patch),还有当前puppet-ceph模块的进展和roadmap等等,这里就不再展开介绍了
通过这几届的design summit来看,Puppet Openstack社区已经完成了从无到有,从有到好的阶段,在完成了众多基础模块的开发以及公共库模块的抽取工作之后,社区当前的目标是进一步完善每个模块,确保可以处理各种异常情况,为终端用户或其他开发人员提供更好的部署服务。
UnitedStack Devops team在最近发布的Liberty版本中对Puppet Openstack社区做出了积极贡献,排名第四。在随后的Mikata Release开发中,我们会继续保持对Puppet Openstack社区的积极参与。
Puppet Openstack Mitaka Design Summit小结的更多相关文章
- PuppetOpenstack Newton Design Summit见闻
PS:技术博客已经好久没有来耕耘了,倒不是懒惰,而是最近一直在忙着写一本关于Openstack自动化部署的书籍,我觉得可能会比单独零散的技术文章更有价值一些. 作为重度拖延症患者,又把本来奥斯汀峰会期 ...
- OpenStack Mitaka安装
http://egon09.blog.51cto.com/9161406/1839667 前言: openstack的部署非常简单,简单的前提建立在扎实的理论功底,本人一直觉得,玩技术一定是理论指导实 ...
- openstack项目【day24】:OpenStack mitaka部署
前言: openstack的部署非常简单,简单的前提建立在扎实的理论功底,本人一直觉得,玩技术一定是理论指导实践,网上遍布个种搭建方法都可以实现一个基本的私有云环境,但是诸位可曾发现,很多配置都是重复 ...
- OpenStack Mitaka/Newton/Ocata/Pike 各版本功能贴整理
逝者如斯,刚接触OpenStack的时候还只是第9版本IceHouse.前几天也看到了刘大咖更新了博客,翻译了Mirantis博客文章<OpenStack Pike 版本中的 53 个新功能盘点 ...
- OpenStack Mitaka HA部署方案(随笔)
[Toc] https://github.com/wanstack/AutoMitaka # 亲情奉献安装openstack HA脚本 使用python + shell,完成了基本的核心功能(纯二层的 ...
- Win10+VirtualBox+Openstack Mitaka
首先VirtualBox安装的话,没有什么可演示的,去官网(https://www.virtualbox.org/wiki/Downloads)下载,或者可以去(https://www.virtual ...
- OpenStack Mitaka 版本中的 domain 和 admin
OpenStack 的 Keystone V3 中引入了 Domain 的概念.引入这个概念后,关于 admin 这个role 的定义就变得复杂了起来. 本文测试环境是社区 Mitaka 版本. 1. ...
- 在ubuntu14.04上安装openstack mitaka
最近在工作环境安装部署了juno版本,在GE口测试网络性能不太满意,发现mitaka版本支持ovs-dpdk,于是抽时间安装实验一番. 参考官网的安装文档,先准备将mitaka版本安装好再配置ovs. ...
- 云计算之阿里仓库停止openstack mitaka源报错“No package centos-release-openstack-mitaka available.”
之前学习了一个月的openstack的mitaka版本,写完脚本放置一段时间,最近准备正式部署突然发现 No package centos-release-openstack-mitaka avail ...
随机推荐
- 对象转型 casting
一个基类的引用类型变量可以"指向"其子类对象. 一个基类的引用不可以访问其子类对象新增加的成员(属性和方法). 基类强制转型成子类,则能访问子类独有的成员. 可以使用 引用变量in ...
- VS2015 建立C++ dll库文件
最近在写一个图片处理,正好用到C++封装DLL给C#调用,一下是总结: 建立一个C++的Win32DLL,这里要注意选择"Export symbols"导出符号.点击完成. 如 ...
- iOS开发:深入理解GCD 第二篇(dispatch_group、dispatch_barrier、基于线程安全的多读单写)
Dispatch Group在追加到Dispatch Queue中的多个任务处理完毕之后想执行结束处理,这种需求会经常出现.如果只是使用一个Serial Dispatch Queue(串行队列)时,只 ...
- 【细说Java】path和classpath的作用
path:javac.exe和java.exe等可执行文件存放路径,通过path变量让系统寻找该路径的可执行文件,然后对Java代码进行编译和运行. ps:如果有多个jdk版本的赋给path变量,系统 ...
- 关闭Ubuntu 12.04的内部错误提示
刚装完系统后,才安装一个输入法重启电脑后,竟然就提示'内部错误'需要提交报告,什么状况? 发扬'不求甚解'的光荣传统,我又不搞Linux开发,对我来说只是个工具而已,工具出问题了解决问题即可不想劳神深 ...
- t-sql或mssql怎么用命令行导入数据脚本
osql简单用法:用来将本地脚本执行,适合sql脚本比较大点的情况,执行起来比较方便 osql -S serverIP -U sa -P 123 -i C:\script.sql serverIP数据 ...
- angular-ui-bootstrap的进度条问题及解决
在测试angular-ui-bootstrap中的进度条的时候,用的是官方的示例代码,但是跑不起来. 经过代码比对之后,发现官方用的是0.14.3, 而我本地用的是0.13.3 (2015-08-09 ...
- openVPN报错:All TAP-Windows adapters on this system are currently in use
解决办法: 1. 确定openVPN服务已打开. 2. 控制面板\网络和 Internet\网络连接,确定TAP-Windows Adapter V9已经启动.
- [Java Web] 4、JavaScript 简单例子(高手略过)
内容概览: JavaScript简介 JavaScript的基本语法 JavaScript的基本应用 JavaScript的事件处理 window对象的使用 JavaScript简介: JavaScr ...
- jenkins2 hello pipeline
文章来自:http://www.ciandcd.com 文中的代码来自可以从github下载: https://github.com/ciandcd 根据前面的2篇文章,我们已经安装和配置好了je ...