Ansible动态库存:无法使用组变量
这是我的目录结构Ansible动态库存:无法使用组变量,ansible,Ansible,这是我的目录结构 ├── README.md ├── internal-api.retry ├── internal-api.yaml ├── ec2.py ├── environments │ ├── alpha │ │ ├── group_vars │ │ │ ├── alpha.yaml │ │ │ ├── internal-api.yaml │ │ ├── host_vars │ │ ├── internal_ec2.ini │ ├
├── README.md
├── internal-api.retry
├── internal-api.yaml
├── ec2.py
├── environments
│ ├── alpha
│ │ ├── group_vars
│ │ │ ├── alpha.yaml
│ │ │ ├── internal-api.yaml
│ │ ├── host_vars
│ │ ├── internal_ec2.ini
│ ├── prod
│ │ ├── group_vars
│ | │ ├── prod.yaml
│ │ │ ├── internal-api.yaml
│ │ │ ├── tag_Name_prod-internal-api-3.yml
│ │ ├── host_vars
│ │ ├── internal_ec2.ini
│ └── stage
│ ├── group_vars
│ │ ├── internal-api.yaml
│ │ ├── stage.yaml
│ ├── host_vars
│ │ ├── internal_ec2.ini
├── roles
│ ├── internal-api
├── roles.yaml
我正在为一个ec2实例使用单独的配置,该实例的标签为Name
=prod-internal-api-3
,因此我在environments/prod/group\u vars/
文件夹中定义了一个单独的文件tag\u Name\u prod-internal-api-3.yaml
这是我的标签\u Name\u prod-internal-api-3.yaml
---
internal_api_gunicorn_worker_type: gevent
这是我的主要剧本,internalapi.yaml
- hosts: all
any_errors_fatal: true
vars_files:
- "environments/{{env}}/group_vars/{{env}}.yaml" # this has the ssh key,users config according to environments
- "environments/{{env}}/group_vars/internal-api.yaml"
become: yes
roles:
- internal-api
对于prod
deployemnts,我会导出EC2\u INI\u PATH=environment/prod/internal\u EC2.INI,对于stage和alpha也是如此。在environment/prod/internal_ec2.ini
中,我添加了实例过滤器,instance_filters=tag:Name=prod-internal-api-3
当我运行我的剧本时
我得到这个错误
fatal: [xx.xx.xx.xx]: FAILED! => {"changed": false, "msg": "AnsibleUndefinedVariable: 'internal_api_gunicorn_worker_type' is undefined"}
这意味着它无法从文件
tag\u Name\u prod-internal-api-3.yaml
中选取变量。为什么会这样?我是否需要手动将其添加到include_vars中(我认为不应该是这种情况)?好吧,这真的很奇怪,就像真的很奇怪一样。我不知道是否有文件记录(如果有,请提供链接)
如果您的标记Name
类似于prod-my-api-1
,则文件名tag\u Name\u prod-my-api-1
将不起作用
您的文件名必须是
tag\u Name\u prod\u my\u api\u 1
。是的,谢谢ansible让我哭了两天。好吧,这真的很奇怪,就像真的很奇怪一样。我不知道是否有文件记录(如果有,请提供链接)
如果您的标记Name
类似于prod-my-api-1
,则文件名tag\u Name\u prod-my-api-1
将不起作用
您的文件名必须是
tag\u Name\u prod\u my\u api\u 1
。是的,谢谢ansible让我哭了两天。你问我为什么tag\u Name\u prod-internal-api-3.yml
不是自动发现的,而是同时手动包含environments/{{env}/group\u vars/internal api.yaml,这意味着它们肯定不是自动发现的。我打赌如果您将/symlinkedec2.py
移动/复制到environments/prod
中,然后使用ec2\u INI\u PATH=。。。ansible playbook-i environments/prod/ec2.py
它会按照您的意愿执行(无需手动vars_文件:
必需)将ec2.py移动到environments/prod
并删除vars_文件
,现在没有包含任何变量。它是否自动拾取所有环境/prod/group\u vars/
文件?因为这不会发生在我身上@Matthew有点奇怪,你问为什么tag\u Name\u prod-internal-api-3.yml
不是自动发现以供包含,但同时手动包含environments/{{env}}/group\u vars/internal api.yaml
等,这意味着它们肯定不是自动发现的。我打赌如果您将/symlinkedec2.py
移动/复制到environments/prod
中,然后使用ec2\u INI\u PATH=。。。ansible playbook-i environments/prod/ec2.py
它会按照您的意愿执行(无需手动vars_文件:
必需)将ec2.py移动到environments/prod
并删除vars_文件
,现在没有包含任何变量。它是否自动拾取所有环境/prod/group\u vars/
文件?因为这不会发生在我身上@马修