首页 > 解决方案 > Ansible 从额外的变量标志覆盖组变量

问题描述

传递一个-e "@globals.yml"标志ansible-playbook会覆盖所有主机的变量。如何仅针对特定群体这样做?例如:

.
├── README.md
├── ansible.cfg
├── globals.yml
├── group_vars
│   ├── all.yml
│   ├── g1.yml
│   └── g2.yml
├── inventory.yml
├── out.log
└── site.yml

inventory.yml

all:
  hosts:
    host01:
      ansible_host: host1
    host02:
      ansible_host: host2
    host03:
      ansible_host: host3
  children:
    g1:
      hosts:
        host01:
    g2:
      hosts:
        host02:

group_vars/all.yml

all: this is in all.yml

group_vars/g1.yml

name1: group1, located in g1.yml

group_vars/g2.yaml

name2: group2, located in g2.yml

globals.yml

net_int: eno2
name1: name1 overwritten by globals.yml!

为组中的所有其他主机运行ansible-playbook -i inventory.yml -e "@globals.yml" site.yml覆盖和创建。有没有办法让额外的变量只覆盖for而不是为所有其他人创建变量?name1g1name1allname1g1

标签: ansible

解决方案


不幸的是,无法从命令行选项覆盖组变量-e。来自Ansible 变量优先级文档

使用 -e 传递的值是变量,而不是命令行选项,它们将覆盖配置设置、命令行选项和 playbook 关键字以及其他地方设置的变量。

一个解决方法是在每个主机组上单独运行你的剧本,用-e选项覆盖任何变量。


推荐阅读