ansible运行全局变量


8

我想使用ansible创建服务器集群。

在一个主要剧本中,我包括一些子剧本。

- include: playbook_commandserver.yml
- include: playbook_agent.yml

在playbook_commandserver.yml中,创建命令服务器(在AWS上)。然后,我触发一个角色,该角色使用该set_fact模块记住命令服务器的dns名称:

- name: Get hostname of command server
  shell: /usr/bin/host $(/usr/bin/curl -s http://ipecho.net/plain) | /usr/bin/awk '{print $5}' | /usr/bin/awk -F 'aws.com' '{print $1"aws.com"}'
  register: cs
- name: Set hostname of command server as fact
  set_fact: commandserver="{{ cs.stdout }}"

commandserver事实是在同一操作可用,但不是在同一个剧本..更何况是在playbook_agent.yml,这是包含,算账。正是在这里,我需要访问该commandserver-fact。

那么如何设置/存储一个对完整的ansible运行有效的变量?

我发现了这一点:https : //stackoverflow.com/questions/26732241/ansible-save-registered-variable-to-file 但是在我看来,这看起来像是一个丑陋的hack。

难道没有更好的解决方案吗?没有办法设置对整个ansible运行有效的变量吗?

Answers:


12

是的,这是可能的。当您使用set_fact模块设置事实时,可以通过“ hostvars”访问该事实。因此,如果您像这样定义变量commandserver:

  - name: Set hostname of command server as fact
    set_fact: commandserver="{{ cs.stdout }}"

那么您就可以通过这种方式在其他包含在同一剧本中的剧本中访问此变量(调试模块只是一个示例):

  - debug: msg="{{ hostvars['put the hostname in here']['commandserver'] }}"
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.