Crear maquinas virtuales con ansible

Buenas a todos, estoy haciendo pruebas con ansible y vmware. Os pongo la manera de crear maquinas virtuales con ansible, la versión de ansible  1.8.4 y la de mi a vCenter 6.0. Por lo que he visto con ansible 1.8.4 no puede usar las plantillas de VM pero creo que esto se ya funciona en la versión 1.9, que aun no he probado todavía. 

Primero tenemos que crear una lista de inventario de los servidores junto con algunas variables para pasar a nuestro playbook de ansible que creará nuestras máquinas virtuales .

Vamos a crear nuestra lista  que en este ejemplo voy a llamar crea_vm_host.

vi crea_vm_host

Y le ponemos esto:

[vm1]
ans-vm1[01:05] disk='espacio_en_disco' datastore='nombre_de_nuestro_datastorage' network='nombre_de_nuestro_switch' memory='memoria' cpucount='CPU' osid='SO'

Lo explico. vm1, aquí es el nombre del grupo para especificar diferentes variables para cada grupo de servidores que vamos a crear. ans-vm1[01:05] Estos son los nombres reales de VM que vamos a crear. Ansible tiene la capacidad de usar valores de tipo regex para representar un grupo de elementos… en este caso nombres de máquinas virtuales … Así que Ansible creará  ans-vm1 hasta ans-vm5.

disk = – es el tamaño en GB para crear para cada VM datastore = – nombre del datastorage para crear las VM en la red = – nombre de la red (port group), memoria = – la cantidad de memoria en MB para asignar a las VMs, cpucount = – el número de vCPU que se asignarán a las máquinas virtuales, osid = – el identificador de sistema operativo para especificar para el tipo de sistema operativo. Hay una guía aquí para los OSID.

Ahora tenemos que crear el playbook de ansible para que despliegue nuestras máquinas virtuales. En este caso lo llamaré crea_vm.yml

vi crea_vm.yml
---
- hosts: all
  gather_facts: false
  connection: local
  user: remote
  sudo: true

  vars_prompt:
    - name: "vcenter_hostname"
      prompt: "nombre del vcenter"
      private: no
      default: "vcsa"
    - name: "vcenter_user"
      prompt: "usuario de vcenter"
      private: no
    - name: "vcenter_pass"
      prompt: "password de vcenter"
      private: yes

  vars:
    datacenter: 'lab'
    esxi_host: 'esxi01.lab.local'
    notes: 'desplegadas por ansible'

  tasks:
    - vsphere_guest:
        vcenter_hostname: "{{ vcenter_hostname }}"
        username: "{{ vcenter_user }}"
        password: "{{ vcenter_pass }}"
        guest: "{{ inventory_hostname }}"
        state: present
        vm_extra_config:
          notes: "{{ notes }}"
        vm_disk:
          disk1:
            size_gb: "{{ disk }}"
            type: thin
            datastore: "{{ datastore }}"
        vm_nic:
          nic1:
            type: vmxnet3
            network: "{{ network }}"
            network_type: standard
        vm_hardware:
          memory_mb: "{{ memory }}"
          num_cpus: "{{ cpucount }}"
          osid: "{{ osid }}"
          scsi: paravirtual
        esxi:
          datacenter: "{{ datacenter }}"
          hostname: "{{ esxi_host }}"

Ponemos el nombre de host de vCenter, el nombre de usuario y la contraseña para conectarse a vCenter. también ponemos el nombre del centro de datos y en esxi_host nombre de neustro servidor esxi. El esxi_host es solo un marcador de posición para crear inicialmente nuestras máquinas virtuales.

Ahora, ya tenemos la configuración, tendremos una cosa más antes de ejecutar este playbook y eso es instalar el módulo python para vSphere.

sudo install pysphere

Una vez instalado, ya podemos ejecutar nuestro playbook.

ansible-playbook -i crea_vm_host crea_vm.yml

Ya tenemos nuestra configuración de ansible para desplegar maquinas virtuales.

Deja un comentario