Есть ли способ зациклить две переменные при импорте роли Ansible?

Я импортирую роль Ansible в игру и запускаю задачу «Установить». Роль предназначена для создания виртуальных машин на гипервизоре, таком как Vbox, и работает нормально. Однако я хочу использовать его для создания нескольких виртуальных машин одновременно, и для этого я должен предоставить 2 переменные: - vm_ip: ip создаваемого vm - vm_name: имя создаваемого vm

Я уже попробовал почти все с циклами, with_items и другими вещами. Например, этот код не работает:

- name: Create VMs
  hosts: localhost
  tasks:
  - import_role:
      name: vm_creation
      tasks_from: install
    vars:
      vm_ip: "{{ item.ips }}"
      vm_name: "{{ item.names }}"
      loop:
        - { ips: 餘.168.20.4', names: 'test4' }
        - { ips: 餘.168.20.5', names: 'test5' }

Предполагается создать виртуальные машины .20.4 и .20.5, но игра вылетает, сообщая мне следующее: «Задача включает в себя параметр с неопределенной переменной. Ошибка была:« элемент »не определен

Всего 1 ответ


Похоже, вы неправильно указали на директиву loop . При этом вы определили переменную с именем loop а не фактически создаете цикл (вот почему item не определен).

Вам также нужно будет использовать include_role а не import_role . Вы можете прочитать о разнице между include_role и import_role в документации .

- name: Create VMs
  hosts: localhost
  tasks:
  - include_role:
      name: vm_creation
      tasks_from: install
    vars:
      vm_ip: "{{ item.ips }}"
      vm_name: "{{ item.names }}"
    loop:
      - { ips: 餘.168.20.4', names: 'test4' }
      - { ips: 餘.168.20.5', names: 'test5' }

Есть идеи?

10000