@@ -58,18 +58,18 @@ func labelsForWireguard(name string) map[string]string {
5858 return map [string ]string {"app" : "wireguard" , "instance" : name }
5959}
6060
61- func (r * WireguardReconciler ) ConfigmapForWireguard (m * v1alpha1.Wireguard , hostname string ) * corev1.ConfigMap {
62- ls := labelsForWireguard (m .Name )
61+ func (r * WireguardReconciler ) ConfigmapForWireguard (m * v1alpha1.Wireguard , hostname string ) (* corev1.ConfigMap , error ) {
6362 dep := & corev1.ConfigMap {
6463 ObjectMeta : metav1.ObjectMeta {
6564 Name : m .Name + "-config" ,
6665 Namespace : m .Namespace ,
67- Labels : ls ,
66+ Labels : labelsForWireguard ( m . Name ) ,
6867 },
6968 }
70-
71- ctrl .SetControllerReference (m , dep , r .Scheme )
72- return dep
69+ if err := ctrl .SetControllerReference (m , dep , r .Scheme ); err != nil {
70+ return nil , fmt .Errorf ("set controller reference: %w" , err )
71+ }
72+ return dep , nil
7373}
7474
7575func (r * WireguardReconciler ) getWireguardPeers (ctx context.Context , req ctrl.Request ) (* v1alpha1.WireguardPeerList , error ) {
@@ -311,7 +311,11 @@ func (r *WireguardReconciler) Reconcile(ctx context.Context, req ctrl.Request) (
311311 err = r .Get (ctx , types.NamespacedName {Name : wireguard .Name + "-metrics-svc" , Namespace : wireguard .Namespace }, svcFound )
312312 if err != nil && errors .IsNotFound (err ) {
313313
314- svc := r .serviceForWireguardMetrics (wireguard )
314+ svc , err := r .serviceForWireguardMetrics (wireguard )
315+ if err != nil {
316+ return ctrl.Result {}, fmt .Errorf ("service for wireguard metrics: %w" , err )
317+ }
318+
315319 log .Info ("Creating a new service" , "service.Namespace" , svc .Namespace , "service.Name" , svc .Name )
316320 err = r .Create (ctx , svc )
317321 if err != nil {
@@ -357,7 +361,11 @@ func (r *WireguardReconciler) Reconcile(ctx context.Context, req ctrl.Request) (
357361
358362 err = r .Get (ctx , types.NamespacedName {Name : wireguard .Name + "-svc" , Namespace : wireguard .Namespace }, svcFound )
359363 if err != nil && errors .IsNotFound (err ) {
360- svc := r .serviceForWireguard (wireguard , serviceType )
364+ svc , err := r .serviceForWireguard (wireguard , serviceType )
365+ if err != nil {
366+ return ctrl.Result {}, fmt .Errorf ("service for wireguard: %w" , err )
367+ }
368+
361369 log .Info ("Creating a new service" , "service.Namespace" , svc .Namespace , "service.Name" , svc .Name )
362370 err = r .Create (ctx , svc )
363371 if err != nil {
@@ -468,10 +476,15 @@ func (r *WireguardReconciler) Reconcile(ctx context.Context, req ctrl.Request) (
468476
469477 if ! bytes .Equal (b , secret .Data ["state.json" ]) {
470478 log .Info ("Updating secret with new config" )
479+
471480 publicKey := string (secret .Data ["publicKey" ])
472481
473- err := r .Update ( ctx , r . secretForWireguard (wireguard , b , privateKey , publicKey ) )
482+ secret , err := r .secretForWireguard (wireguard , b , privateKey , publicKey )
474483 if err != nil {
484+ return ctrl.Result {}, fmt .Errorf ("secret for wireguard: %w" , err )
485+ }
486+
487+ if err := r .Update (ctx , secret ); err != nil {
475488 log .Error (err , "Failed to update secret with new config" )
476489 return ctrl.Result {}, err
477490 }
@@ -523,14 +536,39 @@ func (r *WireguardReconciler) Reconcile(ctx context.Context, req ctrl.Request) (
523536 return ctrl.Result {}, err
524537 }
525538
526- secret := r .secretForWireguard (wireguard , b , privateKey , publicKey )
539+ bytes .Equal (b , secret .Data ["state" ])
540+
541+ secret , err := r .secretForWireguard (wireguard , b , privateKey , publicKey )
542+ if err != nil {
543+ return ctrl.Result {}, fmt .Errorf ("secret for wireguard: %w" , err )
544+ }
527545
528546 log .Info ("Creating a new secret" , "secret.Namespace" , secret .Namespace , "secret.Name" , secret .Name )
529547
530548 if err := r .Create (ctx , secret ); err != nil {
531549 log .Error (err , "Failed to create new secret" , "secret.Namespace" , secret .Namespace , "secret.Name" , secret .Name )
532550 return ctrl.Result {}, err
533551 }
552+
553+ clientKey , err := wgtypes .GeneratePrivateKey ()
554+
555+ if err != nil {
556+ log .Error (err , "Failed to generate private key" )
557+ return ctrl.Result {}, err
558+ }
559+
560+ clientSecret , err := r .secretForClient (wireguard , clientKey .String (), clientKey .PublicKey ().String ())
561+ if err != nil {
562+ return ctrl.Result {}, fmt .Errorf ("secret for client: %w" , err )
563+ }
564+
565+ log .Info ("Creating a new secret" , "secret.Namespace" , clientSecret .Namespace , "secret.Name" , clientSecret .Name )
566+ err = r .Create (ctx , clientSecret )
567+ if err != nil {
568+ log .Error (err , "Failed to create new secret" , "secret.Namespace" , clientSecret .Namespace , "secret.Name" , clientSecret .Name )
569+ return ctrl.Result {}, err
570+ }
571+
534572 return ctrl.Result {}, err
535573 } else if err != nil {
536574 log .Error (err , "Failed to get secret" )
@@ -542,10 +580,14 @@ func (r *WireguardReconciler) Reconcile(ctx context.Context, req ctrl.Request) (
542580 configFound := & corev1.ConfigMap {}
543581 err = r .Get (ctx , types.NamespacedName {Name : wireguard .Name + "-config" , Namespace : wireguard .Namespace }, configFound )
544582 if err != nil && errors .IsNotFound (err ) {
545- config := r .ConfigmapForWireguard (wireguard , address )
546- log .Info ("Creating a new config" , "config.Namespace" , config .Namespace , "config.Name" , config .Name )
547- err = r .Create (ctx , config )
583+ config , err := r .ConfigmapForWireguard (wireguard , address )
548584 if err != nil {
585+ return ctrl.Result {}, fmt .Errorf ("config map for wireguard: %w" , err )
586+ }
587+
588+ log .Info ("Creating a new config" , "config.Namespace" , config .Namespace , "config.Name" , config .Name )
589+
590+ if err := r .Create (ctx , config ); err != nil {
549591 log .Error (err , "Failed to create new dep" , "dep.Namespace" , config .Namespace , "dep.Name" , config .Name )
550592 return ctrl.Result {}, err
551593 }
@@ -563,7 +605,11 @@ func (r *WireguardReconciler) Reconcile(ctx context.Context, req ctrl.Request) (
563605 deploymentFound := & appsv1.Deployment {}
564606 err = r .Get (ctx , types.NamespacedName {Name : wireguard .Name + "-dep" , Namespace : wireguard .Namespace }, deploymentFound )
565607 if err != nil && errors .IsNotFound (err ) {
566- dep := r .deploymentForWireguard (wireguard )
608+ dep , err := r .deploymentForWireguard (wireguard )
609+ if err != nil {
610+ return ctrl.Result {}, fmt .Errorf ("deployment for wireguard: %w" , err )
611+ }
612+
567613 log .Info ("Creating a new dep" , "dep.Namespace" , dep .Namespace , "dep.Name" , dep .Name )
568614 err = r .Create (ctx , dep )
569615 if err != nil {
@@ -578,9 +624,12 @@ func (r *WireguardReconciler) Reconcile(ctx context.Context, req ctrl.Request) (
578624 }
579625
580626 if deploymentFound .Spec .Template .Spec .Containers [0 ].Image != r .AgentImage {
581- dep := r .deploymentForWireguard (wireguard )
582- err = r .Update (ctx , dep )
627+ dep , err := r .deploymentForWireguard (wireguard )
583628 if err != nil {
629+ return ctrl.Result {}, fmt .Errorf ("deployment for wireguard: %w" , err )
630+ }
631+
632+ if err := r .Update (ctx , dep ); err != nil {
584633 log .Error (err , "unable to update deployment image" , "dep.Namespace" , dep .Namespace , "dep.Name" , dep .Name )
585634 return ctrl.Result {}, err
586635 }
@@ -613,10 +662,10 @@ func (r *WireguardReconciler) SetupWithManager(mgr ctrl.Manager) error {
613662 Complete (r )
614663}
615664
616- func (r * WireguardReconciler ) serviceForWireguard (m * v1alpha1.Wireguard , serviceType corev1.ServiceType ) * corev1.Service {
665+ func (r * WireguardReconciler ) serviceForWireguard (m * v1alpha1.Wireguard , serviceType corev1.ServiceType ) ( * corev1.Service , error ) {
617666 labels := labelsForWireguard (m .Name )
618667
619- dep := & corev1.Service {
668+ svc := & corev1.Service {
620669 ObjectMeta : metav1.ObjectMeta {
621670 Name : m .Name + "-svc" ,
622671 Namespace : m .Namespace ,
@@ -636,14 +685,16 @@ func (r *WireguardReconciler) serviceForWireguard(m *v1alpha1.Wireguard, service
636685 },
637686 }
638687
639- ctrl .SetControllerReference (m , dep , r .Scheme )
640- return dep
688+ if err := ctrl .SetControllerReference (m , svc , r .Scheme ); err != nil {
689+ return nil , fmt .Errorf ("set controller reference: %w" , err )
690+ }
691+ return svc , nil
641692}
642693
643- func (r * WireguardReconciler ) serviceForWireguardMetrics (m * v1alpha1.Wireguard ) * corev1.Service {
694+ func (r * WireguardReconciler ) serviceForWireguardMetrics (m * v1alpha1.Wireguard ) ( * corev1.Service , error ) {
644695 labels := labelsForWireguard (m .Name )
645696
646- dep := & corev1.Service {
697+ svc := & corev1.Service {
647698 ObjectMeta : metav1.ObjectMeta {
648699 Name : m .Name + "-metrics-svc" ,
649700 Namespace : m .Namespace ,
@@ -661,29 +712,48 @@ func (r *WireguardReconciler) serviceForWireguardMetrics(m *v1alpha1.Wireguard)
661712 },
662713 }
663714
664- ctrl .SetControllerReference (m , dep , r .Scheme )
665- return dep
715+ if err := ctrl .SetControllerReference (m , svc , r .Scheme ); err != nil {
716+ return nil , fmt .Errorf ("set controller reference: %w" , err )
717+ }
718+ return svc , nil
666719}
667720
668- func (r * WireguardReconciler ) secretForWireguard (m * v1alpha1.Wireguard , state []byte , privateKey string , publicKey string ) * corev1.Secret {
669-
670- ls := labelsForWireguard (m .Name )
671- dep := & corev1.Secret {
721+ func (r * WireguardReconciler ) secretForWireguard (m * v1alpha1.Wireguard , state []byte , privateKey string , publicKey string ) (* corev1.Secret , error ) {
722+ secret := & corev1.Secret {
672723 ObjectMeta : metav1.ObjectMeta {
673724 Name : m .Name ,
674725 Namespace : m .Namespace ,
675- Labels : ls ,
726+ Labels : labelsForWireguard ( m . Name ) ,
676727 },
677728 Data : map [string ][]byte {"state.json" : state , "privateKey" : []byte (privateKey ), "publicKey" : []byte (publicKey )},
678729 }
679730
680- ctrl .SetControllerReference (m , dep , r .Scheme )
731+ if err := ctrl .SetControllerReference (m , secret , r .Scheme ); err != nil {
732+ return nil , fmt .Errorf ("set controller reference: %w" , err )
733+ }
734+
735+ return secret , nil
736+
737+ }
738+
739+ func (r * WireguardReconciler ) secretForClient (m * v1alpha1.Wireguard , privateKey string , publicKey string ) (* corev1.Secret , error ) {
740+ secret := & corev1.Secret {
741+ ObjectMeta : metav1.ObjectMeta {
742+ Name : m .Name + "-client" ,
743+ Namespace : m .Namespace ,
744+ Labels : labelsForWireguard (m .Name ),
745+ },
746+ Data : map [string ][]byte {"privateKey" : []byte (privateKey ), "publicKey" : []byte (publicKey )},
747+ }
681748
682- return dep
749+ if err := ctrl .SetControllerReference (m , secret , r .Scheme ); err != nil {
750+ return nil , fmt .Errorf ("set controller reference: %w" , err )
751+ }
752+ return secret , nil
683753
684754}
685755
686- func (r * WireguardReconciler ) deploymentForWireguard (m * v1alpha1.Wireguard ) * appsv1.Deployment {
756+ func (r * WireguardReconciler ) deploymentForWireguard (m * v1alpha1.Wireguard ) ( * appsv1.Deployment , error ) {
687757 ls := labelsForWireguard (m .Name )
688758 replicas := int32 (1 )
689759
@@ -826,6 +896,8 @@ func (r *WireguardReconciler) deploymentForWireguard(m *v1alpha1.Wireguard) *app
826896 }
827897 }
828898
829- ctrl .SetControllerReference (m , dep , r .Scheme )
830- return dep
899+ if err := ctrl .SetControllerReference (m , dep , r .Scheme ); err != nil {
900+ return dep , fmt .Errorf ("set controller reference: %w" , err )
901+ }
902+ return dep , nil
831903}
0 commit comments