前言
一小步
最近基本都是在研究IAC ( Infrastructure as Code) ,实现IAC的手段就是Terraform,而HCL就是编写Terraform的语法。总的来说,就是天天写HCL。不过这HCL确实是麻烦,经常都会出现大段大段的重复代码,对于coder来说,简直是无法忍受,严重违反了DRY原则。于是,开始寻找简便的方法来减轻写HCL的痛苦😖。一开始想到的是使用python自动生成Terraform代码,为了不想重复造轮子,于是上GitHub上面搜索了一番,发现了这个库python-terrascript。有了这个库之后,我就开始动手编码了。大致思路是通过配置文件定义一个site,然后代码读取配置文件产生对应的Terraform代码。最后,花了一个星期完成了编码。(Ps..在使用python-terrascript这个库的过程中,我发现了源代码有两处错漏,然后试着给作者的git repo提交了pull request,谁知道第二天我的commit就被作者merge到master分支了哈哈哈😄)
Python or HCL
直接写HCL的痛苦在背景中已经提及了,但是好处就是可以比较清晰的从代码中看到整个架构的形状,而且debug的时候可以直接一些,因为是直接写直接运行。而使用python生成HCL的话,就完全是coder的作风了。但是其实暂行的python代码并不是那么灵活,比如对于一个network_port的resource来说,可以传入的参数太多,不同的参数搭配完全就是不同的用法(在使用openstack这个provider的时候深有体会)。所以暂时想到的是先根据现有的架构所使用的参数进行编写,后续在思考改进。所以我其实是想做一个完全脱离产品架构的工具,就是一个通用的工具,无论是哪个公司哪个产品都能使用它自由定义各自的架构。
总结
我目前还是相信可以做出一个通用的工具来生成Terraform的,就是如何封装的问题。感觉还是需要多动手多实现多思考才能做出更好的东西。(Ps..非常感谢我的林小姐对我的支持和鼓励💗)