Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/ssh/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ansible动态库存:无法使用组变量_Ansible - Fatal编程技术网

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,这意味着它们肯定不是自动发现的。我打赌如果您将/symlinked
ec2.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
等,这意味着它们肯定不是自动发现的。我打赌如果您将/symlinked
ec2.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/
文件?因为这不会发生在我身上@马修