Spec-Zone.ru › Ansible 2.6

Развертывание виртуальной машины из шаблона

Введение

Это руководство покажет, как использовать Ansible для клонирования виртуальной машины из уже существующего шаблона VMware.

Требования к сценарию

  • Программное обеспечение

    • Необходимо установить Ansible 2.5 или более позднюю версию
    • Модуль Python Pyvmomi должен быть установлен на Ansible (или целевом хосте, если выполняется не на localhost)
    • Рекомендуется установить последнюю версию Pyvmomi с помощью pip [поскольку пакеты ОС обычно устаревают и несовместимы]
  • Аппаратное обеспечение

    • По меньшей мере один автономный сервер ESXi или
    • сервер vCenter с по меньшей мере одним сервером ESXi
  • Доступ/Учетные данные

    • Ansible (или целевой сервер) должен иметь сетевой доступ к серверу vCenter или серверу ESXi, на который будет выполняться развертывание
    • Имя пользователя и пароль
    • Пользователь администратор с указанными привилегиями

      • VirtualMachine.Provisioning.Clone для виртуальной машины, которую вы клонируете
      • VirtualMachine.Inventory.CreateFromExisting для дата-центра или папки виртуальных машин
      • VirtualMachine.Config.AddNewDisk для дата-центра или папки виртуальных машин
      • Resource.Assign виртуальной машины в пул ресурсов на целевом хосте, кластере или пуле ресурсов
      • Datastore.AllocateSpace на целевом хранилище данных или папке хранилища данных
      • Network.AssignNetwork для сети, к которой будет подключена виртуальная машина
      • VirtualMachine.Provisioning.Customize для виртуальной машины или папки виртуальной машины, если вы настраиваете гостевую операционную систему
      • VirtualMachine.Provisioning.ReadCustSpecs для корневого сервера vCenter, если вы настраиваете гостевую операционную систему

Предположения

  • Все имена переменных и имена объектов VMware чувствительны к регистру
  • VMware позволяет создавать виртуальные машины и шаблоны с одинаковым именем в разных дата-центрах и внутри дата-центров.
  • Для использования параметра validate_certs необходимо использовать Python 2.7.9, так как эта версия способна изменять поведение проверки SSL.

Ограничения

  • Хосты в кластере ESXi должны иметь доступ к хранилищу данных, на котором находится шаблон.
  • Несколько шаблонов с одинаковым именем приведут к ошибкам модуля.
  • Для использования настройки гостевой ОС VMware Tools должны быть установлены на шаблоне. Для Linux рекомендуется пакет open-vm-tools, который требует установленного Perl.

Описание примера

В этом случае/примере мы выберем шаблон виртуальной машины и клонируем его в определенную папку в нашем дата-центре/кластере. Следующий Ansible-плейбук демонстрирует основные параметры, необходимые для этого.

---
- name: Create a VM from a template
  hosts: localhost
  connection: local
  gather_facts: no
  tasks:
  - name: Clone the template
    vmware_guest:
      hostname: 192.0.2.44
      username: administrator@vsphere.local
      password: vmware
      validate_certs: False
      name: testvm_2
      template: template_el7
      datacenter: DC1
      folder: /DC1/vm
      state: poweredon
      wait_for_ip_address: yes

Поскольку Ansible использует API VMware для выполнения действий, в этом случае мы будем подключаться непосредственно к API с нашего localhost. Это означает, что наши плейбуки не будут выполняться с сервера vCenter или ESXi. Нам не обязательно собирать факты о нашем localhost, поэтому параметр gather_facts будет отключен. Вы можете запустить эти модули на другом сервере, который затем подключится к API, если ваш localhost не имеет доступа к vCenter. В таком случае необходимые модули Python необходимо установить на этот целевой сервер.

Для начала нам потребуется несколько данных. Прежде всего, имя хоста сервера ESXi или сервера vCenter. После этого вам понадобятся имя пользователя и пароль для этого сервера. Сейчас вы вводите их напрямую, но в более продвинутом плейбуке это можно абстрагировать и хранить более безопасным способом [1][2]. Если ваш сервер vCenter или ESXi не настроен с правильными сертификатами CA, которые можно проверить с сервера Ansible, то необходимо отключить проверку этих сертификатов, используя параметр validate_certs. Для этого нужно установить validate_certs=False в вашем плейбуке.

Теперь необходимо указать информацию о виртуальной машине, которая будет создана. Присвойте вашей виртуальной машине имя, которое соответствует всем требованиям VMware к соглашениям об именовании. Затем выберите отображаемое имя шаблона, из которого нужно клонировать новую виртуальную машину. Это должно точно совпадать с тем, что отображается в веб-интерфейсе VMware. Затем вы можете указать папку, в которую следует поместить эту новую виртуальную машину. Этот путь может быть относительным или полным путем к папке, включая дата-центр. Возможно, вам нужно указать состояние виртуальной машины. Это просто указывает модулю, какое действие нужно выполнить, в данном случае вы будете гарантировать, что виртуальная машина существует и включена. Необязательный параметр — wait_for_ip_address, он укажет Ansible подождать, пока виртуальная машина полностью загрузится и VMware Tools будет запущен, прежде чем завершить задачу.

