Consul查找插件具有以下代码。我想通过设置ANSIBLE_CONSUL_URL
的环境变量来覆盖。我似乎无法使用环境变量来完成任务。如果我在运行任务之前手动设置环境变量,则任务运行正常。
self.agent_url = 'http://localhost:8500'
if os.getenv('ANSIBLE_CONSUL_URL') is not None:
self.agent_url = os.environ['ANSIBLE_CONSUL_URL']
- 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
答案 0 :(得分:0)
查找是一个模板功能。在执行任务之前,将呈现任务的键以解析任何Jinja表达式。这意味着您的查找在任务执行之前执行。环境键只是一个任务属性,它在执行任务时起作用。但是你没有那么远。
另外,我不能100%确定在function PopulateTable(table){
var $this = $(table);
var $url = $this.data('url');
$.ajax({
url: $url,
type: 'POST',
success: function(result) {
console.log(result);
result.each(function(k, v){
console.log(k + " " + v);
});
}
});
}
任务中使用的特殊情况下您的环境会发生什么。 set_fact
是一个在控制计算机上运行的动作插件。查找也是如此。但是任务本身并未委托给localhost。因此,可以为控制机器或远程机器设置env var。我的猜测是,它根本没有设置,无论是在localhost还是远程。我猜测的原因是,许多动作插件在此过程中稍后会调用具有相同名称的模块,然后在目标主机上执行。逻辑行为以及用户期望的是,模块将在远程主机上设置env var。鉴于第一段,只是猜测和忽略。
结论: 如果查找插件依赖于环境变量,则无法在同一任务中设置它们。它们需要先设置 - 你已经找到了工作。