Ansible任务变量覆盖集合\事实变量

Ansible任务变量覆盖集合\事实变量,ansible,Ansible,在我的ansible剧本中,我通过以下操作为所有剧本设置了一个变量: set_fact: domain_path: "{{ X.X.domain_path }}" 在剧本中,我的一个任务使用了一个角色,该角色需要一个域\路径变量,该变量与我在开始时定义的变量不同 include_role: name: role_X vars: domain_path: "/a/different/path" 当我尝试在角色之后

在我的ansible剧本中,我通过以下操作为所有剧本设置了一个变量:

    set_fact:
      domain_path: "{{ X.X.domain_path }}"
在剧本中,我的一个任务使用了一个角色,该角色需要一个域\路径变量,该变量与我在开始时定义的变量不同

 include_role:
    name: role_X
  vars:
    domain_path: "/a/different/path"
当我尝试在角色之后的另一个区域中使用domain_path时,它不会给我set_fact值,而是给我tasks值,我不想要这个值


如果需要,我可以提供更多细节

在不同的用例中使用相同的变量名不是好的做法。您应该更改一个(或两个)变量的名称,以便它们不会冲突


如果需要,如果任务中的某个点是您的目标,则始终可以使用一个值来设置另一个值。

在不同的用例中使用相同的变量名不是好的做法。您应该更改一个(或两个)变量的名称,以便它们不会冲突

如果有需要,您可以始终使用一个值来设置另一个值,如果这是您在任务中某个点的目标

Q:“任务变量覆盖集合\事实变量”

答:
任务变量
(优先级17)不能在游戏的其余部分覆盖
设置事实
(优先级19)。看见回顾角色。很可能
角色(和include_role)参数
(优先级20)会覆盖变量

我无法重现这个问题。我创建了一个新角色,只有一个任务

shell>cat角色/role\u X/tasks/main.yml
-调试:
域路径
剧本

shell>cat pb.yml
-主机:本地主机
任务:
-设定事实:
域路径:“X.X.domain\u路径”
-调试:
域路径
-包括以下角色:
姓名:role_X
变量:
域路径:“/a/不同的/path”
-调试:
域路径
如期而至

shell>ansible playbook pb.yml | grep domain|u路径
域路径:X.X.domain\u路径
域路径:/a/不同/路径
域路径:X.X.domain\u路径
Q:“任务变量覆盖集合\事实变量”

答:
任务变量
(优先级17)不能在游戏的其余部分覆盖
设置事实
(优先级19)。看见回顾角色。很可能
角色(和include_role)参数
(优先级20)会覆盖变量

我无法重现这个问题。我创建了一个新角色,只有一个任务

shell>cat角色/role\u X/tasks/main.yml
-调试:
域路径
剧本

shell>cat pb.yml
-主机:本地主机
任务:
-设定事实:
域路径:“X.X.domain\u路径”
-调试:
域路径
-包括以下角色:
姓名:role_X
变量:
域路径:“/a/不同的/path”
-调试:
域路径
如期而至

shell>ansible playbook pb.yml | grep domain|u路径
域路径:X.X.domain\u路径
域路径:/a/不同/路径
域路径:X.X.domain\u路径

我明白你所说的,我同意我会改变这一点,但是它不回答为什么任务级别变量覆盖集合事实级别变量我明白你所说的,我同意我会改变这一点,但是它不回答为什么任务级别变量覆盖集合事实级别变量对我有效。试试我在回答中贴出的简单例子。您的代码或数据中肯定还有其他问题。代码的缩进是错误的。它适合我。试试我在回答中贴出的简单例子。您的代码或数据中肯定存在其他问题。代码的缩进是错误的。这确实是我使用的角色。它有一个域路径的集合事实,它覆盖了我的集合事实它确实是我使用的角色。它有一个域路径的集合事实,它覆盖了我的集合事实