in main.go [110:194]
func main() {
opts := setFlags() // Add our options to flag set.
klog.InitFlags(nil) // Add klog options to flag set.
flag.Parse()
ctrl.SetLogger(klogr.New())
// Setup CloudStack api client.
client, err := cloud.NewClient(opts.CloudConfigFile)
if err != nil {
if !strings.Contains(err.Error(), "Timeout") {
setupLog.Error(err, "unable to start manager")
os.Exit(1)
}
setupLog.Info("cannot connect to CloudStack via client at startup time. Pressing onward...")
}
setupLog.Info("CloudStack client initialized.")
// Create the controller manager.
mgr, err := ctrl.NewManager(ctrl.GetConfigOrDie(), ctrl.Options{
Scheme: scheme,
MetricsBindAddress: opts.MetricsAddr,
Port: 9443,
HealthProbeBindAddress: opts.ProbeAddr,
LeaderElection: opts.EnableLeaderElection,
LeaderElectionID: "capc-leader-election-controller",
Namespace: opts.WatchingNamespace,
CertDir: opts.CertDir,
})
if err != nil {
setupLog.Error(err, "unable to start manager")
os.Exit(1)
}
// Register machine and cluster reconcilers with the controller manager.
if err = (&controllers.CloudStackClusterReconciler{
Client: mgr.GetClient(),
Log: ctrl.Log.WithName("controllers").WithName("Cluster"),
Scheme: mgr.GetScheme(),
CS: client,
}).SetupWithManager(mgr); err != nil {
setupLog.Error(err, "unable to create controller", "controller", "CloudStackCluster")
os.Exit(1)
}
if err = (&controllers.CloudStackMachineReconciler{
Client: mgr.GetClient(),
Log: ctrl.Log.WithName("controllers").WithName("Machine"),
Scheme: mgr.GetScheme(),
CS: client,
}).SetupWithManager(mgr); err != nil {
setupLog.Error(err, "unable to create controller", "controller", "CloudStackMachine")
os.Exit(1)
}
//+kubebuilder:scaffold:builder
// Add health and ready checks.
if err = mgr.AddHealthzCheck("healthz", healthz.Ping); err != nil {
setupLog.Error(err, "unable to set up health check")
os.Exit(1)
}
if err = mgr.AddReadyzCheck("readyz", healthz.Ping); err != nil {
setupLog.Error(err, "unable to set up ready check")
os.Exit(1)
}
// Start the controller manager.
if err = (&infrav1.CloudStackCluster{}).SetupWebhookWithManager(mgr); err != nil {
setupLog.Error(err, "unable to create webhook", "webhook", "CloudStackCluster")
os.Exit(1)
}
if err = (&infrav1.CloudStackMachine{}).SetupWebhookWithManager(mgr); err != nil {
setupLog.Error(err, "unable to create webhook", "webhook", "CloudStackMachine")
os.Exit(1)
}
if err = (&infrav1.CloudStackMachineTemplate{}).SetupWebhookWithManager(mgr); err != nil {
setupLog.Error(err, "unable to create webhook", "webhook", "CloudStackMachineTemplate")
os.Exit(1)
}
setupLog.Info("starting manager")
if err := mgr.Start(ctrl.SetupSignalHandler()); err != nil {
setupLog.Error(err, "problem running manager")
os.Exit(1)
}
}