无法获取ansible以识别组变量
我正在尝试在ansible中设置特定于环境的变量(例如生产、分段、开发)。出于某种原因,ansible没有在group_vars/[environment]中拾取变量 我用的是ansible 1.9.1 这里有一个简单的例子来说明我要做的事情 目录结构:无法获取ansible以识别组变量,ansible,ansible-playbook,Ansible,Ansible Playbook,我正在尝试在ansible中设置特定于环境的变量(例如生产、分段、开发)。出于某种原因,ansible没有在group_vars/[environment]中拾取变量 我用的是ansible 1.9.1 这里有一个简单的例子来说明我要做的事情 目录结构: . ├── group_vars │ └── staging ├── hosts │ └── staging └── site.yml . ├── group_vars │ └── all ├── hosts │ └── lo
.
├── group_vars
│ └── staging
├── hosts
│ └── staging
└── site.yml
.
├── group_vars
│ └── all
├── hosts
│ └── local
│ └── staging
│ └── prod
├── roles
│ └── exemple
│ └── tasks
│ └── vars
│ └── local.yml
│ └── staging.yml
│ └── prod.yml
└── site.yml
组变量/分段:
test_var: "this is a test"
site.yml:
---
- hosts: localhost
tasks:
- debug: msg="test variable = {{ test_var }}"
hosts/staging是一个空文件
运行ansible playbook-i hosts/staging site.yml的输出
PLAY [localhost] **************************************************************
GATHERING FACTS ***************************************************************
ok: [localhost]
TASK: [debug msg="test variable = {{ test_var }}"] ****************************
fatal: [localhost] => One or more undefined variables: 'test_var' is undefined
FATAL: all hosts have already failed -- aborting
PLAY RECAP ********************************************************************
to retry, use: --limit @/Users/jcowley/site.retry
localhost : ok=1 changed=0 unreachable=1 failed=0
如果我将group_vars/staging移动到group_vars/all,它将按预期工作并输出test_var的值。但我试图了解如何根据Ansible的编辑中的文档分离环境:
为了更具体地回答您的问题,请看一下这个项目。我想这就是你想做的。
我可能错了,但我认为问题来自你的库存文件。实际上,您是在清单文件名(staging
)之后为group\u vars
文件(staging
)命名的。
但是,您必须在清单文件中的部分后命名它,我想这是查看您的剧本的localhost
因此,这是您应该拥有的:
主机/暂存:
test_var: "this is a test"
根据我的说法,这里有一个更可行的解决方案来组织你的项目。它是基于
目录结构:
.
├── group_vars
│ └── staging
├── hosts
│ └── staging
└── site.yml
.
├── group_vars
│ └── all
├── hosts
│ └── local
│ └── staging
│ └── prod
├── roles
│ └── exemple
│ └── tasks
│ └── vars
│ └── local.yml
│ └── staging.yml
│ └── prod.yml
└── site.yml
组变量/all
可以有一个env变量:
# The application environment
# Possible values are : prod, staging or local
env: local
# Other global variables
...
您的库存文件:
[local]
X.X.X.X
[staging]
X.X.X.X
[prod]
X.X.X.X
然后,您的playbooksites.yml
可以如下所示:
---
- name: Server(s) configuration
hosts: "{{env}}"
roles:
- exemple
vars_files:
- "roles/example/vars/{{env}}.yml"
这样做可以为您带来多种好处:
- 您可以在项目中的任何地方、jinja模板中或作为非常实用的任务中的条件重用env变量李>
- 您的项目被分成不同的角色。对于大型项目来说,这种方式更简洁(您可以拥有apache角色、ssh角色等)李>
- 您可以在
目录中的单独文件中创建特定于环境的变量roles/example/vars/
group\u vars
文件命名的部分?啊,好的。就这样。主机/暂存文件需要定义[暂存]。非常感谢。