首页 > 解决方案 > 配置中的剧本变量

问题描述

我想将变量传递给特定系统上的任何剧本。目前这是在命令行上完成的:

amos@sandbox $ ansible-playbook -e 'working_env=sandbox' playbooks/foo.yml

working_env 变量将确定诸如用户在该环境中的系统上进行的操作。我们用来启动 playbook 的每个系统都在 /etc/profile 中为每个人设置了一个环境变量。

amos@sandbox $ echo $WORKING_ENV
sandbox

我想使用该变量的值来填充 ansible 的“working_env”变量。我们缺少一个静态清单文件,因为主机是自动缩放的,并且在名称和数量上四处游荡。因此,我无法轻松地将其包含在清单中,尽管如果可以对静态清单文件中的所有主机执行此操作,我会很感兴趣,但我没有找到对 [all:vars] 之类的任何引用ansible 库存,它和一些变体不起作用。我们确实有一个静态 ansible.cfg 文件,这里可以引入一个 playbook 变量吗?

我的目标是:

amos@sandbox $ ansible-playbook playbooks/foo.yml

运行与第一个示例相同,使我们免于变量赋值的输入错误。

我发现最好的是设置:

vars:
  working_env:  "{{ lookup('env','WORKING_ENV') }}"

每一本playbook,但playbook都不少,不断重复缺乏优雅。给我留下希望有更好的方法。

标签: variablesansibleglobal-variables

解决方案


尝试如下:在/etc/ansible/group_vars
创建一个文件all

cat /etc/ansible/group_vars/all

工作环境:“{{查找('env','WORKING_ENV')}}”


推荐阅读