@@ -21,6 +21,7 @@ import (
2121 "sync"
2222
2323 "github.com/go-logr/logr"
24+ "github.com/oracle/cluster-api-provider-oci/api/v1beta2"
2425 "github.com/oracle/cluster-api-provider-oci/cloud/services/base"
2526 "github.com/oracle/cluster-api-provider-oci/cloud/services/compute"
2627 "github.com/oracle/cluster-api-provider-oci/cloud/services/computemanagement"
@@ -58,26 +59,42 @@ type ClientProvider struct {
5859 ociClients map [string ]OCIClients
5960 ociClientsLock * sync.RWMutex
6061 ociAuthConfigProvider common.ConfigurationProvider
62+ ociClientOverrides * v1beta2.ClientOverrides
63+ }
64+
65+ // ClientProviderParams is the params struct for NewClientProvider
66+ type ClientProviderParams struct {
67+ // OciAuthConfigProvider wraps information about the account owner
68+ OciAuthConfigProvider common.ConfigurationProvider
69+
70+ // ClientOverrides contains information about client host url overrides.
71+ ClientOverrides * v1beta2.ClientOverrides
6172}
6273
6374// NewClientProvider builds the ClientProvider with a client for the given region
64- func NewClientProvider (ociAuthConfigProvider common. ConfigurationProvider ) (* ClientProvider , error ) {
75+ func NewClientProvider (params ClientProviderParams ) (* ClientProvider , error ) {
6576 log := klogr .New ()
6677
67- if ociAuthConfigProvider == nil {
78+ if params . OciAuthConfigProvider == nil {
6879 return nil , errors .New ("ConfigurationProvider can not be nil" )
6980 }
7081
7182 provider := ClientProvider {
7283 Logger : & log ,
73- ociAuthConfigProvider : ociAuthConfigProvider ,
84+ ociAuthConfigProvider : params . OciAuthConfigProvider ,
7485 ociClients : map [string ]OCIClients {},
7586 ociClientsLock : new (sync.RWMutex ),
87+ ociClientOverrides : params .ClientOverrides ,
7688 }
7789
7890 return & provider , nil
7991}
8092
93+ // GetAuthProvider returns the client provider auth config
94+ func (c * ClientProvider ) GetAuthProvider () common.ConfigurationProvider {
95+ return c .ociAuthConfigProvider
96+ }
97+
8198// GetOrBuildClient if the OCIClients exist for the region they are returned, if not clients will build them
8299func (c * ClientProvider ) GetOrBuildClient (region string ) (OCIClients , error ) {
83100 if len (region ) <= 0 {
@@ -94,7 +111,7 @@ func (c *ClientProvider) GetOrBuildClient(region string) (OCIClients, error) {
94111
95112 c .ociClientsLock .Lock ()
96113 defer c .ociClientsLock .Unlock ()
97- regionalClient , err := createClients (region , c . ociAuthConfigProvider , c . Logger )
114+ regionalClient , err := c . createClients (region )
98115 if err != nil {
99116 return regionalClient , err
100117 }
@@ -108,36 +125,36 @@ func (c *ClientProvider) GetRegion() (string, error) {
108125 return c .ociAuthConfigProvider .Region ()
109126}
110127
111- func createClients (region string , oCIAuthConfigProvider common. ConfigurationProvider , logger * logr. Logger ) (OCIClients , error ) {
112- vcnClient , err := createVncClient (region , oCIAuthConfigProvider , logger )
128+ func ( c * ClientProvider ) createClients (region string ) (OCIClients , error ) {
129+ vcnClient , err := c . createVncClient (region , c . ociAuthConfigProvider , c . Logger )
113130 if err != nil {
114131 return OCIClients {}, err
115132 }
116- nlbClient , err := createNLbClient (region , oCIAuthConfigProvider , logger )
133+ nlbClient , err := c . createNLbClient (region , c . ociAuthConfigProvider , c . Logger )
117134 if err != nil {
118135 return OCIClients {}, err
119136 }
120- lbClient , err := createLBClient (region , oCIAuthConfigProvider , logger )
137+ lbClient , err := c . createLBClient (region , c . ociAuthConfigProvider , c . Logger )
121138 if err != nil {
122139 return OCIClients {}, err
123140 }
124- identityClient , err := createIdentityClient (region , oCIAuthConfigProvider , logger )
141+ identityClient , err := c . createIdentityClient (region , c . ociAuthConfigProvider , c . Logger )
125142 if err != nil {
126143 return OCIClients {}, err
127144 }
128- computeClient , err := createComputeClient (region , oCIAuthConfigProvider , logger )
145+ computeClient , err := c . createComputeClient (region , c . ociAuthConfigProvider , c . Logger )
129146 if err != nil {
130147 return OCIClients {}, err
131148 }
132- computeManagementClient , err := createComputeManagementClient (region , oCIAuthConfigProvider , logger )
149+ computeManagementClient , err := c . createComputeManagementClient (region , c . ociAuthConfigProvider , c . Logger )
133150 if err != nil {
134151 return OCIClients {}, err
135152 }
136- containerEngineClient , err := createContainerEngineClient (region , oCIAuthConfigProvider , logger )
153+ containerEngineClient , err := c . createContainerEngineClient (region , c . ociAuthConfigProvider , c . Logger )
137154 if err != nil {
138155 return OCIClients {}, err
139156 }
140- baseClient , err := createBaseClient (region , oCIAuthConfigProvider , logger )
157+ baseClient , err := c . createBaseClient (region , c . ociAuthConfigProvider , c . Logger )
141158 if err != nil {
142159 return OCIClients {}, err
143160 }
@@ -158,91 +175,113 @@ func createClients(region string, oCIAuthConfigProvider common.ConfigurationProv
158175 }, err
159176}
160177
161- func createVncClient (region string , ociAuthConfigProvider common.ConfigurationProvider , logger * logr.Logger ) (* core.VirtualNetworkClient , error ) {
178+ func ( c * ClientProvider ) createVncClient (region string , ociAuthConfigProvider common.ConfigurationProvider , logger * logr.Logger ) (* core.VirtualNetworkClient , error ) {
162179 vcnClient , err := core .NewVirtualNetworkClientWithConfigurationProvider (ociAuthConfigProvider )
163180 if err != nil {
164181 logger .Error (err , "unable to create OCI VCN Client" )
165182 return nil , err
166183 }
167184 vcnClient .SetRegion (region )
185+ if c .ociClientOverrides != nil && c .ociClientOverrides .VCNClientUrl != nil {
186+ vcnClient .Host = * c .ociClientOverrides .VCNClientUrl
187+ }
168188 vcnClient .Interceptor = setVersionHeader ()
169189
170190 return & vcnClient , nil
171191}
172192
173- func createNLbClient (region string , ociAuthConfigProvider common.ConfigurationProvider , logger * logr.Logger ) (* networkloadbalancer.NetworkLoadBalancerClient , error ) {
193+ func ( c * ClientProvider ) createNLbClient (region string , ociAuthConfigProvider common.ConfigurationProvider , logger * logr.Logger ) (* networkloadbalancer.NetworkLoadBalancerClient , error ) {
174194 nlbClient , err := networkloadbalancer .NewNetworkLoadBalancerClientWithConfigurationProvider (ociAuthConfigProvider )
175195 if err != nil {
176196 logger .Error (err , "unable to create OCI LB Client" )
177197 return nil , err
178198 }
179199 nlbClient .SetRegion (region )
200+ if c .ociClientOverrides != nil && c .ociClientOverrides .NetworkLoadBalancerClientUrl != nil {
201+ nlbClient .Host = * c .ociClientOverrides .NetworkLoadBalancerClientUrl
202+ }
180203 nlbClient .Interceptor = setVersionHeader ()
181204
182205 return & nlbClient , nil
183206}
184207
185- func createLBClient (region string , ociAuthConfigProvider common.ConfigurationProvider , logger * logr.Logger ) (* loadbalancer.LoadBalancerClient , error ) {
208+ func ( c * ClientProvider ) createLBClient (region string , ociAuthConfigProvider common.ConfigurationProvider , logger * logr.Logger ) (* loadbalancer.LoadBalancerClient , error ) {
186209 lbClient , err := loadbalancer .NewLoadBalancerClientWithConfigurationProvider (ociAuthConfigProvider )
187210 if err != nil {
188211 logger .Error (err , "unable to create OCI LBaaS Client" )
189212 return nil , err
190213 }
191214 lbClient .SetRegion (region )
215+ if c .ociClientOverrides != nil && c .ociClientOverrides .LoadBalancerClientUrl != nil {
216+ lbClient .Host = * c .ociClientOverrides .LoadBalancerClientUrl
217+ }
192218 lbClient .Interceptor = setVersionHeader ()
193219
194220 return & lbClient , nil
195221}
196222
197- func createIdentityClient (region string , ociAuthConfigProvider common.ConfigurationProvider , logger * logr.Logger ) (* identity.IdentityClient , error ) {
223+ func ( c * ClientProvider ) createIdentityClient (region string , ociAuthConfigProvider common.ConfigurationProvider , logger * logr.Logger ) (* identity.IdentityClient , error ) {
198224 identityClient , err := identity .NewIdentityClientWithConfigurationProvider (ociAuthConfigProvider )
199225 if err != nil {
200226 logger .Error (err , "unable to create OCI Identity Client" )
201227 return nil , err
202228 }
203229 identityClient .SetRegion (region )
230+
231+ if c .ociClientOverrides != nil && c .ociClientOverrides .IdentityClientUrl != nil {
232+ identityClient .Host = * c .ociClientOverrides .IdentityClientUrl
233+ }
204234 identityClient .Interceptor = setVersionHeader ()
205235
206236 return & identityClient , nil
207237}
208238
209- func createComputeClient (region string , ociAuthConfigProvider common.ConfigurationProvider , logger * logr.Logger ) (* core.ComputeClient , error ) {
239+ func ( c * ClientProvider ) createComputeClient (region string , ociAuthConfigProvider common.ConfigurationProvider , logger * logr.Logger ) (* core.ComputeClient , error ) {
210240 computeClient , err := core .NewComputeClientWithConfigurationProvider (ociAuthConfigProvider )
211241 if err != nil {
212242 logger .Error (err , "unable to create OCI Compute Client" )
213243 return nil , err
214244 }
215245 computeClient .SetRegion (region )
246+ if c .ociClientOverrides != nil && c .ociClientOverrides .ComputeClientUrl != nil {
247+ computeClient .Host = * c .ociClientOverrides .ComputeClientUrl
248+ }
216249 computeClient .Interceptor = setVersionHeader ()
217250
218251 return & computeClient , nil
219252}
220253
221- func createComputeManagementClient (region string , ociAuthConfigProvider common.ConfigurationProvider , logger * logr.Logger ) (* core.ComputeManagementClient , error ) {
254+ func ( c * ClientProvider ) createComputeManagementClient (region string , ociAuthConfigProvider common.ConfigurationProvider , logger * logr.Logger ) (* core.ComputeManagementClient , error ) {
222255 computeManagementClient , err := core .NewComputeManagementClientWithConfigurationProvider (ociAuthConfigProvider )
223256 if err != nil {
224257 logger .Error (err , "unable to create OCI Compute Management Client" )
225258 return nil , err
226259 }
227260 computeManagementClient .SetRegion (region )
261+ if c .ociClientOverrides != nil && c .ociClientOverrides .ComputeManagementClientUrl != nil {
262+ computeManagementClient .Host = * c .ociClientOverrides .ComputeManagementClientUrl
263+ }
228264 computeManagementClient .Interceptor = setVersionHeader ()
229265
230266 return & computeManagementClient , nil
231267}
232268
233- func createContainerEngineClient (region string , ociAuthConfigProvider common.ConfigurationProvider , logger * logr.Logger ) (* containerengine.ContainerEngineClient , error ) {
269+ func ( c * ClientProvider ) createContainerEngineClient (region string , ociAuthConfigProvider common.ConfigurationProvider , logger * logr.Logger ) (* containerengine.ContainerEngineClient , error ) {
234270 containerEngineClient , err := containerengine .NewContainerEngineClientWithConfigurationProvider (ociAuthConfigProvider )
235271 if err != nil {
236272 logger .Error (err , "unable to create OCI Container Engine Client" )
237273 return nil , err
238274 }
239275 containerEngineClient .SetRegion (region )
276+ if c .ociClientOverrides != nil && c .ociClientOverrides .ContainerEngineClientUrl != nil {
277+ containerEngineClient .Host = * c .ociClientOverrides .ContainerEngineClientUrl
278+ }
240279 containerEngineClient .Interceptor = setVersionHeader ()
241280
242281 return & containerEngineClient , nil
243282}
244283
245- func createBaseClient (region string , ociAuthConfigProvider common.ConfigurationProvider , logger * logr.Logger ) (base.BaseClient , error ) {
284+ func ( c * ClientProvider ) createBaseClient (region string , ociAuthConfigProvider common.ConfigurationProvider , logger * logr.Logger ) (base.BaseClient , error ) {
246285 baseClient , err := base .NewBaseClient (ociAuthConfigProvider , logger )
247286 if err != nil {
248287 logger .Error (err , "unable to create OCI Base Client" )
0 commit comments