@@ -21,6 +21,7 @@ import (
2121 "fmt"
2222 "io"
2323 "os"
24+ "strings"
2425 "time"
2526
2627 "github.com/scaleway/scaleway-sdk-go/logger"
@@ -42,6 +43,14 @@ const (
4243
4344 // extraUserAgentEnv is the environment variable that adds some string at the end of the user agent
4445 extraUserAgentEnv = "EXTRA_USER_AGENT"
46+ // disableInterfacesEnv is the environment variable used to disable some cloud interfaces
47+ disableInterfacesEnv = "DISABLE_INTERFACES"
48+ instancesInterfaceName = "instances"
49+ loadBalancerInterfaceName = "loadbalancer"
50+ zonesInterfaceName = "zones"
51+
52+ // loadBalancerDefaultTypeEnv is the environment to choose the default LB type
53+ loadBalancerDefaultTypeEnv = "LB_DEFAULT_TYPE"
4554)
4655
4756type cloud struct {
@@ -84,12 +93,27 @@ func newCloud(config io.Reader) (cloudprovider.Interface, error) {
8493
8594 client := newClient (scwClient )
8695
96+ instancesInterface := newServers (client )
97+ loadbalancerInterface := newLoadbalancers (client , os .Getenv (loadBalancerDefaultTypeEnv ))
98+ zonesInterface := newZones (client )
99+
100+ for _ , disableInterface := range strings .Split (os .Getenv (disableInterfacesEnv ), "," ) {
101+ switch strings .ToLower (disableInterface ) {
102+ case instancesInterfaceName :
103+ instancesInterface = nil
104+ case loadBalancerInterfaceName :
105+ loadbalancerInterface = nil
106+ case zonesInterfaceName :
107+ zonesInterface = nil
108+ }
109+ }
110+
87111 return & cloud {
88112 client : client ,
89- instances : newServers ( client ) ,
90- instancesV2 : newServers ( client ) ,
91- zones : newZones ( client ) ,
92- loadbalancers : newLoadbalancers ( client ) ,
113+ instances : instancesInterface ,
114+ instancesV2 : instancesInterface ,
115+ zones : zonesInterface ,
116+ loadbalancers : loadbalancerInterface ,
93117 }, nil
94118}
95119
@@ -111,19 +135,19 @@ func (c *cloud) Initialize(clientBuilder cloudprovider.ControllerClientBuilder,
111135}
112136
113137func (c * cloud ) LoadBalancer () (cloudprovider.LoadBalancer , bool ) {
114- return c .loadbalancers , true
138+ return c .loadbalancers , c . loadbalancers != nil
115139}
116140
117141func (c * cloud ) Instances () (cloudprovider.Instances , bool ) {
118- return c .instances , true
142+ return c .instances , c . instances != nil
119143}
120144
121145func (c * cloud ) InstancesV2 () (cloudprovider.InstancesV2 , bool ) {
122- return c .instancesV2 , true
146+ return c .instancesV2 , c . instancesV2 != nil
123147}
124148
125149func (c * cloud ) Zones () (cloudprovider.Zones , bool ) {
126- return c .zones , true
150+ return c .zones , c . zones != nil
127151}
128152
129153// clusters is not implemented
0 commit comments