Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/jenkins/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Jenkins 如何使用ansible中的变量从组中选择特定项_Jenkins_Ansible - Fatal编程技术网

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

效果很好。谢谢!