Mengotomatiskan Tugas Administrasi VMware vSphere API Menggunakan Ansible

gambar

Dalam artikel sebelumnya, kami melihat berinteraksi dengan VMware menggunakan Python. Dalam hal yang sama, kami mendiskusikan interaksi dengan VMware menggunakan 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