使用Ansible管理VMware基础架构

您可以使用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_inventoryansible.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主机。