From 0857877e0250cac5aa222202654bf3e0c2cedff1 Mon Sep 17 00:00:00 2001 From: Sunny Carter Date: Mon, 9 Oct 2023 13:32:34 +0100 Subject: [PATCH 1/3] Lower case ACR names and fix interactive mode for lists --- src/aosm/azext_aosm/_configuration.py | 13 +++++++++++++ .../azext_aosm/generate_nfd/cnf_nfd_generator.py | 10 +++++++++- 2 files changed, 22 insertions(+), 1 deletion(-) diff --git a/src/aosm/azext_aosm/_configuration.py b/src/aosm/azext_aosm/_configuration.py index 7671abcdaa5..3b7e8eac8aa 100644 --- a/src/aosm/azext_aosm/_configuration.py +++ b/src/aosm/azext_aosm/_configuration.py @@ -337,6 +337,19 @@ class CNFImageConfig: source_registry: str = "" source_registry_namespace: str = "" source_local_docker_image: str = "" + + def __post_init__(self): + """ + Ensure that all config is lower case. + + ACR names can be uppercase but the login server is always lower case and docker + and az acr import commands require lower case. Might as well do the namespace + and docker image too although much less likely that the user has accidentally + pasted these with upper case. + """ + self.source_registry = self.source_registry.lower() + self.source_registry_namespace = self.source_registry_namespace.lower() + self.source_local_docker_image = self.source_local_docker_image.lower() @classmethod def helptext(cls) -> "CNFImageConfig": diff --git a/src/aosm/azext_aosm/generate_nfd/cnf_nfd_generator.py b/src/aosm/azext_aosm/generate_nfd/cnf_nfd_generator.py index f3e14f6c8c3..50c5d712f47 100644 --- a/src/aosm/azext_aosm/generate_nfd/cnf_nfd_generator.py +++ b/src/aosm/azext_aosm/generate_nfd/cnf_nfd_generator.py @@ -764,7 +764,15 @@ def _replace_values_with_deploy_params( final_values_mapping_dict[k].append( self._replace_values_with_deploy_params(item, param_name) ) - elif isinstance(item, (str, int, bool)) or not v: + elif isinstance(item, (str, int, bool)) or not item: + if self.interactive: + if not input_ack( + "y", + f"Expose parameter {param_name}? y/n " + ): + logger.debug("Excluding parameter %s", param_name) + final_values_mapping_dict[k].append(item) + continue replacement_value = f"{{deployParameters.{param_name}}}" final_values_mapping_dict[k].append(replacement_value) else: From f6d542884a619439af963485b2123fc9840c2452 Mon Sep 17 00:00:00 2001 From: Sunny Carter Date: Mon, 9 Oct 2023 13:36:00 +0100 Subject: [PATCH 2/3] lint --- src/aosm/azext_aosm/_configuration.py | 4 ++-- src/aosm/azext_aosm/generate_nfd/cnf_nfd_generator.py | 5 ++--- 2 files changed, 4 insertions(+), 5 deletions(-) diff --git a/src/aosm/azext_aosm/_configuration.py b/src/aosm/azext_aosm/_configuration.py index 3b7e8eac8aa..dee64aafb66 100644 --- a/src/aosm/azext_aosm/_configuration.py +++ b/src/aosm/azext_aosm/_configuration.py @@ -337,11 +337,11 @@ class CNFImageConfig: source_registry: str = "" source_registry_namespace: str = "" source_local_docker_image: str = "" - + def __post_init__(self): """ Ensure that all config is lower case. - + ACR names can be uppercase but the login server is always lower case and docker and az acr import commands require lower case. Might as well do the namespace and docker image too although much less likely that the user has accidentally diff --git a/src/aosm/azext_aosm/generate_nfd/cnf_nfd_generator.py b/src/aosm/azext_aosm/generate_nfd/cnf_nfd_generator.py index 50c5d712f47..1ed70d53ec7 100644 --- a/src/aosm/azext_aosm/generate_nfd/cnf_nfd_generator.py +++ b/src/aosm/azext_aosm/generate_nfd/cnf_nfd_generator.py @@ -731,7 +731,7 @@ def _replace_values_with_deploy_params( """ logger.debug("Replacing values with deploy parameters") final_values_mapping_dict: Dict[Any, Any] = {} - for k, v in values_yaml_dict.items(): + for k, v in values_yaml_dict.items(): # pylint: disable=too-many-nested-blocks # if value is a string and contains deployParameters. logger.debug("Processing key %s", k) param_name = k if param_prefix is None else f"{param_prefix}_{k}" @@ -767,8 +767,7 @@ def _replace_values_with_deploy_params( elif isinstance(item, (str, int, bool)) or not item: if self.interactive: if not input_ack( - "y", - f"Expose parameter {param_name}? y/n " + "y", f"Expose parameter {param_name}? y/n " ): logger.debug("Excluding parameter %s", param_name) final_values_mapping_dict[k].append(item) From 86cfc45b4b17f050fd84e0994bde1a9564bc832d Mon Sep 17 00:00:00 2001 From: Sunny Carter Date: Mon, 9 Oct 2023 16:09:26 +0100 Subject: [PATCH 3/3] remove duplicate else branch --- .../generate_nfd/cnf_nfd_generator.py | 21 ++++--------------- 1 file changed, 4 insertions(+), 17 deletions(-) diff --git a/src/aosm/azext_aosm/generate_nfd/cnf_nfd_generator.py b/src/aosm/azext_aosm/generate_nfd/cnf_nfd_generator.py index 1ed70d53ec7..036773eb6e0 100644 --- a/src/aosm/azext_aosm/generate_nfd/cnf_nfd_generator.py +++ b/src/aosm/azext_aosm/generate_nfd/cnf_nfd_generator.py @@ -735,20 +735,7 @@ def _replace_values_with_deploy_params( # if value is a string and contains deployParameters. logger.debug("Processing key %s", k) param_name = k if param_prefix is None else f"{param_prefix}_{k}" - if isinstance(v, (str, int, bool)): - # Replace the parameter with {deploymentParameter.keyname} - if self.interactive: - # Interactive mode. Prompt user to include or exclude parameters - # This requires the enter key after the y/n input which isn't ideal - if not input_ack("y", f"Expose parameter {param_name}? y/n "): - logger.debug("Excluding parameter %s", param_name) - final_values_mapping_dict.update({k: v}) - continue - replacement_value = f"{{deployParameters.{param_name}}}" - - # add the schema for k (from the big schema) to the (smaller) schema - final_values_mapping_dict.update({k: replacement_value}) - elif isinstance(v, dict): + if isinstance(v, dict): final_values_mapping_dict[k] = self._replace_values_with_deploy_params( v, param_name ) @@ -779,10 +766,10 @@ def _replace_values_with_deploy_params( f"Found an unexpected type {type(item)} of key {k} in " "values.yaml, cannot generate values mapping file." ) - elif not v: - # V is blank so we don't know what type it is. Assuming it is an - # empty string (but do this after checking for dict and list) + elif isinstance(v, (str, int, bool)) or not v: # Replace the parameter with {deploymentParameter.keyname} + # If v is blank we don't know what type it is. Assuming it is an + # empty string (but do this after checking for dict and list) if self.interactive: # Interactive mode. Prompt user to include or exclude parameters # This requires the enter key after the y/n input which isn't ideal