• Introducción
  • Requisitos del escenario
  • Supuestos
  • Advertencias
  • Descripción de ejemplo

    • Que esperar
    • Solución de problemas

Introducción

Esta guía le mostrará cómo utilizar Ansible para clonar una máquina virtual a partir de una plantilla VMware existente o un invitado VMware existente.

Requisitos del escenario

  • Software

    • Se debe instalar Ansible 2.5 o posterior
    • El módulo de Python Pyvmomi debe instalarse en Ansible (o en el host de destino si no se ejecuta contra el host local)
    • Instalación de la última Pyvmomi vía pip es recomendado [as the OS provided packages are usually out of date and incompatible]
  • Hardware

    • vCenter Server con al menos un servidor ESXi
  • Acceso / Credenciales

    • Ansible (o el servidor de destino) debe tener acceso de red al servidor vCenter o al servidor ESXi en el que se implementará
    • Nombre de usuario y contraseña
    • Usuario administrador con los siguientes privilegios

      • Datastore.AllocateSpace en el almacén de datos de destino o en la carpeta del almacén de datos
      • Network.Assign en la red a la que se asignará la máquina virtual
      • Resource.AssignVMToPool en el host, clúster o grupo de recursos de destino
      • VirtualMachine.Config.AddNewDisk en el centro de datos o la carpeta de la máquina virtual
      • VirtualMachine.Config.AddRemoveDevice en el centro de datos o la carpeta de la máquina virtual
      • VirtualMachine.Interact.PowerOn en el centro de datos o la carpeta de la máquina virtual
      • VirtualMachine.Inventory.CreateFromExisting en el centro de datos o la carpeta de la máquina virtual
      • VirtualMachine.Provisioning.Clone en la máquina virtual que está clonando
      • VirtualMachine.Provisioning.Customize en la máquina virtual o en la carpeta de la máquina virtual si está personalizando el sistema operativo invitado
      • VirtualMachine.Provisioning.DeployTemplate en la plantilla que estás usando
      • VirtualMachine.Provisioning.ReadCustSpecs en el vCenter Server raíz si está personalizando el sistema operativo invitado

      Dependiendo de sus requisitos, también podría necesitar uno o más de los siguientes privilegios:

      • VirtualMachine.Config.CPUCount en el centro de datos o la carpeta de la máquina virtual
      • VirtualMachine.Config.Memory en el centro de datos o la carpeta de la máquina virtual
      • VirtualMachine.Config.DiskExtend en el centro de datos o la carpeta de la máquina virtual
      • VirtualMachine.Config.Annotation en el centro de datos o la carpeta de la máquina virtual
      • VirtualMachine.Config.AdvancedConfig en el centro de datos o la carpeta de la máquina virtual
      • VirtualMachine.Config.EditDevice en el centro de datos o la carpeta de la máquina virtual
      • VirtualMachine.Config.Resource en el centro de datos o la carpeta de la máquina virtual
      • VirtualMachine.Config.Settings en el centro de datos o la carpeta de la máquina virtual
      • VirtualMachine.Config.UpgradeVirtualHardware en el centro de datos o la carpeta de la máquina virtual
      • VirtualMachine.Interact.SetCDMedia en el centro de datos o la carpeta de la máquina virtual
      • VirtualMachine.Interact.SetFloppyMedia en el centro de datos o la carpeta de la máquina virtual
      • VirtualMachine.Interact.DeviceConnection en el centro de datos o la carpeta de la máquina virtual

Supuestos

  • Todos los nombres de variables y de objetos de VMware distinguen entre mayúsculas y minúsculas
  • VMware permite la creación de máquinas virtuales y plantillas con el mismo nombre en los centros de datos y dentro de los centros de datos.
  • Necesita usar la versión Python 2.7.9 para poder usar validate_certs opción, ya que esta versión es capaz de cambiar los comportamientos de verificación SSL

Advertencias

  • Los hosts del clúster de ESXi deben tener acceso al almacén de datos en el que reside la plantilla.
  • Varias plantillas con el mismo nombre provocarán fallas en el módulo.
  • Para utilizar la personalización de invitados, VMware Tools debe estar instalado en la plantilla. Para Linux, el open-vm-tools Se recomienda el paquete, y requiere que Perl estar instalado.

Descripción de ejemplo

En este caso de uso / ejemplo, seleccionaremos una plantilla de máquina virtual y la clonaremos en una carpeta específica en nuestro centro de datos / clúster. El siguiente libro de jugadas de Ansible muestra los parámetros básicos que se necesitan para esto.

----name: Create a VM from a template
  hosts: localhost
  gather_facts: no
  tasks:-name: Clone the template
    vmware_guest:hostname:" vcenter_ip "username:" vcenter_username "password:" vcenter_password "validate_certs:Falsename: testvm_2
      template: template_el7
      datacenter:" datacenter_name "folder: /DC1/vm
      state: poweredon
      cluster:" cluster_name "wait_for_ip_address: yes

Dado que Ansible utiliza la API de VMware para realizar acciones, en este caso de uso nos conectaremos directamente a la API desde nuestro host local. Esto significa que nuestros libros de jugadas no se ejecutarán desde vCenter o ESXi Server. No es necesario que recopilemos datos sobre nuestro host local, por lo que gather_facts El parámetro se desactivará. Puede ejecutar estos módulos en otro servidor que luego se conectaría a la API si su host local no tiene acceso a vCenter. Si es así, los módulos de Python requeridos deberán instalarse en ese servidor de destino.

