Развертывание виртуальной машины из шаблона
Введение
Это руководство покажет, как использовать 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