gpt4 book ai didi

ansible - 无法识别组变量

转载 作者:行者123 更新时间:2023-12-01 00:51:31 32 4
gpt4 key购买 nike

我正在尝试在 ansible 中设置特定于环境的变量(例如生产、登台、开发)。出于某种原因,ansible 没有在 group_vars/[environment] 中提取变量。

我正在使用 ansible 1.9.1

这是我正在尝试做的一个精简的例子。

目录结构:

.
├── group_vars
│   └── staging
├── hosts
│   └── staging
└── site.yml

group_vars/分期:
test_var: "this is a test"

站点.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 的 Best Practices 中的文档分离环境

最佳答案

编辑:

要更具体地回答您的问题,请查看 this github exemple项目。我想,这就是你试图做的。
我可能错了,但我认为问题来自您的库存文件。你实际上命名了你的 group_vars您的 list 文件名( staging )之后的文件( staging )。
但是,您必须以 命名它。科在您的库存文件中,我想是 localhost看着你的剧本。

因此,这是您应该拥有的:

主机/分期:

[staging]
X.X.X.X

根据我的说法,这是组织项目的更可行的解决方案。它基于 roles .

目录结构:
.
├── group_vars
│ └── all
├── hosts
│ └── local
│ └── staging
│ └── prod
├── roles
│ └── exemple
│ └── tasks
│ └── vars
│ └── local.yml
│ └── staging.yml
│ └── prod.yml
└── site.yml
group_vars/all可以有一个环境变量:
# 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

那么,你的剧本 sites.yml看起来像这样:
---
- name: Server(s) configuration
hosts: "{{env}}"
roles:
- exemple
vars_files:
- "roles/example/vars/{{env}}.yml"

这样做可以为您带来多种好处:
  • 您可以在项目中的任何位置、jinja 模板中或作为非常实用的任务中的条件重用 env 变量;
  • 您的项目分为不同的角色。这种方式对于大项目更干净(你可以有 apache 角色、ssh 角色等);
  • 您可以在 roles/exemple/vars/ 中的单独文件中创建特定于环境的变量目录。
  • 关于ansible - 无法识别组变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31075868/

    32 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com