Ansible动态库存:无法使用group_vars

时间:2019-05-15 12:52:02

标签: 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
│   ├── 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中手动添加它吗(我认为情况并非如此)?

1 个答案:

答案 0 :(得分:0)

好的,这真的很奇怪,就像真的很奇怪。我不知道它是否已被记录(如果提供,请提供链接)。

如果标签Nameprod-my-api-1类似,则文件名tag_Name_prod-my-api-1将不起作用。

您的文件名必须为tag_Name_prod_my_api_1。是的,谢谢ansible让我哭了2天。