Use mkdtemp for mounting virtual media device
When using virtual media, restarting ironic-python-agent leads to errors like 'File exists'. This is because we use static directory (/vmedia_mnt) as mount path and we don't remove it. It's better to use mkdtemp to create a temporary directory for mounting virtual media device. Change-Id: Ibb4c3d3a2024cf51ef198bd396fb9e86ad72a320
This commit is contained in:
@ -16,6 +16,8 @@ import collections
|
||||
import copy
|
||||
import glob
|
||||
import os
|
||||
import shutil
|
||||
import tempfile
|
||||
|
||||
from oslo_concurrency import processutils
|
||||
from oslo_log import log as logging
|
||||
@ -109,7 +111,6 @@ def _get_vmedia_params():
|
||||
:returns: a partial dict of potential agent configuration parameters
|
||||
:raises: VirtualMediaBootError when it cannot find the virtual media device
|
||||
"""
|
||||
vmedia_mount_point = "/vmedia_mnt"
|
||||
parameters_file = "parameters.txt"
|
||||
|
||||
vmedia_device_file = "/dev/disk/by-label/ir-vfd-dev"
|
||||
@ -125,23 +126,29 @@ def _get_vmedia_params():
|
||||
|
||||
vmedia_device_file = os.path.join("/dev", vmedia_device)
|
||||
|
||||
os.mkdir(vmedia_mount_point)
|
||||
|
||||
vmedia_mount_point = tempfile.mkdtemp()
|
||||
try:
|
||||
stdout, stderr = execute("mount", vmedia_device_file,
|
||||
vmedia_mount_point)
|
||||
except processutils.ProcessExecutionError as e:
|
||||
msg = ("Unable to mount virtual media device %(device)s: %(error)s" %
|
||||
{'device': vmedia_device_file, 'error': e})
|
||||
raise errors.VirtualMediaBootError(msg)
|
||||
try:
|
||||
stdout, stderr = execute("mount", vmedia_device_file,
|
||||
vmedia_mount_point)
|
||||
except processutils.ProcessExecutionError as e:
|
||||
msg = ("Unable to mount virtual media device %(device)s: "
|
||||
"%(error)s" % {'device': vmedia_device_file, 'error': e})
|
||||
raise errors.VirtualMediaBootError(msg)
|
||||
|
||||
parameters_file_path = os.path.join(vmedia_mount_point, parameters_file)
|
||||
params = _read_params_from_file(parameters_file_path)
|
||||
parameters_file_path = os.path.join(vmedia_mount_point,
|
||||
parameters_file)
|
||||
params = _read_params_from_file(parameters_file_path)
|
||||
|
||||
try:
|
||||
stdout, stderr = execute("umount", vmedia_mount_point)
|
||||
except processutils.ProcessExecutionError as e:
|
||||
pass
|
||||
try:
|
||||
stdout, stderr = execute("umount", vmedia_mount_point)
|
||||
except processutils.ProcessExecutionError as e:
|
||||
pass
|
||||
finally:
|
||||
try:
|
||||
shutil.rmtree(vmedia_mount_point)
|
||||
except Exception as e:
|
||||
pass
|
||||
|
||||
return params
|
||||
|
||||
|
Reference in New Issue
Block a user