对ansible中包含数字的字符串列表进行排序

问题描述 投票:0回答:1

有没有办法正确排序这个虚拟机名称列表? Azure 和 Ansible 报告如下:

dev-xxx-myvm-1
dev-xxx-myvm-10
dev-xxx-myvm-2
dev-xxx-myvm-3
dev-xxx-myvm-4
dev-xxx-myvm-5
dev-xxx-myvm-6
dev-xxx-myvm-7
dev-xxx-myvm-8
dev-xxx-myvm-9

结果:

dev-xxx-myvm-1
dev-xxx-myvm-2
dev-xxx-myvm-3
dev-xxx-myvm-4
dev-xxx-myvm-5
dev-xxx-myvm-6
dev-xxx-myvm-7
dev-xxx-myvm-8
dev-xxx-myvm-9
dev-xxx-myvm-10
[...]
ansible jinja2
1个回答
-1
投票

在 Ansible 中,您可以使用

sort
过滤器以及自定义排序功能来实现所需的结果。这是一个示例 playbook,用于对给定的虚拟机名称列表进行排序:

---
- name: Sort VM names
  hosts: localhost
  gather_facts: false
  tasks:
    - name: Define the list of VM names
      set_fact:
        vm_names:
          - dev-xxx-myvm-1
          - dev-xxx-myvm-10
          - dev-xxx-myvm-2
          - dev-xxx-myvm-3
          - dev-xxx-myvm-4
          - dev-xxx-myvm-5
          - dev-xxx-myvm-6
          - dev-xxx-myvm-7
          - dev-xxx-myvm-8
          - dev-xxx-myvm-9

    - name: Sort the list of VM names
      set_fact:
        sorted_vm_names: "{{ vm_names | sort(attribute='split(\"-\")[-1]') }}"

    - name: Display the sorted VM names
      debug:
        var: sorted_vm_names

在此示例中:

  • sort
    过滤器用于对列表进行排序。
  • 指定
    attribute
    参数来指示用于排序的属性。
    split("-")[-1]
    表达式用于提取虚拟机名称的最后部分,即数字。

这将导致列表根据每个虚拟机名称末尾的数值进行排序。输出如下:

dev-xxx-myvm-1
dev-xxx-myvm-2
dev-xxx-myvm-3
dev-xxx-myvm-4
dev-xxx-myvm-5
dev-xxx-myvm-6
dev-xxx-myvm-7
dev-xxx-myvm-8
dev-xxx-myvm-9
dev-xxx-myvm-10

您可以通过将

vm_names
列表替换为您的实际虚拟机名称列表,使本手册适应您的特定用例。

© www.soinside.com 2019 - 2024. All rights reserved.