Переименование существующей виртуальной машины
Введение
Это руководство покажет, как использовать Ansible для переименования существующей виртуальной машины.
Требования к сценарию
-
Программное обеспечение
- Должен быть установлен Ansible версии 2.5 или выше.
- Модуль Python
Pyvmomiдолжен быть установлен на контрольном узле Ansible (или целевом узле, если выполняется не на localhost). - Рекомендуется установить последнюю версию с помощью pip:
pip install Pyvmomi(так как пакеты ОС обычно устаревают и несовместимы).
-
Аппаратное обеспечение
- По крайней мере, один автономный сервер ESXi или
- сервер vCenter с по крайней мере одним сервером ESXi
-
Доступ / Учетные данные
- Ansible (или целевой сервер) должен иметь сетевой доступ к серверу vCenter или серверу ESXi
- Имя пользователя и пароль для сервера vCenter или ESXi
- Узлы в кластере ESXi должны иметь доступ к хранилищу данных, на котором находится шаблон.
Ограничения
- Все имена переменных и имена объектов VMware чувствительны к регистру.
- Для использования опции
validate_certsнеобходимо использовать Python версии 2.7.9, так как эта версия способна изменять поведение проверки SSL.
Описание примера
С помощью следующего Ansible-плейбука вы можете переименовать существующую виртуальную машину, изменив UUID.
---
- name: Rename virtual machine from old name to new name using UUID
gather_facts: no
vars_files:
- vcenter_vars.yml
vars:
ansible_python_interpreter: "/usr/bin/env python3"
hosts: localhost
tasks:
- set_fact:
vm_name: "old_vm_name"
new_vm_name: "new_vm_name"
datacenter: "DC1"
cluster_name: "DC1_C1"
- name: Get VM "{{ vm_name }}" uuid
vmware_guest_facts:
hostname: "{{ vcenter_server }}"
username: "{{ vcenter_user }}"
password: "{{ vcenter_pass }}"
validate_certs: False
datacenter: "{{ datacenter }}"
folder: "/{{datacenter}}/vm"
name: "{{ vm_name }}"
register: vm_facts
- name: Rename "{{ vm_name }}" to "{{ new_vm_name }}"
vmware_guest:
hostname: "{{ vcenter_server }}"
username: "{{ vcenter_user }}"
password: "{{ vcenter_pass }}"
validate_certs: False
cluster: "{{ cluster_name }}"
uuid: "{{ vm_facts.instance.hw_product_uuid }}"
name: "{{ new_vm_name }}"
Поскольку Ansible использует API VMware для выполнения действий, в этом случае он будет подключаться напрямую к API с localhost.
Это означает, что плейбуки не будут выполняться с сервера vCenter или ESXi.
Обратите внимание, что этот плейбук отключает параметр gather_facts, так как вам не нужно собирать факты о localhost.
Вы можете запустить эти модули на другом сервере, который затем подключится к API, если у localhost нет доступа к vCenter. В этом случае необходимые модули Python необходимо установить на этот целевой сервер. Рекомендуется установить последнюю версию с помощью pip: pip install Pyvmomi (так как пакеты ОС обычно устаревают и несовместимы).
Прежде чем начать, убедитесь, что у вас есть:
- Имя хоста сервера ESXi или сервера vCenter
- Имя пользователя и пароль для сервера ESXi или vCenter
- UUID существующей виртуальной машины, которую вы хотите переименовать
На данный момент вы будете вводить эти данные напрямую, но в более продвинутом плейбуке это можно абстрагировать и хранить более безопасным способом, используя ansible-vault или учетные данные Ansible Tower.
Если ваш сервер vCenter или ESXi не настроен с надлежащими сертификатами CA, которые могут быть проверены с сервера Ansible, необходимо отключить проверку этих сертификатов, используя параметр validate_certs. Для этого необходимо установить validate_certs=False в вашем плейбуке.
Теперь вам нужно предоставить информацию о существующей виртуальной машине, которая будет переименована. Для переименования виртуальной машины модуль vmware_guest использует VMware UUID, который уникален в среде vCenter. Это значение генерируется автоматически и не может быть изменено. Вы будете использовать модуль vmware_guest_facts для поиска виртуальной машины и получения информации о VMware UUID виртуальной машины.
Это значение будет использоваться в качестве входных данных для модуля vmware_guest. Укажите новое имя виртуальной машины, соответствующее всем требованиям VMware к соглашениям об именовании, как параметр name. Также предоставьте uuid в качестве значения VMware UUID.
Что ожидать
Выполнение этого плейбука может занять некоторое время, в зависимости от вашей среды и сетевого подключения. По завершении выполнения вы увидите
{
"changed": true,
"instance": {
"annotation": "",
"current_snapshot": null,
"customvalues": {},
"guest_consolidation_needed": false,
"guest_question": null,
"guest_tools_status": "guestToolsNotRunning",
"guest_tools_version": "10247",
"hw_cores_per_socket": 1,
"hw_datastores": ["ds_204_2"],
"hw_esxi_host": "10.x.x.x",
"hw_eth0": {
"addresstype": "assigned",
"ipaddresses": [],
"label": "Network adapter 1",
"macaddress": "00:50:56:8c:b8:42",
"macaddress_dash": "00-50-56-8c-b8-42",
"portgroup_key": "dvportgroup-31",
"portgroup_portkey": "15",
"summary": "DVSwitch: 50 0c 3a 69 df 78 2c 7b-6e 08 0a 89 e3 a6 31 17"
},
"hw_files": ["[ds_204_2] old_vm_name/old_vm_name.vmx", "[ds_204_2] old_vm_name/old_vm_name.nvram", "[ds_204_2] old_vm_name/old_vm_name.vmsd", "[ds_204_2] old_vm_name/vmware.log", "[ds_204_2] old_vm_name/old_vm_name.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": 1024,
"hw_name": "new_vm_name",
"hw_power_status": "poweredOff",
"hw_processor_count": 1,
"hw_product_uuid": "420cbebb-835b-980b-7050-8aea9b7b0a6d",
"hw_version": "vmx-13",
"instance_uuid": "500c60a6-b7b4-8ae5-970f-054905246a6f",
"ipv4": null,
"ipv6": null,
"module_hw": true,
"snapshots": []
}
}
подтверждающее, что вы переименовали виртуальную машину.
Отладка
Если ваш плейбук завершится неудачно:
- Проверьте, правильные ли значения, предоставленные для имени пользователя и пароля.
- Проверьте, доступен ли предоставленный вами центр обработки данных.
- Убедитесь, что указанная виртуальная машина существует, и у вас есть разрешения на доступ к хранилищу данных.
- Убедитесь, что указанный вами полный путь к папке уже существует.
© 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_rename_vm.html