Что ожидать

  • После завершения этого плейбука вы увидите вывод в формате JSON. Этот вывод показывает различные параметры, возвращаемые модулем и сервером vCenter о только что созданной виртуальной машине.
{
    "changed": true,
    "instance": {
        "annotation": "",
        "current_snapshot": null,
        "customvalues": {},
        "guest_consolidation_needed": false,
        "guest_question": null,
        "guest_tools_status": "guestToolsNotRunning",
        "guest_tools_version": "0",
        "hw_cores_per_socket": 1,
        "hw_datastores": [
            "ds_215"
        ],
        "hw_esxi_host": "192.0.2.44",
        "hw_eth0": {
            "addresstype": "assigned",
            "ipaddresses": null,
            "label": "Network adapter 1",
            "macaddress": "00:50:56:8c:19:f4",
            "macaddress_dash": "00-50-56-8c-19-f4",
            "portgroup_key": "dvportgroup-17",
            "portgroup_portkey": "0",
            "summary": "DVSwitch: 50 0c 5b 22 b6 68 ab 89-fc 0b 59 a4 08 6e 80 fa"
        },
        "hw_files": [
            "[ds_215] testvm_2/testvm_2.vmx",
            "[ds_215] testvm_2/testvm_2.vmsd",
            "[ds_215] testvm_2/testvm_2.vmdk"
        ],
        "hw_folder": "/DC1/vm",
        "hw_guest_full_name": null,
        "hw_guest_ha_state": null,
        "hw_guest_id": null,
        "hw_interfaces": [
            "eth0"
        ],
        "hw_is_template": false,
        "hw_memtotal_mb": 512,
        "hw_name": "testvm_2",
        "hw_power_status": "poweredOff",
        "hw_processor_count": 2,
        "hw_product_uuid": "420cb25b-81e8-8d3b-dd2d-a439ee54fcc5",
        "hw_version": "vmx-13",
        "instance_uuid": "500cd53b-ed57-d74e-2da8-0dc0eddf54d5",
        "ipv4": null,
        "ipv6": null,
        "module_hw": true,
        "snapshots": []
    },
    "invocation": {
        "module_args": {
            "annotation": null,
            "cdrom": {},
            "cluster": "DC1_C1",
            "customization": {},
            "customization_spec": null,
            "customvalues": [],
            "datacenter": "DC1",
            "disk": [],
            "esxi_hostname": null,
            "folder": "/DC1/vm",
            "force": false,
            "guest_id": null,
            "hardware": {},
            "hostname": "192.0.2.44",
            "is_template": false,
            "linked_clone": false,
            "name": "testvm_2",
            "name_match": "first",
            "networks": [],
            "password": "VALUE_SPECIFIED_IN_NO_LOG_PARAMETER",
            "port": 443,
            "resource_pool": null,
            "snapshot_src": null,
            "state": "present",
            "state_change_timeout": 0,
            "template": "template_el7",
            "username": "administrator@vsphere.local",
            "uuid": null,
            "validate_certs": false,
            "vapp_properties": [],
            "wait_for_ip_address": true
        }
    }
}
  • Состояние изменится на True, что свидетельствует о том, что виртуальная машина построена на основе заданного шаблона. Модуль не завершится, пока задача клонирования в VMware не будет завершена. Это может занять некоторое время в зависимости от вашей среды.
  • Если вы используете параметр wait_for_ip_address, то это также увеличит время клонирования, так как оно будет ждать, пока виртуальная машина загрузится в ОС и сетевой интерфейс получит IP-адрес.

Поиск и устранение неполадок

Что следует проверить

  • Проверьте, правильные ли значения указаны для имени пользователя и пароля
  • Проверьте, доступен ли указанный дата-центр
  • Проверьте, существует ли указанный шаблон и у вас есть права доступа к хранилищу данных
  • Убедитесь, что указанный полный путь к папке уже существует. Он не будет создавать папки автоматически.

Приложение

  • [1] - https://docs.ansible.com/ansible/latest/vault.html
  • [2] - https://docs.ansible.com/ansible-tower/latest/html/userguide/credentials.html

© 2012–2018 Michael DeHaan
© 2018–2019 Red Hat, Inc.
Licensed under the GNU General Public License version 3.
https://docs.ansible.com/ansible/2.6/vmware/scenario_clone_template.html

Spec-Zone.ru

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