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.