@@ -7,21 +7,36 @@ require "../hetzner/client"
77require " ../hetzner/instance_type"
88require " ../hetzner/location"
99
10- require " ./settings/configuration_file_path"
11- require " ./settings/cluster_name"
12- require " ./settings/kubeconfig_path"
13- require " ./settings/k3s_version"
14- require " ./settings/new_k3s_version"
15- require " ./networking"
16- require " ./settings/node_pool"
17- require " ./settings/node_pool/autoscaling"
18- require " ./settings/node_pool/pool_name"
19- require " ./settings/node_pool/instance_type"
20- require " ./settings/node_pool/location"
21- require " ./settings/node_pool/instance_count"
22- require " ./settings/node_pool/node_labels"
23- require " ./settings/node_pool/node_taints"
24- require " ./settings/datastore"
10+ require " ./validators/configuration_file_path"
11+ require " ./validators/cluster_name"
12+ require " ./validators/kubeconfig_path"
13+ require " ./validators/k3s_version"
14+ require " ./validators/new_k3s_version"
15+ require " ./models/networking"
16+ require " ./validators/node_pool"
17+ require " ./validators/node_pool_config/autoscaling"
18+ require " ./validators/node_pool_config/pool_name"
19+ require " ./validators/node_pool_config/instance_type"
20+ require " ./validators/node_pool_config/location"
21+ require " ./validators/node_pool_config/instance_count"
22+ require " ./validators/node_pool_config/labels"
23+ require " ./validators/node_pool_config/taints"
24+ require " ./validators/datastore"
25+ require " ./validators/networking_config/allowed_networks"
26+ require " ./validators/networking_config/cni_config/cilium"
27+ require " ./validators/networking_config/cni"
28+ require " ./validators/networking_config/private_network"
29+ require " ./validators/networking_config/public_network"
30+ require " ./validators/networking_config/ssh"
31+ require " ./validators/networking"
32+ require " ./validators/worker_node_pools"
33+ require " ./validators/masters_pool"
34+ require " ./validators/kubectl_presence"
35+ require " ./validators/helm_presence"
36+ require " ./validators/create_settings"
37+ require " ./validators/upgrade_settings"
38+ require " ./validators/run_settings"
39+ require " ./validators/command_specific_settings"
2540require " ../util"
2641
2742class Configuration::Loader
@@ -44,7 +59,7 @@ class Configuration::Loader
4459 Path [settings.kubeconfig_path].expand(home: true ).to_s
4560 end
4661
47- getter masters_pool : Configuration ::MasterNodePool do
62+ getter masters_pool : Configuration ::Models :: MasterNodePool do
4863 settings.masters_pool
4964 end
5065
@@ -66,64 +81,32 @@ class Configuration::Loader
6681 def initialize (@configuration_file_path , @new_k3s_version , @force )
6782 @settings = Configuration ::Main .from_yaml(File .read(configuration_file_path))
6883
69- Settings ::ConfigurationFilePath .new(errors, configuration_file_path).validate
84+ Configuration :: Validators ::ConfigurationFilePath .new(errors, configuration_file_path).validate
7085
7186 print_errors unless errors.empty?
7287 end
7388
7489 def validate (command )
7590 log_line " Validating configuration..."
7691
77- Settings ::ClusterName .new(errors, settings.cluster_name).validate
92+ Configuration :: Validators ::ClusterName .new(errors, settings.cluster_name).validate
7893
7994 validate_command_specific_settings(command)
8095
8196 print_validation_result
8297 end
8398
8499 private def validate_command_specific_settings (command )
85- case command
86- when :create
87- validate_create_settings
88- when :delete
89- when :upgrade
90- validate_upgrade_settings
91- when :run
92- validate_run_settings
93- end
94- end
95-
96- private def validate_create_settings
97- Settings ::KubeconfigPath .new(errors, kubeconfig_path, file_must_exist: false ).validate
98- Settings ::K3sVersion .new(errors, settings.k3s_version).validate
99- Settings ::Datastore .new(errors, settings.datastore).validate
100-
101- settings.networking.validate(errors, settings, hetzner_client, settings.networking.private_network)
102-
103- validate_masters_pool
104- validate_worker_node_pools
105-
106- validate_kubectl_presence
107- validate_helm_presence
108- end
109-
110- private def validate_run_settings
111- validate_kubectl_presence
112- end
113-
114- private def validate_upgrade_settings
115- Settings ::KubeconfigPath .new(errors, kubeconfig_path, file_must_exist: true ).validate
116- Settings ::NewK3sVersion .new(errors, settings.k3s_version, new_k3s_version).validate
117-
118- validate_kubectl_presence
119- end
120-
121- private def validate_kubectl_presence
122- errors << " kubectl is not installed or not in PATH" unless which(" kubectl" )
123- end
124-
125- private def validate_helm_presence
126- errors << " helm is not installed or not in PATH" unless which(" helm" )
100+ Configuration ::Validators ::CommandSpecificSettings .new(
101+ errors: errors,
102+ settings: settings,
103+ kubeconfig_path: kubeconfig_path,
104+ hetzner_client: hetzner_client,
105+ masters_pool: masters_pool,
106+ instance_types: instance_types,
107+ all_locations: all_locations,
108+ new_k3s_version: new_k3s_version
109+ ).validate(command)
127110 end
128111
129112 private def print_validation_result
@@ -135,42 +118,6 @@ class Configuration::Loader
135118 end
136119 end
137120
138- private def validate_masters_pool
139- Settings ::NodePool .new(
140- errors: errors,
141- pool: settings.masters_pool,
142- pool_type: :masters ,
143- masters_pool: masters_pool,
144- instance_types: instance_types,
145- all_locations: all_locations,
146- datastore: settings.datastore
147- ).validate
148- end
149-
150- private def validate_worker_node_pools
151- node_pools = settings.worker_node_pools || [] of Configuration ::WorkerNodePool
152-
153- if node_pools.empty? && ! settings.schedule_workloads_on_masters
154- errors << " At least one worker node pool is required in order to schedule workloads"
155- return
156- end
157-
158- names = node_pools.map(& .name)
159- errors << " Each worker node pool must have a unique name" if names.uniq.size != names.size
160-
161- node_pools.each do |pool |
162- Settings ::NodePool .new(
163- errors: errors,
164- pool: pool,
165- pool_type: :workers ,
166- masters_pool: masters_pool,
167- instance_types: instance_types,
168- all_locations: all_locations,
169- datastore: settings.datastore
170- ).validate
171- end
172- end
173-
174121 private def print_errors
175122 log_line " Some information in the configuration file requires your attention, aborting."
176123
0 commit comments