当前位置: 首页 > 知识库问答 >
问题:

为什么playbook为组变量取了错误的值?

夏意蕴
2023-03-14
inventories/ 
           hosts.inv    
             [group_A]
               server1
               server2
             [group_B]
               server3
               server4
             group_vars/
                  group_A - file
                    var_port: 9001
                  group_B - file
                    var_port: 9002 
 ansible-playbook  playbooks/playbook.yml -i inventories/hosts.inv -l group_B

playbook是针对适当范围的服务器(server3、server4)执行的,但它从组变量文件group_a中获取变量。

    expected result:        var_port: 9002
    in realty :             var_port: 9001

ansible 2.4.2.0

布雷奥列格

共有1个答案

江子石
2023-03-14

我包括了ANSIBLE_DEBUG,以及我所发现的:

2018-05-03 15:23:23,663 P=129458 U=用户129458 1525353803.66336:从/ansible/inventories/prod/group_vars/group_b.yml加载数据2018-05-03 15:23:23,663 P=129458 U=用户129661 1525353803.66060:in run()-任务00505680-eccc-d94e-2b1b-0000000000f4 2018-05-03 15:23:23,664 P=129458 U=用户129661 1525353803.66458:调用self._execute()2018-05-03:23:23,665 P=129458 U=User 129458 1525353803.66589:从/ansible/inventories/prod/group_vars/group_a.yml加载数据

在playbook执行中,ansible扫描文件夹group_vars中所有变量为“var_port”的文件,最后一个将获胜....

您可以在另一个主题中找到:开发/生产中的Ansible服务器/组

文档:http://docs.ansible.com/ansible/latest/user_guide/playbooks_variables.html#variable-foreence-where-show-i-put-a-variable

Note

Within any section, redefining a var will overwrite the previous instance. If multiple groups have the same variable, **the last one loaded wins**. If you define a variable twice in a play’s vars: section, the **2nd one wins**.

对于我来说,现在还不清楚如何管理配置文件。在这种情况下,我必须为每个组使用唯一的变量名,但对于角色不可能,或者在调用Playbook时应该使用include_vars?

 类似资料:
  • 我正在使用ansible 2.3.1.1和Jenkins。我遇到了以下问题--我的剧本使用aws动态库存中的变量变得非常慢。最有趣的情况是,如果我在jenkins工作区之外复制这个playbook,并在任何其他目录中运行,执行速度都是可以的。为了测试它,我从工作区目录/group_vars/all中删除了所有的变量文件-之后,这个剧本在工作区中的执行速度也可以了。因此,据我所知,ansible计算

  • 我有财产课: 还有一种方法: 在类的构造函数我有: 为什么当我从object按键调用函数时。我收到一条未定义的消息,为什么变量在内部不可用:

  • 用户可以在Playbook中,通过vars关键字自定义变量,使用时用{{ }}引用以来即可。 Playbook中定义和使用的变量的方法 例如下面的例子中,用户定义变量名为http_port,其值为为80。在tasks firewalld中,通过{{ http_port }}引用。 --- - hosts: web vars: http_port: 80 remote_user: r

  • 问题内容: 免责声明 :这是 不是 这个情况(而错误的声音是一样的):)从类型为java.util.Set和java.util.List的类继承了spliterator(默认无关这就是为什么: 考虑两个接口(在“ ” 包中) 我很清楚为什么我们不能声明这样的类: (!) 但是我不能理解有关 类型变量的 限制: 出现错误:。 为什么我不能定义这样的类型变量?在这种情况下,为什么要关心无关的默认值?什

  • 我有以下代码错误消息: 注意:C:\users\desktop\bikeshop finale\src\bikeshop\orej.java使用未经检查或不安全的操作。注意:有关详细信息,请使用-xlint:unchecked重新编译。1错误“**

  • 问题内容: 我读了这个问题不可变对象,并留下了关于不可变对象,并最终场一个问题: 为什么我们需要不可变类中的实例变量为最终变量? 例如,考虑以下不可变的类: 如果在上面的代码中没有set方法,而实例变量仅在构造函数中设置,为什么要求将实例变量声明为final? 问题答案: 有没有 要求 这样做的变量。但是,当您确实明确打算永远不更改变量时,通常这样做是一种好习惯,因为这不仅可以使变量避免错别字或其