有没有办法正确排序这个虚拟机名称列表? 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 中,您可以使用
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
列表替换为您的实际虚拟机名称列表,使本手册适应您的特定用例。