Support base64 encoded credentials for VIM creation
Change-Id: I719d76ba089047358b9447a2df64929600fd08d5
Signed-off-by: garciadeblas <gerardo.garciadeblas@telefonica.com>
diff --git a/osmclient/cli_commands/vim.py b/osmclient/cli_commands/vim.py
index bb7622d..c3377a9 100755
--- a/osmclient/cli_commands/vim.py
+++ b/osmclient/cli_commands/vim.py
@@ -13,8 +13,10 @@
# License for the specific language governing permissions and limitations
# under the License.
+import base64
import click
from osmclient.common import print_output
+from osmclient.common.exceptions import ClientException
from osmclient.cli_commands import utils
from prettytable import PrettyTable
import yaml
@@ -52,7 +54,11 @@
default=None,
help="VIM specific config parameters in YAML or JSON file",
)
-@click.option("--account_type", default="openstack", help="VIM type")
+@click.option(
+ "--account_type",
+ default="openstack",
+ help="VIM type (openstack, aws, azure, gcp, vmware)",
+)
@click.option("--description", default=None, help="human readable description")
@click.option(
"--sdn_controller",
@@ -139,8 +145,18 @@
vim_config = utils.create_config(config_file, config)
_check_ca_cert(vim_config)
if creds:
- with open(creds, "r") as cf:
- vim_config["credentials"] = yaml.safe_load(cf.read())
+ with open(creds, "rb") as cf:
+ creds_content = cf.read()
+ vim_config["credentials_base64"] = base64.b64encode(creds_content).decode(
+ "utf-8"
+ )
+ if account_type != "aws":
+ try:
+ # Convert binary content to text before loading as YAML
+ creds_text = creds_content.decode("utf-8")
+ vim_config["credentials"] = yaml.safe_load(creds_text)
+ except (UnicodeDecodeError, yaml.YAMLError) as e:
+ raise ClientException(f"Error decoding credentials file: {e}")
ctx.obj.vim.create(
name, vim, vim_config, sdn_controller, sdn_port_mapping, wait=wait
)
@@ -159,7 +175,7 @@
default=None,
help="VIM specific config parameters in YAML or JSON file",
)
-@click.option("--account_type", help="VIM type")
+@click.option("--account_type", help="VIM type (openstack, aws, azure, gcp, vmware)")
@click.option("--description", help="human readable description")
@click.option(
"--sdn_controller",
@@ -245,8 +261,18 @@
vim_config = utils.create_config(config_file, config)
_check_ca_cert(vim_config)
if creds:
- with open(creds, "r") as cf:
- vim_config["credentials"] = yaml.safe_load(cf.read())
+ with open(creds, "rb") as cf:
+ creds_content = cf.read()
+ vim_config["credentials_base64"] = base64.b64encode(creds_content).decode(
+ "utf-8"
+ )
+ if account_type != "aws":
+ try:
+ # Convert binary content to text before loading as YAML
+ creds_text = creds_content.decode("utf-8")
+ vim_config["credentials"] = yaml.safe_load(creds_text)
+ except (UnicodeDecodeError, yaml.YAMLError) as e:
+ raise ClientException(f"Error decoding credentials file: {e}")
prometheus_config = {}
if prometheus_url:
prometheus_config["prometheus-url"] = prometheus_url