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
:
:
, , :
- 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
.
:
- .
- VMware Tools
- Linux-base Perl
- 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:
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 .