Вопрос: Ansible Создание массива чисел


Мое намерение состоит в том, чтобы сгенерировать список, содержащий числа от 1 до 22, и за это я написал ниже Ansible script.

- hosts: localhost
  gather_facts: no
  tasks:
    - name: Generate sequance
      set_fact:
        mysequence: "{{ item | list }}"
      with_sequence: start=1 end=22

    - debug: var=mysequence

Когда я запускаю код, я получаю этот странный результат

$ ansible-playbook test.yml

PLAY [localhost] **************************************************************************************************************************

TASK [Generate sequance] ******************************************************************************************************************
ok: [localhost] => (item=1)
ok: [localhost] => (item=2)
ok: [localhost] => (item=3)
ok: [localhost] => (item=4)
ok: [localhost] => (item=5)
ok: [localhost] => (item=6)
ok: [localhost] => (item=7)
ok: [localhost] => (item=8)
ok: [localhost] => (item=9)
ok: [localhost] => (item=10)
ok: [localhost] => (item=11)
ok: [localhost] => (item=12)
ok: [localhost] => (item=13)
ok: [localhost] => (item=14)
ok: [localhost] => (item=15)
ok: [localhost] => (item=16)
ok: [localhost] => (item=17)
ok: [localhost] => (item=18)
ok: [localhost] => (item=19)
ok: [localhost] => (item=20)
ok: [localhost] => (item=21)
ok: [localhost] => (item=22)

TASK [debug] ******************************************************************************************************************************
ok: [localhost] => {
    "mysequence": [
        "2",
        "2"
    ]
}

PLAY RECAP ********************************************************************************************************************************
localhost                  : ok=2    changed=0    unreachable=0    failed=0

Я использую последнюю версию Ansible. Любая помощь очень ценится!


Мне нужен этот список для другой задачи. Вот фрагмент:

- name: Reboot 22 VMs
  vmware_guest:
    validate_certs: false
    hostname: x.x.x.x
    username: user@vsphere.local
    password: PASSS
    datacenter: DC1
    folder: "DC1/vm/Pod-{{item[1]}}"
    name: "{{item[0]}}-Pod-{{item[1]}}"
    state: restarted
  delegate_to: localhost
  with_nested:
    - "{{myVarList}}"
    - [1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22]

5
2018-03-09 22:55


Источник


Что вы в конечном итоге используете для этого списка номеров? Есть ли конкретная причина, почему вы пытаетесь это сделать? Я подозреваю, что вы должны использовать альтернативный метод, но больше контекста позволит нам указать вам на что-то лучшее. - Zoredache
Мне нужен этот список для другой задачи. with_nested:- "{{myVarList}}"``- [1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22] - gh0st
Правильно, вам нужно объяснить, почему вам нужен этот список чисел и что вы хотели выполнить. - Michael Hampton♦
@MichaelHampton См. Дополнительную информацию - gh0st
Это неправильный подход. Вместо этого вам нужно использовать динамический инвентарь. - Michael Hampton♦


Ответы:


Ничего странный в ваших результатах: вы установили mysequence 22 раза, значения первых 21 итерации перезаписываются, последнее значение - строка 22 преобразован в список с list фильтр. В результате вы получаете двухэлементный список с 2 а также 2,

То, что вы хотели, чтобы задача выглядела так:

- name: Generate sequance
  set_fact:
    mysequence: "{{ mysequence | default([]) + [item | int] }}"
  with_sequence: start=1 end=22

Но то, что вы действительно хотели, это способ генерации списка целых чисел в шаблоне Jinja2:

- set_fact:
    mysequence: "{{ lookup('sequence', 'start=1 end=22', wantlist=true) | map('int') | list }}"
  • sequence плагин lookup с wantlist set, генерирует список строк
  • map('int') отображает каждый элемент списка в целое число
  • list преобразует полученный объект в список

8
2018-03-09 23:29



Хороший ответ. Поскольку OP в основном использует последовательность в контексте строки, они могут, вероятно, пропустить все биты, чтобы преобразовать их в целые числа. IE просто идет только с {{ lookup('sequence', 'start=1 end=22').split(',')}} - Zoredache
Да, но запрос был для списка целых чисел. - techraf
@techraf Большое спасибо за вашу помощь и объяснение! - gh0st