Перейти к содержанию

Настройка услуги «Виртуальная машина» для гипервизоров

Общая информация

Услуга «Виртуальная машина» включает:

  • механизм размещения виртуальных машин на платформах виртуализации без необходимости программирования;
  • интеграцию с IPAM Netbox для автоматического резервирования и освобождения IP-адресов;
  • диалоговое окно заказа виртуальной машины.

После установки Нимбиус услуга «Виртуальная машина» доступна к заказу в каталоге «Nimbius Services»:

Важно

Для успешного заказа Виртуальной машины с использованием услуги необходимо:

  1. Настройка диалогового окна;
  2. Настроить интеграцию Нимбиус с платформой виртуализации;
  3. Настроить конфигурацию размещения виртуальных машин;
  4. Настроить автоматическое именование виртуальных машин;
  5. Настроить интеграцию с IPAM Netbox для автоматической резервации и освобождения IP-адресов.

Настройка диалогового окна

Для настройки диалогового окна следует выбрать меню «Automation -> Automate -> Customization -> Service Dialogs». Стандартный диалог заказа виртуальной машины, поставляемый в составе Нимбиус, называется «nimbius_vm_provision».

Поля, доступные в диалоге, приведены в таблице ниже. Часть полей могут быть заполнены любыми значениями по выбору пользователя. Другая часть отображает допустимые значения. Перечень допустимых значений генерируется специализированными методами, указанными в таблице. Необязательные поля могут быть удалены из диалога при необходимости.

Описание полей и значений для диалога «nimbius_vm_provision»

Описание поля Имя поля Обязат. Динамич. Метод генерации
допустимых значений
Environment tag_0_environment Да Да list_environments
Location tag_0_location Да Да list_locations
VM name vm_name Нет Нет -
VM description vm_description Нет Нет -
Template template_name Да Да list_templates
CPU option_0_cpu_flavor Да Да list_cpu_flavors
Memory (GB) vm_memory Да Нет -
Network vlan Да Да list_networks
Owner ownership_user_id Нет Нет list_owner
Owner group ownership_group_id Нет Нет list_owner_group

Методы генерации допустимых значений размещены в домене, расположенный в Datastore: /NIMBIUS_VM/Service/DynamicDialogs.

Доступные конфигурации CPU размещены в домене, расположенный в Datastore: /NIMBIUS_VM/Common/FlavorConfig/flavorconfig.

Доступные окружения (environment) и площадки (location), а также шаблоны (templates) настраиваются как описано ниже.

Настройка размещения виртуальных машин

Конфигурация механизма размещения виртуальных машин находится в домене автоматизации Нимбиус «NIMBIUS_CONFIG»: «Automation -> Embedded Automate -> Explorer».

Рисунок 40

/NIMBIUS_CONFIG/StdLib/Settings/nimbius_placement_settings

Ниже приводится шаблон-пример конфигурации размещения и таблица с описанием параметров.

Важно

Конфигурация оформлена с использованием синтаксиса языка Ruby.

class PlacementSettings

    def locations
        locations = {
            "cloud_lab_dc01" => {
                "type" => "vmware",
                "endpoint" => "vc.cloud.lab",
                "description" => "Cloud Lab Location",
                "cust_spec_linux" => "CustSpecL",
                "cust_spec_windows" => "CustSpecW"
            }
        }
        return locations
    end


    def domains
        domains = {
            "cloud.lab" => {
                "domain_name" => "cloud.lab",
                "servers_ou" =>
                    "OU=Tenants,OU=Servers,OU=Cloud,DC=cloud,DC=local",
                "pshost" => "ps01.cloud.lab",
                "domain_controller" => "dc01",
                "dns_suffix" => "cloud.lab",
                "dns_servers" => ["cloud.lab"]
            }
        }                                                                     
        return domains
    end                                                                   


    def networks                                                          
        networks = {                                                          
            "VM Network 01" => {
                "addr_mode" => "dhcp"
            },

            "VM Network 02" => {
                "addr_mode" => "static",
                "ipam" => "netbox",
                "vlan_id" => 3236
            }
        }

        return networks
    end


    def environments
        environments = {
            "cloud_lab" => {
                "placement" => {
                    "cloud_lab_dc01" => {
                        "clusters" => [
                            "CLU01",
                            "CLU02"
                        ],

                        "networks" => [
                            "VM Network 01",
                            "VM Network 02"
                        ],

                        "datastores" => [
                            "DS01"
                        ]
                    }
                },

                "domain" => "cloud.lab",
                "tags" => [
                    "department/support"
                ],

                "description" => "Cloud Lab (VMware)"
            }
        }

        return environments
    end
