@@ -13,20 +13,25 @@ use std::{
1313 sync:: { Arc , LazyLock } ,
1414} ;
1515
16- use k8s_openapi:: apiextensions_apiserver:: pkg:: apis:: apiextensions:: v1:: CustomResourceColumnDefinition ;
16+ use http:: HeaderValue ;
17+ use k8s_openapi:: {
18+ api:: core:: v1:: { Affinity , ResourceRequirements , Toleration } ,
19+ apiextensions_apiserver:: pkg:: apis:: apiextensions:: v1:: CustomResourceColumnDefinition ,
20+ } ;
1721use kube:: runtime:: watcher;
22+ use mz_cloud_provider:: CloudProvider ;
1823use tracing:: info;
1924
2025use mz_build_info:: { BuildInfo , build_info} ;
21- use mz_orchestrator_kubernetes:: util:: create_client;
26+ use mz_orchestrator_kubernetes:: { KubernetesImagePullPolicy , util:: create_client} ;
2227use mz_orchestrator_tracing:: { StaticTracingConfig , TracingCliArgs } ;
2328use mz_orchestratord:: {
24- controller,
29+ controller:: { self , materialize :: DefaultCertificateSpecs } ,
2530 k8s:: register_crds,
2631 metrics:: { self , Metrics } ,
2732} ;
2833use mz_ore:: {
29- cli:: { self , CliConfig } ,
34+ cli:: { self , CliConfig , KeyValueArg } ,
3035 error:: ErrorExt ,
3136 metrics:: MetricsRegistry ,
3237} ;
@@ -45,8 +50,159 @@ pub struct Args {
4550 #[ clap( long, default_value = "[::]:3100" ) ]
4651 metrics_listen_address : SocketAddr ,
4752
48- #[ clap( flatten) ]
49- materialize_controller_args : controller:: materialize:: MaterializeControllerArgs ,
53+ #[ clap( long) ]
54+ cloud_provider : CloudProvider ,
55+ #[ clap( long) ]
56+ region : String ,
57+ #[ clap( long) ]
58+ create_balancers : bool ,
59+ #[ clap( long) ]
60+ create_console : bool ,
61+ #[ clap( long) ]
62+ helm_chart_version : Option < String > ,
63+ #[ clap( long, default_value = "kubernetes" ) ]
64+ secrets_controller : String ,
65+ #[ clap( long) ]
66+ collect_pod_metrics : bool ,
67+ #[ clap( long) ]
68+ enable_prometheus_scrape_annotations : bool ,
69+ #[ clap( long) ]
70+ disable_authentication : bool ,
71+
72+ #[ clap( long) ]
73+ segment_api_key : Option < String > ,
74+ #[ clap( long) ]
75+ segment_client_side : bool ,
76+
77+ #[ clap( long) ]
78+ console_image_tag_default : String ,
79+ #[ clap( long) ]
80+ console_image_tag_map : Vec < KeyValueArg < String , String > > ,
81+
82+ #[ clap( long) ]
83+ aws_account_id : Option < String > ,
84+ #[ clap( long) ]
85+ environmentd_iam_role_arn : Option < String > ,
86+ #[ clap( long) ]
87+ environmentd_connection_role_arn : Option < String > ,
88+ #[ clap( long) ]
89+ aws_secrets_controller_tags : Vec < String > ,
90+ #[ clap( long) ]
91+ environmentd_availability_zones : Option < Vec < String > > ,
92+
93+ #[ clap( long) ]
94+ ephemeral_volume_class : Option < String > ,
95+ #[ clap( long) ]
96+ scheduler_name : Option < String > ,
97+ #[ clap( long) ]
98+ enable_security_context : bool ,
99+ #[ clap( long) ]
100+ enable_internal_statement_logging : bool ,
101+ #[ clap( long, default_value = "false" ) ]
102+ disable_statement_logging : bool ,
103+
104+ #[ clap( long) ]
105+ orchestratord_pod_selector_labels : Vec < KeyValueArg < String , String > > ,
106+ #[ clap( long) ]
107+ environmentd_node_selector : Vec < KeyValueArg < String , String > > ,
108+ #[ clap( long, value_parser = parse_affinity) ]
109+ environmentd_affinity : Option < Affinity > ,
110+ #[ clap( long = "environmentd-toleration" , value_parser = parse_tolerations) ]
111+ environmentd_tolerations : Option < Vec < Toleration > > ,
112+ #[ clap( long, value_parser = parse_resources) ]
113+ environmentd_default_resources : Option < ResourceRequirements > ,
114+ #[ clap( long) ]
115+ clusterd_node_selector : Vec < KeyValueArg < String , String > > ,
116+ #[ clap( long, value_parser = parse_affinity) ]
117+ clusterd_affinity : Option < Affinity > ,
118+ #[ clap( long = "clusterd-toleration" , value_parser = parse_tolerations) ]
119+ clusterd_tolerations : Option < Vec < Toleration > > ,
120+ #[ clap( long) ]
121+ balancerd_node_selector : Vec < KeyValueArg < String , String > > ,
122+ #[ clap( long, value_parser = parse_affinity) ]
123+ balancerd_affinity : Option < Affinity > ,
124+ #[ clap( long = "balancerd-toleration" , value_parser = parse_tolerations) ]
125+ balancerd_tolerations : Option < Vec < Toleration > > ,
126+ #[ clap( long, value_parser = parse_resources) ]
127+ balancerd_default_resources : Option < ResourceRequirements > ,
128+ #[ clap( long) ]
129+ console_node_selector : Vec < KeyValueArg < String , String > > ,
130+ #[ clap( long, value_parser = parse_affinity) ]
131+ console_affinity : Option < Affinity > ,
132+ #[ clap( long = "console-toleration" , value_parser = parse_tolerations) ]
133+ console_tolerations : Option < Vec < Toleration > > ,
134+ #[ clap( long, value_parser = parse_resources) ]
135+ console_default_resources : Option < ResourceRequirements > ,
136+ #[ clap( long, default_value = "always" , value_enum) ]
137+ image_pull_policy : KubernetesImagePullPolicy ,
138+ #[ clap( long) ]
139+ network_policies_internal_enabled : bool ,
140+ #[ clap( long) ]
141+ network_policies_ingress_enabled : bool ,
142+ #[ clap( long) ]
143+ network_policies_ingress_cidrs : Vec < String > ,
144+ #[ clap( long) ]
145+ network_policies_egress_enabled : bool ,
146+ #[ clap( long) ]
147+ network_policies_egress_cidrs : Vec < String > ,
148+
149+ #[ clap( long) ]
150+ environmentd_cluster_replica_sizes : Option < String > ,
151+ #[ clap( long) ]
152+ bootstrap_default_cluster_replica_size : Option < String > ,
153+ #[ clap( long) ]
154+ bootstrap_builtin_system_cluster_replica_size : Option < String > ,
155+ #[ clap( long) ]
156+ bootstrap_builtin_probe_cluster_replica_size : Option < String > ,
157+ #[ clap( long) ]
158+ bootstrap_builtin_support_cluster_replica_size : Option < String > ,
159+ #[ clap( long) ]
160+ bootstrap_builtin_catalog_server_cluster_replica_size : Option < String > ,
161+ #[ clap( long) ]
162+ bootstrap_builtin_analytics_cluster_replica_size : Option < String > ,
163+ #[ clap( long) ]
164+ bootstrap_builtin_system_cluster_replication_factor : Option < u32 > ,
165+ #[ clap( long) ]
166+ bootstrap_builtin_probe_cluster_replication_factor : Option < u32 > ,
167+ #[ clap( long) ]
168+ bootstrap_builtin_support_cluster_replication_factor : Option < u32 > ,
169+ #[ clap( long) ]
170+ bootstrap_builtin_analytics_cluster_replication_factor : Option < u32 > ,
171+
172+ #[ clap(
173+ long,
174+ default_values = & [ "http://local.dev.materialize.com:3000" , "http://local.mtrlz.com:3000" , "http://localhost:3000" , "https://staging.console.materialize.com" ] ,
175+ ) ]
176+ environmentd_allowed_origins : Vec < HeaderValue > ,
177+ #[ clap( long, default_value = "https://console.materialize.com" ) ]
178+ internal_console_proxy_url : String ,
179+
180+ #[ clap( long, default_value = "6875" ) ]
181+ environmentd_sql_port : u16 ,
182+ #[ clap( long, default_value = "6876" ) ]
183+ environmentd_http_port : u16 ,
184+ #[ clap( long, default_value = "6877" ) ]
185+ environmentd_internal_sql_port : u16 ,
186+ #[ clap( long, default_value = "6878" ) ]
187+ environmentd_internal_http_port : u16 ,
188+ #[ clap( long, default_value = "6879" ) ]
189+ environmentd_internal_persist_pubsub_port : u16 ,
190+
191+ #[ clap( long, default_value = "6875" ) ]
192+ balancerd_sql_port : u16 ,
193+ #[ clap( long, default_value = "6876" ) ]
194+ balancerd_http_port : u16 ,
195+ #[ clap( long, default_value = "8080" ) ]
196+ balancerd_internal_http_port : u16 ,
197+
198+ #[ clap( long, default_value = "8080" ) ]
199+ console_http_port : u16 ,
200+
201+ #[ clap( long, default_value = "{}" ) ]
202+ default_certificate_specs : DefaultCertificateSpecs ,
203+
204+ #[ clap( long, hide = true ) ]
205+ disable_license_key_checks : bool ,
50206
51207 #[ clap( flatten) ]
52208 tracing : TracingCliArgs ,
@@ -55,6 +211,18 @@ pub struct Args {
55211 additional_crd_columns : Option < std:: vec:: Vec < CustomResourceColumnDefinition > > ,
56212}
57213
214+ fn parse_affinity ( s : & str ) -> anyhow:: Result < Affinity > {
215+ Ok ( serde_json:: from_str ( s) ?)
216+ }
217+
218+ fn parse_tolerations ( s : & str ) -> anyhow:: Result < Toleration > {
219+ Ok ( serde_json:: from_str ( s) ?)
220+ }
221+
222+ fn parse_resources ( s : & str ) -> anyhow:: Result < ResourceRequirements > {
223+ Ok ( serde_json:: from_str ( s) ?)
224+ }
225+
58226fn parse_crd_columns ( val : & str ) -> Result < Vec < CustomResourceColumnDefinition > , serde_json:: Error > {
59227 serde_json:: from_str ( val)
60228}
@@ -130,10 +298,90 @@ async fn run(args: Args) -> Result<(), anyhow::Error> {
130298 || "materialize controller" ,
131299 k8s_controller:: Controller :: namespaced_all (
132300 client. clone ( ) ,
133- mz_orchestratord:: controller:: materialize:: Context :: new (
134- args. materialize_controller_args ,
135- args. tracing ,
136- namespace,
301+ controller:: materialize:: Context :: new (
302+ controller:: materialize:: Config {
303+ cloud_provider : args. cloud_provider ,
304+ region : args. region ,
305+ create_balancers : args. create_balancers ,
306+ create_console : args. create_console ,
307+ helm_chart_version : args. helm_chart_version ,
308+ secrets_controller : args. secrets_controller ,
309+ collect_pod_metrics : args. collect_pod_metrics ,
310+ enable_prometheus_scrape_annotations : args. enable_prometheus_scrape_annotations ,
311+ segment_api_key : args. segment_api_key ,
312+ segment_client_side : args. segment_client_side ,
313+ console_image_tag_default : args. console_image_tag_default ,
314+ console_image_tag_map : args. console_image_tag_map ,
315+ aws_account_id : args. aws_account_id ,
316+ environmentd_iam_role_arn : args. environmentd_iam_role_arn ,
317+ environmentd_connection_role_arn : args. environmentd_connection_role_arn ,
318+ aws_secrets_controller_tags : args. aws_secrets_controller_tags ,
319+ environmentd_availability_zones : args. environmentd_availability_zones ,
320+ ephemeral_volume_class : args. ephemeral_volume_class ,
321+ scheduler_name : args. scheduler_name ,
322+ enable_security_context : args. enable_security_context ,
323+ enable_internal_statement_logging : args. enable_internal_statement_logging ,
324+ disable_statement_logging : args. disable_statement_logging ,
325+ orchestratord_pod_selector_labels : args. orchestratord_pod_selector_labels ,
326+ environmentd_node_selector : args. environmentd_node_selector ,
327+ environmentd_affinity : args. environmentd_affinity ,
328+ environmentd_tolerations : args. environmentd_tolerations ,
329+ environmentd_default_resources : args. environmentd_default_resources ,
330+ clusterd_node_selector : args. clusterd_node_selector ,
331+ clusterd_affinity : args. clusterd_affinity ,
332+ clusterd_tolerations : args. clusterd_tolerations ,
333+ balancerd_node_selector : args. balancerd_node_selector ,
334+ balancerd_affinity : args. balancerd_affinity ,
335+ balancerd_tolerations : args. balancerd_tolerations ,
336+ balancerd_default_resources : args. balancerd_default_resources ,
337+ console_node_selector : args. console_node_selector ,
338+ console_affinity : args. console_affinity ,
339+ console_tolerations : args. console_tolerations ,
340+ console_default_resources : args. console_default_resources ,
341+ image_pull_policy : args. image_pull_policy ,
342+ network_policies_internal_enabled : args. network_policies_internal_enabled ,
343+ network_policies_ingress_enabled : args. network_policies_ingress_enabled ,
344+ network_policies_ingress_cidrs : args. network_policies_ingress_cidrs ,
345+ network_policies_egress_enabled : args. network_policies_egress_enabled ,
346+ network_policies_egress_cidrs : args. network_policies_egress_cidrs ,
347+ environmentd_cluster_replica_sizes : args. environmentd_cluster_replica_sizes ,
348+ bootstrap_default_cluster_replica_size : args
349+ . bootstrap_default_cluster_replica_size ,
350+ bootstrap_builtin_system_cluster_replica_size : args
351+ . bootstrap_builtin_system_cluster_replica_size ,
352+ bootstrap_builtin_probe_cluster_replica_size : args
353+ . bootstrap_builtin_probe_cluster_replica_size ,
354+ bootstrap_builtin_support_cluster_replica_size : args
355+ . bootstrap_builtin_support_cluster_replica_size ,
356+ bootstrap_builtin_catalog_server_cluster_replica_size : args
357+ . bootstrap_builtin_catalog_server_cluster_replica_size ,
358+ bootstrap_builtin_analytics_cluster_replica_size : args
359+ . bootstrap_builtin_analytics_cluster_replica_size ,
360+ bootstrap_builtin_system_cluster_replication_factor : args
361+ . bootstrap_builtin_system_cluster_replication_factor ,
362+ bootstrap_builtin_probe_cluster_replication_factor : args
363+ . bootstrap_builtin_probe_cluster_replication_factor ,
364+ bootstrap_builtin_support_cluster_replication_factor : args
365+ . bootstrap_builtin_support_cluster_replication_factor ,
366+ bootstrap_builtin_analytics_cluster_replication_factor : args
367+ . bootstrap_builtin_analytics_cluster_replication_factor ,
368+ environmentd_allowed_origins : args. environmentd_allowed_origins ,
369+ internal_console_proxy_url : args. internal_console_proxy_url ,
370+ environmentd_sql_port : args. environmentd_sql_port ,
371+ environmentd_http_port : args. environmentd_http_port ,
372+ environmentd_internal_sql_port : args. environmentd_internal_sql_port ,
373+ environmentd_internal_http_port : args. environmentd_internal_http_port ,
374+ environmentd_internal_persist_pubsub_port : args
375+ . environmentd_internal_persist_pubsub_port ,
376+ balancerd_sql_port : args. balancerd_sql_port ,
377+ balancerd_http_port : args. balancerd_http_port ,
378+ balancerd_internal_http_port : args. balancerd_internal_http_port ,
379+ console_http_port : args. console_http_port ,
380+ default_certificate_specs : args. default_certificate_specs ,
381+ disable_license_key_checks : args. disable_license_key_checks ,
382+ tracing : args. tracing ,
383+ orchestratord_namespace : namespace,
384+ } ,
137385 Arc :: clone ( & metrics) ,
138386 client. clone ( ) ,
139387 )
0 commit comments