在Ansible中设置环境';好像不行

在Ansible中设置环境';好像不行,ansible,Ansible,领事查找插件有以下代码。我想通过为ANSIBLE\u CONSUL\u URL设置环境变量来覆盖。我似乎无法让我的任务使用环境变量。如果在运行任务之前手动设置环境变量,则任务运行正常 self.agent_url = 'http://localhost:8500' if os.getenv('ANSIBLE_CONSUL_URL') is not None: self.agent_url = os.environ['ANSIBLE_CONSUL_URL'] 我的任务: 错误 TASK:

领事查找插件有以下代码。我想通过为
ANSIBLE\u CONSUL\u URL
设置环境变量来覆盖。我似乎无法让我的任务使用环境变量。如果在运行任务之前手动设置环境变量,则任务运行正常

self.agent_url = 'http://localhost:8500'
if os.getenv('ANSIBLE_CONSUL_URL') is not None:
    self.agent_url = os.environ['ANSIBLE_CONSUL_URL']
我的任务: 错误
TASK:[生成模块及其关联标记的列表]**************************
致命:[127.0.0.1]=>模板部署列表失败=“{item | replace”({deploys/“+environment_-id+”/“,”)}-{{lookup('consu_-kv','deploys/'+environment_-id+'/'+item)}”:在kv存储中查找'deploys/sf/ariaserver'时出错。错误为HTTPConnectionPool(host='localhost',port=8500):url:/v1/kv/deploys/sf/ariaserver超过了最大重试次数(由NewConnectionError引起(':未能建立新连接:[Errno 111]连接被拒绝',))
致命:所有主机都已失败--正在中止

查找是一种模板功能。在执行任务之前,呈现任务的键以解析任何Jinja表达式。这意味着您的查找是在任务执行之前执行的。环境键只是一个任务属性,它在任务执行时起作用。但你没有走那么远

另外,我不能100%确定在
set\u fact
任务中使用的这种特殊情况下,您的环境会发生什么
set\u fact
是一个动作插件,在控制机器上运行。查找也是如此。但是任务本身并没有委托给localhost。因此,有可能为控制机器或远程机器设置env var。不过,我的猜测是,它根本没有设置,无论是在本地主机上还是远程主机上。我猜测的原因是,许多操作插件稍后会使用相同的名称调用模块,然后在目标主机上执行。逻辑行为,以及用户所期望的,是由模块在远程主机上设置env var。第一段只是一个猜测,可以忽略

结论:
如果查找插件依赖于环境变量,则不能在同一任务中设置它们。它们需要事先设置-您已经发现可以使用。

只是一个小玩意儿:
kv_商店
是第三方插件还是根本没有文档记录?我找不到它的文档。我知道Ansible 2之后有一个模块,但不是一个动作插件。它是作为Ansible插件提供的。
- name: Build list of modules and its associated tag
  environment:
     ANSIBLE_CONSUL_URL: "http://indeploy001.local.domain:8500"
  set_fact: deploy_list="{{ item | replace("deploys/" + environment_id  + "/",'') }}-{{ lookup('consul_kv','deploys/' + environment_id + '/' + item) }}"
  with_items: "{{ modules }}"
  register: deploy_list_result
TASK: [Build list of modules and its associated tag]     **************************
fatal: [127.0.0.1] => Failed to template deploy_list="{{ item |    replace("deploys/" + environment_id  + "/",'') }}-{{ lookup('consul_kv','deploys/' + environment_id + '/' + item) }}": Error locating 'deploys/sf/ariaserver' in kv store. Error was HTTPConnectionPool(host='localhost', port=8500): Max retries exceeded with url: /v1/kv/deploys/sf/ariaserver (Caused by NewConnectionError('<requests.packages.urllib3.connection.HTTPConnection object at 0x1eac410>: Failed to establish a new connection: [Errno 111] Connection refused',))

FATAL: all hosts have already failed -- aborting