3.1.5 Миграция ВМ между VDI проектами

В процессе эксплуатации ОП может возникнуть потребность переноса ВМ из одного VDI проекта в другой VDI проект с разными типами терминальных протоколов (RDP, SPICE и т.п.).

3.1.5.1 Перенос ВМ из проекта с типом протокола RDP в проект с типом протокола SPICE

Отобразите список ВМ исходного VDI проекта (Рис. 3.40). В списке ВМ определите ID нужной виртуальной машины (по имени).

Значение ID_project можно посмотреть в Dashboard, в свойствах проекта. Также можно выполнить команду:

openstack project list

Пример правильного вывода:

| d325cc61fe3245019eab3d88924f3629 | win8.1-sn-rdp |
| dbaef6ae32394ac1a9823dcb087109bb | rdp2-win7     |
| f0028cb56f9e4cef96eb55f813ce192f | win8.1-sn     |
+----------------------------------+---------------+
openstack project show project_name

openstack server list --project ID_project

+------------------------------------+--------+--------------------------+------------+------------+
|ID                                  | Status | Networks                 | Image      |  Flavor    |
+------------------------------------+--------+--------------------------+------------+------------+
|4f2debaa-a847-443b-83c7-2629ac3e2ffa| ACTIVE | 10.19.10.0/24=10.19.10.47|  win8.1-SN |  win8.1-sn |                                                                             |
+------------------------------------+--------+--------------------------+------------+------------+
|06314f6b-bed9-4a55-a09d-dc974837d0eb| ACTIVE | 10.19.10.0/24=10.19.10.21|  win8.1-SN |  win8.1-sn |                                                                                |
+------------------------------------+--------+-----------+---------------------------+------------+

Подключитесь к базе данных для внесения изменений. Выполните запросы по изменению ID проекта у ВМ:

mysql -p

Переключитесь на базу данных сервиса nova и выполните команды:

use nova

show tables;
show columns from instances

Для переноса ВМ с uuid 4f2debaa-a847-443b-83c7-2629ac3e2ffa из проекта win8.1-sn-rdp в проект win8.1-sn

Выполните запрос на отображение project id у ВМ:

MariaDB [nova]> select project_id, uuid from instances
where uuid='4f2debaa-a847-443b-83c7-2629ac3e2ffa'

Пример правильного вывода:

+----------------------------------+--------------------------------------+
| project_id                       |                 uuid                 |
+----------------------------------+--------------------------------------+
| d325cc61fe3245019eab3d88924f3629 | 4f2debaa-a847-443b-83c7-2629ac3e2ffa |
+----------------------------------+--------------------------------------+
|1 row in set (0,00 sec)           |                                      |
+----------------------------------+--------------------------------------+

Замените project_id на новый win8.1-sn:

update instances set project_id='f0028cb56f9e4cef96eb55f813ce192f'
where uuid='4f2debaa-a847-443b-83c7-2629ac3e2ffa'

MariaDB [nova]> select project_id, uuid from instances where
uuid='4f2debaa-a847-443b-83c7-2629ac3e2ffa'

Пример правильного вывода:

+----------------------------------+--------------------------------------+
| project_id                       |               uuid                   |
+----------------------------------+--------------------------------------+
| f0028cb56f9e4cef96eb55f813ce192f | 4f2debaa-a847-443b-83c7-2629ac3e2ffa |
+----------------------------------+--------------------------------------+

Переключитесь к базе данных tionix_vdi_server и замените значение ID проекта:

use tionix_vdi_client

Выполните операции с вводом и выполнением SQL:

.. code-block:: sql
MariaDB [tionix_vdi_server]> use tionix_vdi_server Database changed
MariaDB [tionix_vdi_server]> show tables
+-----------------------------+
| Tables_in_tionix_vdi_server |
+-----------------------------+
| celery_taskmeta             |
| celery_tasksetmeta          |
| migrate_version             |
| projects                    |
| requests                    |
| servers                     |
| sessions                    |
| shadow_projects             |
| shadow_requests             |
| shadow_servers              |
| shadow_sessions             |
| shadow_user_floating_ip     |
| shadow_user_groups          |
| shadow_users                |
| user_floating_ip            |
| user_groups                 |
| users                       |
+-----------------------------+
17 rows in set (0,00 sec)
MariaDB [tionix_vdi_server]> show columns from servers
+------------------------------+-------------+------+-----+---------+----------------+
| Field                        | Type        | Null | Key | Default | Extra          |
+------------------------------+-------------+------+-----+---------+----------------+
| created_at                   | datetime    | YES  |     | NULL    |                |
| updated_at                   | datetime    | YES  |     | NULL    |                |
| deleted_at                   | datetime    | YES  |     | NULL    |                |
| deleted                      | int(11)     | YES  |     | NULL    |                |
| id                           | int(11)     | NO   | PRI | NULL    | auto_increment |
| instance_id                  | varchar(36) | NO   | MUL | NULL    |                |
| project_id                   | varchar(64) | NO   | MUL | NULL    |                |
| last_session_id              | varchar(64) | YES  |     | NULL    |                |
| associated_security_group_id | varchar(36) | YES  |     | NULL    |                |
+------------------------------+-------------+------+-----+---------+----------------+
9 rows in set (0,00 sec)
MariaDB [tionix_vdi_server]> select instance_id,
project_id from servers where instance_id='4f2debaa-a847-443b-83c7-2629ac3e2ffa'
+--------------------------------------+----------------------------------+
| instance_id                          | project_id                       |
+--------------------------------------+----------------------------------+
| 4f2debaa-a847-443b-83c7-2629ac3e2ffa | d325cc61fe3245019eab3d88924f3629 |
+--------------------------------------+----------------------------------+
1 row in set (0,00 sec)
MariaDB [tionix_vdi_server]> select instance_id,
project_id from servers where instance_id='4f2debaa-a847-443b-83c7-2629ac3e2ffa'
+--------------------------------------+----------------------------------+
| instance_id                          | project_id                       |
+--------------------------------------+----------------------------------+
| 4f2debaa-a847-443b-83c7-2629ac3e2ffa | d325cc61fe3245019eab3d88924f3629 |
+--------------------------------------+----------------------------------+
1 row in set (0,00 sec)
MariaDB [tionix_vdi_server]> update instances set project_id='f0028cb56f9e4cef96eb55f813ce192f'
where instance_id='4f2debaa-a847-443b-83c7-2629ac3e2ffa'

