@@ -36,7 +36,7 @@ func (i instances) AddClient(datacenterId string, token []byte) error {
3636}
3737
3838// no caching
39- func (i instances ) discoverNode (ctx context.Context , node * v1.Node ) (* cloudprovider.InstanceMetadata , error ) {
39+ func (i instances ) discoverNode (ctx context.Context , node * v1.Node ) (* cloudprovider.InstanceMetadata , * client2. IONOSClient , error ) {
4040 for _ , client := range i .ionosClients {
4141 var err error
4242 var server * cloudprovider.InstanceMetadata
@@ -48,32 +48,49 @@ func (i instances) discoverNode(ctx context.Context, node *v1.Node) (*cloudprovi
4848 server , err = client .GetServerByName (ctx , node .Name )
4949 }
5050 if err != nil {
51- return nil , fmt .Errorf ("failed to discoverNode %v" , err )
51+ return nil , nil , fmt .Errorf ("failed to discoverNode %v" , err )
5252 }
5353 if server == nil {
5454 continue
5555 }
56- return server , nil
56+ return server , client , nil
5757 }
58- return nil , errors . New ( "failed to discoverNode" )
58+ return nil , nil , nil
5959}
6060
6161func (i instances ) InstanceExists (ctx context.Context , node * v1.Node ) (bool , error ) {
6262 klog .Infof ("InstanceExists %s" , node .Name )
63- server , err := i .discoverNode (ctx , node )
63+ server , _ , err := i .discoverNode (ctx , node )
6464 klog .InfoDepth (1 , server )
6565 return server != nil , err
6666}
6767
68- func (i instances ) InstanceShutdown (_ context.Context , node * v1.Node ) (bool , error ) {
68+ func (i instances ) InstanceShutdown (ctx context.Context , node * v1.Node ) (bool , error ) {
6969 klog .Infof ("InstanceShutdown %s" , node .Name )
70- // TODO check here for mounted volumes
70+ server , client , err := i .discoverNode (ctx , node )
71+ if (server == nil && err == nil ) || server == nil {
72+ return true , nil
73+ }
74+
75+ volumes , err := client .GetServerVolumes (ctx , server .ProviderID )
76+ if err != nil {
77+ return false , err
78+ }
79+
80+ for _ , volume := range volumes {
81+ if strings .HasPrefix (volume .Name , "csi-pv.k8s." ) {
82+ return false , nil
83+ }
84+ }
7185 return true , nil
7286}
7387
7488func (i instances ) InstanceMetadata (ctx context.Context , node * v1.Node ) (* cloudprovider.InstanceMetadata , error ) {
7589 klog .Infof ("InstanceMetadata %s" , node .Name )
76- server , err := i .discoverNode (ctx , node )
90+ server , _ , err := i .discoverNode (ctx , node )
91+ if server == nil && err == nil {
92+ return nil , errors .New ("failed to discoverNode" )
93+ }
7794 klog .InfoDepth (1 , server )
7895 return server , err
7996}
0 commit comments