这是我的目录结构,
├── 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
我正在使用标签Name
= prod-internal-api-3
的ec2实例使用单独的配置,因此我在tag_Name_prod-internal-api-3.yaml
文件夹中定义了单独的文件environments/prod/group_vars/
。
这是我的tag_Name_prod-internal-api-3.yaml
,
---
internal_api_gunicorn_worker_type: gevent
这是我的主要剧本internal-api.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
部署对象,我也进行export EC2_INI_PATH=environment/prod/internal_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_Name_prod-internal-api-3.yaml
中选择变量。为什么会这样呢?我需要在include_vars
中手动添加它吗(我认为情况并非如此)?
答案 0 :(得分:0)
好的,这真的很奇怪,就像真的很奇怪。我不知道它是否已被记录(如果提供,请提供链接)。
如果标签Name
与prod-my-api-1
类似,则文件名tag_Name_prod-my-api-1
将不起作用。
您的文件名必须为tag_Name_prod_my_api_1
。是的,谢谢ansible让我哭了2天。