ERROR 1146 (42S02): Table 'tionix_vdi_server.instances' doesn't exist
MariaDB [tionix_vdi_server]> update servers set project_id='f0028cb56f9e4cef96eb55f813ce192f'
where instance_id='4f2debaa-a847-443b-83c7-2629ac3e2ffa'

Query OK, 1 row affected (0,01 sec)

Rows matched: 1 Changed: 1 Warnings: 0
MariaDB [tionix_vdi_server]> select instance_id,
project_id from servers where instance_id='4f2debaa-a847-443b-83c7-2629ac3e2ffa'
+--------------------------------------+----------------------------------+
| instance_id                          | project_id                       |
+--------------------------------------+----------------------------------+
| 4f2debaa-a847-443b-83c7-2629ac3e2ffa | f0028cb56f9e4cef96eb55f813ce192f |
+--------------------------------------+----------------------------------+
1 row in set (0,00 sec)

ВАЖНО.

Перенос ВМ должен осуществляться из VDI проекта идентичного целевому проекту (это касается сетей), то есть сеть должна быть общего пользования «shared», либо доступ к ней должен быть из обоих проектов.

Если сети разные, то в сети проекта, куда переносится машина, необходимо создать порт. Затем – отсоединить интерфейс у переносимой машины, выполнить перенос и подключить созданный порт в новой сети.

3.1.5.2 Скрипт миграции

Подготовьте и используйте скрипт миграции в следующем формате вызова:

migration-project.sh ИМЯ_МАШИНЫ СТАРЫЙ_ПРОЕКТ НОВЫЙ_ПРОЕКТ

Использование:

./migrate-project.sh \\\
"путь к файлу с именами/ID ВМ" \\\
"Имя/ID старого проекта" \\\
"Имя/ID нового проекта"

Пример скрипта migrate-project.sh:

#!/bin/bash 

# имена ВМ, находящиеся в файлы должны быть записаны построчно 

BLUE='\033[1;36m'
NC='\033[0m'

instance=  
instances=$1
project=$2
new_project=$3

# начало цикла с импортом имён ВМ из файла instances
 
for instance in $(cat $instances)
do

#перевод имени ВМ/проекта в ID

old_project_id=$(openstack project list |  awk -v p=$project '{ if ($4 == p) print $2; else if ($2 == p) print $2 }')
new_project_id=$(openstack project list |  awk -v p=$new_project '{ if ($4 == p) print $2; else if ($2 == p) print $2 }')
instance_id=$(openstack server list --project $project | awk -v i=$instance '{if ($4 == i) print $2; else if ($2 == i) print $2 }')

#вывод новых переменных на экран
echo " "
echo -e "ID виртуальной машины ${BLUE}$instance${NC} : $instance_id"
echo -e "ID старого проекта ${BLUE}$project${NC} : $old_project_id"
echo -e "ID нового проекта ${BLUE}$new_project${NC} : $new_project_id"

#изменение проекта в базе данных nova и вывод результатов
echo " "
echo -e "Внесение изменений в БД ${BLUE}nova${NC}"

mysql -u root -p -e "use nova; select project_id, uuid from instances where uuid='$instance_id'; update instances set project_id='$new_project_id' where uuid='$instance_id'; select project_id, uuid from instances where uuid='$instance_id';"

#изменение проекта в базе данных tionix_vdi_server и вывод результатов

echo " "
echo -e "Внесение изменений в БД ${BLUE}tionix_vdi_server${NC}"

mysql -u root -p -e "use tionix_vdi_server; select instance_id, project_id from servers where instance_id='$instance_id'; update servers set project_id='$new_project_id' where instance_id='$instance_id'; select instance_id, project_id from servers where instance_id='$instance_id';"

echo " "

done

Пример запуска:

./migrate-project.sh instances.txt win8.1-sn-rdp win8.1-sn

Файл instances.txt должен содержать построчный список ВМ, которые будут циклично обработаны при выполнении скрипта:

vdi_mach1_rdp

vdi_mach2_rdp

vdi_mach3_rdp

Внимание.

В скрипте вызовы mysql используют ключ -p. Это означает, что выполнение скрипта будет приостанавливаться и ожидать ввода пароля.

Для того, чтобы не приходилось вводить пароль, используйте установленный облачным администратором при разворачивании ОП пароль, указываемый с помощью ключа:

-p<пароль>