ansible: построить строку в цикле jinja - PullRequest
1 голос
/ 06 мая 2020

Я хотел бы создать строку в jinja l oop для выходной переменной hostvariabletouseinawxworflow (мне нравится использовать эту переменную на более позднем этапе рабочего процесса awx w /: hosts: "{{hostvariabletouseinawxworflow}}". ) когда я определяю / создаю в своем рабочем процессе одну виртуальную машину, это просто: hostvariabletouseinawxworflow = vmname. но когда> 1 vms, имя vms возрастает ... например, имя первой машины по-прежнему похоже на ввод, например my-new-vm, но второй - my-new-vm-2, а строка для hostvariabletouseinawxworflow будет : my-new-vm, my-new-vm-2 и так далее ... как я могу сделать такой l oop в задаче playbook?

Scenario1: 
input_vars:
  vmcount:1
  vmname: my-new-vm
hostvariabletouseinawxworflow should be: my-new-vm

Scenario2: 
input_vars:
  vmcount:2
  vmname: my-new-vm
hostvariabletouseinawxworflow should be: my-new-vm, my-new-vm-2

Scenario3: 
input_vars:
  vmcount:3
  vmname: my-new-vm
hostvariabletouseinawxworflow should be: my-new-vm, my-new-vm-2, my-new-vm-3

Ответы [ 2 ]

1 голос
/ 06 мая 2020

Подход с использованием фильтров . Здесь [vmname,] + специально используется, чтобы избежать генерации my-new-vm-1.

Предположение: vmcount равно 1 или больше.

- set_fact:
    hostvariabletouseinawxworflow : "{{ ([vmname,] + [vmname,] | 
                                          product(range(2, vmcount+1)) | 
                                          map('join', '-') | list) | 
                                        join(', ') }}" 
  vars:
    vmcount: 3
    vmname: my-new-vm

- debug:
    var: hostvariabletouseinawxworflow

Выходы

"hostvariabletouseinawxworflow": "my-new-vm, my-new-vm-2, my-new-vm-3"
1 голос
/ 06 мая 2020

Следующая задача должна дать вам результат, который вы ищете:

- set_fact:
    hostvariabletouseinawxworflow: {% for count in range(0, vmcount) %}{% if loop.first%}{{ vmname }}{% else %}{{ vmname }}-{{ loop.index }}{% endif %}{% if not loop.last %}, {% endif %}{% endfor %} 
  vars:
    vmcount: 3
    vmname: my-new-vm

Это возвращает:

TASK [debug] ********
ok: [localhost] => {
    "hostvariabletouseinawxworflow": "my-new-vm, my-new-vm-2, my-new-vm-3"

Обратите внимание, что можно разделить jinja на несколько строк для удобства чтения, но становится сложно иметь дело с пробелами и символами новой строки, если вы делаете это вне файла шаблона.

Если вы не знаете, как здесь l oop разбивается, он разделен:

{% for count in range(0, vmcount) %}
  {% if loop.first %}
    {{ vmname }}
  {% else %}
    {{ vmname }}-{{ loop.index }}
  {% endif %}

  {% if not loop.last %}
  , 
  {% endif %}
{% endfor %}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...