Развертывание виртуальной машины из шаблона
Введение
Это руководство покажет вам, как использовать Ansible для клонирования виртуальной машины из уже существующего шаблона VMware или существующей виртуальной машины VMware.
Требования к сценарию
-
Программное обеспечение
- Необходимо установить Ansible 2.5 или более поздней версии
- Модуль Python
Pyvmomiдолжен быть установлен на сервере Ansible (или целевом хосте, если выполняется не на локальном хосте) - Рекомендуется установить последнюю версию
Pyvmomiс помощьюpip[поскольку пакеты ОС, как правило, устарели и несовместимы]
-
Аппаратное обеспечение
- Сервер 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 playbook демонстрирует основные параметры, необходимые для этого.
---
- name: Create a VM from a template
hosts: localhost
gather_facts: no
tasks:
- name: Clone the template
vmware_guest:
hostname: "{{ vcenter_ip }}"
username: "{{ vcenter_username }}"
password: "{{ vcenter_password }}"
validate_certs: False
name: testvm_2
template: template_el7
datacenter: "{{ datacenter_name }}"
folder: /DC1/vm
state: poweredon
cluster: "{{ cluster_name }}"
wait_for_ip_address: yes
Поскольку Ansible использует API VMware для выполнения действий, в этом случае мы будем подключаться напрямую к API с нашего локального хоста. Это означает, что наши playbook не будут запускаться с сервера vCenter или ESXi. Нам не обязательно собирать факты о нашем локальном хосте, поэтому параметр gather_facts будет отключён. Вы можете запустить эти модули на другом сервере, который затем подключится к API, если ваш локальный хост не имеет доступа к vCenter. В этом случае необходимые модули Python нужно установить на этот целевой сервер.
Для начала нам потребуется несколько данных. Прежде всего, имя хоста сервера ESXi или vCenter. После этого вам потребуются имя пользователя и пароль для этого сервера. Сейчас вы введёте их непосредственно, но в более продвинутом playbook это можно абстрагировать и хранить более безопасно с помощью ansible-vault или с помощью учетных данных Ansible Tower. Если ваш сервер vCenter или ESXi не настроен с надлежащими сертификатами CA, которые могут быть проверены с сервера Ansible, то необходимо отключить проверку этих сертификатов, используя параметр validate_certs. Для этого нужно установить validate_certs=False в вашем playbook.
Теперь вам нужно предоставить информацию о виртуальной машине, которая будет создана. Присвойте виртуальной машине имя, соответствующее всем требованиям VMware для соглашений об именовании. Далее, выберите отображаемое имя шаблона, из которого нужно клонировать новую виртуальную машину. Оно должно точно совпадать с отображаемым в VMware Web UI. Затем вы можете указать папку, в которой будет размещена эта новая виртуальная машина. Этот путь может быть относительным или полным путём к папке, включая дата-центр. Возможно, вам нужно указать состояние виртуальной машины. Это просто сообщает модулю, какое действие вы хотите выполнить, в данном случае вы будете гарантировать, что виртуальная машина существует и включена. Дополнительный параметр - wait_for_ip_address, он сообщит Ansible ожидать полного запуска виртуальной машины и работы VMware Tools перед завершением задачи.
Что ожидать
- После выполнения этого playbook вы увидите немного 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-адрес.
Отладка
Что следует проверить
- Проверьте, правильные ли значения указаны для имени пользователя и пароля
- Проверьте, доступен ли указанный дата-центр
- Проверьте, существует ли указанный шаблон, и у вас есть разрешения на доступ к хранилищу данных
- Убедитесь, что указанный вами полный путь к папке уже существует. Она не будет создаваться автоматически
© 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_clone_template.html