Ansible loop с IP-адресом, увеличивающим IP-адреса

Приведенный ниже код дает правильные имена хостов для каждой виртуальной машины, но отправляет два IP-адреса только что созданной виртуальной машине. Все остальное настраивается правильно на виртуальной машине. Он создает две виртуальные машины vm-vrf115 и vm-vrf116 и дает им по два IP-адреса. Я не уверен, почему я получаю два IP-адреса для каждой виртуальной машины.

vm-vrf115 IP1: 192.168.1.115 and IP2: 192.168.1.230
vm-vrf116 IP1: 192.168.1.116 and IP2: 192.168.1.231
---
- name: Create a VM from template and customize
  hosts: localhost
  connection: local
  gather_facts: no

  vars:

    ip_base: "192.168.1."
    starting_index: 115
    num_vms: 2
    hostname: vm-vrf

  tasks:

  - name: Create VMs
    delegate_to: localhost
    vmware_guest:
      hostname: vcenter_name
      username: administrator@vsphere.local
      password: vcenter_pw
      validate_certs: False
      datacenter: NSX-T
      folder: VRF-VMs
      name: "{{ hostname }}{{ item }}"
      state: poweredon
      template: Ubuntu-2204-Template
      esxi_hostname: pcs-esxi1
      disk:
      - size_gb: 100
        type: thin
        datastore: esxi1
      hardware:
        memory_mb: 4096
        num_cpus: 2
        num_cpu_cores_per_socket: 1
        scsi: paravirtual
        memory_reservation_lock: no
        # mem_limit: 8096
        mem_reservation: 0
        # cpu_limit: 8096
        cpu_reservation: 0
        hotadd_cpu: True
        hotremove_cpu: True
        hotadd_memory: True
        #version: 19 # Hardware version of virtual machine
        boot_firmware: "efi"     
      networks:
      - name: DPortGroup
        hostname: "{{ hostname }}{{ item }}"
        dns_servers: 
        - 192.168.1.3
        ip: "{{ ip_base }}{{ starting_index + (item | int) }}"
        netmask: 255.255.255.0
        gateway: 192.168.1.1
      wait_for_ip_address: no
    with_sequence: start = {{ starting_index }} count = {{ num_vms }}
    register: deploy

Я попытался посмотреть на вывод, ошибок нет, виртуальная машина настроена полностью. Просто отправьте два IP-адреса для каждой виртуальной машины, что странно.

Что-то не так с тем, как я настроил здесь цикл?

У меня есть предположение, что в вашем описании отсутствует ожидаемый результат. Я думаю только один IP, но какой?

U880D 22.02.2023 08:44
Ускорьте разработку веб-приложений Laravel с помощью этих бесплатных стартовых наборов
Ускорьте разработку веб-приложений Laravel с помощью этих бесплатных стартовых наборов
Laravel - это мощный PHP-фреймворк, используемый для создания масштабируемых и надежных веб-приложений. Одним из преимуществ Laravel является его...
Что такое двойные вопросительные знаки (??) в JavaScript?
Что такое двойные вопросительные знаки (??) в JavaScript?
Как безопасно обрабатывать неопределенные и нулевые значения в коде с помощью Nullish Coalescing
Создание ресурсов API Laravel: Советы по производительности и масштабируемости
Создание ресурсов API Laravel: Советы по производительности и масштабируемости
Создание API-ресурса Laravel может быть непростой задачей. Она требует глубокого понимания возможностей Laravel и лучших практик, чтобы обеспечить...
Как сделать компонент справочного центра с помощью TailwindCSS
Как сделать компонент справочного центра с помощью TailwindCSS
Справочный центр - это веб-сайт, где клиенты могут найти ответы на свои вопросы и решения своих проблем. Созданный для решения многих распространенных...
Асинхронная передача данных с помощью sendBeacon в JavaScript
Асинхронная передача данных с помощью sendBeacon в JavaScript
В современных веб-приложениях отправка данных из JavaScript на стороне клиента на сервер является распространенной задачей. Одним из популярных...
Как подобрать выигрышные акции с помощью анализа и визуализации на Python
Как подобрать выигрышные акции с помощью анализа и визуализации на Python
Отказ от ответственности: Эта статья предназначена только для демонстрации и не должна использоваться в качестве инвестиционного совета.
0
1
51
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий
Что-то не так с тем, как я настроил здесь цикл?

Используя минимальный пример, основанный на вашем первоначальном вопросе

---
- hosts: localhost
  connection: local
  gather_facts: no

  vars:
    ip_base: "192.168.1."
    starting_index: 115
    num_vms: 2

  tasks:

  - debug:
      msg: "{{ ip_base }}{{ starting_index + (item | int) }}"
    delegate_to: localhost
    with_sequence: start = {{ starting_index }} count = {{ num_vms }}

В результате получается

TASK [debug] ********************************
ok: [localhost -> localhost] => (item=115) =>
  msg: 192.168.1.230
ok: [localhost -> localhost] => (item=116) =>
  msg: 192.168.1.231

Ответ, кажется, нет, и если ожидаемый результат состоит в том, чтобы добавить начальный индекс 115 к элементу индекса 115 и 116, в результате чего получится 230 и 231. Однако это объяснило бы возможное несоответствие конфигурации, поскольку вы собираетесь выполнять настройку в распределенной среде и на удаленных хостах.

Если нет и что я предполагаю, вы можете взглянуть на следующий измененный пример

  - debug:
      msg: "{{ ip_base }}{{ starting_index + ansible_loop.index0 }}"
    delegate_to: localhost
    with_sequence: start = {{ starting_index }} count = {{ num_vms }}
    loop_control:
      extended: true

В результате получается

TASK [debug] ********************************
ok: [localhost -> localhost] => (item=115) =>
  msg: 192.168.1.115
ok: [localhost -> localhost] => (item=116) =>
  msg: 192.168.1.116

Подводя итог, вы, вероятно, непреднамеренно добавили содержимое элемента цикла в базу вместо индекса или счетчика цикла.

Дополнительная документация

Спасибо! Вот оно! Теперь это работает. Я тоже был так близок, но не мог понять, как установить индекс для начального подсчета, и это была моя проблема. Еще раз спасибо!

Jim Schneider 23.02.2023 03:22

Другие вопросы по теме