Ansible 带有自定义变量的条件句
在我的剧本中,我有一些任务,它们使用服务器的主机名,并根据主机名推断数据来设置位置和环境。但是有些服务器有唯一的名称,我不知道如何在这些服务器上设置变量。我不想使用不可靠的事实,因为我想与团队分享战术手册。我的一个想法是做下面列出的事情,但我遇到了一些问题。有人能给我引路吗Ansible 带有自定义变量的条件句,ansible,Ansible,在我的剧本中,我有一些任务,它们使用服务器的主机名,并根据主机名推断数据来设置位置和环境。但是有些服务器有唯一的名称,我不知道如何在这些服务器上设置变量。我不想使用不可靠的事实,因为我想与团队分享战术手册。我的一个想法是做下面列出的事情,但我遇到了一些问题。有人能给我引路吗 Create vars_file inventory --- customservers customhostname1: env: test location: hawaii customhostnam
Create vars_file inventory
---
customservers
customhostname1:
env: test
location: hawaii
customhostname2:
env: prod
location: alaska
In Playbook.
---
task
tasks:
- name: set hostname
shell: echo "customhostname1"
register: my_hostname
- name: setting env var
set_fact:
env: "{{ item.value.env }}"
when: my_hostname == "{{ item.key }}"
with_dict: "{{ customservers }}"
- name: outputing env var
debug:
msg: the output is {{ env }}
Expected output should be test.
多谢各位
在我的剧本中,我有使用服务器主机名和
外推数据,并在此基础上设置位置和环境
坏主意
但是有些服务器有唯一的名称,我不知道如何在这些服务器上设置变量
这就是为什么
第二个坏主意是将测试和生产放在同一个库存中。那只是乞求灾难。它们应该是两个完全独立的目录,但可能位于同一父目录下:
inventories/
inventories/test/
inventories/test/hosts
inventories/test/host_vars/
inventories/test/host_vars/customhostname1.yml
inventories/prod/
inventories/prod/hosts
inventories/prod/host_vars/
inventories/prod/host_vars/customhostname2.yml
所以inventory/prod/hosts
可能是这样的(我更喜欢ini
格式):
或:
但在任何情况下,都不要将测试和生产库存结合起来
如果您仍然需要该env
变量,您可以将其放入group_vars/all.yml
中,或直接放入hosts
文件中,如下所示:
[all:vars]
env=prod
答案基本上可以概括为“{hostvars['customhostname1'].env}”Hi@jack,你的观点非常好,给了我很多思考。我认为向库存中添加变量的方法对我来说是正确的。非常感谢你的精彩评论。
[customservers]
customhostname2
[customhostname2:vars]
location=hawaii
[all:vars]
env=prod