44
55use std:: sync:: Arc ;
66
7+ use anyhow:: anyhow;
78use clap:: Parser ;
8- use futures:: { FutureExt , StreamExt } ;
9+ use futures:: { FutureExt , StreamExt , TryFutureExt } ;
910use hdfs_controller:: HDFS_FULL_CONTROLLER_NAME ;
1011use stackable_operator:: {
1112 YamlSchema ,
@@ -35,7 +36,10 @@ use stackable_operator::{
3536use tracing:: info_span;
3637use tracing_futures:: Instrument ;
3738
38- use crate :: crd:: { HdfsCluster , HdfsClusterVersion , constants:: APP_NAME , v1alpha1} ;
39+ use crate :: {
40+ crd:: { HdfsCluster , HdfsClusterVersion , constants:: APP_NAME , v1alpha1} ,
41+ webhooks:: conversion:: create_webhook_server,
42+ } ;
3943
4044mod config;
4145mod container;
@@ -48,6 +52,7 @@ mod operations;
4852mod product_logging;
4953mod security;
5054mod service;
55+ mod webhooks;
5156
5257mod built_info {
5358 include ! ( concat!( env!( "OUT_DIR" ) , "/built.rs" ) ) ;
@@ -69,7 +74,7 @@ async fn main() -> anyhow::Result<()> {
6974 Command :: Crd => HdfsCluster :: merged_crd ( HdfsClusterVersion :: V1Alpha1 ) ?
7075 . print_yaml_schema ( built_info:: PKG_VERSION , SerializeOptions :: default ( ) ) ?,
7176 Command :: Run ( RunArguments {
72- operator_environment : _ ,
77+ operator_environment,
7378 watch_namespace,
7479 product_config,
7580 maintenance,
@@ -101,13 +106,25 @@ async fn main() -> anyhow::Result<()> {
101106 . run ( sigterm_watcher. handle ( ) )
102107 . map ( anyhow:: Ok ) ;
103108
109+ let client =
110+ client:: initialize_operator ( Some ( OPERATOR_NAME . to_string ( ) ) , & common. cluster_info )
111+ . await ?;
112+
113+ let webhook_server = create_webhook_server (
114+ & operator_environment,
115+ maintenance. disable_crd_maintenance ,
116+ client. as_kube_client ( ) ,
117+ )
118+ . await ?;
119+
120+ let webhook_server = webhook_server
121+ . run ( sigterm_watcher. handle ( ) )
122+ . map_err ( |err| anyhow ! ( err) . context ( "failed to run webhook server" ) ) ;
123+
104124 let product_config = product_config. load ( & [
105125 "deploy/config-spec/properties.yaml" ,
106126 "/etc/stackable/hdfs-operator/config-spec/properties.yaml" ,
107127 ] ) ?;
108- let client =
109- client:: initialize_operator ( Some ( OPERATOR_NAME . to_string ( ) ) , & common. cluster_info )
110- . await ?;
111128
112129 let ( store, store_w) = reflector:: store ( ) ;
113130
@@ -199,7 +216,7 @@ async fn main() -> anyhow::Result<()> {
199216 . map ( anyhow:: Ok ) ;
200217
201218 // kube-runtime's Controller will tokio::spawn each reconciliation, so this only concerns the internal watch machinery
202- futures:: try_join!( hdfs_controller, reflector, eos_checker) ?;
219+ futures:: try_join!( hdfs_controller, reflector, eos_checker, webhook_server ) ?;
203220 }
204221 } ;
205222
0 commit comments