Amazon ec2 Ansible—查找主机变量的最大值和该主机的名称

Amazon ec2 Ansible—查找主机变量的最大值和该主机的名称,amazon-ec2,ansible,Amazon Ec2,Ansible,我有一个hostvar增加的库存: [nodes] node_0 id=0 node_1 id=1 我想找到id的最大值以及拥有它的主机。我找到了在带有for循环()的节点上执行搜索的另一个答案,但我需要能够作为本地操作来执行此操作,因为我正在为ec2上的节点引导选择值。我的解决方案: - name: Find max id host set_fact: id_max_host={{ groups['nodes'] | sort('id' | int) | last }} - name:

我有一个hostvar增加的库存:

[nodes]
node_0 id=0
node_1 id=1
我想找到
id
的最大值以及拥有它的主机。我找到了在带有for循环()的节点上执行搜索的另一个答案,但我需要能够作为本地操作来执行此操作,因为我正在为ec2上的节点引导选择值。

我的解决方案:

- name: Find max id host
  set_fact: id_max_host={{ groups['nodes'] | sort('id' | int) | last }}

- name: Find max id
  set_fact: id_max={{ hostvars[id_max_host]['id'] }}
它获取组节点中的主机列表,按hostvar“id”(它将其强制转换为int,因为它们通常是字符串)进行排序,然后只选择排序列表中的最后一个。请注意,如果有多个相同的值,它将选择最后一个,而不是第一个。我使用唯一的ID,所以没关系

这给了我最大的id号和拥有它的主机名。它同时适用于本地和远程任务。我可以使用在远程主机上发现的事实来查看此主机是否应运行分配给max ID的任务:

- name: Some actions based on a result of previous tasks
  action: # Run some actions
  when:  id_max_host == inventory_hostname
或者,我可以使用它来确保所有新启动的实例都在ec2上标记,id从
id\u max+1开始,并增加:

- name: tag instances
  ec2_tag: region="{{ aws_region }}" resource="{{ item.id }}" aws_access_key="{{ aws_access_key }}" aws_secret_key="{{ aws_secret_key }}"
  args:
    tags:
      Name: "node_{{ item.ami_launch_index | int + id_max | int + 1 }}"
      id: "{{ item.ami_launch_index | int + id_max | int + 1 }}"
      with_items: ec2Create.instances

我将问题编辑得更简单、更直接,但据我所知,它充分描述了我遇到的问题。我发布的答案提供了一个有效的解决方案,我是从stackoverflow和Google上的其他答案拼凑而成的。我希望我的回答足够简单直接。