33#![ allow( clippy:: result_large_err) ]
44use std:: sync:: Arc ;
55
6+ use anyhow:: anyhow;
67use clap:: Parser ;
78use crd:: {
89 APP_NAME , OPERATOR_NAME , ZookeeperCluster , ZookeeperClusterVersion , ZookeeperZnode ,
910 ZookeeperZnodeVersion , v1alpha1,
1011} ;
11- use futures:: { FutureExt , StreamExt } ;
12+ use futures:: { FutureExt , StreamExt , TryFutureExt } ;
1213use stackable_operator:: {
1314 YamlSchema ,
1415 cli:: { Command , RunArguments } ,
@@ -33,7 +34,10 @@ use stackable_operator::{
3334 utils:: signal:: SignalWatcher ,
3435} ;
3536
36- use crate :: { zk_controller:: ZK_FULL_CONTROLLER_NAME , znode_controller:: ZNODE_FULL_CONTROLLER_NAME } ;
37+ use crate :: {
38+ webhooks:: conversion:: create_webhook_server, zk_controller:: ZK_FULL_CONTROLLER_NAME ,
39+ znode_controller:: ZNODE_FULL_CONTROLLER_NAME ,
40+ } ;
3741
3842mod command;
3943mod config;
@@ -44,6 +48,7 @@ mod operations;
4448mod product_logging;
4549mod service;
4650mod utils;
51+ mod webhooks;
4752mod zk_controller;
4853mod znode_controller;
4954
@@ -69,9 +74,9 @@ async fn main() -> anyhow::Result<()> {
6974 . print_yaml_schema ( built_info:: PKG_VERSION , SerializeOptions :: default ( ) ) ?;
7075 }
7176 Command :: Run ( RunArguments {
72- product_config ,
77+ operator_environment ,
7378 watch_namespace,
74- operator_environment : _ ,
79+ product_config ,
7580 maintenance,
7681 common,
7782 } ) => {
@@ -101,17 +106,28 @@ async fn main() -> anyhow::Result<()> {
101106 . run ( sigterm_watcher. handle ( ) )
102107 . map ( anyhow:: Ok ) ;
103108
104- let product_config = product_config. load ( & [
105- "deploy/config-spec/properties.yaml" ,
106- "/etc/stackable/zookeeper-operator/config-spec/properties.yaml" ,
107- ] ) ?;
108-
109109 let client = stackable_operator:: client:: initialize_operator (
110110 Some ( OPERATOR_NAME . to_string ( ) ) ,
111111 & common. cluster_info ,
112112 )
113113 . await ?;
114114
115+ let webhook_server = create_webhook_server (
116+ & operator_environment,
117+ maintenance. disable_crd_maintenance ,
118+ client. as_kube_client ( ) ,
119+ )
120+ . await ?;
121+
122+ let webhook_server = webhook_server
123+ . run ( sigterm_watcher. handle ( ) )
124+ . map_err ( |err| anyhow ! ( err) . context ( "failed to run webhook server" ) ) ;
125+
126+ let product_config = product_config. load ( & [
127+ "deploy/config-spec/properties.yaml" ,
128+ "/etc/stackable/zookeeper-operator/config-spec/properties.yaml" ,
129+ ] ) ?;
130+
115131 let zk_controller = Controller :: new (
116132 watch_namespace. get_api :: < DeserializeGuard < v1alpha1:: ZookeeperCluster > > ( & client) ,
117133 watcher:: Config :: default ( ) ,
@@ -230,7 +246,7 @@ async fn main() -> anyhow::Result<()> {
230246 . map ( anyhow:: Ok ) ;
231247
232248 // kube-runtime's Controller will tokio::spawn each reconciliation, so this only concerns the internal watch machinery
233- futures:: try_join!( zk_controller, znode_controller, eos_checker) ?;
249+ futures:: try_join!( zk_controller, znode_controller, eos_checker, webhook_server ) ?;
234250 }
235251 }
236252
0 commit comments