end

Важно

Секция «def domains» имеет параметры для подключения домена AD, в который нужно включить создаваемую ВМ. Автоматического включения в домен не происходит. Код, реализующий данную функциональность, должен быть разработан администратором системы самостоятельно.

domains = {
    # имя домена, должно совпадать с параметром domain в секции environments
    "cloud.lab" => {
        # имя домена
        "domain_name" => "cloud.lab",

        # OU для размещения объекта «компьютер» в AD
        "servers_ou" => "OU=Tenants,OU=Servers,OU=Cloud,DC=cloud,DC=local",

        # Powershell Host
        "pshost" => "ps01.cloud.lab",

        # Имя Domain Controller
        "domain_controller" => "dc01",

        # DNS суффикс
        "dns_suffix" => "cloud.lab",

        # DNS суффикс
        "dns_servers" => ["cloud.lab"]
    }
}

Описание классов и значений nimbius_placement_settings

Класс Пример заполнения Описание
locations "cloud_lab_dc01" => {
 "type" => "vmware"",
 "endpoint" => "vc.cloud.lab",
 "description" => "VC01 Cloud Lab",
 "cust_spec_linux" => "centos",
 "cust_spec_windows" => "windows"
}
Площадки (расположения) – соответствует географическому расположению в секции «environments».
Каждый endpoint – это кластер виртуализации. Имя должно соответствовать имени логической сущности в подключенных провайдерах.
networks networks = {
 "206-VLAN" => {
  "addr_mode" => "dhcp"
 }
}
Конфигурация сетей (имена сетей должны совпадать с именами в секции networks в описании окружения, а так же с именами портгрупп в платформе виртуализации)
Networks (environments) "dvs" => "true" Указывается, если vcenter настроен с dvswitch
placement_rp_name (environments) "placement_rp_name" => ["ResPool01"] Указывается, если vcenter настроен с resource pool
placement_folder_name (environments) "placement_folder_name" => [
 "datacenter02/CLU01/ResPool01/cloudlab/vms"
]
Указывается полный путь до конечной папки размещения
domain "domain" => "cloud.lab", DNS-суффикс для имени ВМ
tags "tags" => [
 "department/development"
],
Тэги, которые должны быть проставлены на сервисе ВМ (нужно предварительно создать в платформе Нимбиус)
clusters "clusters" => [
 "HA-Cloudlab-CL1",
 "HA-Cloudlab-CL2"
]
Кластеры виртуализации на данной площадке

Пример-шаблон на несколько площадок и средств виртуализации:

