我们在openstack环境下创建虚机,可能会有异常情况导致虚机创建失败,这时我们除了要定位异常原因之外还要清理创建失败的error虚机,如果为该虚机外挂了磁盘,则有可能会清理失败,本文对此做详细介绍。
在nova端删除虚机时,会走_shutdown_instance的流程,将bdm参数传进去,在_shutdown_instance方法里检查如果bdm不为空则调用cinder来detach磁盘:
self.volume_api.detach(context, bdm.volume_id)
在cinder端会根据attachment_id在数据库中检查到该磁盘的attachment来做detach处理,如果attachment_id不存在则分三种情况:
len(attachments) > 1
表示该磁盘被多次挂载,在没有attachment_id情况下不能进行detach操作len(attachments) = 1
正常进行detach操作- len(attachments) <1
表示该磁盘没有被挂载过,不能进行detach卸载操作,此时代码中会返回异常:
raise exception.InvalidVolume(reason=msg)
nova中捕获到异常后停止删除虚机的流程,导