首页 > 解决方案 > Ansible 中的单个变量如何根据主机实例具有不同的值?

问题描述

"appInstanceName": "{{appname_from_template}}"在我的 ansible 模板中,我appname_from_template在我的group_vars/all文件中维护。

在部署时,我希望{{appname_from_template}}将其替换为"endpoint_1"主机 1 和主机"endpoint_2"2。

但我不确定单个变量如何根据它部署的实例具有不同的值。

请问有什么办法可以吗?谢谢

标签: deploymentansibleansible-inventoryansible-template

解决方案


鉴于group_vars/all

shell> cat group_vars/all
appname_from_template: endpoint_maintained_in_groupvars_all

您可以在优先级高于 7时覆盖变量appname_from_template 。请参阅了解变量优先级“变量可以根据实例有不同的值”如果你把它放到

  • 清单文件中的host_vars(优先级 8)或
  • 清单目录中的host_vars(优先级 9)或
  • 剧本目录中的host_vars(优先级 10)。

例如

shell> cat host_vars/host1
appname_from_template: endpoint_1

shell> cat host_vars/host2
appname_from_template: endpoint_2

然后是剧本

- hosts: host1,host2,host3
  tasks:
    - debug:
        var: appname_from_template

对 host1 和 host2使用host_vars ,对 host3使用group_vars

ok: [host1] => 
  appname_from_template: endpoint_1
ok: [host3] => 
  appname_from_template: endpoint_maintained_in_groupvars_all
ok: [host2] => 
  appname_from_template: endpoint_2

推荐阅读