From f9b8fa7ee66f1dd72f624f27ccd1424b7d912500 Mon Sep 17 00:00:00 2001 From: Sunny Carter Date: Fri, 6 Oct 2023 12:57:28 +0100 Subject: [PATCH 1/4] Validation requirements on helm names --- .../generate_nfd/cnf_nfd_generator.py | 31 +++++++++++++++++++ .../templates/cnfdefinition.bicep.j2 | 4 +-- 2 files changed, 33 insertions(+), 2 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 a3323df4472..5d4d09d4541 100644 --- a/src/aosm/azext_aosm/generate_nfd/cnf_nfd_generator.py +++ b/src/aosm/azext_aosm/generate_nfd/cnf_nfd_generator.py @@ -54,11 +54,41 @@ class NFApplicationConfiguration: name: str chartName: str chartVersion: str + releaseName: str dependsOnProfile: List[str] registryValuesPaths: List[str] imagePullSecretsValuesPaths: List[str] valueMappingsFile: str + def __post_init__(self): + """Format the fields based on the NFDV validation rules.""" + self._format_name() + self._format_release_name() + + def _format_name(self): + """ + Format the name field. + + The name should start with a alphabetic character, have alphanumeric + characters or '-' in-between and end with alphanumerc character, and be less + than 64 characters long. + See NfdVersionValidationHelper.cs in pez codebase + """ + self.name = re.sub('[^0-9a-zA-Z-]+', '-', self.name) + self.name = self.name[:64] + + def _format_release_name(self): + """ + Format release name. + + It must consist of lower case alphanumeric characters, '-' + or '.', and must start and end with an alphanumeric character See + AzureArcKubernetesRuleBuilderExtensions.cs and + AzureArcKubernetesNfValidationMessage.cs in pez codebase + """ + self.releaseName = self.releaseName.lower() + self.releaseName = re.sub('[^0-9a-z-.]+', '-', self.releaseName) + @dataclass class ImageInfo: @@ -378,6 +408,7 @@ def _generate_nf_application_config( name=helm_package.name, chartName=name, chartVersion=version, + releaseName=name, dependsOnProfile=helm_package.depends_on, registryValuesPaths=list(registry_values_paths), imagePullSecretsValuesPaths=list(image_pull_secrets_values_paths), diff --git a/src/aosm/azext_aosm/generate_nfd/templates/cnfdefinition.bicep.j2 b/src/aosm/azext_aosm/generate_nfd/templates/cnfdefinition.bicep.j2 index 8396447065a..6f126f9e572 100644 --- a/src/aosm/azext_aosm/generate_nfd/templates/cnfdefinition.bicep.j2 +++ b/src/aosm/azext_aosm/generate_nfd/templates/cnfdefinition.bicep.j2 @@ -65,8 +65,8 @@ resource nfdv 'Microsoft.Hybridnetwork/publishers/networkfunctiondefinitiongroup deployParametersMappingRuleProfile: { applicationEnablement: 'Enabled' helmMappingRuleProfile: { - releaseNamespace: '{{ configuration.chartName }}' - releaseName: '{{ configuration.chartName }}' + releaseNamespace: '{{ configuration.releaseName }}' + releaseName: '{{ configuration.releaseName }}' helmPackageVersion: '{{ configuration.chartVersion }}' values: string(loadJsonContent('configMappings/{{ configuration.valueMappingsFile }}')) } From 6d7694a5bc8b4f0799aa31b53f1f87a54a83f145 Mon Sep 17 00:00:00 2001 From: Sunny Carter Date: Fri, 6 Oct 2023 14:26:56 +0100 Subject: [PATCH 2/4] lint --- .../azext_aosm/generate_nfd/cnf_nfd_generator.py | 15 +++++++-------- 1 file changed, 7 insertions(+), 8 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 5d4d09d4541..9d66a6a4543 100644 --- a/src/aosm/azext_aosm/generate_nfd/cnf_nfd_generator.py +++ b/src/aosm/azext_aosm/generate_nfd/cnf_nfd_generator.py @@ -69,25 +69,24 @@ def _format_name(self): """ Format the name field. - The name should start with a alphabetic character, have alphanumeric - characters or '-' in-between and end with alphanumerc character, and be less - than 64 characters long. - See NfdVersionValidationHelper.cs in pez codebase + The name should start with a alphabetic character, have alphanumeric characters + or '-' in-between and end with alphanumerc character, and be less than 64 + characters long. See NfdVersionValidationHelper.cs in pez codebase """ - self.name = re.sub('[^0-9a-zA-Z-]+', '-', self.name) + self.name = re.sub("[^0-9a-zA-Z-]+", "-", self.name) self.name = self.name[:64] def _format_release_name(self): """ Format release name. - It must consist of lower case alphanumeric characters, '-' - or '.', and must start and end with an alphanumeric character See + It must consist of lower case alphanumeric characters, '-' or '.', and must + start and end with an alphanumeric character See AzureArcKubernetesRuleBuilderExtensions.cs and AzureArcKubernetesNfValidationMessage.cs in pez codebase """ self.releaseName = self.releaseName.lower() - self.releaseName = re.sub('[^0-9a-z-.]+', '-', self.releaseName) + self.releaseName = re.sub("[^0-9a-z-.]+", "-", self.releaseName) @dataclass From 1960b934e855f8728799362c55f75070ab5680eb Mon Sep 17 00:00:00 2001 From: Sunny Carter Date: Mon, 9 Oct 2023 12:37:37 +0100 Subject: [PATCH 3/4] markups --- .../generate_nfd/cnf_nfd_generator.py | 25 +++++++++++++++++++ 1 file changed, 25 insertions(+) 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 9d66a6a4543..674dddc27c8 100644 --- a/src/aosm/azext_aosm/generate_nfd/cnf_nfd_generator.py +++ b/src/aosm/azext_aosm/generate_nfd/cnf_nfd_generator.py @@ -73,9 +73,20 @@ def _format_name(self): or '-' in-between and end with alphanumerc character, and be less than 64 characters long. See NfdVersionValidationHelper.cs in pez codebase """ + # Replace any non (alphanumeric or '-') characters with '-' self.name = re.sub("[^0-9a-zA-Z-]+", "-", self.name) + # Strip leading or trailing - + self.name = self.name.strip("-") self.name = self.name[:64] + if not self.name: + raise InvalidTemplateError( + "The name field of the NF application configuration for helm package " + f"{self.chartName} is empty after removing invalid characters. " + "Valid characters are alphanumeric and '-'. Please fix this in the name" + " field for the helm package in your input config file." + ) + def _format_release_name(self): """ Format release name. @@ -86,7 +97,21 @@ def _format_release_name(self): AzureArcKubernetesNfValidationMessage.cs in pez codebase """ self.releaseName = self.releaseName.lower() + # Replace any non (alphanumeric or '-' or '.') characters with '-' self.releaseName = re.sub("[^0-9a-z-.]+", "-", self.releaseName) + # Strip leading - or . + self.releaseName = self.releaseName.strip("-") + self.releaseName = self.releaseName.strip(".") + if not self.releaseName: + raise InvalidTemplateError( + "The releaseName field of the NF application configuration for helm " + f"chart {self.chartName} is empty after formatting and removing invalid" + "characters. Valid characters are alphanumeric, -.' and '-' and the " + "releaseName must start and end with an alphanumeric character. The " + "value of this field is taken from Chart.yaml within the helm package. " + "Please fix up the helm package. Before removing invalid characters" + f", the releaseName was {self.chartName}." + ) @dataclass From 327f5403f1481db2edc9b9231a4ec72bfcf61317 Mon Sep 17 00:00:00 2001 From: Sunny Carter Date: Mon, 9 Oct 2023 12:41:57 +0100 Subject: [PATCH 4/4] lint --- src/aosm/azext_aosm/generate_nfd/cnf_nfd_generator.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) 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 674dddc27c8..f3e14f6c8c3 100644 --- a/src/aosm/azext_aosm/generate_nfd/cnf_nfd_generator.py +++ b/src/aosm/azext_aosm/generate_nfd/cnf_nfd_generator.py @@ -50,7 +50,7 @@ class Artifact: @dataclass -class NFApplicationConfiguration: +class NFApplicationConfiguration: # pylint: disable=too-many-instance-attributes name: str chartName: str chartVersion: str