class PlacementSettings

    def locations
        locations = {
            "datacenter01" => {
                "type" => "ovirt",
                "endpoint" => "zvirt01",
                "description" => "Pilot zVirt"
            },

            "datacenter02" => {
                "type" => "vmware",
                "endpoint" => "vc.cloud.lab",
                "description" => "VMware",
                "cust_spec_linux" => "linux",
                "cust_spec_windows" => "windows" 
            },

            "datacenter03" => {
                "type" => "ovirt", 
                "endpoint" => "zvirt02", 
                "description" => "Red Virt"
            },
        } 

        return locations
    end 

    def domains 
        domains = { 
            "cloud.lab" => { 
                "domain_name" => "cloud.lab",
                "servers_ou" =>
                    "OU=Tenants,OU=Servers,OU=Cloud,DC=cloud,DC=local", 
                "pshost" => "ps01.cloud.lab",
                "domain_controller" => "dc01", 
                "dns_suffix" => "cloud.lab", 
                "dns_servers" => ["cloud.lab"] 
            } 
        }

        return domains 
    end 

    def networks
        networks = {
            "206-VLAN" => {
                "addr_mode" => "dhcp"
            },

            "ovirtmgmt (ovirtmgmt)" => { 
                "addr_mode" => "dhcp", 
                # "ipam" => "netbox", 
                # "vlan_id" => 3236 
            },

            "VM Network 01" => { 
                "addr_mode" => "dhcp"
            },

            "VM Network 02" => { 
                "addr_mode" => "static", 
                "ipam" => "netbox",
                "vlan_id" => 3236, 
                "dvs" => "true"
            } 
        } 

        return networks 
    end 

    def environments
        environments = {
            "zvirt" => { 
                "placement" => { 
                    "datacenter01" => {
                        "clusters" => ["Default"], 
                        "networks" => ["ovirtmgmt (ovirtmgmt)"],
                        "datastores" => ["hosted_storage"]
                    }
                }, 
                # "domain" => "cloud.lab",
                "tags" => ["department/support"], 
                "description" => "Pilot zVirt" 
            }, 
            "redvirt" => {
                "placement" => {
                    "datacenter03" => {
                        "clusters" => ["Cluster01"],
                        "networks" => ["206-VLAN (206-VLAN)"],
                        "datastores" => ["Storage01"]
                    }
                },
                # "domain" => "cloud.lab",
                "tags" => ["department/support"],
                "description" => "Red Virt"
            },
            "vmware" => {
                "placement" => {
                    "datacenter02" => {
                        "clusters" => [
                            "CLU01",
                            "CLU02"
                        ],
                        "networks" => [
                            "VM Network 01",
                            "VM Network 02"
                        ],
                        "datastores" => ["DS01"],
                        "placement_folder_name" => [
                            "datacenter02/CLU01/ResPool01/cloudlab/vms"
                        ],
                        "placement_rp_name" => ["ResPool01"]
                    }
                },
                "domain" => "cloud.lab",
                "tags" => ["department/support"],
                "description" => "VMware"
            }
        }
        return environments
    end
end

Настройка автоматического именования виртуальных машин

Конфигурация автоматического именования виртуальных машин настраивается с помощью изменения словаря «NAMING_TEMPLATE» в «/NIMBIUS_CONFIG/StdLib/Settings/nimbius_vmname_settings». Пример конфигурации приведён ниже.

Важно

Конфигурация оформлена с использованием синтаксиса языка Ruby.

Конфигурация задана в виде объекта типа «словарь». Каждый элемент словаря - это часть имени ВМ. Ключом задается порядок компонента в имени, а значением - тип и конфигурация компонента.

Пример генерации имени ВМ

Постоянный текст Платформа
(w - windows,
l - linux)
Тег "location" Первая буква тега "environment" Постоянный текст Индекс
vm w d01 t s 0001

Результирующее имя: vmwd01ts0001

Соответствующая конфигурация:

**NAMING_TEMPLATE** = {
    1 => {
        "type" => "text",
        "value" => "vm"
    },

    2 => {
        "type" => "platform"
    },

    3 => {
        "type" => "tag_long",
        "category" => "location"
    },

    4 => {
        "type" => "tag_short",
        "category" => "environment"
    },

    5 => {
        "type" => "text",
        "value" => "s"
    },

    6 => {
        "type" => "index",
        "length" => 5
    }
}.freeze

Настройка доступных конфигураций виртуальных машин

Конфигурация доступных конфигураций CPU виртуальных машин настраивается с помощью изменения словаря CPU в «/NIMBIUS_CONFIG/Common/FlavorConfig/flavorconfig».

Важно

Конфигурация оформлена с использованием синтаксиса языка Ruby.

Каждый тип ВМ задаётся в виде элемента словаря:

{
    cpu_flavor: 'DESCRIPTION',
    number_of_sockets: SOCKETS_NUM,
    cores_per_socket: CORES_NUM
}

Выбор шаблонов для развертывания ВМ

Для того, чтобы выбрать доступные для развертывания шаблоны, необходимо протегировать их тегом «Available for provisioning» / «Available for provisioning».

Для этого необходимо выполнить:

  1. Выбрать перейти в раздел «Compute -> Infrastructure -> Virtual Machines»;
  2. Раскрыть слева список «Templates»;
  3. Найти нужный шаблон, выбрать его, выбрать «Policy -> Edit tags»:

    Рисунок 41

  4. Выбрать необходимый тег как показано ниже:

    Рисунок 42

Примечание

Описанное поведение может быть изменено. Для этого необходимо внести изменения в методу автоматизации:

  • /NIMBIUS_VM/Service/DynamicDialogs /list_templates - метод, генерирующий перечень доступных шаблонов для диалогового окна создания ВМ.