如何从文件中读取环境

snl*_*snl 3 ansible ansible-playbook

我想通过Ansible读取的YAML文件或通过库存文件向Ansible提供我的环境变量.目标是让控制库存文件或新YAML文件的用户提供他们认为适合(特定于主机)环境的任何环境变量.以下是我正在拍摄的内容:

# start/provision.yml
- hosts: app1server
  vars:
    include: ../env_vars.yml
  roles:
    - python27
    - app1
  environment: env_vars
Run Code Online (Sandbox Code Playgroud)

其中,env_vars.yml住在start/并具有以下排序布局:

---
# file: start/env_vars.yml
env_vars:
    PATH: /usr/local/nonsense
    http_proxy: http://aplacenothere
Run Code Online (Sandbox Code Playgroud)

以及文件名env_vars.yml本身是库存文件中的参数的位置.

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

udo*_*dan 6

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

恕我直言的唯一不正确的是你如何尝试包含变量.而不是vars你应该vars_files在剧本级别上使用:

- hosts: app1server
  vars_files:
    - "{{ env_file }}"
  roles:
    - python27
    - app1
  environment: env_vars
Run Code Online (Sandbox Code Playgroud)

然后你会打电话给ansible --extra-vars="env_file=some/file.yml"

我不是100%肯定environment在剧本级别上工作.根据文件应该.但是我最近在这里读了一个问题,有人问为什么没有.

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

roles:
  - role: python27
    environment: env_vars
  - role: app1
    environment: env_vars
Run Code Online (Sandbox Code Playgroud)

如果它仍然不起作用,则将其应用于角色内的每个任务.


找到了另一个问题,在此期间得到了回答.所以这是一个非常旧版本的错误.它应该适用于最新的1.9.x或2.x版本.