Рейтинг:1

count.index для словаря в Ansible

флаг cn

Можно ли автоматически генерировать vm10,vm11,vm12 в приведенном ниже сценарии (как count.index, используемый в terraform)? Я хотел бы передать/определить имя «vm» и иметь возможность развернуть 3 виртуальных машины с разными именами vm10, vm11 и vm12. Подскажите способ, спасибо

---
- хосты: цель                         
  вары:
    машины:                  
      v10:
        память: 1024
        ВЦП: 1
      v11:
        память: 1024
        ВЦП: 1
  задачи:
  - имя: копия img
    копировать:
      источник: /root/pri.qcow2
      место назначения: /test/{{ item.key }}.qcow2
      remote_src: да
    with_dict: "{{ машин }}"
  - имя: Импорт/загрузка ВМ
    команда: >
             virt-install --name {{ item.key }} --memory {{ item.value.mem }} --vcpus {{ item.value.vcpu }} --disk /test/{{ item.key }} .qcow2,bus=sata --import --os-variant generic --network default --noreboot
    with_dict: "{{ машин }}"
флаг in
примечание: `with_dict` устарел. [Вместо этого используйте цикл](https://docs.ansible.com/ansible/latest/user_guide/playbooks_loops.html#with-dict)
Alien Life Form avatar
флаг ru
@GeraldSchneider: согласно https://docs.ansible.com/ansible/latest/user_guide/playbooks_loops.html with_* не устарело («Мы не осуждали использование with_ - этот синтаксис будет по-прежнему действителен в обозримом будущем.")
Рейтинг:1
флаг in

Используйте инвентарь вместо диктофона. Вы хотите 100 виртуальных машин?

вмс:
  хосты:
    vm[001:100]:
      память: 1024
      ВЦП: 1

Это будет интерпретировано как vm001,vm002,...,vm099,вм100. делегат задача создать их на локальном хосте, поскольку они не существуют при запуске задачи. После этого вы можете запустить модуль настройки и запускать задачи непосредственно на вновь созданных виртуальных машинах.

Соответствующий playbook будет выглядеть так:

---
- хосты: вмс
  собрать_факты: нет
  задачи:
  - имя: скопировать образ qcow в целевой путь
    копировать:
      источник: /root/ovms/pri.qcow2
      место назначения: /root/ovms/test/{{ inventory_hostname }}.qcow2
      remote_src: да
    делегат_кому: цель
  - имя: Импорт/загрузка ВМ
    команда: >
            virt-install --name {{ inventory_hostname }} --memory {{ mem }} --vcpus {{ vcpu }} --disk /root/ovms/test/{{ inventory_hostname }}.qcow2,bus=sata -- import --os-variant generic --network default --noreboot
    делегат_кому: цель
ranji avatar
флаг cn
Привет @GeraldSchneider, спасибо за обновление! Но мой вопрос заключается в том, что теперь это просто vm10, vm11 и vm12 (3 vm), упоминать их в vars с dict проще. Но если я хочу развернуть 100 виртуальных машин, должен ли я упоминать 100 имен виртуальных машин? или мы можем что-то сделать для этого? (Как и в terraform, [ссылка](https://emilwypych.com/2017/10/15/deploying-multiple-vsphere-vms-terraform/?cn-reloaded=1) есть что-то вроде count.index+1)
флаг in
Если вам нужно указать разные конфигурации для каждой виртуальной машины, вы мало что можете сделать, чтобы автоматизировать это. Конечно, было бы легко просто пронумеровать их, когда все они имеют одинаковую конфигурацию.
ranji avatar
флаг cn
Да, у них одинаковая конфигурация и один и тот же образ qcow2, используемый для всех 100+ виртуальных машин.
флаг in
В вашем примере конфигурация меняется (разная память)
ranji avatar
флаг cn
Извините, это была ошибка с моей стороны. Я упомянул diff mem. Но все виртуальные машины будут иметь одинаковую конфигурацию.
флаг in
Я изменил свой ответ другим решением, которое кажется более подходящим.
ranji avatar
флаг cn
Я отредактировал задачу в разделе вопросов. Поможет ли мне в этом случае инвентаризация?
флаг in
Да, вы можете использовать его для этого. Делегируйте задачи целевой машине.
ranji avatar
флаг cn
Большое спасибо, Джеральд, с инвентарем все работает!
ranji avatar
флаг cn
Давайте [продолжим это обсуждение в чате](https://chat.stackexchange.com/rooms/128455/discussion-between-shiva-ranjini-and-gerald-schneider).
ranji avatar
флаг cn
Привет, Джеральд, Ansible playbook не показывает никакого прогресса после выполнения задачи. Мне нужно вручную нажать ctrl + C, чтобы выйти. Это происходит только тогда, когда я загружаю виртуальные машины в рабочем состоянии. Если виртуальная машина загружена в выключенном состоянии, она показывает ход выполнения. ЗАДАЧА [скопировать изображение qcow в целевой путь] ********************************************** ********************** изменено: [vm-1 -> x.x.x.x] изменено: [vm-2 -> x.x.x.x] ЗАДАЧА [Импорт/Загрузка ВМ] ************************************************* ******************************************************* ************ [ОШИБКА]: пользователь прервал выполнение
флаг in
Пожалуйста, задайте новый вопрос для этого. Включите подробный вывод. Проверьте целевой хост на наличие зависших процессов.

Ответить или комментировать

Большинство людей не понимают, что склонность к познанию нового открывает путь к обучению и улучшает межличностные связи. В исследованиях Элисон, например, хотя люди могли точно вспомнить, сколько вопросов было задано в их разговорах, они не чувствовали интуитивно связи между вопросами и симпатиями. В четырех исследованиях, в которых участники сами участвовали в разговорах или читали стенограммы чужих разговоров, люди, как правило, не осознавали, что задаваемый вопрос повлияет — или повлиял — на уровень дружбы между собеседниками.