您可以使用Ansible来自动化VMware基础架构中的某些任务。您可以自动部署和配置ESXI主机,管理网络设置,启动,停止或删除VM,从模板中部署虚拟机,在ESXI主机上安装更新,等等。本文说明了如何使用Ansible使用Ansible来管理VMware环境。
Ansible具有大量用于管理VMware基础架构的模块,其中大多数基于Pyvmomi(允许您连接到VMware vSphere API的Python SDK)。与PIP Manager一起安装PYVMOMI:
$ sudo pip install pyvmomi
我们假设您已经有一个安装了Ansible的Linux主机。
要允许使用VMware动态库存插件,请启用vmware_vm_inventory
在ansible.cfg:
[inventory] enable_plugins = vmware_vm_inventory, host_list, script, auto, yaml, ini, toml vmware_vars plugin: vmware_vm_inventory strict: False hostname: 192.168.13.70 username: [email protected] password: pas1swsew43 validate_certs: False with_tags: True
然后,您可以运行库存命令并在vCenter或ESXI服务器上获取虚拟机的列表。
$ ansible-inventory --list -i /etc/ansible/vmware/vmware.yml
了解更多:
您可以获取VMS的层次结构列表:
$ ansible-inventory --graph -i /etc/ansible/vmware/vmware.yml
让我们将您的ESXI主机列表添加到/etc/ansible/hosts
:
[all_esxi_hosts] esxi1 ansible_host=192.168.31.20 esxi2 ansible_host=192.168.31.21 esxi3 ansible_host=192.168.31.22
为这组主机设置可变值:
[all_esxi_hosts:vars] ansible_user=root ansible_python_interpreter=/bin/python ansible_ssh_pass=P1ssw0rd6
在此示例中,ESXI主机根密码在清晰文本中指定。建议您在生产环境中对ESXI进行基于SSH密钥的身份验证。
然后,您可以从网络上的Ansible主机访问所有ESXI主机:
$ ansible all_esxi_hosts -m ping
如果未在主机文件中指定密码,则可以交互提示密码:
$ ansible all_esxi_hosts -m ping --ask-pass
使用Ansible,您可以针对所有ESXI主机运行任何命令。 Ansible Ad-Hoc命令模式用于在远程ESXI上执行命令。例如,您可能想知道所有主机的ESXI版本号:
$ ansible all_esxi_hosts -m shell -a "vmware -vl"
这样,您可以在任何主机上运行任何shell命令(必须在ESXI上启用SSH)。
让我们创建一本简单的Ansible Playbookvm_start.yml在VMware Vcenter中的特定虚拟机上供电。本剧本使用连接凭据vmware_vars.yml
。
- name: start vm hosts: localhost become: false gather_facts: false collections: - community.vmware pre_tasks: - include_vars: vmware_vars.yml tasks: - name: power on vmware_guest_powerstate: hostname: "{{ hostname }}" username: "{{ username }}" password: "{{ password }}" name: munfs01 validate_certs: "{{ validate_certs }}" state: powered-on
运行剧本:
$ ansible-playbook /etc/ansible/vmware/vm_start.yml
打开VSPHERE客户端并验证您的VM是否已成功启动。
下一个剧本使您可以在特定的ESXI主机上启用NTPD服务。在使用此剧本之前,请安装community.vmware模块:
$ ansible-galaxy collection install community.vmware
现在创建一本剧本(我们已经直接在剧本中指定了连接参数,以使其易于理解。):
--- - hosts: localhost vars: vcenter_hostname: "192.168.31.20" vcenter_user: "[email protected]" vcenter_password: "passwprd123" esxi_hostname: "192.168.31.50" esxi_username: "root" esxi_password: "es-122023" tasks: - name: Start Service on esxi host in vcenter community.vmware.vmware_host_service_manager: hostname: "{{ vcenter_hostname }}" username: "{{ vcenter_user }}" password: "{{ vcenter_password }}" esxi_hostname: "{{ esxi_hostname }}" service_name: ntpd state: present #present #absent service_policy: off validate_certs: no delegate_to: localhost
运行您的剧本:
$ ansible-playbook /etc/ansible/vmware/vm_esxi_start_service.yml
请注意,免费的VMware管理程序设置无法从Ansible更改。 ESXI API仅在此版本中读取。
在这篇文章中,我们介绍了在VSPHERE环境中使用Ansible来管理VMware ESXI,Vcenter和VM的基础知识。
在上一篇文章中,我们向您展示了如何使用Ansible来管理Windows主机。