我想通过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
本身就是清单文件中的参数。
上面有一个简单的解决方法吗?我为每个主机提供环境任意变量的选择是什么?
答案 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"
我不是100%确定playbook级别的environment
有效。根据{{3}}它应该。但是我最近在这里读了一个问题,有人问为什么没有。
如果它确实不起作用,那就是一个错误。尝试将Ansible升级到最新版本。如果它仍然不起作用,您应该将其报告为github上的错误。唯一可行的解决方法是将环境应用于您的所有角色:
roles:
- role: python27
environment: env_vars
- role: app1
environment: env_vars
如果仍然无效,请将其应用于角色内的每个任务。
找到docs,同时回答了问题。所以这是一个非常旧版本的错误。它应该适用于最新的1.9.x或2.x版本。