@@ -3,6 +3,7 @@ package caodeploy
33import (
44 "context"
55 "fmt"
6+ "log"
67 "time"
78
89 "github.com/couchbase/gocbcorex"
@@ -442,7 +443,9 @@ func (d *Deployer) NewCluster(ctx context.Context, def *clusterdef.Cluster) (dep
442443 if isOpenShift {
443444 // In OpenShift, the only way to access the cluster is through a route, so we
444445 // set it up by default every time the cluster is allocated.
445- err = d .EnableIngresses (ctx , clusterID .String ())
446+ ingressMode := def .Cao .Ingress
447+
448+ err = d .EnableIngresses (ctx , clusterID .String (), ingressMode )
446449 if err != nil {
447450 return nil , errors .Wrap (err , "failed to enable ingresses" )
448451 }
@@ -654,7 +657,7 @@ func (d *Deployer) enableIngressesViaVirtualService(ctx context.Context, cluster
654657 return nil
655658}
656659
657- func (d * Deployer ) EnableIngresses (ctx context.Context , clusterID string ) error {
660+ func (d * Deployer ) EnableIngresses (ctx context.Context , clusterID string , ingressMode string ) error {
658661 isOpenShift , err := d .client .IsOpenShift (ctx )
659662 if err != nil {
660663 return errors .Wrap (err , "failed to detect whether we are using openshift" )
@@ -664,12 +667,20 @@ func (d *Deployer) EnableIngresses(ctx context.Context, clusterID string) error
664667 return errors .New ("ingresses are currently only supported with openshift" )
665668 }
666669
670+ if ingressMode == "" {
671+ ingressMode = "route"
672+ }
673+
674+ if ingressMode == "gateway" && d .sharedGateway == "" {
675+ return errors .New ("ingress mode 'gateway' requires a shared gateway to be configured at init time" )
676+ }
677+
667678 namespace , err := d .getClusterNamespace (ctx , clusterID )
668679 if err != nil {
669680 return err
670681 }
671682
672- if d . sharedGateway != " " {
683+ if ingressMode == "gateway " {
673684 return d .enableIngressesViaVirtualService (ctx , clusterID , namespace )
674685 }
675686
@@ -735,39 +746,31 @@ func (d *Deployer) DisableIngresses(ctx context.Context, clusterID string) error
735746 return err
736747 }
737748
738- if d .sharedGateway != "" {
739- allDeletesFailed := true
740-
741- err = d .client .DeleteVirtualService (ctx , namespace , "cng" )
742- if err != nil {
743- d .logger .Debug ("failed to delete cng virtual service" , zap .Error (err ))
744- } else {
745- allDeletesFailed = false
746- }
747-
748- err = d .client .DeleteVirtualService (ctx , namespace , "ui" )
749- if err != nil {
750- d .logger .Debug ("failed to delete ui virtual service" , zap .Error (err ))
751- } else {
752- allDeletesFailed = false
753- }
754-
755- err = d .client .DeleteDestinationRule (ctx , namespace , "cng-tls" )
756- if err != nil {
757- d .logger .Debug ("failed to delete cng destination rule" , zap .Error (err ))
758- } else {
759- allDeletesFailed = false
760- }
749+ allDeletesFailed := true
761750
762- if allDeletesFailed {
763- return errors .New ("virtual service deletions failed" )
764- }
751+ // Try deleting virtual service resources (gateway mode)
752+ err = d .client .DeleteVirtualService (ctx , namespace , "cng" )
753+ if err != nil {
754+ d .logger .Debug ("failed to delete cng virtual service" , zap .Error (err ))
755+ } else {
756+ allDeletesFailed = false
757+ }
765758
766- return nil
759+ err = d .client .DeleteVirtualService (ctx , namespace , "ui" )
760+ if err != nil {
761+ d .logger .Debug ("failed to delete ui virtual service" , zap .Error (err ))
762+ } else {
763+ allDeletesFailed = false
767764 }
768765
769- allDeletesFailed := true
766+ err = d .client .DeleteDestinationRule (ctx , namespace , "cng-tls" )
767+ if err != nil {
768+ d .logger .Debug ("failed to delete cng destination rule" , zap .Error (err ))
769+ } else {
770+ allDeletesFailed = false
771+ }
770772
773+ // Try deleting route resources (route mode)
771774 err = d .client .DeleteRoute (ctx , namespace , "ui" )
772775 if err != nil {
773776 d .logger .Debug ("failed to delete ui route" , zap .Error (err ))
@@ -783,7 +786,7 @@ func (d *Deployer) DisableIngresses(ctx context.Context, clusterID string) error
783786 }
784787
785788 if allDeletesFailed {
786- return errors .New ("route deletions failed" )
789+ return errors .New ("ingress deletions failed" )
787790 }
788791
789792 return nil
@@ -878,24 +881,6 @@ func (d *Deployer) GetConnectInfo(ctx context.Context, clusterID string) (*deplo
878881}
879882
880883func (d * Deployer ) GetIngressConnectInfo (ctx context.Context , clusterID string ) (* deployment.ConnectInfo , error ) {
881- if d .sharedGateway != "" {
882- baseDomain , err := d .getSharedGatewayBaseDomain (ctx )
883- if err != nil {
884- return nil , err
885- }
886-
887- cngHost := fmt .Sprintf ("cng-%s.%s" , clusterID , baseDomain )
888- uiHost := fmt .Sprintf ("ui-%s.%s" , clusterID , baseDomain )
889-
890- return & deployment.ConnectInfo {
891- ConnStr : "" ,
892- ConnStrTls : "" ,
893- ConnStrCb2 : fmt .Sprintf ("couchbase2://%s:443" , cngHost ),
894- Mgmt : "" ,
895- MgmtTls : fmt .Sprintf ("https://%s:443" , uiHost ),
896- }, nil
897- }
898-
899884 namespaceName , err := d .getClusterNamespace (ctx , clusterID )
900885 if err != nil {
901886 return nil , err
@@ -904,14 +889,40 @@ func (d *Deployer) GetIngressConnectInfo(ctx context.Context, clusterID string)
904889 var mgmtTlsAddr string
905890 var connstrCb2 string
906891
907- uiHost , err := d .client .GetRouteHost (ctx , namespaceName , "ui" )
908- if err == nil {
909- mgmtTlsAddr = fmt .Sprintf ("https://%s:443" , uiHost )
892+ // Try route mode first (default)
893+ if mgmtTlsAddr == "" {
894+ uiHost , err := d .client .GetRouteHost (ctx , namespaceName , "ui" )
895+ log .Printf ("uiHost: %s %+v" , uiHost , err )
896+ if err == nil {
897+ mgmtTlsAddr = fmt .Sprintf ("https://%s:443" , uiHost )
898+ }
910899 }
911900
912- cngHost , err := d .client .GetRouteHost (ctx , namespaceName , "cng" )
913- if err == nil {
914- connstrCb2 = fmt .Sprintf ("couchbase2://%s:443" , cngHost )
901+ if connstrCb2 == "" {
902+ cngHost , err := d .client .GetRouteHost (ctx , namespaceName , "cng" )
903+ log .Printf ("cngHost: %s %+v" , cngHost , err )
904+ if err == nil {
905+ connstrCb2 = fmt .Sprintf ("couchbase2://%s:443" , cngHost )
906+ }
907+ }
908+
909+ // if shared gateway is configured, check that too
910+ if d .sharedGateway != "" {
911+ baseDomain , err := d .getSharedGatewayBaseDomain (ctx )
912+
913+ if mgmtTlsAddr == "" {
914+ err = d .client .GetVirtualService (ctx , namespaceName , "ui" )
915+ if err == nil {
916+ mgmtTlsAddr = fmt .Sprintf ("https://ui-%s.%s:443" , clusterID , baseDomain )
917+ }
918+ }
919+
920+ if connstrCb2 == "" {
921+ err = d .client .GetVirtualService (ctx , namespaceName , "cng" )
922+ if err == nil {
923+ connstrCb2 = fmt .Sprintf ("couchbase2://cng-%s.%s:443" , clusterID , baseDomain )
924+ }
925+ }
915926 }
916927
917928 return & deployment.ConnectInfo {
0 commit comments