当前位置:网站首页 > 更多 > 玩电脑 > 正文

[玩转系统] 使用 Ansible 管理 VMware 基础设施

作者:精品下载站 日期:2024-12-14 06:36:17 浏览:14 分类:玩电脑

使用 Ansible 管理 VMware 基础设施


您可以使用 Ansible 自动执行 VMware 基础架构中的某些任务。您可以自动部署和配置 ESXi 主机、管理网络设置、启动、停止或删除虚拟机、从模板部署虚拟机、在 ESXi 主机上安装更新等。本文介绍了如何开始使用 Ansible 来管理您的 VMware环境。

Ansible 拥有大量用于管理 VMware 基础架构的模块,其中大部分基于 pyVmomi(一种允许连接到 VMware vSphere API 的 Python SDK)。使用 pip 管理器安装 pyVmomi:

$ sudo pip install pyvmomi

[玩转系统] 使用 Ansible 管理 VMware 基础设施

我们假设您已经拥有安装了 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 
password: pas1swsew43
validate_certs: False
with_tags: True

然后,您可以运行 inventory 命令并获取 vCenter 或 ESXi 服务器上的虚拟机列表。

$ ansible-inventory --list -i /etc/ansible/vmware/vmware.yml

您可以获得虚拟机的分层列表:

$ ansible-inventory --graph -i /etc/ansible/vmware/vmware.yml

[玩转系统] 使用 Ansible 管理 VMware 基础设施

让我们将 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

[玩转系统] 使用 Ansible 管理 VMware 基础设施

在此示例中,ESXi 主机 root 密码以明文形式指定。建议您在生产环境中的 ESXi 上配置基于 SSH 密钥的身份验证。

然后,您可以验证是否可以通过网络从 Ansible 主机访问所有 ESXi 主机:

$ ansible all_esxi_hosts -m ping

如果您未在主机文件中指定密码,则可以交互式提示输入密码:

$ ansible all_esxi_hosts -m ping --ask-pass

[玩转系统] 使用 Ansible 管理 VMware 基础设施

借助 Ansible,您可以对所有 ESXi 主机运行任何命令。 Ansible ad-hoc 命令模式用于在远程 ESXi 上执行命令。例如,您可能想知道所有主机的 ESXi 版本号:

$ ansible all_esxi_hosts -m shell -a "vmware -vl"

[玩转系统] 使用 Ansible 管理 VMware 基础设施

这样,您就可以在任何主机上运行任何 shell 命令(必须在 ESXi 上启用 SSH)。

让我们创建一个简单的 Ansible playbook vm_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

[玩转系统] 使用 Ansible 管理 VMware 基础设施

打开 vSphere Client 并验证您的虚拟机是否已成功启动。

[玩转系统] 使用 Ansible 管理 VMware 基础设施

下一个剧本允许您在特定 ESXi 主机上启用 ntpd 服务。在使用此 Playbook 之前安装community.vmware 模块:

$ ansible-galaxy collection install community.vmware

现在创建一个 playbook(我们直接在 Playbook 中指定了连接参数,以便更容易理解。):

---
- hosts: localhost
  vars:
    vcenter_hostname: "192.168.31.20"
    vcenter_user: "[email "
    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

请注意,无法从 Ansible 更改免费的 VMware Hypervisor 设置。 ESXi API 在此版本中是只读的。

在这篇文章中,我们介绍了使用 Ansible 管理 vSphere 环境中的 VMware ESXi、vCenter 和虚拟机的基础知识。

在上一篇文章中,我们向您展示了如何使用 Ansible 来管理 Windows 主机。

您需要 登录账户 后才能发表评论

取消回复欢迎 发表评论:

关灯