我有一个像这样的文件夹结构:
.
├── ansible.cfg
├── etc
│ ├── dev
│ │ ├── common
│ │ │ ├── graphite.yml
│ │ │ ├── mongo.yml
│ │ │ ├── mysql.yml
│ │ │ └── rs4.yml
│ │ ├── inventory
│ │ └── products
│ │ ├── a.yml
│ │ ├── b.yml
│ │ └── c.yml
│ └── prod
│ ├── common
│ │ ├── graphite.yml
│ │ ├── mongo.yml
│ │ ├── redis.yml
│ │ └── rs4.yml
│ ├── inventory
│ └── products
│ ├── a.yml
│ ├── b.yml
│ └── c.yml
├── globals.yml
├── startup.yml
├── roles
| └── [...]
└── requirements.txt
在我的ansible.cfg
中,我想做的事情如下:hostfile=./etc/{{ env }}/inventory
,但这不起作用。有没有办法在Ansible中指定特定于环境的库存文件?
答案 0 :(得分:1)
我认为普通产品和产品是可变文件。
正如@Deepali Mittal已经提到的,您的广告资源应该看起来像inventory/{{ env }}
。
在inventory/prod
中,您将定义一个组prod
,在inventory/dev
中,您将定义一个组dev
:
[prod]
host1
host2
hostN
这使您可以为prod
和dev
定义组变量。为此,只需创建一个文件夹group_vars/prod
并将您的vars文件放入其中。
重新订购您的结构将如下所示:
.
├── ansible.cfg
├── inventory
│ ├── dev
│ └── prod
├── group_vars
│ ├── dev
│ │ ├── common
│ │ │ ├── graphite.yml
│ │ │ ├── mongo.yml
│ │ │ ├── mysql.yml
│ │ │ └── rs4.yml
│ │ └── products
│ │ ├── a.yml
│ │ ├── b.yml
│ │ └── c.yml
│ └── prod
│ ├── common
│ │ ├── graphite.yml
│ │ ├── mongo.yml
│ │ ├── mysql.yml
│ │ └── rs4.yml
│ └── products
│ ├── a.yml
│ ├── b.yml
│ └── c.yml
├── globals.yml
├── startup.yml
├── roles
| └── [...]
└── requirements.txt
我不确定globals.yml
是什么。如果是剧本,则它位于正确的位置。如果它是具有全局定义的变量文件,则应将其保存为group_vars/all.yml
,并自动为所有主机加载。
现在您使用正确的库存文件调用ansible-playbook:
ansible-playbook -i inventory/prod startup.yml
我认为不可能像你问的那样评估ansible.cfg
内的环境。
答案 1 :(得分:0)
我认为{{ env }}/inventory
应该有效,而不是/inventory/{{ env }}
。另外,如果你可以请分享你现在如何使用它以及你改变配置以获得一个