Развертывание массивной гостевой виртуальной машины на VmWare с доступной игровой книгой - PullRequest
0 голосов
/ 27 февраля 2019

Я написал учебник для ansible для создания виртуальной машины в моей инфраструктуре VMware.Это работает очень хорошо, но я не знаю, как пройти список машин, которые будут созданы, кто-нибудь есть какие-либо идеи, если это возможно сделать?

это моя книга игр:

hosts: all
gather_facts: false
vars_files:
 - variables.yml
connection: local
   tasks:
      - name: configura install cfg
        template:
          src: template_install.j2
          dest:  /root/cfg/{{ vm_name }}.cfg

      - name: configura isolinux.cfg
        template:
          src: isolinux.j2
          dest:  /root/rhel/isolinux/isolinux.cfg

      - name: copia file su satellite
        shell: scp /root/cfg/{{ vm_name }}.cfg root@10.100.64.50:/var/ftp/pub/kickstart/.

      - name: make cd iso for install red hat
          shell: /root/makecdrom.sh {{ vm_name }}

      - name: upload cdrom to library datastore
          vsphere_copy:
          host: <Myvcentername>
          login: <myvcenterusername>
          password:  <Mycenterpassword>
          validate_certs: no
          src: /root/{{ vm_name}}.iso
          datacenter: {{ vm_datacenter }}
          datastore: VMW_LIBRARY01
          path: ISO/{{ vm_name }}.iso

      - name: Crea VM 
          vmware_guest:
          hostname: <Myvcentername>
          login: <myvcenterusername>
          password:  <Mycenterpassword>
          datacenter: "{{ vm_datacenter }}"
          resource_pool: "{{ vm_resource_pool }}"
          validate_certs: no
          annotation: 'creata con script ansible ip address " {{ vm_ip_addr }} "'
          folder: "{{ vm_folder }}"
          name: "{{ vm_name }}"
          state: "{{ vm_state }}"
          guest_id: "{{ vm_guest_id }}"
          cluster: "{{ vm_cluster }}"
             cdrom:
               type: iso
               iso_path: "[VMW_LIBRARY01] ISO/'{{vm_name}}.iso'"
             disk:
               - size_gb: "{{ disk_size_gb }}"
                 type: "{{ disk_type }} "
                 datastore: "{{ disk_datastore }}"
             hardware:
                 memory_mb: "{{ hardware_memory_mb }}"
                 num_cpus: "{{ hardware_num_cpus }}"
             scsi: paravirtual
             networks:
               - name: "{{ networks_name }}"
                 device_type: vmxnet3
          delegate_to: 127.0.0.1
          register: deploy_vm

и это файл переменных

vm_netmask: 255.255.252.0
vm_gateway: 10.100.8.1
vm_fqdn_name: mcdlnxevtp01.menarini.net
vm_name: MCDLNXEVTP01
vm_folder: APP - EASYVISTA
vm_cluster: MCDVMWCLU02
vm_resource_pool: 06 - PRD
networks_name: dPG_3008_PRD
disk_datastore: VMW_PRD_DS02
Vm_OS: Red Hat 7.6
vm_datacenter: MDC-METROPOOL
vm_state: poweredoff
vm_guest_id: rhel7_64Guest
disk_size_gb: 50
disk_type: thin
hardware_memory_mb: 8192
hardware_num_cpus: 4
hardware_scsi: paravirtual
vm_validate_certs: no
networks_device_type: vmxnet3

спасибо за ваш ответ ... simone

Ответы [ 2 ]

0 голосов
/ 28 февраля 2019

Я предпочитаю использовать запасы только для управления конфигурацией.Вы можете сделать это, но как отслеживать изменения или как добавить новый элемент в стек?

С моей точки зрения, лучший способ - использовать файл конфигурации yaml, такой как:

vmstodeploy:
- name: myvm
  vm_ip_addr: 192.168.0.15
  vm_netmask: 255.255.255.0
  vm_gateway: 192.168.0.1
  etc...

И хранили его в git-хранилище для контроля изменений.Если вы хотите добавить больше vms в стек, просто добавьте другой vm:

vmstodeploy:
- name: myvm
  vm_ip_addr: 192.168.0.15
  vm_netmask: 255.255.255.0
  vm_gateway: 192.168.0.1
- name: myvm2
  vm_ip_addr: 192.168.0.16
  vm_netmask: 255.255.255.0
  vm_gateway: 192.168.0.1

и прочитайте его с помощью:

- name: Read My VMs
    include_vars:
      file: "MyConfigFile"
      name: mydeploy

Отсюда у вас будет список развертывания vmинформация в mydeploy var.

Просто создайте цикл внутри роли, подобной этой:

  - name: Deploy VMs
    include_tasks: vmware_deploy.yml
    with_items: "{{ mydeploy|default([]) }}"
    loop_control:
      loop_var: _myvms

Оттуда создайте свой vms внутри файла vmware_deploy.yml:

- name: Create my VMs
  vmware_guest:

Играйте с with_sequence, если vms имеют одинаковые данные, используйте batch() для сериализации ваших развертываний, экспериментируйте с различными опциями, но всегда, начиная с файла конфигурации в yaml.

0 голосов
/ 27 февраля 2019

Действительно, это возможно.Я бы пошел на это, разделив переменные на глобальные переменные для всего инвентаря (например, шлюза - он одинаков для всех или группы серверов) и для каждого сервера.Вы можете сделать это, создав файл со списком инвентаря и списком переменных:

inventory/
  my_vms/
    hosts
    group_vars/
      all.yml
      south-dc.yml
      north-dc.yml
    host_vars/
      my_vm_1.yml
      my_vm_2.yml

Файл hosts содержит список серверов (виртуальные машины в вашем случае).Он может содержать что-то вроде:

[all]
my_vm_1
my_vm_2

[south-dc]
my_vm_1

[north-dc]
my_vm_2

Каталог host_vars содержит YAML-файлы с переменными, названными в честь хостов в файле hosts, т.е. если вы называете свой сервер как my_vm_1, файл будет называться my_vm_1.yml

group_vars аналогичен host_vars, но вы предоставляете переменные, которые являются общими для группы хостов.Специальная группа all предоставляет глобальные переменные для всех хостов.

Все глобальные переменные могут быть помещены в all.yml.Например, вы можете поместить их в этот файл:

disk_size_gb: 50
disk_type: thin
hardware_memory_mb: 8192
hardware_num_cpus: 4

Все переменные для каждого хоста будут затем идти в файл инвентаризации host_vars:

vm_fqdn_name: mcdlnxevtp01.menarini.net
vm_name: MCDLNXEVTP01

Таким образом, вы обеспечите последовательный способ категоризацииваш инвентарь дает вам возможность очистить ваш код

Затем вы можете использовать его, просто позвонив по номеру

ansible-playbook -i inventory/my_vms -l my_vm_1 playbook.yml

Если вы хотите запустить playbook для группы серверов, просто запустите его с помощью -l <groupname> или -l all для всех серверов в инвентаре.

PS: Вам не нужно помещать серверы в группу [all].Это специальная группа, которая содержит все серверы в инвентаре.

...