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:
parent
ce49ea8a03
commit
b7f7848ec0
@ -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:
|
||||
|
@ -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))
|
||||
|
Loading…
Reference in New Issue
Block a user