4-значное имя хоста увеличивается на 1 с помощью ansible

#ansible

#ansible

Вопрос:

Я хочу, чтобы имя хоста было увеличено на 1. например, если мое имя хоста равно abc-0001, тогда оно должно сгенерировать следующее имя хоста, например abc-0002.

по сути, я пытаюсь получить список виртуальных машин из vcenter и увеличить имя хоста на 1 от последнего имени хоста. затем я буду использовать это имя хоста для нового развертывания. изначально я разделяю имя сервера на 2 части. первая часть — abc, а server_list — вторая часть, используемая для увеличения значения на 1.

когда я запускаю playbook, я получаю следующее имя сервера в abc-2 вместо abc-0002

 
- set_fact:
    new_vm_name: "{{ firstpart }}-{{ (((server_list | sort | max).split('-'))[1]| int)   1 }}"
  

Ответ №1:

Простой способ справиться с этим — использовать форматирование строк python.

В Jinja2 / ansible это делается с % помощью оператора:

 $ ansible localhost -m debug -a msg="{{ 'd' % 1 }}"
localhost | SUCCESS => {
    "msg": "0001"
}
  

В вашем конкретном случае должно сработать следующее:

 next_vm_number: "{{ (server_list | sort | max).split('-')[1] | int   1 }}"
new_vm_name: "{{ '%s-d' % (firstpart, next_vm_number | int) }}"