3.1.6. Миграция ВМ между VDI проектами¶
В процессе эксплуатации ОП может возникнуть потребность переноса ВМ из одного VDI проекта в другой VDI проект с разными типами терминальных протоколов (RDP, SPICE и т.п.).
3.1.6.1. Перенос ВМ из проекта с типом протокола RDP в проект с типом протокола SPICE¶
Отобразите список ВМ исходного VDI проекта. В списке ВМ определите 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.6.2. Скрипт миграции¶
Подготовьте и используйте скрипт миграции в следующем формате вызова:
migration-project.sh ИМЯ_МАШИНЫ СТАРЫЙ_ПРОЕКТ НОВЫЙ_ПРОЕКТ
Пример скрипта 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 "путь к файлу с именами/ID ВМ» "Имя/ID старого проекта» "Имя/ID нового проекта»
Пример запуска:
./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<пароль>