Automate VMware vSphere API Administration Tasks Using Ansible

image

In a previous article, we looked at interacting with VMware using Python. In the same, we discuss interaction with VMware using Ansible.


Ansible โ€” , Python . Ansible , , playbook'a . , playbook, .


Ansible pyVmomi Python 2.6.


pyVmomi, pip:


pip install pyvmomi

VMware


โ€” VMware.


ansible.cfg :


[inventory]
enable_plugins = vmware_vm_inventory

, .vmware.yml .vmware.yaml. :


plugin: vmware_vm_inventory
strict: False
hostname: 10.10.10.10
username: admin@vsphere.local
password: AdminSecur3P@ssw0rd
validate_certs: False
with_tags: True

:


ansible-inventory --list -i <filename>.vmware.yml


vmware_guest

:



:


hostname
DNS- IP- ESXI-
username

password

validate_certs

datacenter
datacenter
cluster

name

template
,
folder

annotation

datastore
datastore
networks

customization
,
hardware
hardware

, , :


- name:    
  vmware_guest:
    hostname: "{{ vcenter_server }}"
    username: "{{ vcenter_user }}"
    password: "{{ vcenter_pass }}"
    validate_certs: False
    datacenter: datacenter1
    cluster: cluster1
    name: VMNAME
    template: TemplateName
    folder: /dc1/vm/targetFolder
    annotation: " ,   TemplateName"
    datastore: DATASTORE1
    networks:
      - name: VM Network
        ip: '10.10.100.100'
        netmask: '255.255.252.0'
        gateway: '10.10.100.10'
        dns_servers: [1.1.1.1, 8.8.8.8]
        type: static
    customization:
      hostname: "VMNAME.domain.ru"
      dns_servers: [1.1.1.1, 8.8.8.8]
    wait_for_ip_address: yes

.


:


  1. .
  2. VMware Tools
  3. Linux-base Perl
  4. Microsoft System Preparation (Sysprep) Windows-

vmware_guest_info

, .


, :


- name:  uuid   
  vmware_guest_facts:
    hostname: "{{ vcenter_server }}"
    username: "{{ vcenter_user }}"
    password: "{{ vcenter_pass }}"
    validate_certs: False
    datacenter: datacenter1
    folder: /dc1/vm/targetFolder
    name: VMNAME
  register: vm_facts
- name:  
  vmware_guest:
    hostname: "{{ vcenter_server }}"
    username: "{{ vcenter_user }}"
    password: "{{ vcenter_pass }}"
    validate_certs: False
    cluster: cluster1
    uuid: "{{ vm_facts.instance.hw_product_uuid }}"
    name: NEW_VM_NAME

.


, , rabbitmq, firewall . Ansible Python. Python c VMware .


:


  • Windows
  • owner
  • 7-zip win_get_url
  • postgresql win_chocolatey

- name:  VM  
  vmware_guest:
    hostname: "{{ vcenter_server }}"
    username: "{{ vcenter_user }}"
    password: "{{ vcenter_pass }}"
    validate_certs: False
    datacenter: datacenter1
    cluster: cluster1
    name: VMNAME
    template: TemplateName
    folder: /dc1/vm/targetFolder
    annotation: " ,   TemplateName"
    datastore: DATASTORE1
    networks:
      - name: VM Network
        ip: '10.10.100.100'
        netmask: '255.255.252.0'
        gateway: '10.10.100.10'
        dns_servers: [1.1.1.1, 8.8.8.8]
        type: static
    customization:
      hostname: "VMNAME.domain.ru"
      dns_servers: [1.1.1.1, 8.8.8.8]
    wait_for_ip_address: yes
  register: vm_facts

- name:   owner
  vmware_guest_custom_attributes:
    hostname: "{{ vcenter_server }}"
    username: "{{ vcenter_user }}"
    password: "{{ vcenter_pass }}"
    validate_certs: False
    name: VMNAME
    uuid: "{{ vm_facts.instance.hw_product_uuid }}"
    state: present
    attributes:
      - name: "Owner"
        value: IIvanov

#   ansible-
- name: Add new host
  add_host:
    name: '10.10.100.100'
    ansible_host: '10.10.100.100'
    ansible_user: "{{ login }}"
    ansible_password: "{{ password }}"
    ansible_connection: winrm
    ansible_winrm_transport: basic

#       
- name: Ansible ping
  win_ping:
  delegate_to: '10.10.100.100'
  register: result
  until: result.ping == "pong"
  retries: 20
  delay: 6

#  7-Zip   win_package
- name:  7-zip
  win_get_url:
    url: https://www.7-zip.org/a/7z1701-x64.msi
    dest: C:\temp\7z.msi
  delegate_to: '10.10.100.100'

- name:  7-zip
  win_package:
    path: C:\temp\7z.msi
    state: present
  delegate_to: '10.10.100.100'

- name:  postgresql   chocolatey
  win_chocolatey:
    name: postgresql
    state: present
  delegate_to: '10.10.100.100'

ยซ (IaC)ยป, , . Playbook' , . code-review .


, , staging, production .


All Articles