今天在新工作的地方研究了一下自动化的playbook,刚好遇上一个很奇怪的问题,来自ansible(version=2.10.1)
问题描述
由于需要利用ansible调用zabbix的JMX监控,而监控的触发器在不同环境又是不一样的,因此需要利用ansible的set_fact
模块,为不同的环境添加不同的模板。 同时ansible 需要支持自定义传参添加额外监控模板功能。以下是实现:
举个例子:
1 | - name: Set jmx template for dev |
看起来很美好对吧
那就大错特错了。
实际执行起来这段playbook会被跳过
原因排查
查来查去发现是因为加了with_item
的原因, 由于item的默认值是一个空的列表inputParamZabbixTemplate: []
实际上就不会对他进行操作。
解决办法
解决办法其实比较简单,就是在这一步之前执行一个变量初始化操作,这样如果有item的话原有逻辑也能继续执行,同样的如果没有的话跳过,也能依照初始变量运行
1 | - name: init vars |