@@ -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 {
@@ -83,11 +92,26 @@ func newCloud(config io.Reader) (cloudprovider.Interface, error) {
8392
8493 client := newClient (scwClient )
8594
95+ instancesInterface := newServers (client )
96+ loadbalancerInterface := newLoadbalancers (client , os .Getenv (loadBalancerDefaultTypeEnv ))
97+ zonesInterface := newZones (client )
98+
99+ for _ , disableInterface := range strings .Split (os .Getenv (disableInterfacesEnv ), "," ) {
100+ switch strings .ToLower (disableInterface ) {
101+ case instancesInterfaceName :
102+ instancesInterface = nil
103+ case loadBalancerInterfaceName :
104+ loadbalancerInterface = nil
105+ case zonesInterfaceName :
106+ zonesInterface = nil
107+ }
108+ }
109+
86110 return & cloud {
87111 client : client ,
88- instances : newServers ( client ) ,
89- zones : newZones ( client ) ,
90- loadbalancers : newLoadbalancers ( client ) ,
112+ instances : instancesInterface ,
113+ zones : zonesInterface ,
114+ loadbalancers : loadbalancerInterface ,
91115 }, nil
92116}
93117
@@ -109,15 +133,15 @@ func (c *cloud) Initialize(clientBuilder cloudprovider.ControllerClientBuilder,
109133}
110134
111135func (c * cloud ) LoadBalancer () (cloudprovider.LoadBalancer , bool ) {
112- return c .loadbalancers , true
136+ return c .loadbalancers , c . loadbalancers != nil
113137}
114138
115139func (c * cloud ) Instances () (cloudprovider.Instances , bool ) {
116- return c .instances , true
140+ return c .instances , c . instances != nil
117141}
118142
119143func (c * cloud ) Zones () (cloudprovider.Zones , bool ) {
120- return c .zones , true
144+ return c .zones , c . zones != nil
121145}
122146
123147// clusters is not implemented
0 commit comments