如何从文件中读取环境

时间:2016-01-23 07:22:29

标签: ansible ansible-playbook

我想通过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本身就是清单文件中的参数。

上面有一个简单的解决方法吗?我为每个主机提供环境任意变量的选择是什么?

1 个答案:

答案 0 :(得分:5)

我认为您发布的代码段已经非常接近了。如此接近我不确定如果你的问题是如何归档目标,或者你问为什么它不起作用。

IMHO唯一不正确的是你如何尝试包含变量。您应该在剧本级别使用vars而不是vars_files

- hosts: app1server
  vars_files:
    - "{{ env_file }}"
  roles:
    - python27
    - app1
  environment: env_vars

然后你会用--extra-vars="env_file=some/file.yml"

打电话给ansible

我不是100%确定playbook级别的environment有效。根据{{​​3}}它应该。但是我最近在这里读了一个问题,有人问为什么没有。

如果它确实不起作用,那就是一个错误。尝试将Ansible升级到最新版本。如果它仍然不起作用,您应该将其报告为github上的错误。唯一可行的解​​决方法是将环境应用于您的所有角色:

roles:
  - role: python27
    environment: env_vars
  - role: app1
    environment: env_vars

如果仍然无效,请将其应用于角色内的每个任务。

找到docs,同时回答了问题。所以这是一个非常旧版本的错误。它应该适用于最新的1.9.x或2.x版本。

相关问题