如何从文件中读取环境
问题描述:
我想通过Ansible读取的YAML文件或库存文件向Ansible提供环境变量。目标是让拥有控制库存文件或新YAML文件的用户提供他们认为适合(主机特定)环境的任何环境变量。像下面的内容就是我拍摄的:如何从文件中读取环境
# start/provision.yml
- hosts: app1server
vars:
include: ../env_vars.yml
roles:
- python27
- app1
environment: env_vars
其中env_vars.yml
生活start/
并具有以下排序布局:
---
# file: start/env_vars.yml
env_vars:
PATH: /usr/local/nonsense
http_proxy: http://aplacenothere
,并在文件名env_vars.yml
本身将是一个参数库存文件。
有没有简单的解决上述问题?为每个主机提供环境任意变量的选项是什么?
答
我认为你发布的代码片段已经非常接近。如此接近我不确定如果你的问题是如何归档目标,或者你问为什么它不起作用。
恕我直言不唯一是不正确的是你如何尝试包括变量。取而代之的vars
你应该在剧本级别使用vars_files
:
- hosts: app1server
vars_files:
- "{{ env_file }}"
roles:
- python27
- app1
environment: env_vars
然后你会打电话ansible与--extra-vars="env_file=some/file.yml"
我不是100%肯定的environment
的剧本水平的作品。根据docs它应该。但是我最近在这里读到了一个关于SO的问题,有人问为什么它没有。
如果确实不起作用,那是一个错误。尝试将Ansible升级到最新版本。如果它仍然不起作用,您应该将它报告为github上的错误。那么唯一可能的解决办法是应用环境,所有的角色:
roles:
- role: python27
environment: env_vars
- role: app1
environment: env_vars
如果它仍然不能正常工作,将其应用到角色中的每一个任务。
找到the other question,这同时得到了回答。所以这是一个非常旧版本的错误。它应该在最新的1.9.x或2.x版本中工作。
“不要使用变量,而应在剧本级别使用vars_files。”这是我想念的,谢谢! – snl