Para empezar, necesitaremos algunos bits de información. Lo primero y más importante es el nombre de host del servidor ESXi o vCenter Server. Después de esto, necesitará el nombre de usuario y la contraseña de este servidor. Por ahora, los ingresará directamente, pero en un libro de jugadas más avanzado, esto se puede resumir y almacenar de una manera más segura usando bóveda-ansible o usando Credenciales de Ansible Tower. Si su vCenter o servidor ESXi no está configurado con los certificados de CA adecuados que se pueden verificar desde el servidor Ansible, entonces es necesario deshabilitar la validación de estos certificados mediante el validate_certs parámetro. Para hacer esto necesitas configurar validate_certs=False en su libro de jugadas.

Ahora debe proporcionar la información sobre la máquina virtual que se creará. Asigne un nombre a su máquina virtual, uno que cumpla con todos los requisitos de VMware para las convenciones de nomenclatura. A continuación, seleccione el nombre para mostrar de la plantilla desde la que desea clonar la nueva máquina virtual. Debe coincidir exactamente con lo que se muestra en la interfaz de usuario web de VMware. Luego, puede especificar una carpeta para colocar esta nueva máquina virtual. Esta ruta puede ser una ruta relativa o una ruta completa a la carpeta, incluido el centro de datos. Es posible que deba especificar un estado para la máquina virtual. Esto simplemente le dice al módulo qué acción desea realizar; en este caso, se asegurará de que la máquina virtual exista y esté encendida. Un parámetro opcional es wait_for_ip_address, esto le indicará a Ansible que espere a que la máquina virtual se inicie por completo y VMware Tools se esté ejecutando antes de completar esta tarea.

Que esperar

  • Verá un poco de salida JSON después de que se complete este manual. Esta salida muestra varios parámetros que se devuelven desde el módulo y desde vCenter sobre la máquina virtual recién creada.
"changed":true,"instance":"annotation":"","current_snapshot":null,"customvalues":,"guest_consolidation_needed":false,"guest_question":null,"guest_tools_status":"guestToolsNotRunning","guest_tools_version":"0","hw_cores_per_socket":1,"hw_datastores":["ds_215"],"hw_esxi_host":"192.0.2.44","hw_eth0":"addresstype":"assigned","ipaddresses":null,"label":"Network adapter 1","macaddress":"00:50:56:8c:19:f4","macaddress_dash":"00-50-56-8c-19-f4","portgroup_key":"dvportgroup-17","portgroup_portkey":"0","summary":"DVSwitch: 50 0c 5b 22 b6 68 ab 89-fc 0b 59 a4 08 6e 80 fa","hw_files":["[ds_215] testvm_2/testvm_2.vmx","[ds_215] testvm_2/testvm_2.vmsd","[ds_215] testvm_2/testvm_2.vmdk"],"hw_folder":"/DC1/vm","hw_guest_full_name":null,"hw_guest_ha_state":null,"hw_guest_id":null,"hw_interfaces":["eth0"],"hw_is_template":false,"hw_memtotal_mb":512,"hw_name":"testvm_2","hw_power_status":"poweredOff","hw_processor_count":2,"hw_product_uuid":"420cb25b-81e8-8d3b-dd2d-a439ee54fcc5","hw_version":"vmx-13","instance_uuid":"500cd53b-ed57-d74e-2da8-0dc0eddf54d5","ipv4":null,"ipv6":null,"module_hw":true,"snapshots":[],"invocation":"module_args":"annotation":null,"cdrom":,"cluster":"DC1_C1","customization":,"customization_spec":null,"customvalues":[],"datacenter":"DC1","disk":[],"esxi_hostname":null,"folder":"/DC1/vm","force":false,"guest_id":null,"hardware":,"hostname":"192.0.2.44","is_template":false,"linked_clone":false,"name":"testvm_2","name_match":"first","networks":[],"password":"VALUE_SPECIFIED_IN_NO_LOG_PARAMETER","port":443,"resource_pool":null,"snapshot_src":null,"state":"present","state_change_timeout":0,"template":"template_el7","username":"[email protected]","uuid":null,"validate_certs":false,"vapp_properties":[],"wait_for_ip_address":true
  • El estado se cambia a True que notifica que la máquina virtual se construyó usando la plantilla dada. El módulo no se completará hasta que finalice la tarea de clonación en VMware. Esto puede llevar algún tiempo dependiendo de su entorno.
  • Si utiliza el wait_for_ip_address , luego también aumentará el tiempo de clonación, ya que esperará hasta que la máquina virtual se inicie en el sistema operativo y se haya asignado una dirección IP a la NIC determinada.

Solución de problemas

Cosas para inspeccionar

  • Compruebe si los valores proporcionados para el nombre de usuario y la contraseña son correctos
  • Compruebe si el centro de datos que proporcionó está disponible
  • Compruebe si la plantilla especificada existe y tiene permisos para acceder al almacén de datos
  • Asegúrese de que la ruta completa de la carpeta que especificó ya existe. No creará carpetas automáticamente para ti.