Openstack 특정VM 삭제 불가 방법

beomjin·2025년 5월 28일

간혹 그런경우가 있다.
openstack에서 지우고싶지않은 VM이있다.
문제는 openstack server delete 로 손쉽게 가능하다는 점이다.

cli 명령어로 vm을 삭제가 안되게 하고 싶은데, 방법이 없을까?

# openstack server list
+--------------------------------------+--------------+--------+----------------------+--------------------------+---------+
| ID                                   | Name         | Status | Networks             | Image                    | Flavor  |
+--------------------------------------+--------------+--------+----------------------+--------------------------+---------+
| 25480a74-ea88-4788-9aec-37467159aa9c | vdi-02 | ACTIVE | net=10.3.5.20 | N/A (booted from volume) | flavor |
| fc53944f-169a-4d66-8edb-8336025f6b11 | vdi-01 | ACTIVE | net=10.3.5.16 | N/A (booted from volume) | flavor |
+--------------------------------------+--------------+--------+----------------------+--------------------------+---------+

위와같이 2개의 VM이 있다고 가정해보면 사실 방법은 쉽다.

openstack mariadb의 nova database 에서 아래 쿼리문으로 disable_terminate값을 0에서 1로 조정해주면 된다.

MariaDB [(none)]> use nova;
MariaDB [nova]> select hostname, uuid, disable_terminate from instances where uuid in ('fc53944f-169a-4d66-8edb-8336025f6b11','25480a74-ea88-4788-9aec-37467159aa9c');
+--------------+--------------------------------------+-------------------+
| hostname     | uuid                                 | disable_terminate |
+--------------+--------------------------------------+-------------------+
| vdi-02 | 25480a74-ea88-4788-9aec-37467159aa9c |                 0 |
| vdi-01 | fc53944f-169a-4d66-8edb-8336025f6b11 |                 0 |
+--------------+--------------------------------------+-------------------+
2 rows in set (0.002 sec)
MariaDB [nova]> update instances set disable_terminate=1 where uuid in ('fc53944f-169a-4d66-8edb-8336025f6b11','25480a74-ea88-4788-9aec-37467159aa9c');
Query OK, 2 rows affected (0.005 sec)
Rows matched: 2  Changed: 2  Warnings: 0
 
MariaDB [nova]> select hostname, uuid, disable_terminate from instances where uuid in ('fc53944f-169a-4d66-8edb-8336025f6b11','25480a74-ea88-4788-9aec-37467159aa9c');
+--------------+--------------------------------------+-------------------+
| hostname     | uuid                                 | disable_terminate |
+--------------+--------------------------------------+-------------------+
| vdi-02 | 25480a74-ea88-4788-9aec-37467159aa9c |                 1 |
| vdi-01 | fc53944f-169a-4d66-8edb-8336025f6b11 |                 1 |
+--------------+--------------------------------------+-------------------+
2 rows in set (0.002 sec)

그럼 disable_terminate값이 뜻하는 것은 무엇일까?
Ref :: https://blueprints.launchpad.net/nova/+spec/ability-to-set-disable-terminate

disable_terminate 는 intance가 실수로 삭제되지 않도록 방지하는데 사용한다.
즉 disable_terminate가 1이면 nova api를 통해 삭제가 불가능하다는 소리이다.

# openstack server list
+--------------------------------------+--------------+--------+----------------------+--------------------------+---------+
| ID                                   | Name         | Status | Networks             | Image                    | Flavor  |
+--------------------------------------+--------------+--------+----------------------+--------------------------+---------+
| 25480a74-ea88-4788-9aec-37467159aa9c | vdi-02 | ACTIVE | net=10.3.5.20 | N/A (booted from volume) | flavor |
| fc53944f-169a-4d66-8edb-8336025f6b11 | vdi-01 | ACTIVE | net=10.3.5.16 | N/A (booted from volume) | flavor |
+--------------------------------------+--------------+--------+----------------------+--------------------------+---------+
# openstack server delete fc53944f-169a-4d66-8edb-8336025f6b11
# openstack server list
+--------------------------------------+--------------+--------+----------------------+--------------------------+---------+
| ID                                   | Name         | Status | Networks             | Image                    | Flavor  |
+--------------------------------------+--------------+--------+----------------------+--------------------------+---------+
| 25480a74-ea88-4788-9aec-37467159aa9c | vdi-02 | ACTIVE | net=10.3.5.20 | N/A (booted from volume) | flavor |
| fc53944f-169a-4d66-8edb-8336025f6b11 | vdi-01 | ACTIVE | net=10.3.5.16 | N/A (booted from volume) | flavor |
+--------------------------------------+--------------+--------+----------------------+--------------------------+---------+

실제로 disable_terminate값이 1인 vm을 삭제하면 삭제가 되지않으며, noav-osapi log에서는 아래와 같이 발생한다.


2025-02-20 16:10:18.595162 2025-02-16 17:39:18.594 22 INFO nova.compute.api [None req-072ae059-e385-4ded-a31b-8ab172aba124 e3ce495d6827411897f9c543a15d001f bea78898e5874c63a75e7ed23731cdfd - - default defau
lt] [instance: fc53944f-169a-4d66-8edb-8336025f6b11] instance termination disabled

이로써 손 쉽게 vm을 실수로 삭제하지않도록 보호조치가 가능하다.

0개의 댓글