forked from cnti-testcatalog/testsuite
-
Notifications
You must be signed in to change notification settings - Fork 0
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
config: introduce new config format and parser
For supporting multiple deployments in one cnf and improving overall config usability and structure - new config format has to be introduced. This change does not replace the old config format. Refs: cnti-testcatalog#2121 Signed-off-by: Konstantin Yarovoy <[email protected]>
- Loading branch information
Konstantin Yarovoy
committed
Aug 13, 2024
1 parent
66752b7
commit 20850d6
Showing
12 changed files
with
265 additions
and
73 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,20 @@ | ||
--- | ||
config_version: "v2" | ||
common_parameters: | ||
container_names: | ||
- name: coredns | ||
rolling_update_test_tag: "1.8.0" | ||
rolling_downgrade_test_tag: 1.6.7 | ||
rolling_version_change_test_tag: 1.8.0 | ||
rollback_from_tag: 1.8.0 | ||
|
||
deployments: | ||
helm_charts: | ||
- name: coredns | ||
helm_repo_name: stable | ||
helm_repo_url: https://cncf.gitlab.io/stable | ||
helm_chart_name: coredns | ||
helm_directories: | ||
- name: envoy | ||
helm_directory: ../example-cnfs/envoy/envoy/ | ||
|
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,195 @@ | ||
require "yaml" | ||
require "../utils.cr" | ||
|
||
module CNFInstall | ||
module Config | ||
@[YAML::Serializable::Options(emit_nulls: true)] | ||
|
||
class ConfigBase | ||
include YAML::Serializable | ||
include YAML::Serializable::Strict | ||
end | ||
|
||
class Config < ConfigBase | ||
# TODO: remove as much parameters as possible | ||
@config_version : String | ||
@common_parameters : CommonParameters | Nil | ||
@dynamic_parameters : DynamicParameters | Nil | ||
@deployments : DeploymentsConfig | ||
getter config_version, common_parameters, deployments | ||
getter! dynamic_parameters | ||
|
||
def after_initialize | ||
unless @dynamic_parameters | ||
@dynamic_parameters = DynamicParameters.new() | ||
end | ||
end | ||
end | ||
|
||
class CommonParameters < ConfigBase | ||
@service_name : String | Nil | ||
@rolling_update_tag : String | Nil | ||
@container_names : Array(Hash(String, String)) | Nil | ||
@white_list_container_names : Array(String) | Nil | ||
@docker_insecure_registries : Array(String) | Nil | ||
@image_registry_fqdns : Hash(String, String) | Nil | ||
@five_g_parameters : FiveGParameters | Nil | ||
getter service_name, rolling_update_tag, container_names, white_list_container_names | ||
getter docker_insecure_registries, image_registry_fqdns, five_g_parameters | ||
end | ||
|
||
class DynamicParameters < ConfigBase | ||
@source_cnf_dir : String | Nil | ||
@destination_cnf_dir : String | Nil | ||
@install_method : Tuple(CNFInstall::InstallMethod, String) | Nil | ||
property source_cnf_dir, destination_cnf_dir | ||
property install_method | ||
|
||
def initialize() | ||
end | ||
end | ||
|
||
class DeploymentsConfig < ConfigBase | ||
@helm_charts : Array(HelmChartConfig) = [] of HelmChartConfig | ||
@helm_directories : Array(HelmDirectoryConfig) = [] of HelmDirectoryConfig | ||
@manifests : Array(ManifestDirectoryConfig) = [] of ManifestDirectoryConfig | ||
getter helm_charts, helm_directories, manifests | ||
|
||
def after_initialize | ||
if @helm_charts.empty? && @helm_directories.empty? && @manifests.empty? | ||
raise YAML::Error.new("At least one deployment should be configured") | ||
end | ||
|
||
deployment_names = Set(String).new | ||
{@helm_charts, @helm_directories, @manifests}.each do |deployment_array| | ||
if deployment_array | ||
deployment_array.each do |deployment| | ||
if deployment_names.includes?(deployment.name) | ||
raise YAML::Error.new("Deployment names should be unique: \"#{deployment.name}\"") | ||
else | ||
deployment_names.add(deployment.name) | ||
end | ||
end | ||
end | ||
end | ||
end | ||
end | ||
|
||
class DeploymentConfig < ConfigBase | ||
@name : String | ||
getter name | ||
end | ||
|
||
class HelmChartConfig < DeploymentConfig | ||
@helm_repo_name : String | ||
@helm_repo_url : String | ||
@helm_chart_name : String | ||
@helm_values : String | Nil | ||
@namespace : String | Nil | ||
getter helm_repo_name, helm_repo_url, helm_chart_name, helm_values, namespace | ||
end | ||
|
||
class HelmDirectoryConfig < DeploymentConfig | ||
@helm_directory : String | ||
@helm_values : String | Nil | ||
@namespace : String | Nil | ||
getter helm_directory, helm_values, namespace | ||
end | ||
|
||
class ManifestDirectoryConfig < DeploymentConfig | ||
@manifest_directory : String | ||
getter manifest_directory | ||
end | ||
|
||
class FiveGParameters < ConfigBase | ||
@amf_label : String | Nil | ||
@smf_label : String | Nil | ||
@upf_label : String | Nil | ||
@ric_label : String | Nil | ||
@amf_service_name : String | Nil | ||
@mmc : String | Nil | ||
@mnc : String | Nil | ||
@sst : String | Nil | ||
@sd : String | Nil | ||
@tac : String | Nil | ||
@protectionScheme : String | Nil | ||
@publicKey : String | Nil | ||
@publicKeyId : String | Nil | ||
@routingIndicator : String | Nil | ||
@enabled : String | Nil | ||
@count : String | Nil | ||
@initialMSISDN : String | Nil | ||
@key : String | Nil | ||
@op : String | Nil | ||
@opType : String | Nil | ||
@type : String | Nil | ||
@apn : String | Nil | ||
@emergency : String | Nil | ||
end | ||
|
||
def self.parse_cnf_config_from_file(path_to_config) | ||
yaml_content = File.read(path_to_config) | ||
config_dir = CNFManager.ensure_cnf_testsuite_dir(path_to_config) | ||
begin | ||
parse_cnf_config_from_yaml(yaml_content, config_dir) | ||
rescue exception | ||
stdout_failure "Error during parsing CNF config on #{path_to_config}" | ||
stdout_failure exception.message | ||
stdout_failure "Please check your config according to the config template." | ||
exit 1 | ||
end | ||
end | ||
|
||
def self.parse_cnf_config_from_yaml(yaml_content, config_dir) | ||
config = Config.from_yaml(yaml_content) | ||
|
||
unless config.dynamic_parameters.source_cnf_dir | ||
config.dynamic_parameters.source_cnf_dir = config_dir | ||
end | ||
|
||
unless config.dynamic_parameters.install_method | ||
config.dynamic_parameters.install_method = get_install_method_from_deployments(config.deployments) | ||
end | ||
|
||
unless config.dynamic_parameters.destination_cnf_dir | ||
install_method = config.dynamic_parameters.install_method.not_nil![0] | ||
case install_method | ||
when CNFInstall::InstallMethod::HelmChart | ||
deployment_name = config.deployments.helm_charts[0].name | ||
when CNFInstall::InstallMethod::HelmDirectory | ||
deployment_name = config.deployments.helm_directories[0].name | ||
when CNFInstall::InstallMethod::ManifestDirectory | ||
deployment_name = config.deployments.manifests[0].name | ||
else | ||
raise "Unknown install method: #{install_method}" | ||
end | ||
current_dir = FileUtils.pwd | ||
config.dynamic_parameters.destination_cnf_dir = "#{current_dir}/#{CNF_DIR}/#{deployment_name}" | ||
end | ||
|
||
config | ||
end | ||
|
||
def self.get_install_method_from_deployments(deployments_config) | ||
if !deployments_config.helm_charts.empty? | ||
helm_chart_name = deployments_config.helm_charts[0].helm_chart_name | ||
{CNFInstall::InstallMethod::HelmChart, helm_chart_name} | ||
|
||
elsif !deployments_config.helm_directories.empty? | ||
helm_directory = deployments_config.helm_directories[0].helm_directory | ||
deployment_name = deployments_config.helm_directories[0].name | ||
full_helm_directory = Path[CNF_DIR + "/" + deployment_name + "/" + CNFManager.sandbox_helm_directory(helm_directory)].expand.to_s | ||
{CNFInstall::InstallMethod::HelmDirectory, full_helm_directory} | ||
|
||
elsif !deployments_config.manifests.empty? | ||
manifest_directory = deployments_config.manifests[0].manifest_directory | ||
deployment_name = deployments_config.manifests[0].name | ||
full_manifest_directory = Path[CNF_DIR + "/" + deployment_name + "/" + CNFManager.sandbox_helm_directory(manifest_directory)].expand.to_s | ||
{CNFInstall::InstallMethod::ManifestDirectory, full_manifest_directory} | ||
|
||
else | ||
raise YAML::Error.new("At least one deployment should be configured") | ||
end | ||
end | ||
end | ||
end |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Oops, something went wrong.