Jenkins 如何使用ansible中的变量从组中选择特定项
因此,我有一个条款文件,内容如下:Jenkins 如何使用ansible中的变量从组中选择特定项,jenkins,ansible,Jenkins,Ansible,因此,我有一个条款文件,内容如下: [dev-hosts] dev-host-1 dev-host-2 dev-host-3 [tst-hosts] tst-host-1 tst-host-2 tst-host-3 ========== 在jenkins中,我选择了一个环境(dev、tst),我需要一个剧本来访问组中的特定项目。我试着表达如下: {{groups[\'{env}}-hosts\'][0]}来自文档: 另一条规则是“胡子不叠”。 我们经常看到: {{somevar{{other
[dev-hosts]
dev-host-1
dev-host-2
dev-host-3
[tst-hosts]
tst-host-1
tst-host-2
tst-host-3
==========
在jenkins中,我选择了一个环境(dev、tst),我需要一个剧本来访问组中的特定项目。我试着表达如下:
{{groups[\'{env}}-hosts\'][0]}
来自文档:
另一条规则是“胡子不叠”。
我们经常看到:
{{somevar{{other{u var}}}
如果需要使用动态变量,请根据需要使用以下内容:
{{hostvars[inventory\u hostname]['somevar\uu'+other\u var]}
资料来源:
如果您希望将变量与小胡子块中的字符串连接起来,请使用为此设计的Jinja运算符:~
请注意,+
符号也会起作用,但会产生副作用,如Jinja文档中所述:
+
将两个对象添加到一起。通常,对象是数字,但如果两者都是字符串或列表,则可以通过这种方式连接它们。
但是,这不是连接字符串的首选方式!对于字符串连接,请查看~
运算符<代码>{{1+1}是2
资料来源:
例如:
“{{groups[env~'-hosts'][0]}”
来自的答案完美地解决了这个问题,但我添加了一个答案以提供不同的视角
根据Ansible:
通过为每个环境使用单独的清单文件或目录,您可以将生产环境与开发、测试和登台环境分开。这样你就可以选择你的目标。将所有环境保存在一个文件中可能会带来惊喜
因此,如果您可以维护两个不同的文件夹,即dev/hosts
和tst/hosts
(这也有助于组织group\u vars/
和host\u vars/
),那么您将能够以-i dev/hosts
或-i tst/hosts
为目标主机。它还可以简化使用变量(如{{{env}}
以主机为目标)的要求。(作为附录)
通过创建所选列表简化代码,例如
my_hosts:“{{groups[env~''u hosts']}”
然后您可以简单地参考my_主机列表,例如
shell>cat playbook.yml
-主持人:全部
收集事实:错误
变量:
my_hosts:“{{groups[env~'{u hosts']}”
任务:
-调试:
var:my_hosts.1
跑一次:对
给予
shell>ansible playbook playbook.yml-e env=tst
播放[全部]**********************************************************************
任务[调试]********************************************************************
确定:[dev-host-1]=>
我的主机。1:tst-host-2
效果很好。谢谢!