22// This will need changes in our and upstream error types.
33#![ allow( clippy:: result_large_err) ]
44
5- use std:: { future :: Future , os:: unix:: prelude:: FileTypeExt , path:: PathBuf } ;
5+ use std:: { os:: unix:: prelude:: FileTypeExt , path:: PathBuf } ;
66
77use anyhow:: { Context , Ok , anyhow} ;
88use clap:: Parser ;
@@ -212,54 +212,47 @@ async fn main() -> anyhow::Result<()> {
212212 crd = v1alpha1:: TrustStore :: crd_name( )
213213 ) ) ;
214214
215- let ( webhook_server, initial_reconcile_rx ) = create_webhook_server (
215+ let ( webhook_server, _ ) = create_webhook_server (
216216 & operator_environment,
217217 maintenance. disable_crd_maintenance ,
218218 readiness_checks,
219219 client. as_kube_client ( ) ,
220220 )
221221 . await ?;
222222
223- // Here, we multiply the initial reconcile signal received by the oneshot receiver
224- // to be able to pass it to both the default custom resource deployer and to delay
225- // the startup of the controller.
226- let initial_reconcile_signal =
227- SignalWatcher :: new ( initial_reconcile_rx. map ( |_| ( ) ) ) ;
228-
229223 let webhook_server = webhook_server
230224 . run ( sigterm_watcher. handle ( ) )
231225 . map_err ( |err| anyhow ! ( err) . context ( "failed to run webhook server" ) ) ;
232226
233- let ca_secret_namespace = tls_secretclass_ca_secret_namespace
234- . unwrap_or ( operator_environment. operator_namespace . clone ( ) ) ;
235-
236- let default_secretclass = create_default_secretclass (
237- initial_reconcile_signal. handle ( ) ,
238- ca_secret_namespace,
239- client. clone ( ) ,
240- )
241- . map_err ( |err| {
242- anyhow ! ( err) . context ( "failed to apply default custom resources" )
243- } ) ;
244-
245- let truststore_controller = truststore_controller:: start (
246- client. clone ( ) ,
247- & watch_namespace,
248- sigterm_watcher. handle ( ) ,
249- )
250- . map ( anyhow:: Ok ) ;
251-
252- let delayed_truststore_controller = async {
227+ let truststore_controller_and_secret_class = async {
253228 signal:: crd_established ( & client, v1alpha2:: SecretClass :: crd_name ( ) ) . await ?;
254229 secret_class_crd_check. mark_passed ( ) ;
255230 signal:: crd_established ( & client, v1alpha1:: TrustStore :: crd_name ( ) ) . await ?;
256231 trust_store_crd_check. mark_passed ( ) ;
257- truststore_controller. await
232+
233+ let truststore_controller = truststore_controller:: start (
234+ client. clone ( ) ,
235+ & watch_namespace,
236+ sigterm_watcher. handle ( ) ,
237+ )
238+ . map ( anyhow:: Ok ) ;
239+
240+ let ca_secret_namespace = tls_secretclass_ca_secret_namespace
241+ . unwrap_or ( operator_environment. operator_namespace . clone ( ) ) ;
242+
243+ // Only create the secret class after the CRDs are established
244+ let default_secretclass =
245+ create_default_secretclass ( ca_secret_namespace, client. clone ( ) )
246+ . map_err ( |err| {
247+ anyhow ! ( err) . context ( "failed to apply default custom resources" )
248+ } ) ;
249+
250+ try_join ! ( truststore_controller, default_secretclass) ?;
251+ Ok ( ( ) )
258252 } ;
259253
260254 try_join ! (
261- delayed_truststore_controller,
262- default_secretclass,
255+ truststore_controller_and_secret_class,
263256 webhook_server,
264257 eos_checker,
265258 ) ?;
@@ -272,12 +265,9 @@ async fn main() -> anyhow::Result<()> {
272265}
273266
274267async fn create_default_secretclass (
275- initial_reconcile_signal : impl Future < Output = ( ) > ,
276268 ca_secret_namespace : String ,
277269 client : Client ,
278270) -> anyhow:: Result < ( ) > {
279- initial_reconcile_signal. await ;
280-
281271 tracing:: info!( "applying default secretclass" ) ;
282272
283273 let deserializer = serde_yaml:: Deserializer :: from_slice ( include_bytes ! ( "secretclass.yaml" ) ) ;
0 commit comments