Ansible支持的模块:
http://docs.ansible.com/ansible/latest/modules/modules_by_category.html
对VMware的支持:
---
- name: vmware facts from vCenter
hosts: localhost #指定运行playbook的服务器,一般设置为localhost
tasks:
- name: get all registered vms
vmware_vm_facts:
hostname: 172.20.16.20 #vCenter的主机名或IP地址
username: administrator@vsphere.local #vCenter登录名称
password: P@ssw0rd #vCenter登录密码
validate_certs: False #关闭证书认证
register: vmfacts
- name: print facts
debug:
msg: "{{vmfacts}}"
在vmfacts里面显示从vCenter中获取的所有配置相关信息。其中vmfacts返回json格式,可以根据需要过滤、筛选特定的信息。
2.通过vCenter获取单个虚拟机配置信息
---
- name: get specific facts from vcenter
hosts: localhost
connection: local
tasks:
- name: get facts from vcenter
vsphere_guest:
vcenter_hostname: 172.20.16.20
username: administrator@vsphere.local
password: P@ssw0rd
guest: ansible_test_name #想要获取信息的虚拟机名称
vmware_guest_facts: yes #Gather facts from vCenter on a particular VM
validate_certs: no
register: facts
- name: show msg
debug: msg="{{facts}}"
[root@localhost]# cat 0402-vmware-create.yml
---
- hosts: localhost
vars_files:
- vmware-info.yml
tasks:
- name: create vm from template
vmware_guest:
hostname: "{{vcenter_host}}"
username: "{{vcenter_username}}"
password: "{{vcenter_password}}"
validate_certs: no
folder: /VMTEST
esxi_hostname: rpo35.bxcs.com #指定esxi_name
datacenter: DateCenter #指定datacenter
name: ansible_test_name
state: poweredon
guest_id: rhel6Guest #VMware指定guest 类型,需要和https://www.vmware.com/support/developer/converter-sdk/conv55_apireference/vim.vm.GuestOsDescriptor.GuestOsIdentifier.html保持一致。
disk:
- size_gb: 200
type: thin
datastore: BXCS_vSphere_01 #指定特定datastore
hardware:
memory_mb: 512
num_cpus: 1
scsi: paravirtual
template: RHEL6.4-STP # 指定特定模板名称
wait_for_ip_address: True # 等待虚拟机成功启动后继续
register: newvm
- name: IP address info
debug:
msg: "{{newvm}} ansible_test_name"
[root@localhost]# cat 0410-vmware-create.yml
---
- hosts: localhost
vars_files:
- vmware-info.yml
tasks:
- name: create vm from template
vmware_guest:
hostname: "{{vcenter_host}}"
username: "{{vcenter_username}}"
password: "{{vcenter_password}}"
validate_certs: no
folder: /VMTEST
cluster: vRealize-Cluster02 # 指定cluster
datacenter: DateCenter #datacenter
name: ansible_test_name_01
state: poweredon
guest_id: rhel6Guest
disk:
- size_gb: 200
type: thin
autoselect_datastore: yes #根据模板自动选择datastore
hardware:
memory_mb: 512
num_cpus: 1
scsi: paravirtual
template: ANSIBLE-TP01
wait_for_ip_address: True
register: newvm
- name: IP address info
debug:
msg: "{{newvm}} ansible_test_name"
[root@localhost]# cat check-rpm-info.yml
---
- hosts: localhost
vars_files:
- vmware-info.yml
tasks:
- name: create vm from template
vmware_guest:
hostname: "{{vcenter_host}}"
username: "{{vcenter_username}}"
password: "{{vcenter_password}}"
validate_certs: no
folder: /VMTEST
esxi_hostname: rpo35.bxcs.com #esxi_name
datacenter: DateCenter #datacenter
name: ansible_test_name_01
state: poweredon
guest_id: rhel6Guest
disk:
- size_gb: 200
type: thin
datastore: BXCS_vSphere_Cluster #指定datastore cluster
hardware:
memory_mb: 512
num_cpus: 1
scsi: paravirtual
template: ANSIBLE-TP01
wait_for_ip_address: True
register: newvm
- name: IP address info
debug:
msg: "{{newvm}} ansible_test_name"
[root@localhost]# cat 0403-vmware-shell-ip-change.yml
---
- hosts: localhost
vars_files:
- vmware-info.yml
vars:
vmname: "ansible_test_name"
os_user: "root"
os_pass: "123456"
tasks:
- name: change vmware via shell
vmware_vm_shell:
hostname: "{{vcenter_host}}"
username: "{{vcenter_username}}"
password: "{{vcenter_password}}"
validate_certs: no
datacenter: DateCenter
vm_id: "{{vmname}}"
vm_username: "{{os_user}}"
vm_password: "{{os_pass}}"
vm_shell: /bin/echo
vm_shell_args: "$VAR > ifcfg-eth1"
vm_shell_env:
- "PATH=/bin"
- 'VAR= -e
DEVICE=eth1\nNAME=eth1\nONBOOT=yes\nBOOTPROTO=static\nIPADDR=172.20.6.150\nPREFIX=24\nGATEWAY=172.20.6.254
'
vm_shell_cwd: "/etc/sysconfig/network-scripts/"
register: vmfacts
- name: restart network serviceof vm from vcenter
vmware_vm_shell:
hostname: "{{vcenter_host}}"
username: "{{vcenter_username}}"
password: "{{vcenter_password}}"
validate_certs: no
datacenter: DateCenter
vm_id: "{{vmname}}"
vm_username: "{{os_user}}"
vm_password: "{{os_pass}}"
vm_shell: /sbin/service
vm_shell_args: "network restart"
vm_shell_env:
- "PATH=/bin"
vm_shell_cwd: "/tmp"
- debug:
msg: "{{vmfacts}}"
通过vm_tools将任意shell脚本注入到VMware虚拟机中,可灵活配置任意操作。
[root@localhost]# cat 0404-vmware-poweroff.yml
---
- hosts: localhost
vars_files:
- vmware-info.yml
tasks:
- name: poweroff vm
vmware_guest:
hostname: "{{vcenter_host}}"
username: "{{vcenter_username}}"
password: "{{vcenter_password}}"
validate_certs: no
uuid: "422746a9-f303-fa93-aed4-0bfa655b507f" # 待关闭虚拟机UUID
name: "ansible_test_name" #待关闭虚拟机名称
state: poweredoff
force: yes
delegate_to: localhost
可以实现对虚拟机如下的操作:present、absent、poweredon、poweredoff、restarted、suspended、shutdownguest、rebootguest。
[root@localhost]# cat 0405-vmware-snapshot-create.yml
---
- hosts: localhost
vars_files:
- vmware-info.yml
vars:
vmname: "ansible_test_name"
os_user: "root"
os_pass: "123456"
tasks:
- name: create snapshot
vmware_guest_snapshot:
hostname: "{{vcenter_host}}"
username: "{{vcenter_username}}"
password: "{{vcenter_password}}"
validate_certs: no
datacenter: DateCenter
folder: /VMTEST
name: ansible_test_name
state: present
snapshot_name: ansible_test_snapshot_01
register: result
- name: show result
shell: echo "{{result}}"
[root@localhost]# cat 0405-vmware-snapshot-create.yml
---
- hosts: localhost
vars_files:
- vmware-info.yml
vars:
vmname: "ansible_test_name"
os_user: "root"
os_pass: "123456"
tasks:
- name: create snapshot
vmware_guest_snapshot:
hostname: "{{vcenter_host}}"
username: "{{vcenter_username}}"
password: "{{vcenter_password}}"
validate_certs: no
datacenter: DateCenter
folder: /VMTEST
name: ansible_test_name
state: absent
snapshot_name: ansible_test_snapshot_01
register: result
- name: show result
shell: echo "{{result}}"