Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/typo3/2.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
如果是组成员,如何跳过Ansible主机_Ansible_Ansible Awx - Fatal编程技术网

如果是组成员,如何跳过Ansible主机

如果是组成员,如何跳过Ansible主机,ansible,ansible-awx,Ansible,Ansible Awx,我正在编写一个剧本(用于AWX)来处理我们的一个web应用程序的一些后端处理。 通过对AWX的REST调用传递给playbook的一个额外变量用于传递主机 到剧本 hosts: {{target}} 目标可以是单个服务器或服务器列表。 问题:如果主机不是库存组的成员,如何使用模式跳过主机 e、 g如果我想让playbook跳过一个服务器(如果它在库存中的暂存组中) 我尝试了以下方法: hosts: "{{target}}:!staging" 这仅在只有一台服务器作为目标变

我正在编写一个剧本(用于AWX)来处理我们的一个web应用程序的一些后端处理。 通过对AWX的REST调用传递给playbook的一个额外变量用于传递主机
到剧本

hosts: {{target}}
目标可以是单个服务器或服务器列表。
问题:如果主机不是库存组的成员,如何使用模式跳过主机
e、 g如果我想让playbook跳过一个服务器(如果它在库存中的暂存组中)
我尝试了以下方法:

hosts: "{{target}}:!staging"

这仅在只有一台服务器作为目标变量发送时有效,但如果使用列表调用,则会失败。

如果您确实使用
作为主机的分隔符,而不是
,则这应该有效


语法是host1:host2:host3:!登台工作正常,但是
host1、host2、host3:!另一方面,暂存会生成警告

[警告]:无法匹配提供的主机模式,忽略:主机3:!登台

这也可能是您面临的问题。

鉴于库存:

全部:
主持人:
主持人1:
主持人2:
主持人3:
儿童:
登台:
主持人:
主持人2:
还有剧本:

-hosts:host1:host2:host3:!登台
收集事实:不
任务:
-调试:
msg:{{inventory_hostname}}”
这就产生了重述:

PLAY[host1:host2:host3:!staging]*********************************************************************************
任务[调试]******************************************************************************************************
确定:[主机1]=>{
“msg”:“主机1”
}
确定:[主机3]=>{
“msg”:“host3”
}
重演********************************************************************************************************
主机1:确定=1更改=0无法访问=0失败=0跳过=0获救=0忽略=0
主机3:确定=1更改=0无法访问=0失败=0跳过=0获救=0忽略=0

在使用剧本时,它给出了完全相同的重述:

-hosts:“{{target}}:!staging”
收集事实:不
任务:
-调试:
msg:{{inventory_hostname}}”
运行方式:

ansible playbook play.yml-i inventory.yml-e“target=host1:host2:host3”

当您有多台主机时,您的
目标是什么样子的?@Benoit谢谢您的回答。将主机列表更改为使用冒号而不是逗号是可行的。我确实更新了我的playbook以替换主机
主机中的逗号:{{target | replace(',',':')}:!staging“
更新:我只需将我的分隔符更改为所有冒号或所有逗号,如果调用我的playbook时使用了一个由逗号分隔的服务器列表
{target},现在就可以了,!登台)
感谢@Benoit和@Zeitounator在这方面的帮助,这绝对不是一个bug:您可以使用coma或colon作为分隔符,但不能同时使用两者。请注意,使用coma everywhere也可以解决您的问题(即,
{{target}},!staging
),并且以另一种方式混合分隔符会再次破坏一切(即,
{{target}replace(',',':')},!staging
),谢谢@Zeitounator我将其全部改为使用',(
{target},!staging
),效果非常好