|
@@ -16,6 +16,7 @@
|
|
# along with this program. If not, see <http://www.gnu.org/licenses/>.
|
|
# along with this program. If not, see <http://www.gnu.org/licenses/>.
|
|
#
|
|
#
|
|
|
|
|
|
|
|
+import argparse
|
|
import atexit
|
|
import atexit
|
|
import bz2
|
|
import bz2
|
|
from collections import OrderedDict
|
|
from collections import OrderedDict
|
|
@@ -161,11 +162,35 @@ def qemu_tool_pipe_and_status(tool: str, args: Sequence[str],
|
|
{-subp.returncode}: {cmd}\n')
|
|
{-subp.returncode}: {cmd}\n')
|
|
return (output, subp.returncode)
|
|
return (output, subp.returncode)
|
|
|
|
|
|
|
|
+def qemu_img_create_prepare_args(args: List[str]) -> List[str]:
|
|
|
|
+ if not args or args[0] != 'create':
|
|
|
|
+ return list(args)
|
|
|
|
+ args = args[1:]
|
|
|
|
+
|
|
|
|
+ p = argparse.ArgumentParser(allow_abbrev=False)
|
|
|
|
+ p.add_argument('-f')
|
|
|
|
+ parsed, remaining = p.parse_known_args(args)
|
|
|
|
+
|
|
|
|
+ result = ['create']
|
|
|
|
+ if parsed.f is not None:
|
|
|
|
+ result += ['-f', parsed.f]
|
|
|
|
+
|
|
|
|
+ # IMGOPTS most probably contain options specific for the selected format,
|
|
|
|
+ # like extended_l2 or compression_type for qcow2. Test may want to create
|
|
|
|
+ # additional images in other formats that doesn't support these options.
|
|
|
|
+ # So, use IMGOPTS only for images created in imgfmt format.
|
|
|
|
+ if parsed.f == imgfmt and 'IMGOPTS' in os.environ:
|
|
|
|
+ result += ['-o', os.environ['IMGOPTS']]
|
|
|
|
+
|
|
|
|
+ result += remaining
|
|
|
|
+
|
|
|
|
+ return result
|
|
|
|
+
|
|
def qemu_img_pipe_and_status(*args: str) -> Tuple[str, int]:
|
|
def qemu_img_pipe_and_status(*args: str) -> Tuple[str, int]:
|
|
"""
|
|
"""
|
|
Run qemu-img and return both its output and its exit code
|
|
Run qemu-img and return both its output and its exit code
|
|
"""
|
|
"""
|
|
- full_args = qemu_img_args + list(args)
|
|
|
|
|
|
+ full_args = qemu_img_args + qemu_img_create_prepare_args(list(args))
|
|
return qemu_tool_pipe_and_status('qemu-img', full_args)
|
|
return qemu_tool_pipe_and_status('qemu-img', full_args)
|
|
|
|
|
|
def qemu_img(*args: str) -> int:
|
|
def qemu_img(*args: str) -> int:
|