如何从文件中读取环境

如何从文件中读取环境

问题描述:

我想通过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版本中工作。

+0

“不要使用变量,而应在剧本级别使用vars_files。”这是我想念的,谢谢! – snl