Automatice las tareas de administración de VMware vSphere API con Ansible

imagen

En un artículo anterior, vimos cómo interactuar con VMware usando Python. En el mismo, discutimos la interacción con VMware usando 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