Update subcloud add command arguments to accept a URL

This commit updates the argument --bootstrap-values and
--deploy-playbooks for the command subcloud add to accept
a URL in addition to a local file path.

Tested:
 - arguments with URL and local path
 - exceptions

Change-Id: I5f2128ce35284499f1b3cecd9f1535111a08d775
Closes-Bug: 1848539
Signed-off-by: Angie Wang <angie.wang@windriver.com>
This commit is contained in:
Angie Wang 2019-10-21 15:10:06 -04:00
parent ce49ea8a03
commit b7f7848ec0
2 changed files with 17 additions and 26 deletions

View File

@ -27,6 +27,7 @@ from osc_lib.command import command
from dcmanagerclient.commands.v1 import base
from dcmanagerclient import exceptions
from dcmanagerclient import utils
def format(subcloud=None):
@ -124,7 +125,8 @@ class AddSubcloud(base.DCManagerShowOne):
parser.add_argument(
'--bootstrap-values',
required=True,
help='YAML file containing subcloud configuration settings.'
help='YAML file containing subcloud configuration settings. '
'Can be either a local file path or a URL.'
)
parser.add_argument(
@ -133,7 +135,8 @@ class AddSubcloud(base.DCManagerShowOne):
help='An optional ansible playbook to be run after the subcloud '
'has been successfully bootstrapped. It will be run with the '
'subcloud as the target and authentication is '
'handled automatically.'
'handled automatically. '
'Can be either a local file path or a URL.'
)
parser.add_argument(
@ -159,15 +162,8 @@ class AddSubcloud(base.DCManagerShowOne):
# Load the configuration from the bootstrap yaml file
filename = parsed_args.bootstrap_values
if os.path.isdir(filename):
error_msg = "Error: %s is a directory." % filename
raise exceptions.DCManagerClientException(error_msg)
try:
with open(filename, 'rb') as stream:
kwargs.update(yaml.safe_load(stream))
except Exception:
error_msg = "Error: Could not open file %s." % filename
raise exceptions.DCManagerClientException(error_msg)
stream = utils.get_contents_if_file(filename)
kwargs.update(yaml.safe_load(stream))
# Load the the deploy playbook yaml file
if parsed_args.deploy_playbook is not None:
@ -177,15 +173,8 @@ class AddSubcloud(base.DCManagerShowOne):
"specified."
raise exceptions.DCManagerClientException(error_msg)
filename = parsed_args.deploy_playbook
if os.path.isdir(filename):
error_msg = "Error: %s is a directory." % filename
raise exceptions.DCManagerClientException(error_msg)
try:
with open(filename, 'rb') as stream:
kwargs['deploy_playbook'] = yaml.safe_load(stream)
except Exception:
error_msg = "Error: Could not open file %s." % filename
raise exceptions.DCManagerClientException(error_msg)
stream = utils.get_contents_if_file(filename)
kwargs['deploy_playbook'] = yaml.safe_load(stream)
# Load the configuration from the deploy values yaml file
if parsed_args.deploy_values is not None:

View File

@ -69,12 +69,13 @@ def get_contents_if_file(contents_or_file_name):
If the value passed in is a file name or file URI, return the
contents. If not, or there is an error reading the file contents,
return the value passed in as the contents.
raise an exception.
For example, a workflow definition will be returned if either the
workflow definition file name, or file URI are passed in, or the
actual workflow definition itself is passed in.
"""
if os.path.isdir(contents_or_file_name):
error_msg = "Error: %s is a directory." % contents_or_file_name
raise exceptions.DCManagerClientException(error_msg)
try:
if parse.urlparse(contents_or_file_name).scheme:
definition_url = contents_or_file_name
@ -85,5 +86,6 @@ def get_contents_if_file(contents_or_file_name):
request.pathname2url(path)
)
return request.urlopen(definition_url).read().decode('utf8')
except Exception:
return contents_or_file_name
except Exception as e:
raise exceptions.DCManagerClientException(
"Error: Could not open file %s: %s" % (contents_or_file_name, e))