Использование API VMware HTTP с помощью Ansible
Введение
Это руководство покажет, как использовать Ansible для автоматизации различных задач с помощью API VMware HTTP.
Требования к сценарию
-
Программное обеспечение
- Должен быть установлен Ansible версии 2.5 или выше.
- Рекомендуется установить последнюю версию с помощью pip:
pip install Pyvmomiна контрольном узле Ansible (поскольку пакеты ОС обычно устарели и несовместимы), если вы планируете использовать существующие модули VMware.
-
Аппаратное обеспечение
- vCenter Server 6.5 и выше с хотя бы одним сервером ESXi
-
Доступ/кредициальные данные
- Ansible (или целевой сервер) должен иметь сетевой доступ к серверу vCenter или серверу ESXi
- Имя пользователя и пароль для vCenter
Ограничения
- Все имена переменных и имена объектов VMware чувствительны к регистру.
- Для использования
validate_certsопции необходимо использовать Python версии 2.7.9, так как эта версия способна изменять поведение проверки SSL. - API VMware HTTP появились в vSphere 6.5 и выше, поэтому минимальный требуемый уровень — 6.5.
- Доступно ограниченное количество API, поэтому вам может потребоваться полагаться на модули VMware на основе XMLRPC.
Описание примера
С помощью следующего Ansible-плейбука вы можете найти систему(ы) хоста VMware ESXi и выполнять различные задачи в зависимости от списка систем хостов. Это общий пример, демонстрирующий, как Ansible может использоваться для потребления API VMware HTTP.
---
- name: Example showing VMware HTTP API utilization
hosts: localhost
gather_facts: no
vars_files:
- vcenter_vars.yml
vars:
ansible_python_interpreter: "/usr/bin/env python3"
tasks:
- name: Login into vCenter and get cookies
uri:
url: https://{{ vcenter_server }}/rest/com/vmware/cis/session
force_basic_auth: yes
validate_certs: no
method: POST
user: "{{ vcenter_user }}"
password: "{{ vcenter_pass }}"
register: login
- name: Get all hosts from vCenter using cookies from last task
uri:
url: https://{{ vcenter_server }}/rest/vcenter/host
force_basic_auth: yes
validate_certs: no
headers:
Cookie: "{{ login.set_cookie }}"
register: vchosts
- name: Change Log level configuration of the given hostsystem
vmware_host_config_manager:
hostname: "{{ vcenter_server }}"
username: "{{ vcenter_user }}"
password: "{{ vcenter_pass }}"
esxi_hostname: "{{ item.name }}"
options:
'Config.HostAgent.log.level': 'error'
validate_certs: no
with_items: "{{ vchosts.json.value }}"
register: host_config_results
Поскольку Ansible использует API VMware HTTP с помощью модуля uri, в этом случае он будет подключаться непосредственно к API VMware HTTP с хоста localhost.
Это означает, что плейбуки не будут выполняться с сервера vCenter или ESXi.
Обратите внимание, что этот плейбук отключает параметр gather_facts, так как вы не хотите собирать данные о localhost.
Перед началом убедитесь, что у вас есть:
- Имя хоста сервера vCenter
- Имя пользователя и пароль для сервера vCenter
- Версия vCenter не ниже 6.5
На данный момент вы будете вводить эти данные непосредственно, но в более продвинутом плейбуке это можно абстрагировать и хранить более безопасным способом, используя ansible-vault или используя кредициальные данные Ansible Tower.
Если ваш сервер vCenter не настроен с надлежащими сертификатами CA, которые можно проверить с сервера Ansible, необходимо отключить проверку этих сертификатов, используя параметр validate_certs. Для этого необходимо установить validate_certs=False в вашем плейбуке.
Как вы видите, мы используем модуль uri в первой задаче, чтобы войти в сервер vCenter и сохранить результат в переменную login с помощью register. Во второй задаче, используя файлы cookie из первой задачи, мы собираем информацию о системе хоста ESXi.
Используя эту информацию, мы изменяем расширенную конфигурацию системы хоста ESXi.
Что ожидать
Выполнение этого плейбука может занять некоторое время, в зависимости от вашей среды и сетевого подключения. По завершении выполнения вы увидите
"results": [
{
...
"invocation": {
"module_args": {
"cluster_name": null,
"esxi_hostname": "10.76.33.226",
"hostname": "10.65.223.114",
"options": {
"Config.HostAgent.log.level": "error"
},
"password": "VALUE_SPECIFIED_IN_NO_LOG_PARAMETER",
"port": 443,
"username": "administrator@vsphere.local",
"validate_certs": false
}
},
"item": {
"connection_state": "CONNECTED",
"host": "host-21",
"name": "10.76.33.226",
"power_state": "POWERED_ON"
},
"msg": "Config.HostAgent.log.level changed."
...
}
]
Отладка
Если ваш плейбук завершается неудачно:
- Проверьте, правильные ли значения для имени пользователя и пароля.
- Проверьте, используете ли вы vCenter 6.5 и выше для использования этих API HTTP.
См. также
- VMware vSphere и Ansible от нуля до полезного от @arielsanchezmor
- Видео сессия vBrownBag, связанное с API VMware HTTP
- Примеры плейбуков для использования API VMware HTTP
- Репозиторий GitHub с примерами Ansible-плейбуков для управления VMware с помощью API HTTP
© 2012–2018 Michael DeHaan
© 2018–2019 Red Hat, Inc.
Licensed under the GNU General Public License version 3.
https://docs.ansible.com/ansible/2.7/vmware/scenario_vmware_http.html