风和日丽,夏天的北京湿热并举,睁不开的眼睛里,横竖都看着是“吃人”。
带薪学习的日子不好过,要在几天内迅速掌握导师下发要求学习的技能,看着以前一起蹲IT坑的同事人来人往,用隔壁同性黄同学的话来说,就是愧疚中隐隐的感到一些不安。
这种不安,终于随着一次排查ansible模板撰写问题,而被怼到了嗓子眼。
事情是这样的。
本人花了两天时间,终于找到了ansible的一个良心教程。估计学习ansible的各位都有过耳闻,就是的这篇全面的ansible入门指南(下面就是链接)。
全篇教程通俗易懂,循序渐进,容易上手,让我这个职场菜鸡如同进了大菜园,心满意足,啄个不停。但是,却在这里碰到了硬石头。
如图,图片中介绍了如何利用ansible模板机制,使得可以生成依据变量不同而不同的配置文件。
并且,在更改完之后,根据文中的说法,在保持playbook内copy模块不变的情况下,仅仅是.conf变成.j2,剧本执行便应该能够自动进行jinja2模板内变量替换,从而达到效果。
可是,事实并不是如此。我们来看:
修改完成后,在重启nginx时,发现nginx无法正常启动。登入远程服务器,检查nginx服务状态(systemctl status nginx)发现启动状态为failed。原因初步判定为“由于错误的配置文件”。
在进入nginx配置文档内,惊人的发现变量并没有被替换!怪不得会出问题。。。修改替换失败的变量后,经过服务停止-杀进程-重启服务后,nginx可算能够重新启动。
但是这个并没有解决根本问题。我们的目的是要能够让模板真正成为模板,能够响应变量替换的请求。
经过一天的排查无果,最终询问导师,导师惊叹为什么我那里使用的模块还是copy。。。
正确应该是使用template……如图所示:
playbook正常了,其他什么都正常了。nginx监听的端口也确实发生了改变,问题终于解决了。。
简而言之,那个博客关于模板的介绍有问题!!!
为什么就没人在那个博客下面反应这个问题呢?细思极恐……