Andre Carneiro ffbbaaa5cb Use multipart headers on subcloud-backup API calls
This change replaces JSON content types for subcloud-backup API calls
with multipart content. This aims to keep the uniformity with all
other API calls.

Test Plan:
1. PASS - Validate that the API is called with multipart
content types and all parameters are read by the API.
2. PASS - Validate that the files uploaded for restore_values and
backup_values are read by the API.
3. PASS - Repeat steps 1 and 2 for backup create, delete and restore
operation.

Story: 2010116
Task: 47020

Signed-off-by: Andre Carneiro <Andre.DexheimerCarneiro@windriver.com>
Change-Id: Iba4ceab4a541d308ee4f49c1387298828cf02694
2022-12-14 18:13:50 -03:00

105 lines
3.2 KiB
Python

# Copyright 2016 - Ericsson AB
# Copyright 2015 - Huawei Technologies Co. Ltd
# Copyright 2015 - StackStorm, Inc.
# Copyright (c) 2017-2022 Wind River Systems, Inc.
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
#
import getpass
import json
import os
import yaml
from six.moves.urllib import parse
from six.moves.urllib import request
from dcmanagerclient import exceptions
def do_action_on_many(action, resources, success_msg, error_msg):
"""Helper to run an action on many resources."""
failure_flag = False
for resource in resources:
try:
action(resource)
print(success_msg % resource)
except Exception as e:
failure_flag = True
print(e)
if failure_flag:
raise exceptions.DCManagerClientException(error_msg)
def load_content(content):
if content is None or content == '':
return dict()
try:
data = yaml.safe_load(content)
except Exception:
data = json.loads(content)
return data
def get_contents_if_file(contents_or_file_name):
"""Get the contents of a file.
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,
raise an exception.
"""
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
else:
path = os.path.abspath(contents_or_file_name)
definition_url = parse.urljoin(
'file:',
request.pathname2url(path)
)
return request.urlopen(definition_url).read().decode('utf8')
except Exception as e:
raise exceptions.DCManagerClientException(
"Error: Could not open file %s: %s" % (contents_or_file_name, e))
def prompt_for_password(password_type='sysadmin'):
while True:
try:
password = getpass.getpass(
"Enter the " + password_type + " password for the subcloud: ")
if len(password) < 1:
print("Password cannot be empty")
continue
confirm = getpass.getpass(
"Re-enter " + password_type + " password to confirm: ")
if password != confirm:
print("Passwords did not match")
continue
break
except KeyboardInterrupt:
raise exceptions.DCManagerClientException(
"\nPassword prompt interrupted."
)
return password