From 2ccf7727a6c06214956b7067e7932015bcdfb5a5 Mon Sep 17 00:00:00 2001
From: Stephen Finucane <sfinucan@redhat.com>
Date: Thu, 11 Mar 2021 15:53:39 +0000
Subject: [PATCH] compute: Remove 'file://' prefix from '--block-device'

There are a couple of other (networking-related) options which accept
paths, none of which insist on a URI-style path. Let's just drop this
bit of complexity before we release the feature.

Change-Id: Ia7f781d82f3f4695b49b55a39abbb6e582cd879c
Signed-off-by: Stephen Finucane <sfinucan@redhat.com>
---
 openstackclient/compute/v2/server.py                | 13 +++++--------
 .../tests/unit/compute/v2/test_server.py            |  2 +-
 2 files changed, 6 insertions(+), 9 deletions(-)

diff --git a/openstackclient/compute/v2/server.py b/openstackclient/compute/v2/server.py
index cd6e2c9165..b81d2a181c 100644
--- a/openstackclient/compute/v2/server.py
+++ b/openstackclient/compute/v2/server.py
@@ -21,7 +21,6 @@ import io
 import json
 import logging
 import os
-import urllib.parse
 
 from cliff import columns as cliff_columns
 import iso8601
@@ -774,9 +773,8 @@ class BDMAction(parseractions.MultiKeyValueAction):
         if getattr(namespace, self.dest, None) is None:
             setattr(namespace, self.dest, [])
 
-        if values.startswith('file://'):
-            path = urllib.parse.urlparse(values).path
-            with open(path) as fh:
+        if os.path.exists(values):
+            with open(values) as fh:
                 data = json.load(fh)
 
             # Validate the keys - other validation is left to later
@@ -898,10 +896,9 @@ class CreateServer(command.ShowOne):
             default=[],
             help=_(
                 'Create a block device on the server.\n'
-                'Either a URI-style path (\'file:\\\\{path}\') to a JSON file '
-                'or a CSV-serialized string describing the block device '
-                'mapping.\n'
-                'The following keys are accepted:\n'
+                'Either a path to a JSON file or a CSV-serialized string '
+                'describing the block device mapping.\n'
+                'The following keys are accepted for both:\n'
                 'uuid=<uuid>: UUID of the volume, snapshot or ID '
                 '(required if using source image, snapshot or volume),\n'
                 'source_type=<source_type>: source type '
diff --git a/openstackclient/tests/unit/compute/v2/test_server.py b/openstackclient/tests/unit/compute/v2/test_server.py
index 775ad0d911..c6dff5a8a2 100644
--- a/openstackclient/tests/unit/compute/v2/test_server.py
+++ b/openstackclient/tests/unit/compute/v2/test_server.py
@@ -2197,7 +2197,7 @@ class TestServerCreate(TestServer):
             arglist = [
                 '--image', 'image1',
                 '--flavor', self.flavor.id,
-                '--block-device', f'file://{fp.name}',
+                '--block-device', fp.name,
                 self.new_server.name,
             ]
             verifylist = [