Spec-Zone.ru › Ansible 2.7

Использование 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

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API