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